cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sm4.h (1248B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3/*
      4 * Common values for the SM4 algorithm
      5 * Copyright (C) 2018 ARM Limited or its affiliates.
      6 * Copyright (c) 2021 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
      7 */
      8
      9#ifndef _CRYPTO_SM4_H
     10#define _CRYPTO_SM4_H
     11
     12#include <linux/types.h>
     13#include <linux/crypto.h>
     14
     15#define SM4_KEY_SIZE	16
     16#define SM4_BLOCK_SIZE	16
     17#define SM4_RKEY_WORDS	32
     18
     19struct sm4_ctx {
     20	u32 rkey_enc[SM4_RKEY_WORDS];
     21	u32 rkey_dec[SM4_RKEY_WORDS];
     22};
     23
     24extern const u32 crypto_sm4_fk[];
     25extern const u32 crypto_sm4_ck[];
     26extern const u8 crypto_sm4_sbox[];
     27
     28/**
     29 * sm4_expandkey - Expands the SM4 key as described in GB/T 32907-2016
     30 * @ctx:	The location where the computed key will be stored.
     31 * @in_key:	The supplied key.
     32 * @key_len:	The length of the supplied key.
     33 *
     34 * Returns 0 on success. The function fails only if an invalid key size (or
     35 * pointer) is supplied.
     36 */
     37int sm4_expandkey(struct sm4_ctx *ctx, const u8 *in_key,
     38			  unsigned int key_len);
     39
     40/**
     41 * sm4_crypt_block - Encrypt or decrypt a single SM4 block
     42 * @rk:		The rkey_enc for encrypt or rkey_dec for decrypt
     43 * @out:	Buffer to store output data
     44 * @in: 	Buffer containing the input data
     45 */
     46void sm4_crypt_block(const u32 *rk, u8 *out, const u8 *in);
     47
     48#endif