diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2007-12-01 02:35:38 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2008-01-10 16:16:49 -0500 |
commit | 03bf712fb4defc7831c727d1e32d0269f7f96de0 (patch) | |
tree | 44a7c169b6988cbb86cbe93fc33692691a9f24a9 /include/crypto | |
parent | 0a270321dbf948963aeb0e8382fe17d2c2eb3771 (diff) |
[CRYPTO] skcipher: Add top-level givencrypt/givdecrypt calls
This patch finally makes the givencrypt/givdecrypt operations available
to users by adding crypto_skcipher_givencrypt and crypto_skcipher_givdecrypt.
A suite of helpers to allocate and fill in the request is also available.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include/crypto')
-rw-r--r-- | include/crypto/skcipher.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/include/crypto/skcipher.h b/include/crypto/skcipher.h index c283fab5eddb..25fd6126522d 100644 --- a/include/crypto/skcipher.h +++ b/include/crypto/skcipher.h | |||
@@ -14,6 +14,8 @@ | |||
14 | #define _CRYPTO_SKCIPHER_H | 14 | #define _CRYPTO_SKCIPHER_H |
15 | 15 | ||
16 | #include <linux/crypto.h> | 16 | #include <linux/crypto.h> |
17 | #include <linux/kernel.h> | ||
18 | #include <linux/slab.h> | ||
17 | 19 | ||
18 | /** | 20 | /** |
19 | * struct skcipher_givcrypt_request - Crypto request with IV generation | 21 | * struct skcipher_givcrypt_request - Crypto request with IV generation |
@@ -34,5 +36,75 @@ static inline struct crypto_ablkcipher *skcipher_givcrypt_reqtfm( | |||
34 | return crypto_ablkcipher_reqtfm(&req->creq); | 36 | return crypto_ablkcipher_reqtfm(&req->creq); |
35 | } | 37 | } |
36 | 38 | ||
39 | static inline int crypto_skcipher_givencrypt( | ||
40 | struct skcipher_givcrypt_request *req) | ||
41 | { | ||
42 | struct ablkcipher_tfm *crt = | ||
43 | crypto_ablkcipher_crt(skcipher_givcrypt_reqtfm(req)); | ||
44 | return crt->givencrypt(req); | ||
45 | }; | ||
46 | |||
47 | static inline int crypto_skcipher_givdecrypt( | ||
48 | struct skcipher_givcrypt_request *req) | ||
49 | { | ||
50 | struct ablkcipher_tfm *crt = | ||
51 | crypto_ablkcipher_crt(skcipher_givcrypt_reqtfm(req)); | ||
52 | return crt->givdecrypt(req); | ||
53 | }; | ||
54 | |||
55 | static inline void skcipher_givcrypt_set_tfm( | ||
56 | struct skcipher_givcrypt_request *req, struct crypto_ablkcipher *tfm) | ||
57 | { | ||
58 | req->creq.base.tfm = crypto_ablkcipher_tfm(tfm); | ||
59 | } | ||
60 | |||
61 | static inline struct skcipher_givcrypt_request *skcipher_givcrypt_cast( | ||
62 | struct crypto_async_request *req) | ||
63 | { | ||
64 | return container_of(ablkcipher_request_cast(req), | ||
65 | struct skcipher_givcrypt_request, creq); | ||
66 | } | ||
67 | |||
68 | static inline struct skcipher_givcrypt_request *skcipher_givcrypt_alloc( | ||
69 | struct crypto_ablkcipher *tfm, gfp_t gfp) | ||
70 | { | ||
71 | struct skcipher_givcrypt_request *req; | ||
72 | |||
73 | req = kmalloc(sizeof(struct skcipher_givcrypt_request) + | ||
74 | crypto_ablkcipher_reqsize(tfm), gfp); | ||
75 | |||
76 | if (likely(req)) | ||
77 | skcipher_givcrypt_set_tfm(req, tfm); | ||
78 | |||
79 | return req; | ||
80 | } | ||
81 | |||
82 | static inline void skcipher_givcrypt_free(struct skcipher_givcrypt_request *req) | ||
83 | { | ||
84 | kfree(req); | ||
85 | } | ||
86 | |||
87 | static inline void skcipher_givcrypt_set_callback( | ||
88 | struct skcipher_givcrypt_request *req, u32 flags, | ||
89 | crypto_completion_t complete, void *data) | ||
90 | { | ||
91 | ablkcipher_request_set_callback(&req->creq, flags, complete, data); | ||
92 | } | ||
93 | |||
94 | static inline void skcipher_givcrypt_set_crypt( | ||
95 | struct skcipher_givcrypt_request *req, | ||
96 | struct scatterlist *src, struct scatterlist *dst, | ||
97 | unsigned int nbytes, void *iv) | ||
98 | { | ||
99 | ablkcipher_request_set_crypt(&req->creq, src, dst, nbytes, iv); | ||
100 | } | ||
101 | |||
102 | static inline void skcipher_givcrypt_set_giv( | ||
103 | struct skcipher_givcrypt_request *req, u8 *giv, u64 seq) | ||
104 | { | ||
105 | req->giv = giv; | ||
106 | req->seq = seq; | ||
107 | } | ||
108 | |||
37 | #endif /* _CRYPTO_SKCIPHER_H */ | 109 | #endif /* _CRYPTO_SKCIPHER_H */ |
38 | 110 | ||