<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

AeadUtilities

public static class AeadUtilities
using System; namespace Org.BouncyCastle.Bcpg { public static class AeadUtilities { public static int GetIVLength(AeadAlgorithmTag aeadAlgorithm) { switch (aeadAlgorithm) { case AeadAlgorithmTag.Eax: return 16; case AeadAlgorithmTag.Ocb: return 15; case AeadAlgorithmTag.Gcm: return 12; default: throw new ArgumentException("Invalid AEAD algorithm: " + aeadAlgorithm.ToString(), "aeadAlgorithm"); } } public static int GetAuthTagLength(AeadAlgorithmTag aeadAlgorithm) { if (aeadAlgorithm - 1 <= AeadAlgorithmTag.Ocb) return 16; throw new ArgumentException("Invalid AEAD algorithm: " + aeadAlgorithm.ToString(), "aeadAlgorithm"); } public static byte[][] SplitMessageKeyAndIv(byte[] messageKeyAndIv, SymmetricKeyAlgorithmTag symKeyAlgorithm, AeadAlgorithmTag aeadAlgorithm) { int keyLengthInOctets = SymmetricKeyUtilities.GetKeyLengthInOctets(symKeyAlgorithm); int iVLength = GetIVLength(aeadAlgorithm); byte[] array = new byte[keyLengthInOctets]; byte[] array2 = new byte[iVLength]; Array.Copy(messageKeyAndIv, 0, array, 0, keyLengthInOctets); Array.Copy(messageKeyAndIv, keyLengthInOctets, array2, 0, iVLength - 8); return new byte[2][] { array, array2 }; } } }