1/* 2 Unix SMB/CIFS implementation. 3 MD4 tests 4 Copyright (C) Stefan Metzmacher 2006 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18*/ 19 20#include "includes.h" 21#include "../lib/crypto/crypto.h" 22 23struct torture_context; 24 25/* 26 This uses the test values from rfc1320 27*/ 28bool torture_local_crypto_md4(struct torture_context *torture) 29{ 30 bool ret = true; 31 uint32_t i; 32 struct { 33 const char *data; 34 const char *md4; 35 } testarray[] = { 36 { 37 .data = "", 38 .md4 = "31d6cfe0d16ae931b73c59d7e0c089c0" 39 },{ 40 .data = "a", 41 .md4 = "bde52cb31de33e46245e05fbdbd6fb24" 42 },{ 43 .data = "abc", 44 .md4 = "a448017aaf21d8525fc10ae87aa6729d" 45 },{ 46 .data = "message digest", 47 .md4 = "d9130a8164549fe818874806e1c7014b" 48 },{ 49 .data = "abcdefghijklmnopqrstuvwxyz", 50 .md4 = "d79e1c308aa5bbcdeea8ed63df412da9" 51 },{ 52 .data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 53 .md4 = "043f8582f241db351ce627e153e7f0e4" 54 },{ 55 .data = "12345678901234567890123456789012345678901234567890123456789012345678901234567890", 56 .md4 = "e33b4ddc9c38f2199c3e7b164fcc0536" 57 } 58 }; 59 60 for (i=0; i < ARRAY_SIZE(testarray); i++) { 61 uint8_t md4[16]; 62 int e; 63 DATA_BLOB data; 64 DATA_BLOB md4blob; 65 66 data = data_blob_string_const(testarray[i].data); 67 md4blob = strhex_to_data_blob(NULL, testarray[i].md4); 68 69 mdfour(md4, data.data, data.length); 70 71 e = memcmp(md4blob.data, md4, MIN(md4blob.length, sizeof(md4))); 72 if (e != 0) { 73 printf("md4 test[%u]: failed\n", i); 74 dump_data(0, data.data, data.length); 75 dump_data(0, md4blob.data, md4blob.length); 76 dump_data(0, md4, sizeof(md4)); 77 ret = false; 78 } 79 talloc_free(md4blob.data); 80 } 81 82 return ret; 83} 84