sm2.h 2.4 KB
Newer Older
J
Jack Lloyd 已提交
1
/*
M
Matt Caswell 已提交
2
 * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
J
Jack Lloyd 已提交
3 4 5 6 7 8 9 10 11
 * Copyright 2017 Ribose Inc. All Rights Reserved.
 * Ported from Ribose contributions from Botan.
 *
 * Licensed under the OpenSSL license (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

12 13
#ifndef OSSL_CRYPTO_SM2_H
# define OSSL_CRYPTO_SM2_H
M
Matt Caswell 已提交
14
# include <openssl/opensslconf.h>
J
Jack Lloyd 已提交
15

M
Matt Caswell 已提交
16 17 18
# ifndef OPENSSL_NO_SM2

#  include <openssl/ec.h>
J
Jack Lloyd 已提交
19 20

/* The default user id as specified in GM/T 0009-2012 */
M
Matt Caswell 已提交
21
#  define SM2_DEFAULT_USERID "1234567812345678"
J
Jack Lloyd 已提交
22

P
Paul Yang 已提交
23 24 25 26 27
int sm2_compute_z_digest(uint8_t *out,
                         const EVP_MD *digest,
                         const uint8_t *id,
                         const size_t id_len,
                         const EC_KEY *key);
P
Paul Yang 已提交
28

J
Jack Lloyd 已提交
29
/*
P
Paul Yang 已提交
30
 * SM2 signature operation. Computes Z and then signs H(Z || msg) using SM2
J
Jack Lloyd 已提交
31
 */
32
ECDSA_SIG *sm2_do_sign(const EC_KEY *key,
J
Jack Lloyd 已提交
33
                       const EVP_MD *digest,
P
Paul Yang 已提交
34 35 36
                       const uint8_t *id,
                       const size_t id_len,
                       const uint8_t *msg, size_t msg_len);
J
Jack Lloyd 已提交
37

38
int sm2_do_verify(const EC_KEY *key,
J
Jack Lloyd 已提交
39 40
                  const EVP_MD *digest,
                  const ECDSA_SIG *signature,
P
Paul Yang 已提交
41 42 43
                  const uint8_t *id,
                  const size_t id_len,
                  const uint8_t *msg, size_t msg_len);
J
Jack Lloyd 已提交
44 45

/*
46
 * SM2 signature generation.
J
Jack Lloyd 已提交
47
 */
48
int sm2_sign(const unsigned char *dgst, int dgstlen,
J
Jack Lloyd 已提交
49 50 51
             unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);

/*
52
 * SM2 signature verification.
J
Jack Lloyd 已提交
53
 */
54
int sm2_verify(const unsigned char *dgst, int dgstlen,
J
Jack Lloyd 已提交
55 56 57 58 59
               const unsigned char *sig, int siglen, EC_KEY *eckey);

/*
 * SM2 encryption
 */
60
int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
61
                        size_t *ct_size);
J
Jack Lloyd 已提交
62

63
int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size);
64

65
int sm2_encrypt(const EC_KEY *key,
J
Jack Lloyd 已提交
66 67 68 69 70
                const EVP_MD *digest,
                const uint8_t *msg,
                size_t msg_len,
                uint8_t *ciphertext_buf, size_t *ciphertext_len);

71
int sm2_decrypt(const EC_KEY *key,
J
Jack Lloyd 已提交
72 73 74 75
                const EVP_MD *digest,
                const uint8_t *ciphertext,
                size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len);

M
Matt Caswell 已提交
76
# endif /* OPENSSL_NO_SM2 */
J
Jack Lloyd 已提交
77
#endif