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