summaryrefslogtreecommitdiff
path: root/third_party/heimdal/lib/hx509/crypto.c
diff options
context:
space:
mode:
authorJoseph Sutton <josephsutton@catalyst.net.nz>2023-03-09 09:00:02 +1300
committerAndrew Bartlett <abartlet@samba.org>2023-03-31 01:48:30 +0000
commita87aae5292d1c43b987dcfa77a51b6aa5aa3e004 (patch)
treec1af6a7ddb6a196d4af09cd086815be51a709365 /third_party/heimdal/lib/hx509/crypto.c
parentf448a1649cf4af11f1ceba55ec62e9b2a3db24f1 (diff)
downloadsamba-a87aae5292d1c43b987dcfa77a51b6aa5aa3e004.tar.gz
third_party/heimdal: Import lorikeet-heimdal-202303200103 (commit 2ee541b5e963f7cffb1ec4acd1a8cc45426a9f28)
NOTE: THIS COMMIT WON'T COMPILE/WORK ON ITS OWN! Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'third_party/heimdal/lib/hx509/crypto.c')
-rw-r--r--third_party/heimdal/lib/hx509/crypto.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/third_party/heimdal/lib/hx509/crypto.c b/third_party/heimdal/lib/hx509/crypto.c
index 8d368ed9c4d..05f694b41c5 100644
--- a/third_party/heimdal/lib/hx509/crypto.c
+++ b/third_party/heimdal/lib/hx509/crypto.c
@@ -1304,10 +1304,27 @@ hx509_parse_private_key(hx509_context context,
*private_key = NULL;
- if (format == HX509_KEY_FORMAT_PKCS8) {
+ ops = hx509_find_private_alg(&keyai->algorithm);
+ if (ops == NULL) {
+ hx509_clear_error_string(context);
+ return HX509_SIG_ALG_NO_SUPPORTED;
+ }
+
+ ret = hx509_private_key_init(private_key, ops, NULL);
+ if (ret) {
+ hx509_set_error_string(context, 0, ret, "out of memory");
+ return ret;
+ }
+
+ ret = (*ops->import)(context, keyai, data, len, format, *private_key);
+ if (ret)
+ hx509_private_key_free(private_key);
+
+ if (ret && format == HX509_KEY_FORMAT_PKCS8) {
PKCS8PrivateKeyInfo ki;
hx509_private_key key;
+ /* Re-enter to try parsing the DER-encoded key from PKCS#8 envelope */
ret = decode_PKCS8PrivateKeyInfo(data, len, &ki, NULL);
if (ret) {
hx509_set_error_string(context, 0, HX509_PARSING_KEY_FAILED,
@@ -1315,39 +1332,18 @@ hx509_parse_private_key(hx509_context context,
"key");
return HX509_PARSING_KEY_FAILED;
}
-
- /* Re-enter to parse DER-encoded key from PKCS#8 envelope */
ret = hx509_parse_private_key(context, &ki.privateKeyAlgorithm,
ki.privateKey.data, ki.privateKey.length,
HX509_KEY_FORMAT_DER, &key);
free_PKCS8PrivateKeyInfo(&ki);
if (ret) {
- hx509_set_error_string(context, 0, HX509_PARSING_KEY_FAILED,
- "Failed to parse RSA key from PKCS#8 "
+ hx509_set_error_string(context, 0, HX509_PARSING_KEY_FAILED,
+ "Failed to parse RSA key from PKCS#8 "
"envelope");
- return HX509_PARSING_KEY_FAILED;
+ return HX509_PARSING_KEY_FAILED;
}
-
*private_key = key;
- return ret;
- }
-
- ops = hx509_find_private_alg(&keyai->algorithm);
- if (ops == NULL) {
- hx509_clear_error_string(context);
- return HX509_SIG_ALG_NO_SUPPORTED;
}
-
- ret = hx509_private_key_init(private_key, ops, NULL);
- if (ret) {
- hx509_set_error_string(context, 0, ret, "out of memory");
- return ret;
- }
-
- ret = (*ops->import)(context, keyai, data, len, format, *private_key);
- if (ret)
- hx509_private_key_free(private_key);
-
return ret;
}