⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_ccmp.c

📁 madwifi driver, linux system
💻 C
📖 第 1 页 / 共 2 页
字号:
11  	ab 1d 98 c7 fe 73 50 71  3d 6a12  Muted 802.11 Header =  88 42 5a f2 84 30 fd ab bf f9 43 b9 f9 a613  	ab 1d 98 c7 fe 73 00 00 0d 0014  CCMP Header =  89 89 00 60 a4 ec 81 6b15  CCM Nonce = 0d bf f9 43 b9 f9 a6 6b  81 ec a4 89 8916  Plaintext Data = ab fd a2 2d 3a 0b fc 9c c1 fc 07 93 63 c2 fc a117  	43 e6 eb 1d18  CCM MIC =  30 9a 8d 5c 46 6b bb 7119  -- Encrypted MPDU with FCS20  88 52 e1 1f 5a f2 84 30 fd ab bf f9 43 b9 f9 a6 ab 1d 98 c7 fe 7321  50 71 3d 6a 89 89 00 60 a4 ec 81 6b 9a 70 9b 60 a3 9d 40 b1 df b622  12 e1 8b 5f 11 4b ad b6 cc 86 30 9a 8d 5c 46 6b bb 71 86 c0 4e 97*/static const u_int8_t test6_key[] = {		/* TK */	0xf7, 0x1e, 0xea, 0x4e, 0x1f, 0x58, 0x80, 0x4b,	0x97, 0x17, 0x23, 0x0a, 0xd0, 0x61, 0x46, 0x41,};static const u_int8_t test6_plaintext[] = {	/* Plaintext MPDU w/o MIC */	0x88, 0x52, 0xe1, 0x1f, 0x5a, 0xf2, 0x84, 0x30, 0xfd, 0xab,	0xbf, 0xf9, 0x43, 0xb9, 0xf9, 0xa6, 0xab, 0x1d, 0x98, 0xc7,	0xfe, 0x73, 0x50, 0x71, 0x3d, 0x6a,	0xab, 0xfd, 0xa2, 0x2d, 0x3a, 0x0b, 0xfc, 0x9c, 0xc1, 0xfc,	0x07, 0x93, 0x63, 0xc2, 0xfc, 0xa1, 0x43, 0xe6, 0xeb, 0x1d,};static const u_int8_t test6_encrypted[] = {	/* Encrypted MPDU with MIC */	0x88, 0x52, 0xe1, 0x1f, 0x5a, 0xf2, 0x84, 0x30, 0xfd, 0xab,	0xbf, 0xf9, 0x43, 0xb9, 0xf9, 0xa6, 0xab, 0x1d, 0x98, 0xc7,	0xfe, 0x73, 0x50, 0x71, 0x3d, 0x6a, 0x89, 0x89, 0x00, 0x60,	0xa4, 0xec, 0x81, 0x6b, 0x9a, 0x70, 0x9b, 0x60, 0xa3, 0x9d,	0x40, 0xb1, 0xdf, 0xb6, 0x12, 0xe1, 0x8b, 0x5f, 0x11, 0x4b,	0xad, 0xb6, 0xcc, 0x86, 0x30, 0x9a, 0x8d, 0x5c, 0x46, 0x6b,	0xbb, 0x71,};/*==== CCMP test mpdu   7 ====-- MPDU Fields25  Version  = 026  Type     = 2   SubType  = 1  Data+CF-Ack27  ToDS     = 1   FromDS   = 028  MoreFrag = 0   Retry    = 129  PwrMgt   = 1   moreData = 130  Encrypt  = 131  Order    = 032  Duration = 1804933  A1 = 9b-50-f4-fd-56-f6    BSSID34  A2 = ef-ec-95-20-16-91    SA35  A3 = 83-57-0c-4c-cd-ee    DA36  SC = 0xA02037  seqNum = 2562 (0x0A02)  fraqNum = 0 (0x00)38  Algorithm = AES_CCM39  Key ID = 340  TK = 1b db 34 98 0e 03 81 24 a1 db 1a 89 2b ec 36 6a41  PN = 104368786630435  (0x5EEC4073E723)42  Header =  18 79 81 46 9b 50 f4 fd 56 f6 ef ec 95 20 16 91 83 5743  	0c 4c cd ee 20 a044  Muted MAC Header =  08 41 9b 50 f4 fd 56 f6 ef ec 95 20 16 9145  	83 57 0c 4c cd ee 00 0046  CCMP Header =  23 e7 00 e0 73 40 ec 5e47  CCM Nonce = 00 ef ec 95 20 16 91 5e ec 40 73 e7 2348  Plaintext Data = 98 be ca 86 f4 b3 8d a2 0c fd f2 47 24 c5 8e b849  	35 66 53 3950  CCM MIC =  2d 09 57 ec fa be 95 b9-- Encrypted MPDU with FCS1  18 79 81 46 9b 50 f4 fd 56 f6 ef ec 95 20 16 91 83 57 0c 4c cd ee2  20 a0 23 e7 00 e0 73 40 ec 5e 12 c5 37 eb f3 ab 58 4e f1 fe f9 a13  f3 54 7a 8c 13 b3 22 5a 2d 09 57 ec fa be 95 b9 aa fa 0c c8*/static const u_int8_t test7_key[] = {		/* TK */	0x1b, 0xdb, 0x34, 0x98, 0x0e, 0x03, 0x81, 0x24,	0xa1, 0xdb, 0x1a, 0x89, 0x2b, 0xec, 0x36, 0x6a,};static const u_int8_t test7_plaintext[] = {	/* Plaintext MPDU w/o MIC */	0x18, 0x79, 0x81, 0x46, 0x9b, 0x50, 0xf4, 0xfd, 0x56, 0xf6,	0xef, 0xec, 0x95, 0x20, 0x16, 0x91, 0x83, 0x57, 0x0c, 0x4c,	0xcd, 0xee, 0x20, 0xa0,	0x98, 0xbe, 0xca, 0x86, 0xf4, 0xb3, 0x8d, 0xa2, 0x0c, 0xfd,	0xf2, 0x47, 0x24, 0xc5, 0x8e, 0xb8, 0x35, 0x66, 0x53, 0x39,};static const u_int8_t test7_encrypted[] = {	/* Encrypted MPDU with MIC */	0x18, 0x79, 0x81, 0x46, 0x9b, 0x50, 0xf4, 0xfd, 0x56, 0xf6,	0xef, 0xec, 0x95, 0x20, 0x16, 0x91, 0x83, 0x57, 0x0c, 0x4c,	0xcd, 0xee, 0x20, 0xa0, 0x23, 0xe7, 0x00, 0xe0, 0x73, 0x40,	0xec, 0x5e, 0x12, 0xc5, 0x37, 0xeb, 0xf3, 0xab, 0x58, 0x4e,	0xf1, 0xfe, 0xf9, 0xa1, 0xf3, 0x54, 0x7a, 0x8c, 0x13, 0xb3,	0x22, 0x5a, 0x2d, 0x09, 0x57, 0xec, 0xfa, 0xbe, 0x95, 0xb9,};/*==== CCMP test mpdu   8 ====-- MPDU Fields6  Version  = 07  Type     = 2   SubType  = 118  ToDS     = 1   FromDS   = 09  MoreFrag = 0   Retry    = 110  PwrMgt   = 1   moreData = 011  Encrypt  = 112  Order    = 113  Duration = 2926014  A1 = 55-2d-5f-72-bb-70    BSSID15  A2 = ca-3f-3a-ae-60-c4    SA16  A3 = 8b-a9-b5-f8-2c-2f    DA17  SC = 0xEB5018  seqNum = 3765 (0x0EB5)  fraqNum = 0 (0x00)19  QC = 0x000a20  MSDU Priority = 10 (0xa)21  Algorithm = AES_CCM22  Key ID = 223  TK = 6e ac 1b f5 4b d5 4e db 23 21 75 43 03 02 4c 7124  PN    = 227588596223197  (0xCEFD996ECCDD)25  802.11 Header =  b8 d9 4c 72 55 2d 5f 72 bb 70 ca 3f 3a ae 60 c426  	8b a9 b5 f8 2c 2f 50 eb 2a 5527  Muted 802.11 Header =  88 c1 55 2d 5f 72 bb 70 ca 3f 3a ae 60 c428  	8b a9 b5 f8 2c 2f 00 00 0a 0029  CCMP Header =  dd cc 00 a0 6e 99 fd ce30  CCM Nonce = 0a ca 3f 3a ae 60 c4 ce fd 99 6e cc dd31  Plaintext Data = 57 cb 5c 0e 5f cd 88 5e 9a 42 39 e9 b9 ca d6 0d32  	64 37 59 7933  CCM MIC =  6d ba 8e f7 f0 80 87 dd-- Encrypted MPDU with FCS35  b8 d9 4c 72 55 2d 5f 72 bb 70 ca 3f 3a ae 60 c4 8b a9 b5 f8 2c 2f36  50 eb 2a 55 dd cc 00 a0 6e 99 fd ce 4b f2 81 ef 8e c7 73 9f 91 5937  1b 97 a8 7d c1 4b 3f a1 74 62 6d ba 8e f7 f0 80 87 dd 0c 65 74 3f*/static const u_int8_t test8_key[] = {		/* TK */	0x6e, 0xac, 0x1b, 0xf5, 0x4b, 0xd5, 0x4e, 0xdb,	0x23, 0x21, 0x75, 0x43, 0x03, 0x02, 0x4c, 0x71,};static const u_int8_t test8_plaintext[] = {	/* Plaintext MPDU w/o MIC */	0xb8, 0xd9, 0x4c, 0x72, 0x55, 0x2d, 0x5f, 0x72, 0xbb, 0x70,	0xca, 0x3f, 0x3a, 0xae, 0x60, 0xc4, 0x8b, 0xa9, 0xb5, 0xf8,	0x2c, 0x2f, 0x50, 0xeb, 0x2a, 0x55,	0x57, 0xcb, 0x5c, 0x0e, 0x5f, 0xcd, 0x88, 0x5e, 0x9a, 0x42,	0x39, 0xe9, 0xb9, 0xca, 0xd6, 0x0d, 0x64, 0x37, 0x59, 0x79,};static const u_int8_t test8_encrypted[] = {	/* Encrypted MPDU with MIC */	0xb8, 0xd9, 0x4c, 0x72, 0x55, 0x2d, 0x5f, 0x72, 0xbb, 0x70,	0xca, 0x3f, 0x3a, 0xae, 0x60, 0xc4, 0x8b, 0xa9, 0xb5, 0xf8,	0x2c, 0x2f, 0x50, 0xeb, 0x2a, 0x55, 0xdd, 0xcc, 0x00, 0xa0,	0x6e, 0x99, 0xfd, 0xce, 0x4b, 0xf2, 0x81, 0xef, 0x8e, 0xc7,	0x73, 0x9f, 0x91, 0x59, 0x1b, 0x97, 0xa8, 0x7d, 0xc1, 0x4b,	0x3f, 0xa1, 0x74, 0x62, 0x6d, 0xba, 0x8e, 0xf7, 0xf0, 0x80,	0x87, 0xdd,};#define	TEST(n,name,cipher,keyix,pn) { \	name, IEEE80211_CIPHER_##cipher,keyix, pn##LL, \	test##n##_key,   sizeof(test##n##_key), \	test##n##_plaintext, sizeof(test##n##_plaintext), \	test##n##_encrypted, sizeof(test##n##_encrypted) \}static struct ciphertest {	const char	*name;	int		cipher;	int		keyix;	u_int64_t	pn;	const u_int8_t	*key;	size_t		key_len;	const u_int8_t	*plaintext;	size_t		plaintext_len;	const u_int8_t	*encrypted;	size_t		encrypted_len;} ccmptests[] = {	TEST(1, "CCMP test mpdu 1", AES_CCM, 0, 199027030681356),	TEST(2, "CCMP test mpdu 2", AES_CCM, 2, 54923164817386),	TEST(3, "CCMP test mpdu 3", AES_CCM, 2, 52624639632814),	TEST(4, "CCMP test mpdu 4", AES_CCM, 0, 270963670912995),	TEST(5, "CCMP test mpdu 5", AES_CCM, 2, 184717420531255),	TEST(6, "CCMP test mpdu 6", AES_CCM, 1, 118205765159305),	TEST(7, "CCMP test mpdu 7", AES_CCM, 3, 104368786630435),	TEST(8, "CCMP test mpdu 8", AES_CCM, 2, 227588596223197),};static voiddumpdata(const char *tag, const void *p, size_t len){	int i;	printk("%s: 0x%p len %zu", tag, p, len);	for (i = 0; i < len; i++) {		if ((i % 16) == 0)			printk("\n%03d:", i);		printk(" %02x", ((u_int8_t *)p)[i]);	}	printk("\n");}static voidcmpfail(const void *gen, size_t genlen, const void *ref, size_t reflen){	int i;	for (i = 0; i < genlen; i++)		if (((u_int8_t *)gen)[i] != ((u_int8_t *)ref)[i]) {			printk("first difference at byte %u\n", i);			break;		}	dumpdata("Generated", gen, genlen);	dumpdata("Reference", ref, reflen);}static intruntest(struct ieee80211vap *vap, struct ciphertest *t){	struct ieee80211_key *key;	struct sk_buff *skb = NULL;	const struct ieee80211_cipher *cip;	u_int8_t mac[IEEE80211_ADDR_LEN];	int hdrlen;	printk("%s: ", t->name);	if (!ieee80211_crypto_available(t->cipher)) {		printk("FAIL: ieee80211_crypto_available failed\n");		return 0;	}	/*	 * Setup key.	 */	key = &vap->iv_nw_keys[t->keyix];	key->wk_keyix = t->keyix;	if (!ieee80211_crypto_newkey(vap, t->cipher,				     IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV,				     key)) {		printk("FAIL: ieee80211_crypto_newkey failed\n");		goto bad;	}	memcpy(key->wk_key, t->key, t->key_len);	key->wk_keylen = t->key_len;	memset(key->wk_keyrsc, 0, sizeof(key->wk_keyrsc));	key->wk_keytsc = t->pn - 1;	/* PN-1 since we do encap */	if (!ieee80211_crypto_setkey(vap, key, mac, NULL)) {		printk("FAIL: ieee80211_crypto_setkey failed\n");		goto bad;	}	/*	 * Craft frame from plaintext data.	 */	cip = key->wk_cipher;	skb = dev_alloc_skb(t->plaintext_len +		cip->ic_header + cip->ic_trailer);	if (skb == NULL) {		printk("FAIL: unable to allocate skbuff\n");		goto bad;	}	skb_reserve(skb, cip->ic_header);	memcpy(skb_put(skb, t->plaintext_len), t->plaintext, t->plaintext_len);	/*	 * Encrypt frame w/ MIC.	 */	if (!(*cip->ic_encap)(key, skb, t->keyix << 6)) {		printk("FAIL: ccmp encap failed\n");		goto bad;	}	/*	 * Verify: frame length, frame contents.	 */	if (skb->len != t->encrypted_len) {		printk("FAIL: encap data length mismatch\n");		cmpfail(skb->data, skb->len,			t->encrypted, t->encrypted_len);		goto bad;	} else if (memcmp(skb->data, t->encrypted, skb->len)) {		printk("FAIL: encrypt data does not compare\n");		cmpfail(skb->data, skb->len,			t->encrypted, t->encrypted_len);		dumpdata("Plaintext", t->plaintext, t->plaintext_len);		goto bad;	}	/*	 * Decrypt frame; strip MIC.	 */	hdrlen = ieee80211_hdrspace(vap->iv_ic, skb->data);	if (!(*cip->ic_decap)(key, skb, hdrlen)) {		printk("FAIL: ccmp decap failed\n");		cmpfail(skb->data, skb->len,			t->plaintext, t->plaintext_len);		goto bad;	}	/*	 * Verify: frame length, frame contents.	 */	if (skb->len != t->plaintext_len) {		printk("FAIL: decap botch; length mismatch\n");		cmpfail(skb->data, skb->len,			t->plaintext, t->plaintext_len);		goto bad;	} else if (memcmp(skb->data, t->plaintext, t->plaintext_len)) {		printk("FAIL: decap botch; data does not compare\n");		cmpfail(skb->data, skb->len,			t->plaintext, sizeof(t->plaintext));		goto bad;	}	dev_kfree_skb(skb);	ieee80211_crypto_delkey(vap, key, NULL);	printk("PASS\n");	return 1;bad:	if (skb != NULL)		dev_kfree_skb(skb);	ieee80211_crypto_delkey(vap, key, NULL);	return 0;}/* * Module glue. */MODULE_AUTHOR("Errno Consulting, Sam Leffler");MODULE_DESCRIPTION("802.11 wireless support: AES-CCMP cipher tester");#ifdef MODULE_LICENSEMODULE_LICENSE("Dual BSD/GPL");#endifstatic int tests = -1;static int debug = 0;#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))MODULE_PARM(tests, "i");MODULE_PARM(debug, "i");#else#include <linux/moduleparam.h>module_param(tests, int, 0600);module_param(debug, int, 0600);#endifMODULE_PARM_DESC(tests, "Specify which tests to run");MODULE_PARM_DESC(debug, "Enable IEEE80211_MSG_CRYPTO");static int __initinit_crypto_ccmp_test(void){	struct ieee80211com ic;	struct ieee80211vap vap;	int i, pass, total;	memset(&ic, 0, sizeof(ic));	memset(&vap, 0, sizeof(vap));	vap.iv_ic = &ic;	if (debug)		vap.iv_debug = IEEE80211_MSG_CRYPTO;	ieee80211_crypto_attach(&ic);	ieee80211_crypto_vattach(&vap);	pass = 0;	total = 0;	for (i = 0; i < ARRAY_SIZE(ccmptests); i++)		if (tests & (1 << i)) {			total++;			pass += runtest(&vap, &ccmptests[i]);		}	printk("%u of %u 802.11i AES-CCMP test vectors passed\n", pass, total);	ieee80211_crypto_vdetach(&vap);	ieee80211_crypto_detach(&ic);	return (pass == total ? 0 : -ENXIO);}module_init(init_crypto_ccmp_test);static void __exitexit_crypto_ccmp_test(void){}module_exit(exit_crypto_ccmp_test);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -