| 1 #include <glib.h> |
|
| 2 #include <check.h> |
|
| 3 #include <stdlib.h> |
|
| 4 #include <string.h> |
|
| 5 |
|
| 6 #undef HAVE_DBUS |
|
| 7 |
|
| 8 #include "tests.h" |
|
| 9 |
|
| 10 #include "../ciphers/des3cipher.h" |
|
| 11 #include "../ciphers/descipher.h" |
|
| 12 #include "../ciphers/hmaccipher.h" |
|
| 13 #include "../ciphers/md4hash.h" |
|
| 14 #include "../ciphers/md5hash.h" |
|
| 15 #include "../ciphers/sha1hash.h" |
|
| 16 #include "../ciphers/sha256hash.h" |
|
| 17 |
|
| 18 /****************************************************************************** |
|
| 19 * DES Tests |
|
| 20 *****************************************************************************/ |
|
| 21 #define DES_TEST(in, keyz, out, len) { \ |
|
| 22 PurpleCipher *cipher = NULL; \ |
|
| 23 guchar answer[len+1]; \ |
|
| 24 gint ret = 0; \ |
|
| 25 guchar decrypt[len+1] = in; \ |
|
| 26 guchar key[8+1] = keyz;\ |
|
| 27 guchar encrypt[len+1] = out;\ |
|
| 28 \ |
|
| 29 cipher = purple_des_cipher_new(); \ |
|
| 30 purple_cipher_set_key(cipher, key, 8); \ |
|
| 31 \ |
|
| 32 ret = purple_cipher_encrypt(cipher, decrypt, len, answer, len); \ |
|
| 33 fail_unless(ret == len, NULL); \ |
|
| 34 fail_unless(memcmp(encrypt, answer, len) == 0, NULL); \ |
|
| 35 \ |
|
| 36 ret = purple_cipher_decrypt(cipher, encrypt, len, answer, len); \ |
|
| 37 fail_unless(ret == len, NULL); \ |
|
| 38 fail_unless(memcmp(decrypt, answer, len) == 0, NULL); \ |
|
| 39 \ |
|
| 40 g_object_unref(cipher); \ |
|
| 41 } |
|
| 42 |
|
| 43 START_TEST(test_des_12345678) { |
|
| 44 DES_TEST("12345678", |
|
| 45 "\x3b\x38\x98\x37\x15\x20\xf7\x5e", |
|
| 46 "\x06\x22\x05\xac\x6a\x0d\x55\xdd", |
|
| 47 8); |
|
| 48 } |
|
| 49 END_TEST |
|
| 50 |
|
| 51 START_TEST(test_des_abcdefgh) { |
|
| 52 DES_TEST("abcdefgh", |
|
| 53 "\x3b\x38\x98\x37\x15\x20\xf7\x5e", |
|
| 54 "\x62\xe0\xc6\x8c\x48\xe4\x75\xed", |
|
| 55 8); |
|
| 56 } |
|
| 57 END_TEST |
|
| 58 |
|
| 59 /****************************************************************************** |
|
| 60 * DES3 Tests |
|
| 61 * See http://csrc.nist.gov/groups/ST/toolkit/examples.html |
|
| 62 * and some NULL things I made up |
|
| 63 *****************************************************************************/ |
|
| 64 |
|
| 65 #define DES3_TEST(in, key, iv, out, len, mode) { \ |
|
| 66 PurpleCipher *cipher = NULL; \ |
|
| 67 guchar answer[len+1]; \ |
|
| 68 guchar decrypt[len+1] = in; \ |
|
| 69 guchar encrypt[len+1] = out; \ |
|
| 70 gint ret = 0; \ |
|
| 71 \ |
|
| 72 cipher = purple_des3_cipher_new(); \ |
|
| 73 purple_cipher_set_key(cipher, (guchar *)key, 24); \ |
|
| 74 purple_cipher_set_batch_mode(cipher, (mode)); \ |
|
| 75 purple_cipher_set_iv(cipher, (guchar *)iv, 8); \ |
|
| 76 \ |
|
| 77 ret = purple_cipher_encrypt(cipher, decrypt, len, answer, len); \ |
|
| 78 fail_unless(ret == len, NULL); \ |
|
| 79 fail_unless(memcmp(encrypt, answer, len) == 0, NULL); \ |
|
| 80 \ |
|
| 81 ret = purple_cipher_decrypt(cipher, encrypt, len, answer, len); \ |
|
| 82 fail_unless(ret == len, NULL); \ |
|
| 83 fail_unless(memcmp(decrypt, answer, len) == 0, NULL); \ |
|
| 84 \ |
|
| 85 g_object_unref(cipher); \ |
|
| 86 } |
|
| 87 |
|
| 88 START_TEST(test_des3_ecb_nist1) { |
|
| 89 DES3_TEST( |
|
| 90 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A" |
|
| 91 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51", |
|
| 92 "\x01\x23\x45\x67\x89\xAB\xCD\xEF" |
|
| 93 "\x23\x45\x67\x89\xAB\xCD\xEF\x01" |
|
| 94 "\x45\x67\x89\xAB\xCD\xEF\x01\x23", |
|
| 95 "00000000", /* ignored */ |
|
| 96 "\x71\x47\x72\xF3\x39\x84\x1D\x34\x26\x7F\xCC\x4B\xD2\x94\x9C\xC3" |
|
| 97 "\xEE\x11\xC2\x2A\x57\x6A\x30\x38\x76\x18\x3F\x99\xC0\xB6\xDE\x87", |
|
| 98 32, |
|
| 99 PURPLE_CIPHER_BATCH_MODE_ECB); |
|
| 100 } |
|
| 101 END_TEST |
|
| 102 |
|
| 103 START_TEST(test_des3_ecb_nist2) { |
|
| 104 DES3_TEST( |
|
| 105 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A" |
|
| 106 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51", |
|
| 107 "\x01\x23\x45\x67\x89\xAB\xCD\xEF" |
|
| 108 "\x23\x45\x67\x89\xAB\xCD\xEF\x01" |
|
| 109 "\x01\x23\x45\x67\x89\xAB\xCD\xEF", |
|
| 110 "00000000", /* ignored */ |
|
| 111 "\x06\xED\xE3\xD8\x28\x84\x09\x0A\xFF\x32\x2C\x19\xF0\x51\x84\x86" |
|
| 112 "\x73\x05\x76\x97\x2A\x66\x6E\x58\xB6\xC8\x8C\xF1\x07\x34\x0D\x3D", |
|
| 113 32, |
|
| 114 PURPLE_CIPHER_BATCH_MODE_ECB); |
|
| 115 } |
|
| 116 END_TEST |
|
| 117 |
|
| 118 START_TEST(test_des3_ecb_null_key) { |
|
| 119 DES3_TEST( |
|
| 120 "\x16\xf4\xb3\x77\xfd\x4b\x9e\xca", |
|
| 121 "\x38\x00\x88\x6a\xef\xcb\x00\xad" |
|
| 122 "\x5d\xe5\x29\x00\x7d\x98\x64\x4c" |
|
| 123 "\x86\x00\x7b\xd3\xc7\x00\x7b\x32", |
|
| 124 "00000000", /* ignored */ |
|
| 125 "\xc0\x60\x30\xa1\xb7\x25\x42\x44", |
|
| 126 8, |
|
| 127 PURPLE_CIPHER_BATCH_MODE_ECB); |
|
| 128 } |
|
| 129 END_TEST |
|
| 130 |
|
| 131 START_TEST(test_des3_ecb_null_text) { |
|
| 132 DES3_TEST( |
|
| 133 "\x65\x73\x34\xc1\x19\x00\x79\x65", |
|
| 134 "\x32\x64\xda\x10\x13\x6a\xfe\x1e" |
|
| 135 "\x37\x54\xd1\x2c\x41\x04\x10\x40" |
|
| 136 "\xaf\x1c\x75\x2b\x51\x3a\x03\xf5", |
|
| 137 "00000000", /* ignored */ |
|
| 138 "\xe5\x80\xf6\x12\xf8\x4e\xd9\x6c", |
|
| 139 8, |
|
| 140 PURPLE_CIPHER_BATCH_MODE_ECB); |
|
| 141 } |
|
| 142 END_TEST |
|
| 143 |
|
| 144 START_TEST(test_des3_ecb_null_key_and_text) { |
|
| 145 DES3_TEST( |
|
| 146 "\xdf\x7f\x00\x92\xe7\xc1\x49\xd2", |
|
| 147 "\x0e\x41\x00\xc4\x8b\xf0\x6e\xa1" |
|
| 148 "\x66\x49\x42\x63\x22\x00\xf0\x99" |
|
| 149 "\x6b\x22\xc1\x37\x9c\x00\xe4\x8f", |
|
| 150 "00000000", /* ignored */ |
|
| 151 "\x73\xd8\x1f\x1f\x50\x01\xe4\x79", |
|
| 152 8, |
|
| 153 PURPLE_CIPHER_BATCH_MODE_ECB); |
|
| 154 } |
|
| 155 END_TEST |
|
| 156 |
|
| 157 START_TEST(test_des3_cbc_nist1) { |
|
| 158 DES3_TEST( |
|
| 159 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A" |
|
| 160 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51", |
|
| 161 "\x01\x23\x45\x67\x89\xAB\xCD\xEF" |
|
| 162 "\x23\x45\x67\x89\xAB\xCD\xEF\x01" |
|
| 163 "\x45\x67\x89\xAB\xCD\xEF\x01\x23", |
|
| 164 "\xF6\x9F\x24\x45\xDF\x4F\x9B\x17", |
|
| 165 "\x20\x79\xC3\xD5\x3A\xA7\x63\xE1\x93\xB7\x9E\x25\x69\xAB\x52\x62" |
|
| 166 "\x51\x65\x70\x48\x1F\x25\xB5\x0F\x73\xC0\xBD\xA8\x5C\x8E\x0D\xA7", |
|
| 167 32, |
|
| 168 PURPLE_CIPHER_BATCH_MODE_CBC); |
|
| 169 } |
|
| 170 END_TEST |
|
| 171 |
|
| 172 START_TEST(test_des3_cbc_nist2) { |
|
| 173 DES3_TEST( |
|
| 174 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A" |
|
| 175 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51", |
|
| 176 "\x01\x23\x45\x67\x89\xAB\xCD\xEF" |
|
| 177 "\x23\x45\x67\x89\xAB\xCD\xEF\x01" |
|
| 178 "\x01\x23\x45\x67\x89\xAB\xCD\xEF", |
|
| 179 "\xF6\x9F\x24\x45\xDF\x4F\x9B\x17", |
|
| 180 "\x74\x01\xCE\x1E\xAB\x6D\x00\x3C\xAF\xF8\x4B\xF4\x7B\x36\xCC\x21" |
|
| 181 "\x54\xF0\x23\x8F\x9F\xFE\xCD\x8F\x6A\xCF\x11\x83\x92\xB4\x55\x81", |
|
| 182 32, |
|
| 183 PURPLE_CIPHER_BATCH_MODE_CBC); |
|
| 184 } |
|
| 185 END_TEST |
|
| 186 |
|
| 187 START_TEST(test_des3_cbc_null_key) { |
|
| 188 DES3_TEST( |
|
| 189 "\x16\xf4\xb3\x77\xfd\x4b\x9e\xca", |
|
| 190 "\x38\x00\x88\x6a\xef\xcb\x00\xad" |
|
| 191 "\x5d\xe5\x29\x00\x7d\x98\x64\x4c" |
|
| 192 "\x86\x00\x7b\xd3\xc7\x00\x7b\x32", |
|
| 193 "\x31\x32\x33\x34\x35\x36\x37\x38", |
|
| 194 "\x52\xe7\xde\x96\x39\x87\x87\xdb", |
|
| 195 8, |
|
| 196 PURPLE_CIPHER_BATCH_MODE_CBC); |
|
| 197 } |
|
| 198 END_TEST |
|
| 199 |
|
| 200 START_TEST(test_des3_cbc_null_text) { |
|
| 201 DES3_TEST( |
|
| 202 "\x65\x73\x34\xc1\x19\x00\x79\x65", |
|
| 203 "\x32\x64\xda\x10\x13\x6a\xfe\x1e" |
|
| 204 "\x37\x54\xd1\x2c\x41\x04\x10\x40" |
|
| 205 "\xaf\x1c\x75\x2b\x51\x3a\x03\xf5", |
|
| 206 "\x7C\xAF\x0D\x57\x1E\x57\x10\xDA", |
|
| 207 "\x40\x12\x0e\x00\x85\xff\x6c\xc2", |
|
| 208 8, |
|
| 209 PURPLE_CIPHER_BATCH_MODE_CBC); |
|
| 210 } |
|
| 211 END_TEST |
|
| 212 |
|
| 213 START_TEST(test_des3_cbc_null_key_and_text) { |
|
| 214 DES3_TEST( |
|
| 215 "\xdf\x7f\x00\x92\xe7\xc1\x49\xd2", |
|
| 216 "\x0e\x41\x00\xc4\x8b\xf0\x6e\xa1" |
|
| 217 "\x66\x49\x42\x63\x22\x00\xf0\x99" |
|
| 218 "\x6b\x22\xc1\x37\x9c\x00\xe4\x8f", |
|
| 219 "\x01\x19\x0D\x2c\x40\x67\x89\x67", |
|
| 220 "\xa7\xc1\x10\xbe\x9b\xd5\x8a\x67", |
|
| 221 8, |
|
| 222 PURPLE_CIPHER_BATCH_MODE_CBC); |
|
| 223 } |
|
| 224 END_TEST |
|
| 225 |
|
| 226 /****************************************************************************** |
|
| 227 * HMAC Tests |
|
| 228 * See RFC2202 and some other NULL tests I made up |
|
| 229 *****************************************************************************/ |
|
| 230 |
|
| 231 #define HMAC_TEST(data, data_len, key, key_len, type, digest) { \ |
|
| 232 PurpleCipher *cipher = NULL; \ |
|
| 233 PurpleHash *hash = NULL; \ |
|
| 234 gchar cdigest[41]; \ |
|
| 235 gboolean ret = FALSE; \ |
|
| 236 \ |
|
| 237 hash = purple_##type##_hash_new(); \ |
|
| 238 cipher = purple_hmac_cipher_new(hash); \ |
|
| 239 purple_cipher_set_key(cipher, (guchar *)key, (key_len)); \ |
|
| 240 \ |
|
| 241 purple_cipher_append(cipher, (guchar *)(data), (data_len)); \ |
|
| 242 ret = purple_cipher_digest_to_str(cipher, cdigest, sizeof(cdigest)); \ |
|
| 243 \ |
|
| 244 fail_unless(ret == TRUE, NULL); \ |
|
| 245 fail_unless(strcmp((digest), cdigest) == 0, NULL); \ |
|
| 246 \ |
|
| 247 g_object_unref(cipher); \ |
|
| 248 g_object_unref(hash); \ |
|
| 249 } |
|
| 250 |
|
| 251 /* HMAC MD5 */ |
|
| 252 |
|
| 253 START_TEST(test_hmac_md5_Hi) { |
|
| 254 HMAC_TEST("Hi There", |
|
| 255 8, |
|
| 256 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", |
|
| 257 16, |
|
| 258 md5, |
|
| 259 "9294727a3638bb1c13f48ef8158bfc9d"); |
|
| 260 } |
|
| 261 END_TEST |
|
| 262 |
|
| 263 START_TEST(test_hmac_md5_what) { |
|
| 264 HMAC_TEST("what do ya want for nothing?", |
|
| 265 28, |
|
| 266 "Jefe", |
|
| 267 4, |
|
| 268 md5, |
|
| 269 "750c783e6ab0b503eaa86e310a5db738"); |
|
| 270 } |
|
| 271 END_TEST |
|
| 272 |
|
| 273 START_TEST(test_hmac_md5_dd) { |
|
| 274 HMAC_TEST("\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 275 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 276 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 277 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 278 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", |
|
| 279 50, |
|
| 280 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", |
|
| 281 16, |
|
| 282 md5, |
|
| 283 "56be34521d144c88dbb8c733f0e8b3f6"); |
|
| 284 } |
|
| 285 END_TEST |
|
| 286 |
|
| 287 START_TEST(test_hmac_md5_cd) { |
|
| 288 HMAC_TEST("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 289 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 290 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 291 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 292 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", |
|
| 293 50, |
|
| 294 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" |
|
| 295 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" |
|
| 296 "\x15\x16\x17\x18\x19", |
|
| 297 25, |
|
| 298 md5, |
|
| 299 "697eaf0aca3a3aea3a75164746ffaa79"); |
|
| 300 } |
|
| 301 END_TEST |
|
| 302 |
|
| 303 START_TEST(test_hmac_md5_truncation) { |
|
| 304 HMAC_TEST("Test With Truncation", |
|
| 305 20, |
|
| 306 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", |
|
| 307 16, |
|
| 308 md5, |
|
| 309 "56461ef2342edc00f9bab995690efd4c"); |
|
| 310 } |
|
| 311 END_TEST |
|
| 312 |
|
| 313 START_TEST(test_hmac_md5_large_key) { |
|
| 314 HMAC_TEST("Test Using Larger Than Block-Size Key - Hash Key First", |
|
| 315 54, |
|
| 316 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 317 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 318 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 319 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 320 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 321 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 322 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 323 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", |
|
| 324 80, |
|
| 325 md5, |
|
| 326 "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd"); |
|
| 327 } |
|
| 328 END_TEST |
|
| 329 |
|
| 330 START_TEST(test_hmac_md5_large_key_and_data) { |
|
| 331 HMAC_TEST("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", |
|
| 332 73, |
|
| 333 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 334 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 335 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 336 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 337 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 338 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 339 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 340 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", |
|
| 341 80, |
|
| 342 md5, |
|
| 343 "6f630fad67cda0ee1fb1f562db3aa53e"); |
|
| 344 } |
|
| 345 END_TEST |
|
| 346 |
|
| 347 START_TEST(test_hmac_md5_null_key) { |
|
| 348 HMAC_TEST("Hi There", |
|
| 349 8, |
|
| 350 "\x0a\x0b\x00\x0d\x0e\x0f\x1a\x2f\x0b\x0b" |
|
| 351 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b", |
|
| 352 20, |
|
| 353 md5, |
|
| 354 "597bfd644b797a985561eeb03a169e59"); |
|
| 355 } |
|
| 356 END_TEST |
|
| 357 |
|
| 358 START_TEST(test_hmac_md5_null_text) { |
|
| 359 HMAC_TEST("Hi\x00There", |
|
| 360 8, |
|
| 361 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" |
|
| 362 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", |
|
| 363 20, |
|
| 364 md5, |
|
| 365 "70be8e1b7b50dfcc335d6cd7992c564f"); |
|
| 366 } |
|
| 367 END_TEST |
|
| 368 |
|
| 369 START_TEST(test_hmac_md5_null_key_and_text) { |
|
| 370 HMAC_TEST("Hi\x00Th\x00re", |
|
| 371 8, |
|
| 372 "\x0c\x0d\x00\x0f\x10\x1a\x3a\x3a\xe6\x34" |
|
| 373 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b", |
|
| 374 20, |
|
| 375 md5, |
|
| 376 "b31bcbba35a33a067cbba9131cba4889"); |
|
| 377 } |
|
| 378 END_TEST |
|
| 379 |
|
| 380 /* HMAC SHA1 */ |
|
| 381 |
|
| 382 START_TEST(test_hmac_sha1_Hi) { |
|
| 383 HMAC_TEST("Hi There", |
|
| 384 8, |
|
| 385 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" |
|
| 386 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", |
|
| 387 20, |
|
| 388 sha1, |
|
| 389 "b617318655057264e28bc0b6fb378c8ef146be00"); |
|
| 390 } |
|
| 391 END_TEST |
|
| 392 |
|
| 393 START_TEST(test_hmac_sha1_what) { |
|
| 394 HMAC_TEST("what do ya want for nothing?", |
|
| 395 28, |
|
| 396 "Jefe", |
|
| 397 4, |
|
| 398 sha1, |
|
| 399 "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79"); |
|
| 400 } |
|
| 401 END_TEST |
|
| 402 |
|
| 403 START_TEST(test_hmac_sha1_dd) { |
|
| 404 HMAC_TEST("\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 405 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 406 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 407 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" |
|
| 408 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", |
|
| 409 50, |
|
| 410 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 411 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", |
|
| 412 20, |
|
| 413 sha1, |
|
| 414 "125d7342b9ac11cd91a39af48aa17b4f63f175d3"); |
|
| 415 } |
|
| 416 END_TEST |
|
| 417 |
|
| 418 START_TEST(test_hmac_sha1_cd) { |
|
| 419 HMAC_TEST("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 420 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 421 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 422 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" |
|
| 423 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", |
|
| 424 50, |
|
| 425 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" |
|
| 426 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" |
|
| 427 "\x15\x16\x17\x18\x19", |
|
| 428 25, |
|
| 429 sha1, |
|
| 430 "4c9007f4026250c6bc8414f9bf50c86c2d7235da"); |
|
| 431 } |
|
| 432 END_TEST |
|
| 433 |
|
| 434 START_TEST(test_hmac_sha1_truncation) { |
|
| 435 HMAC_TEST("Test With Truncation", |
|
| 436 20, |
|
| 437 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" |
|
| 438 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", |
|
| 439 20, |
|
| 440 sha1, |
|
| 441 "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04"); |
|
| 442 } |
|
| 443 END_TEST |
|
| 444 |
|
| 445 START_TEST(test_hmac_sha1_large_key) { |
|
| 446 HMAC_TEST("Test Using Larger Than Block-Size Key - Hash Key First", |
|
| 447 54, |
|
| 448 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 449 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 450 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 451 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 452 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 453 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 454 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 455 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", |
|
| 456 80, |
|
| 457 sha1, |
|
| 458 "aa4ae5e15272d00e95705637ce8a3b55ed402112"); |
|
| 459 } |
|
| 460 END_TEST |
|
| 461 |
|
| 462 START_TEST(test_hmac_sha1_large_key_and_data) { |
|
| 463 HMAC_TEST("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", |
|
| 464 73, |
|
| 465 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 466 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 467 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 468 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 469 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 470 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 471 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" |
|
| 472 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", |
|
| 473 80, |
|
| 474 sha1, |
|
| 475 "e8e99d0f45237d786d6bbaa7965c7808bbff1a91"); |
|
| 476 } |
|
| 477 END_TEST |
|
| 478 |
|
| 479 START_TEST(test_hmac_sha1_null_key) { |
|
| 480 HMAC_TEST("Hi There", |
|
| 481 8, |
|
| 482 "\x0a\x0b\x00\x0d\x0e\x0f\x1a\x2f\x0b\x0b" |
|
| 483 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b", |
|
| 484 20, |
|
| 485 sha1, |
|
| 486 "eb62a2e0e33d300be669c52aab3f591bc960aac5"); |
|
| 487 } |
|
| 488 END_TEST |
|
| 489 |
|
| 490 START_TEST(test_hmac_sha1_null_text) { |
|
| 491 HMAC_TEST("Hi\x00There", |
|
| 492 8, |
|
| 493 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" |
|
| 494 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", |
|
| 495 20, |
|
| 496 sha1, |
|
| 497 "31ca58d849e971e418e3439de2c6f83144b6abb7"); |
|
| 498 } |
|
| 499 END_TEST |
|
| 500 |
|
| 501 START_TEST(test_hmac_sha1_null_key_and_text) { |
|
| 502 HMAC_TEST("Hi\x00Th\x00re", |
|
| 503 8, |
|
| 504 "\x0c\x0d\x00\x0f\x10\x1a\x3a\x3a\xe6\x34" |
|
| 505 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b", |
|
| 506 20, |
|
| 507 sha1, |
|
| 508 "e6b8e2fede87aa09dcb13e554df1435e056eae36"); |
|
| 509 } |
|
| 510 END_TEST |
|
| 511 |
|
| 512 /****************************************************************************** |
|
| 513 * Suite |
|
| 514 *****************************************************************************/ |
|
| 515 Suite * |
|
| 516 cipher_suite(void) { |
|
| 517 Suite *s = suite_create("Cipher Suite"); |
|
| 518 TCase *tc = NULL; |
|
| 519 |
|
| 520 /* md4 tests */ |
|
| 521 tc = tcase_create("MD4"); |
|
| 522 tcase_add_test(tc, test_md4_empty_string); |
|
| 523 tcase_add_test(tc, test_md4_a); |
|
| 524 tcase_add_test(tc, test_md4_abc); |
|
| 525 tcase_add_test(tc, test_md4_message_digest); |
|
| 526 tcase_add_test(tc, test_md4_a_to_z); |
|
| 527 tcase_add_test(tc, test_md4_A_to_Z_a_to_z_0_to_9); |
|
| 528 tcase_add_test(tc, test_md4_1_to_0_8_times); |
|
| 529 suite_add_tcase(s, tc); |
|
| 530 |
|
| 531 /* md5 tests */ |
|
| 532 tc = tcase_create("MD5"); |
|
| 533 tcase_add_test(tc, test_md5_empty_string); |
|
| 534 tcase_add_test(tc, test_md5_a); |
|
| 535 tcase_add_test(tc, test_md5_abc); |
|
| 536 tcase_add_test(tc, test_md5_message_digest); |
|
| 537 tcase_add_test(tc, test_md5_a_to_z); |
|
| 538 tcase_add_test(tc, test_md5_A_to_Z_a_to_z_0_to_9); |
|
| 539 tcase_add_test(tc, test_md5_1_to_0_8_times); |
|
| 540 suite_add_tcase(s, tc); |
|
| 541 |
|
| 542 /* sha1 tests */ |
|
| 543 tc = tcase_create("SHA1"); |
|
| 544 tcase_add_test(tc, test_sha1_empty_string); |
|
| 545 tcase_add_test(tc, test_sha1_a); |
|
| 546 tcase_add_test(tc, test_sha1_abc); |
|
| 547 tcase_add_test(tc, test_sha1_abcd_gibberish); |
|
| 548 tcase_add_test(tc, test_sha1_1000_as_1000_times); |
|
| 549 suite_add_tcase(s, tc); |
|
| 550 |
|
| 551 /* sha256 tests */ |
|
| 552 tc = tcase_create("SHA256"); |
|
| 553 tcase_add_test(tc, test_sha256_empty_string); |
|
| 554 tcase_add_test(tc, test_sha256_a); |
|
| 555 tcase_add_test(tc, test_sha256_abc); |
|
| 556 tcase_add_test(tc, test_sha256_abcd_gibberish); |
|
| 557 tcase_add_test(tc, test_sha256_1000_as_1000_times); |
|
| 558 suite_add_tcase(s, tc); |
|
| 559 |
|
| 560 /* des tests */ |
|
| 561 tc = tcase_create("DES"); |
|
| 562 tcase_add_test(tc, test_des_12345678); |
|
| 563 tcase_add_test(tc, test_des_abcdefgh); |
|
| 564 suite_add_tcase(s, tc); |
|
| 565 |
|
| 566 /* des3 ecb tests */ |
|
| 567 tc = tcase_create("DES3 ECB"); |
|
| 568 tcase_add_test(tc, test_des3_ecb_nist1); |
|
| 569 tcase_add_test(tc, test_des3_ecb_nist2); |
|
| 570 tcase_add_test(tc, test_des3_ecb_null_key); |
|
| 571 tcase_add_test(tc, test_des3_ecb_null_text); |
|
| 572 tcase_add_test(tc, test_des3_ecb_null_key_and_text); |
|
| 573 suite_add_tcase(s, tc); |
|
| 574 /* des3 cbc tests */ |
|
| 575 tc = tcase_create("DES3 CBC"); |
|
| 576 tcase_add_test(tc, test_des3_cbc_nist1); |
|
| 577 tcase_add_test(tc, test_des3_cbc_nist2); |
|
| 578 tcase_add_test(tc, test_des3_cbc_null_key); |
|
| 579 tcase_add_test(tc, test_des3_cbc_null_text); |
|
| 580 tcase_add_test(tc, test_des3_cbc_null_key_and_text); |
|
| 581 suite_add_tcase(s, tc); |
|
| 582 |
|
| 583 /* hmac tests */ |
|
| 584 tc = tcase_create("HMAC"); |
|
| 585 tcase_add_test(tc, test_hmac_md5_Hi); |
|
| 586 tcase_add_test(tc, test_hmac_md5_what); |
|
| 587 tcase_add_test(tc, test_hmac_md5_dd); |
|
| 588 tcase_add_test(tc, test_hmac_md5_cd); |
|
| 589 tcase_add_test(tc, test_hmac_md5_truncation); |
|
| 590 tcase_add_test(tc, test_hmac_md5_large_key); |
|
| 591 tcase_add_test(tc, test_hmac_md5_large_key_and_data); |
|
| 592 tcase_add_test(tc, test_hmac_md5_null_key); |
|
| 593 tcase_add_test(tc, test_hmac_md5_null_text); |
|
| 594 tcase_add_test(tc, test_hmac_md5_null_key_and_text); |
|
| 595 tcase_add_test(tc, test_hmac_sha1_Hi); |
|
| 596 tcase_add_test(tc, test_hmac_sha1_what); |
|
| 597 tcase_add_test(tc, test_hmac_sha1_dd); |
|
| 598 tcase_add_test(tc, test_hmac_sha1_cd); |
|
| 599 tcase_add_test(tc, test_hmac_sha1_truncation); |
|
| 600 tcase_add_test(tc, test_hmac_sha1_large_key); |
|
| 601 tcase_add_test(tc, test_hmac_sha1_large_key_and_data); |
|
| 602 tcase_add_test(tc, test_hmac_sha1_null_key); |
|
| 603 tcase_add_test(tc, test_hmac_sha1_null_text); |
|
| 604 tcase_add_test(tc, test_hmac_sha1_null_key_and_text); |
|
| 605 suite_add_tcase(s, tc); |
|
| 606 |
|
| 607 return s; |
|
| 608 } |
|
| 609 |
|
| 610 |
|