]>
Commit | Line | Data |
---|---|---|
3d328a44 | 1 | /* |
b0edda11 | 2 | * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. |
3d328a44 JL |
3 | * Copyright 2017 Ribose Inc. All Rights Reserved. |
4 | * Ported from Ribose contributions from Botan. | |
5 | * | |
6 | * Licensed under the OpenSSL license (the "License"). You may not use | |
7 | * this file except in compliance with the License. You can obtain a copy | |
8 | * in the file LICENSE in the source distribution or at | |
9 | * https://www.openssl.org/source/license.html | |
10 | */ | |
11 | ||
12 | #ifndef HEADER_SM2_H | |
13 | # define HEADER_SM2_H | |
1bf2cc23 | 14 | # include <openssl/opensslconf.h> |
3d328a44 | 15 | |
1bf2cc23 MC |
16 | # ifndef OPENSSL_NO_SM2 |
17 | ||
98020023 TS |
18 | # ifdef __cplusplus |
19 | extern "C" { | |
20 | # endif | |
21 | ||
1bf2cc23 | 22 | # include <openssl/ec.h> |
3d328a44 JL |
23 | |
24 | /* The default user id as specified in GM/T 0009-2012 */ | |
1bf2cc23 | 25 | # define SM2_DEFAULT_USERID "1234567812345678" |
3d328a44 | 26 | |
2167239a | 27 | int sm2_compute_userid_digest(uint8_t *out, |
3d328a44 JL |
28 | const EVP_MD *digest, |
29 | const char *user_id, const EC_KEY *key); | |
30 | ||
31 | /* | |
32 | * SM2 signature operation. Computes ZA (user id digest) and then signs | |
33 | * H(ZA || msg) using SM2 | |
34 | */ | |
2167239a | 35 | ECDSA_SIG *sm2_do_sign(const EC_KEY *key, |
3d328a44 JL |
36 | const EVP_MD *digest, |
37 | const char *user_id, const uint8_t *msg, size_t msg_len); | |
38 | ||
2167239a | 39 | int sm2_do_verify(const EC_KEY *key, |
3d328a44 JL |
40 | const EVP_MD *digest, |
41 | const ECDSA_SIG *signature, | |
42 | const char *user_id, const uint8_t *msg, size_t msg_len); | |
43 | ||
44 | /* | |
ddb634fe | 45 | * SM2 signature generation. |
3d328a44 | 46 | */ |
ddb634fe | 47 | int sm2_sign(const unsigned char *dgst, int dgstlen, |
3d328a44 JL |
48 | unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); |
49 | ||
50 | /* | |
ddb634fe | 51 | * SM2 signature verification. |
3d328a44 | 52 | */ |
ddb634fe | 53 | int sm2_verify(const unsigned char *dgst, int dgstlen, |
3d328a44 JL |
54 | const unsigned char *sig, int siglen, EC_KEY *eckey); |
55 | ||
56 | ||
57 | /* | |
58 | * SM2 encryption | |
59 | */ | |
2167239a | 60 | int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, |
e14d6cf6 | 61 | size_t *ct_size); |
3d328a44 | 62 | |
2167239a | 63 | int sm2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, |
e14d6cf6 | 64 | size_t *pt_size); |
4e664750 | 65 | |
2167239a | 66 | int sm2_encrypt(const EC_KEY *key, |
3d328a44 JL |
67 | const EVP_MD *digest, |
68 | const uint8_t *msg, | |
69 | size_t msg_len, | |
70 | uint8_t *ciphertext_buf, size_t *ciphertext_len); | |
71 | ||
2167239a | 72 | int sm2_decrypt(const EC_KEY *key, |
3d328a44 JL |
73 | const EVP_MD *digest, |
74 | const uint8_t *ciphertext, | |
75 | size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len); | |
76 | ||
98020023 TS |
77 | # ifdef __cplusplus |
78 | } | |
79 | # endif | |
80 | ||
1bf2cc23 | 81 | # endif /* OPENSSL_NO_SM2 */ |
3d328a44 | 82 | #endif |