mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-06 11:53:39 +08:00
Refactor X509_KEY
This commit is contained in:
@@ -16,8 +16,7 @@
|
||||
#include <gmssl/hex.h>
|
||||
#include <gmssl/rand.h>
|
||||
#include <gmssl/error.h>
|
||||
#include <gmssl/ecdsa.h>
|
||||
#include <gmssl/secp256r1_ecdsa.h>
|
||||
#include <gmssl/secp256r1.h>
|
||||
|
||||
/*
|
||||
d 0x5
|
||||
@@ -154,60 +153,11 @@ static int test_ecdsa_digest_lengths(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ecdsa_generic(void)
|
||||
{
|
||||
EC_KEY key;
|
||||
uint8_t dgst32[32];
|
||||
uint8_t dgst48[48];
|
||||
uint8_t sig[SECP256R1_ECDSA_SIGNATURE_MAX_SIZE];
|
||||
size_t siglen;
|
||||
|
||||
key.oid = OID_secp256r1;
|
||||
if (secp256r1_key_generate(&key.u.secp256r1_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
memset(dgst32, 0x11, sizeof(dgst32));
|
||||
memset(dgst48, 0x22, sizeof(dgst48));
|
||||
|
||||
if (ecdsa_sign(&key, dgst32, sizeof(dgst32), sig, &siglen) != 1
|
||||
|| siglen > sizeof(sig)
|
||||
|| ecdsa_verify(&key, dgst32, sizeof(dgst32), sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
dgst32[0] ^= 0x01;
|
||||
if (ecdsa_verify(&key, dgst32, sizeof(dgst32), sig, siglen) != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ecdsa_sign(&key, dgst48, sizeof(dgst48), sig, &siglen) != 1
|
||||
|| siglen > sizeof(sig)
|
||||
|| ecdsa_verify(&key, dgst48, sizeof(dgst48), sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (ecdsa_sign_fixed_len(&key, dgst48, sizeof(dgst48), siglen, sig) != 1
|
||||
|| ecdsa_verify(&key, dgst48, sizeof(dgst48), sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (ecdsa_sign(&key, dgst32, 31, sig, &siglen) >= 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (test_ecdsa() != 1) goto err;
|
||||
if (test_ecdsa_verify_infinity() != 1) goto err;
|
||||
if (test_ecdsa_digest_lengths() != 1) goto err;
|
||||
if (test_ecdsa_generic() != 1) goto err;
|
||||
|
||||
printf("%s all tests passed\n", __FILE__);
|
||||
return 0;
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <gmssl/sm2.h>
|
||||
#include <gmssl/ec.h>
|
||||
#include <gmssl/error.h>
|
||||
|
||||
@@ -61,58 +60,9 @@ static int test_ec_named_curve(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ec_point_print(void)
|
||||
{
|
||||
SM2_KEY sm2_key;
|
||||
uint8_t buf[256];
|
||||
uint8_t *p = buf;
|
||||
size_t len = 0;
|
||||
|
||||
if (sm2_key_generate(&sm2_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (sm2_z256_point_to_der(&(sm2_key.public_key), &p, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
ec_point_print(stderr, 0, 4, "ECPoint", buf, len);
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ec_private_key_print(void)
|
||||
{
|
||||
SM2_KEY sm2_key;
|
||||
uint8_t buf[256];
|
||||
uint8_t *p = buf;
|
||||
const uint8_t *cp = buf;
|
||||
size_t len = 0;
|
||||
const uint8_t *d;
|
||||
size_t dlen;
|
||||
|
||||
if (sm2_key_generate(&sm2_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (sm2_private_key_to_der(&sm2_key, &p, &len) != 1
|
||||
|| asn1_sequence_from_der(&d, &dlen, &cp, &len) != 1
|
||||
|| asn1_length_is_zero(len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
ec_private_key_print(stderr, 0, 4, "ECPrivateKey", d, dlen);
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (test_ec_named_curve() != 1) goto err;
|
||||
if (test_ec_point_print() != 1) goto err;
|
||||
if (test_ec_private_key_print() != 1) goto err;
|
||||
printf("%s all tests passed\n", __FILE__);
|
||||
return 0;
|
||||
err:
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <gmssl/rand.h>
|
||||
#include <gmssl/mem.h>
|
||||
#include <gmssl/error.h>
|
||||
#include <gmssl/secp256r1_key.h>
|
||||
#include <gmssl/secp256r1.h>
|
||||
|
||||
|
||||
static int test_secp256r1_key_generate(void)
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
#include <gmssl/hex.h>
|
||||
#include <gmssl/rand.h>
|
||||
#include <gmssl/error.h>
|
||||
#include <gmssl/ecdsa.h>
|
||||
#include <gmssl/secp384r1_ecdsa.h>
|
||||
#include <gmssl/secp384r1.h>
|
||||
|
||||
static int test_secp384r1_ecdsa_do_sign(void)
|
||||
{
|
||||
@@ -170,61 +169,12 @@ static int test_secp384r1_ecdsa_verify_infinity(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_secp384r1_ecdsa_generic(void)
|
||||
{
|
||||
EC_KEY key;
|
||||
uint8_t dgst32[32];
|
||||
uint8_t dgst48[48];
|
||||
uint8_t sig[SECP384R1_ECDSA_SIGNATURE_MAX_SIZE];
|
||||
size_t siglen;
|
||||
|
||||
key.oid = OID_secp384r1;
|
||||
if (secp384r1_key_generate(&key.u.secp384r1_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
memset(dgst32, 0x33, sizeof(dgst32));
|
||||
memset(dgst48, 0x44, sizeof(dgst48));
|
||||
|
||||
if (ecdsa_sign(&key, dgst48, sizeof(dgst48), sig, &siglen) != 1
|
||||
|| siglen > sizeof(sig)
|
||||
|| ecdsa_verify(&key, dgst48, sizeof(dgst48), sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
dgst48[0] ^= 0x01;
|
||||
if (ecdsa_verify(&key, dgst48, sizeof(dgst48), sig, siglen) != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ecdsa_sign(&key, dgst32, sizeof(dgst32), sig, &siglen) != 1
|
||||
|| siglen > sizeof(sig)
|
||||
|| ecdsa_verify(&key, dgst32, sizeof(dgst32), sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (ecdsa_sign_fixed_len(&key, dgst32, sizeof(dgst32), siglen, sig) != 1
|
||||
|| ecdsa_verify(&key, dgst32, sizeof(dgst32), sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (ecdsa_sign(&key, dgst32, 31, sig, &siglen) >= 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (test_secp384r1_ecdsa_do_sign() != 1) goto err;
|
||||
if (test_secp384r1_ecdsa_sign() != 1) goto err;
|
||||
if (test_secp384r1_ecdsa_ctx() != 1) goto err;
|
||||
if (test_secp384r1_ecdsa_verify_infinity() != 1) goto err;
|
||||
if (test_secp384r1_ecdsa_generic() != 1) goto err;
|
||||
|
||||
printf("%s all tests passed\n", __FILE__);
|
||||
return 0;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <gmssl/rand.h>
|
||||
#include <gmssl/mem.h>
|
||||
#include <gmssl/error.h>
|
||||
#include <gmssl/secp384r1_key.h>
|
||||
#include <gmssl/secp384r1.h>
|
||||
|
||||
|
||||
static int test_secp384r1_key_generate(void)
|
||||
|
||||
@@ -35,6 +35,9 @@ struct {
|
||||
#ifdef ENABLE_SECP256R1
|
||||
{ OID_ec_public_key, OID_secp256r1 },
|
||||
#endif
|
||||
#ifdef ENABLE_SECP384R1
|
||||
{ OID_ec_public_key, OID_secp384r1 },
|
||||
#endif
|
||||
#ifdef ENABLE_LMS
|
||||
{ OID_lms_hashsig, LMS_SM3_M32_H5 },
|
||||
{ OID_hss_lms_hashsig, OID_undef }, // use lms_types[]
|
||||
@@ -195,96 +198,6 @@ static int test_x509_public_key_info_to_der(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ec_private_key_to_der(void)
|
||||
{
|
||||
X509_KEY key;
|
||||
uint8_t buf[512];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(tests)/sizeof(tests[0]) && tests[i].algor == OID_ec_public_key; i++) {
|
||||
const uint8_t *cp = buf;
|
||||
uint8_t *p = buf;
|
||||
size_t len = 0;
|
||||
int encode_params;
|
||||
int encode_pubkey;
|
||||
|
||||
// test 1
|
||||
encode_params = 0;
|
||||
encode_pubkey = 0;
|
||||
if (ec_private_key_to_der(&x509_keys[i], encode_params, encode_pubkey, &p, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
//format_print(stderr, 0, 0, "ECPrivateKey encode_params = %d, encode_pubkey = %d\n", encode_params, encode_pubkey);
|
||||
//format_bytes(stderr, 0, 0, "ECPrivateKey", buf, len);
|
||||
if (ec_private_key_from_der(&key, tests[i].algor_param, &cp, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_public_key_equ(&key, &x509_keys[i]) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// test 2
|
||||
encode_params = 0;
|
||||
encode_pubkey = 1;
|
||||
if (ec_private_key_to_der(&x509_keys[i], encode_params, encode_pubkey, &p, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
//format_print(stderr, 0, 0, "ECPrivateKey encode_params = %d, encode_pubkey = %d\n", encode_params, encode_pubkey);
|
||||
//format_bytes(stderr, 0, 0, "ECPrivateKey", buf, len);
|
||||
if (ec_private_key_from_der(&key, tests[i].algor_param, &cp, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_public_key_equ(&key, &x509_keys[i]) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// test 3
|
||||
encode_params = 1;
|
||||
encode_pubkey = 0;
|
||||
if (ec_private_key_to_der(&x509_keys[i], encode_params, encode_pubkey, &p, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
//format_print(stderr, 0, 0, "ECPrivateKey encode_params = %d, encode_pubkey = %d\n", encode_params, encode_pubkey);
|
||||
//format_bytes(stderr, 0, 0, "ECPrivateKey", buf, len);
|
||||
if (ec_private_key_from_der(&key, tests[i].algor_param, &cp, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_public_key_equ(&key, &x509_keys[i]) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// test 4
|
||||
encode_params = 1;
|
||||
encode_pubkey = 1;
|
||||
if (ec_private_key_to_der(&x509_keys[i], encode_params, encode_pubkey, &p, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
//format_print(stderr, 0, 0, "ECPrivateKey encode_params = %d, encode_pubkey = %d\n", encode_params, encode_pubkey);
|
||||
//format_bytes(stderr, 0, 0, "ECPrivateKey", buf, len);
|
||||
if (ec_private_key_from_der(&key, tests[i].algor_param, &cp, &len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_public_key_equ(&key, &x509_keys[i]) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_x509_private_key_info_to_der(void)
|
||||
{
|
||||
X509_KEY key;
|
||||
@@ -455,11 +368,17 @@ static int test_x509_sign(void)
|
||||
memset(msg, 0xa5, sizeof(msg));
|
||||
|
||||
for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
|
||||
int sign_algor;
|
||||
|
||||
if (tests[i].algor == OID_kyber_kem) {
|
||||
continue;
|
||||
}
|
||||
sign_algor = test_sign_algor(&x509_keys[i]);
|
||||
if (sign_algor == OID_undef) {
|
||||
continue;
|
||||
}
|
||||
//format_print(stderr, 0, 4, "%s\n", x509_public_key_algor_name(tests[i].algor));
|
||||
if (x509_sign_init(&sign_ctx, &x509_keys[i], test_sign_algor(&x509_keys[i]), args, argslen) != 1) {
|
||||
if (x509_sign_init(&sign_ctx, &x509_keys[i], sign_algor, args, argslen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
@@ -468,7 +387,7 @@ static int test_x509_sign(void)
|
||||
return -1;
|
||||
}
|
||||
format_print(stderr, 0, 4, "%s: %zu\n", x509_public_key_algor_name(tests[i].algor), siglen);
|
||||
if (x509_verify_init(&sign_ctx, &x509_keys[i], test_sign_algor(&x509_keys[i]), args, argslen, sig, siglen) != 1) {
|
||||
if (x509_verify_init(&sign_ctx, &x509_keys[i], sign_algor, args, argslen, sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
@@ -558,6 +477,9 @@ static int test_x509_key_exchange(void)
|
||||
if (tests[i].algor != OID_ec_public_key) {
|
||||
continue;
|
||||
}
|
||||
if (tests[i].algor_param == OID_secp384r1) {
|
||||
continue;
|
||||
}
|
||||
if (x509_key_generate(&key, tests[i].algor, &tests[i].algor_param, sizeof(tests[i].algor_param)) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
@@ -660,7 +582,6 @@ int main(void)
|
||||
if (test_x509_key_generate() != 1) goto err;
|
||||
if (test_x509_public_key_to_bytes() != 1) goto err;
|
||||
if (test_x509_public_key_info_to_der() != 1) goto err;
|
||||
if (test_ec_private_key_to_der() != 1) goto err;
|
||||
if (test_x509_private_key_info_to_der() != 1) goto err;
|
||||
if (test_x509_private_key_info_encrypt_to_der() != 1) goto err;
|
||||
if (test_x509_private_key_info_encrypt_to_pem() != 1) goto err;
|
||||
|
||||
Reference in New Issue
Block a user