]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _NET_AH_H |
2 | #define _NET_AH_H | |
3 | ||
4 | #include <net/xfrm.h> | |
5 | ||
6 | /* This is the maximum truncated ICV length that we know of. */ | |
7 | #define MAX_AH_AUTH_LEN 12 | |
8 | ||
9 | struct ah_data | |
10 | { | |
11 | u8 *key; | |
12 | int key_len; | |
13 | u8 *work_icv; | |
14 | int icv_full_len; | |
15 | int icv_trunc_len; | |
16 | ||
17 | void (*icv)(struct ah_data*, | |
18 | struct sk_buff *skb, u8 *icv); | |
19 | ||
20 | struct crypto_tfm *tfm; | |
21 | }; | |
22 | ||
23 | static inline void | |
24 | ah_hmac_digest(struct ah_data *ahp, struct sk_buff *skb, u8 *auth_data) | |
25 | { | |
26 | struct crypto_tfm *tfm = ahp->tfm; | |
27 | ||
28 | memset(auth_data, 0, ahp->icv_trunc_len); | |
29 | crypto_hmac_init(tfm, ahp->key, &ahp->key_len); | |
30 | skb_icv_walk(skb, tfm, 0, skb->len, crypto_hmac_update); | |
31 | crypto_hmac_final(tfm, ahp->key, &ahp->key_len, ahp->work_icv); | |
32 | memcpy(auth_data, ahp->work_icv, ahp->icv_trunc_len); | |
33 | } | |
34 | ||
35 | #endif |