SlhDsaParameterSet
using Org.BouncyCastle.Pqc.Crypto.SphincsPlus;
using Org.BouncyCastle.Utilities.Collections;
using System;
using System.Collections.Generic;
namespace Org.BouncyCastle.Crypto.Parameters
{
public sealed class SlhDsaParameterSet
{
public static readonly SlhDsaParameterSet slh_dsa_sha2_128s = new SlhDsaParameterSet("SLH-DSA-SHA2-128s", new Sha2EngineProvider(16, 16, 7, 12, 14, 63));
public static readonly SlhDsaParameterSet slh_dsa_shake_128s = new SlhDsaParameterSet("SLH-DSA-SHAKE-128s", new Shake256EngineProvider(16, 16, 7, 12, 14, 63));
public static readonly SlhDsaParameterSet slh_dsa_sha2_128f = new SlhDsaParameterSet("SLH-DSA-SHA2-128f", new Sha2EngineProvider(16, 16, 22, 6, 33, 66));
public static readonly SlhDsaParameterSet slh_dsa_shake_128f = new SlhDsaParameterSet("SLH-DSA-SHAKE-128f", new Shake256EngineProvider(16, 16, 22, 6, 33, 66));
public static readonly SlhDsaParameterSet slh_dsa_sha2_192s = new SlhDsaParameterSet("SLH-DSA-SHA2-192s", new Sha2EngineProvider(24, 16, 7, 14, 17, 63));
public static readonly SlhDsaParameterSet slh_dsa_shake_192s = new SlhDsaParameterSet("SLH-DSA-SHAKE-192s", new Shake256EngineProvider(24, 16, 7, 14, 17, 63));
public static readonly SlhDsaParameterSet slh_dsa_sha2_192f = new SlhDsaParameterSet("SLH-DSA-SHA2-192f", new Sha2EngineProvider(24, 16, 22, 8, 33, 66));
public static readonly SlhDsaParameterSet slh_dsa_shake_192f = new SlhDsaParameterSet("SLH-DSA-SHAKE-192f", new Shake256EngineProvider(24, 16, 22, 8, 33, 66));
public static readonly SlhDsaParameterSet slh_dsa_sha2_256s = new SlhDsaParameterSet("SLH-DSA-SHA2-256s", new Sha2EngineProvider(32, 16, 8, 14, 22, 64));
public static readonly SlhDsaParameterSet slh_dsa_shake_256s = new SlhDsaParameterSet("SLH-DSA-SHAKE-256s", new Shake256EngineProvider(32, 16, 8, 14, 22, 64));
public static readonly SlhDsaParameterSet slh_dsa_sha2_256f = new SlhDsaParameterSet("SLH-DSA-SHA2-256f", new Sha2EngineProvider(32, 16, 17, 9, 35, 68));
public static readonly SlhDsaParameterSet slh_dsa_shake_256f = new SlhDsaParameterSet("SLH-DSA-SHAKE-256f", new Shake256EngineProvider(32, 16, 17, 9, 35, 68));
private static readonly Dictionary<string, SlhDsaParameterSet> ByName = new Dictionary<string, SlhDsaParameterSet> {
{
slh_dsa_sha2_128f.Name,
slh_dsa_sha2_128f
},
{
slh_dsa_sha2_128s.Name,
slh_dsa_sha2_128s
},
{
slh_dsa_sha2_192f.Name,
slh_dsa_sha2_192f
},
{
slh_dsa_sha2_192s.Name,
slh_dsa_sha2_192s
},
{
slh_dsa_sha2_256f.Name,
slh_dsa_sha2_256f
},
{
slh_dsa_sha2_256s.Name,
slh_dsa_sha2_256s
},
{
slh_dsa_shake_128f.Name,
slh_dsa_shake_128f
},
{
slh_dsa_shake_128s.Name,
slh_dsa_shake_128s
},
{
slh_dsa_shake_192f.Name,
slh_dsa_shake_192f
},
{
slh_dsa_shake_192s.Name,
slh_dsa_shake_192s
},
{
slh_dsa_shake_256f.Name,
slh_dsa_shake_256f
},
{
slh_dsa_shake_256s.Name,
slh_dsa_shake_256s
}
};
private readonly string m_name;
private readonly ISphincsPlusEngineProvider m_engineProvider;
public string Name => m_name;
internal int PrivateKeyLength => 4 * N;
internal int PublicKeyLength => 2 * N;
internal int N => m_engineProvider.N;
internal static SlhDsaParameterSet FromName(string name)
{
return CollectionUtilities.GetValueOrNull(ByName, name);
}
private SlhDsaParameterSet(string name, ISphincsPlusEngineProvider engineProvider)
{
if (name == null)
throw new ArgumentNullException("name");
m_name = name;
m_engineProvider = engineProvider;
}
public override string ToString()
{
return Name;
}
internal SphincsPlusEngine GetEngine()
{
return m_engineProvider.Get();
}
}
}