16#ifndef CRYPT_SM4_ARMV8_H
17#define CRYPT_SM4_ARMV8_H
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_SM4
28typedef struct SM4_KEY_st {
29 uint32_t rk[XTS_KEY_LEN];
32void Vpsm4SetEncryptKey(
const unsigned char *userKey, SM4_KEY *key);
34void Vpsm4SetDecryptKey(
const unsigned char *userKey, SM4_KEY *key);
36#ifdef HITLS_CRYPTO_XTS
38void Vpsm4XtsCipher(
const unsigned char *in,
unsigned char *out, uint32_t length,
const SM4_KEY *key1,
39 const SM4_KEY *key2,
const uint8_t *iv, uint32_t enc);
42#ifdef HITLS_CRYPTO_CBC
43void Vpsm4CbcEncrypt(
const uint8_t *in, uint8_t *out, uint64_t len,
const uint32_t *key, uint8_t *iv,
const int enc);
46#ifdef HITLS_CRYPTO_ECB
47void Vpsm4EcbEncrypt(
const uint8_t *in, uint8_t *out, uint64_t len,
const uint32_t *key);
50#ifdef HITLS_CRYPTO_CFB
51void Vpsm4Cfb128Encrypt(
const uint8_t *in, uint8_t *out, uint64_t len,
const uint32_t *key, uint8_t *iv,
int *num);
52void Vpsm4Cfb128Decrypt(
const uint8_t *in, uint8_t *out, uint64_t len,
const uint32_t *key, uint8_t *iv,
int *num);
55#if defined(HITLS_CRYPTO_CTR) || defined(HITLS_CRYPTO_GCM)
56void Vpsm4Ctr32EncryptBlocks(
const uint8_t *in, uint8_t *out, uint64_t blocks,
const uint32_t *key, uint8_t *iv);