xref: /optee_os/core/crypto/sm4.h (revision ade6f848e084d7c63f1e3866d7c059b8a9f9e834)
1*ade6f848SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2*ade6f848SJerome Forissier /*
3*ade6f848SJerome Forissier  * Copyright (c) 2019 Huawei Technologies Co., Ltd
4*ade6f848SJerome Forissier  */
5*ade6f848SJerome Forissier #ifndef CORE_CRYPTO_SM4_H
6*ade6f848SJerome Forissier #define CORE_CRYPTO_SM4_H
7*ade6f848SJerome Forissier 
8*ade6f848SJerome Forissier #include <stddef.h>
9*ade6f848SJerome Forissier #include <stdint.h>
10*ade6f848SJerome Forissier 
11*ade6f848SJerome Forissier #define SM4_ENCRYPT	1
12*ade6f848SJerome Forissier #define SM4_DECRYPT	0
13*ade6f848SJerome Forissier 
14*ade6f848SJerome Forissier struct sm4_context {
15*ade6f848SJerome Forissier 	int mode;         /* SM4_ENCRYPT/SM4_DECRYPT */
16*ade6f848SJerome Forissier 	uint32_t sk[32];  /* SM4 subkeys */
17*ade6f848SJerome Forissier };
18*ade6f848SJerome Forissier 
19*ade6f848SJerome Forissier void sm4_setkey_enc(struct sm4_context *ctx, const uint8_t key[16]);
20*ade6f848SJerome Forissier void sm4_setkey_dec(struct sm4_context *ctx, const uint8_t key[16]);
21*ade6f848SJerome Forissier void sm4_crypt_ecb(struct sm4_context *ctx, size_t length, const uint8_t *input,
22*ade6f848SJerome Forissier 		   uint8_t *output);
23*ade6f848SJerome Forissier void sm4_crypt_cbc(struct sm4_context *ctx, size_t length, uint8_t iv[16],
24*ade6f848SJerome Forissier 		   const uint8_t *input, uint8_t *output);
25*ade6f848SJerome Forissier void sm4_crypt_ctr(struct sm4_context *ctx, size_t length, uint8_t ctr[16],
26*ade6f848SJerome Forissier 		   const uint8_t *input, uint8_t *output);
27*ade6f848SJerome Forissier 
28*ade6f848SJerome Forissier #endif /* CORE_CRYPTO_SM4_H */
29