BinarySecretSecurityToken.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / Tokens / BinarySecretSecurityToken.cs / 1 / BinarySecretSecurityToken.cs

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

namespace System.ServiceModel.Security.Tokens 
{
    using System.Collections; 
    using System.ServiceModel; 
    using System.Collections.Generic;
    using System.Collections.ObjectModel; 
    using System.IO;
    using System.IdentityModel.Claims;
    using System.IdentityModel.Policy;
    using System.IdentityModel.Tokens; 
    using System.Security.Cryptography;
    using System.Text; 
    using System.Xml; 

 	public class BinarySecretSecurityToken : SecurityToken 
    {
        string id;
        DateTime effectiveTime;
        byte[] key; 
        ReadOnlyCollection securityKeys;
 
        public BinarySecretSecurityToken(int keySizeInBits) 
            : this(SecurityUniqueId.Create().Value, keySizeInBits)
        { 
        }

        public BinarySecretSecurityToken(string id, int keySizeInBits)
            : this(id, keySizeInBits, true) 
        {
        } 
 
        public BinarySecretSecurityToken(byte[] key)
            : this(SecurityUniqueId.Create().Value, key) 
        {
        }

        public BinarySecretSecurityToken(string id, byte[] key) 
            : this(id, key, true)
        { 
        } 

        protected BinarySecretSecurityToken(string id, int keySizeInBits, bool allowCrypto) 
        {
            if (keySizeInBits <= 0 || keySizeInBits >= 512)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("keySizeInBits", SR.GetString(SR.ValueMustBeInRange, 0, 512))); 
            }
 
            if ((keySizeInBits % 8) != 0) 
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("keySizeInBits", SR.GetString(SR.KeyLengthMustBeMultipleOfEight, keySizeInBits))); 
            }

            this.id = id;
            this.effectiveTime = DateTime.UtcNow; 
            this.key = new byte[keySizeInBits / 8];
            CryptoHelper.FillRandomBytes(this.key); 
 
            if (allowCrypto)
            { 
                this.securityKeys = SecurityUtils.CreateSymmetricSecurityKeys(this.key);
            }
            else
            { 
                this.securityKeys = EmptyReadOnlyCollection.Instance;
            } 
        } 

        protected BinarySecretSecurityToken(string id, byte[] key, bool allowCrypto) 
        {
            if (key == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("key");
 
            this.id = id;
            this.effectiveTime = DateTime.UtcNow; 
            this.key = new byte[key.Length]; 
            Buffer.BlockCopy(key, 0, this.key, 0, key.Length);
            if (allowCrypto) 
            {
                this.securityKeys = SecurityUtils.CreateSymmetricSecurityKeys(this.key);
            }
            else 
            {
                this.securityKeys = EmptyReadOnlyCollection.Instance; 
            } 
        }
 
        public override string Id
        {
            get { return this.id; }
        } 

        public override DateTime ValidFrom 
        { 
            get { return this.effectiveTime; }
        } 

        public override DateTime ValidTo
        {
            // Never expire 
            get { return DateTime.MaxValue; }
        } 
 
        public int KeySize
        { 
            get { return (this.key.Length * 8); }
        }

        public override ReadOnlyCollection SecurityKeys 
        {
            get { return this.securityKeys; } 
        } 

        public byte[] GetKeyBytes() 
        {
            return SecurityUtils.CloneBuffer(this.key);
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

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