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