/// <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); }
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; } }