Added support of EdDSA signatures

This commit is contained in:
Andreas Steffen
2016-12-14 11:15:47 +01:00
committed by Tobias Brunner
parent 564a199674
commit 35bc60cc68
31 changed files with 900 additions and 55 deletions
+3 -1
View File
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2008 Martin Willi
* Hochschule fuer Technik Rapperswil
* Copyright (C) 2016 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -70,5 +71,6 @@ ENUM(builder_part_names, BUILD_FROM_FILE, BUILD_END,
"BUILD_SAFE_PRIMES",
"BUILD_SHARES",
"BUILD_THRESHOLD",
"BUILD_EDDSA_PRIV_ASN1_DER",
"BUILD_END",
);
+4 -1
View File
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2008 Martin Willi
* Hochschule fuer Technik Rapperswil
* Copyright (C) 2016 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -151,6 +152,8 @@ enum builder_part_t {
BUILD_SHARES,
/** minimum number of participating private key shares */
BUILD_THRESHOLD,
/** DER encoded ASN.1 EdDSA private key */
BUILD_EDDSA_PRIV_ASN1_DER,
/** end of variable argument builder list */
BUILD_END,
};
@@ -144,6 +144,10 @@ enum cred_encoding_part_t {
CRED_PART_PKCS10_ASN1_DER,
/** a PGP encoded certificate */
CRED_PART_PGP_CERT,
/** a DER encoded EdDSA public key */
CRED_PART_EDDSA_PUB_ASN1_DER,
/** a DER encoded EdDSA private key */
CRED_PART_EDDSA_PRIV_ASN1_DER,
/** a DER encoded BLISS public key */
CRED_PART_BLISS_PUB_ASN1_DER,
/** a DER encoded BLISS private key */
@@ -24,6 +24,8 @@ ENUM(key_type_names, KEY_ANY, KEY_BLISS,
"RSA",
"ECDSA",
"DSA",
"ED25519",
"ED448",
"BLISS"
);
@@ -48,6 +50,8 @@ ENUM(signature_scheme_names, SIGN_UNKNOWN, SIGN_BLISS_WITH_SHA3_512,
"ECDSA-256",
"ECDSA-384",
"ECDSA-521",
"ED25519",
"ED448",
"BLISS_WITH_SHA2_256",
"BLISS_WITH_SHA2_384",
"BLISS_WITH_SHA2_512",
@@ -151,6 +155,10 @@ signature_scheme_t signature_scheme_from_oid(int oid)
return SIGN_ECDSA_WITH_SHA384_DER;
case OID_ECDSA_WITH_SHA512:
return SIGN_ECDSA_WITH_SHA512_DER;
case OID_ED25519:
return SIGN_ED25519;
case OID_ED448:
return SIGN_ED448;
case OID_BLISS_PUBLICKEY:
case OID_BLISS_WITH_SHA2_512:
return SIGN_BLISS_WITH_SHA2_512;
@@ -210,6 +218,10 @@ int signature_scheme_to_oid(signature_scheme_t scheme)
return OID_ECDSA_WITH_SHA384;
case SIGN_ECDSA_WITH_SHA512_DER:
return OID_ECDSA_WITH_SHA512;
case SIGN_ED25519:
return OID_ED25519;
case SIGN_ED448:
return OID_ED448;
case SIGN_BLISS_WITH_SHA2_256:
return OID_BLISS_WITH_SHA2_256;
case SIGN_BLISS_WITH_SHA2_384:
@@ -236,15 +248,17 @@ static struct {
key_type_t type;
int max_keysize;
} scheme_map[] = {
{ SIGN_RSA_EMSA_PKCS1_SHA2_256, KEY_RSA, 3072 },
{ SIGN_RSA_EMSA_PKCS1_SHA2_384, KEY_RSA, 7680 },
{ SIGN_RSA_EMSA_PKCS1_SHA2_512, KEY_RSA, 0 },
{ SIGN_ECDSA_WITH_SHA256_DER, KEY_ECDSA, 256 },
{ SIGN_ECDSA_WITH_SHA384_DER, KEY_ECDSA, 384 },
{ SIGN_ECDSA_WITH_SHA512_DER, KEY_ECDSA, 0 },
{ SIGN_BLISS_WITH_SHA2_256, KEY_BLISS, 128 },
{ SIGN_BLISS_WITH_SHA2_384, KEY_BLISS, 192 },
{ SIGN_BLISS_WITH_SHA2_512, KEY_BLISS, 0 }
{ SIGN_RSA_EMSA_PKCS1_SHA2_256, KEY_RSA, 3072 },
{ SIGN_RSA_EMSA_PKCS1_SHA2_384, KEY_RSA, 7680 },
{ SIGN_RSA_EMSA_PKCS1_SHA2_512, KEY_RSA, 0 },
{ SIGN_ECDSA_WITH_SHA256_DER, KEY_ECDSA, 256 },
{ SIGN_ECDSA_WITH_SHA384_DER, KEY_ECDSA, 384 },
{ SIGN_ECDSA_WITH_SHA512_DER, KEY_ECDSA, 0 },
{ SIGN_ED25519, KEY_ED25519, 0 },
{ SIGN_ED448, KEY_ED448, 0 },
{ SIGN_BLISS_WITH_SHA2_256, KEY_BLISS, 128 },
{ SIGN_BLISS_WITH_SHA2_384, KEY_BLISS, 192 },
{ SIGN_BLISS_WITH_SHA2_512, KEY_BLISS, 0 }
};
/**
@@ -323,6 +337,10 @@ key_type_t key_type_from_signature_scheme(signature_scheme_t scheme)
case SIGN_ECDSA_384:
case SIGN_ECDSA_521:
return KEY_ECDSA;
case SIGN_ED25519:
return KEY_ED25519;
case SIGN_ED448:
return KEY_ED448;
case SIGN_BLISS_WITH_SHA2_256:
case SIGN_BLISS_WITH_SHA2_384:
case SIGN_BLISS_WITH_SHA2_512:
@@ -37,16 +37,19 @@ typedef enum encryption_scheme_t encryption_scheme_t;
*/
enum key_type_t {
/** key type wildcard */
KEY_ANY = 0,
KEY_ANY = 0,
/** RSA crypto system as in PKCS#1 */
KEY_RSA = 1,
KEY_RSA = 1,
/** ECDSA as in ANSI X9.62 */
KEY_ECDSA = 2,
KEY_ECDSA = 2,
/** DSA */
KEY_DSA = 3,
KEY_DSA = 3,
/** Ed25519 PureEdDSA instance as in draft-irtf-cfrg-eddsa */
KEY_ED25519 = 4,
/** Ed448 PureEdDSA instance as in draft-irtf-cfrg-eddsa */
KEY_ED448 = 5,
/** BLISS */
KEY_BLISS = 4,
/** ElGamal, ... */
KEY_BLISS = 6,
};
/**
@@ -102,6 +105,10 @@ enum signature_scheme_t {
SIGN_ECDSA_384,
/** ECDSA on the P-521 curve with SHA-512 as in RFC 4754 */
SIGN_ECDSA_521,
/** PureEdDSA on Curve25519 as in draft-ietf-curdle-pkix */
SIGN_ED25519,
/** PureEdDSA on Curve448 as in draft-ietf-curdle-pkix */
SIGN_ED448,
/** BLISS with SHA-2_256 */
SIGN_BLISS_WITH_SHA2_256,
/** BLISS with SHA-2_384 */