aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/crypto/internal/skcipher.h9
-rw-r--r--include/crypto/skcipher.h38
-rw-r--r--include/linux/crypto.h7
3 files changed, 54 insertions, 0 deletions
diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h
index 87879e64ff4c..c9402dd12d03 100644
--- a/include/crypto/internal/skcipher.h
+++ b/include/crypto/internal/skcipher.h
@@ -14,11 +14,14 @@
14#define _CRYPTO_INTERNAL_SKCIPHER_H 14#define _CRYPTO_INTERNAL_SKCIPHER_H
15 15
16#include <crypto/algapi.h> 16#include <crypto/algapi.h>
17#include <crypto/skcipher.h>
17 18
18struct crypto_skcipher_spawn { 19struct crypto_skcipher_spawn {
19 struct crypto_spawn base; 20 struct crypto_spawn base;
20}; 21};
21 22
23extern const struct crypto_type crypto_givcipher_type;
24
22static inline void crypto_set_skcipher_spawn( 25static inline void crypto_set_skcipher_spawn(
23 struct crypto_skcipher_spawn *spawn, struct crypto_instance *inst) 26 struct crypto_skcipher_spawn *spawn, struct crypto_instance *inst)
24{ 27{
@@ -47,5 +50,11 @@ static inline struct crypto_ablkcipher *crypto_spawn_skcipher(
47 crypto_skcipher_mask(0))); 50 crypto_skcipher_mask(0)));
48} 51}
49 52
53static inline void *skcipher_givcrypt_reqctx(
54 struct skcipher_givcrypt_request *req)
55{
56 return ablkcipher_request_ctx(&req->creq);
57}
58
50#endif /* _CRYPTO_INTERNAL_SKCIPHER_H */ 59#endif /* _CRYPTO_INTERNAL_SKCIPHER_H */
51 60
diff --git a/include/crypto/skcipher.h b/include/crypto/skcipher.h
new file mode 100644
index 000000000000..c283fab5eddb
--- /dev/null
+++ b/include/crypto/skcipher.h
@@ -0,0 +1,38 @@
1/*
2 * Symmetric key ciphers.
3 *
4 * Copyright (c) 2007 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_SKCIPHER_H
14#define _CRYPTO_SKCIPHER_H
15
16#include <linux/crypto.h>
17
18/**
19 * struct skcipher_givcrypt_request - Crypto request with IV generation
20 * @seq: Sequence number for IV generation
21 * @giv: Space for generated IV
22 * @creq: The crypto request itself
23 */
24struct skcipher_givcrypt_request {
25 u64 seq;
26 u8 *giv;
27
28 struct ablkcipher_request creq;
29};
30
31static inline struct crypto_ablkcipher *skcipher_givcrypt_reqtfm(
32 struct skcipher_givcrypt_request *req)
33{
34 return crypto_ablkcipher_reqtfm(&req->creq);
35}
36
37#endif /* _CRYPTO_SKCIPHER_H */
38
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index d6962b409489..3656a24ea7f0 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -34,6 +34,7 @@
34#define CRYPTO_ALG_TYPE_HASH 0x00000003 34#define CRYPTO_ALG_TYPE_HASH 0x00000003
35#define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004 35#define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004
36#define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005 36#define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005
37#define CRYPTO_ALG_TYPE_GIVCIPHER 0x00000006
37#define CRYPTO_ALG_TYPE_COMPRESS 0x00000008 38#define CRYPTO_ALG_TYPE_COMPRESS 0x00000008
38#define CRYPTO_ALG_TYPE_AEAD 0x00000009 39#define CRYPTO_ALG_TYPE_AEAD 0x00000009
39 40
@@ -99,6 +100,7 @@ struct crypto_blkcipher;
99struct crypto_hash; 100struct crypto_hash;
100struct crypto_tfm; 101struct crypto_tfm;
101struct crypto_type; 102struct crypto_type;
103struct skcipher_givcrypt_request;
102 104
103typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err); 105typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err);
104 106
@@ -178,6 +180,8 @@ struct ablkcipher_alg {
178 unsigned int keylen); 180 unsigned int keylen);
179 int (*encrypt)(struct ablkcipher_request *req); 181 int (*encrypt)(struct ablkcipher_request *req);
180 int (*decrypt)(struct ablkcipher_request *req); 182 int (*decrypt)(struct ablkcipher_request *req);
183 int (*givencrypt)(struct skcipher_givcrypt_request *req);
184 int (*givdecrypt)(struct skcipher_givcrypt_request *req);
181 185
182 unsigned int min_keysize; 186 unsigned int min_keysize;
183 unsigned int max_keysize; 187 unsigned int max_keysize;
@@ -320,6 +324,9 @@ struct ablkcipher_tfm {
320 unsigned int keylen); 324 unsigned int keylen);
321 int (*encrypt)(struct ablkcipher_request *req); 325 int (*encrypt)(struct ablkcipher_request *req);
322 int (*decrypt)(struct ablkcipher_request *req); 326 int (*decrypt)(struct ablkcipher_request *req);
327 int (*givencrypt)(struct skcipher_givcrypt_request *req);
328 int (*givdecrypt)(struct skcipher_givcrypt_request *req);
329
323 unsigned int ivsize; 330 unsigned int ivsize;
324 unsigned int reqsize; 331 unsigned int reqsize;
325}; 332};