]> code.ossystems Code Review - meta-freescale.git/blob
3dc2b92263215e22e5eb7441441dea9cdba96298
[meta-freescale.git] /
1 From 3fe44ab50a87106af3349148e81ec8a1d524de82 Mon Sep 17 00:00:00 2001
2 From: Cristian Stoica <cristian.stoica@nxp.com>
3 Date: Tue, 15 Dec 2015 15:43:28 +0200
4 Subject: [PATCH 29/48] cryptodev: use CIOCHASH ioctl for digest operations
5
6 Signed-off-by: Cristian Stoica <cristian.stoica@nxp.com>
7 ---
8  crypto/engine/eng_cryptodev.c | 34 +++++++++++-----------------------
9  1 file changed, 11 insertions(+), 23 deletions(-)
10
11 diff --git a/crypto/engine/eng_cryptodev.c b/crypto/engine/eng_cryptodev.c
12 index 1585009..dc27b55 100644
13 --- a/crypto/engine/eng_cryptodev.c
14 +++ b/crypto/engine/eng_cryptodev.c
15 @@ -84,6 +84,7 @@ struct dev_crypto_state {
16      unsigned char *iv;
17      int ivlen;
18  # ifdef USE_CRYPTODEV_DIGESTS
19 +    struct hash_op_data hash_op;
20      char dummy_mac_key[HASH_MAX_LEN];
21      unsigned char digest_res[HASH_MAX_LEN];
22      char *mac_data;
23 @@ -1556,7 +1557,7 @@ static int digest_key_length(int nid)
24  static int cryptodev_digest_init(EVP_MD_CTX *ctx)
25  {
26      struct dev_crypto_state *state = ctx->md_data;
27 -    struct session_op *sess = &state->d_sess;
28 +    struct hash_op_data *hash_op = &state->hash_op;
29      int digest;
30  
31      memset(state, 0, sizeof(struct dev_crypto_state));
32 @@ -1573,9 +1574,9 @@ static int cryptodev_digest_init(EVP_MD_CTX *ctx)
33          return (0);
34      }
35  
36 -    sess->mackey = state->dummy_mac_key;
37 -    sess->mackeylen = digest_key_length(ctx->digest->type);
38 -    sess->mac = digest;
39 +    hash_op->mac_op = digest;
40 +    hash_op->mackey = state->dummy_mac_key;
41 +    hash_op->mackeylen = digest_key_length(ctx->digest->type);
42  
43      return (1);
44  }
45 @@ -1617,37 +1618,24 @@ static int cryptodev_digest_update(EVP_MD_CTX *ctx, const void *data,
46  static int cryptodev_digest_final(EVP_MD_CTX *ctx, unsigned char *md)
47  {
48      int ret = 1;
49 -    struct crypt_op cryp;
50      struct dev_crypto_state *state = ctx->md_data;
51 -    struct session_op *sess = &state->d_sess;
52 +    struct hash_op_data *hash_op = &state->hash_op;
53  
54      if (!md || state->d_fd < 0) {
55          printf("%s: illegal input\n", __func__);
56          return (0);
57      }
58  
59 -    if (ioctl(state->d_fd, CIOCGSESSION, sess) < 0) {
60 -        printf("%s: Open session failed\n", __func__);
61 -        return (0);
62 -    }
63 -
64 -    memset(&cryp, 0, sizeof(cryp));
65 +    hash_op->flags = 0;
66 +    hash_op->len = state->mac_len;
67 +    hash_op->src = state->mac_data;
68 +    hash_op->mac_result = md;
69  
70 -    cryp.ses = sess->ses;
71 -    cryp.flags = 0;
72 -    cryp.len = state->mac_len;
73 -    cryp.src = state->mac_data;
74 -    cryp.mac = md;
75 -
76 -    if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
77 +    if (ioctl(state->d_fd, CIOCHASH, hash_op) < 0) {
78          printf("%s: digest failed\n", __func__);
79          ret = 0;
80      }
81  
82 -    if (ioctl(state->d_fd, CIOCFSESSION, &sess->ses) < 0) {
83 -        printf("%s: failed to close session\n", __func__);
84 -    }
85 -
86      return ret;
87  }
88  
89 -- 
90 2.7.0
91