mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-06 16:36:16 +08:00
Update X509_KEY API to support SM9
This commit is contained in:
@@ -22,6 +22,22 @@ static int lms_types[] = {
|
||||
LMS_HASH256_M32_H5,
|
||||
};
|
||||
|
||||
static int test_print_consts(void)
|
||||
{
|
||||
format_print(stderr, 0, 4, "sizeof(LMS_PUBLIC_KEY): %zu\n", sizeof(LMS_PUBLIC_KEY));
|
||||
format_print(stderr, 0, 4, "LMS_PUBLIC_KEY_SIZE: %zu\n", LMS_PUBLIC_KEY_SIZE);
|
||||
format_print(stderr, 0, 4, "LMS_PRIVATE_KEY_SIZE: %zu\n", LMS_PRIVATE_KEY_SIZE);
|
||||
format_print(stderr, 0, 4, "sizeof(LMS_SIGNATURE): %zu\n", sizeof(LMS_SIGNATURE));
|
||||
format_print(stderr, 0, 4, "LMS_SIGNATURE_MAX_SIZE: %zu\n", LMS_SIGNATURE_MAX_SIZE);
|
||||
format_print(stderr, 0, 4, "sizeof(HSS_PUBLIC_KEY): %zu\n", sizeof(HSS_PUBLIC_KEY));
|
||||
format_print(stderr, 0, 4, "HSS_PUBLIC_KEY_SIZE: %zu\n", HSS_PUBLIC_KEY_SIZE);
|
||||
format_print(stderr, 0, 4, "HSS_PRIVATE_KEY_MAX_SIZE: %zu\n", HSS_PRIVATE_KEY_MAX_SIZE);
|
||||
format_print(stderr, 0, 4, "sizeof(HSS_SIGNATURE): %zu\n", sizeof(HSS_SIGNATURE));
|
||||
format_print(stderr, 0, 4, "HSS_SIGNATURE_MAX_SIZE: %zu\n", HSS_SIGNATURE_MAX_SIZE);
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if defined(ENABLE_LMS_CROSSCHECK) && defined(ENABLE_SHA2)
|
||||
static int test_rfc8554_test1(void)
|
||||
@@ -1030,6 +1046,7 @@ static int test_hss_public_key_algor(void)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (test_print_consts() != 1) goto err;
|
||||
#if defined(ENABLE_LMS_CROSSCHECK) && defined(ENABLE_SHA2)
|
||||
if (test_rfc8554_test1() != 1) goto err;
|
||||
#endif
|
||||
|
||||
@@ -375,6 +375,7 @@ static int test_x509_sign(void)
|
||||
error_print();
|
||||
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], args, argslen, sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
@@ -389,6 +390,65 @@ static int test_x509_sign(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_x509_sign_sm9(void)
|
||||
{
|
||||
SM9_SIGN_MASTER_KEY sm9_sign_master_key;
|
||||
SM9_SIGN_KEY sm9_sign_key;
|
||||
char *id = "guan@pku.edu.cn";
|
||||
size_t idlen = strlen(id);
|
||||
X509_KEY x509_key;
|
||||
X509_SIGN_CTX sign_ctx;
|
||||
uint8_t msg[66];
|
||||
uint8_t sig[128]; // sm9 signature size = 104
|
||||
size_t siglen;
|
||||
|
||||
if (sm9_sign_master_key_generate(&sm9_sign_master_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (sm9_sign_master_key_extract_key(&sm9_sign_master_key, id, idlen, &sm9_sign_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (x509_key_set_sm9_sign_key(&x509_key, &sm9_sign_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_sign_init(&sign_ctx, &x509_key, NULL, 0) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_sign_update(&sign_ctx, msg, sizeof(msg)) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_sign_finish(&sign_ctx, sig, &siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (x509_key_set_sm9_sign_master_key(&x509_key, &sm9_sign_master_key) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_verify_init(&sign_ctx, &x509_key, id, idlen, sig, siglen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_verify_update(&sign_ctx, msg, sizeof(msg)) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_verify_finish(&sign_ctx) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_x509_key_exchange(void)
|
||||
{
|
||||
X509_KEY key;
|
||||
@@ -510,6 +570,7 @@ int main(void)
|
||||
if (test_x509_private_key_info_encrypt_to_der() != 1) goto err;
|
||||
if (test_x509_private_key_info_encrypt_to_pem() != 1) goto err;
|
||||
if (test_x509_sign() != 1) goto err;
|
||||
if (test_x509_sign_sm9() != 1) goto err;
|
||||
if (test_x509_key_exchange() != 1) goto err;
|
||||
if (test_x509_kem() != 1) goto err;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user