mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-17 02:14:01 +08:00
Add sm9 and paillier pem support
This commit is contained in:
@@ -55,47 +55,76 @@
|
||||
#include <openssl/sm9.h>
|
||||
#include "sm9_lcl.h"
|
||||
|
||||
ASN1_SEQUENCE(SM9MasterSecret) = {
|
||||
ASN1_SIMPLE(SM9MasterSecret, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9MasterSecret, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9MasterSecret, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9MasterSecret, pointPpub, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9MasterSecret, masterSecret, BIGNUM)
|
||||
} ASN1_SEQUENCE_END(SM9MasterSecret)
|
||||
IMPLEMENT_ASN1_FUNCTIONS(SM9MasterSecret)
|
||||
IMPLEMENT_ASN1_DUP_FUNCTION(SM9MasterSecret)
|
||||
static int sm9_master_key_cb(int operation, ASN1_VALUE **pval,
|
||||
const ASN1_ITEM *it, void *exarg)
|
||||
{
|
||||
if (operation == ASN1_OP_NEW_PRE) {
|
||||
*pval = (ASN1_VALUE *)SM9_MASTER_KEY_new();
|
||||
if (*pval)
|
||||
return 2;
|
||||
return 0;
|
||||
} else if (operation == ASN1_OP_FREE_PRE) {
|
||||
SM9_MASTER_KEY_free((SM9_MASTER_KEY *)*pval);
|
||||
*pval = NULL;
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
ASN1_SEQUENCE(SM9PublicParameters) = {
|
||||
ASN1_SIMPLE(SM9PublicParameters, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PublicParameters, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PublicParameters, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PublicParameters, pointPpub, ASN1_OCTET_STRING)
|
||||
} ASN1_SEQUENCE_END(SM9PublicParameters)
|
||||
IMPLEMENT_ASN1_FUNCTIONS(SM9PublicParameters)
|
||||
IMPLEMENT_ASN1_DUP_FUNCTION(SM9PublicParameters)
|
||||
ASN1_SEQUENCE_cb(SM9MasterSecret, sm9_master_key_cb) = {
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, pointPpub, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, masterSecret, BIGNUM)
|
||||
} ASN1_SEQUENCE_END_cb(SM9_MASTER_KEY, SM9MasterSecret)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(SM9_MASTER_KEY,SM9MasterSecret,SM9MasterSecret)
|
||||
|
||||
ASN1_SEQUENCE(SM9PrivateKey) = {
|
||||
ASN1_SIMPLE(SM9PrivateKey, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PrivateKey, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PrivateKey, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PrivateKey, pointPpub, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9PrivateKey, identity, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9PrivateKey, publicPoint, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9PrivateKey, privatePoint, ASN1_OCTET_STRING)
|
||||
} ASN1_SEQUENCE_END(SM9PrivateKey)
|
||||
IMPLEMENT_ASN1_FUNCTIONS(SM9PrivateKey)
|
||||
IMPLEMENT_ASN1_DUP_FUNCTION(SM9PrivateKey)
|
||||
ASN1_SEQUENCE_cb(SM9PublicParameters, sm9_master_key_cb) = {
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_MASTER_KEY, pointPpub, ASN1_OCTET_STRING)
|
||||
} ASN1_SEQUENCE_END_cb(SM9_MASTER_KEY, SM9PublicParameters)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(SM9_MASTER_KEY,SM9PublicParameters,SM9PublicParameters)
|
||||
|
||||
ASN1_SEQUENCE(SM9PublicKey) = {
|
||||
ASN1_SIMPLE(SM9PublicKey, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PublicKey, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PublicKey, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9PublicKey, pointPpub, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9PublicKey, identity, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9PublicKey, publicPoint, ASN1_OCTET_STRING)
|
||||
} ASN1_SEQUENCE_END(SM9PublicKey)
|
||||
IMPLEMENT_ASN1_FUNCTIONS(SM9PublicKey)
|
||||
IMPLEMENT_ASN1_DUP_FUNCTION(SM9PublicKey)
|
||||
|
||||
static int sm9_key_cb(int operation, ASN1_VALUE **pval,
|
||||
const ASN1_ITEM *it, void *exarg)
|
||||
{
|
||||
if (operation == ASN1_OP_NEW_PRE) {
|
||||
*pval = (ASN1_VALUE *)SM9_KEY_new();
|
||||
if (*pval)
|
||||
return 2;
|
||||
return 0;
|
||||
} else if (operation == ASN1_OP_FREE_PRE) {
|
||||
SM9_KEY_free((SM9_KEY *)*pval);
|
||||
*pval = NULL;
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
ASN1_SEQUENCE_cb(SM9PrivateKey, sm9_key_cb) = {
|
||||
ASN1_SIMPLE(SM9_KEY, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_KEY, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_KEY, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_KEY, pointPpub, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9_KEY, identity, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9_KEY, publicPoint, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9_KEY, privatePoint, ASN1_OCTET_STRING)
|
||||
} ASN1_SEQUENCE_END_cb(SM9_KEY, SM9PrivateKey)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(SM9_KEY,SM9PrivateKey,SM9PrivateKey)
|
||||
|
||||
ASN1_SEQUENCE_cb(SM9PublicKey, sm9_key_cb) = {
|
||||
ASN1_SIMPLE(SM9_KEY, pairing, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_KEY, scheme, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_KEY, hash1, ASN1_OBJECT),
|
||||
ASN1_SIMPLE(SM9_KEY, pointPpub, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9_KEY, identity, ASN1_OCTET_STRING),
|
||||
ASN1_SIMPLE(SM9_KEY, publicPoint, ASN1_OCTET_STRING)
|
||||
} ASN1_SEQUENCE_END_cb(SM9_KEY, SM9PublicKey)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(SM9_KEY,SM9PublicKey,SM9PublicKey)
|
||||
|
||||
ASN1_SEQUENCE(SM9Ciphertext) = {
|
||||
ASN1_SIMPLE(SM9Ciphertext, pointC1, ASN1_OCTET_STRING),
|
||||
|
||||
Reference in New Issue
Block a user