public override Byte[] DecryptData(Byte[] cipheredData, PDUDecrypter.WriteKeySpec keySpec)
 {
     if (keySpec == PDUDecrypter.WriteKeySpec.Client)
     {
         return(this.Decrypt(this.CStreamCipher, cipheredData));
     }
     return(this.Decrypt(this.SStreamCipher, cipheredData));
 }
        public override void SetIv(Byte[] iv, PDUDecrypter.WriteKeySpec keySpec)
        {
            var key    = keySpec == PDUDecrypter.WriteKeySpec.Client? this._clientKey : this._serverKey;
            var cipher = keySpec == PDUDecrypter.WriteKeySpec.Client? this.Ccipher : this.Scipher;

            var keyAndIv = new ParametersWithIV(key, iv);

            cipher.Reset();
            cipher.Init(false, keyAndIv);
        }
        public override void SetGcmParameters(Byte[] exNonce, PDUDecrypter.WriteKeySpec writeKeySpec)
        {
            var iv = writeKeySpec == PDUDecrypter.WriteKeySpec.Client? this._clientIv : this._serverIv;

            var key = writeKeySpec == PDUDecrypter.WriteKeySpec.Client? this._clientKey : this._serverKey;

            var cipher = writeKeySpec == PDUDecrypter.WriteKeySpec.Client? this.CaeadCipher : this.SaeadCipher;

            /* Currently Bouncy Castle implementation of GCM supports only MAC size up to 128b */
            var par = new AeadParameters(key, this.Digest.GetDigestSize() * 8, iv, exNonce);

            cipher.Reset();
            cipher.Init(false, par);
        }
        public override Byte[] DecryptData(Byte[] cipheredData, PDUDecrypter.WriteKeySpec keySpec)
        {
            switch (this.Mode)
            {
            case CipherMode.Cbc:
                if (keySpec == PDUDecrypter.WriteKeySpec.Client)
                {
                    return(this.Decrypt(this.Ccipher, cipheredData));
                }
                return(this.Decrypt(this.Scipher, cipheredData));

            case CipherMode.Ccm:
            case CipherMode.Gcm:
                if (keySpec == PDUDecrypter.WriteKeySpec.Client)
                {
                    return(this.Decrypt(this.CaeadCipher, cipheredData));
                }
                return(this.Decrypt(this.SaeadCipher, cipheredData));

            default:
                return(null);
            }
        }
 public override void SetIv(Byte[] iv, PDUDecrypter.WriteKeySpec keySpec)
 {
     throw new NotImplementedException();
 }
 public override void SetGcmParameters(Byte[] exNonce, PDUDecrypter.WriteKeySpec writeKeySpec)
 {
     throw new NotImplementedException();
 }
 public abstract void SetIv(Byte[] iv, PDUDecrypter.WriteKeySpec keySpec);
 public abstract void SetGcmParameters(Byte[] exNonce, PDUDecrypter.WriteKeySpec writeKeySpec);
 public abstract Byte[] DecryptData(Byte[] cipheredData, PDUDecrypter.WriteKeySpec keySpec);