1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* 2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Test program for SHA1 and MD5 3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2003-2006, Jouni Malinen <j@w1.fi> 4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify 6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as 7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation. 8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license. 11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details. 13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "includes.h" 16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "common.h" 18b349ef9e9f3f5399bf96b3c1c663cb9e547f50a1Dmitry Shmidt#include "crypto/sha1.h" 19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "md5.h" 20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "crypto.h" 21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic int test_eap_fast(void) 24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* RFC 4851, Appendix B.1 */ 26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 pac_key[] = { 27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x0B, 0x97, 0x39, 0x0F, 0x37, 0x51, 0x78, 0x09, 28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x81, 0x1E, 0xFD, 0x9C, 0x6E, 0x65, 0x94, 0x2B, 29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x63, 0x2C, 0xE9, 0x53, 0x89, 0x38, 0x08, 0xBA, 30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x36, 0x0B, 0x03, 0x7C, 0xD1, 0x85, 0xE4, 0x14 31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 seed[] = { 33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x3F, 0xFB, 0x11, 0xC4, 0x6C, 0xBF, 0xA5, 0x7A, 34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x54, 0x40, 0xDA, 0xE8, 0x22, 0xD3, 0x11, 0xD3, 35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xF7, 0x6D, 0xE4, 0x1D, 0xD9, 0x33, 0xE5, 0x93, 36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x70, 0x97, 0xEB, 0xA9, 0xB3, 0x66, 0xF4, 0x2A, 37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x00, 0x00, 0x00, 0x02, 0x6A, 0x66, 0x43, 0x2A, 38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x8D, 0x14, 0x43, 0x2C, 0xEC, 0x58, 0x2D, 0x2F, 39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xC7, 0x9C, 0x33, 0x64, 0xBA, 0x04, 0xAD, 0x3A, 40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x52, 0x54, 0xD6, 0xA5, 0x79, 0xAD, 0x1E, 0x00 41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 master_secret[] = { 43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x4A, 0x1A, 0x51, 0x2C, 0x01, 0x60, 0xBC, 0x02, 44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x3C, 0xCF, 0xBC, 0x83, 0x3F, 0x03, 0xBC, 0x64, 45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x88, 0xC1, 0x31, 0x2F, 0x0B, 0xA9, 0xA2, 0x77, 46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x16, 0xA8, 0xD8, 0xE8, 0xBD, 0xC9, 0xD2, 0x29, 47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x38, 0x4B, 0x7A, 0x85, 0xBE, 0x16, 0x4D, 0x27, 48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x33, 0xD5, 0x24, 0x79, 0x87, 0xB1, 0xC5, 0xA2 49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 key_block[] = { 51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x59, 0x59, 0xBE, 0x8E, 0x41, 0x3A, 0x77, 0x74, 52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x8B, 0xB2, 0xE5, 0xD3, 0x60, 0xAC, 0x4D, 0x35, 53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xDF, 0xFB, 0xC8, 0x1E, 0x9C, 0x24, 0x9C, 0x8B, 54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x0E, 0xC3, 0x1D, 0x72, 0xC8, 0x84, 0x9D, 0x57, 55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x48, 0x51, 0x2E, 0x45, 0x97, 0x6C, 0x88, 0x70, 56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xBE, 0x5F, 0x01, 0xD3, 0x64, 0xE7, 0x4C, 0xBB, 57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x11, 0x24, 0xE3, 0x49, 0xE2, 0x3B, 0xCD, 0xEF, 58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x7A, 0xB3, 0x05, 0x39, 0x5D, 0x64, 0x8A, 0x44, 59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x11, 0xB6, 0x69, 0x88, 0x34, 0x2E, 0x8E, 0x29, 60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xD6, 0x4B, 0x7D, 0x72, 0x17, 0x59, 0x28, 0x05, 61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xAF, 0xF9, 0xB7, 0xFF, 0x66, 0x6D, 0xA1, 0x96, 62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x8F, 0x0B, 0x5E, 0x06, 0x46, 0x7A, 0x44, 0x84, 63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x64, 0xC1, 0xC8, 0x0C, 0x96, 0x44, 0x09, 0x98, 64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xFF, 0x92, 0xA8, 0xB4, 0xC6, 0x42, 0x28, 0x71 65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 sks[] = { 67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xD6, 0x4B, 0x7D, 0x72, 0x17, 0x59, 0x28, 0x05, 68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xAF, 0xF9, 0xB7, 0xFF, 0x66, 0x6D, 0xA1, 0x96, 69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x8F, 0x0B, 0x5E, 0x06, 0x46, 0x7A, 0x44, 0x84, 70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x64, 0xC1, 0xC8, 0x0C, 0x96, 0x44, 0x09, 0x98, 71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xFF, 0x92, 0xA8, 0xB4, 0xC6, 0x42, 0x28, 0x71 72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 isk[] = { 74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 imck[] = { 80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x16, 0x15, 0x3C, 0x3F, 0x21, 0x55, 0xEF, 0xD9, 81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x7F, 0x34, 0xAE, 0xC8, 0x1A, 0x4E, 0x66, 0x80, 82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x4C, 0xC3, 0x76, 0xF2, 0x8A, 0xA9, 0x6F, 0x96, 83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xC2, 0x54, 0x5F, 0x8C, 0xAB, 0x65, 0x02, 0xE1, 84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x18, 0x40, 0x7B, 0x56, 0xBE, 0xEA, 0xA7, 0xC5, 85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x76, 0x5D, 0x8F, 0x0B, 0xC5, 0x07, 0xC6, 0xB9, 86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x04, 0xD0, 0x69, 0x56, 0x72, 0x8B, 0x6B, 0xB8, 87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x15, 0xEC, 0x57, 0x7B 88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 msk[] = { 90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x4D, 0x83, 0xA9, 0xBE, 0x6F, 0x8A, 0x74, 0xED, 91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x6A, 0x02, 0x66, 0x0A, 0x63, 0x4D, 0x2C, 0x33, 92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xC2, 0xDA, 0x60, 0x15, 0xC6, 0x37, 0x04, 0x51, 93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x90, 0x38, 0x63, 0xDA, 0x54, 0x3E, 0x14, 0xB9, 94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x27, 0x99, 0x18, 0x1E, 0x07, 0xBF, 0x0F, 0x5A, 95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x5E, 0x3C, 0x32, 0x93, 0x80, 0x8C, 0x6C, 0x49, 96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x67, 0xED, 0x24, 0xFE, 0x45, 0x40, 0xA0, 0x59, 97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x5E, 0x37, 0xC2, 0xE9, 0xD0, 0x5D, 0x0A, 0xE3 98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 emsk[] = { 100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x3A, 0xD4, 0xAB, 0xDB, 0x76, 0xB2, 0x7F, 0x3B, 101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xEA, 0x32, 0x2C, 0x2B, 0x74, 0xF4, 0x28, 0x55, 102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xEF, 0x2D, 0xBA, 0x78, 0xC9, 0x57, 0x2F, 0x0D, 103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x06, 0xCD, 0x51, 0x7C, 0x20, 0x93, 0x98, 0xA9, 104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x76, 0xEA, 0x70, 0x21, 0xD7, 0x0E, 0x25, 0x54, 105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x97, 0xED, 0xB2, 0x8A, 0xF6, 0xED, 0xFD, 0x0A, 106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x2A, 0xE7, 0xA1, 0x58, 0x90, 0x10, 0x50, 0x44, 107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xB3, 0x82, 0x85, 0xDB, 0x06, 0x14, 0xD2, 0xF9 108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* RFC 4851, Appendix B.2 */ 110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 tlv[] = { 111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x80, 0x0C, 0x00, 0x38, 0x00, 0x01, 0x01, 0x00, 112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xD8, 0x6A, 0x8C, 0x68, 0x3C, 0x32, 0x31, 0xA8, 113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x56, 0x63, 0xB6, 0x40, 0x21, 0xFE, 0x21, 0x14, 114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x4E, 0xE7, 0x54, 0x20, 0x79, 0x2D, 0x42, 0x62, 115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xC9, 0xBF, 0x53, 0x7F, 0x54, 0xFD, 0xAC, 0x58, 116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x43, 0x24, 0x6E, 0x30, 0x92, 0x17, 0x6D, 0xCF, 117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xE6, 0xE0, 0x69, 0xEB, 0x33, 0x61, 0x6A, 0xCC, 118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x05, 0xC5, 0x5B, 0xB7 119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 compound_mac[] = { 121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x43, 0x24, 0x6E, 0x30, 0x92, 0x17, 0x6D, 0xCF, 122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xE6, 0xE0, 0x69, 0xEB, 0x33, 0x61, 0x6A, 0xCC, 123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x05, 0xC5, 0x5B, 0xB7 124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }; 125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 buf[512]; 126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *simck, *cmk; 127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int errors = 0; 128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("EAP-FAST test cases\n"); 130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 131526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("- T-PRF (SHA1) test case / master_secret\n"); 132526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_t_prf(pac_key, sizeof(pac_key), "PAC to master secret label hash", 133526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt seed, sizeof(seed), buf, sizeof(master_secret)); 134526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(master_secret, buf, sizeof(master_secret)) != 0) { 135526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("T-PRF test - FAILED!\n"); 136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt errors++; 137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("- PRF (TLS, SHA1/MD5) test case / key_block\n"); 140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt tls_prf(master_secret, sizeof(master_secret), "key expansion", 141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt seed, sizeof(seed), buf, sizeof(key_block)); 142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(key_block, buf, sizeof(key_block)) != 0) { 143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("PRF test - FAILED!\n"); 144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt errors++; 145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("- T-PRF (SHA1) test case / IMCK\n"); 148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_t_prf(sks, sizeof(sks), "Inner Methods Compound Keys", 149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt isk, sizeof(isk), buf, sizeof(imck)); 150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(imck, buf, sizeof(imck)) != 0) { 151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("T-PRF test - FAILED!\n"); 152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt errors++; 153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt simck = imck; 156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cmk = imck + 40; 157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("- T-PRF (SHA1) test case / MSK\n"); 159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_t_prf(simck, 40, "Session Key Generating Function", 160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt (u8 *) "", 0, buf, sizeof(msk)); 161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(msk, buf, sizeof(msk)) != 0) { 162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("T-PRF test - FAILED!\n"); 163526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt errors++; 164526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 165526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 166526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("- T-PRF (SHA1) test case / EMSK\n"); 167526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_t_prf(simck, 40, "Extended Session Key Generating Function", 168526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt (u8 *) "", 0, buf, sizeof(msk)); 169526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(emsk, buf, sizeof(emsk)) != 0) { 170526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("T-PRF test - FAILED!\n"); 171526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt errors++; 172526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 173526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 174526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("- Compound MAC test case\n"); 175526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt memset(tlv + sizeof(tlv) - 20, 0, 20); 176526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt hmac_sha1(cmk, 20, tlv, sizeof(tlv), tlv + sizeof(tlv) - 20); 177526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(tlv + sizeof(tlv) - 20, compound_mac, sizeof(compound_mac)) 178526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt != 0) { 179526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Compound MAC test - FAILED!\n"); 180526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt errors++; 181526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 182526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 183526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return errors; 184526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 185526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 186526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 187526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 key0[] = 188526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 189526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 190526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 191526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x0b, 0x0b, 0x0b, 0x0b 192526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 193526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 data0[] = "Hi There"; 194526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 prf0[] = 195526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 196526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xbc, 0xd4, 0xc6, 0x50, 0xb3, 0x0b, 0x96, 0x84, 197526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x95, 0x18, 0x29, 0xe0, 0xd7, 0x5f, 0x9d, 0x54, 198526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xb8, 0x62, 0x17, 0x5e, 0xd9, 0xf0, 0x06, 0x06, 199526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xe1, 0x7d, 0x8d, 0xa3, 0x54, 0x02, 0xff, 0xee, 200526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x75, 0xdf, 0x78, 0xc3, 0xd3, 0x1e, 0x0f, 0x88, 201526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x9f, 0x01, 0x21, 0x20, 0xc0, 0x86, 0x2b, 0xeb, 202526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x67, 0x75, 0x3e, 0x74, 0x39, 0xae, 0x24, 0x2e, 203526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdb, 0x83, 0x73, 0x69, 0x83, 0x56, 0xcf, 0x5a 204526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 205526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 206526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 key1[] = "Jefe"; 207526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 data1[] = "what do ya want for nothing?"; 208526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 prf1[] = 209526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 210526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x51, 0xf4, 0xde, 0x5b, 0x33, 0xf2, 0x49, 0xad, 211526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xf8, 0x1a, 0xeb, 0x71, 0x3a, 0x3c, 0x20, 0xf4, 212526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xfe, 0x63, 0x14, 0x46, 0xfa, 0xbd, 0xfa, 0x58, 213526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x24, 0x47, 0x59, 0xae, 0x58, 0xef, 0x90, 0x09, 214526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xa9, 0x9a, 0xbf, 0x4e, 0xac, 0x2c, 0xa5, 0xfa, 215526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x87, 0xe6, 0x92, 0xc4, 0x40, 0xeb, 0x40, 0x02, 216526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x3e, 0x7b, 0xab, 0xb2, 0x06, 0xd6, 0x1d, 0xe7, 217526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xb9, 0x2f, 0x41, 0x52, 0x90, 0x92, 0xb8, 0xfc 218526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 219526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 220526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 221526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 key2[] = 222526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 223526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 224526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 225526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xaa, 0xaa, 0xaa, 0xaa 226526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 227526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 data2[] = 228526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 229526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 230526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 231526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 232526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 233526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 234526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 235526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xdd, 0xdd 236526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 237526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic u8 prf2[] = 238526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 239526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xe1, 0xac, 0x54, 0x6e, 0xc4, 0xcb, 0x63, 0x6f, 240526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x99, 0x76, 0x48, 0x7b, 0xe5, 0xc8, 0x6b, 0xe1, 241526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x7a, 0x02, 0x52, 0xca, 0x5d, 0x8d, 0x8d, 0xf1, 242526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x2c, 0xfb, 0x04, 0x73, 0x52, 0x52, 0x49, 0xce, 243526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x9d, 0xd8, 0xd1, 0x77, 0xea, 0xd7, 0x10, 0xbc, 244526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x9b, 0x59, 0x05, 0x47, 0x23, 0x91, 0x07, 0xae, 245526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xf7, 0xb4, 0xab, 0xd4, 0x3d, 0x87, 0xf0, 0xa6, 246526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x8f, 0x1c, 0xbd, 0x9e, 0x2b, 0x6f, 0x76, 0x07 247526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 248526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 249526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 250526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct passphrase_test { 251526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char *passphrase; 252526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char *ssid; 253526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char psk[32]; 254526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 255526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 256526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic struct passphrase_test passphrase_tests[] = 257526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 258526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt { 259526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "password", 260526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "IEEE", 261526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt { 262526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xf4, 0x2c, 0x6f, 0xc5, 0x2d, 0xf0, 0xeb, 0xef, 263526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x9e, 0xbb, 0x4b, 0x90, 0xb3, 0x8a, 0x5f, 0x90, 264526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x2e, 0x83, 0xfe, 0x1b, 0x13, 0x5a, 0x70, 0xe2, 265526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x3a, 0xed, 0x76, 0x2e, 0x97, 0x10, 0xa1, 0x2e 266526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 267526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }, 268526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt { 269526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "ThisIsAPassword", 270526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "ThisIsASSID", 271526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt { 272526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x0d, 0xc0, 0xd6, 0xeb, 0x90, 0x55, 0x5e, 0xd6, 273526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x41, 0x97, 0x56, 0xb9, 0xa1, 0x5e, 0xc3, 0xe3, 274526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x20, 0x9b, 0x63, 0xdf, 0x70, 0x7d, 0xd5, 0x08, 275526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xd1, 0x45, 0x81, 0xf8, 0x98, 0x27, 0x21, 0xaf 276526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 277526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }, 278526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt { 279526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 280526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ", 281526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt { 282526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0xbe, 0xcb, 0x93, 0x86, 0x6b, 0xb8, 0xc3, 0x83, 283526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x2c, 0xb7, 0x77, 0xc2, 0xf5, 0x59, 0x80, 0x7c, 284526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x8c, 0x59, 0xaf, 0xcb, 0x6e, 0xae, 0x73, 0x48, 285526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 0x85, 0x00, 0x13, 0x00, 0xa9, 0x81, 0xcc, 0x62 286526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 287526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt }, 288526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 289526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 290526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define NUM_PASSPHRASE_TESTS \ 291526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt(sizeof(passphrase_tests) / sizeof(passphrase_tests[0])) 292526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 293526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 294526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint main(int argc, char *argv[]) 295526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 296526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 res[512]; 297526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int ret = 0; 298526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt unsigned int i; 299526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 300526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("PRF-SHA1 test cases:\n"); 301526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 302526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_prf(key0, sizeof(key0), "prefix", data0, sizeof(data0) - 1, 303526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt res, sizeof(prf0)); 304526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(res, prf0, sizeof(prf0)) == 0) 305526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case 0 - OK\n"); 306526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else { 307526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case 0 - FAILED!\n"); 308526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret++; 309526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 310526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 311526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_prf(key1, sizeof(key1) - 1, "prefix", data1, sizeof(data1) - 1, 312526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt res, sizeof(prf1)); 313526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(res, prf1, sizeof(prf1)) == 0) 314526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case 1 - OK\n"); 315526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else { 316526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case 1 - FAILED!\n"); 317526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret++; 318526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 319526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 320526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sha1_prf(key2, sizeof(key2), "prefix", data2, sizeof(data2), 321526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt res, sizeof(prf2)); 322526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(res, prf2, sizeof(prf2)) == 0) 323526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case 2 - OK\n"); 324526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else { 325526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case 2 - FAILED!\n"); 326526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret++; 327526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 328526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 329526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret += test_eap_fast(); 330526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 331526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("PBKDF2-SHA1 Passphrase test cases:\n"); 332526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (i = 0; i < NUM_PASSPHRASE_TESTS; i++) { 333526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 psk[32]; 334526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct passphrase_test *test = &passphrase_tests[i]; 335526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pbkdf2_sha1(test->passphrase, 336526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt test->ssid, strlen(test->ssid), 337526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 4096, psk, 32); 338526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (memcmp(psk, test->psk, 32) == 0) 339526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case %d - OK\n", i); 340526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else { 341526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Test case %d - FAILED!\n", i); 342526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret++; 343526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 344526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 345526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 346526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return ret; 347526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 348