xref: /openbsd-src/lib/libcrypto/sm2/sm2.h (revision 25c4e8bd056e974b28f4a0ffd39d76c190a56013)
1 /*	$OpenBSD: sm2.h,v 1.2 2022/07/12 14:42:50 kn Exp $ */
2 /*
3  * Copyright (c) 2017, 2019 Ribose Inc
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 #ifndef HEADER_SM2_H
19 #define HEADER_SM2_H
20 
21 #include <openssl/opensslconf.h>
22 
23 #include <openssl/ec.h>
24 #include <openssl/ecdsa.h>
25 
26 #ifdef OPENSSL_NO_SM2
27 #error SM2 is disabled.
28 #endif
29 
30 #ifdef  __cplusplus
31 extern "C" {
32 #endif
33 
34 /*
35  * SM2 signature generation.
36  */
37 int SM2_sign(const unsigned char *dgst, int dgstlen, unsigned char *sig,
38     unsigned int *siglen, EC_KEY *eckey);
39 
40 /*
41  * SM2 signature verification. Assumes input is an SM3 digest
42  */
43 int SM2_verify(const unsigned char *dgst, int dgstlen, const unsigned char *sig,
44     int siglen, EC_KEY *eckey);
45 
46 /*
47  * SM2 encryption
48  */
49 int SM2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
50     size_t *c_size);
51 
52 int SM2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
53     size_t *pl_size);
54 
55 int SM2_encrypt(const EC_KEY *key, const EVP_MD *digest, const uint8_t *msg,
56     size_t msg_len, uint8_t *ciphertext_buf, size_t *ciphertext_len);
57 
58 int SM2_decrypt(const EC_KEY *key, const EVP_MD *digest,
59     const uint8_t *ciphertext, size_t ciphertext_len, uint8_t *ptext_buf,
60     size_t *ptext_len);
61 
62 void ERR_load_SM2_strings(void);
63 
64 /* Error codes for the SM2 functions. */
65 
66 /* Function codes. */
67 # define SM2_F_PKEY_SM2_CTRL                              274
68 # define SM2_F_PKEY_SM2_CTRL_STR                          275
69 # define SM2_F_PKEY_SM2_KEYGEN                            276
70 # define SM2_F_PKEY_SM2_PARAMGEN                          277
71 # define SM2_F_PKEY_SM2_SIGN                              278
72 # define SM2_F_PKEY_SM2_VERIFY                            279
73 # define SM2_F_PKEY_SM2_ENCRYPT                           280
74 # define SM2_F_PKEY_SM2_DECRYPT                           281
75 
76 /* Reason codes. */
77 # define SM2_R_ASN1_ERROR                                 115
78 # define SM2_R_ASN5_ERROR                                 1150
79 # define SM2_R_BAD_SIGNATURE                              156
80 # define SM2_R_BIGNUM_OUT_OF_RANGE                        144
81 # define SM2_R_BUFFER_TOO_SMALL                           100
82 # define SM2_R_COORDINATES_OUT_OF_RANGE                   146
83 # define SM2_R_CURVE_DOES_NOT_SUPPORT_ECDH                160
84 # define SM2_R_CURVE_DOES_NOT_SUPPORT_SIGNING             159
85 # define SM2_R_D2I_ECPKPARAMETERS_FAILURE                 117
86 # define SM2_R_DECODE_ERROR                               142
87 # define SM2_R_DIGEST_FAILURE                             163
88 # define SM2_R_DISCRIMINANT_IS_ZERO                       118
89 # define SM2_R_EC_GROUP_NEW_BY_NAME_FAILURE               119
90 # define SM2_R_FIELD_TOO_LARGE                            143
91 # define SM2_R_GF2M_NOT_SUPPORTED                         147
92 # define SM2_R_GROUP2PKPARAMETERS_FAILURE                 120
93 # define SM2_R_I2D_ECPKPARAMETERS_FAILURE                 121
94 # define SM2_R_INCOMPATIBLE_OBJECTS                       101
95 # define SM2_R_INVALID_ARGUMENT                           112
96 # define SM2_R_INVALID_COMPRESSED_POINT                   110
97 # define SM2_R_INVALID_COMPRESSION_BIT                    109
98 # define SM2_R_INVALID_CURVE                              141
99 # define SM2_R_INVALID_DIGEST                             151
100 # define SM2_R_INVALID_DIGEST_TYPE                        138
101 # define SM2_R_INVALID_ENCODING                           102
102 # define SM2_R_INVALID_FIELD                              103
103 # define SM2_R_INVALID_FORM                               104
104 # define SM2_R_INVALID_GROUP_ORDER                        122
105 # define SM2_R_INVALID_KEY                                116
106 # define SM2_R_INVALID_OUTPUT_LENGTH                      161
107 # define SM2_R_INVALID_PEER_KEY                           133
108 # define SM2_R_INVALID_PENTANOMIAL_BASIS                  132
109 # define SM2_R_INVALID_PRIVATE_KEY                        123
110 # define SM2_R_INVALID_TRINOMIAL_BASIS                    137
111 # define SM2_R_KDF_FAILURE                                162
112 # define SM2_R_KDF_PARAMETER_ERROR                        148
113 # define SM2_R_KEYS_NOT_SET                               140
114 # define SM2_R_MISSING_PARAMETERS                         124
115 # define SM2_R_MISSING_PRIVATE_KEY                        125
116 # define SM2_R_NEED_NEW_SETUP_VALUES                      157
117 # define SM2_R_NOT_A_NIST_PRIME                           135
118 # define SM2_R_NOT_IMPLEMENTED                            126
119 # define SM2_R_NOT_INITIALIZED                            111
120 # define SM2_R_NO_PARAMETERS_SET                          139
121 # define SM2_R_NO_PRIVATE_VALUE                           154
122 # define SM2_R_OPERATION_NOT_SUPPORTED                    152
123 # define SM2_R_PASSED_NULL_PARAMETER                      134
124 # define SM2_R_PEER_KEY_ERROR                             149
125 # define SM2_R_PKPARAMETERS2GROUP_FAILURE                 127
126 # define SM2_R_POINT_ARITHMETIC_FAILURE                   155
127 # define SM2_R_POINT_AT_INFINITY                          106
128 # define SM2_R_POINT_IS_NOT_ON_CURVE                      107
129 # define SM2_R_RANDOM_NUMBER_GENERATION_FAILED            158
130 # define SM2_R_SHARED_INFO_ERROR                          150
131 # define SM2_R_SLOT_FULL                                  108
132 # define SM2_R_UNDEFINED_GENERATOR                        113
133 # define SM2_R_UNDEFINED_ORDER                            128
134 # define SM2_R_UNKNOWN_GROUP                              129
135 # define SM2_R_UNKNOWN_ORDER                              114
136 # define SM2_R_UNSUPPORTED_FIELD                          131
137 # define SM2_R_WRONG_CURVE_PARAMETERS                     145
138 # define SM2_R_WRONG_ORDER                                130
139 
140 #ifdef  __cplusplus
141 }
142 #endif
143 #endif
144