Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Security / Cryptography / TripleDES.cs / 1 / TripleDES.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // TripleDES.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public abstract class TripleDES : SymmetricAlgorithm { private static KeySizes[] s_legalBlockSizes = { new KeySizes(64, 64, 0) }; private static KeySizes[] s_legalKeySizes = { new KeySizes(2*64, 3*64, 64) }; // // protected constructors // protected TripleDES() { KeySizeValue = 3*64; BlockSizeValue = 64; FeedbackSizeValue = BlockSizeValue; LegalBlockSizesValue = s_legalBlockSizes; LegalKeySizesValue = s_legalKeySizes; } // // public properties // public override byte[] Key { get { if (KeyValue == null) { // Never hand back a weak key do { GenerateKey(); } while (IsWeakKey(KeyValue)); } return (byte[]) KeyValue.Clone(); } set { if (value == null) throw new ArgumentNullException("value"); if (!ValidKeySize(value.Length * 8)) { // must convert bytes to bits throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize")); } if (IsWeakKey(value)) { throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKey_Weak"),"TripleDES"); } KeyValue = (byte[]) value.Clone(); KeySizeValue = value.Length * 8; } } // // public methods // new static public TripleDES Create() { return Create("System.Security.Cryptography.TripleDES"); } new static public TripleDES Create(String str) { return (TripleDES) CryptoConfig.CreateFromName(str); } public static bool IsWeakKey(byte[] rgbKey) { // All we have to check for here is (a) we're in 3-key mode (192 bits), and // (b) either K1 == K2 or K2 == K3 if (!IsLegalKeySize(rgbKey)) { throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize")); } byte[] rgbOddParityKey = Utils.FixupKeyParity(rgbKey); if (EqualBytes(rgbOddParityKey,0,8,8)) return(true); if ((rgbOddParityKey.Length == 24) && EqualBytes(rgbOddParityKey,8,16,8)) return(true); return(false); } // // private methods // private static bool EqualBytes(byte[] rgbKey, int start1, int start2, int count) { if (start1 < 0) throw new ArgumentOutOfRangeException("start1", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (start2 < 0) throw new ArgumentOutOfRangeException("start2", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if ((start1+count) > rgbKey.Length) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((start2+count) > rgbKey.Length) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); for (int i = 0; i < count; i++) { if (rgbKey[start1+i] != rgbKey[start2+i]) return(false); } return(true); } private static bool IsLegalKeySize(byte[] rgbKey) { if (rgbKey != null && ((rgbKey.Length == 16) || (rgbKey.Length == 24))) return(true); return(false); } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RMEnrollmentPage2.cs
- ParallelTimeline.cs
- ServiceOperationParameter.cs
- PropVariant.cs
- SerializationTrace.cs
- IIS7WorkerRequest.cs
- SystemException.cs
- DataGridLinkButton.cs
- DragDeltaEventArgs.cs
- RichTextBox.cs
- LineGeometry.cs
- MutexSecurity.cs
- DrawingBrush.cs
- RangeValuePatternIdentifiers.cs
- FixedSOMGroup.cs
- MailAddress.cs
- SqlDataSourceCache.cs
- AttachedAnnotation.cs
- MethodSignatureGenerator.cs
- MultipleViewProviderWrapper.cs
- WizardStepBase.cs
- HierarchicalDataBoundControlAdapter.cs
- ProofTokenCryptoHandle.cs
- QilScopedVisitor.cs
- OracleConnectionString.cs
- RuntimeConfigLKG.cs
- ArraySet.cs
- XmlNodeChangedEventArgs.cs
- sqlpipe.cs
- COM2PropertyDescriptor.cs
- KnownAssembliesSet.cs
- XmlSignatureProperties.cs
- GlyphRunDrawing.cs
- DataBindingCollection.cs
- DbConnectionPoolGroup.cs
- ByteStreamGeometryContext.cs
- UInt64Converter.cs
- DataGridAutoFormat.cs
- EventArgs.cs
- BuildManagerHost.cs
- TemplateInstanceAttribute.cs
- UnsafeNativeMethods.cs
- DataGridBeginningEditEventArgs.cs
- ActivationServices.cs
- TimeoutValidationAttribute.cs
- GuidelineSet.cs
- RotationValidation.cs
- ExecutionContext.cs
- Point3DKeyFrameCollection.cs
- XamlFxTrace.cs
- DiagnosticSection.cs
- XMLUtil.cs
- EmptyStringExpandableObjectConverter.cs
- Pool.cs
- UnsettableComboBox.cs
- TextPattern.cs
- SequentialUshortCollection.cs
- InstanceDataCollection.cs
- SystemWebExtensionsSectionGroup.cs
- EndpointDiscoveryMetadataCD1.cs
- WebServiceReceive.cs
- Pair.cs
- MethodSignatureGenerator.cs
- InProcStateClientManager.cs
- AppSettingsReader.cs
- TerminateSequence.cs
- BaseValidator.cs
- RestHandlerFactory.cs
- ColorAnimationBase.cs
- AutomationAttributeInfo.cs
- BaseUriWithWildcard.cs
- CodeDOMUtility.cs
- panel.cs
- DecimalStorage.cs
- HttpRawResponse.cs
- ServiceDescription.cs
- OrderedDictionaryStateHelper.cs
- QilDataSource.cs
- DispatcherTimer.cs
- RootContext.cs
- ProfileEventArgs.cs
- HideDisabledControlAdapter.cs
- EventLogPermissionAttribute.cs
- BreakRecordTable.cs
- NetworkInformationException.cs
- ArgumentsParser.cs
- ClassHandlersStore.cs
- AssertFilter.cs
- InkCanvasAutomationPeer.cs
- ExtendedPropertyDescriptor.cs
- TextEditorCopyPaste.cs
- ConnectionStringsExpressionBuilder.cs
- GeneralTransform2DTo3DTo2D.cs
- NativeRecognizer.cs
- DomainUpDown.cs
- VirtualDirectoryMapping.cs
- IsolatedStorageFileStream.cs
- CfgRule.cs
- TextRunProperties.cs
- DataTablePropertyDescriptor.cs