Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Cryptography / HashAlgorithm.cs / 1305376 / HashAlgorithm.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // HashAlgorithm.cs // namespace System.Security.Cryptography { using System.IO; using System.Diagnostics.Contracts; [System.Runtime.InteropServices.ComVisible(true)] public abstract class HashAlgorithm : IDisposable, ICryptoTransform { protected int HashSizeValue; protected internal byte[] HashValue; protected int State = 0; private bool m_bDisposed = false; protected HashAlgorithm() {} // // public properties // public virtual int HashSize { get { return HashSizeValue; } } public virtual byte[] Hash { get { if (m_bDisposed) throw new ObjectDisposedException(null); if (State != 0) throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_HashNotYetFinalized")); return (byte[]) HashValue.Clone(); } } // // public methods // [System.Security.SecuritySafeCritical] // auto-generated static public HashAlgorithm Create() { return Create("System.Security.Cryptography.HashAlgorithm"); } [System.Security.SecuritySafeCritical] // auto-generated static public HashAlgorithm Create(String hashName) { return (HashAlgorithm) CryptoConfig.CreateFromName(hashName); } public byte[] ComputeHash(Stream inputStream) { if (m_bDisposed) throw new ObjectDisposedException(null); // Default the buffer size to 4K. byte[] buffer = new byte[4096]; int bytesRead; do { bytesRead = inputStream.Read(buffer, 0, 4096); if (bytesRead > 0) { HashCore(buffer, 0, bytesRead); } } while (bytesRead > 0); HashValue = HashFinal(); byte[] Tmp = (byte[]) HashValue.Clone(); Initialize(); return(Tmp); } public byte[] ComputeHash(byte[] buffer) { if (m_bDisposed) throw new ObjectDisposedException(null); // Do some validation if (buffer == null) throw new ArgumentNullException("buffer"); HashCore(buffer, 0, buffer.Length); HashValue = HashFinal(); byte[] Tmp = (byte[]) HashValue.Clone(); Initialize(); return(Tmp); } public byte[] ComputeHash(byte[] buffer, int offset, int count) { // Do some validation if (buffer == null) throw new ArgumentNullException("buffer"); if (offset < 0) throw new ArgumentOutOfRangeException("offset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (count < 0 || (count > buffer.Length)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((buffer.Length - count) < offset) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); Contract.EndContractBlock(); if (m_bDisposed) throw new ObjectDisposedException(null); HashCore(buffer, offset, count); HashValue = HashFinal(); byte[] Tmp = (byte[]) HashValue.Clone(); Initialize(); return(Tmp); } // ICryptoTransform methods // we assume any HashAlgorithm can take input a byte at a time public virtual int InputBlockSize { get { return(1); } } public virtual int OutputBlockSize { get { return(1); } } public virtual bool CanTransformMultipleBlocks { get { return(true); } } public virtual bool CanReuseTransform { get { return(true); } } // We implement TransformBlock and TransformFinalBlock here [System.Security.SecuritySafeCritical] // auto-generated public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { // Do some validation, we let BlockCopy do the destination array validation if (inputBuffer == null) throw new ArgumentNullException("inputBuffer"); if (inputOffset < 0) throw new ArgumentOutOfRangeException("inputOffset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (inputCount < 0 || (inputCount > inputBuffer.Length)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((inputBuffer.Length - inputCount) < inputOffset) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); Contract.EndContractBlock(); if (m_bDisposed) throw new ObjectDisposedException(null); // Change the State value State = 1; HashCore(inputBuffer, inputOffset, inputCount); if ((outputBuffer != null) && ((inputBuffer != outputBuffer) || (inputOffset != outputOffset))) Buffer.BlockCopy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount); return inputCount; } [System.Security.SecuritySafeCritical] // auto-generated public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { // Do some validation if (inputBuffer == null) throw new ArgumentNullException("inputBuffer"); if (inputOffset < 0) throw new ArgumentOutOfRangeException("inputOffset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (inputCount < 0 || (inputCount > inputBuffer.Length)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((inputBuffer.Length - inputCount) < inputOffset) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); Contract.EndContractBlock(); if (m_bDisposed) throw new ObjectDisposedException(null); HashCore(inputBuffer, inputOffset, inputCount); HashValue = HashFinal(); byte[] outputBytes = new byte[inputCount]; if (inputCount != 0) Buffer.InternalBlockCopy(inputBuffer, inputOffset, outputBytes, 0, inputCount); // reset the State value State = 0; return outputBytes; } // IDisposable methods // To keep mscorlib compatibility with Orcas, CoreCLR's HashAlgorithm has an explicit IDisposable // implementation. Post-Orcas the desktop has an implicit IDispoable implementation. #if FEATURE_CORECLR void IDisposable.Dispose() #if false { } #endif // false #else [System.Security.SecuritySafeCritical] // auto-generated public void Dispose() #endif // FEATURE_CORECLR { Dispose(true); GC.SuppressFinalize(this); } public void Clear() { (this as IDisposable).Dispose(); } protected virtual void Dispose(bool disposing) { if (disposing) { if (HashValue != null) Array.Clear(HashValue, 0, HashValue.Length); HashValue = null; m_bDisposed = true; } } // // abstract public methods // public abstract void Initialize(); protected abstract void HashCore(byte[] array, int ibStart, int cbSize); protected abstract byte[] HashFinal(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // HashAlgorithm.cs // namespace System.Security.Cryptography { using System.IO; using System.Diagnostics.Contracts; [System.Runtime.InteropServices.ComVisible(true)] public abstract class HashAlgorithm : IDisposable, ICryptoTransform { protected int HashSizeValue; protected internal byte[] HashValue; protected int State = 0; private bool m_bDisposed = false; protected HashAlgorithm() {} // // public properties // public virtual int HashSize { get { return HashSizeValue; } } public virtual byte[] Hash { get { if (m_bDisposed) throw new ObjectDisposedException(null); if (State != 0) throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_HashNotYetFinalized")); return (byte[]) HashValue.Clone(); } } // // public methods // [System.Security.SecuritySafeCritical] // auto-generated static public HashAlgorithm Create() { return Create("System.Security.Cryptography.HashAlgorithm"); } [System.Security.SecuritySafeCritical] // auto-generated static public HashAlgorithm Create(String hashName) { return (HashAlgorithm) CryptoConfig.CreateFromName(hashName); } public byte[] ComputeHash(Stream inputStream) { if (m_bDisposed) throw new ObjectDisposedException(null); // Default the buffer size to 4K. byte[] buffer = new byte[4096]; int bytesRead; do { bytesRead = inputStream.Read(buffer, 0, 4096); if (bytesRead > 0) { HashCore(buffer, 0, bytesRead); } } while (bytesRead > 0); HashValue = HashFinal(); byte[] Tmp = (byte[]) HashValue.Clone(); Initialize(); return(Tmp); } public byte[] ComputeHash(byte[] buffer) { if (m_bDisposed) throw new ObjectDisposedException(null); // Do some validation if (buffer == null) throw new ArgumentNullException("buffer"); HashCore(buffer, 0, buffer.Length); HashValue = HashFinal(); byte[] Tmp = (byte[]) HashValue.Clone(); Initialize(); return(Tmp); } public byte[] ComputeHash(byte[] buffer, int offset, int count) { // Do some validation if (buffer == null) throw new ArgumentNullException("buffer"); if (offset < 0) throw new ArgumentOutOfRangeException("offset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (count < 0 || (count > buffer.Length)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((buffer.Length - count) < offset) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); Contract.EndContractBlock(); if (m_bDisposed) throw new ObjectDisposedException(null); HashCore(buffer, offset, count); HashValue = HashFinal(); byte[] Tmp = (byte[]) HashValue.Clone(); Initialize(); return(Tmp); } // ICryptoTransform methods // we assume any HashAlgorithm can take input a byte at a time public virtual int InputBlockSize { get { return(1); } } public virtual int OutputBlockSize { get { return(1); } } public virtual bool CanTransformMultipleBlocks { get { return(true); } } public virtual bool CanReuseTransform { get { return(true); } } // We implement TransformBlock and TransformFinalBlock here [System.Security.SecuritySafeCritical] // auto-generated public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { // Do some validation, we let BlockCopy do the destination array validation if (inputBuffer == null) throw new ArgumentNullException("inputBuffer"); if (inputOffset < 0) throw new ArgumentOutOfRangeException("inputOffset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (inputCount < 0 || (inputCount > inputBuffer.Length)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((inputBuffer.Length - inputCount) < inputOffset) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); Contract.EndContractBlock(); if (m_bDisposed) throw new ObjectDisposedException(null); // Change the State value State = 1; HashCore(inputBuffer, inputOffset, inputCount); if ((outputBuffer != null) && ((inputBuffer != outputBuffer) || (inputOffset != outputOffset))) Buffer.BlockCopy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount); return inputCount; } [System.Security.SecuritySafeCritical] // auto-generated public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { // Do some validation if (inputBuffer == null) throw new ArgumentNullException("inputBuffer"); if (inputOffset < 0) throw new ArgumentOutOfRangeException("inputOffset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (inputCount < 0 || (inputCount > inputBuffer.Length)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue")); if ((inputBuffer.Length - inputCount) < inputOffset) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); Contract.EndContractBlock(); if (m_bDisposed) throw new ObjectDisposedException(null); HashCore(inputBuffer, inputOffset, inputCount); HashValue = HashFinal(); byte[] outputBytes = new byte[inputCount]; if (inputCount != 0) Buffer.InternalBlockCopy(inputBuffer, inputOffset, outputBytes, 0, inputCount); // reset the State value State = 0; return outputBytes; } // IDisposable methods // To keep mscorlib compatibility with Orcas, CoreCLR's HashAlgorithm has an explicit IDisposable // implementation. Post-Orcas the desktop has an implicit IDispoable implementation. #if FEATURE_CORECLR void IDisposable.Dispose() #if false { } #endif // false #else [System.Security.SecuritySafeCritical] // auto-generated public void Dispose() #endif // FEATURE_CORECLR { Dispose(true); GC.SuppressFinalize(this); } public void Clear() { (this as IDisposable).Dispose(); } protected virtual void Dispose(bool disposing) { if (disposing) { if (HashValue != null) Array.Clear(HashValue, 0, HashValue.Length); HashValue = null; m_bDisposed = true; } } // // abstract public methods // public abstract void Initialize(); protected abstract void HashCore(byte[] array, int ibStart, int cbSize); protected abstract byte[] HashFinal(); } } // 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
- DataGridViewCellMouseEventArgs.cs
- HashHelper.cs
- RegistryPermission.cs
- EnumMember.cs
- DigestComparer.cs
- OperationInfoBase.cs
- GestureRecognizer.cs
- WindowsScrollBarBits.cs
- ClientBuildManager.cs
- SystemIPv4InterfaceProperties.cs
- TypeContext.cs
- SuppressMessageAttribute.cs
- GrammarBuilder.cs
- StorageInfo.cs
- CustomError.cs
- DataObjectSettingDataEventArgs.cs
- XmlSchemaSequence.cs
- XmlElementAttribute.cs
- KnownTypesProvider.cs
- StylusDevice.cs
- processwaithandle.cs
- MarkupExtensionParser.cs
- UniqueID.cs
- EmptyWithCancelationCheckWorkItem.cs
- NTAccount.cs
- MsmqProcessProtocolHandler.cs
- SqlEnums.cs
- RequestCacheEntry.cs
- MethodBody.cs
- ValueChangedEventManager.cs
- DocComment.cs
- AssemblyName.cs
- EpmSyndicationContentDeSerializer.cs
- TcpSocketManager.cs
- ElasticEase.cs
- CodeAttributeDeclarationCollection.cs
- ContainerFilterService.cs
- Brushes.cs
- InternalCache.cs
- OracleEncoding.cs
- DrawingContextDrawingContextWalker.cs
- MimePart.cs
- OdbcEnvironmentHandle.cs
- QilInvokeEarlyBound.cs
- MobileContainerDesigner.cs
- ClassDataContract.cs
- IssuedTokenParametersEndpointAddressElement.cs
- TextDecorations.cs
- ClientOptions.cs
- updateconfighost.cs
- SoapSchemaImporter.cs
- __TransparentProxy.cs
- ExceptionUtil.cs
- WaitForChangedResult.cs
- SoundPlayer.cs
- IgnoreFileBuildProvider.cs
- RequestResizeEvent.cs
- Ref.cs
- CompressedStack.cs
- GetLedgerEntryForRecipientRequest.cs
- FilteredXmlReader.cs
- MissingManifestResourceException.cs
- MailBnfHelper.cs
- UIHelper.cs
- Table.cs
- DataSourceControl.cs
- PropertyDescriptor.cs
- Debugger.cs
- ConnectionManagementElement.cs
- BitStream.cs
- EastAsianLunisolarCalendar.cs
- ProfileEventArgs.cs
- PropertyManager.cs
- DateTimeFormatInfo.cs
- ResXResourceReader.cs
- BitSet.cs
- EmbeddedMailObjectCollectionEditor.cs
- SHA256Managed.cs
- AtomMaterializer.cs
- GenericTextProperties.cs
- Sequence.cs
- ColorIndependentAnimationStorage.cs
- DataGridViewCellPaintingEventArgs.cs
- QueryConverter.cs
- FileLoadException.cs
- EventProviderBase.cs
- Int32CAMarshaler.cs
- RequiredAttributeAttribute.cs
- SafeLibraryHandle.cs
- VisualCollection.cs
- MultiPropertyDescriptorGridEntry.cs
- JournalEntryStack.cs
- StorageMappingItemLoader.cs
- sapiproxy.cs
- Validator.cs
- TCPListener.cs
- EventlogProvider.cs
- NegotiateStream.cs
- FixedPage.cs
- Paragraph.cs