xref: /optee_os/core/crypto/sm3.h (revision 47645577c806e80b6477193eff5ebc7de710ddf2)
1*47645577SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2*47645577SJerome Forissier /*
3*47645577SJerome Forissier  * Copyright (c) 2019 Huawei Technologies Co., Ltd
4*47645577SJerome Forissier  */
5*47645577SJerome Forissier /**
6*47645577SJerome Forissier  * \file sm3.h
7*47645577SJerome Forissier  * thanks to Xyssl
8*47645577SJerome Forissier  * author:goldboar
9*47645577SJerome Forissier  * email:goldboar@163.com
10*47645577SJerome Forissier  * 2011-10-26
11*47645577SJerome Forissier  */
12*47645577SJerome Forissier #ifndef CORE_CRYPTO_SM3_H
13*47645577SJerome Forissier #define CORE_CRYPTO_SM3_H
14*47645577SJerome Forissier 
15*47645577SJerome Forissier #include <stddef.h>
16*47645577SJerome Forissier #include <stdint.h>
17*47645577SJerome Forissier 
18*47645577SJerome Forissier struct sm3_context {
19*47645577SJerome Forissier 	uint32_t total[2];   /* number of bytes processed */
20*47645577SJerome Forissier 	uint32_t state[8];   /* intermediate digest state */
21*47645577SJerome Forissier 	uint8_t buffer[64];  /* data block being processed */
22*47645577SJerome Forissier 	uint8_t ipad[64];    /* HMAC: inner padding */
23*47645577SJerome Forissier 	uint8_t opad[64];    /* HMAC: outer padding */
24*47645577SJerome Forissier };
25*47645577SJerome Forissier 
26*47645577SJerome Forissier void sm3_init(struct sm3_context *ctx);
27*47645577SJerome Forissier void sm3_update(struct sm3_context *ctx, const uint8_t *input, size_t ilen);
28*47645577SJerome Forissier void sm3_final(struct sm3_context *ctx, uint8_t output[32]);
29*47645577SJerome Forissier void sm3(const uint8_t *input, size_t ilen, uint8_t output[32]);
30*47645577SJerome Forissier 
31*47645577SJerome Forissier void sm3_hmac_init(struct sm3_context *ctx, const uint8_t *key, size_t keylen);
32*47645577SJerome Forissier void sm3_hmac_update(struct sm3_context *ctx, const uint8_t *input,
33*47645577SJerome Forissier 		     size_t ilen);
34*47645577SJerome Forissier void sm3_hmac_final(struct sm3_context *ctx, uint8_t output[32]);
35*47645577SJerome Forissier void sm3_hmac(const uint8_t *key, size_t keylen, const uint8_t *input,
36*47645577SJerome Forissier 	      size_t ilen, uint8_t output[32]);
37*47645577SJerome Forissier 
38*47645577SJerome Forissier #endif /* CORE_CRYPTO_SM3_H */
39