SymmetricKey.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Tokens / SymmetricKey.cs / 1305376 / SymmetricKey.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.IdentityModel.Tokens 
{
    using System.IdentityModel.Selectors; 
    using System.Security.Cryptography; 

    public class InMemorySymmetricSecurityKey : SymmetricSecurityKey 
    {
        int keySize;
        byte[] symmetricKey;
 
        public InMemorySymmetricSecurityKey(byte[] symmetricKey)
            : this(symmetricKey, true) 
        { 
        }
 
        public InMemorySymmetricSecurityKey(byte[] symmetricKey, bool cloneBuffer)
        {
            if (symmetricKey == null)
            { 
                throw  DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("symmetricKey"));
            } 
 
            if (symmetricKey.Length == 0)
            { 
                throw  DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SymmetricKeyLengthTooShort, symmetricKey.Length)));
            }
            this.keySize = symmetricKey.Length * 8;
 
            if (cloneBuffer)
            { 
                this.symmetricKey = new byte[symmetricKey.Length]; 
                Buffer.BlockCopy(symmetricKey, 0, this.symmetricKey, 0, symmetricKey.Length);
            } 
            else
            {
                this.symmetricKey = symmetricKey;
            } 
        }
 
        public override int KeySize 
        {
            get { return this.keySize; } 
        }

        public override byte[] DecryptKey(string algorithm, byte[] keyData)
        { 
            return CryptoHelper.UnwrapKey(this.symmetricKey, keyData, algorithm);
        } 
 
        public override byte[] EncryptKey(string algorithm, byte[] keyData)
        { 
            return CryptoHelper.WrapKey(this.symmetricKey, keyData, algorithm);
        }

        public override byte[] GenerateDerivedKey(string algorithm, byte[] label, byte[] nonce, int derivedKeyLength, int offset) 
        {
            return CryptoHelper.GenerateDerivedKey(this.symmetricKey, algorithm, label, nonce, derivedKeyLength, offset); 
        } 

        public override ICryptoTransform GetDecryptionTransform(string algorithm, byte[] iv) 
        {
            return CryptoHelper.CreateDecryptor(this.symmetricKey, iv, algorithm);
        }
 
        public override ICryptoTransform GetEncryptionTransform(string algorithm, byte[] iv)
        { 
            return CryptoHelper.CreateEncryptor(this.symmetricKey, iv, algorithm); 
        }
 
        public override int GetIVSize(string algorithm)
        {
            return CryptoHelper.GetIVSize(algorithm);
        } 

        public override KeyedHashAlgorithm GetKeyedHashAlgorithm(string algorithm) 
        { 
            return CryptoHelper.CreateKeyedHashAlgorithm(this.symmetricKey, algorithm);
        } 

        public override SymmetricAlgorithm GetSymmetricAlgorithm(string algorithm)
        {
            return CryptoHelper.GetSymmetricAlgorithm(this.symmetricKey, algorithm); 
        }
 
        public override byte[] GetSymmetricKey() 
        {
            byte[] local = new byte[this.symmetricKey.Length]; 
            Buffer.BlockCopy(this.symmetricKey, 0, local, 0, this.symmetricKey.Length);

            return local;
        } 

        public override bool IsAsymmetricAlgorithm(string algorithm) 
        { 
            return (CryptoHelper.IsAsymmetricAlgorithm(algorithm));
        } 

        public override bool IsSupportedAlgorithm(string algorithm)
        {
            return (CryptoHelper.IsSymmetricSupportedAlgorithm(algorithm, this.KeySize)); 
        }
 
        public override bool IsSymmetricAlgorithm(string algorithm) 
        {
            return CryptoHelper.IsSymmetricAlgorithm(algorithm); 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK