/* * Copyright 2014 Freescale Semiconductor, Inc. * * SPDX-License-Identifier: GPL-2.0+ * */ #include #include #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"); }