/// <summary>
            /// Initializes a new instance of the <see cref="NonceSessionMaterial" /> class.
            /// </summary>
            /// <param name="key">The key.</param>
            public NonceSessionMaterial(AesKey key)
            {
                Key = key;
                var nonce = new byte[SessionNonceSize];

                Secure.Random.NextBytes(nonce);
                Nonce = WebBase64.FromBytes(nonce);
            }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SessionCrypter" /> class.
        /// </summary>
        /// <param name="keyEncrypter">The key encrypter.</param>
        /// <param name="signer">The signer, optionally used to certify sender. (Equivialent to SignedSessionEncrypter)</param>
        /// <param name="keySize">Size of the key.</param>
        /// <param name="symmetricKeyType">Type of the symmetric key. (requires unofficial keypacker)</param>
        /// <param name="keyPacker">The key packer.</param>
        /// <exception cref="System.ArgumentException">Without a supplying a keypacker you may only use KeyType.AES;symmetricKeyType</exception>
        public SessionCrypter(Encrypter keyEncrypter, AttachedSigner signer = null, int?keySize = null,
                              KeyType symmetricKeyType = null, ISessionKeyPacker keyPacker      = null)
        {
            Workings initLazy()
            {
                var workings = new Workings();

                symmetricKeyType = symmetricKeyType ?? KeyType.Aes;
                if (keyPacker == null && symmetricKeyType != KeyType.Aes)
                {
                    throw new ArgumentException("Without a supplying a keypacker you may only use KeyType.AES",
                                                nameof(symmetricKeyType));
                }

                if (signer != null)
                {
                    keyPacker = keyPacker ?? new NonceSignedSessionPacker();
                }
                keyPacker = keyPacker ?? new SimpleAesHmacSha1KeyPacker();

                var key = Key.Generate(symmetricKeyType, keySize ?? symmetricKeyType.DefaultSize);

                workings._keyset  = new ImportedKeySet(key, KeyPurpose.DecryptAndEncrypt);
                workings._crypter = new Crypter(workings._keyset);
                workings._signer  = signer;


                byte[] packedKey;
                var    sessionPacker = keyPacker as IInteroperableSessionMaterialPacker;

                if (sessionPacker == null)
                {
                    packedKey = keyPacker.Pack(key, Config);
                }
                else
                {
                    var nonceSession = new NonceSessionMaterial((AesKey)key);
                    packedKey       = sessionPacker.PackMaterial(nonceSession, Config);
                    workings._nonce = nonceSession.Nonce.ToBytes();
                }

                workings._sessionMaterial = WebBase64.FromBytes(keyEncrypter.Encrypt(packedKey));
                if (sessionPacker == null && workings._signer != null)
                {
                    workings._sessionMaterial = WebBase64.FromBytes(workings._signer.Sign(workings._sessionMaterial.ToBytes()));
                }
                return(workings);
            }

            _working = new Lazy <Workings>(initLazy);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="SessionCrypter" /> class.
        /// </summary>
        /// <param name="keyEncrypter">The key encrypter.</param>
        /// <param name="signer">The signer, optionally used to certify sender. (Equivialent to SignedSessionEncrypter)</param>
        /// <param name="keySize">Size of the key.</param>
        /// <param name="symmetricKeyType">Type of the symmetric key. (requires unofficial keypacker)</param>
        /// <param name="keyPacker">The key packer.</param>
        /// <exception cref="System.ArgumentException">Without a supplying a keypacker you may only use KeyType.AES;symmetricKeyType</exception>
        public SessionCrypter(Encrypter keyEncrypter, AttachedSigner signer = null, int?keySize = null,
                              KeyType symmetricKeyType = null, ISessionKeyPacker keyPacker      = null)
        {
            symmetricKeyType = symmetricKeyType ?? KeyType.Aes;
            if (keyPacker == null && symmetricKeyType != KeyType.Aes)
            {
                throw new ArgumentException("Without a supplying a keypacker you may only use KeyType.AES",
                                            "symmetricKeyType");
            }

            if (signer != null)
            {
                keyPacker = keyPacker ?? new NonceSignedSessionPacker();
            }
            keyPacker = keyPacker ?? new SimpleAesHmacSha1KeyPacker();

            var key = Key.Generate(symmetricKeyType, keySize ?? symmetricKeyType.DefaultSize);

            _keyset  = new ImportedKeySet(key, KeyPurpose.DecryptAndEncrypt);
            _crypter = new Crypter(_keyset);
            _signer  = signer;


            byte[] packedKey;
            var    sessionPacker = keyPacker as IInteroperableSessionMaterialPacker;

            if (sessionPacker == null)
            {
                packedKey = keyPacker.Pack(key);
            }
            else
            {
                var nonceSession = new NonceSessionMaterial((AesKey)key);
                packedKey = sessionPacker.PackMaterial(nonceSession);
                _nonce    = nonceSession.Nonce.ToBytes();
            }

            _sessionMaterial = WebBase64.FromBytes(keyEncrypter.Encrypt(packedKey));
            if (sessionPacker == null && _signer != null)
            {
                _sessionMaterial = WebBase64.FromBytes(_signer.Sign(_sessionMaterial.ToBytes()));
            }
        }
 /// <summary>
 /// Encrypts the specified raw data.
 /// </summary>
 /// <param name="rawData">The raw data.</param>
 /// <returns></returns>
 public WebBase64 Encrypt(string rawData)
 {
     return(WebBase64.FromBytes(Encrypt(Keyczar.RawStringEncoding.GetBytes(rawData))));
 }
 /// <summary>
 /// Signs the specified raw data.
 /// </summary>
 /// <param name="rawData">The raw data.</param>
 /// <param name="hidden">The hidden data used to generate the digest signature.</param>
 /// <returns></returns>
 public WebBase64 Sign(String rawData, Byte[] hidden = null)
 {
     return(WebBase64.FromBytes(Sign(RawStringEncoding.GetBytes(rawData), hidden)));
 }
Exemple #6
0
 /// <summary>
 /// Signs the specified raw data.
 /// </summary>
 /// <param name="rawData">The raw data.</param>
 /// <param name="expiration">The expiration.</param>
 /// <returns></returns>
 public WebBase64 Sign(String rawData, DateTime expiration)
 {
     return(WebBase64.FromBytes(Sign(RawStringEncoding.GetBytes(rawData), expiration)));
 }
Exemple #7
0
 /// <summary>
 /// Signs the specified raw data.
 /// </summary>
 /// <param name="rawData">The raw data.</param>
 /// <returns></returns>
 public WebBase64 Sign(String rawData)
 {
     return(WebBase64.FromBytes(Sign(RawStringEncoding.GetBytes(rawData))));
 }
Exemple #8
0
 /// <summary>
 /// Signs the specified raw data.
 /// </summary>
 /// <param name="rawData">The raw data.</param>
 /// <param name="expiration">The expiration.</param>
 /// <returns></returns>
 public WebBase64 Sign(String rawData, DateTime expiration)
 => WebBase64.FromBytes(Sign(Config.RawStringEncoding.GetBytes(rawData), expiration));
Exemple #9
0
 /// <summary>
 /// Signs the specified raw data.
 /// </summary>
 /// <param name="rawData">The raw data.</param>
 /// <returns></returns>
 public WebBase64 Sign(String rawData)
 => WebBase64.FromBytes(Sign(Config.RawStringEncoding.GetBytes(rawData)));
Exemple #10
0
 /// <summary>
 /// Encrypts the specified raw string data.
 /// </summary>
 /// <param name="rawData">The raw string data.</param>
 /// <returns></returns>
 public WebBase64 Encrypt(string rawData)
 => WebBase64.FromBytes(Encrypt(Config.RawStringEncoding.GetBytes(rawData)));