Esempio n. 1
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="security">Used security level.</param>
        /// <param name="encrypt"></param>
        /// <param name="blockCipherKey"></param>
        /// <param name="aad"></param>
        /// <param name="iv"></param>
        /// <param name="tag"></param>
        public GXDLMSChipperingStream(Gurux.DLMS.Enums.Security security, bool encrypt, byte[] blockCipherKey, byte[] aad, byte[] iv, byte[] tag)
        {
            this.Security = security;
            const int TagSize = 0x10;

            this.Tag = tag;
            if (this.Tag == null)//Tag size is 12 bytes.
            {
                this.Tag = new byte[12];
            }
            else if (this.Tag.Length != 12)
            {
                throw new ArgumentOutOfRangeException("Invalid tag.");
            }
            Encrypt    = encrypt;
            WorkingKey = GenerateKey(encrypt, blockCipherKey);
            int bufLength = Encrypt ? BlockSize : (BlockSize + TagSize);

            this.bufBlock = new byte[bufLength];
            Aad           = aad;
            this.H        = new byte[BlockSize];
            ProcessBlock(H, 0, H, 0);
            Init(H);
            this.J0 = new byte[16];
            Array.Copy(iv, 0, J0, 0, iv.Length);
            this.J0[15]         = 0x01;
            this.S              = GetGHash(Aad);
            this.counter        = (byte[])J0.Clone();
            this.BytesRemaining = 0;
            this.totalLength    = 0;
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="tag">Command.</param>
 /// <param name="security"></param>
 /// <param name="invocationCounter">Invocation counter.</param>
 /// <param name="systemTitle"></param>
 /// <param name="blockCipherKey"></param>
 /// <param name="authenticationKey"></param>
 public AesGcmParameter(
     byte tag,
     Gurux.DLMS.Enums.Security security,
     UInt32 invocationCounter,
     byte[] systemTitle,
     byte[] blockCipherKey,
     byte[] authenticationKey)
 {
     Tag               = tag;
     Security          = security;
     InvocationCounter = invocationCounter;
     SystemTitle       = systemTitle;
     BlockCipherKey    = blockCipherKey;
     AuthenticationKey = authenticationKey;
     Type              = CountType.Packet;
     SecuritySuite     = SecuritySuite.AesGcm128;
 }