mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 13:56:30 +00:00
78 lines
1.6 KiB
C
78 lines
1.6 KiB
C
|
/*
|
||
|
* Copyright 2014 Freescale Semiconductor, Inc.
|
||
|
*
|
||
|
* SPDX-License-Identifier: GPL-2.0+
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <common.h>
|
||
|
#include <malloc.h>
|
||
|
#include "jobdesc.h"
|
||
|
#include "desc.h"
|
||
|
#include "jr.h"
|
||
|
|
||
|
#define CRYPTO_MAX_ALG_NAME 80
|
||
|
#define SHA1_DIGEST_SIZE 20
|
||
|
#define SHA256_DIGEST_SIZE 32
|
||
|
|
||
|
struct caam_hash_template {
|
||
|
char name[CRYPTO_MAX_ALG_NAME];
|
||
|
unsigned int digestsize;
|
||
|
u32 alg_type;
|
||
|
};
|
||
|
|
||
|
enum caam_hash_algos {
|
||
|
SHA1 = 0,
|
||
|
SHA256
|
||
|
};
|
||
|
|
||
|
static struct caam_hash_template driver_hash[] = {
|
||
|
{
|
||
|
.name = "sha1",
|
||
|
.digestsize = SHA1_DIGEST_SIZE,
|
||
|
.alg_type = OP_ALG_ALGSEL_SHA1,
|
||
|
},
|
||
|
{
|
||
|
.name = "sha256",
|
||
|
.digestsize = SHA256_DIGEST_SIZE,
|
||
|
.alg_type = OP_ALG_ALGSEL_SHA256,
|
||
|
},
|
||
|
};
|
||
|
|
||
|
int caam_hash(const unsigned char *pbuf, unsigned int buf_len,
|
||
|
unsigned char *pout, enum caam_hash_algos algo)
|
||
|
{
|
||
|
int ret = 0;
|
||
|
uint32_t *desc;
|
||
|
|
||
|
desc = malloc(sizeof(int) * MAX_CAAM_DESCSIZE);
|
||
|
if (!desc) {
|
||
|
debug("Not enough memory for descriptor allocation\n");
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
inline_cnstr_jobdesc_hash(desc, pbuf, buf_len, pout,
|
||
|
driver_hash[algo].alg_type,
|
||
|
driver_hash[algo].digestsize,
|
||
|
0);
|
||
|
|
||
|
ret = run_descriptor_jr(desc);
|
||
|
|
||
|
free(desc);
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
void hw_sha256(const unsigned char *pbuf, unsigned int buf_len,
|
||
|
unsigned char *pout, unsigned int chunk_size)
|
||
|
{
|
||
|
if (caam_hash(pbuf, buf_len, pout, SHA256))
|
||
|
printf("CAAM was not setup properly or it is faulty\n");
|
||
|
}
|
||
|
|
||
|
void hw_sha1(const unsigned char *pbuf, unsigned int buf_len,
|
||
|
unsigned char *pout, unsigned int chunk_size)
|
||
|
{
|
||
|
if (caam_hash(pbuf, buf_len, pout, SHA1))
|
||
|
printf("CAAM was not setup properly or it is faulty\n");
|
||
|
}
|