xref: /openbsd/lib/libcrypto/sm2/sm2.h (revision 515aa502)
1 /*	$OpenBSD: sm2.h,v 1.4 2025/01/25 17:59:44 tb 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 
25 #ifdef  __cplusplus
26 extern "C" {
27 #endif
28 
29 /*
30  * SM2 signature generation.
31  */
32 int SM2_sign(const unsigned char *dgst, int dgstlen, unsigned char *sig,
33     unsigned int *siglen, EC_KEY *eckey);
34 
35 /*
36  * SM2 signature verification. Assumes input is an SM3 digest
37  */
38 int SM2_verify(const unsigned char *dgst, int dgstlen, const unsigned char *sig,
39     int siglen, EC_KEY *eckey);
40 
41 /*
42  * SM2 encryption
43  */
44 int SM2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
45     size_t *c_size);
46 
47 int SM2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
48     size_t *pl_size);
49 
50 int SM2_encrypt(const EC_KEY *key, const EVP_MD *digest, const uint8_t *msg,
51     size_t msg_len, uint8_t *ciphertext_buf, size_t *ciphertext_len);
52 
53 int SM2_decrypt(const EC_KEY *key, const EVP_MD *digest,
54     const uint8_t *ciphertext, size_t ciphertext_len, uint8_t *ptext_buf,
55     size_t *ptext_len);
56 
57 void ERR_load_SM2_strings(void);
58 
59 /* Error codes for the SM2 functions. */
60 
61 /* Function codes. */
62 # define SM2_F_PKEY_SM2_CTRL                              274
63 # define SM2_F_PKEY_SM2_CTRL_STR                          275
64 # define SM2_F_PKEY_SM2_KEYGEN                            276
65 # define SM2_F_PKEY_SM2_PARAMGEN                          277
66 # define SM2_F_PKEY_SM2_SIGN                              278
67 # define SM2_F_PKEY_SM2_VERIFY                            279
68 # define SM2_F_PKEY_SM2_ENCRYPT                           280
69 # define SM2_F_PKEY_SM2_DECRYPT                           281
70 
71 /* Reason codes. */
72 # define SM2_R_ASN1_ERROR                                 115
73 # define SM2_R_ASN5_ERROR                                 1150
74 # define SM2_R_BAD_SIGNATURE                              156
75 # define SM2_R_BIGNUM_OUT_OF_RANGE                        144
76 # define SM2_R_BUFFER_TOO_SMALL                           100
77 # define SM2_R_COORDINATES_OUT_OF_RANGE                   146
78 # define SM2_R_CURVE_DOES_NOT_SUPPORT_ECDH                160
79 # define SM2_R_CURVE_DOES_NOT_SUPPORT_SIGNING             159
80 # define SM2_R_D2I_ECPKPARAMETERS_FAILURE                 117
81 # define SM2_R_DECODE_ERROR                               142
82 # define SM2_R_DIGEST_FAILURE                             163
83 # define SM2_R_DISCRIMINANT_IS_ZERO                       118
84 # define SM2_R_EC_GROUP_NEW_BY_NAME_FAILURE               119
85 # define SM2_R_FIELD_TOO_LARGE                            143
86 # define SM2_R_GF2M_NOT_SUPPORTED                         147
87 # define SM2_R_GROUP2PKPARAMETERS_FAILURE                 120
88 # define SM2_R_I2D_ECPKPARAMETERS_FAILURE                 121
89 # define SM2_R_INCOMPATIBLE_OBJECTS                       101
90 # define SM2_R_INVALID_ARGUMENT                           112
91 # define SM2_R_INVALID_COMPRESSED_POINT                   110
92 # define SM2_R_INVALID_COMPRESSION_BIT                    109
93 # define SM2_R_INVALID_CURVE                              141
94 # define SM2_R_INVALID_DIGEST                             151
95 # define SM2_R_INVALID_DIGEST_TYPE                        138
96 # define SM2_R_INVALID_ENCODING                           102
97 # define SM2_R_INVALID_FIELD                              103
98 # define SM2_R_INVALID_FORM                               104
99 # define SM2_R_INVALID_GROUP_ORDER                        122
100 # define SM2_R_INVALID_KEY                                116
101 # define SM2_R_INVALID_OUTPUT_LENGTH                      161
102 # define SM2_R_INVALID_PEER_KEY                           133
103 # define SM2_R_INVALID_PENTANOMIAL_BASIS                  132
104 # define SM2_R_INVALID_PRIVATE_KEY                        123
105 # define SM2_R_INVALID_TRINOMIAL_BASIS                    137
106 # define SM2_R_KDF_FAILURE                                162
107 # define SM2_R_KDF_PARAMETER_ERROR                        148
108 # define SM2_R_KEYS_NOT_SET                               140
109 # define SM2_R_MISSING_PARAMETERS                         124
110 # define SM2_R_MISSING_PRIVATE_KEY                        125
111 # define SM2_R_NEED_NEW_SETUP_VALUES                      157
112 # define SM2_R_NOT_A_NIST_PRIME                           135
113 # define SM2_R_NOT_IMPLEMENTED                            126
114 # define SM2_R_NOT_INITIALIZED                            111
115 # define SM2_R_NO_PARAMETERS_SET                          139
116 # define SM2_R_NO_PRIVATE_VALUE                           154
117 # define SM2_R_OPERATION_NOT_SUPPORTED                    152
118 # define SM2_R_PASSED_NULL_PARAMETER                      134
119 # define SM2_R_PEER_KEY_ERROR                             149
120 # define SM2_R_PKPARAMETERS2GROUP_FAILURE                 127
121 # define SM2_R_POINT_ARITHMETIC_FAILURE                   155
122 # define SM2_R_POINT_AT_INFINITY                          106
123 # define SM2_R_POINT_IS_NOT_ON_CURVE                      107
124 # define SM2_R_RANDOM_NUMBER_GENERATION_FAILED            158
125 # define SM2_R_SHARED_INFO_ERROR                          150
126 # define SM2_R_SLOT_FULL                                  108
127 # define SM2_R_UNDEFINED_GENERATOR                        113
128 # define SM2_R_UNDEFINED_ORDER                            128
129 # define SM2_R_UNKNOWN_GROUP                              129
130 # define SM2_R_UNKNOWN_ORDER                              114
131 # define SM2_R_UNSUPPORTED_FIELD                          131
132 # define SM2_R_WRONG_CURVE_PARAMETERS                     145
133 # define SM2_R_WRONG_ORDER                                130
134 
135 #ifdef  __cplusplus
136 }
137 #endif
138 #endif
139