blob: 81ea4ebf4ff087252d2caef738e4460f6e08cc0f [file] [log] [blame] [edit]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef _AML_CRYPTO_H
#define _AML_CRYPTO_H
#include <u-boot/sha256.h>
#define CRYPTO_ERROR_NO_ERROR (0)
#define CRYPTO_ERROR_BAD_PARAMETERS (-1)
#define CRYPTO_ERROR_BAD_PROCESS (-2)
#define AES_KEY_SIZE_128 16
#define AES_KEY_SIZE_192 24
#define AES_KEY_SIZE_256 32
#define DES_KEY_SIZE 8
#define TDES_2K_KEY_SIZE 16
#define TDES_3K_KEY_SIZE 24
/*
* aes_ecb_enc_keytbl - AES ECB encrypt with keytable
*
* @input - input pointer
* @output - output pointer
* @nbytes - data length
* @key_slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes_ecb_enc_keytbl(uint32_t keylen, const void *input, void *output,
uint8_t iv[16], size_t nbytes, uint32_t slot);
/*
* aes_ecb_dec_keytbl - AES ECB decrypt with keytable
*
* @input - input pointer
* @output - output pointer
* @nbytes - data length
* @key_slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes_ecb_dec_keytbl(uint32_t keylen, const void *input, void *output,
uint8_t iv[16], size_t nbytes, uint32_t slot);
/*
* aes_cbc_enc_keytbl - AES CBC encrypt with keytable
*
* @input - input pointer
* @output - output pointer
* @iv - AES IV
* @nbytes - data length
* @key_slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes_cbc_enc_keytbl(uint32_t keylen, const void *input, void *output,
uint8_t iv[16], size_t nbytes, uint32_t slot);
/*
* aes256cbc_dec_keytbl - AES CBC decrypt with keytable
*
* @input - input pointer
* @output - output pointer
* @iv - AES IV
* @nbytes - data length
* @key_slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes256cbc_dec_keytbl(const void *input, void *output, uint8_t iv[16],
size_t nbytes, uint32_t key_slot);
/*
* aes_cbc_dec_keytbl - AES CBC decrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - AES IV
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes_cbc_dec_keytbl(uint32_t keylen, const void *input, void *output, uint8_t iv[16],
size_t nbytes, uint32_t slot);
/*
* aes_ctr_encrypt_keytbl - AES CTR encrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - AES initial counter
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes_ctr_encrypt_keytbl(uint32_t keylen, const void *input, void *output,
uint8_t iv[16], size_t nbytes, uint32_t slot);
/*
* aes_ctr_decrypt_keytbl - AES CTR decrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - AES initial counter
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes_ctr_decrypt_keytbl(uint32_t keylen, const void *input, void *output,
uint8_t iv[16], size_t nbytes, uint32_t slot);
/*
* aes256cbc_iv0_dec_keytbl - AES CBC decrypt with keytable and iv0
*
* @input - input pointer
* @output - output pointer
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aes256cbc_iv0_dec_keytbl(const void *input, void *output, size_t nbytes,
uint32_t slot);
/*
* des_tdes_ecb_enc_keytbl - DES/TDES ECB encrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - TDES IV
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t des_tdes_ecb_enc_keytbl(uint32_t keylen, const void *input,
void *output, size_t nbytes, uint32_t slot);
/*
* des_tdes_ecb_dec_keytbl - DES/TDES ECB decrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - TDES IV
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t des_tdes_ecb_dec_keytbl(uint32_t keylen, const void *input,
void *output, uint8_t iv[16], size_t nbytes, uint32_t slot);
/*
* des_tdes_cbc_enc_keytbl - DES/TDES CBC encrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - TDES IV
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t des_tdes_cbc_enc_keytbl(uint32_t keylen, const void *input,
void *output, uint8_t iv[8], size_t nbytes, uint32_t slot);
/*
* des_tdes_cbc_dec_keytbl - DES/TDES CBC decrypt with keytable
*
* @keylen - key length
* @input - input pointer
* @output - output pointer
* @iv - TDES IV
* @nbytes - data length
* @slot - key table slot to be used
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t des_tdes_cbc_dec_keytbl(uint32_t keylen, const void *input,
void *output, uint8_t iv[8], size_t nbytes, uint32_t slot);
/*
* aml_hw_init - HW SHA Init
*
* @cur_ctx - SHA context
* @is224 - SHA224 or SHA256
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aml_hw_sha_init(sha2_ctx *cur_ctx, uint32_t is224);
/*
* aml_hw_sha_update - HW SHA Update
*
* @cur_ctx - SHA context
* @input - input pointer
* @ilen - input size
* @hash - output hash
* @last_update - to finalize SHA context
* @return - on successful, 0 and negative value, otherwise.
*/
int32_t aml_hw_sha_update(sha2_ctx *cur_ctx, const uint8_t *input,
uint32_t ilen, uint8_t *hash, uint8_t last_update);
#endif