Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // 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); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListViewItemSelectionChangedEvent.cs
- SafeFileMappingHandle.cs
- DesignerAdapterUtil.cs
- Button.cs
- CornerRadius.cs
- LinkConverter.cs
- DoubleConverter.cs
- DrawingDrawingContext.cs
- Vector3DKeyFrameCollection.cs
- MimeParameterWriter.cs
- HtmlTernaryTree.cs
- FormViewInsertedEventArgs.cs
- HtmlInputControl.cs
- LineInfo.cs
- MetaForeignKeyColumn.cs
- Point3DConverter.cs
- TimeStampChecker.cs
- Material.cs
- GridViewRowCollection.cs
- WebPartCollection.cs
- FontSourceCollection.cs
- ComEventsInfo.cs
- UriSection.cs
- _LoggingObject.cs
- DeadCharTextComposition.cs
- WrappedIUnknown.cs
- XamlFigureLengthSerializer.cs
- _OverlappedAsyncResult.cs
- Int16KeyFrameCollection.cs
- VarRefManager.cs
- TextChange.cs
- COM2ExtendedTypeConverter.cs
- ReverseQueryOperator.cs
- CodeLinePragma.cs
- CryptographicAttribute.cs
- Constants.cs
- IisTraceWebEventProvider.cs
- ConstrainedDataObject.cs
- AutomationAttributeInfo.cs
- MetadataCache.cs
- NativeMethods.cs
- EventLogPermissionEntry.cs
- QilReplaceVisitor.cs
- Overlapped.cs
- SerTrace.cs
- CaseInsensitiveOrdinalStringComparer.cs
- XmlSchemaInclude.cs
- RequestResponse.cs
- StrongNameHelpers.cs
- TreeBuilderBamlTranslator.cs
- ValidationSummary.cs
- AssemblyAttributesGoHere.cs
- ConfigXmlElement.cs
- BamlResourceSerializer.cs
- TextRangeEditTables.cs
- StylusOverProperty.cs
- GroupBoxRenderer.cs
- SchemaDeclBase.cs
- HexParser.cs
- DataObjectCopyingEventArgs.cs
- FlowDocumentScrollViewer.cs
- XPathNodePointer.cs
- UriTemplateQueryValue.cs
- SpellerHighlightLayer.cs
- TriggerAction.cs
- AndCondition.cs
- EnumConverter.cs
- NamedObjectList.cs
- SelectedCellsChangedEventArgs.cs
- CertificateManager.cs
- XmlSerializerFormatAttribute.cs
- IriParsingElement.cs
- OrderPreservingMergeHelper.cs
- TextViewElement.cs
- FrameworkElement.cs
- TextBreakpoint.cs
- Inline.cs
- MexHttpBindingElement.cs
- Metafile.cs
- FlowDocumentPageViewerAutomationPeer.cs
- GroupLabel.cs
- XmlSchemaSimpleTypeUnion.cs
- XmlArrayItemAttribute.cs
- SqlBulkCopyColumnMapping.cs
- ConsoleEntryPoint.cs
- PackagingUtilities.cs
- MultiView.cs
- CheckBox.cs
- ConnectionInterfaceCollection.cs
- CodeTypeConstructor.cs
- RuntimeEnvironment.cs
- SecurityCookieModeValidator.cs
- TextWriterEngine.cs
- Base64Decoder.cs
- DiscoveryEndpoint.cs
- AutoResizedEvent.cs
- WebRequest.cs
- DirectoryObjectSecurity.cs
- SupportedAddressingMode.cs
- Span.cs