diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-08-22 06:36:13 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2006-09-20 21:46:15 -0400 |
commit | f12cc2090d721647c23dfce20834f4306db3b77d (patch) | |
tree | fba6861bdb58153acaab1ba1e51ec4e48fe0fd99 /net/ieee80211/ieee80211_crypt_ccmp.c | |
parent | 378c6697a282c383d89428380a3405bf95189347 (diff) |
[CRYPTO] users: Use block ciphers where applicable
This patch converts all remaining users to use the new block cipher type
where applicable. It also changes all simple cipher operations to use
the new encrypt_one/decrypt_one interface.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'net/ieee80211/ieee80211_crypt_ccmp.c')
-rw-r--r-- | net/ieee80211/ieee80211_crypt_ccmp.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/net/ieee80211/ieee80211_crypt_ccmp.c b/net/ieee80211/ieee80211_crypt_ccmp.c index ed90a8af1444..fdfe7704a469 100644 --- a/net/ieee80211/ieee80211_crypt_ccmp.c +++ b/net/ieee80211/ieee80211_crypt_ccmp.c | |||
@@ -9,6 +9,7 @@ | |||
9 | * more details. | 9 | * more details. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/err.h> | ||
12 | #include <linux/module.h> | 13 | #include <linux/module.h> |
13 | #include <linux/init.h> | 14 | #include <linux/init.h> |
14 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
@@ -48,7 +49,7 @@ struct ieee80211_ccmp_data { | |||
48 | 49 | ||
49 | int key_idx; | 50 | int key_idx; |
50 | 51 | ||
51 | struct crypto_tfm *tfm; | 52 | struct crypto_cipher *tfm; |
52 | 53 | ||
53 | /* scratch buffers for virt_to_page() (crypto API) */ | 54 | /* scratch buffers for virt_to_page() (crypto API) */ |
54 | u8 tx_b0[AES_BLOCK_LEN], tx_b[AES_BLOCK_LEN], | 55 | u8 tx_b0[AES_BLOCK_LEN], tx_b[AES_BLOCK_LEN], |
@@ -56,20 +57,10 @@ struct ieee80211_ccmp_data { | |||
56 | u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN]; | 57 | u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN]; |
57 | }; | 58 | }; |
58 | 59 | ||
59 | static void ieee80211_ccmp_aes_encrypt(struct crypto_tfm *tfm, | 60 | static inline void ieee80211_ccmp_aes_encrypt(struct crypto_cipher *tfm, |
60 | const u8 pt[16], u8 ct[16]) | 61 | const u8 pt[16], u8 ct[16]) |
61 | { | 62 | { |
62 | struct scatterlist src, dst; | 63 | crypto_cipher_encrypt_one(tfm, ct, pt); |
63 | |||
64 | src.page = virt_to_page(pt); | ||
65 | src.offset = offset_in_page(pt); | ||
66 | src.length = AES_BLOCK_LEN; | ||
67 | |||
68 | dst.page = virt_to_page(ct); | ||
69 | dst.offset = offset_in_page(ct); | ||
70 | dst.length = AES_BLOCK_LEN; | ||
71 | |||
72 | crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN); | ||
73 | } | 64 | } |
74 | 65 | ||
75 | static void *ieee80211_ccmp_init(int key_idx) | 66 | static void *ieee80211_ccmp_init(int key_idx) |
@@ -81,10 +72,11 @@ static void *ieee80211_ccmp_init(int key_idx) | |||
81 | goto fail; | 72 | goto fail; |
82 | priv->key_idx = key_idx; | 73 | priv->key_idx = key_idx; |
83 | 74 | ||
84 | priv->tfm = crypto_alloc_tfm("aes", 0); | 75 | priv->tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); |
85 | if (priv->tfm == NULL) { | 76 | if (IS_ERR(priv->tfm)) { |
86 | printk(KERN_DEBUG "ieee80211_crypt_ccmp: could not allocate " | 77 | printk(KERN_DEBUG "ieee80211_crypt_ccmp: could not allocate " |
87 | "crypto API aes\n"); | 78 | "crypto API aes\n"); |
79 | priv->tfm = NULL; | ||
88 | goto fail; | 80 | goto fail; |
89 | } | 81 | } |
90 | 82 | ||
@@ -93,7 +85,7 @@ static void *ieee80211_ccmp_init(int key_idx) | |||
93 | fail: | 85 | fail: |
94 | if (priv) { | 86 | if (priv) { |
95 | if (priv->tfm) | 87 | if (priv->tfm) |
96 | crypto_free_tfm(priv->tfm); | 88 | crypto_free_cipher(priv->tfm); |
97 | kfree(priv); | 89 | kfree(priv); |
98 | } | 90 | } |
99 | 91 | ||
@@ -104,7 +96,7 @@ static void ieee80211_ccmp_deinit(void *priv) | |||
104 | { | 96 | { |
105 | struct ieee80211_ccmp_data *_priv = priv; | 97 | struct ieee80211_ccmp_data *_priv = priv; |
106 | if (_priv && _priv->tfm) | 98 | if (_priv && _priv->tfm) |
107 | crypto_free_tfm(_priv->tfm); | 99 | crypto_free_cipher(_priv->tfm); |
108 | kfree(priv); | 100 | kfree(priv); |
109 | } | 101 | } |
110 | 102 | ||
@@ -115,7 +107,7 @@ static inline void xor_block(u8 * b, u8 * a, size_t len) | |||
115 | b[i] ^= a[i]; | 107 | b[i] ^= a[i]; |
116 | } | 108 | } |
117 | 109 | ||
118 | static void ccmp_init_blocks(struct crypto_tfm *tfm, | 110 | static void ccmp_init_blocks(struct crypto_cipher *tfm, |
119 | struct ieee80211_hdr_4addr *hdr, | 111 | struct ieee80211_hdr_4addr *hdr, |
120 | u8 * pn, size_t dlen, u8 * b0, u8 * auth, u8 * s0) | 112 | u8 * pn, size_t dlen, u8 * b0, u8 * auth, u8 * s0) |
121 | { | 113 | { |
@@ -377,7 +369,7 @@ static int ieee80211_ccmp_set_key(void *key, int len, u8 * seq, void *priv) | |||
377 | { | 369 | { |
378 | struct ieee80211_ccmp_data *data = priv; | 370 | struct ieee80211_ccmp_data *data = priv; |
379 | int keyidx; | 371 | int keyidx; |
380 | struct crypto_tfm *tfm = data->tfm; | 372 | struct crypto_cipher *tfm = data->tfm; |
381 | 373 | ||
382 | keyidx = data->key_idx; | 374 | keyidx = data->key_idx; |
383 | memset(data, 0, sizeof(*data)); | 375 | memset(data, 0, sizeof(*data)); |