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