1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * 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");
- }
|