home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / ah.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  793 b   |  36 lines

  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
  36.