Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Cryptography / TripleDES.cs / 1305376 / TripleDES.cs
using System.Diagnostics.Contracts; // ==++== // // 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"); Contract.EndContractBlock(); 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 // [System.Security.SecuritySafeCritical] // auto-generated new static public TripleDES Create() { return Create("System.Security.Cryptography.TripleDES"); } [System.Security.SecuritySafeCritical] // auto-generated 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")); Contract.EndContractBlock(); 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); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Emitter.cs
- DataQuery.cs
- DataGridViewCheckBoxColumn.cs
- AppLevelCompilationSectionCache.cs
- CultureInfoConverter.cs
- HyperLink.cs
- ActiveXHelper.cs
- HttpRuntimeSection.cs
- DesignerSerializerAttribute.cs
- DataBoundControl.cs
- VectorValueSerializer.cs
- Vector3DConverter.cs
- __Filters.cs
- XmlTextReaderImpl.cs
- SHA1.cs
- Configuration.cs
- CompilerInfo.cs
- DescendentsWalker.cs
- HttpRuntimeSection.cs
- StateMachineWorkflow.cs
- Trustee.cs
- StateInitialization.cs
- NavigationWindowAutomationPeer.cs
- OleDbErrorCollection.cs
- PropertyChangedEventArgs.cs
- HttpHandlersSection.cs
- UnsafeNativeMethodsPenimc.cs
- DocumentPaginator.cs
- ScrollPattern.cs
- SoapHeader.cs
- BuildProvider.cs
- DataServiceQueryException.cs
- SqlCrossApplyToCrossJoin.cs
- ConfigurationErrorsException.cs
- BamlBinaryReader.cs
- SocketPermission.cs
- CombinedTcpChannel.cs
- BindingContext.cs
- XmlSchemaExternal.cs
- OleServicesContext.cs
- WSHttpSecurity.cs
- SspiHelper.cs
- HtmlAnchor.cs
- SingleAnimationUsingKeyFrames.cs
- AttachedAnnotation.cs
- ErasingStroke.cs
- DtrList.cs
- GAC.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- QuaternionConverter.cs
- MessageQueueCriteria.cs
- ResourceSetExpression.cs
- OutputScope.cs
- HttpClientCredentialType.cs
- shaperfactoryquerycacheentry.cs
- ImageMapEventArgs.cs
- StoreContentChangedEventArgs.cs
- PropertyToken.cs
- AddInIpcChannel.cs
- MobileRedirect.cs
- BaseParaClient.cs
- GeometryCombineModeValidation.cs
- CatalogZoneAutoFormat.cs
- CharKeyFrameCollection.cs
- PrefixHandle.cs
- PermissionSetTriple.cs
- Rect3DConverter.cs
- XamlClipboardData.cs
- XmlLanguageConverter.cs
- HelpKeywordAttribute.cs
- ItemList.cs
- DependencyPropertyKey.cs
- Blend.cs
- TrackPointCollection.cs
- ComPersistableTypeElementCollection.cs
- ConfigXmlText.cs
- ConstantExpression.cs
- SafePEFileHandle.cs
- SharedDp.cs
- ToolStripGrip.cs
- TimeSpan.cs
- SqlCachedBuffer.cs
- PackageRelationship.cs
- MessagePartDescriptionCollection.cs
- XpsFilter.cs
- DiagnosticStrings.cs
- FixedSOMTableRow.cs
- LinkTarget.cs
- Thumb.cs
- ViewCellRelation.cs
- PanelDesigner.cs
- FrameworkRichTextComposition.cs
- Hashtable.cs
- TailCallAnalyzer.cs
- VisualStyleInformation.cs
- PassportPrincipal.cs
- DesigntimeLicenseContextSerializer.cs
- Shape.cs
- PropertyChangedEventManager.cs
- RSAOAEPKeyExchangeFormatter.cs