aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2008-07-10 04:01:22 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2008-07-10 08:35:18 -0400
commit18e33e6d5cc0495826f5245777cd267732815e01 (patch)
tree5cf0151630a63c27e06daad39556c423d4e2ef36 /include
parent5773a3e6e396d5fd9de58372abe6a86b7e258e3e (diff)
crypto: hash - Move ahash functions into crypto/hash.h
All new crypto interfaces should go into individual files as much as possible in order to ensure that crypto.h does not collapse under its own weight. This patch moves the ahash code into crypto/hash.h and crypto/internal/hash.h respectively. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include')
-rw-r--r--include/crypto/algapi.h36
-rw-r--r--include/crypto/hash.h154
-rw-r--r--include/crypto/internal/hash.h37
-rw-r--r--include/linux/crypto.h136
4 files changed, 191 insertions, 172 deletions
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h
index fef272a8ceeb..60d06e784be3 100644
--- a/include/crypto/algapi.h
+++ b/include/crypto/algapi.h
@@ -98,7 +98,6 @@ extern const struct crypto_type crypto_ablkcipher_type;
98extern const struct crypto_type crypto_aead_type; 98extern const struct crypto_type crypto_aead_type;
99extern const struct crypto_type crypto_blkcipher_type; 99extern const struct crypto_type crypto_blkcipher_type;
100extern const struct crypto_type crypto_hash_type; 100extern const struct crypto_type crypto_hash_type;
101extern const struct crypto_type crypto_ahash_type;
102 101
103void crypto_mod_put(struct crypto_alg *alg); 102void crypto_mod_put(struct crypto_alg *alg);
104 103
@@ -315,40 +314,5 @@ static inline int crypto_requires_sync(u32 type, u32 mask)
315 return (type ^ CRYPTO_ALG_ASYNC) & mask & CRYPTO_ALG_ASYNC; 314 return (type ^ CRYPTO_ALG_ASYNC) & mask & CRYPTO_ALG_ASYNC;
316} 315}
317 316
318static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm)
319{
320 return crypto_tfm_ctx(&tfm->base);
321}
322
323static inline struct ahash_alg *crypto_ahash_alg(
324 struct crypto_ahash *tfm)
325{
326 return &crypto_ahash_tfm(tfm)->__crt_alg->cra_ahash;
327}
328
329static inline int ahash_enqueue_request(struct crypto_queue *queue,
330 struct ahash_request *request)
331{
332 return crypto_enqueue_request(queue, &request->base);
333}
334
335static inline struct ahash_request *ahash_dequeue_request(
336 struct crypto_queue *queue)
337{
338 return ahash_request_cast(crypto_dequeue_request(queue));
339}
340
341static inline void *ahash_request_ctx(struct ahash_request *req)
342{
343 return req->__ctx;
344}
345
346static inline int ahash_tfm_in_queue(struct crypto_queue *queue,
347 struct crypto_ahash *tfm)
348{
349 return crypto_tfm_in_queue(queue, crypto_ahash_tfm(tfm));
350}
351
352
353#endif /* _CRYPTO_ALGAPI_H */ 317#endif /* _CRYPTO_ALGAPI_H */
354 318
diff --git a/include/crypto/hash.h b/include/crypto/hash.h
new file mode 100644
index 000000000000..d12498ec8a4e
--- /dev/null
+++ b/include/crypto/hash.h
@@ -0,0 +1,154 @@
1/*
2 * Hash: Hash algorithms under the crypto API
3 *
4 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 */
12
13#ifndef _CRYPTO_HASH_H
14#define _CRYPTO_HASH_H
15
16#include <linux/crypto.h>
17
18struct crypto_ahash {
19 struct crypto_tfm base;
20};
21
22static inline struct crypto_ahash *__crypto_ahash_cast(struct crypto_tfm *tfm)
23{
24 return (struct crypto_ahash *)tfm;
25}
26
27static inline struct crypto_ahash *crypto_alloc_ahash(const char *alg_name,
28 u32 type, u32 mask)
29{
30 type &= ~CRYPTO_ALG_TYPE_MASK;
31 mask &= ~CRYPTO_ALG_TYPE_MASK;
32 type |= CRYPTO_ALG_TYPE_AHASH;
33 mask |= CRYPTO_ALG_TYPE_AHASH_MASK;
34
35 return __crypto_ahash_cast(crypto_alloc_base(alg_name, type, mask));
36}
37
38static inline struct crypto_tfm *crypto_ahash_tfm(struct crypto_ahash *tfm)
39{
40 return &tfm->base;
41}
42
43static inline void crypto_free_ahash(struct crypto_ahash *tfm)
44{
45 crypto_free_tfm(crypto_ahash_tfm(tfm));
46}
47
48static inline unsigned int crypto_ahash_alignmask(
49 struct crypto_ahash *tfm)
50{
51 return crypto_tfm_alg_alignmask(crypto_ahash_tfm(tfm));
52}
53
54static inline struct ahash_tfm *crypto_ahash_crt(struct crypto_ahash *tfm)
55{
56 return &crypto_ahash_tfm(tfm)->crt_ahash;
57}
58
59static inline unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm)
60{
61 return crypto_ahash_crt(tfm)->digestsize;
62}
63
64static inline u32 crypto_ahash_get_flags(struct crypto_ahash *tfm)
65{
66 return crypto_tfm_get_flags(crypto_ahash_tfm(tfm));
67}
68
69static inline void crypto_ahash_set_flags(struct crypto_ahash *tfm, u32 flags)
70{
71 crypto_tfm_set_flags(crypto_ahash_tfm(tfm), flags);
72}
73
74static inline void crypto_ahash_clear_flags(struct crypto_ahash *tfm, u32 flags)
75{
76 crypto_tfm_clear_flags(crypto_ahash_tfm(tfm), flags);
77}
78
79static inline struct crypto_ahash *crypto_ahash_reqtfm(
80 struct ahash_request *req)
81{
82 return __crypto_ahash_cast(req->base.tfm);
83}
84
85static inline unsigned int crypto_ahash_reqsize(struct crypto_ahash *tfm)
86{
87 return crypto_ahash_crt(tfm)->reqsize;
88}
89
90static inline int crypto_ahash_setkey(struct crypto_ahash *tfm,
91 const u8 *key, unsigned int keylen)
92{
93 struct ahash_tfm *crt = crypto_ahash_crt(tfm);
94
95 return crt->setkey(tfm, key, keylen);
96}
97
98static inline int crypto_ahash_digest(struct ahash_request *req)
99{
100 struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req));
101 return crt->digest(req);
102}
103
104static inline void ahash_request_set_tfm(struct ahash_request *req,
105 struct crypto_ahash *tfm)
106{
107 req->base.tfm = crypto_ahash_tfm(tfm);
108}
109
110static inline struct ahash_request *ahash_request_alloc(
111 struct crypto_ahash *tfm, gfp_t gfp)
112{
113 struct ahash_request *req;
114
115 req = kmalloc(sizeof(struct ahash_request) +
116 crypto_ahash_reqsize(tfm), gfp);
117
118 if (likely(req))
119 ahash_request_set_tfm(req, tfm);
120
121 return req;
122}
123
124static inline void ahash_request_free(struct ahash_request *req)
125{
126 kfree(req);
127}
128
129static inline struct ahash_request *ahash_request_cast(
130 struct crypto_async_request *req)
131{
132 return container_of(req, struct ahash_request, base);
133}
134
135static inline void ahash_request_set_callback(struct ahash_request *req,
136 u32 flags,
137 crypto_completion_t complete,
138 void *data)
139{
140 req->base.complete = complete;
141 req->base.data = data;
142 req->base.flags = flags;
143}
144
145static inline void ahash_request_set_crypt(struct ahash_request *req,
146 struct scatterlist *src, u8 *result,
147 unsigned int nbytes)
148{
149 req->src = src;
150 req->nbytes = nbytes;
151 req->result = result;
152}
153
154#endif /* _CRYPTO_HASH_H */
diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h
index 93ac42280221..917ae57bad4a 100644
--- a/include/crypto/internal/hash.h
+++ b/include/crypto/internal/hash.h
@@ -14,6 +14,7 @@
14#define _CRYPTO_INTERNAL_HASH_H 14#define _CRYPTO_INTERNAL_HASH_H
15 15
16#include <crypto/algapi.h> 16#include <crypto/algapi.h>
17#include <crypto/hash.h>
17 18
18struct ahash_request; 19struct ahash_request;
19struct scatterlist; 20struct scatterlist;
@@ -33,9 +34,45 @@ struct crypto_hash_walk {
33 unsigned int flags; 34 unsigned int flags;
34}; 35};
35 36
37extern const struct crypto_type crypto_ahash_type;
38
36int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err); 39int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err);
37int crypto_hash_walk_first(struct ahash_request *req, 40int crypto_hash_walk_first(struct ahash_request *req,
38 struct crypto_hash_walk *walk); 41 struct crypto_hash_walk *walk);
39 42
43static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm)
44{
45 return crypto_tfm_ctx(&tfm->base);
46}
47
48static inline struct ahash_alg *crypto_ahash_alg(
49 struct crypto_ahash *tfm)
50{
51 return &crypto_ahash_tfm(tfm)->__crt_alg->cra_ahash;
52}
53
54static inline int ahash_enqueue_request(struct crypto_queue *queue,
55 struct ahash_request *request)
56{
57 return crypto_enqueue_request(queue, &request->base);
58}
59
60static inline struct ahash_request *ahash_dequeue_request(
61 struct crypto_queue *queue)
62{
63 return ahash_request_cast(crypto_dequeue_request(queue));
64}
65
66static inline void *ahash_request_ctx(struct ahash_request *req)
67{
68 return req->__ctx;
69}
70
71static inline int ahash_tfm_in_queue(struct crypto_queue *queue,
72 struct crypto_ahash *tfm)
73{
74 return crypto_tfm_in_queue(queue, crypto_ahash_tfm(tfm));
75}
76
40#endif /* _CRYPTO_INTERNAL_HASH_H */ 77#endif /* _CRYPTO_INTERNAL_HASH_H */
41 78
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 68ef293644d3..c43dc47fdf75 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -481,10 +481,6 @@ struct crypto_hash {
481 struct crypto_tfm base; 481 struct crypto_tfm base;
482}; 482};
483 483
484struct crypto_ahash {
485 struct crypto_tfm base;
486};
487
488enum { 484enum {
489 CRYPTOA_UNSPEC, 485 CRYPTOA_UNSPEC,
490 CRYPTOA_ALG, 486 CRYPTOA_ALG,
@@ -1308,137 +1304,5 @@ static inline int crypto_comp_decompress(struct crypto_comp *tfm,
1308 src, slen, dst, dlen); 1304 src, slen, dst, dlen);
1309} 1305}
1310 1306
1311static inline struct crypto_ahash *__crypto_ahash_cast(struct crypto_tfm *tfm)
1312{
1313 return (struct crypto_ahash *)tfm;
1314}
1315
1316static inline struct crypto_ahash *crypto_alloc_ahash(const char *alg_name,
1317 u32 type, u32 mask)
1318{
1319 type &= ~CRYPTO_ALG_TYPE_MASK;
1320 mask &= ~CRYPTO_ALG_TYPE_MASK;
1321 type |= CRYPTO_ALG_TYPE_AHASH;
1322 mask |= CRYPTO_ALG_TYPE_AHASH_MASK;
1323
1324 return __crypto_ahash_cast(crypto_alloc_base(alg_name, type, mask));
1325}
1326
1327static inline struct crypto_tfm *crypto_ahash_tfm(struct crypto_ahash *tfm)
1328{
1329 return &tfm->base;
1330}
1331
1332static inline void crypto_free_ahash(struct crypto_ahash *tfm)
1333{
1334 crypto_free_tfm(crypto_ahash_tfm(tfm));
1335}
1336
1337static inline unsigned int crypto_ahash_alignmask(
1338 struct crypto_ahash *tfm)
1339{
1340 return crypto_tfm_alg_alignmask(crypto_ahash_tfm(tfm));
1341}
1342
1343static inline struct ahash_tfm *crypto_ahash_crt(struct crypto_ahash *tfm)
1344{
1345 return &crypto_ahash_tfm(tfm)->crt_ahash;
1346}
1347
1348static inline unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm)
1349{
1350 return crypto_ahash_crt(tfm)->digestsize;
1351}
1352
1353static inline u32 crypto_ahash_get_flags(struct crypto_ahash *tfm)
1354{
1355 return crypto_tfm_get_flags(crypto_ahash_tfm(tfm));
1356}
1357
1358static inline void crypto_ahash_set_flags(struct crypto_ahash *tfm, u32 flags)
1359{
1360 crypto_tfm_set_flags(crypto_ahash_tfm(tfm), flags);
1361}
1362
1363static inline void crypto_ahash_clear_flags(struct crypto_ahash *tfm, u32 flags)
1364{
1365 crypto_tfm_clear_flags(crypto_ahash_tfm(tfm), flags);
1366}
1367
1368static inline struct crypto_ahash *crypto_ahash_reqtfm(
1369 struct ahash_request *req)
1370{
1371 return __crypto_ahash_cast(req->base.tfm);
1372}
1373
1374static inline unsigned int crypto_ahash_reqsize(struct crypto_ahash *tfm)
1375{
1376 return crypto_ahash_crt(tfm)->reqsize;
1377}
1378
1379static inline int crypto_ahash_setkey(struct crypto_ahash *tfm,
1380 const u8 *key, unsigned int keylen)
1381{
1382 struct ahash_tfm *crt = crypto_ahash_crt(tfm);
1383
1384 return crt->setkey(tfm, key, keylen);
1385}
1386
1387static inline int crypto_ahash_digest(struct ahash_request *req)
1388{
1389 struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req));
1390 return crt->digest(req);
1391}
1392
1393static inline void ahash_request_set_tfm(struct ahash_request *req,
1394 struct crypto_ahash *tfm)
1395{
1396 req->base.tfm = crypto_ahash_tfm(tfm);
1397}
1398
1399static inline struct ahash_request *ahash_request_alloc(
1400 struct crypto_ahash *tfm, gfp_t gfp)
1401{
1402 struct ahash_request *req;
1403
1404 req = kmalloc(sizeof(struct ahash_request) +
1405 crypto_ahash_reqsize(tfm), gfp);
1406
1407 if (likely(req))
1408 ahash_request_set_tfm(req, tfm);
1409
1410 return req;
1411}
1412
1413static inline void ahash_request_free(struct ahash_request *req)
1414{
1415 kfree(req);
1416}
1417
1418static inline struct ahash_request *ahash_request_cast(
1419 struct crypto_async_request *req)
1420{
1421 return container_of(req, struct ahash_request, base);
1422}
1423
1424static inline void ahash_request_set_callback(struct ahash_request *req,
1425 u32 flags,
1426 crypto_completion_t complete,
1427 void *data)
1428{
1429 req->base.complete = complete;
1430 req->base.data = data;
1431 req->base.flags = flags;
1432}
1433
1434static inline void ahash_request_set_crypt(struct ahash_request *req,
1435 struct scatterlist *src, u8 *result,
1436 unsigned int nbytes)
1437{
1438 req->src = src;
1439 req->nbytes = nbytes;
1440 req->result = result;
1441}
1442
1443#endif /* _LINUX_CRYPTO_H */ 1307#endif /* _LINUX_CRYPTO_H */
1444 1308