Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LocatorManager.cs
- DataServiceHostWrapper.cs
- WinCategoryAttribute.cs
- DistributedTransactionPermission.cs
- StringTraceRecord.cs
- ListView.cs
- SafeBitVector32.cs
- NameTable.cs
- OdbcRowUpdatingEvent.cs
- WaitHandle.cs
- RemotingException.cs
- PageSettings.cs
- DefaultParameterValueAttribute.cs
- ButtonColumn.cs
- SiteMap.cs
- MetadataHelper.cs
- Visual.cs
- ButtonPopupAdapter.cs
- DataMemberFieldEditor.cs
- PropertyDescriptorGridEntry.cs
- EditorZoneAutoFormat.cs
- dataSvcMapFileLoader.cs
- DictionaryBase.cs
- ReflectionServiceProvider.cs
- PolyBezierSegment.cs
- CharacterMetrics.cs
- FrameworkElementAutomationPeer.cs
- Assembly.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- MultiView.cs
- StateMachineWorkflowDesigner.cs
- SamlConstants.cs
- SqlRetyper.cs
- BitmapFrameEncode.cs
- WebPartDisplayModeCollection.cs
- dataprotectionpermissionattribute.cs
- ListBindableAttribute.cs
- __Error.cs
- MailWriter.cs
- EncodingInfo.cs
- TimeSpanStorage.cs
- TransformerInfo.cs
- Equal.cs
- HtmlSelect.cs
- DirectoryInfo.cs
- TdsParameterSetter.cs
- TextOnlyOutput.cs
- WorkflowInstanceExtensionManager.cs
- UndirectedGraph.cs
- IpcManager.cs
- SimpleBitVector32.cs
- XamlPathDataSerializer.cs
- ScriptingProfileServiceSection.cs
- FlowDecisionDesigner.xaml.cs
- HostedHttpTransportManager.cs
- User.cs
- ServiceProviders.cs
- MembershipValidatePasswordEventArgs.cs
- OleDbPermission.cs
- AdornerLayer.cs
- ProfileServiceManager.cs
- ArithmeticException.cs
- SystemNetHelpers.cs
- EncryptedKey.cs
- ScrollItemProviderWrapper.cs
- StringReader.cs
- XmlCollation.cs
- DecimalConstantAttribute.cs
- TransformConverter.cs
- AdapterUtil.cs
- TypedServiceChannelBuilder.cs
- ButtonBaseAutomationPeer.cs
- DesignerProperties.cs
- AndMessageFilterTable.cs
- FormattedText.cs
- BitStream.cs
- x509store.cs
- IBuiltInEvidence.cs
- SafeCryptContextHandle.cs
- OledbConnectionStringbuilder.cs
- RuleValidation.cs
- RectConverter.cs
- URIFormatException.cs
- Win32.cs
- TCEAdapterGenerator.cs
- EnvironmentPermission.cs
- PriorityQueue.cs
- SettingsPropertyNotFoundException.cs
- TextBoxAutoCompleteSourceConverter.cs
- ProcessHost.cs
- DoubleIndependentAnimationStorage.cs
- KeyInstance.cs
- TextTreeRootTextBlock.cs
- ParameterBinding.cs
- CellIdBoolean.cs
- Assert.cs
- ImmutablePropertyDescriptorGridEntry.cs
- SqlClientWrapperSmiStream.cs
- MetadataProperty.cs
- DynamicUpdateCommand.cs