diff options
author | tb <> | 2024-08-28 07:15:04 +0000 |
---|---|---|
committer | tb <> | 2024-08-28 07:15:04 +0000 |
commit | 075c048b99cefdce1245c13c4aa449b28ce8366c (patch) | |
tree | bb2a05a5261bd27ee87b1f4c8d85ebba6042d17d /src/lib/libcrypto/evp | |
parent | a03c40153c8f8e484e8b98ea5a52b87116f9bf5a (diff) | |
download | openbsd-075c048b99cefdce1245c13c4aa449b28ce8366c.tar.gz openbsd-075c048b99cefdce1245c13c4aa449b28ce8366c.tar.bz2 openbsd-075c048b99cefdce1245c13c4aa449b28ce8366c.zip |
Implement X509_get_signature_info()
This is a slightly strange combination of OBJ_find_sigid_algs() and the
security level API necessary because OBJ_find_sigid_algs() on its own
isn't smart enough for the special needs of RSA-PSS and EdDSA.
The API extracts the hash's NID and the pubkey's NID from the certificate's
signatureAlgorithm and invokes special handlers for RSA-PSS and EdDSA
for retrieving the corresponding information. This isn't entirely free
for RSA-PSS, but for now we don't cache this information.
The security bits calculation is a bit hand-wavy, but that's something
that comes along with this sort of numerology.
ok jsing
Diffstat (limited to 'src/lib/libcrypto/evp')
-rw-r--r-- | src/lib/libcrypto/evp/evp_local.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib/libcrypto/evp/evp_local.h b/src/lib/libcrypto/evp/evp_local.h index 3e90e068e6..5d541ffec4 100644 --- a/src/lib/libcrypto/evp/evp_local.h +++ b/src/lib/libcrypto/evp/evp_local.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: evp_local.h,v 1.23 2024/08/22 12:24:24 tb Exp $ */ | 1 | /* $OpenBSD: evp_local.h,v 1.24 2024/08/28 07:15:04 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -112,6 +112,9 @@ struct evp_pkey_asn1_method_st { | |||
112 | int (*pkey_bits)(const EVP_PKEY *pk); | 112 | int (*pkey_bits)(const EVP_PKEY *pk); |
113 | int (*pkey_security_bits)(const EVP_PKEY *pk); | 113 | int (*pkey_security_bits)(const EVP_PKEY *pk); |
114 | 114 | ||
115 | int (*signature_info)(const X509_ALGOR *sig_alg, int *out_md_nid, | ||
116 | int *out_pkey_nid, int *out_security_bits, uint32_t *out_flags); | ||
117 | |||
115 | int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder, | 118 | int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder, |
116 | int derlen); | 119 | int derlen); |
117 | int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder); | 120 | int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder); |