IsoTrailers
using System;
using System.Collections.Generic;
namespace Org.BouncyCastle.Crypto.Signers
{
public class IsoTrailers
{
public const int TRAILER_IMPLICIT = 188;
public const int TRAILER_RIPEMD160 = 12748;
public const int TRAILER_RIPEMD128 = 13004;
public const int TRAILER_SHA1 = 13260;
public const int TRAILER_SHA256 = 13516;
public const int TRAILER_SHA512 = 13772;
public const int TRAILER_SHA384 = 14028;
public const int TRAILER_WHIRLPOOL = 14284;
public const int TRAILER_SHA224 = 14540;
public const int TRAILER_SHA512_224 = 14796;
public const int TRAILER_SHA512_256 = 16588;
private static readonly IDictionary<string, int> TrailerMap = CreateTrailerMap();
private static IDictionary<string, int> CreateTrailerMap()
{
return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase) {
{
"RIPEMD128",
13004
},
{
"RIPEMD160",
12748
},
{
"SHA-1",
13260
},
{
"SHA-224",
14540
},
{
"SHA-256",
13516
},
{
"SHA-384",
14028
},
{
"SHA-512",
13772
},
{
"SHA-512/224",
14796
},
{
"SHA-512/256",
16588
},
{
"Whirlpool",
14284
}
};
}
public static int GetTrailer(IDigest digest)
{
if (TrailerMap.TryGetValue(digest.AlgorithmName, out int value))
return value;
throw new InvalidOperationException("No trailer for digest");
}
public static bool NoTrailerAvailable(IDigest digest)
{
return !TrailerMap.ContainsKey(digest.AlgorithmName);
}
}
}