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