1ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt/* 2ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * crypto module tests 3ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * Copyright (c) 2014-2015, Jouni Malinen <j@w1.fi> 4ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * 5ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * This software may be distributed under the terms of the BSD license. 6ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * See README for more details. 7ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt */ 8ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 9ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "utils/includes.h" 10ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 11ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "utils/common.h" 12ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/aes_siv.h" 13ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/aes_wrap.h" 14ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/aes.h" 15ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/ms_funcs.h" 16ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/crypto.h" 17ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/sha1.h" 18ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#include "crypto/sha256.h" 19ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 20ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 21ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_siv(void) 22ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 23ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#ifdef CONFIG_MESH 24ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 5297, A.1. Deterministic Authenticated Encryption Example */ 25ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key[] = { 26ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 27ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, 28ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 29ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 30ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 31ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 ad[] = { 32ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 33ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 34ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27 35ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 36ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plaintext[] = { 37ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 38ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee 39ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 40ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 iv_c[] = { 41ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x85, 0x63, 0x2d, 0x07, 0xc6, 0xe8, 0xf3, 0x7f, 42ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x95, 0x0a, 0xcd, 0x32, 0x0a, 0x2e, 0xcc, 0x93, 43ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x40, 0xc0, 0x2b, 0x96, 0x90, 0xc4, 0xdc, 0x04, 44ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xda, 0xef, 0x7f, 0x6a, 0xfe, 0x5c 45ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 46ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 5297, A.2. Nonce-Based Authenticated Encryption Example */ 47ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key_2[] = { 48ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 49ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, 50ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 51ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f 52ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 53ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 ad1_2[] = { 54ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 55ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 56ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xde, 0xad, 0xda, 0xda, 0xde, 0xad, 0xda, 0xda, 57ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 58ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00 59ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 60ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 ad2_2[] = { 61ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 62ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x90, 0xa0 63ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 64ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 nonce_2[] = { 65ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x09, 0xf9, 0x11, 0x02, 0x9d, 0x74, 0xe3, 0x5b, 66ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xd8, 0x41, 0x56, 0xc5, 0x63, 0x56, 0x88, 0xc0 67ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 68ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plaintext_2[] = { 69ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 70ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x6c, 0x61, 71ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 72ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x6f, 0x20, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 73ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x74, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 74ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x53, 0x49, 0x56, 0x2d, 0x41, 0x45, 0x53 75ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 76ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 iv_c_2[] = { 77ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7b, 0xdb, 0x6e, 0x3b, 0x43, 0x26, 0x67, 0xeb, 78ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x06, 0xf4, 0xd1, 0x4b, 0xff, 0x2f, 0xbd, 0x0f, 79ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcb, 0x90, 0x0f, 0x2f, 0xdd, 0xbe, 0x40, 0x43, 80ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x26, 0x60, 0x19, 0x65, 0xc8, 0x89, 0xbf, 0x17, 81ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdb, 0xa7, 0x7c, 0xeb, 0x09, 0x4f, 0xa6, 0x63, 82ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xb7, 0xa3, 0xf7, 0x48, 0xba, 0x8a, 0xf8, 0x29, 83ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xea, 0x64, 0xad, 0x54, 0x4a, 0x27, 0x2e, 0x9c, 84ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x48, 0x5b, 0x62, 0xa3, 0xfd, 0x5c, 0x0d 85ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 86ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 out[2 * AES_BLOCK_SIZE + sizeof(plaintext_2)]; 87ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 *addr[3]; 88ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t len[3]; 89ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 90ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 5297, A.1. Deterministic Authenticated Encryption Example */ 91ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = ad; 92ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = sizeof(ad); 93ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 94ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_siv_encrypt(key, plaintext, sizeof(plaintext), 95ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1, addr, len, out)) { 96ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-SIV mode encryption failed"); 97ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 98ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 99ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(out, iv_c, sizeof(iv_c)) != 0) { 100ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 101ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-SIV mode encryption returned invalid cipher text"); 102ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 103ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 104ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 105ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_siv_decrypt(key, iv_c, sizeof(iv_c), 1, addr, len, out)) { 106ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-SIV mode decryption failed"); 107ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 108ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 109ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(out, plaintext, sizeof(plaintext)) != 0) { 110ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 111ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-SIV mode decryption returned invalid plain text"); 112ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 113ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 114ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 115ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 5297, A.2. Nonce-Based Authenticated Encryption Example */ 116ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = ad1_2; 117ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = sizeof(ad1_2); 118ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = ad2_2; 119ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = sizeof(ad2_2); 120ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[2] = nonce_2; 121ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[2] = sizeof(nonce_2); 122ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 123ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_siv_encrypt(key_2, plaintext_2, sizeof(plaintext_2), 124ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 3, addr, len, out)) { 125ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-SIV mode encryption failed"); 126ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 127ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 128ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(out, iv_c_2, sizeof(iv_c_2)) != 0) { 129ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 130ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-SIV mode encryption returned invalid cipher text"); 131ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 132ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 133ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 134ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_siv_decrypt(key_2, iv_c_2, sizeof(iv_c_2), 3, addr, len, out)) { 135ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-SIV mode decryption failed"); 136ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 137ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 138ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(out, plaintext_2, sizeof(plaintext_2)) != 0) { 139ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 140ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-SIV mode decryption returned invalid plain text"); 141ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 142ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 143ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 144ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "AES-SIV test cases passed"); 145ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#endif /* CONFIG_MESH */ 146ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 147ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 0; 148ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 149ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 150ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 151ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt/* OMAC1 AES-128 test vectors from 152ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * http://csrc.nist.gov/CryptoToolkit/modes/proposedmodes/omac/omac-ad.pdf 153ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * which are same as the examples from NIST SP800-38B 154ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt * http://csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf 155ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt */ 156ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 157ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstruct omac1_test_vector { 158ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 k[16]; 159ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 msg[64]; 160ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int msg_len; 161ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 tag[16]; 162ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 163ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1641d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const struct omac1_test_vector omac1_test_vectors[] = 165ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 166ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 167ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 168ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, 169ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { }, 170ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0, 171ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28, 172ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46 } 173ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 174ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 175ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 176ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, 177ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 178ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a}, 179ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 16, 180ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44, 181ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c } 182ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 183ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 184ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 185ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, 186ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 187ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 188ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 189ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 190ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11 }, 191ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 40, 192ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30, 193ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27 } 194ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 195ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 196ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 197ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, 198ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 199ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 200ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 201ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 202ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 203ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 204ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 205ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }, 206ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 64, 207ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92, 208ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe } 209ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 210ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 211ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 212ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 2131d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic int test_omac1_vector(const struct omac1_test_vector *tv, 2141d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt unsigned int i) 215ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 216ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key[] = { 217ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 218ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 219ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 220ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 msg[] = { 0x12, 0x34, 0x56 }; 221ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 result[24], result2[24]; 222ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 *addr[3]; 223ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t len[3]; 224ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 225ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (omac1_aes_128(tv->k, tv->msg, tv->msg_len, result) || 226ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(result, tv->tag, 16) != 0) { 227ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "OMAC1-AES-128 test vector %u failed", i); 228ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 229ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 230ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 231ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (tv->msg_len > 1) { 232ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 233ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = tv->msg; 234ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = 1; 235ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = tv->msg + 1; 236ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = tv->msg_len - 1; 237ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 238ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (omac1_aes_128_vector(tv->k, 2, addr, len, result) || 239ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(result, tv->tag, 16) != 0) { 240ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 241ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "OMAC1-AES-128(vector) test vector %u failed", 242ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt i); 243ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 244ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 245ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 246ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = tv->msg; 247ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = tv->msg_len - 2; 248ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = tv->msg + tv->msg_len - 2; 249ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = 1; 250ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[2] = tv->msg + tv->msg_len - 1; 251ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[2] = 1; 252ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 253ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (omac1_aes_128_vector(tv->k, 3, addr, len, result) || 254ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(result, tv->tag, 16) != 0) { 255ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 256ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "OMAC1-AES-128(vector2) test vector %u failed", 257ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt i); 258ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 259ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 260ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 261ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 262ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = &msg[0]; 263ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = 1; 264ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = &msg[1]; 265ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = 1; 266ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[2] = &msg[2]; 267ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[2] = 1; 268ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (omac1_aes_128(key, msg, sizeof(msg), result) || 269ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt omac1_aes_128_vector(key, 3, addr, len, result2) || 270ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(result, result2, 16) != 0) { 271ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "OMAC1-AES-128 short test mismatch"); 272ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 273ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 274ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 275ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 0; 276ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 277ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 278ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 279ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_omac1(void) 280ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 281ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt unsigned int i; 282ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 283ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < ARRAY_SIZE(omac1_test_vectors); i++) { 284ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (test_omac1_vector(&omac1_test_vectors[i], i)) 285ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 286ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 287ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 288ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "OMAC1-AES-128 test cases passed"); 289ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 290ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 0; 291ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 292ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 293ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 294ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_eax(void) 295ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 296ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#ifdef EAP_PSK 297ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 msg[] = { 0xF7, 0xFB }; 298ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key[] = { 0x91, 0x94, 0x5D, 0x3F, 0x4D, 0xCB, 0xEE, 0x0B, 299ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xF4, 0x5E, 0xF5, 0x22, 0x55, 0xF0, 0x95, 0xA4 }; 300ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 nonce[] = { 0xBE, 0xCA, 0xF0, 0x43, 0xB0, 0xA2, 0x3D, 0x84, 301ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x31, 0x94, 0xBA, 0x97, 0x2C, 0x66, 0xDE, 0xBD }; 302ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 hdr[] = { 0xFA, 0x3B, 0xFD, 0x48, 0x06, 0xEB, 0x53, 0xFA }; 303ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 cipher[] = { 0x19, 0xDD, 0x5C, 0x4C, 0x93, 0x31, 0x04, 0x9D, 304ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0B, 0xDA, 0xB0, 0x27, 0x74, 0x08, 0xF6, 0x79, 305ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x67, 0xE5 }; 306ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 data[sizeof(msg)], tag[AES_BLOCK_SIZE]; 307ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 308ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcpy(data, msg, sizeof(msg)); 309ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_128_eax_encrypt(key, nonce, sizeof(nonce), hdr, sizeof(hdr), 310ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt data, sizeof(data), tag)) { 311ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-128 EAX mode encryption failed"); 312ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 313ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 314ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(data, cipher, sizeof(data)) != 0) { 315ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 316ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-128 EAX mode encryption returned invalid cipher text"); 317ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 318ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 319ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(tag, cipher + sizeof(data), AES_BLOCK_SIZE) != 0) { 320ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 321ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-128 EAX mode encryption returned invalid tag"); 322ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 323ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 324ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 325ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_128_eax_decrypt(key, nonce, sizeof(nonce), hdr, sizeof(hdr), 326ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt data, sizeof(data), tag)) { 327ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-128 EAX mode decryption failed"); 328ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 329ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 330ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(data, msg, sizeof(data)) != 0) { 331ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, 332ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "AES-128 EAX mode decryption returned invalid plain text"); 333ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 1; 334ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 335ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 336ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "AES-128 EAX mode test cases passed"); 337ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#endif /* EAP_PSK */ 338ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 339ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 0; 340ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 341ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 342ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 343ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_cbc(void) 344ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 345ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt struct cbc_test_vector { 346ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key[16]; 347ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 iv[16]; 348ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain[32]; 349ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 cipher[32]; 350ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t len; 351ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } vectors[] = { 352ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 353ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b, 354ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 }, 355ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30, 356ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 }, 357ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Single block msg", 358ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8, 359ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a }, 360ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 16 361ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 362ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 363ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 364ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a }, 365ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 366ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 }, 367ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 368ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 369ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 370ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, 371ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 372ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 373ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 374ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 }, 375ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32 376ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 377ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 378ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int ret = 0; 379ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 *buf; 380ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt unsigned int i; 381ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 382ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < ARRAY_SIZE(vectors); i++) { 383ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt struct cbc_test_vector *tv = &vectors[i]; 384ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 385ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt buf = os_malloc(tv->len); 386ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (buf == NULL) { 387ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 388ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt break; 389ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 390ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 391ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcpy(buf, tv->plain, tv->len); 392ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_128_cbc_encrypt(tv->key, tv->iv, buf, tv->len) || 393ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(buf, tv->cipher, tv->len) != 0) { 394ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-CBC encrypt %d failed", i); 395ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 396ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 397ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 398ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcpy(buf, tv->cipher, tv->len); 399ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_128_cbc_decrypt(tv->key, tv->iv, buf, tv->len) || 400ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(buf, tv->plain, tv->len) != 0) { 401ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-CBC decrypt %d failed", i); 402ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 403ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 404ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 405ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_free(buf); 406ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 407ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 408ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return ret; 409ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 410ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 411ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 412ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_ecb(void) 413ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 414ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#ifdef EAP_PSK 415ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt struct ecb_test_vector { 416ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *key; 417ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *plaintext; 418ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *ciphertext; 419ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } vectors[] = { 420ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* CAVS 11.1 - ECBGFSbox128.rsp */ 421ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 422ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 423ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "f34481ec3cc627bacd5dc3fb08f273e6", 424ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "0336763e966d92595a567cc9ce537f5e" 425ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 426ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 427ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 428ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "9798c4640bad75c7c3227db910174e72", 429ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "a9a1631bf4996954ebc093957b234589" 430ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 431ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 432ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 433ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "96ab5c2ff612d9dfaae8c31f30c42168", 434ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "ff4f8391a6a40ca5b25d23bedd44a597" 435ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 436ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 437ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 438ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "6a118a874519e64e9963798a503f1d35", 439ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "dc43be40be0e53712f7e2bf5ca707209" 440ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 441ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 442ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 443ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "cb9fceec81286ca3e989bd979b0cb284", 444ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "92beedab1895a94faa69b632e5cc47ce" 445ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 446ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 447ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 448ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "b26aeb1874e47ca8358ff22378f09144", 449ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "459264f4798f6a78bacb89c15ed3d601" 450ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 451ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 452ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 453ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "58c8e00b2631686d54eab84b91f0aca1", 454ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "08a4e2efec8a8e3312ca7460b9040bbf" 455ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 456ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* CAVS 11.1 - ECBKeySbox128.rsp */ 457ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 458ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "10a58869d74be5a374cf867cfb473859", 459ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 460ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "6d251e6944b051e04eaa6fb4dbf78465" 461ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 462ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 463ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "caea65cdbb75e9169ecd22ebe6e54675", 464ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "00000000000000000000000000000000", 465ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "6e29201190152df4ee058139def610bb", 466ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 467ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 468ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int ret = 0; 469ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt unsigned int i; 470ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key[16], plain[16], cipher[16], out[16]; 471ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 472ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < ARRAY_SIZE(vectors); i++) { 473ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt struct ecb_test_vector *tv = &vectors[i]; 474ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 475ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (hexstr2bin(tv->key, key, sizeof(key)) || 476ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt hexstr2bin(tv->plaintext, plain, sizeof(plain)) || 477ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt hexstr2bin(tv->ciphertext, cipher, sizeof(cipher))) { 478ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "Invalid AES-ECB test vector %u", 479ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt i); 480ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 481ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt continue; 482ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 483ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 484ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_128_encrypt_block(key, plain, out) < 0 || 485ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(out, cipher, 16) != 0) { 486ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-ECB encrypt %u failed", i); 487ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 488ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 489ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 490ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 491ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (!ret) 492ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "AES ECB mode test cases passed"); 493ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 494ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return ret; 495ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#endif /* EAP_PSK */ 496ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 497ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 0; 498ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 499ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 500ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 501ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_key_wrap(void) 502ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 503ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int ret = 0; 504ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 505ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 3394 - Test vector 4.1 */ 506ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 kek41[] = { 507ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 508ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f 509ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 510ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain41[] = { 511ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 512ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff 513ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 514ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 crypt41[] = { 515ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x1F, 0xA6, 0x8B, 0x0A, 0x81, 0x12, 0xB4, 0x47, 516ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xAE, 0xF3, 0x4B, 0xD8, 0xFB, 0x5A, 0x7B, 0x82, 517ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9D, 0x3E, 0x86, 0x23, 0x71, 0xD2, 0xCF, 0xE5 518ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 519ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 3394 - Test vector 4.2 */ 520ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 kek42[] = { 521ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 522ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 523ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 524ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 525ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain42[] = { 526ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 527ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff 528ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 529ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 crypt42[] = { 530ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x96, 0x77, 0x8B, 0x25, 0xAE, 0x6C, 0xA4, 0x35, 531ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xF9, 0x2B, 0x5B, 0x97, 0xC0, 0x50, 0xAE, 0xD2, 532ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x46, 0x8A, 0xB8, 0xA1, 0x7A, 0xD8, 0x4E, 0x5D 533ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 534ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 3394 - Test vector 4.3 */ 535ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 kek43[] = { 536ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 537ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 538ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 539ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 540ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 541ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain43[] = { 542ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 543ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff 544ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 545ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 crypt43[] = { 546ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x64, 0xE8, 0xC3, 0xF9, 0xCE, 0x0F, 0x5B, 0xA2, 547ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x63, 0xE9, 0x77, 0x79, 0x05, 0x81, 0x8A, 0x2A, 548ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x93, 0xC8, 0x19, 0x1E, 0x7D, 0x6E, 0x8A, 0xE7, 549ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 550ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 3394 - Test vector 4.4 */ 551ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 kek44[] = { 552ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 553ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 554ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 555ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 556ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain44[] = { 557ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 558ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 559ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 560ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 561ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 crypt44[] = { 562ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x03, 0x1D, 0x33, 0x26, 0x4E, 0x15, 0xD3, 0x32, 563ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x68, 0xF2, 0x4E, 0xC2, 0x60, 0x74, 0x3E, 0xDC, 564ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xE1, 0xC6, 0xC7, 0xDD, 0xEE, 0x72, 0x5A, 0x93, 565ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x6B, 0xA8, 0x14, 0x91, 0x5C, 0x67, 0x62, 0xD2 566ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 567ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 3394 - Test vector 4.5 */ 568ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 kek45[] = { 569ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 570ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 571ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 572ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 573ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 574ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain45[] = { 575ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 576ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 577ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 578ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 579ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 crypt45[] = { 580ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xA8, 0xF9, 0xBC, 0x16, 0x12, 0xC6, 0x8B, 0x3F, 581ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xF6, 0xE6, 0xF4, 0xFB, 0xE3, 0x0E, 0x71, 0xE4, 582ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x76, 0x9C, 0x8B, 0x80, 0xA3, 0x2C, 0xB8, 0x95, 583ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8C, 0xD5, 0xD1, 0x7D, 0x6B, 0x25, 0x4D, 0xA1, 584ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 585ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 3394 - Test vector 4.6 */ 586ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 kek46[] = { 587ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 588ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 589ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 590ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 591ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 592ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 plain46[] = { 593ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 594ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 595ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 596ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 597ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 598ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 crypt46[] = { 599ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x28, 0xC9, 0xF4, 0x04, 0xC4, 0xB8, 0x10, 0xF4, 600ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xCB, 0xCC, 0xB3, 0x5C, 0xFB, 0x87, 0xF8, 0x26, 601ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3F, 0x57, 0x86, 0xE2, 0xD8, 0x0E, 0xD3, 0x26, 602ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xCB, 0xC7, 0xF0, 0xE7, 0x1A, 0x99, 0xF4, 0x3B, 603ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xFB, 0x98, 0x8B, 0x9B, 0x7A, 0x02, 0xDD, 0x21 604ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 605ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 result[40]; 606ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 607ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "RFC 3394 - Test vector 4.1"); 608ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_wrap(kek41, sizeof(kek41), sizeof(plain41) / 8, plain41, 609ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 610ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-128 reported failure"); 611ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 612ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 613ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, crypt41, sizeof(crypt41)) != 0) { 614ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-128 failed"); 615ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 616ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 617ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_unwrap(kek41, sizeof(kek41), sizeof(plain41) / 8, crypt41, 618ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 619ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-128 reported failure"); 620ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 621ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 622ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, plain41, sizeof(plain41)) != 0) { 623ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-128 failed"); 624ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 625ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 626ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 627ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "RFC 3394 - Test vector 4.2"); 628ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_wrap(kek42, sizeof(kek42), sizeof(plain42) / 8, plain42, 629ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 630ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-192 reported failure"); 631ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 632ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 633ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, crypt42, sizeof(crypt42)) != 0) { 634ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-192 failed"); 635ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 636ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 637ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_unwrap(kek42, sizeof(kek42), sizeof(plain42) / 8, crypt42, 638ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 639ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-192 reported failure"); 640ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 641ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 642ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, plain42, sizeof(plain42)) != 0) { 643ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-192 failed"); 644ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 645ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 646ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 647ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "RFC 3394 - Test vector 4.3"); 648ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_wrap(kek43, sizeof(kek43), sizeof(plain43) / 8, plain43, 649ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 650ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-256 reported failure"); 651ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 652ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 653ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, crypt43, sizeof(crypt43)) != 0) { 654ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-256 failed"); 655ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 656ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 657ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_unwrap(kek43, sizeof(kek43), sizeof(plain43) / 8, crypt43, 658ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 659ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-256 reported failure"); 660ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 661ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 662ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, plain43, sizeof(plain43)) != 0) { 663ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-256 failed"); 664ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 665ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 666ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 667ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "RFC 3394 - Test vector 4.4"); 668ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_wrap(kek44, sizeof(kek44), sizeof(plain44) / 8, plain44, 669ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 670ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-192 reported failure"); 671ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 672ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 673ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, crypt44, sizeof(crypt44)) != 0) { 674ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-192 failed"); 675ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 676ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 677ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_unwrap(kek44, sizeof(kek44), sizeof(plain44) / 8, crypt44, 678ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 679ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-192 reported failure"); 680ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 681ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 682ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, plain44, sizeof(plain44)) != 0) { 683ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-192 failed"); 684ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 685ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 686ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 687ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "RFC 3394 - Test vector 4.5"); 688ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_wrap(kek45, sizeof(kek45), sizeof(plain45) / 8, plain45, 689ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 690ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-256 reported failure"); 691ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 692ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 693ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, crypt45, sizeof(crypt45)) != 0) { 694ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-256 failed"); 695ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 696ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 697ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_unwrap(kek45, sizeof(kek45), sizeof(plain45) / 8, crypt45, 698ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 699ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-256 reported failure"); 700ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 701ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 702ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, plain45, sizeof(plain45)) != 0) { 703ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-256 failed"); 704ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 705ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 706ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 707ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "RFC 3394 - Test vector 4.6"); 708ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_wrap(kek46, sizeof(kek46), sizeof(plain46) / 8, plain46, 709ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 710ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-256 reported failure"); 711ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 712ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 713ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, crypt46, sizeof(crypt46)) != 0) { 714ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-WRAP-256 failed"); 715ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 716ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 717ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (aes_unwrap(kek46, sizeof(kek46), sizeof(plain46) / 8, crypt46, 718ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt result)) { 719ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-256 reported failure"); 720ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 721ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 722ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (os_memcmp(result, plain46, sizeof(plain46)) != 0) { 723ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "AES-UNWRAP-256 failed"); 724ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 725ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 726ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 727ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (!ret) 728ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "AES key wrap/unwrap test cases passed"); 729ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 730ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return ret; 731ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 732ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 733ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 734ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_md5(void) 735ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 736ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt struct { 737ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *data; 738ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *hash; 739ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } tests[] = { 740ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 741ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "", 742ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04" 743ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xe9\x80\x09\x98\xec\xf8\x42\x7e" 744ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 745ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 746ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "a", 747ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8" 748ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\x31\xc3\x99\xe2\x69\x77\x26\x61" 749ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 750ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 751ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abc", 752ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\x90\x01\x50\x98\x3c\xd2\x4f\xb0" 753ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xd6\x96\x3f\x7d\x28\xe1\x7f\x72" 754ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 755ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 756ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "message digest", 757ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d" 758ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\x52\x5a\x2f\x31\xaa\xf1\x61\xd0" 759ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 760ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 761ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abcdefghijklmnopqrstuvwxyz", 762ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00" 763ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\x7d\xfb\x49\x6c\xca\x67\xe1\x3b" 764ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 765ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 766ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 767ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "0123456789", 768ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xd1\x74\xab\x98\xd2\x77\xd9\xf5" 769ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xa5\x61\x1c\x2c\x9f\x41\x9d\x9f" 770ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 771ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 772ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "12345678901234567890123456789012345678901234567890" 773ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "123456789012345678901234567890", 774ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\x57\xed\xf4\xa2\x2b\xe3\xc9\x55" 775ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "\xac\x49\xda\x2e\x21\x07\xb6\x7a" 776ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 777ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 778ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt unsigned int i; 779ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 hash[16]; 780ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 *addr[2]; 781ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t len[2]; 782ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int errors = 0; 783ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 784ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < ARRAY_SIZE(tests); i++) { 785ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "MD5 test case %d", i); 786ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 787ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = (u8 *) tests[i].data; 788ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = strlen(tests[i].data); 789ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (md5_vector(1, addr, len, hash) < 0 || 790ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(hash, tests[i].hash, 16) != 0) { 791ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 792ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 793ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 794ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 795ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 796ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (len[0]) { 797ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = (u8 *) tests[i].data; 798ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = strlen(tests[i].data); 799ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = (u8 *) tests[i].data + 1; 800ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = strlen(tests[i].data) - 1; 801ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (md5_vector(1, addr, len, hash) < 0 || 802ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(hash, tests[i].hash, 16) != 0) { 803ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 804ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 805ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 806ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 807ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 808ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 809ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 810ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (!errors) 811ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "MD5 test cases passed"); 812ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 813ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return errors; 814ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 815ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 816ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 817ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_eap_fast(void) 818ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 819ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#ifdef EAP_FAST 820ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 4851, Appendix B.1 */ 821ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 pac_key[] = { 822ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0B, 0x97, 0x39, 0x0F, 0x37, 0x51, 0x78, 0x09, 823ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x81, 0x1E, 0xFD, 0x9C, 0x6E, 0x65, 0x94, 0x2B, 824ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x63, 0x2C, 0xE9, 0x53, 0x89, 0x38, 0x08, 0xBA, 825ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x36, 0x0B, 0x03, 0x7C, 0xD1, 0x85, 0xE4, 0x14 826ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 827ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 seed[] = { 828ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3F, 0xFB, 0x11, 0xC4, 0x6C, 0xBF, 0xA5, 0x7A, 829ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x54, 0x40, 0xDA, 0xE8, 0x22, 0xD3, 0x11, 0xD3, 830ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xF7, 0x6D, 0xE4, 0x1D, 0xD9, 0x33, 0xE5, 0x93, 831ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x70, 0x97, 0xEB, 0xA9, 0xB3, 0x66, 0xF4, 0x2A, 832ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x00, 0x00, 0x02, 0x6A, 0x66, 0x43, 0x2A, 833ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8D, 0x14, 0x43, 0x2C, 0xEC, 0x58, 0x2D, 0x2F, 834ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xC7, 0x9C, 0x33, 0x64, 0xBA, 0x04, 0xAD, 0x3A, 835ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x52, 0x54, 0xD6, 0xA5, 0x79, 0xAD, 0x1E, 0x00 836ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 837ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 master_secret[] = { 838ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4A, 0x1A, 0x51, 0x2C, 0x01, 0x60, 0xBC, 0x02, 839ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3C, 0xCF, 0xBC, 0x83, 0x3F, 0x03, 0xBC, 0x64, 840ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x88, 0xC1, 0x31, 0x2F, 0x0B, 0xA9, 0xA2, 0x77, 841ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x16, 0xA8, 0xD8, 0xE8, 0xBD, 0xC9, 0xD2, 0x29, 842ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x38, 0x4B, 0x7A, 0x85, 0xBE, 0x16, 0x4D, 0x27, 843ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x33, 0xD5, 0x24, 0x79, 0x87, 0xB1, 0xC5, 0xA2 844ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 845ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 key_block[] = { 846ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x59, 0x59, 0xBE, 0x8E, 0x41, 0x3A, 0x77, 0x74, 847ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8B, 0xB2, 0xE5, 0xD3, 0x60, 0xAC, 0x4D, 0x35, 848ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xDF, 0xFB, 0xC8, 0x1E, 0x9C, 0x24, 0x9C, 0x8B, 849ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0E, 0xC3, 0x1D, 0x72, 0xC8, 0x84, 0x9D, 0x57, 850ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x48, 0x51, 0x2E, 0x45, 0x97, 0x6C, 0x88, 0x70, 851ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xBE, 0x5F, 0x01, 0xD3, 0x64, 0xE7, 0x4C, 0xBB, 852ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x24, 0xE3, 0x49, 0xE2, 0x3B, 0xCD, 0xEF, 853ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7A, 0xB3, 0x05, 0x39, 0x5D, 0x64, 0x8A, 0x44, 854ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0xB6, 0x69, 0x88, 0x34, 0x2E, 0x8E, 0x29, 855ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xD6, 0x4B, 0x7D, 0x72, 0x17, 0x59, 0x28, 0x05, 856ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xAF, 0xF9, 0xB7, 0xFF, 0x66, 0x6D, 0xA1, 0x96, 857ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8F, 0x0B, 0x5E, 0x06, 0x46, 0x7A, 0x44, 0x84, 858ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x64, 0xC1, 0xC8, 0x0C, 0x96, 0x44, 0x09, 0x98, 859ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xFF, 0x92, 0xA8, 0xB4, 0xC6, 0x42, 0x28, 0x71 860ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 861ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 sks[] = { 862ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xD6, 0x4B, 0x7D, 0x72, 0x17, 0x59, 0x28, 0x05, 863ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xAF, 0xF9, 0xB7, 0xFF, 0x66, 0x6D, 0xA1, 0x96, 864ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8F, 0x0B, 0x5E, 0x06, 0x46, 0x7A, 0x44, 0x84, 865ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x64, 0xC1, 0xC8, 0x0C, 0x96, 0x44, 0x09, 0x98, 866ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xFF, 0x92, 0xA8, 0xB4, 0xC6, 0x42, 0x28, 0x71 867ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 868ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 isk[] = { 869ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 870ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 871ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 872ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 873ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 874ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 imck[] = { 875ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x16, 0x15, 0x3C, 0x3F, 0x21, 0x55, 0xEF, 0xD9, 876ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7F, 0x34, 0xAE, 0xC8, 0x1A, 0x4E, 0x66, 0x80, 877ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4C, 0xC3, 0x76, 0xF2, 0x8A, 0xA9, 0x6F, 0x96, 878ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xC2, 0x54, 0x5F, 0x8C, 0xAB, 0x65, 0x02, 0xE1, 879ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x40, 0x7B, 0x56, 0xBE, 0xEA, 0xA7, 0xC5, 880ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x76, 0x5D, 0x8F, 0x0B, 0xC5, 0x07, 0xC6, 0xB9, 881ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x04, 0xD0, 0x69, 0x56, 0x72, 0x8B, 0x6B, 0xB8, 882ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x15, 0xEC, 0x57, 0x7B 883ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 884ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 msk[] = { 885ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4D, 0x83, 0xA9, 0xBE, 0x6F, 0x8A, 0x74, 0xED, 886ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x6A, 0x02, 0x66, 0x0A, 0x63, 0x4D, 0x2C, 0x33, 887ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xC2, 0xDA, 0x60, 0x15, 0xC6, 0x37, 0x04, 0x51, 888ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x90, 0x38, 0x63, 0xDA, 0x54, 0x3E, 0x14, 0xB9, 889ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x27, 0x99, 0x18, 0x1E, 0x07, 0xBF, 0x0F, 0x5A, 890ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x5E, 0x3C, 0x32, 0x93, 0x80, 0x8C, 0x6C, 0x49, 891ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x67, 0xED, 0x24, 0xFE, 0x45, 0x40, 0xA0, 0x59, 892ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x5E, 0x37, 0xC2, 0xE9, 0xD0, 0x5D, 0x0A, 0xE3 893ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 894ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 emsk[] = { 895ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3A, 0xD4, 0xAB, 0xDB, 0x76, 0xB2, 0x7F, 0x3B, 896ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xEA, 0x32, 0x2C, 0x2B, 0x74, 0xF4, 0x28, 0x55, 897ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xEF, 0x2D, 0xBA, 0x78, 0xC9, 0x57, 0x2F, 0x0D, 898ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x06, 0xCD, 0x51, 0x7C, 0x20, 0x93, 0x98, 0xA9, 899ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x76, 0xEA, 0x70, 0x21, 0xD7, 0x0E, 0x25, 0x54, 900ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x97, 0xED, 0xB2, 0x8A, 0xF6, 0xED, 0xFD, 0x0A, 901ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2A, 0xE7, 0xA1, 0x58, 0x90, 0x10, 0x50, 0x44, 902ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xB3, 0x82, 0x85, 0xDB, 0x06, 0x14, 0xD2, 0xF9 903ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 904ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* RFC 4851, Appendix B.2 */ 905ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 tlv[] = { 906ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x80, 0x0C, 0x00, 0x38, 0x00, 0x01, 0x01, 0x00, 907ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xD8, 0x6A, 0x8C, 0x68, 0x3C, 0x32, 0x31, 0xA8, 908ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x56, 0x63, 0xB6, 0x40, 0x21, 0xFE, 0x21, 0x14, 909ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4E, 0xE7, 0x54, 0x20, 0x79, 0x2D, 0x42, 0x62, 910ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xC9, 0xBF, 0x53, 0x7F, 0x54, 0xFD, 0xAC, 0x58, 911ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x43, 0x24, 0x6E, 0x30, 0x92, 0x17, 0x6D, 0xCF, 912ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xE6, 0xE0, 0x69, 0xEB, 0x33, 0x61, 0x6A, 0xCC, 913ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x05, 0xC5, 0x5B, 0xB7 914ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 915ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 compound_mac[] = { 916ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x43, 0x24, 0x6E, 0x30, 0x92, 0x17, 0x6D, 0xCF, 917ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xE6, 0xE0, 0x69, 0xEB, 0x33, 0x61, 0x6A, 0xCC, 918ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x05, 0xC5, 0x5B, 0xB7 919ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 920ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 buf[512]; 921ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 *simck, *cmk; 922ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int errors = 0; 923ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 924ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "EAP-FAST test cases"); 925ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 926ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "- T-PRF (SHA1) test case / master_secret"); 927ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_t_prf(pac_key, sizeof(pac_key), 928ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "PAC to master secret label hash", 929ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt seed, sizeof(seed), buf, sizeof(master_secret)) < 0 || 930ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(master_secret, buf, sizeof(master_secret)) != 0) { 931ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "T-PRF test - FAILED!"); 932ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 933ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 934ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 935ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "- PRF (TLS, SHA1/MD5) test case / key_block"); 936ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (tls_prf_sha1_md5(master_secret, sizeof(master_secret), 937ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "key expansion", seed, sizeof(seed), 938ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt buf, sizeof(key_block)) || 939ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(key_block, buf, sizeof(key_block)) != 0) { 940ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "PRF test - FAILED!"); 941ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 942ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 943ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 944ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "- T-PRF (SHA1) test case / IMCK"); 945ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_t_prf(sks, sizeof(sks), "Inner Methods Compound Keys", 946ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt isk, sizeof(isk), buf, sizeof(imck)) < 0 || 947ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(imck, buf, sizeof(imck)) != 0) { 948ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "T-PRF test - FAILED!"); 949ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 950ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 951ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 952ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt simck = imck; 953ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt cmk = imck + 40; 954ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 955ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "- T-PRF (SHA1) test case / MSK"); 956ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_t_prf(simck, 40, "Session Key Generating Function", 957ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt (u8 *) "", 0, buf, sizeof(msk)) < 0 || 958ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(msk, buf, sizeof(msk)) != 0) { 959ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "T-PRF test - FAILED!"); 960ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 961ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 962ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 963ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "- T-PRF (SHA1) test case / EMSK"); 964ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_t_prf(simck, 40, "Extended Session Key Generating Function", 965ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt (u8 *) "", 0, buf, sizeof(msk)) < 0 || 966ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(emsk, buf, sizeof(emsk)) != 0) { 967ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "T-PRF test - FAILED!"); 968ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 969ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 970ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 971ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "- Compound MAC test case"); 972ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memset(tlv + sizeof(tlv) - 20, 0, 20); 973ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (hmac_sha1(cmk, 20, tlv, sizeof(tlv), tlv + sizeof(tlv) - 20) < 0 || 974ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(tlv + sizeof(tlv) - 20, compound_mac, 975ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt sizeof(compound_mac)) != 0) { 976ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Compound MAC test - FAILED!"); 977ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 978ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 979ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 980ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return errors; 981ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#else /* EAP_FAST */ 982ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return 0; 983ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#endif /* EAP_FAST */ 984ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 985ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 986ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 9871d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 key0[] = 988ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 989ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 990ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 991ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b 992ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 9931d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 data0[] = "Hi There"; 9941d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 prf0[] = 995ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 996ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xbc, 0xd4, 0xc6, 0x50, 0xb3, 0x0b, 0x96, 0x84, 997ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x95, 0x18, 0x29, 0xe0, 0xd7, 0x5f, 0x9d, 0x54, 998ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xb8, 0x62, 0x17, 0x5e, 0xd9, 0xf0, 0x06, 0x06, 999ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe1, 0x7d, 0x8d, 0xa3, 0x54, 0x02, 0xff, 0xee, 1000ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x75, 0xdf, 0x78, 0xc3, 0xd3, 0x1e, 0x0f, 0x88, 1001ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9f, 0x01, 0x21, 0x20, 0xc0, 0x86, 0x2b, 0xeb, 1002ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x67, 0x75, 0x3e, 0x74, 0x39, 0xae, 0x24, 0x2e, 1003ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdb, 0x83, 0x73, 0x69, 0x83, 0x56, 0xcf, 0x5a 1004ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1005ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 10061d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 key1[] = "Jefe"; 10071d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 data1[] = "what do ya want for nothing?"; 10081d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 prf1[] = 1009ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1010ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x51, 0xf4, 0xde, 0x5b, 0x33, 0xf2, 0x49, 0xad, 1011ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf8, 0x1a, 0xeb, 0x71, 0x3a, 0x3c, 0x20, 0xf4, 1012ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xfe, 0x63, 0x14, 0x46, 0xfa, 0xbd, 0xfa, 0x58, 1013ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x24, 0x47, 0x59, 0xae, 0x58, 0xef, 0x90, 0x09, 1014ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xa9, 0x9a, 0xbf, 0x4e, 0xac, 0x2c, 0xa5, 0xfa, 1015ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x87, 0xe6, 0x92, 0xc4, 0x40, 0xeb, 0x40, 0x02, 1016ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3e, 0x7b, 0xab, 0xb2, 0x06, 0xd6, 0x1d, 0xe7, 1017ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xb9, 0x2f, 0x41, 0x52, 0x90, 0x92, 0xb8, 0xfc 1018ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1019ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1020ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 10211d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 key2[] = 1022ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1023ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1024ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1025ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa 1026ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 10271d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 data2[] = 1028ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1029ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1030ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1031ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1032ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1033ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1034ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1035ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd 1036ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 10371d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const u8 prf2[] = 1038ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1039ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe1, 0xac, 0x54, 0x6e, 0xc4, 0xcb, 0x63, 0x6f, 1040ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x99, 0x76, 0x48, 0x7b, 0xe5, 0xc8, 0x6b, 0xe1, 1041ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7a, 0x02, 0x52, 0xca, 0x5d, 0x8d, 0x8d, 0xf1, 1042ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2c, 0xfb, 0x04, 0x73, 0x52, 0x52, 0x49, 0xce, 1043ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9d, 0xd8, 0xd1, 0x77, 0xea, 0xd7, 0x10, 0xbc, 1044ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9b, 0x59, 0x05, 0x47, 0x23, 0x91, 0x07, 0xae, 1045ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf7, 0xb4, 0xab, 0xd4, 0x3d, 0x87, 0xf0, 0xa6, 1046ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8f, 0x1c, 0xbd, 0x9e, 0x2b, 0x6f, 0x76, 0x07 1047ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1048ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1049ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1050ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstruct passphrase_test { 1051ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *passphrase; 1052ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *ssid; 1053ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char psk[32]; 1054ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1055ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 10561d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const struct passphrase_test passphrase_tests[] = 1057ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1058ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1059ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "password", 1060ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "IEEE", 1061ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1062ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf4, 0x2c, 0x6f, 0xc5, 0x2d, 0xf0, 0xeb, 0xef, 1063ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9e, 0xbb, 0x4b, 0x90, 0xb3, 0x8a, 0x5f, 0x90, 1064ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2e, 0x83, 0xfe, 0x1b, 0x13, 0x5a, 0x70, 0xe2, 1065ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3a, 0xed, 0x76, 0x2e, 0x97, 0x10, 0xa1, 0x2e 1066ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1067ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1068ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1069ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "ThisIsAPassword", 1070ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "ThisIsASSID", 1071ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1072ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0d, 0xc0, 0xd6, 0xeb, 0x90, 0x55, 0x5e, 0xd6, 1073ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x41, 0x97, 0x56, 0xb9, 0xa1, 0x5e, 0xc3, 0xe3, 1074ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x20, 0x9b, 0x63, 0xdf, 0x70, 0x7d, 0xd5, 0x08, 1075ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xd1, 0x45, 0x81, 0xf8, 0x98, 0x27, 0x21, 0xaf 1076ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1077ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1078ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1079ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1080ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ", 1081ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1082ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xbe, 0xcb, 0x93, 0x86, 0x6b, 0xb8, 0xc3, 0x83, 1083ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2c, 0xb7, 0x77, 0xc2, 0xf5, 0x59, 0x80, 0x7c, 1084ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8c, 0x59, 0xaf, 0xcb, 0x6e, 0xae, 0x73, 0x48, 1085ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x85, 0x00, 0x13, 0x00, 0xa9, 0x81, 0xcc, 0x62 1086ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1087ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1088ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1089ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1090ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#define NUM_PASSPHRASE_TESTS ARRAY_SIZE(passphrase_tests) 1091ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1092ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1093ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstruct rfc6070_test { 1094ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *p; 1095ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *s; 1096ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int c; 1097ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char dk[32]; 1098ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t dk_len; 1099ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1100ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 11011d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtstatic const struct rfc6070_test rfc6070_tests[] = 1102ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1103ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1104ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "password", 1105ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "salt", 1106ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1, 1107ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1108ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, 1109ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, 1110ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2f, 0xe0, 0x37, 0xa6 1111ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1112ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 20 1113ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1114ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1115ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "password", 1116ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "salt", 1117ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 2, 1118ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1119ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 1120ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, 1121ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xd8, 0xde, 0x89, 0x57 1122ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1123ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 20 1124ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1125ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1126ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "password", 1127ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "salt", 1128ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 4096, 1129ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1130ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, 1131ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, 1132ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x65, 0xa4, 0x29, 0xc1 1133ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1134ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 20 1135ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1136ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#if 0 /* This takes quite long to derive.. */ 1137ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1138ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "password", 1139ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "salt", 1140ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 16777216, 1141ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1142ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4, 1143ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c, 1144ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x26, 0x34, 0xe9, 0x84 1145ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1146ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 20 1147ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1148ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#endif 1149ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1150ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "passwordPASSWORDpassword", 1151ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "saltSALTsaltSALTsaltSALTsaltSALTsalt", 1152ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 4096, 1153ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1154ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, 1155ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, 1156ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, 1157ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x38 1158ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1159ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 25 1160ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1161ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#if 0 /* \0 not currently supported in passphrase parameters.. */ 1162ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1163ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "pass\0word", 1164ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "sa\0lt", 1165ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 4096, 1166ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1167ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, 1168ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 1169ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1170ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 16 1171ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1172ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#endif 1173ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1174ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1175ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt#define NUM_RFC6070_TESTS ARRAY_SIZE(rfc6070_tests) 1176ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1177ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1178ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_sha1(void) 1179ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1180ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 res[512]; 1181ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int ret = 0; 1182ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt unsigned int i; 1183ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1184ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "PRF-SHA1 test cases:"); 1185ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1186ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_prf(key0, sizeof(key0), "prefix", data0, sizeof(data0) - 1, 1187ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt res, sizeof(prf0)) == 0 && 1188ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(res, prf0, sizeof(prf0)) == 0) 1189ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case 0 - OK"); 1190ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt else { 1191ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case 0 - FAILED!"); 1192ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 1193ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1194ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1195ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_prf(key1, sizeof(key1) - 1, "prefix", data1, sizeof(data1) - 1, 1196ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt res, sizeof(prf1)) == 0 && 1197ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(res, prf1, sizeof(prf1)) == 0) 1198ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case 1 - OK"); 1199ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt else { 1200ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case 1 - FAILED!"); 1201ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 1202ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1203ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1204ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (sha1_prf(key2, sizeof(key2), "prefix", data2, sizeof(data2), 1205ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt res, sizeof(prf2)) == 0 && 1206ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(res, prf2, sizeof(prf2)) == 0) 1207ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case 2 - OK"); 1208ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt else { 1209ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case 2 - FAILED!"); 1210ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 1211ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1212ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1213ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret += test_eap_fast(); 1214ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1215ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "PBKDF2-SHA1 Passphrase test cases:"); 1216ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < NUM_PASSPHRASE_TESTS; i++) { 1217ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 psk[32]; 12181d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt const struct passphrase_test *test = &passphrase_tests[i]; 1219ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1220ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (pbkdf2_sha1(test->passphrase, 1221ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt (const u8 *) test->ssid, strlen(test->ssid), 1222ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 4096, psk, 32) == 0 && 1223ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(psk, test->psk, 32) == 0) 1224ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case %d - OK", i); 1225ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt else { 1226ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case %d - FAILED!", i); 1227ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 1228ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1229ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1230ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1231ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "PBKDF2-SHA1 test cases (RFC 6070):"); 1232ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < NUM_RFC6070_TESTS; i++) { 1233ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 dk[25]; 12341d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt const struct rfc6070_test *test = &rfc6070_tests[i]; 1235ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1236ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (pbkdf2_sha1(test->p, (const u8 *) test->s, strlen(test->s), 1237ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test->c, dk, test->dk_len) == 0 && 1238ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(dk, test->dk, test->dk_len) == 0) 1239ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case %d - OK", i); 1240ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt else { 1241ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test case %d - FAILED!", i); 1242ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret++; 1243ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1244ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1245ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1246ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (!ret) 1247ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "SHA1 test cases passed"); 1248ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return ret; 1249ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 1250ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1251ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 12521d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtconst struct { 1253ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *data; 1254ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 hash[32]; 1255ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} tests[] = { 1256ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1257ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abc", 1258ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1259ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 1260ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 1261ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 1262ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad 1263ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1264ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1265ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1266ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1267ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1268ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 1269ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, 1270ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, 1271ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 1272ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1273ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1274ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1275ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 12761d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidtconst struct hmac_test { 1277ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 key[80]; 1278ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t key_len; 1279ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 data[128]; 1280ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t data_len; 1281ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 hash[32]; 1282ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} hmac_tests[] = { 1283ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* draft-ietf-ipsec-ciph-sha-256-01.txt */ 1284ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1285ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1286ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 1287ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 1288ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 1289ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 1290ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1291ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32, 1292ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abc", 3, 1293ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1294ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a, 1295ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4d, 0xd9, 0x39, 0x75, 0x0f, 0x7a, 0x06, 0x6a, 1296ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1, 0x6a, 0x66, 1297ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81 1298ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1299ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1300ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1301ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1302ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 1303ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 1304ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 1305ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 1306ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1307ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32, 1308ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1309ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 56, 1310ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1311ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08, 1312ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x18, 0x4b, 0xa7, 0x31, 0x31, 0xc5, 0x3c, 0xae, 1313ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42, 0x11, 0x49, 1314ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30 1315ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1316ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1317ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1318ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1319ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 1320ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 1321ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 1322ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 1323ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1324ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32, 1325ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" 1326ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1327ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 112, 1328ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1329ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34, 1330ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xd3, 0xee, 0xb3, 0xe7, 0x73, 0xd9, 0x5a, 0xab, 1331ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04, 0x47, 0xa5, 1332ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3 1333ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1334ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1335ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1336ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1337ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 1338ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 1339ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 1340ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b 1341ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1342ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32, 1343ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Hi There", 1344ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 8, 1345ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1346ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6, 1347ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5, 1348ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae, 0x3c, 0x1c, 1349ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7 1350ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1351ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1352ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1353ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Jefe", 1354ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 4, 1355ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "what do ya want for nothing?", 1356ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 28, 1357ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1358ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, 1359ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7, 1360ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83, 1361ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43 1362ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1363ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1364ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1365ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1366ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1367ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1368ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1369ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa 1370ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1371ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32, 1372ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1373ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1374ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1375ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1376ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1377ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1378ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 1379ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xdd, 0xdd 1380ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1381ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 50, 1382ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1383ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea, 1384ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62, 1385ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed, 0x7f, 0xdc, 1386ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0 1387ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1388ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1389ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1390ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1391ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 1392ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 1393ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 1394ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 1395ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x21, 0x22, 0x23, 0x24, 0x25 1396ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1397ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 37, 1398ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1399ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 1400ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 1401ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 1402ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 1403ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 1404ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 1405ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xcd, 0xcd 1406ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1407ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 50, 1408ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1409ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74, 1410ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x4c, 0x66, 0xde, 0xe0, 0xf8, 0xf0, 0x74, 0x55, 1411ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07, 0x99, 0x85, 1412ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17 1413ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1414ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1415ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1416ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1417ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 1418ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 1419ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 1420ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c 1421ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1422ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 32, 1423ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Test With Truncation", 1424ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 20, 1425ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1426ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b, 1427ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x1a, 0xb9, 0xc3, 0x74, 0x9a, 0x5f, 0x1c, 0x17, 1428ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58, 0x7b, 0x27, 1429ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42 1430ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1431ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1432ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1433ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1434ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1435ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1436ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1437ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1438ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1439ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1440ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1441ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1442ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1443ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa 1444ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1445ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 80, 1446ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Test Using Larger Than Block-Size Key - Hash Key First", 1447ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 54, 1448ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1449ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09, 1450ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xf8, 0x0a, 0x96, 0xf7, 0x8e, 0x65, 0x38, 0xdb, 1451ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd, 0x97, 0x0e, 1452ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f 1453ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1454ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1455ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1456ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1457ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1458ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1459ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1460ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1461ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1462ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1463ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1464ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1465ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 1466ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa 1467ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }, 1468ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 80, 1469ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Test Using Larger Than Block-Size Key and Larger Than One " 1470ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt "Block-Size Data", 1471ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 73, 1472ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt { 1473ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3, 1474ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xc8, 0x48, 0x1a, 0x5c, 0xa4, 0x82, 0x5b, 0xc8, 1475ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98, 0xa2, 0xfc, 1476ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6 1477ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1478ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1479ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt}; 1480ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1481ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1482ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_sha256(void) 1483ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1484ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt unsigned int i; 1485ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 hash[32]; 1486ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt const u8 *addr[2]; 1487ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt size_t len[2]; 1488ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int errors = 0; 1489ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1490ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < ARRAY_SIZE(tests); i++) { 1491ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "SHA256 test case %d:", i + 1); 1492ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1493ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = (u8 *) tests[i].data; 1494ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = strlen(tests[i].data); 1495ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt sha256_vector(1, addr, len, hash); 1496ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (memcmp(hash, tests[i].hash, 32) != 0) { 1497ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 1498ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1499ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 1500ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 1501ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1502ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (len[0]) { 1503ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = (u8 *) tests[i].data; 1504ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = 1; 1505ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = (u8 *) tests[i].data + 1; 1506ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = strlen(tests[i].data) - 1; 1507ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt sha256_vector(2, addr, len, hash); 1508ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (memcmp(hash, tests[i].hash, 32) != 0) { 1509ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 1510ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1511ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 1512ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 1513ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1514ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1515ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1516ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt for (i = 0; i < ARRAY_SIZE(hmac_tests); i++) { 15171d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt const struct hmac_test *t = &hmac_tests[i]; 1518ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1519ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "HMAC-SHA256 test case %d:", i + 1); 1520ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1521ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (hmac_sha256(t->key, t->key_len, t->data, t->data_len, 1522ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt hash) < 0 || 1523ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(hash, t->hash, 32) != 0) { 1524ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 1525ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1526ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 1527ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 1528ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1529ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = t->data; 1530ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = t->data_len; 1531ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (hmac_sha256_vector(t->key, t->key_len, 1, addr, len, 1532ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt hash) < 0 || 1533ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(hash, t->hash, 32) != 0) { 1534ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 1535ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1536ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 1537ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 1538ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1539ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (len[0]) { 1540ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[0] = t->data; 1541ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[0] = 1; 1542ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt addr[1] = t->data + 1; 1543ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt len[1] = t->data_len - 1; 1544ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (hmac_sha256_vector(t->key, t->key_len, 2, addr, len, 1545ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt hash) < 0 || 1546ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(hash, t->hash, 32) != 0) { 1547ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " FAIL"); 1548ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1549ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } else 1550ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, " OK"); 1551ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1552ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1553ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1554ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "Test IEEE 802.11r KDF"); 1555ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt sha256_prf((u8 *) "abc", 3, "KDF test", (u8 *) "data", 4, 1556ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt hash, sizeof(hash)); 1557ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* TODO: add proper test case for this */ 1558ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1559ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (!errors) 1560ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "SHA256 test cases passed"); 1561ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return errors; 1562ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 1563ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1564ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1565ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtstatic int test_ms_funcs(void) 1566ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1567ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt /* Test vector from RFC2759 example */ 1568ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *username = "User"; 1569ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt char *password = "clientPass"; 1570ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 auth_challenge[] = { 1571ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x5B, 0x5D, 0x7C, 0x7D, 0x7B, 0x3F, 0x2F, 0x3E, 1572ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x3C, 0x2C, 0x60, 0x21, 0x32, 0x26, 0x26, 0x28 1573ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1574ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 peer_challenge[] = { 1575ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 1576ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x28, 0x29, 0x5F, 0x2B, 0x3A, 0x33, 0x7C, 0x7E 1577ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1578ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 password_hash[] = { 1579ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x44, 0xEB, 0xBA, 0x8D, 0x53, 0x12, 0xB8, 0xD6, 1580ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x11, 0x47, 0x44, 0x11, 0xF5, 0x69, 0x89, 0xAE 1581ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1582ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 nt_response[] = { 1583ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x82, 0x30, 0x9E, 0xCD, 0x8D, 0x70, 0x8B, 0x5E, 1584ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xA0, 0x8F, 0xAA, 0x39, 0x81, 0xCD, 0x83, 0x54, 1585ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x42, 0x33, 0x11, 0x4A, 0x3D, 0x85, 0xD6, 0xDF 1586ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1587ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 password_hash_hash[] = { 1588ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x41, 0xC0, 0x0C, 0x58, 0x4B, 0xD2, 0xD9, 0x1C, 1589ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x40, 0x17, 0xA2, 0xA1, 0x2F, 0xA5, 0x9F, 0x3F 1590ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1591ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 authenticator_response[] = { 1592ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x40, 0x7A, 0x55, 0x89, 0x11, 0x5F, 0xD0, 0xD6, 1593ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x20, 0x9F, 0x51, 0x0F, 0xE9, 0xC0, 0x45, 0x66, 1594ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x93, 0x2C, 0xDA, 0x56 1595ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1596ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 master_key[] = { 1597ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xFD, 0xEC, 0xE3, 0x71, 0x7A, 0x8C, 0x83, 0x8C, 1598ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xB3, 0x88, 0xE5, 0x27, 0xAE, 0x3C, 0xDD, 0x31 1599ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1600ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 send_start_key[] = { 1601ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0x8B, 0x7C, 0xDC, 0x14, 0x9B, 0x99, 0x3A, 0x1B, 1602ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 0xA1, 0x18, 0xCB, 0x15, 0x3F, 0x56, 0xDC, 0xCB 1603ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt }; 1604ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt u8 buf[32]; 1605ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int errors = 0; 1606ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1607ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (nt_password_hash((u8 *) password, os_strlen(password), buf) || 1608ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(password_hash, buf, sizeof(password_hash)) != 0) { 1609ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "nt_password_hash failed"); 1610ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1611ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1612ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1613ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (generate_nt_response(auth_challenge, peer_challenge, 1614ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt (u8 *) username, os_strlen(username), 1615ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt (u8 *) password, os_strlen(password), buf) || 1616ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(nt_response, buf, sizeof(nt_response)) != 0) { 1617ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "generate_nt_response failed"); 1618ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1619ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1620ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1621ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (hash_nt_password_hash(password_hash, buf) || 1622ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(password_hash_hash, buf, 1623ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt sizeof(password_hash_hash)) != 0) { 1624ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "hash_nt_password_hash failed"); 1625ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1626ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1627ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1628ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (generate_authenticator_response((u8 *) password, 1629ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_strlen(password), 1630ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt peer_challenge, auth_challenge, 1631ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt (u8 *) username, 1632ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_strlen(username), 1633ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt nt_response, buf) || 1634ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(authenticator_response, buf, 1635ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt sizeof(authenticator_response)) != 0) { 1636ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "generate_authenticator_response failed"); 1637ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1638ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1639ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1640ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (get_master_key(password_hash_hash, nt_response, buf) || 1641ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(master_key, buf, sizeof(master_key)) != 0) { 1642ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "get_master_key failed"); 1643ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1644ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1645ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1646ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (get_asymetric_start_key(master_key, buf, sizeof(send_start_key), 1647ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1, 1) || 1648ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt os_memcmp(send_start_key, buf, sizeof(send_start_key)) != 0) { 1649ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "get_asymetric_start_key failed"); 1650ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt errors++; 1651ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt } 1652ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1653ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (errors) 1654ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_ERROR, "ms_funcs: %d errors", errors); 1655ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt else 1656ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "ms_funcs test cases passed"); 1657ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1658ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return errors; 1659ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 1660ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1661ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1662ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidtint crypto_module_tests(void) 1663ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt{ 1664ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt int ret = 0; 1665ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1666ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt wpa_printf(MSG_INFO, "crypto module tests"); 1667ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt if (test_siv() || 1668ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_omac1() || 1669ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_eax() || 1670ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_cbc() || 1671ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_ecb() || 1672ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_key_wrap() || 1673ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_md5() || 1674ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_sha1() || 1675ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_sha256() || 1676ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt test_ms_funcs()) 1677ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt ret = -1; 1678ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt 1679ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt return ret; 1680ff787d557db719adea0fdf2679667500c65cf74dDmitry Shmidt} 1681