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