diff --git a/src/crypto/Digest.cpp b/src/crypto/Digest.cpp index 848a48d07..543ff9dd0 100644 --- a/src/crypto/Digest.cpp +++ b/src/crypto/Digest.cpp @@ -122,10 +122,10 @@ int Digest::toMethod(string_view uri) if(uri == URI_SHA384 || uri == URI_RSA_SHA384 || uri == URI_RSA_PSS_SHA384 || uri == URI_ECDSA_SHA384) return NID_sha384; if(uri == URI_SHA512 || uri == URI_RSA_SHA512 || uri == URI_RSA_PSS_SHA512 || uri == URI_ECDSA_SHA512) return NID_sha512; #ifndef LIBRESSL_VERSION_NUMBER - if(uri == URI_SHA3_224 || uri == URI_RSA_PSS_SHA3_224) return NID_sha3_224; - if(uri == URI_SHA3_256 || uri == URI_RSA_PSS_SHA3_256) return NID_sha3_256; - if(uri == URI_SHA3_384 || uri == URI_RSA_PSS_SHA3_384) return NID_sha3_384; - if(uri == URI_SHA3_512 || uri == URI_RSA_PSS_SHA3_512) return NID_sha3_512; + if(uri == URI_SHA3_224 || uri == URI_RSA_PSS_SHA3_224 || uri == URI_ECDSA_SHA3_224) return NID_sha3_224; + if(uri == URI_SHA3_256 || uri == URI_RSA_PSS_SHA3_256 || uri == URI_ECDSA_SHA3_256) return NID_sha3_256; + if(uri == URI_SHA3_384 || uri == URI_RSA_PSS_SHA3_384 || uri == URI_ECDSA_SHA3_384) return NID_sha3_384; + if(uri == URI_SHA3_512 || uri == URI_RSA_PSS_SHA3_512 || uri == URI_ECDSA_SHA3_512) return NID_sha3_512; #endif THROW("Digest method URI '%.*s' is not supported.", int(uri.size()), uri.data()); } @@ -171,11 +171,19 @@ string Digest::toEcUri(const string &uri) if(uri == URI_SHA256) return URI_ECDSA_SHA256; if(uri == URI_SHA384) return URI_ECDSA_SHA384; if(uri == URI_SHA512) return URI_ECDSA_SHA512; + if(uri == URI_SHA3_224) return URI_ECDSA_SHA3_224; + if(uri == URI_SHA3_256) return URI_ECDSA_SHA3_256; + if(uri == URI_SHA3_384) return URI_ECDSA_SHA3_384; + if(uri == URI_SHA3_512) return URI_ECDSA_SHA3_512; if(uri == URI_ECDSA_SHA1 || uri == URI_ECDSA_SHA224 || uri == URI_ECDSA_SHA256 || uri == URI_ECDSA_SHA384 || - uri == URI_ECDSA_SHA512) + uri == URI_ECDSA_SHA512 || + uri == URI_ECDSA_SHA3_224 || + uri == URI_ECDSA_SHA3_256 || + uri == URI_ECDSA_SHA3_384 || + uri == URI_ECDSA_SHA3_512) return uri; return {}; } diff --git a/src/crypto/Digest.h b/src/crypto/Digest.h index d68155887..9aeb3a59a 100644 --- a/src/crypto/Digest.h +++ b/src/crypto/Digest.h @@ -56,6 +56,11 @@ #define URI_ECDSA_SHA256 "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256" #define URI_ECDSA_SHA384 "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384" #define URI_ECDSA_SHA512 "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512" +// https://www.rfc-editor.org/rfc/rfc9231.html#name-ecdsa-sha-ecdsa-ripemd160-e +#define URI_ECDSA_SHA3_224 "http://www.w3.org/2021/04/xmldsig-more#ecdsa-sha3-224" +#define URI_ECDSA_SHA3_256 "http://www.w3.org/2021/04/xmldsig-more#ecdsa-sha3-256" +#define URI_ECDSA_SHA3_384 "http://www.w3.org/2021/04/xmldsig-more#ecdsa-sha3-384" +#define URI_ECDSA_SHA3_512 "http://www.w3.org/2021/04/xmldsig-more#ecdsa-sha3-512" #if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3080200fL using EVP_MD_CTX = struct env_md_ctx_st;