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