diff options
Diffstat (limited to 'crypto/xcbc.c')
-rw-r--r-- | crypto/xcbc.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/crypto/xcbc.c b/crypto/xcbc.c index 3b991bf2fd92..9d502e67a5c0 100644 --- a/crypto/xcbc.c +++ b/crypto/xcbc.c | |||
@@ -47,19 +47,10 @@ struct crypto_xcbc_ctx { | |||
47 | u8 *prev; | 47 | u8 *prev; |
48 | u8 *key; | 48 | u8 *key; |
49 | u8 *consts; | 49 | u8 *consts; |
50 | void (*xor)(u8 *a, const u8 *b, unsigned int bs); | ||
51 | unsigned int keylen; | 50 | unsigned int keylen; |
52 | unsigned int len; | 51 | unsigned int len; |
53 | }; | 52 | }; |
54 | 53 | ||
55 | static void xor_128(u8 *a, const u8 *b, unsigned int bs) | ||
56 | { | ||
57 | ((u32 *)a)[0] ^= ((u32 *)b)[0]; | ||
58 | ((u32 *)a)[1] ^= ((u32 *)b)[1]; | ||
59 | ((u32 *)a)[2] ^= ((u32 *)b)[2]; | ||
60 | ((u32 *)a)[3] ^= ((u32 *)b)[3]; | ||
61 | } | ||
62 | |||
63 | static int _crypto_xcbc_digest_setkey(struct crypto_shash *parent, | 54 | static int _crypto_xcbc_digest_setkey(struct crypto_shash *parent, |
64 | struct crypto_xcbc_ctx *ctx) | 55 | struct crypto_xcbc_ctx *ctx) |
65 | { | 56 | { |
@@ -122,7 +113,7 @@ static int crypto_xcbc_digest_update(struct shash_desc *pdesc, const u8 *p, | |||
122 | len -= bs - ctx->len; | 113 | len -= bs - ctx->len; |
123 | p += bs - ctx->len; | 114 | p += bs - ctx->len; |
124 | 115 | ||
125 | ctx->xor(ctx->prev, ctx->odds, bs); | 116 | crypto_xor(ctx->prev, ctx->odds, bs); |
126 | crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev); | 117 | crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev); |
127 | 118 | ||
128 | /* clearing the length */ | 119 | /* clearing the length */ |
@@ -130,7 +121,7 @@ static int crypto_xcbc_digest_update(struct shash_desc *pdesc, const u8 *p, | |||
130 | 121 | ||
131 | /* encrypting the rest of data */ | 122 | /* encrypting the rest of data */ |
132 | while (len > bs) { | 123 | while (len > bs) { |
133 | ctx->xor(ctx->prev, p, bs); | 124 | crypto_xor(ctx->prev, p, bs); |
134 | crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev); | 125 | crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev); |
135 | p += bs; | 126 | p += bs; |
136 | len -= bs; | 127 | len -= bs; |
@@ -162,8 +153,8 @@ static int crypto_xcbc_digest_final(struct shash_desc *pdesc, u8 *out) | |||
162 | crypto_cipher_encrypt_one(tfm, key2, | 153 | crypto_cipher_encrypt_one(tfm, key2, |
163 | (u8 *)(ctx->consts + bs)); | 154 | (u8 *)(ctx->consts + bs)); |
164 | 155 | ||
165 | ctx->xor(ctx->prev, ctx->odds, bs); | 156 | crypto_xor(ctx->prev, ctx->odds, bs); |
166 | ctx->xor(ctx->prev, key2, bs); | 157 | crypto_xor(ctx->prev, key2, bs); |
167 | _crypto_xcbc_digest_setkey(parent, ctx); | 158 | _crypto_xcbc_digest_setkey(parent, ctx); |
168 | 159 | ||
169 | crypto_cipher_encrypt_one(tfm, out, ctx->prev); | 160 | crypto_cipher_encrypt_one(tfm, out, ctx->prev); |
@@ -184,8 +175,8 @@ static int crypto_xcbc_digest_final(struct shash_desc *pdesc, u8 *out) | |||
184 | crypto_cipher_encrypt_one(tfm, key3, | 175 | crypto_cipher_encrypt_one(tfm, key3, |
185 | (u8 *)(ctx->consts + bs * 2)); | 176 | (u8 *)(ctx->consts + bs * 2)); |
186 | 177 | ||
187 | ctx->xor(ctx->prev, ctx->odds, bs); | 178 | crypto_xor(ctx->prev, ctx->odds, bs); |
188 | ctx->xor(ctx->prev, key3, bs); | 179 | crypto_xor(ctx->prev, key3, bs); |
189 | 180 | ||
190 | _crypto_xcbc_digest_setkey(parent, ctx); | 181 | _crypto_xcbc_digest_setkey(parent, ctx); |
191 | 182 | ||
@@ -209,7 +200,6 @@ static int xcbc_init_tfm(struct crypto_tfm *tfm) | |||
209 | 200 | ||
210 | switch(bs) { | 201 | switch(bs) { |
211 | case 16: | 202 | case 16: |
212 | ctx->xor = xor_128; | ||
213 | break; | 203 | break; |
214 | default: | 204 | default: |
215 | return -EINVAL; | 205 | return -EINVAL; |