I'm not too familiar with the aead API, so here's another question: > + sg_init_one(&pt, data, data_len); > + sg_init_one(&assoc, &aad[2], be16_to_cpup((__be16 *)aad)); > + sg_init_table(ct, 2); > + sg_set_buf(&ct[0], cdata, data_len); > + sg_set_buf(&ct[1], mic, IEEE80211_CCMP_MIC_LEN); Is it guaranteed to be allowed that the input and output are the same buffer? It seems we rely on that for encrypt_one(), but is it true here as well? (Btw - why pass in data/cdata as separate pointers into the function?) > @@ -343,7 +337,7 @@ static void ccmp_special_blocks(struct sk_buff *skb, u8 *pn, u8 *scratch, > data_len -= IEEE80211_CCMP_MIC_LEN; > > /* First block, b_0 */ > - b_0[0] = 0x59; /* flags: Adata: 1, M: 011, L: 001 */ > + b_0[0] = 0x1; /* set L := 1, M and Adata flags are implied */ Hmm. I don't think I understand, can you explain this to me? johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html