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