From 94b894fda9b14ccbe3a171f8acec3fa2023988dd Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Mon, 27 May 2019 11:29:51 +0200 Subject: [PATCH] update tests --- tests/ed25519_test.c | 36 ++++++++++++++++++++++++------------ tests/x25519_test.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/tests/ed25519_test.c b/tests/ed25519_test.c index be783b28..1f19c33f 100644 --- a/tests/ed25519_test.c +++ b/tests/ed25519_test.c @@ -21,32 +21,44 @@ static int _rfc_8410_10_test(void) const char* b64; int type; } rfc_8410_10[] = { + /* RFC 8410 - 10.1. Example Ed25519 Public Key */ { "MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=", PK_PUBLIC | PK_STD }, -#if 0 - { "MIIBLDCB36ADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBUZX" - "N0IERlbW8wHhcNMTYwODAxMTIxOTI0WhcNNDAxMjMxMjM1OTU5WjAZMRcwFQYDVQQD" - "DA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlbgMhAIUg8AmJMKdUdIt93LQ+91oNvzoNJj" - "ga9OukqY6qm05qo0UwQzAPBgNVHRMBAf8EBTADAQEAMA4GA1UdDwEBAAQEAwIDCDAg" - "BgNVHQ4BAQAEFgQUmx9e7e0EM4Xk97xiPFl1uQvIuzswBQYDK2VwA0EAryMB/t3J5v" - "/BzKc9dNZIpDmAgs3babFOTQbs+BolzlDUwsPrdGxO3YNGhW7Ibz3OGhhlxXrCe1Cg" - "w1AH9efZBw==", -1 }, -#endif + /* Okay this is not from RFC 8410, but a custom generated certificate with Ed25519 Public Key. + * Since RFC 8410 has no testvector for that case, one had to be created. + * ( openssl req -verbose -new -x509 -subj "/CN=Public domain ed25519 self-signed certificate" -days 36525 -key <( openssl genpkey -algorithm ed25519 2>/dev/null | tee /dev/fd/3) | openssl x509 ) 3>&1 + * Thx @vdukhovni + */ + { "MIIBhDCCATagAwIBAgIUHDa8kJUZeCuIhknPJ/wDeBW6gZgwBQYDK2VwMDgxNjA0" + "BgNVBAMMLVB1YmxpYyBkb21haW4gZWQyNTUxOSBzZWxmLXNpZ25lZCBjZXJ0aWZp" + "Y2F0ZTAgFw0xOTA1MjMyMTAxMTZaGA8yMTE5MDUyNDIxMDExNlowODE2MDQGA1UE" + "AwwtUHVibGljIGRvbWFpbiBlZDI1NTE5IHNlbGYtc2lnbmVkIGNlcnRpZmljYXRl" + "MCowBQYDK2VwAyEAUEiKvHT0KHXOtNjIhaImokxbiog+Ki6lcgce05tf9UKjUDBO" + "MB0GA1UdDgQWBBS3fmpWaPK2fNpblEmg4tG4ZHO2BDAfBgNVHSMEGDAWgBS3fmpW" + "aPK2fNpblEmg4tG4ZHO2BDAMBgNVHRMEBTADAQH/MAUGAytlcANBADOnwkj8etmx" + "mTaXUP29RaenxpN8dQoQ4wnnIJwxQxTcVWOt2PlUxCFoB9gs0+YZOzhXnQg4hfqk" + "t/HPExwoZQg=", -2 }, + /* RFC 8410 - 10.3. Examples of Ed25519 Private Key */ { "MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC", PK_PRIVATE | PK_STD }, + /* RFC 8410 - 10.3. Examples of Ed25519 Private Key with attribute */ { "MHICAQEwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC" "oB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrB" "Z9w7lshQhqowtrbLDFw4rXAxZuE=", -1 }, }; unsigned n; curve25519_key key; - unsigned char buf[512]; + unsigned char buf[1024]; char tmp[512]; unsigned long buflen, tmplen; for (n = 0; n < sizeof(rfc_8410_10)/sizeof(rfc_8410_10[0]); ++n) { buflen = sizeof(buf); DO(base64_decode(rfc_8410_10[n].b64, strlen(rfc_8410_10[n].b64), buf, &buflen)); - DO(ed25519_import(buf, buflen, &key)); + if (rfc_8410_10[n].type == -2) { + DO(ed25519_import_x509(buf, buflen, &key)); + } else { + DO(ed25519_import(buf, buflen, &key)); + } zeromem(buf, sizeof(buf)); - if (rfc_8410_10[n].type != -1) { + if (rfc_8410_10[n].type > 0) { buflen = sizeof(buf); DO(ed25519_export(buf, &buflen, rfc_8410_10[n].type, &key)); tmplen = sizeof(tmp); diff --git a/tests/x25519_test.c b/tests/x25519_test.c index 3a88f0ec..443c329f 100644 --- a/tests/x25519_test.c +++ b/tests/x25519_test.c @@ -117,6 +117,33 @@ static int _rfc_7748_6_test(void) return CRYPT_OK; } +static int _rfc_8410_10_test(void) +{ + const struct { + const char* b64; + } rfc_8410_10[] = { + /* RFC 8410 - 10.2. Example X25519 Certificate */ + { "MIIBLDCB36ADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBUZX" + "N0IERlbW8wHhcNMTYwODAxMTIxOTI0WhcNNDAxMjMxMjM1OTU5WjAZMRcwFQYDVQQD" + "DA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlbgMhAIUg8AmJMKdUdIt93LQ+91oNvzoNJj" + "ga9OukqY6qm05qo0UwQzAPBgNVHRMBAf8EBTADAQEAMA4GA1UdDwEBAAQEAwIDCDAg" + "BgNVHQ4BAQAEFgQUmx9e7e0EM4Xk97xiPFl1uQvIuzswBQYDK2VwA0EAryMB/t3J5v" + "/BzKc9dNZIpDmAgs3babFOTQbs+BolzlDUwsPrdGxO3YNGhW7Ibz3OGhhlxXrCe1Cg" + "w1AH9efZBw==" }, + }; + unsigned n; + curve25519_key key; + unsigned char buf[1024]; + unsigned long buflen; + for (n = 0; n < sizeof(rfc_8410_10)/sizeof(rfc_8410_10[0]); ++n) { + buflen = sizeof(buf); + DO(base64_decode(rfc_8410_10[n].b64, strlen(rfc_8410_10[n].b64), buf, &buflen)); + DO(x25519_import_x509(buf, buflen, &key)); + zeromem(buf, sizeof(buf)); + } + return CRYPT_OK; +} + static int _x25519_compat_test(void) { curve25519_key priv, pub, imported; @@ -171,6 +198,9 @@ int x25519_test(void) if ((ret = _rfc_7748_6_test()) != CRYPT_OK) { return ret; } + if ((ret = _rfc_8410_10_test()) != CRYPT_OK) { + return ret; + } if ((ret = _x25519_compat_test()) != CRYPT_OK) { return ret; }