test_sha512_256.c (30116B)
1 /* 2 This file is part of libmicrohttpd 3 Copyright (C) 2019-2022 Evgeny Grin (Karlson2k) 4 5 This test tool is free software; you can redistribute it and/or 6 modify it under the terms of the GNU General Public License as 7 published by the Free Software Foundation; either version 2, or 8 (at your option) any later version. 9 10 This test tool is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 20 /** 21 * @file microhttpd/test_sha512_256.h 22 * @brief Unit tests for SHA-512/256 functions 23 * @author Karlson2k (Evgeny Grin) 24 */ 25 26 #include "mhd_options.h" 27 #include "sha512_256.h" 28 #include "test_helpers.h" 29 #include <stdio.h> 30 #include <stdlib.h> 31 32 static int verbose = 0; /* verbose level (0-1)*/ 33 34 35 struct str_with_len 36 { 37 const char *const str; 38 const size_t len; 39 }; 40 41 #define D_STR_W_LEN(s) {(s), (sizeof((s)) / sizeof(char)) - 1} 42 43 struct data_unit1 44 { 45 const struct str_with_len str_l; 46 const uint8_t digest[SHA512_256_DIGEST_SIZE]; 47 }; 48 49 static const struct data_unit1 data_units1[] = { 50 {D_STR_W_LEN ("abc"), 51 {0x53, 0x04, 0x8E, 0x26, 0x81, 0x94, 0x1E, 0xF9, 0x9B, 0x2E, 0x29, 0xB7, 52 0x6B, 0x4C, 0x7D, 0xAB, 0xE4, 0xC2, 0xD0, 0xC6, 0x34, 0xFC, 0x6D, 0x46, 53 0xE0, 0xE2, 0xF1, 0x31, 0x07, 0xE7, 0xAF, 0x23}}, 54 {D_STR_W_LEN ("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhi" \ 55 "jklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), 56 {0x39, 0x28, 0xE1, 0x84, 0xFB, 0x86, 0x90, 0xF8, 0x40, 0xDA, 0x39, 0x88, 57 0x12, 0x1D, 0x31, 0xBE, 0x65, 0xCB, 0x9D, 0x3E, 0xF8, 0x3E, 0xE6, 0x14, 58 0x6F, 0xEA, 0xC8, 0x61, 0xE1, 0x9B, 0x56, 0x3A}}, 59 {D_STR_W_LEN (""), /* The empty zero-size input */ 60 {0xc6, 0x72, 0xb8, 0xd1, 0xef, 0x56, 0xed, 0x28, 0xab, 0x87, 0xc3, 0x62, 61 0x2c, 0x51, 0x14, 0x06, 0x9b, 0xdd, 0x3a, 0xd7, 0xb8, 0xf9, 0x73, 0x74, 62 0x98, 0xd0, 0xc0, 0x1e, 0xce, 0xf0, 0x96, 0x7a}}, 63 {D_STR_W_LEN ("1234567890!@~%&$@#{}[]\\/!?`."), 64 {0xc8, 0x7c, 0x5a, 0x55, 0x27, 0x77, 0x1b, 0xe7, 0x69, 0x3c, 0x50, 0x79, 65 0x32, 0xad, 0x7c, 0x79, 0xe9, 0x60, 0xa0, 0x18, 0xb7, 0x78, 0x2b, 0x6f, 66 0xa9, 0x7b, 0xa3, 0xa0, 0xb5, 0x18, 0x17, 0xa5}}, 67 {D_STR_W_LEN ("Simple string."), 68 {0xde, 0xcb, 0x3c, 0x81, 0x65, 0x4b, 0xa0, 0xf5, 0xf0, 0x45, 0x6b, 0x7e, 69 0x61, 0xf5, 0x0d, 0xf5, 0x38, 0xa4, 0xfc, 0xb1, 0x8a, 0x95, 0xff, 0x59, 70 0xbc, 0x04, 0x82, 0xcf, 0x23, 0xb2, 0x32, 0x56}}, 71 {D_STR_W_LEN ("abcdefghijklmnopqrstuvwxyz"), 72 {0xfc, 0x31, 0x89, 0x44, 0x3f, 0x9c, 0x26, 0x8f, 0x62, 0x6a, 0xea, 0x08, 73 0xa7, 0x56, 0xab, 0xe7, 0xb7, 0x26, 0xb0, 0x5f, 0x70, 0x1c, 0xb0, 0x82, 74 0x22, 0x31, 0x2c, 0xcf, 0xd6, 0x71, 0x0a, 0x26, }}, 75 {D_STR_W_LEN ("zyxwvutsrqponMLKJIHGFEDCBA"), 76 {0xd2, 0x6d, 0x24, 0x81, 0xa4, 0xf9, 0x0a, 0x72, 0xd2, 0x7f, 0xc1, 0xac, 77 0xac, 0xe1, 0xc0, 0x6b, 0x39, 0x94, 0xac, 0x73, 0x50, 0x2e, 0x27, 0x97, 78 0xa3, 0x65, 0x37, 0x4e, 0xbb, 0x5c, 0x27, 0xe9}}, 79 {D_STR_W_LEN ("abcdefghijklmnopqrstuvwxyzzyxwvutsrqponMLKJIHGFEDCBA" \ 80 "abcdefghijklmnopqrstuvwxyzzyxwvutsrqponMLKJIHGFEDCBA"), 81 {0xad, 0xe9, 0x5d, 0x55, 0x3b, 0x9e, 0x45, 0x69, 0xdb, 0x53, 0xa4, 0x04, 82 0x92, 0xe7, 0x87, 0x94, 0xff, 0xc9, 0x98, 0x5f, 0x93, 0x03, 0x86, 0x45, 83 0xe1, 0x97, 0x17, 0x72, 0x7c, 0xbc, 0x31, 0x15}}, 84 {D_STR_W_LEN ("/long/long/long/long/long/long/long/long/long/long/long" \ 85 "/long/long/long/long/long/long/long/long/long/long/long" \ 86 "/long/long/long/long/long/long/long/long/long/long/long" \ 87 "/long/long/long/long/long/long/long/long/long/long/long" \ 88 "/long/long/long/long/long/long/long/long/long/long/long" \ 89 "/long/long/long/long/long/long/long/long/long/long/long" \ 90 "/long/long/long/long/path?with%20some=parameters"), 91 {0xbc, 0xab, 0xc6, 0x2c, 0x0a, 0x22, 0xd5, 0xcb, 0xac, 0xac, 0xe9, 0x25, 92 0xcf, 0xce, 0xaa, 0xaf, 0x0e, 0xa1, 0xed, 0x42, 0x46, 0x8a, 0xe2, 0x01, 93 0xee, 0x2f, 0xdb, 0x39, 0x75, 0x47, 0x73, 0xf1}} 94 }; 95 96 static const size_t units1_num = sizeof(data_units1) / sizeof(data_units1[0]); 97 98 struct bin_with_len 99 { 100 const uint8_t bin[512]; 101 const size_t len; 102 }; 103 104 struct data_unit2 105 { 106 const struct bin_with_len bin_l; 107 const uint8_t digest[SHA512_256_DIGEST_SIZE]; 108 }; 109 110 /* Size must be less than 512 bytes! */ 111 static const struct data_unit2 data_units2[] = { 112 { { {97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 113 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}, 26}, /* a..z ASCII sequence */ 114 {0xfc, 0x31, 0x89, 0x44, 0x3f, 0x9c, 0x26, 0x8f, 0x62, 0x6a, 0xea, 0x08, 115 0xa7, 0x56, 0xab, 0xe7, 0xb7, 0x26, 0xb0, 0x5f, 0x70, 0x1c, 0xb0, 0x82, 116 0x22, 0x31, 0x2c, 0xcf, 0xd6, 0x71, 0x0a, 0x26}}, 117 { { {65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 118 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 119 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 120 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65}, 121 72 }, /* 'A' x 72 times */ 122 {0x36, 0x5d, 0x41, 0x0e, 0x55, 0xd1, 0xfd, 0xe6, 0xc3, 0xb8, 0x68, 0xcc, 123 0xed, 0xeb, 0xcd, 0x0d, 0x2e, 0x34, 0xb2, 0x5c, 0xdf, 0xe7, 0x79, 0xe2, 124 0xe9, 0x65, 0x07, 0x33, 0x78, 0x0d, 0x01, 0x89}}, 125 { { {19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 126 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 127 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 128 73}, 55}, /* 19..73 sequence */ 129 {0xb9, 0xe5, 0x74, 0x11, 0xbf, 0xa2, 0x0e, 0x98, 0xbe, 0x08, 0x69, 0x2e, 130 0x17, 0x9e, 0xc3, 0xfe, 0x61, 0xe3, 0x7a, 0x80, 0x2e, 0x25, 0x8c, 0xf3, 131 0x76, 0xda, 0x9f, 0x5f, 0xcd, 0x87, 0x48, 0x0d}}, 132 { { {7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 133 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 134 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 135 62, 63, 64, 65, 66, 67, 68, 69}, 63}, /* 7..69 sequence */ 136 {0x80, 0x15, 0x83, 0xed, 0x7d, 0xef, 0x9f, 0xdf, 0xfb, 0x83, 0x1f, 0xc5, 137 0x8b, 0x50, 0x37, 0x81, 0x00, 0xc3, 0x4f, 0xfd, 0xfe, 0xc2, 0x9b, 0xaf, 138 0xfe, 0x15, 0x66, 0xe5, 0x08, 0x42, 0x5e, 0xae}}, 139 { { {38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 140 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 141 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 142 92}, 55}, /* 38..92 sequence */ 143 {0x76, 0x2f, 0x27, 0x4d, 0xfa, 0xd5, 0xa9, 0x21, 0x4e, 0xe9, 0x56, 0x22, 144 0x54, 0x38, 0x71, 0x3e, 0xef, 0x14, 0xa9, 0x22, 0x37, 0xf3, 0xb0, 0x50, 145 0x3d, 0x95, 0x40, 0xb7, 0x08, 0x64, 0xa9, 0xfd}}, 146 { { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 147 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 148 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 149 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72}, 72}, /* 1..72 sequence */ 150 {0x3f, 0x5c, 0xd3, 0xec, 0x40, 0xc4, 0xb9, 0x78, 0x35, 0x57, 0xc6, 0x4f, 151 0x3e, 0x46, 0x82, 0xdc, 0xd4, 0x46, 0x11, 0xd0, 0xb3, 0x0a, 0xbb, 0x89, 152 0xf1, 0x1d, 0x34, 0xb5, 0xf9, 0xd5, 0x10, 0x35}}, 153 { { {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 154 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 155 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 156 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 157 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 158 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 159 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 160 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 161 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 162 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 163 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 164 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 165 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 166 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 167 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 168 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 169 249, 250, 251, 252, 253, 254, 255}, 256}, /* 0..255 sequence */ 170 {0x08, 0x37, 0xa1, 0x1d, 0x99, 0x4d, 0x5a, 0xa8, 0x60, 0xd0, 0x69, 0x17, 171 0xa8, 0xa0, 0xf6, 0x3e, 0x31, 0x11, 0xb9, 0x56, 0x33, 0xde, 0xeb, 0x15, 172 0xee, 0xd9, 0x94, 0x93, 0x76, 0xf3, 0x7d, 0x36, }}, 173 { { {199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188, 187, 186, 174 185, 184, 183, 182, 181, 180, 175 179, 178, 177, 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 176 165, 164, 163, 162, 161, 160, 177 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 178 145, 144, 143, 142, 141, 140, 179 139}, 61}, /* 199..139 sequence */ 180 {0xcf, 0x21, 0x4b, 0xb2, 0xdd, 0x40, 0x98, 0xdf, 0x3a, 0xb7, 0x21, 0xb4, 181 0x69, 0x0e, 0x19, 0x36, 0x24, 0xa9, 0xbe, 0x30, 0xf7, 0xd0, 0x75, 0xb0, 182 0x39, 0x94, 0x82, 0xda, 0x55, 0x97, 0xe4, 0x79}}, 183 { { {255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 184 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 185 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 186 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200, 187 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188, 187, 186, 188 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174, 173, 172, 189 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160, 159, 158, 190 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144, 191 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 192 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 193 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 194 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 195 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 196 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 197 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 198 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 199 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}, 255}, /* 255..1 sequence */ 200 {0x22, 0x31, 0xf2, 0xa1, 0xb4, 0x89, 0xb2, 0x44, 0xf7, 0x66, 0xa0, 0xb8, 201 0x31, 0xed, 0xb7, 0x73, 0x8a, 0x34, 0xdc, 0x11, 0xc8, 0x2c, 0xf2, 0xb5, 202 0x88, 0x60, 0x39, 0x6b, 0x5c, 0x06, 0x70, 0x37}}, 203 { { {41, 35, 190, 132, 225, 108, 214, 174, 82, 144, 73, 241, 241, 187, 233, 204 235, 179, 166, 219, 60, 135, 12, 62, 153, 36, 94, 13, 28, 6, 183, 71, 205 222, 179, 18, 77, 200, 67, 187, 139, 166, 31, 3, 90, 125, 9, 56, 37, 206 31, 93, 212, 203, 252, 150, 245, 69, 59, 19, 13, 137, 10, 28, 219, 174, 207 50, 32, 154, 80, 238, 64, 120, 54, 253, 18, 73, 50, 246, 158, 125, 73, 208 220, 173, 79, 20, 242, 68, 64, 102, 208, 107, 196, 48, 183, 50, 59, 209 161, 34, 246, 34, 145, 157, 225, 139, 31, 218, 176, 202, 153, 2, 185, 210 114, 157, 73, 44, 128, 126, 197, 153, 213, 233, 128, 178, 234, 201, 211 204, 83, 191, 103, 214, 191, 20, 214, 126, 45, 220, 142, 102, 131, 239, 212 87, 73, 97, 255, 105, 143, 97, 205, 209, 30, 157, 156, 22, 114, 114, 213 230, 29, 240, 132, 79, 74, 119, 2, 215, 232, 57, 44, 83, 203, 201, 18, 214 30, 51, 116, 158, 12, 244, 213, 212, 159, 212, 164, 89, 126, 53, 207, 215 50, 34, 244, 204, 207, 211, 144, 45, 72, 211, 143, 117, 230, 217, 29, 216 42, 229, 192, 247, 43, 120, 129, 135, 68, 14, 95, 80, 0, 212, 97, 141, 217 190, 123, 5, 21, 7, 59, 51, 130, 31, 24, 112, 146, 218, 100, 84, 206, 218 177, 133, 62, 105, 21, 248, 70, 106, 4, 150, 115, 14, 217, 22, 47, 103, 219 104, 212, 247, 74, 74, 208, 87, 104}, 255}, /* pseudo-random data */ 220 {0xb8, 0xdb, 0x2c, 0x2e, 0xf3, 0x12, 0x77, 0x14, 0xf9, 0x34, 0x2d, 0xfa, 221 0xda, 0x42, 0xbe, 0xfe, 0x67, 0x3a, 0x8a, 0xf6, 0x71, 0x36, 0x00, 0xff, 222 0x77, 0xa5, 0x83, 0x14, 0x55, 0x2a, 0x05, 0xaf}}, 223 { { {66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 224 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 225 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 226 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 227 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 228 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 229 66, 66}, 110}, /* 'B' x 110 times */ 230 {0xc8, 0x9e, 0x0d, 0x8f, 0x7b, 0x35, 0xfd, 0x3e, 0xdc, 0x90, 0x87, 0x64, 231 0x45, 0x94, 0x94, 0x21, 0xb3, 0x8e, 0xb5, 0xc7, 0x54, 0xc8, 0xee, 0xde, 232 0xfc, 0x77, 0xd6, 0xe3, 0x9f, 0x81, 0x8e, 0x78}}, 233 { { {67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 234 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 235 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 236 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 237 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 238 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 239 67, 67, 67}, 111}, /* 'C' x 111 times */ 240 {0x86, 0xca, 0x6d, 0x2a, 0x72, 0xe2, 0x8c, 0x17, 0x89, 0x86, 0x89, 0x1b, 241 0x36, 0xf9, 0x6d, 0xda, 0x8c, 0xd6, 0x30, 0xb2, 0xd3, 0x60, 0x39, 0xfb, 242 0xc9, 0x04, 0xc5, 0x11, 0xcd, 0x2d, 0xe3, 0x62}}, 243 { { {68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 244 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 245 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 246 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 247 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 248 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 249 68, 68, 68, 68}, 112}, /* 'D' x 112 times */ 250 {0xdf, 0x9d, 0x4a, 0xcf, 0x81, 0x0d, 0x3a, 0xd4, 0x8e, 0xa4, 0x65, 0x9e, 251 0x1e, 0x15, 0xe4, 0x15, 0x1b, 0x37, 0xb6, 0xeb, 0x17, 0xab, 0xf6, 0xb1, 252 0xbc, 0x30, 0x46, 0x34, 0x24, 0x56, 0x1c, 0x06}}, 253 { { {69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 254 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 255 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 256 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 257 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 258 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 259 69, 69, 69, 69, 69}, 113}, /* 'E' x 113 times */ 260 {0xa5, 0xf1, 0x47, 0x74, 0xf8, 0x2b, 0xed, 0x23, 0xe4, 0x10, 0x59, 0x8f, 261 0x7e, 0xb1, 0x30, 0xe5, 0x7e, 0xd1, 0x4b, 0xbc, 0x72, 0x58, 0x58, 0x81, 262 0xbb, 0xa0, 0xa5, 0xb6, 0x15, 0x39, 0x49, 0xa1}}, 263 { { {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 264 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 265 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 266 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 267 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 268 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 269 70, 70, 70, 70, 70, 70}, 114}, /* 'F' x 114 times */ 270 {0xe6, 0xa3, 0xc9, 0x63, 0xd5, 0x28, 0x6e, 0x2d, 0xfb, 0x71, 0xdf, 0xd4, 271 0xff, 0xc2, 0xd4, 0x2b, 0x5d, 0x9b, 0x76, 0x28, 0xd2, 0xcb, 0x15, 0xc8, 272 0x81, 0x57, 0x14, 0x09, 0xc3, 0x8e, 0x92, 0xce}}, 273 { { {76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 274 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 275 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 276 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 277 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 278 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 279 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 280 76}, 127}, /* 'L' x 127 times */ 281 {0x5d, 0x18, 0xff, 0xd7, 0xbe, 0x23, 0xb2, 0xb2, 0xbd, 0xe3, 0x13, 0x12, 282 0x1c, 0x16, 0x89, 0x14, 0x4a, 0x42, 0xb4, 0x3f, 0xab, 0xc8, 0x41, 0x14, 283 0x62, 0x00, 0xb5, 0x53, 0xa7, 0xd6, 0xd5, 0x35}}, 284 { { {77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 285 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 286 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 287 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 288 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 289 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 290 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 291 77, 77}, 128}, /* 'M' x 128 times */ 292 {0x6e, 0xf0, 0xda, 0x81, 0x3d, 0x50, 0x1d, 0x31, 0xf1, 0x4a, 0xf8, 0xd9, 293 0x7d, 0xd2, 0x13, 0xdd, 0xa4, 0x46, 0x15, 0x0b, 0xb8, 0x5a, 0x8a, 0xc6, 294 0x1e, 0x3a, 0x1f, 0x21, 0x35, 0xa2, 0xbb, 0x4f}}, 295 { { {78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 296 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 297 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 298 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 299 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 300 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 301 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 302 78, 78, 78}, 129}, /* 'N' x 129 times */ 303 {0xee, 0xce, 0xd5, 0x34, 0xab, 0x14, 0x13, 0x9e, 0x8f, 0x5c, 0xb4, 0xef, 304 0xac, 0xaf, 0xc5, 0xeb, 0x1d, 0x2f, 0xe3, 0xc5, 0xca, 0x09, 0x29, 0x96, 305 0xfa, 0x84, 0xff, 0x12, 0x26, 0x6a, 0x50, 0x49}}, 306 { { {97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 308 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 309 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 310 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 311 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 312 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 313 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 314 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 317 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 318 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 319 97, 97, 97, 97}, 238}, /* 'a' x 238 times */ 320 {0xb4, 0x24, 0xe5, 0x7b, 0xa7, 0x37, 0xe3, 0xc4, 0xac, 0x35, 0x21, 0x17, 321 0x98, 0xec, 0xb9, 0xae, 0x45, 0x13, 0x24, 0xa4, 0x2c, 0x76, 0xae, 0x7d, 322 0x17, 0x75, 0x27, 0x8a, 0xaa, 0x4a, 0x48, 0x60}}, 323 { { {98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 324 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 325 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 326 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 327 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 328 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 329 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 330 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 331 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 332 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 333 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 334 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 335 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 336 98, 98, 98, 98, 98}, 239}, /* 'b' x 239 times */ 337 {0xcd, 0x93, 0xb8, 0xab, 0x6a, 0x74, 0xbd, 0x34, 0x8c, 0x43, 0x76, 0x0c, 338 0x2a, 0xd0, 0x6e, 0xd8, 0x76, 0xcf, 0xdf, 0x2a, 0x21, 0x04, 0xfb, 0xf6, 339 0x16, 0x53, 0x68, 0xf6, 0x10, 0xc3, 0xa1, 0xac}}, 340 { { {99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 341 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 342 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 343 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 344 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 345 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 346 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 347 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 348 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 349 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 350 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 351 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 352 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 353 99, 99, 99, 99, 99, 99}, 240}, /* 'c' x 240 times */ 354 {0x5f, 0x60, 0xea, 0x44, 0xb6, 0xc6, 0x9e, 0xfe, 0xfc, 0x0e, 0x6a, 0x0a, 355 0x99, 0x40, 0x1b, 0x61, 0x43, 0x58, 0xba, 0x4a, 0x0a, 0xee, 0x6b, 0x52, 356 0x10, 0xdb, 0x32, 0xd9, 0x7f, 0x12, 0xba, 0x70}}, 357 { { {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 358 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 359 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 360 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 361 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 362 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 363 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 364 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 365 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 366 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 367 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 368 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 369 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 370 48, 48, 48, 48, 48, 48, 48}, 241}, /* '0' x 241 times */ 371 {0x3c, 0xcb, 0xcf, 0x50, 0x79, 0xd5, 0xb6, 0xf5, 0xbf, 0x25, 0x07, 0xfb, 372 0x4d, 0x1f, 0xa3, 0x77, 0xc3, 0x6f, 0xe8, 0xe3, 0xc4, 0x4b, 0xf8, 0xcd, 373 0x90, 0x93, 0xf1, 0x3e, 0x08, 0x09, 0xa7, 0x69}} 374 }; 375 376 static const size_t units2_num = sizeof(data_units2) / sizeof(data_units2[0]); 377 378 379 /* 380 * Helper functions 381 */ 382 383 /** 384 * Print bin as hex 385 * 386 * @param bin binary data 387 * @param len number of bytes in bin 388 * @param hex pointer to len*2+1 bytes buffer 389 */ 390 static void 391 bin2hex (const uint8_t *bin, 392 size_t len, 393 char *hex) 394 { 395 while (len-- > 0) 396 { 397 unsigned int b1, b2; 398 b1 = (*bin >> 4) & 0xf; 399 *hex++ = (char) ((b1 > 9) ? (b1 + 'A' - 10) : (b1 + '0')); 400 b2 = *bin++ & 0xf; 401 *hex++ = (char) ((b2 > 9) ? (b2 + 'A' - 10) : (b2 + '0')); 402 } 403 *hex = 0; 404 } 405 406 407 static int 408 check_result (const char *test_name, 409 unsigned int check_num, 410 const uint8_t calculated[SHA512_256_DIGEST_SIZE], 411 const uint8_t expected[SHA512_256_DIGEST_SIZE]) 412 { 413 int failed = memcmp (calculated, expected, SHA512_256_DIGEST_SIZE); 414 check_num++; /* Print 1-based numbers */ 415 if (failed) 416 { 417 char calc_str[SHA512_256_DIGEST_SIZE * 2 + 1]; 418 char expc_str[SHA512_256_DIGEST_SIZE * 2 + 1]; 419 bin2hex (calculated, SHA512_256_DIGEST_SIZE, calc_str); 420 bin2hex (expected, SHA512_256_DIGEST_SIZE, expc_str); 421 fprintf (stderr, 422 "FAILED: %s check %u: calculated digest %s, expected digest %s.\n", 423 test_name, check_num, calc_str, expc_str); 424 fflush (stderr); 425 } 426 else if (verbose) 427 { 428 char calc_str[SHA512_256_DIGEST_SIZE * 2 + 1]; 429 bin2hex (calculated, SHA512_256_DIGEST_SIZE, calc_str); 430 printf ("PASSED: %s check %u: calculated digest %s matches " \ 431 "expected digest.\n", 432 test_name, check_num, calc_str); 433 fflush (stdout); 434 } 435 return failed ? 1 : 0; 436 } 437 438 439 /* 440 * Tests 441 */ 442 443 /* Calculated SHA-512/256 as one pass for whole data */ 444 static int 445 test1_str (void) 446 { 447 int num_failed = 0; 448 unsigned int i; 449 struct Sha512_256Ctx ctx; 450 451 for (i = 0; i < units1_num; i++) 452 { 453 uint8_t digest[SHA512_256_DIGEST_SIZE]; 454 455 MHD_SHA512_256_init (&ctx); 456 MHD_SHA512_256_update (&ctx, (const uint8_t *) data_units1[i].str_l.str, 457 data_units1[i].str_l.len); 458 MHD_SHA512_256_finish (&ctx, digest); 459 num_failed += check_result (__FUNCTION__, i, digest, 460 data_units1[i].digest); 461 } 462 return num_failed; 463 } 464 465 466 static int 467 test1_bin (void) 468 { 469 int num_failed = 0; 470 unsigned int i; 471 struct Sha512_256Ctx ctx; 472 473 for (i = 0; i < units2_num; i++) 474 { 475 uint8_t digest[SHA512_256_DIGEST_SIZE]; 476 477 MHD_SHA512_256_init (&ctx); 478 MHD_SHA512_256_update (&ctx, data_units2[i].bin_l.bin, 479 data_units2[i].bin_l.len); 480 MHD_SHA512_256_finish (&ctx, digest); 481 num_failed += check_result (__FUNCTION__, i, digest, 482 data_units2[i].digest); 483 } 484 return num_failed; 485 } 486 487 488 /* Calculated SHA-512/256 as two iterations for whole data */ 489 static int 490 test2_str (void) 491 { 492 int num_failed = 0; 493 unsigned int i; 494 struct Sha512_256Ctx ctx; 495 496 for (i = 0; i < units1_num; i++) 497 { 498 uint8_t digest[SHA512_256_DIGEST_SIZE]; 499 size_t part_s = data_units1[i].str_l.len / 4; 500 501 MHD_SHA512_256_init (&ctx); 502 MHD_SHA512_256_update (&ctx, (const uint8_t *) "", 0); 503 MHD_SHA512_256_update (&ctx, (const uint8_t *) data_units1[i].str_l.str, 504 part_s); 505 MHD_SHA512_256_update (&ctx, (const uint8_t *) "", 0); 506 MHD_SHA512_256_update (&ctx, (const uint8_t *) data_units1[i].str_l.str 507 + part_s, 508 data_units1[i].str_l.len - part_s); 509 MHD_SHA512_256_update (&ctx, (const uint8_t *) "", 0); 510 MHD_SHA512_256_finish (&ctx, digest); 511 num_failed += check_result (__FUNCTION__, i, digest, 512 data_units1[i].digest); 513 } 514 return num_failed; 515 } 516 517 518 static int 519 test2_bin (void) 520 { 521 int num_failed = 0; 522 unsigned int i; 523 struct Sha512_256Ctx ctx; 524 525 for (i = 0; i < units2_num; i++) 526 { 527 uint8_t digest[SHA512_256_DIGEST_SIZE]; 528 size_t part_s = data_units2[i].bin_l.len * 2 / 3; 529 530 MHD_SHA512_256_init (&ctx); 531 MHD_SHA512_256_update (&ctx, data_units2[i].bin_l.bin, part_s); 532 MHD_SHA512_256_update (&ctx, (const uint8_t *) "", 0); 533 MHD_SHA512_256_update (&ctx, data_units2[i].bin_l.bin + part_s, 534 data_units2[i].bin_l.len - part_s); 535 MHD_SHA512_256_finish (&ctx, digest); 536 num_failed += check_result (__FUNCTION__, i, digest, 537 data_units2[i].digest); 538 } 539 return num_failed; 540 } 541 542 543 /* Use data set number 7 as it has the longest sequence */ 544 #define DATA_POS 6 545 #define MAX_OFFSET 63 546 547 static int 548 test_unaligned (void) 549 { 550 int num_failed = 0; 551 unsigned int offset; 552 uint8_t *buf; 553 uint8_t *digest_buf; 554 struct Sha512_256Ctx ctx; 555 556 const struct data_unit2 *const tdata = data_units2 + DATA_POS; 557 558 buf = malloc (tdata->bin_l.len + MAX_OFFSET); 559 digest_buf = malloc (SHA512_256_DIGEST_SIZE + MAX_OFFSET); 560 if ((NULL == buf) || (NULL == digest_buf)) 561 exit (99); 562 563 for (offset = MAX_OFFSET; offset >= 1; --offset) 564 { 565 uint8_t *unaligned_digest; 566 uint8_t *unaligned_buf; 567 568 unaligned_buf = buf + offset; 569 memcpy (unaligned_buf, tdata->bin_l.bin, tdata->bin_l.len); 570 unaligned_digest = digest_buf + MAX_OFFSET - offset; 571 memset (unaligned_digest, 0, SHA512_256_DIGEST_SIZE); 572 573 MHD_SHA512_256_init (&ctx); 574 MHD_SHA512_256_update (&ctx, unaligned_buf, tdata->bin_l.len); 575 MHD_SHA512_256_finish (&ctx, unaligned_digest); 576 num_failed += check_result (__FUNCTION__, MAX_OFFSET - offset, 577 unaligned_digest, tdata->digest); 578 } 579 free (digest_buf); 580 free (buf); 581 return num_failed; 582 } 583 584 585 int 586 main (int argc, char *argv[]) 587 { 588 int num_failed = 0; 589 (void) has_in_name; /* Mute compiler warning. */ 590 if (has_param (argc, argv, "-v") || has_param (argc, argv, "--verbose")) 591 verbose = 1; 592 593 num_failed += test1_str (); 594 num_failed += test1_bin (); 595 596 num_failed += test2_str (); 597 num_failed += test2_bin (); 598 599 num_failed += test_unaligned (); 600 601 return num_failed ? 1 : 0; 602 }