Example #1
0
static int test_sm2_sign(void)
{
	int rv;
	EC_KEY *ec_key = NULL;
	unsigned char dgst[32];
	ECDSA_SIG *sig = NULL;
	unsigned char sigbuf[128];
	unsigned int siglen;

	ec_key = EC_KEY_new_by_curve_name(NID_sm2p256v1);
	OPENSSL_assert(ec_key);
	rv = EC_KEY_generate_key(ec_key);
	OPENSSL_assert(rv == 1);

	RAND_bytes(dgst, sizeof(dgst));
	
	sig = SM2_do_sign(dgst, (int)sizeof(dgst), ec_key);
	OPENSSL_assert(sig);
	rv = SM2_do_verify(dgst, (int)sizeof(dgst), sig, ec_key);
	OPENSSL_assert(rv == 1);

	rv = SM2_sign(0, dgst, sizeof(dgst), sigbuf, &siglen, ec_key);
	OPENSSL_assert(rv == 1);
	rv = SM2_verify(0, dgst, sizeof(dgst), sigbuf, siglen, ec_key);
	OPENSSL_assert(rv == 1);

	EC_KEY_free(ec_key);
	ECDSA_SIG_free(sig);

	printf("%s() success\n", __FUNCTION__);
	return 0;
}
Example #2
0
static int pkey_sm2_verify(EVP_PKEY_CTX *ctx,
	const unsigned char *sig, size_t siglen,
	const unsigned char *dgst, size_t dgstlen)
{
	EC_PKEY_CTX *ec_ctx = ctx->data;
	EC_KEY *ec_key = ctx->pkey->pkey.ec;
	int type = ec_ctx->md ? EVP_MD_type(ec_ctx->md) : NID_sm3;

	return SM2_verify(type, dgst, dgstlen, sig, siglen, ec_key);
}
Example #3
0
static int pkey_ec_verifyctx(EVP_PKEY_CTX *ctx,
	const unsigned char *sig, int siglen, EVP_MD_CTX *mctx)
{
	unsigned char dgst[EVP_MAX_MD_SIZE];
	unsigned int dgstlen;
	EC_PKEY_CTX *ec_ctx = ctx->data;
	EC_KEY *ec_key = ctx->pkey->pkey.ec;
	int type = ec_ctx->md ? EVP_MD_type(ec_ctx->md) : NID_sm3;

	dgstlen = sizeof(dgst);
	if (!EVP_DigestFinal_ex(mctx, dgst, &dgstlen)) {
		return -1;
	}
	
	return SM2_verify(type, dgst, dgstlen, sig, siglen, ec_key);
}
Example #4
0
static int pkey_ec_verify(EVP_PKEY_CTX *ctx,
	const unsigned char *sig, size_t siglen,
	const unsigned char *dgst, size_t dgstlen)
{
	int ret, type;
	EC_PKEY_CTX *dctx = ctx->data;
	EC_KEY *ec_key = ctx->pkey->pkey.ec;

	if (dctx->md)
		type = EVP_MD_type(dctx->md);
	else
		type = NID_sha1;

	if (dctx->sign_type == NID_sm2sign)
		ret = SM2_verify(type, dgst, dgstlen, sig, siglen, ec_key);
	else
		ret = ECDSA_verify(type, dgst, dgstlen, sig, siglen, ec_key);

	return ret;
}
Example #5
0
static int pkey_ec_verify(EVP_PKEY_CTX *ctx,
                          const unsigned char *sig, size_t siglen,
                          const unsigned char *tbs, size_t tbslen)
{
    int ret, type;
    EC_PKEY_CTX *dctx = ctx->data;
    EC_KEY *ec = ctx->pkey->pkey.ec;

    if (dctx->md)
        type = EVP_MD_type(dctx->md);
    else
        type = NID_sha1;

#ifndef OPENSSL_NO_SM2
    if (dctx->ec_scheme == NID_sm_scheme)
        ret = SM2_verify(NID_undef, tbs, tbslen, sig, siglen, ec);
    else
#endif

    ret = ECDSA_verify(type, tbs, tbslen, sig, siglen, ec);

    return ret;
}