mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-09 07:23:56 +08:00
Update sm9 functions
This commit is contained in:
@@ -13,7 +13,7 @@ SOURCE[../../libcrypto]=\
|
||||
e_old.c pmeth_lib.c pmeth_fn.c pmeth_gn.c m_sigver.c \
|
||||
e_aes_cbc_hmac_sha1.c e_aes_cbc_hmac_sha256.c e_rc4_hmac_md5.c \
|
||||
e_chacha20_poly1305.c cmeth_lib.c \
|
||||
m_sm3.c \
|
||||
m_sm3.c m_sm9hash2.c \
|
||||
e_sms4.c e_sms4_ccm.c e_sms4_gcm.c e_sms4_ocb.c e_sms4_wrap.c e_sms4_xts.c \
|
||||
e_zuc.c \
|
||||
evp_ctxt.c names2.c
|
||||
|
||||
@@ -85,17 +85,18 @@ static int final(EVP_MD_CTX *ctx, unsigned char *md)
|
||||
}
|
||||
|
||||
static const EVP_MD sm3_md = {
|
||||
NID_sm3,
|
||||
NID_sm2sign_with_sm3,
|
||||
SM3_DIGEST_LENGTH,
|
||||
0, /* flags */
|
||||
init,
|
||||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
SM3_BLOCK_SIZE,
|
||||
sizeof(EVP_MD *) + sizeof(sm3_ctx_t),
|
||||
NID_sm3, /* type */
|
||||
NID_sm2sign_with_sm3, /* pkey_type */
|
||||
SM3_DIGEST_LENGTH, /* md_size */
|
||||
0, /* flags */
|
||||
init, /* init */
|
||||
update, /* update */
|
||||
final, /* final */
|
||||
NULL, /* copy */
|
||||
NULL, /* cleanup */
|
||||
SM3_BLOCK_SIZE, /* block_size */
|
||||
sizeof(EVP_MD *) + sizeof(sm3_ctx_t), /* ctx_size */
|
||||
NULL, /* md_ctrl */
|
||||
};
|
||||
|
||||
const EVP_MD *EVP_sm3(void)
|
||||
|
||||
153
crypto/evp/m_sm9hash2.c
Normal file
153
crypto/evp/m_sm9hash2.c
Normal file
@@ -0,0 +1,153 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2018 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "internal/cryptlib.h"
|
||||
|
||||
#ifndef OPENSSL_NO_SM9
|
||||
# include <openssl/sm9.h>
|
||||
# include <openssl/evp.h>
|
||||
# include <openssl/x509.h>
|
||||
# include <openssl/objects.h>
|
||||
# include "internal/evp_int.h"
|
||||
|
||||
# ifndef OPENSSL_NO_SM3
|
||||
# include <openssl/sm3.h>
|
||||
|
||||
static int sm9hash2_sm3_init(EVP_MD_CTX *ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sm9hash2_sm3_update(EVP_MD_CTX *ctx, const void *in, size_t inlen)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sm9hash2_sm3_final(EVP_MD_CTX *ctx, unsigned char *md)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sm9hash2_sm3_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
# define SM9HASH2_SM3_CTX_SIZE (sizeof(EVP_MD *) + sizeof(sm3_ctx_t))
|
||||
|
||||
static const EVP_MD sm9hash2_sm3 = {
|
||||
NID_sm9hash2_with_sm3, /* type */
|
||||
NID_sm9sign_with_sm3, /* pkey_type */
|
||||
SM3_DIGEST_LENGTH, /* md_size */
|
||||
0, /* flags */
|
||||
sm9hash2_sm3_init, /* init */
|
||||
sm9hash2_sm3_update, /* update */
|
||||
sm9hash2_sm3_final, /* final */
|
||||
NULL, /* copy */
|
||||
NULL, /* cleanup */
|
||||
SM3_BLOCK_SIZE, /* block_size */
|
||||
SM9HASH2_SM3_CTX_SIZE, /* ctx_size */
|
||||
sm9hash2_sm3_ctrl, /* md_ctrl */
|
||||
};
|
||||
|
||||
const EVP_MD *EVP_sm9hash2_sm3(void)
|
||||
{
|
||||
return &sm9hash2_sm3;
|
||||
}
|
||||
|
||||
# endif /* OPENSSL_NO_SM3 */
|
||||
|
||||
# ifndef OPENSSL_NO_SHA256
|
||||
# include <openssl/sha.h>
|
||||
|
||||
static int sm9hash2_sha256_init(EVP_MD_CTX *ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sm9hash2_sha256_update(EVP_MD_CTX *ctx, const void *in, size_t inlen)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sm9hash2_sha256_final(EVP_MD_CTX *ctx, unsigned char *md)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sm9hash2_sha256_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define SM9HASH2_SHA256_CTX_SIZE (sizeof(EVP_MD *) + sizeof(SHA256_CTX))
|
||||
|
||||
static const EVP_MD sm9hash2_sha256 = {
|
||||
NID_sm9hash2_with_sha256, /* type */
|
||||
NID_sm9sign_with_sha256, /* pkey_type */
|
||||
SHA256_DIGEST_LENGTH, /* md_size */
|
||||
0, /* flags */
|
||||
sm9hash2_sha256_init, /* init */
|
||||
sm9hash2_sha256_update, /* update */
|
||||
sm9hash2_sha256_final, /* final */
|
||||
NULL, /* copy */
|
||||
NULL, /* cleanup */
|
||||
SHA256_CBLOCK, /* block_size */
|
||||
SM9HASH2_SHA256_CTX_SIZE, /* ctx_size */
|
||||
sm9hash2_sha256_ctrl, /* md_ctrl */
|
||||
};
|
||||
|
||||
const EVP_MD *EVP_sm9hash2_sha256(void)
|
||||
{
|
||||
return &sm9hash2_sha256;
|
||||
}
|
||||
# endif /* OPENSSL_NO_SHA256 */
|
||||
|
||||
#endif /* OPENSSL_NO_SM9 */
|
||||
@@ -75,7 +75,7 @@ int SM2_ciphertext_size(const EC_KEY *ec_key, size_t inlen)
|
||||
int len = 0, i;
|
||||
|
||||
if (inlen > SM2_MAX_PLAINTEXT_LENGTH) {
|
||||
SM2err(SM2_F_SM2CIPHERTEXTVALUE_SIZE, SM2_R_PLAINTEXT_TOO_LONG);
|
||||
SM2err(SM2_F_SM2_CIPHERTEXT_SIZE, SM2_R_PLAINTEXT_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ int SM2_ciphertext_size(const EC_KEY *ec_key, size_t inlen)
|
||||
|
||||
/* ASN1_INTEGER xCoordinate, yCoordinate */
|
||||
if (!(i = EC_GROUP_order_bits(group))) {
|
||||
SM2err(SM2_F_SM2CIPHERTEXTVALUE_SIZE, ERR_R_EC_LIB);
|
||||
SM2err(SM2_F_SM2_CIPHERTEXT_SIZE, ERR_R_EC_LIB);
|
||||
return 0;
|
||||
}
|
||||
a.length = (i + 7)/8;
|
||||
|
||||
@@ -22,6 +22,7 @@ static ERR_STRING_DATA SM2_str_functs[] = {
|
||||
{ERR_FUNC(SM2_F_I2O_SM2CIPHERTEXTVALUE), "i2o_SM2CiphertextValue"},
|
||||
{ERR_FUNC(SM2_F_O2I_SM2CIPHERTEXTVALUE), "o2i_SM2CiphertextValue"},
|
||||
{ERR_FUNC(SM2_F_SM2CIPHERTEXTVALUE_SIZE), "SM2CiphertextValue_size"},
|
||||
{ERR_FUNC(SM2_F_SM2_CIPHERTEXT_SIZE), "SM2_ciphertext_size"},
|
||||
{ERR_FUNC(SM2_F_SM2_DECRYPT), "SM2_decrypt"},
|
||||
{ERR_FUNC(SM2_F_SM2_DO_DECRYPT), "SM2_do_decrypt"},
|
||||
{ERR_FUNC(SM2_F_SM2_DO_ENCRYPT), "SM2_do_encrypt"},
|
||||
|
||||
@@ -54,6 +54,39 @@
|
||||
#include <openssl/bn_hash.h>
|
||||
#include "sm9_lcl.h"
|
||||
|
||||
|
||||
#if 0
|
||||
typedef struct {
|
||||
int nid;
|
||||
int nid;
|
||||
} sm9_algor_table;
|
||||
|
||||
|
||||
static const sm9_algor_table sm9encrypt_scheme_table[] = {
|
||||
{NID_sm9encrypt_with_sm3, NID_sm3},
|
||||
{NID_sm9encrypt_with_sha256, NID_sha256},
|
||||
};
|
||||
|
||||
static const sm9_algoro_table sm9sign_scheme_table[] = {
|
||||
{NID_sm9sign_with_sm3, NID_sm3},
|
||||
{NID_sm9sign_with_sha256, NID_sha256},
|
||||
};
|
||||
|
||||
static const sm9_algor_table sm9_encrypt_table[] = {
|
||||
{sm9encrypt-with-sm3-xor, NID_sm3, NID_undef},
|
||||
{sm9encrypt-with-sm3-sms4-cbc, NID_sm3, NID_sms4_cbc},
|
||||
{sm9encrypt-with-sm3-sms4-ctr, NID_sm3, NID_sms4_ctr},
|
||||
};
|
||||
|
||||
static const sm9_algor sm9_hash1[] = {
|
||||
{NID_sm9hash1_with_sm3, NID_sm3},
|
||||
{NID_sm9hash1_with_sha256, NID_sha256},
|
||||
{NID_sm9kdf_with_sm3, NID_sm3},
|
||||
{NID_sm9kdf_with_sha256, NID_sha256},
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
SM9_MASTER_KEY *SM9_MASTER_KEY_new(void)
|
||||
{
|
||||
SM9_MASTER_KEY *ret = NULL;
|
||||
|
||||
@@ -456,6 +456,9 @@ static int pkey_sm9_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *va
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* TODO: currently data instead of dgst is signed.
|
||||
* we need to support to ctrl which to sign.
|
||||
*/
|
||||
const EVP_PKEY_METHOD sm9_pkey_meth = {
|
||||
EVP_PKEY_SM9, /* pkey_id */
|
||||
0, /* flags */
|
||||
|
||||
Reference in New Issue
Block a user