/// <inheritdoc />
        public ReadOnlySpan <byte> TransformBlock(ReadOnlySpan <byte> block)
        {
            using var hmac = new HMACSHA256(macKey);
            var rv          = new byte[block.Length + 32];
            var inputBuffer = block.ToArray();

            using var aes = new AesCounterMode();
            using var enc = aes.CreateEncryptor(cryptoKey, Array.Empty <byte>());
            var encrypted = enc.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
            var hash      = hmac.ComputeHash(encrypted);

            hash.CopyTo(rv.AsSpan());
            encrypted.CopyTo(rv.AsSpan(hash.Length));
            return(rv);
        }
예제 #2
0
        public override void init(int mode, byte[] key, byte[] iv)
        {
            this.mode = mode;
            aes_ctr   = new AesCounterMode();
            //String pad="NoPadding";
            byte[] tmp;
            int    ivsize = getIVSize();

            if (iv.Length > ivsize)
            {
                tmp = new byte[ivsize];
                Array.Copy(iv, 0, tmp, 0, tmp.Length);
                iv = tmp;
            }
            int bsize = getBlockSize();

            if (key.Length > bsize)
            {
                tmp = new byte[bsize];
                Array.Copy(key, 0, tmp, 0, tmp.Length);
                key = tmp;
            }

            try
            {
                //      SecretKeySpec keyspec=new SecretKeySpec(key, "AES");
                //		cipher=javax.crypto.Cipher.getInstance("AES/CBC/"+pad);

                //      cipher.init((mode==ENCRYPT_MODE?
                //		   javax.crypto.Cipher.ENCRYPT_MODE:
                //		   javax.crypto.Cipher.DECRYPT_MODE),
                //		  keyspec, new IvParameterSpec(iv));
                cipher = (mode == ENCRYPT_MODE?
                          aes_ctr.CreateEncryptor(key, iv):
                          aes_ctr.CreateDecryptor(key, iv));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                cipher = null;
            }
        }