1*b9eebfadSRuchika Gupta /* 2*b9eebfadSRuchika Gupta * Copyright 2014 Freescale Semiconductor, Inc. 3*b9eebfadSRuchika Gupta * 4*b9eebfadSRuchika Gupta * SPDX-License-Identifier: GPL-2.0+ 5*b9eebfadSRuchika Gupta * 6*b9eebfadSRuchika Gupta */ 7*b9eebfadSRuchika Gupta 8*b9eebfadSRuchika Gupta #include <common.h> 9*b9eebfadSRuchika Gupta #include <malloc.h> 10*b9eebfadSRuchika Gupta #include "jobdesc.h" 11*b9eebfadSRuchika Gupta #include "desc.h" 12*b9eebfadSRuchika Gupta #include "jr.h" 13*b9eebfadSRuchika Gupta 14*b9eebfadSRuchika Gupta #define CRYPTO_MAX_ALG_NAME 80 15*b9eebfadSRuchika Gupta #define SHA1_DIGEST_SIZE 20 16*b9eebfadSRuchika Gupta #define SHA256_DIGEST_SIZE 32 17*b9eebfadSRuchika Gupta 18*b9eebfadSRuchika Gupta struct caam_hash_template { 19*b9eebfadSRuchika Gupta char name[CRYPTO_MAX_ALG_NAME]; 20*b9eebfadSRuchika Gupta unsigned int digestsize; 21*b9eebfadSRuchika Gupta u32 alg_type; 22*b9eebfadSRuchika Gupta }; 23*b9eebfadSRuchika Gupta 24*b9eebfadSRuchika Gupta enum caam_hash_algos { 25*b9eebfadSRuchika Gupta SHA1 = 0, 26*b9eebfadSRuchika Gupta SHA256 27*b9eebfadSRuchika Gupta }; 28*b9eebfadSRuchika Gupta 29*b9eebfadSRuchika Gupta static struct caam_hash_template driver_hash[] = { 30*b9eebfadSRuchika Gupta { 31*b9eebfadSRuchika Gupta .name = "sha1", 32*b9eebfadSRuchika Gupta .digestsize = SHA1_DIGEST_SIZE, 33*b9eebfadSRuchika Gupta .alg_type = OP_ALG_ALGSEL_SHA1, 34*b9eebfadSRuchika Gupta }, 35*b9eebfadSRuchika Gupta { 36*b9eebfadSRuchika Gupta .name = "sha256", 37*b9eebfadSRuchika Gupta .digestsize = SHA256_DIGEST_SIZE, 38*b9eebfadSRuchika Gupta .alg_type = OP_ALG_ALGSEL_SHA256, 39*b9eebfadSRuchika Gupta }, 40*b9eebfadSRuchika Gupta }; 41*b9eebfadSRuchika Gupta 42*b9eebfadSRuchika Gupta int caam_hash(const unsigned char *pbuf, unsigned int buf_len, 43*b9eebfadSRuchika Gupta unsigned char *pout, enum caam_hash_algos algo) 44*b9eebfadSRuchika Gupta { 45*b9eebfadSRuchika Gupta int ret = 0; 46*b9eebfadSRuchika Gupta uint32_t *desc; 47*b9eebfadSRuchika Gupta 48*b9eebfadSRuchika Gupta desc = malloc(sizeof(int) * MAX_CAAM_DESCSIZE); 49*b9eebfadSRuchika Gupta if (!desc) { 50*b9eebfadSRuchika Gupta debug("Not enough memory for descriptor allocation\n"); 51*b9eebfadSRuchika Gupta return -1; 52*b9eebfadSRuchika Gupta } 53*b9eebfadSRuchika Gupta 54*b9eebfadSRuchika Gupta inline_cnstr_jobdesc_hash(desc, pbuf, buf_len, pout, 55*b9eebfadSRuchika Gupta driver_hash[algo].alg_type, 56*b9eebfadSRuchika Gupta driver_hash[algo].digestsize, 57*b9eebfadSRuchika Gupta 0); 58*b9eebfadSRuchika Gupta 59*b9eebfadSRuchika Gupta ret = run_descriptor_jr(desc); 60*b9eebfadSRuchika Gupta 61*b9eebfadSRuchika Gupta free(desc); 62*b9eebfadSRuchika Gupta return ret; 63*b9eebfadSRuchika Gupta } 64*b9eebfadSRuchika Gupta 65*b9eebfadSRuchika Gupta void hw_sha256(const unsigned char *pbuf, unsigned int buf_len, 66*b9eebfadSRuchika Gupta unsigned char *pout, unsigned int chunk_size) 67*b9eebfadSRuchika Gupta { 68*b9eebfadSRuchika Gupta if (caam_hash(pbuf, buf_len, pout, SHA256)) 69*b9eebfadSRuchika Gupta printf("CAAM was not setup properly or it is faulty\n"); 70*b9eebfadSRuchika Gupta } 71*b9eebfadSRuchika Gupta 72*b9eebfadSRuchika Gupta void hw_sha1(const unsigned char *pbuf, unsigned int buf_len, 73*b9eebfadSRuchika Gupta unsigned char *pout, unsigned int chunk_size) 74*b9eebfadSRuchika Gupta { 75*b9eebfadSRuchika Gupta if (caam_hash(pbuf, buf_len, pout, SHA1)) 76*b9eebfadSRuchika Gupta printf("CAAM was not setup properly or it is faulty\n"); 77*b9eebfadSRuchika Gupta } 78