diff --git a/src/modules/_Crypto/Makefile b/src/modules/_Crypto/Makefile index 3662457e2b069253e693d14784fbd58c8db74a9f..e4e86f9834280639a19c530ac3fd679406adf423 100644 --- a/src/modules/_Crypto/Makefile +++ b/src/modules/_Crypto/Makefile @@ -24,7 +24,7 @@ LD=/usr/ccs/bin/ld LDFLAGS= -Llib -G # -R$(SSLROOT)/lib -L$(SSLROOT)/lib #LOADLIBES=-lcrypto -lssl -OBJS=crypto.o idea.o des.o invert.o cbc.o pipe.o sha.o # md5.o md2.o +OBJS=crypto.o idea.o des.o invert.o rc4.o cbc.o pipe.o sha.o # md5.o md2.o MODS=crypto.so #MODS=crypto_crypto.so crypto_idea.so crypto_des.so crypto_invert.so \ #crypto_cbc.so crypto_pipe.so crypto_sha.so # crypto_md5.so crypto_md2.so diff --git a/src/modules/_Crypto/test_crypto.pike b/src/modules/_Crypto/test_crypto.pike index d95bc96ca4848a0515f5c40a04bce865d98268e3..50f10c4e190b73215d2e6e876399fa80f8885781 100755 --- a/src/modules/_Crypto/test_crypto.pike +++ b/src/modules/_Crypto/test_crypto.pike @@ -4,34 +4,34 @@ inherit "StdCrypt"; -#define K(a) sprintf("%{%c%}", a) - +#define K(a) hex_to_string(a) +#define H(a) string_to_hex(a) int test_des() { - string *keys = ({ K( ({0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80}) ), - K( ({0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}) ), - K( ({0x08, 0x19, 0x2a, 0x3b, 0x4c, 0x5d, 0x6e, 0x7f}) ), - K( ({0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}) ), - K( ({0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}) ) }); - - string *texts = ({ K( ({0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) ), - K( ({0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40}) ), - K( ({0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) ), - K( ({'N', 'o', 'w', ' ', 'i', 's', ' ', 't' }) ), - K( ({0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7}) ) }); - - - string *cipher = ({ K( ({0x9C, 0xC6, 0x2D, 0xF4, 0x3B, 0x6E, 0xED, 0x74 }) ), - K( ({0xA3, 0x80, 0xE0, 0x2A, 0x6B, 0xE5, 0x46, 0x96 }) ), - K( ({0x25, 0xDD, 0xAC, 0x3E, 0x96, 0x17, 0x64, 0x67 }) ), - K( ({0x3F, 0xA4, 0x0E, 0x8A, 0x98, 0x4D, 0x48, 0x15 }) ), - K( ({0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d }) ) }); - - string *no_perm = ({ K( ({0x57, 0x99, 0xF7, 0x2A, 0xD2, 0x3F, 0xAE, 0x4C }) ), - K( ({0x90, 0xE6, 0x96, 0xA2, 0xAD, 0x56, 0x50, 0x0D }) ), - K( ({0x43, 0x5C, 0xFF, 0xC5, 0x68, 0xB3, 0x70, 0x1D }) ), - K( ({0x80, 0xB5, 0x07, 0xE1, 0xE6, 0xA7, 0x47, 0x3D }) ) }); + string *keys = ({ K("0101010101010180"), + K("8001010101010101"), + K("08192a3b4c5d6e7f"), + K("0123456789abcdef"), + K("0123456789abcdef") }); + + string *texts = ({ K("0000000000000000"), + K("0000000000000040"), + K("0000000000000000"), + "Now is t", + K("0123456789abcde7") }); + + + string *cipher = ({ K("9CC62DF43B6EED74"), + K("A380E02A6BE54696"), + K("25DDAC3E96176467"), + K("3FA40E8A984D4815"), + K("c95744256a5ed31d") }); + + string *no_perm = ({ K("5799F72AD23FAE4C"), + K("90E696A2AD56500D"), + K("435CFFC568B3701D"), + K("80B507E1E6A7473D") }); int i; int err; object c; @@ -62,10 +62,9 @@ int test_des() int test_idea() { - string key = K( ({0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}) ); - string msg = K( ({0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7}) ); - string cipher = K( ({0x20, 0x11, 0xaa, 0xce, 0xf6, 0xf4, 0xbc, 0x7f}) ); + string key = K("0123456789abcdef0123456789abcdef"); + string msg = K("0123456789abcde7"); + string cipher = K("2011aacef6f4bc7f"); string gibberish; int err; @@ -137,15 +136,85 @@ int test_cbc() "Ever after ever more more more\n" "Seems I wore this face for you\n" "Far too long before\n"; + + string cipher = K("9e50920a38402aa89061d54109b150b32b9a0aa3996329ae319d31c902f9d4b1" + "49d349a90e6f500e8e99c25ed2744f757cc4d754503683a6716b0949926ea1e3" + "74146f3ab7c3db5521cc12e6d83fb1d8fbd55447a2f42cf4eb27de3fc291a0fe" + "849e152a86609dde17b06f77350c3a536502e46ef26ee98116ac272b4349d1e3" + "45bebf7b92c352897023470926a09e283996539ddcd5304d21b02049e54363df" + "0acd216f00cfcca94365d2bb23523c23d010fe68bd2aa3403f137b7ea4aef772" + "eca309e0989bff86c67a023ff5e6a75ed66b143220ee491488af79371ecdc759" + "a080ee87f69ee2831d709b0cead6f6453f97f190f33639da584bca104cdb53d3" + "e7d723d7337d48d25a68a259efa8c720653c4421b1a92bcf741dfaa720613e3f" + "00565b9df8ae7c165df3ac72a50db293d972fc914990f204fb911fe13fa320e8" + "14c493b8cdcb8aa3241eb017143431b1f780e49e11a2451abffb88e168774a0e" + "d370522ee385f3e22c824930b582c7faa8a80807e7d574676d4038c9dbb1dff9" + "aee922f4d27614972c2b169859fc95083975eeaa933ab3fe15215e27ef6a2fac" + "d00bec4dcca31d8758cc80744d97f1349cf5f93a2ff819f7794e45e0c18e6bc4" + "d0591eb3761898b01599be001d7c5fb9e2bbf310f5638f35f25c7757ea140fa9" + "3a6e4f07f0ff5b75bddcab657eae25c507511fba9d7f59769630acbf5e0c90b9" + "dc1058a771f44e8ab4ad14305a8e161b5e4e8553a4c0f69635011a193c21ad94" + "3e8c10602e82675e1941478a5c348e9897052d739b0fc07b2db3cea70d3ed0ce" + "111aaa0f4329b1ea27e84312f6c023d91541b4a07f2b769b173778e0abb6a11c" + "c3757eebea2e2eac35237db39a491f40e3160942a8a58e697b9bfd0827a9b44a" + "90169c8f7705b12d7f9373e22be95285804b39cf7bd16e4c5f9ef6414a7ef3e6" + "a1c705fa91bc0f6cdb7171bfcdfa5f78b469b8f96ab2ad54aaae3dfc09ea8d51" + "6a1f4b0f185e96dce1151b3abce6c8db0e2a70a49fe748602a00e96dbba8ecf4" + "6aab93f63f15272dd1e533c95429563cafaf5365d7085509e261b574e6e556e4" + "d06822acdcdeed56001f8a1e33e98191"); - string cipher; + string ciph = K("d265ed56e5ccc466aa13d1ff3475cbf0c9b1e317019d3b023d75ade0988f5a3b" + "a1d076700f92fade991cfd479569d454764c783805bd448ba257432b58d5d26f" + "f7b82ac49220a0cf07bfc7300c84d84742cb77b8d9f4edf78c3aaef002901175" + "f937de5f16b1426065aab6157d8027abb2ce6cab4aeb5c415ea4df9915756639" + "ddced3f7b1244c21a3bf094dac631c98f190a69b8e04ae617df607ee711e04b9" + "5b178a8686722b03b027ad8a603a1e8465fd920d06e8e7e9813b290658969146" + "f51fd22799f6ec4220f48d2477b214f8bff6068d3104925750ee49026dd00a1e" + "54ab3bfe01015d388dd09cf1bf7f52e13d2973ac6195115e196334f6c986df20" + "bdb422f7e9ffe8082dd278118e850ac64326a3279714b57b8e3a62000a7ad08f" + "e8337f61ad38c69f4262b3cb6ef52d76f39ec44b9ff18be0e9c059112f174756" + "9a2a7304a54883e3667c158355dac8ac8f43ca72e0d57fd3562fdea4c885f12b" + "c7008f4233933cfb706cfd1e2c4b22ed0b3e559cdb588b94849bbee85b6e5089" + "5adad99bd18d815300f07d5eb54962a9f5ec6dcb06650c8ce24ba8d6aa6fdae1" + "525131005593e13c5f2a35f56aca608fa50db07730ef5a7fe98e509eeab056f6" + "50c35e603343b96c46d6f659a4c8456d5f3ae62fd9b0e3cfbbe65e4c171e60e3" + "98075336a38b64b9caa2ae573ca230c173cfbec793b9fe199ea3974146adc5dd" + "90eaa279656da91b128a9c3c455d83a89f09dc673528a40fd50b5b9b0f29c9cf" + "28ed2bfbea9188c72ed7a8d33fd37cb05bc410680516883300e5eae101da4056" + "ea3b2a9308ee347b3f807aaf436b67cc20f8ac28f60d7bce8c7487a076be16f1" + "404e4da7eba398813aff64b1544c31082d0ebb74d1584d391b194a309c7d8854" + "23d5a8ec475f323795a0a522d0cc92c7e20d4c403ec8d7feb98822b199cf204d" + "9777d3400379302220ae7fdaf80295870fea2be4e404115ed9dbe50c683d0480" + "960bebde0b7ded4eee2d450cb71291b36ae0ede84e2574d6ec4d436e1ddeaa73" + "0056238300e978477103b1250c23c5a51110bc6967388f1dd6d72f0db4627b5c" + "8f841f76edf92a005fdd1a75b984d3b8"); + string gibberish; + string recovered; object c; - - c = Crypto(CBC(IDEA()->set_encrypt_key(key))->set_iv(iv)); + int err; + + write("CBC...\n"); + // c = Crypto(CBC(IDEA)->set_encrypt_key(key)->set_iv(iv)); /* correct */ + c = Crypto(CBC(IDEA)->set_iv(iv)->set_encrypt_key(key)); /* bad */ gibberish = c->crypt(msg) + c->pad(); - write("\""+ gibberish + "\"\n"); - return 0; + write("\"" + gibberish[..50] + "\"\n"); + write("\"" + H(gibberish) + "\"\n"); + if (gibberish != cipher) + { + write("Encryption failed\n"); + err++; + } + c = Crypto(CBC(IDEA)->set_decrypt_key(key)->set_iv(iv)); + recovered = c->unpad(c->crypt(gibberish)); + write("\"" + recovered[..50] + "...\"\n"); + if (recovered != msg) + { + write("Decryption failed\n"); + err++; + } + write(err ? "CBC failed!\n" : "CBC Ok.\n"); + return err; } int main()