oqs: Upgraded Dilithium to NIST Round 3.1

This commit is contained in:
Andreas Steffen 2021-03-21 12:10:40 +01:00 committed by Tobias Brunner
parent 118dfe0eb1
commit 4f5c2faa5c
15 changed files with 2900 additions and 11110 deletions

View File

@ -59,7 +59,7 @@ chunk_t asn1_algorithmIdentifier(int oid)
case OID_ED448:
case OID_DILITHIUM_2:
case OID_DILITHIUM_3:
case OID_DILITHIUM_4:
case OID_DILITHIUM_5:
case OID_FALCON_512:
case OID_FALCON_1024:
parameters = chunk_empty;

View File

@ -208,13 +208,13 @@
0x02 "IBM"
0x82 ""
0x0B "QSC"
0x06 "dilithium-raw"
0x07 "dilithium-r3"
0x04 "d2r"
0x03 "dilithium2" OID_DILITHIUM_2
0x05 "d3r"
0x04 "dilithium3" OID_DILITHIUM_3
0x06 "d4r"
0x05 "dilithium4" OID_DILITHIUM_4
0x04 "dilithium2" OID_DILITHIUM_2
0x06 "d3r"
0x05 "dilithium3" OID_DILITHIUM_3
0x08 "d5r"
0x07 "dilithium5" OID_DILITHIUM_5
0x82 ""
0x37 "Microsoft"
0x0A ""

View File

@ -600,7 +600,7 @@ METHOD(auth_cfg_t, add_pubkey_constraints, void,
{ "identity", SIGN_ED448, KEY_ED448, },
{ "identity", SIGN_DILITHIUM_2, KEY_DILITHIUM_2, },
{ "identity", SIGN_DILITHIUM_3, KEY_DILITHIUM_3, },
{ "identity", SIGN_DILITHIUM_4, KEY_DILITHIUM_4, },
{ "identity", SIGN_DILITHIUM_5, KEY_DILITHIUM_5, },
{ "identity", SIGN_FALCON_512, KEY_FALCON_512, },
{ "identity", SIGN_FALCON_1024, KEY_FALCON_1024, },
};

View File

@ -29,7 +29,7 @@ ENUM(key_type_names, KEY_ANY, KEY_FALCON_1024,
"ED448",
"Dilithium2",
"Dilithium3",
"Dilithium4",
"Dilithium5",
"Falcon512",
"Falcon1024",
);
@ -60,7 +60,7 @@ ENUM(signature_scheme_names, SIGN_UNKNOWN, SIGN_FALCON_1024,
"ED448",
"DILITHIUM_2",
"DILITHIUM_3",
"DILITHIUM_4",
"DILITHIUM_5",
"FALCON_512",
"FALCON_1024",
);
@ -133,8 +133,8 @@ int key_type_to_oid(key_type_t type)
return OID_DILITHIUM_2;
case KEY_DILITHIUM_3:
return OID_DILITHIUM_3;
case KEY_DILITHIUM_4:
return OID_DILITHIUM_4;
case KEY_DILITHIUM_5:
return OID_DILITHIUM_5;
case KEY_FALCON_512:
return OID_FALCON_512;
case KEY_FALCON_1024:
@ -159,8 +159,8 @@ key_type_t key_type_from_oid(int oid)
return KEY_DILITHIUM_2;
case OID_DILITHIUM_3:
return KEY_DILITHIUM_3;
case OID_DILITHIUM_4:
return KEY_DILITHIUM_4;
case OID_DILITHIUM_5:
return KEY_DILITHIUM_5;
case OID_FALCON_512:
return KEY_FALCON_512;
case OID_FALCON_1024:
@ -222,8 +222,8 @@ signature_scheme_t signature_scheme_from_oid(int oid)
return SIGN_DILITHIUM_2;
case OID_DILITHIUM_3:
return SIGN_DILITHIUM_3;
case OID_DILITHIUM_4:
return SIGN_DILITHIUM_4;
case OID_DILITHIUM_5:
return SIGN_DILITHIUM_5;
case OID_FALCON_512:
return SIGN_FALCON_512;
case OID_FALCON_1024:
@ -284,8 +284,8 @@ int signature_scheme_to_oid(signature_scheme_t scheme)
return OID_DILITHIUM_2;
case SIGN_DILITHIUM_3:
return OID_DILITHIUM_3;
case SIGN_DILITHIUM_4:
return OID_DILITHIUM_4;
case SIGN_DILITHIUM_5:
return OID_DILITHIUM_5;
case SIGN_FALCON_512:
return OID_FALCON_512;
case SIGN_FALCON_1024:
@ -333,7 +333,7 @@ static struct {
{ KEY_ED448, 0, { .scheme = SIGN_ED448 }},
{ KEY_DILITHIUM_2, 0, { .scheme = SIGN_DILITHIUM_2}},
{ KEY_DILITHIUM_3, 0, { .scheme = SIGN_DILITHIUM_3}},
{ KEY_DILITHIUM_4, 0, { .scheme = SIGN_DILITHIUM_4}},
{ KEY_DILITHIUM_5, 0, { .scheme = SIGN_DILITHIUM_5}},
{ KEY_FALCON_512, 0, { .scheme = SIGN_FALCON_512}},
{ KEY_FALCON_1024, 0, { .scheme = SIGN_FALCON_1024}},
};
@ -428,8 +428,8 @@ key_type_t key_type_from_signature_scheme(signature_scheme_t scheme)
return KEY_DILITHIUM_2;
case SIGN_DILITHIUM_3:
return KEY_DILITHIUM_3;
case SIGN_DILITHIUM_4:
return KEY_DILITHIUM_4;
case SIGN_DILITHIUM_5:
return KEY_DILITHIUM_5;
case SIGN_FALCON_512:
return KEY_FALCON_512;
case SIGN_FALCON_1024:

View File

@ -52,7 +52,7 @@ enum key_type_t {
/** Dilithium3 NIST Round 3 Submission candidate */
KEY_DILITHIUM_3 = 7,
/** Dilithium4 NIST Round 3 Submission candidate */
KEY_DILITHIUM_4 = 8,
KEY_DILITHIUM_5 = 8,
/** Falcon512 NIST Round 3 Submission candidate */
KEY_FALCON_512 = 9,
/** Falcon1024 NIST Round 3 Submission candidate */
@ -123,7 +123,7 @@ enum signature_scheme_t {
/** Dilithium3 NIST Round 3 Submission signature */
SIGN_DILITHIUM_3,
/** Dilithium4 NIST Round 3 Submission signature */
SIGN_DILITHIUM_4,
SIGN_DILITHIUM_5,
/** Falcon512 NIST Round 3 Submission signature */
SIGN_FALCON_512,
/** Falcon1024 NIST Round 3 Submission signature */

View File

@ -157,7 +157,7 @@ hash_algorithm_t hasher_algorithm_from_oid(int oid)
case OID_ED448:
case OID_DILITHIUM_2:
case OID_DILITHIUM_3:
case OID_DILITHIUM_4:
case OID_DILITHIUM_5:
case OID_FALCON_512:
case OID_FALCON_1024:
return HASH_IDENTITY;
@ -497,11 +497,11 @@ int hasher_signature_algorithm_to_oid(hash_algorithm_t alg, key_type_t key)
default:
return OID_UNKNOWN;
}
case KEY_DILITHIUM_4:
case KEY_DILITHIUM_5:
switch (alg)
{
case HASH_IDENTITY:
return OID_DILITHIUM_4;
return OID_DILITHIUM_5;
default:
return OID_UNKNOWN;
}
@ -549,7 +549,7 @@ hash_algorithm_t hasher_from_signature_scheme(signature_scheme_t scheme,
case SIGN_ED448:
case SIGN_DILITHIUM_2:
case SIGN_DILITHIUM_3:
case SIGN_DILITHIUM_4:
case SIGN_DILITHIUM_5:
case SIGN_FALCON_512:
case SIGN_FALCON_1024:
return HASH_IDENTITY;

View File

@ -74,32 +74,32 @@ METHOD(plugin_t, get_features, int,
PLUGIN_REGISTER(PRIVKEY, oqs_private_key_load, TRUE),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_2),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_3),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_4),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_5),
PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_512),
PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_1024),
PLUGIN_REGISTER(PRIVKEY_GEN, oqs_private_key_gen, FALSE),
PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_2),
PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_3),
PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_4),
PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_5),
PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_FALCON_512),
PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_FALCON_1024),
PLUGIN_REGISTER(PUBKEY, oqs_public_key_load, TRUE),
PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_2),
PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_3),
PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_4),
PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_5),
PLUGIN_PROVIDE(PUBKEY, KEY_FALCON_512),
PLUGIN_PROVIDE(PUBKEY, KEY_FALCON_1024),
PLUGIN_PROVIDE(PUBKEY, KEY_ANY),
/* signature schemes, private */
PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_2),
PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_3),
PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_4),
PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_5),
PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_FALCON_512),
PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_FALCON_1024),
/* signature verification schemes */
PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_2),
PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_3),
PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_4),
PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_5),
PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_FALCON_512),
PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_FALCON_1024),
};

View File

@ -219,8 +219,8 @@ static private_oqs_private_key_t *oqs_private_key_create_empty(key_type_t type)
case KEY_DILITHIUM_3:
sig_alg = OQS_SIG_alg_dilithium_3;
break;
case KEY_DILITHIUM_4:
sig_alg = OQS_SIG_alg_dilithium_4;
case KEY_DILITHIUM_5:
sig_alg = OQS_SIG_alg_dilithium_5;
break;
case KEY_FALCON_512:
sig_alg = OQS_SIG_alg_falcon_512;

View File

@ -273,8 +273,8 @@ end:
case KEY_DILITHIUM_3:
sig_alg = OQS_SIG_alg_dilithium_3;
break;
case KEY_DILITHIUM_4:
sig_alg = OQS_SIG_alg_dilithium_4;
case KEY_DILITHIUM_5:
sig_alg = OQS_SIG_alg_dilithium_5;
break;
case KEY_FALCON_512:
sig_alg = OQS_SIG_alg_falcon_512;
@ -307,7 +307,7 @@ bool oqs_supported(key_type_t type)
{
case KEY_DILITHIUM_2:
case KEY_DILITHIUM_3:
case KEY_DILITHIUM_4:
case KEY_DILITHIUM_5:
case KEY_FALCON_512:
case KEY_FALCON_1024:
return TRUE;

File diff suppressed because it is too large Load Diff

View File

@ -71,8 +71,8 @@ METHOD(plugin_t, get_features, int,
PLUGIN_DEPENDS(PRIVKEY, KEY_DILITHIUM_2),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_3),
PLUGIN_DEPENDS(PRIVKEY, KEY_DILITHIUM_3),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_4),
PLUGIN_DEPENDS(PRIVKEY, KEY_DILITHIUM_4),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_5),
PLUGIN_DEPENDS(PRIVKEY, KEY_DILITHIUM_5),
PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_512),
PLUGIN_DEPENDS(PRIVKEY, KEY_FALCON_512),
PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_1024),

View File

@ -96,8 +96,8 @@ static private_key_t *parse_private_key(chunk_t blob)
type = KEY_DILITHIUM_3;
part = BUILD_PRIV_ASN1_DER;
break;
case OID_DILITHIUM_4:
type = KEY_DILITHIUM_4;
case OID_DILITHIUM_5:
type = KEY_DILITHIUM_5;
part = BUILD_PRIV_ASN1_DER;
break;
case OID_FALCON_512:

View File

@ -50,7 +50,7 @@ METHOD(plugin_t, get_features, int,
PLUGIN_PROVIDE(PRIVKEY, KEY_ED448),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_2),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_3),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_4),
PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_5),
PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_512),
PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_1024),
};

View File

@ -63,7 +63,7 @@ static hasher_oid_t oids[] = {
{ OID_UNKNOWN, HASH_UNKNOWN, KEY_ECDSA }, /* 32 */
{ OID_DILITHIUM_2, HASH_IDENTITY, KEY_DILITHIUM_2}, /* 33 */
{ OID_DILITHIUM_3, HASH_IDENTITY, KEY_DILITHIUM_3}, /* 34 */
{ OID_DILITHIUM_4, HASH_IDENTITY, KEY_DILITHIUM_4}, /* 35 */
{ OID_DILITHIUM_5, HASH_IDENTITY, KEY_DILITHIUM_5}, /* 35 */
{ OID_FALCON_512, HASH_IDENTITY, KEY_FALCON_512}, /* 36 */
{ OID_FALCON_1024, HASH_IDENTITY, KEY_FALCON_1024}, /* 37 */
};
@ -116,7 +116,7 @@ static struct {
{ SIGN_ED448, HASH_IDENTITY },
{ SIGN_DILITHIUM_2, HASH_IDENTITY },
{ SIGN_DILITHIUM_3, HASH_IDENTITY },
{ SIGN_DILITHIUM_4, HASH_IDENTITY },
{ SIGN_DILITHIUM_5, HASH_IDENTITY },
{ SIGN_FALCON_512, HASH_IDENTITY },
{ SIGN_FALCON_1024, HASH_IDENTITY },
{ 30, HASH_UNKNOWN },

View File

@ -60,9 +60,9 @@ static int gen()
{
type = KEY_DILITHIUM_3;
}
else if (streq(arg, "dilithium4"))
else if (streq(arg, "dilithium5"))
{
type = KEY_DILITHIUM_4;
type = KEY_DILITHIUM_5;
}
else if (streq(arg, "falcon512"))
{
@ -186,7 +186,7 @@ static void __attribute__ ((constructor))reg()
{
command_register((command_t) {
gen, 'g', "gen", "generate a new private key",
{"[--type rsa|ecdsa|ed25519|ed448|dilithium2|dilithium3|dilithium4|falcon512|falcon1024]",
{"[--type rsa|ecdsa|ed25519|ed448|dilithium2|dilithium3|dilithium5|falcon512|falcon1024]",
"[--size bits] [--safe-primes] [--shares n] [--threshold l]",
"[--outform der|pem]"},
{