mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-07 00:46:17 +08:00
Add X509_KEY to support different public key algos
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2026 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -48,7 +48,8 @@ int sm2encrypt_main(int argc, char **argv)
|
||||
FILE *outfp = stdout;
|
||||
uint8_t cert[1024];
|
||||
size_t certlen;
|
||||
SM2_KEY key;
|
||||
SM2_KEY sm2_key;
|
||||
X509_KEY x509_key;
|
||||
SM2_ENC_CTX ctx;
|
||||
uint8_t inbuf[SM2_MAX_PLAINTEXT_SIZE + 1];
|
||||
uint8_t outbuf[SM2_MAX_CIPHERTEXT_SIZE];
|
||||
@@ -118,16 +119,22 @@ bad:
|
||||
|
||||
|
||||
if (pubkeyfile) {
|
||||
if (sm2_public_key_info_from_pem(&key, pubkeyfp) != 1) {
|
||||
if (sm2_public_key_info_from_pem(&sm2_key, pubkeyfp) != 1) {
|
||||
fprintf(stderr, "gmssl %s: parse public key failed\n", prog);
|
||||
goto end;
|
||||
}
|
||||
} else if (certfile) {
|
||||
if (x509_cert_from_pem(cert, &certlen, sizeof(cert), certfp) != 1
|
||||
|| x509_cert_get_subject_public_key(cert, certlen, &key) != 1) {
|
||||
|| x509_cert_get_subject_public_key(cert, certlen, &x509_key) != 1) {
|
||||
fprintf(stderr, "gmssl %s: parse certificate failed\n", prog);
|
||||
goto end;
|
||||
}
|
||||
if (x509_key.algor != OID_ec_public_key
|
||||
|| x509_key.algor_param != OID_sm2) {
|
||||
fprintf(stderr, "gmssl %s: invalid certificate type\n", prog);
|
||||
goto end;
|
||||
}
|
||||
sm2_key = x509_key.u.sm2_key;
|
||||
} else {
|
||||
fprintf(stderr, "gmssl %s: '-pubkey' or '-cert' option required\n", prog);
|
||||
goto end;
|
||||
@@ -150,7 +157,7 @@ bad:
|
||||
fprintf(stderr, "gmssl %s: sm2_encrypt_update failed\n", prog);
|
||||
return -1;
|
||||
}
|
||||
if (sm2_encrypt_finish(&ctx, &key, outbuf, &outlen) != 1) {
|
||||
if (sm2_encrypt_finish(&ctx, &sm2_key, outbuf, &outlen) != 1) {
|
||||
fprintf(stderr, "gmssl %s: sm2_encrypt_finish error\n", prog);
|
||||
goto end;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user