Merge branch 'master' into upstream
Conflicts: net/ieee80211/ieee80211_crypt_tkip.c net/ieee80211/ieee80211_crypt_wep.c
Este cometimento está contido em:
@@ -1,6 +1,7 @@
|
||||
#ifndef _NET_AH_H
|
||||
#define _NET_AH_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <net/xfrm.h>
|
||||
|
||||
/* This is the maximum truncated ICV length that we know of. */
|
||||
@@ -14,22 +15,29 @@ struct ah_data
|
||||
int icv_full_len;
|
||||
int icv_trunc_len;
|
||||
|
||||
void (*icv)(struct ah_data*,
|
||||
struct sk_buff *skb, u8 *icv);
|
||||
|
||||
struct crypto_tfm *tfm;
|
||||
struct crypto_hash *tfm;
|
||||
};
|
||||
|
||||
static inline void
|
||||
ah_hmac_digest(struct ah_data *ahp, struct sk_buff *skb, u8 *auth_data)
|
||||
static inline int ah_mac_digest(struct ah_data *ahp, struct sk_buff *skb,
|
||||
u8 *auth_data)
|
||||
{
|
||||
struct crypto_tfm *tfm = ahp->tfm;
|
||||
struct hash_desc desc;
|
||||
int err;
|
||||
|
||||
desc.tfm = ahp->tfm;
|
||||
desc.flags = 0;
|
||||
|
||||
memset(auth_data, 0, ahp->icv_trunc_len);
|
||||
crypto_hmac_init(tfm, ahp->key, &ahp->key_len);
|
||||
skb_icv_walk(skb, tfm, 0, skb->len, crypto_hmac_update);
|
||||
crypto_hmac_final(tfm, ahp->key, &ahp->key_len, ahp->work_icv);
|
||||
memcpy(auth_data, ahp->work_icv, ahp->icv_trunc_len);
|
||||
err = crypto_hash_init(&desc);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
err = skb_icv_walk(skb, &desc, 0, skb->len, crypto_hash_update);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
err = crypto_hash_final(&desc, ahp->work_icv);
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#ifndef _NET_ESP_H
|
||||
#define _NET_ESP_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <net/xfrm.h>
|
||||
#include <asm/scatterlist.h>
|
||||
|
||||
@@ -21,7 +22,7 @@ struct esp_data
|
||||
* >= crypto_tfm_alg_ivsize(tfm). */
|
||||
int ivlen;
|
||||
int padlen; /* 0..255 */
|
||||
struct crypto_tfm *tfm; /* crypto handle */
|
||||
struct crypto_blkcipher *tfm; /* crypto handle */
|
||||
} conf;
|
||||
|
||||
/* Integrity. It is active when icv_full_len != 0 */
|
||||
@@ -34,7 +35,7 @@ struct esp_data
|
||||
void (*icv)(struct esp_data*,
|
||||
struct sk_buff *skb,
|
||||
int offset, int len, u8 *icv);
|
||||
struct crypto_tfm *tfm;
|
||||
struct crypto_hash *tfm;
|
||||
} auth;
|
||||
};
|
||||
|
||||
@@ -42,18 +43,22 @@ extern int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset,
|
||||
extern int skb_cow_data(struct sk_buff *skb, int tailbits, struct sk_buff **trailer);
|
||||
extern void *pskb_put(struct sk_buff *skb, struct sk_buff *tail, int len);
|
||||
|
||||
static inline void
|
||||
esp_hmac_digest(struct esp_data *esp, struct sk_buff *skb, int offset,
|
||||
int len, u8 *auth_data)
|
||||
static inline int esp_mac_digest(struct esp_data *esp, struct sk_buff *skb,
|
||||
int offset, int len)
|
||||
{
|
||||
struct crypto_tfm *tfm = esp->auth.tfm;
|
||||
char *icv = esp->auth.work_icv;
|
||||
struct hash_desc desc;
|
||||
int err;
|
||||
|
||||
memset(auth_data, 0, esp->auth.icv_trunc_len);
|
||||
crypto_hmac_init(tfm, esp->auth.key, &esp->auth.key_len);
|
||||
skb_icv_walk(skb, tfm, offset, len, crypto_hmac_update);
|
||||
crypto_hmac_final(tfm, esp->auth.key, &esp->auth.key_len, icv);
|
||||
memcpy(auth_data, icv, esp->auth.icv_trunc_len);
|
||||
desc.tfm = esp->auth.tfm;
|
||||
desc.flags = 0;
|
||||
|
||||
err = crypto_hash_init(&desc);
|
||||
if (unlikely(err))
|
||||
return err;
|
||||
err = skb_icv_walk(skb, &desc, offset, len, crypto_hash_update);
|
||||
if (unlikely(err))
|
||||
return err;
|
||||
return crypto_hash_final(&desc, esp->auth.work_icv);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -1,11 +1,14 @@
|
||||
#ifndef _NET_IPCOMP_H
|
||||
#define _NET_IPCOMP_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#define IPCOMP_SCRATCH_SIZE 65400
|
||||
|
||||
struct ipcomp_data {
|
||||
u16 threshold;
|
||||
struct crypto_tfm **tfms;
|
||||
struct crypto_comp **tfms;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -312,9 +312,9 @@ enum { SCTP_MAX_GABS = 16 };
|
||||
*/
|
||||
|
||||
#if defined (CONFIG_SCTP_HMAC_MD5)
|
||||
#define SCTP_COOKIE_HMAC_ALG "md5"
|
||||
#define SCTP_COOKIE_HMAC_ALG "hmac(md5)"
|
||||
#elif defined (CONFIG_SCTP_HMAC_SHA1)
|
||||
#define SCTP_COOKIE_HMAC_ALG "sha1"
|
||||
#define SCTP_COOKIE_HMAC_ALG "hmac(sha1)"
|
||||
#else
|
||||
#define SCTP_COOKIE_HMAC_ALG NULL
|
||||
#endif
|
||||
|
@@ -330,17 +330,6 @@ static inline void sctp_v6_exit(void) { return; }
|
||||
|
||||
#endif /* #if defined(CONFIG_IPV6) */
|
||||
|
||||
/* Some wrappers, in case crypto not available. */
|
||||
#if defined (CONFIG_CRYPTO_HMAC)
|
||||
#define sctp_crypto_alloc_tfm crypto_alloc_tfm
|
||||
#define sctp_crypto_free_tfm crypto_free_tfm
|
||||
#define sctp_crypto_hmac crypto_hmac
|
||||
#else
|
||||
#define sctp_crypto_alloc_tfm(x...) NULL
|
||||
#define sctp_crypto_free_tfm(x...)
|
||||
#define sctp_crypto_hmac(x...)
|
||||
#endif
|
||||
|
||||
|
||||
/* Map an association to an assoc_id. */
|
||||
static inline sctp_assoc_t sctp_assoc2id(const struct sctp_association *asoc)
|
||||
|
@@ -87,6 +87,7 @@ struct sctp_bind_addr;
|
||||
struct sctp_ulpq;
|
||||
struct sctp_ep_common;
|
||||
struct sctp_ssnmap;
|
||||
struct crypto_hash;
|
||||
|
||||
|
||||
#include <net/sctp/tsnmap.h>
|
||||
@@ -264,7 +265,7 @@ struct sctp_sock {
|
||||
struct sctp_pf *pf;
|
||||
|
||||
/* Access to HMAC transform. */
|
||||
struct crypto_tfm *hmac;
|
||||
struct crypto_hash *hmac;
|
||||
|
||||
/* What is our base endpointer? */
|
||||
struct sctp_endpoint *ep;
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/socket.h>
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/pfkeyv2.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/mutex.h>
|
||||
@@ -855,6 +854,7 @@ struct xfrm_algo_comp_info {
|
||||
|
||||
struct xfrm_algo_desc {
|
||||
char *name;
|
||||
char *compat;
|
||||
u8 available:1;
|
||||
union {
|
||||
struct xfrm_algo_auth_info auth;
|
||||
@@ -984,11 +984,13 @@ extern struct xfrm_algo_desc *xfrm_aalg_get_byname(char *name, int probe);
|
||||
extern struct xfrm_algo_desc *xfrm_ealg_get_byname(char *name, int probe);
|
||||
extern struct xfrm_algo_desc *xfrm_calg_get_byname(char *name, int probe);
|
||||
|
||||
struct crypto_tfm;
|
||||
typedef void (icv_update_fn_t)(struct crypto_tfm *, struct scatterlist *, unsigned int);
|
||||
struct hash_desc;
|
||||
struct scatterlist;
|
||||
typedef int (icv_update_fn_t)(struct hash_desc *, struct scatterlist *,
|
||||
unsigned int);
|
||||
|
||||
extern void skb_icv_walk(const struct sk_buff *skb, struct crypto_tfm *tfm,
|
||||
int offset, int len, icv_update_fn_t icv_update);
|
||||
extern int skb_icv_walk(const struct sk_buff *skb, struct hash_desc *tfm,
|
||||
int offset, int len, icv_update_fn_t icv_update);
|
||||
|
||||
static inline int xfrm_addr_cmp(xfrm_address_t *a, xfrm_address_t *b,
|
||||
int family)
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador