+#include "tut/tut.hpp"
+
+#include "stg/blowfish.h"
+
+namespace
+{
+
+bool equalCtx(const BLOWFISH_CTX & a, const BLOWFISH_CTX & b)
+{
+ for (size_t i = 0; i < sizeof(a.P); ++i)
+ if (a.P[i] != b.P[i]) {
+ //printf("Failed for P at %d: 0%x != 0%x\n", i, a.P[i], b.P[i]);
+ return false;
+ }
+ for (size_t i = 0; i < 4; ++i)
+ for (size_t j = 0; j < 256; ++j)
+ if (a.S[i][j] != b.S[i][j]) {
+ //printf("Failed for S at %d, %d: 0%x != 0%x\n", i, j, a.S[i][j], b.S[i][j]);
+
+ return false;
+ }
+ return true;
+}
+
+bool equalString(const char* a, const char* b, size_t length)
+{
+ bool res = true;
+ for (size_t i = 0; i < length; ++i)
+ if (a[i] != b[i]) {
+ //printf("Failed at pos %d: %hhu != %hhu\n", i, a[i], b[i]);
+ res = false;
+ }
+ return res;
+}
+
+const BLOWFISH_CTX testCtx =
+{
+ {
+ 0x84ddf841, 0xbbdc17f,
+ 0x3dd821af, 0x66fdf0c,
+ 0x426a2fff, 0x30223f2c,
+ 0x8325f1a3, 0xf5c99ab9,
+ 0x417ce6da, 0xba4c9637,
+ 0xd226c646, 0xe50ea3b5,
+ 0x3860f82c, 0x1565ecc8,
+ 0xf4461621, 0x68058dd4,
+ 0x217da3bb, 0xd6cd3ddc,
+ },
+ {
+ {
+ 0x72f9dc5c, 0xf701a2e4, 0xf30e3ec3, 0x2f1c9683,
+ 0x985b9801, 0xfb28c4f5, 0xf6f5c777, 0xfa7b5b24,
+ 0xd761c693, 0xf53e1484, 0x8622da13, 0xb240d1b4,
+ 0xd1bc58f8, 0x43f462ef, 0x6a4e97a3, 0xb0619beb,
+ 0xff07b462, 0xd390c3b9, 0xe91f2840, 0x869566ae,
+ 0xfebd249c, 0x567002c1, 0x342e0e8e, 0x31b01687,
+ 0xd7e3a5bd, 0xa933de2e, 0xb4ef05f2, 0x33e4919f,
+ 0x724e8b3e, 0xc6b9d44f, 0x849b1674, 0x90758946,
+ 0x295986fa, 0xa2e11855, 0xf2099a4e, 0x42ed46f9,
+ 0x597cbb6d, 0xc3691952, 0x408f873e, 0xdee0d6cf,
+ 0x6570a45d, 0xc6a24b81, 0x2d3a1c24, 0x4a2edda4,
+ 0x443dcfa5, 0x5971a9a5, 0xfd2258c0, 0x72c36b37,
+ 0xf8696ce, 0xf2e84f7, 0xc543bf6d, 0x352818c5,
+ 0xdc01f156, 0xc67bfce5, 0xdadf0cbf, 0x6194b6a9,
+ 0xdb3cc22f, 0xc7873bcb, 0x9b9e622c, 0xa7869810,
+ 0xcb1ba91, 0x137b1bf5, 0x3e71252b, 0x5229f33e,
+ 0x30ded88f, 0x5763ef1f, 0xee7f01b8, 0xdac73dee,
+ 0x2f4d1efb, 0x5f518b97, 0xe7c7d61e, 0x9d5ca3f3,
+ 0xa196c020, 0x74634a7b, 0xdd1d0042, 0x454268aa,
+ 0x5c610ac8, 0x277e8d2c, 0x4a8b4ee8, 0xf959f5a8,
+ 0xc0c63a7e, 0xea9f2ed7, 0xaab4a699, 0x6f872358,
+ 0x3927189a, 0x23ae56ac, 0xcfa5b09c, 0x9751e84,
+ 0x7ec68c4b, 0x99f9502b, 0x886e764, 0x957c89a4,
+ 0x48c5ddb0, 0x9f4d5b7e, 0xa84d5c52, 0xf2ae7bde,
+ 0x75e6ddaf, 0xc2b45798, 0x5f846059, 0x5bf85e2a,
+ 0x5f6c4382, 0xb621465a, 0x5bf2977c, 0x2c1eb17a,
+ 0xbf3e5b18, 0x5f0bdcb7, 0xd6195c47, 0x2c61ec83,
+ 0x2315c2da, 0x95195c86, 0x4c4f9855, 0xc5e3787d,
+ 0xe5014918, 0x714dd230, 0xd2abd926, 0x9229a99e,
+ 0x8306695a, 0x66f7bb54, 0x544affdc, 0x84aa830c,
+ 0xad8c8db6, 0x48b29b2, 0xcf33d204, 0xc78ac51d,
+ 0xacb18e60, 0x49b516ac, 0x614e2887, 0xe39e1a7c,
+ 0xdb1f9652, 0x8c8378a3, 0x8cbe2070, 0x773fe7f,
+ 0x899e1922, 0x12dd7b8b, 0xccf8198d, 0xcc48faff,
+ 0x30ca9cab, 0x9ebd7129, 0xf254b601, 0x8ac97b38,
+ 0x504804d1, 0x3568fbbe, 0x9a40bc99, 0x9c23761b,
+ 0x28e26904, 0xe396e583, 0x2f2c4053, 0xa45caf19,
+ 0xb7996794, 0x4c825669, 0x3f07f001, 0xf24a084b,
+ 0x884888fd, 0xa7fc71f4, 0x21abeff4, 0x719ecba6,
+ 0x90104162, 0x50c2b5f1, 0x86135070, 0xc9523fc,
+ 0x9c219eca, 0xc12ef7f0, 0x6b3f6b8c, 0x288ee9ef,
+ 0xe722f758, 0x229c0bac, 0x3d934d09, 0x4a5cf131,
+ 0x14189fc9, 0x10c8aa2e, 0x74e9fe96, 0xcfc110d4,
+ 0x35202bfb, 0x90bc66f1, 0x5d4c6616, 0x498927ea,
+ 0x581934cc, 0x43e712a, 0x5f095b3c, 0xea0e1406,
+ 0xa4921c29, 0xe8a306f0, 0xfec369ef, 0x992921c1,
+ 0xcdc5abb6, 0x3ebd83fa, 0x8a7f16e9, 0xfaf73bb3,
+ 0x3e8181, 0x34fc47c9, 0xdb92d725, 0x8b40795,
+ 0x14273fa0, 0xd704e4f8, 0xd3435939, 0x3450c0a8,
+ 0xce721627, 0x10d4a466, 0x7bc1a724, 0x5efc63b,
+ 0x153ae5ef, 0xa0aa6945, 0xe5a3b8c9, 0xf0bec5ba,
+ 0xde02619e, 0xd155e989, 0xf5e3a551, 0x951d9d74,
+ 0x41544875, 0x6aa455e8, 0xda28a584, 0x72d17a11,
+ 0x417c066c, 0xe6f82546, 0xbd258cd0, 0x8a3979b4,
+ 0xe896e0d9, 0x76871921, 0x709842f1, 0x5dd3756b,
+ 0x2ebe8dfb, 0x81ab8b0d, 0x4c9d635, 0x3fd75cf2,
+ 0x37876ef8, 0x1c5a806f, 0x96de1b30, 0x2a8e971a,
+ 0x89ac843a, 0x96c23371, 0x95ee2343, 0xffb1614f,
+ 0x1116003c, 0x25b45917, 0xad0783c2, 0x4662ce95,
+ 0xfc751ade, 0xa13e75ae, 0xc75010c3, 0x9170a859,
+ 0x86ca62d6, 0x3acb094f, 0x87349773, 0x2765ba9b,
+ 0xaaebd756, 0x7b3d6693, 0x92193a80, 0x765f4eb8,
+ 0x42f88c21, 0x27ff9f9b, 0x9db88664, 0xe302e6d9,
+ 0x2e8fb36e, 0xfc58b9bc, 0x3a649297, 0x76876ce1
+ },
+ {
+ 0x8e3ea6e4, 0x1dd37803, 0xffd051c0, 0xec395f57,
+ 0x2eae16f7, 0x821505b4, 0x7ab81f78, 0xf2c88c63,
+ 0xa7655b7c, 0xc436644, 0x18e67d7c, 0xa5c8e283,
+ 0x6e44a66e, 0xe7547024, 0x280ce7d0, 0x8ec06da2,
+ 0x93683af4, 0x5e39165c, 0x77721743, 0x7b9d837e,
+ 0x32fed2ef, 0x9726079b, 0x98a579a, 0xc51b8dc5,
+ 0xedd45d61, 0xbf70e897, 0x5c8187f8, 0x83909156,
+ 0x469c6dc2, 0xf6fb34f5, 0xf14e0646, 0x5e988165,
+ 0x3dea4f92, 0x51b2d53c, 0xb543c4e, 0xae450075,
+ 0xf9aaffee, 0x4bee49e7, 0x60ffe4f6, 0x395318e3,
+ 0x8acb2b46, 0x6df56797, 0x52c9d67, 0x1ffd024a,
+ 0x2499d763, 0x951c8244, 0x560ceb0, 0x5d0490a2,
+ 0x7208da46, 0xfe40f9d7, 0xd2b96165, 0x696f3072,
+ 0x2ba20225, 0x8758c6b4, 0x71f59b60, 0xd84d9bd3,
+ 0x8bc05ab, 0xa09fa33, 0xd14769cf, 0x238c630a,
+ 0x5635a041, 0x9af1f0bc, 0xa347515, 0xa90ac427,
+ 0xdbcbc880, 0x9434490c, 0xcb041e0f, 0x4101f58,
+ 0xcb057a30, 0x721e4a62, 0x8d59b73, 0x76d1c883,
+ 0x724d675, 0x57833e73, 0xf65e3cc7, 0x4025c165,
+ 0x61caa9fa, 0xecf3ffad, 0xc9ccba59, 0xbf1e78c0,
+ 0xe7c9f808, 0x5f3ae0ad, 0xe338467, 0x5baf328,
+ 0x77ea9442, 0x232d063c, 0x44c1f91f, 0xcfaaa06,
+ 0xcd95c059, 0xf92f3f43, 0xd105984a, 0x4ea4eac2,
+ 0xdb17fb06, 0xed567697, 0x896b421d, 0x40c3b884,
+ 0xf3258ace, 0xbdb93689, 0xb75abba5, 0xc69f182c,
+ 0x5798ae31, 0xff3ba2e7, 0x1ef383b4, 0xc689850c,
+ 0xa0e850e, 0x7478b55d, 0xf0cd99e7, 0x78128b44,
+ 0x99139a31, 0x191a4f69, 0x4dcb9de1, 0x80d9512c,
+ 0x6dd3001a, 0xcb6f465e, 0xaa760561, 0x19cc07b3,
+ 0x383c9dc4, 0x620f19d8, 0xbc621d05, 0x888061f0,
+ 0x549fb42, 0xd21c5ac2, 0x4e37b133, 0xda38e932,
+ 0x66ac40ae, 0x855de0db, 0x29c32890, 0xfc79f537,
+ 0xea0bc017, 0xb30fd396, 0x9f6e65d0, 0x1fbd8e56,
+ 0xa6a79b7b, 0x63871bcf, 0x977361fe, 0x572fc22e,
+ 0xcac4d530, 0xee9631a1, 0xd66ca305, 0xd8648a0b,
+ 0xa0fa4f44, 0x1b49d414, 0xb9b89101, 0xbb3dc53b,
+ 0x9267697d, 0x998ee205, 0xca1a4a0b, 0x16e0c5d3,
+ 0xb099860c, 0x3ec1b23b, 0x5d11b6a5, 0x78daf576,
+ 0xd58d0926, 0x7e77c453, 0x42a2daf5, 0x6465314c,
+ 0xa25d7243, 0x33eb1745, 0x9d662159, 0x61e86fcb,
+ 0xedca8ac0, 0xc4afdc42, 0x866e5492, 0x9e72fe28,
+ 0x9e5b7096, 0xb3121ab3, 0x9eafbc0d, 0xb03b48,
+ 0x3a29c9d, 0x517d9ea7, 0xd12dd262, 0x8965c881,
+ 0x3f1575bf, 0x811afeb2, 0xb8699338, 0xa49b7870,
+ 0x8b72b9aa, 0xa56dbc23, 0xbdc66113, 0xc80baa85,
+ 0x2f6e2fe2, 0xe2f32eaa, 0x4942b340, 0x3782424d,
+ 0xc7f3fd93, 0x29c6dbac, 0x181c1bc1, 0x7db26d5e,
+ 0x49ecc6f6, 0x7f600a7f, 0xf73b236a, 0x264d7fd1,
+ 0x68bac57f, 0xd276c9e, 0x1784d004, 0xb98b5fc7,
+ 0xd03f81ca, 0xd44d46a1, 0xcfbea6d1, 0x5c06d9d0,
+ 0xbec1bad1, 0xa3bacc94, 0xaacc518c, 0xf8e20ef9,
+ 0x8749c85a, 0xe4f865cd, 0x819fdb8a, 0x3c9924f6,
+ 0xcb96ac1, 0x3a2bc069, 0x34b28508, 0xdb02aaf2,
+ 0x231dccd0, 0xe088dc6a, 0x4d54c84, 0x9096e29f,
+ 0x92db735a, 0x44ebca10, 0x8bbe55f2, 0x17287085,
+ 0xf782f3b5, 0xc98a9a13, 0x117c0991, 0x69d34986,
+ 0xa53303c9, 0x786c1b84, 0x5c174525, 0x4887510b,
+ 0xaaf68a8e, 0xff4cba8f, 0xb6b66cc7, 0x1d5de8ea,
+ 0xb98783a8, 0x82525dd6, 0x41200306, 0xaf354785,
+ 0xb3479dc5, 0x508c2a19, 0x61a3104e, 0x5688a9f2,
+ 0xca4bee32, 0x45df7f55, 0x2d2caedd, 0xdfdffc59,
+ 0x911454c1, 0xd9dd2d80, 0x4e328041, 0x582ebac0,
+ 0xbda7aab2, 0x10c52f26, 0x472690d0, 0x258304cf,
+ 0x54e2e210, 0xd4482bf8, 0x22086561, 0x98407334
+ },
+ {
+ 0x900aa5b7, 0x4e649e1f, 0xc9d635c9, 0x69ffda97,
+ 0xdce34ccd, 0xf08ff29b, 0xee9360d3, 0xd9c59300,
+ 0x7190589d, 0x69d75cc1, 0x9e3c3dc1, 0x45541e71,
+ 0x6f1bccc2, 0x46f39b64, 0xc2622672, 0xfacf3cca,
+ 0x867a7957, 0xd14995f, 0xfaa6011d, 0xaeaa8c37,
+ 0x3d911958, 0x5f672f3a, 0x80ffb57, 0x7c27f22d,
+ 0x295fd1f, 0x55f3a836, 0x55476bd5, 0x1d717b6b,
+ 0x99b01c2, 0xf7a4359a, 0xfbf0d88f, 0x90f0a4fd,
+ 0xdd1bed5d, 0x395e2267, 0x84473b44, 0x216d1700,
+ 0xd91466b6, 0xf6723abc, 0xb58917f7, 0xe4055634,
+ 0x5e5c94a9, 0x371a7adc, 0xa9444660, 0x9cd864c7,
+ 0x942160f8, 0xfa57e367, 0x3ac900aa, 0xfed09d6c,
+ 0xab1e8ce6, 0x1c3440b2, 0x2921f7ef, 0xcbc8aad9,
+ 0xaee21a52, 0xb65bac8c, 0x4e24db59, 0xa0afe727,
+ 0xd6a6a2ce, 0xcda6dc7c, 0xde7b8be, 0xac98135d,
+ 0x61ebab33, 0xd6c91e9a, 0x42afb446, 0x5ffdebdd,
+ 0x22d4df79, 0xd19e8fe7, 0xbc6b9029, 0x597ff071,
+ 0xa4f6f069, 0xa41ed335, 0xa933f4c8, 0x3a4b5456,
+ 0xca3df8d6, 0x91915bbd, 0x7c656515, 0x6ae7e70d,
+ 0x517118c, 0x2a9565e0, 0x3046470a, 0x4d0b8c6,
+ 0x788182c, 0x3bf3c684, 0x1e7a37f5, 0x45507790,
+ 0xb9ab569e, 0x1d3927fe, 0x2aac516d, 0x8eb519e0,
+ 0xc7563e93, 0x8572cdd1, 0xcfe62ded, 0x78eeb7d6,
+ 0x152032bb, 0x5f480f75, 0xa1d06607, 0x51da64b0,
+ 0xbc666eb1, 0x34ea7eec, 0x6ccff8b1, 0xd952ba,
+ 0x32d16b6, 0xcbfe265e, 0x9daab452, 0xb12f4349,
+ 0xceac2beb, 0x4b9787f9, 0x85719171, 0xf0b9c027,
+ 0x7feeaa15, 0x990aebcc, 0x767bf1a9, 0xcd56802d,
+ 0xe718ab1e, 0x661ef622, 0x3e217d8f, 0x8604b297,
+ 0x712d7706, 0xff2a8240, 0xe149f2cd, 0x49c36be2,
+ 0x3ac40571, 0xa041a748, 0xaa1580cb, 0x7a9a3e62,
+ 0x9def968d, 0x908f3347, 0x40dddf27, 0xfd078597,
+ 0x30b9d025, 0xd40d138, 0xde35af82, 0x5718e93,
+ 0x529cd4ac, 0x41632ca0, 0x169c0ff3, 0xbac5b27a,
+ 0x771b0fa7, 0xdcdf8bd, 0x4faf140e, 0x5aec8617,
+ 0x24597031, 0x6407c4a6, 0x70fc5d31, 0x9085ff31,
+ 0x8b1397d8, 0x99633b58, 0x91d5b56f, 0xfb451a1a,
+ 0xe379e1fc, 0xe6ba2f3f, 0x462cb5c1, 0x1dd06ff4,
+ 0x2cf546ba, 0x70800782, 0xdc27b1eb, 0x7965ad5d,
+ 0x39ffac7a, 0x862ffce9, 0x569e938e, 0xd42c7cc3,
+ 0x614f729b, 0x842ba8d5, 0xc4c56289, 0x77df9d86,
+ 0xf51eb421, 0xec140c11, 0x2b891d79, 0x58b98151,
+ 0x49955e, 0x6d2ae4cb, 0xdb9bd16f, 0x816ed489,
+ 0x5187b66a, 0xe2428c32, 0x340ca67c, 0x6002c78f,
+ 0xe7479dfd, 0xcc924e44, 0xc73ec342, 0xf17cfd8d,
+ 0x8942a89b, 0x75d34569, 0xac22e545, 0x8375e876,
+ 0x8395884a, 0x586698a6, 0x3f3d8f12, 0xdc5943d3,
+ 0x66d1996b, 0xd06a5896, 0x6a8afde7, 0xb4d9accb,
+ 0x17289e6a, 0xff9b64ef, 0x47c3dab, 0xfa2e58,
+ 0x26790980, 0x5163e6f6, 0x65e17492, 0x62e55e79,
+ 0x8af1b5a0, 0x2c72e6ba, 0x47da4a0a, 0x8a20bab4,
+ 0xf3bcbd52, 0x16d2a483, 0xe5877bcf, 0x3cade4ba,
+ 0xf65721a2, 0xb5815461, 0xb3fb53b5, 0xf74508db,
+ 0x5c5c1af, 0x3b53868, 0xd9c6825d, 0x4a55bb36,
+ 0x785ce186, 0xd5732f60, 0xd94fadb0, 0x1676d0cf,
+ 0x1090d57f, 0x7bd7a227, 0xac20c78c, 0x2c68e495,
+ 0xcd6478d2, 0xc7f4641c, 0x5ed5d389, 0x2cdc09ca,
+ 0xff6d94d2, 0x47d4921c, 0xc3da6fc4, 0x6231f4c6,
+ 0x28643ecd, 0x9367f303, 0x2319a3a2, 0x2f86fd8e,
+ 0x7f13a567, 0x785e871a, 0xf88564cf, 0x27203f51,
+ 0x7f7fe69a, 0xf0bbc1f4, 0x6ac32b0, 0xfa87113a,
+ 0x1533dab5, 0x9e168c28, 0x621b244d, 0xc26cdca8,
+ 0xe2b12ff1, 0xb1fb41d, 0x74abc0bf, 0x6faf66ed,
+ 0x7f96eef7, 0x8dd96699, 0xe0afd88c, 0x5666ae1e
+ },
+ {
+ 0x429f8c4d, 0x7a6f751a, 0xe1f9f104, 0x8f3352a2,
+ 0xee11c98f, 0xd3e00903, 0x834b9614, 0x1ca1cd5f,
+ 0xc5da95e5, 0x48aa87f9, 0xf3e28f3a, 0xb3d2f1cd,
+ 0x11a99c75, 0x6fc626d4, 0x75c5dbf4, 0x9a055ab0,
+ 0x878bd7d0, 0x797cb4fe, 0xb56af6f2, 0xd8dad771,
+ 0xd79d651f, 0xecc885c2, 0xe36ba61b, 0x3af46b8b,
+ 0xd4c4dec7, 0x1ef69803, 0x24c094f2, 0x4796f5ca,
+ 0xd0b4f1a4, 0x35b71a50, 0xc93bda59, 0x88744ee4,
+ 0xe435da7e, 0xc2add479, 0xf89eba5b, 0xeb7b3be7,
+ 0x25abda16, 0x31bc2a9, 0xd46c3697, 0xbdab88a5,
+ 0xaf765372, 0x776715c1, 0x91f39946, 0x5a46fca5,
+ 0xb7345689, 0xe5ccffc6, 0x83094686, 0xd29b145,
+ 0x947c5b14, 0xee6a48b9, 0xf80bcf7e, 0x80364978,
+ 0x28785457, 0x7f01f829, 0x2480cb12, 0x1c4e853d,
+ 0x9c5be553, 0xbc234906, 0xf48c6576, 0x20d7163e,
+ 0xd13fb6aa, 0x7911e4f2, 0x74a4c545, 0xcd37db61,
+ 0x923daabd, 0x3671e21f, 0x474b7b1, 0xd6c142a8,
+ 0xfd74fe19, 0x967d3c94, 0x76507cd3, 0x1860dcdf,
+ 0x40511fa8, 0x19feec2b, 0xa624cb9, 0x3125d93b,
+ 0xc4bed3ba, 0xaa215b42, 0xa44f7c85, 0x63065ae5,
+ 0xde95bfe, 0x6b6e92e8, 0xf3e516d1, 0x8bc680c8,
+ 0x5fdc0cad, 0x6e7281d4, 0x1a4a5a56, 0x5edb95a3,
+ 0xb91324c1, 0xbbfbce4c, 0x9e90028c, 0x4825c43d,
+ 0xe5f599a4, 0xcacc8db0, 0xf1fd746b, 0x2d7baad9,
+ 0xcc3148c4, 0xffefb22f, 0x9ec43aee, 0x7556ebfc,
+ 0x7ce98693, 0x19eb04dd, 0xc5c3d0e2, 0x5d0c1bea,
+ 0x801fe923, 0xcb47549d, 0xada4ca94, 0x953a3ff6,
+ 0x92d8bc7e, 0x1a8b21fa, 0x7e7d47ca, 0x345de887,
+ 0x668fc1d5, 0xb191b107, 0x29f30bbd, 0x669cdc3a,
+ 0x907fad0c, 0xa8432d5d, 0x8125844d, 0x6f8ee014,
+ 0x96fe6488, 0x6b812b55, 0x96e27fb5, 0xb68e0b09,
+ 0x6d28e784, 0x370fff6c, 0x65c77431, 0xa6ba0fe6,
+ 0x85ede90f, 0x6ebc916e, 0xd2927076, 0x8f7f7b17,
+ 0x690c30f5, 0x88c8404e, 0x76b88278, 0x27eb857b,
+ 0xfd20c71d, 0x53b63cc4, 0x93fb6326, 0xca3a6e63,
+ 0x879e4bc7, 0x7e75fa05, 0x2dc60e82, 0xc4b2b95,
+ 0xe6e17a43, 0x6e6c53a7, 0xe6baa075, 0x7b50f168,
+ 0xf95e02a8, 0x3422dd2d, 0x4eb38261, 0xd17615c8,
+ 0x238c1d99, 0x24def9f8, 0x250a45d1, 0xaeb97793,
+ 0xd6bf65e6, 0xf4080ae1, 0x90814d9e, 0x2d9d8436,
+ 0x2d742949, 0xa9afb64c, 0xdd4d18f8, 0x8855711e,
+ 0x856bf7df, 0xbeb28a6b, 0xff5d789b, 0xd1e24c20,
+ 0x92581004, 0xf9ee25e5, 0xdd445cff, 0xb5bc99cd,
+ 0x2e90fb9d, 0x86e95fa6, 0x3ce3fc89, 0x2ccff4c9,
+ 0x42b6541c, 0xf2cdb401, 0x76b6cd96, 0x5cbc0f31,
+ 0x5d988c8e, 0x5535eb69, 0x1354397b, 0x5f105b42,
+ 0x70359c13, 0x8053d6a9, 0x43ee0e25, 0x7279a17b,
+ 0x23b44313, 0x99dbf710, 0x3671f4f1, 0x212fb10a,
+ 0xd61b85ef, 0x5370eec8, 0xb03ac259, 0x53068883,
+ 0x10325203, 0x2550b3b5, 0x3afa6580, 0x5945266f,
+ 0xf8f21594, 0x1f2feef2, 0xcaebbffc, 0xcc55f93a,
+ 0x21f277bf, 0x4e1c1b9c, 0xdd74f5a4, 0x34e84677,
+ 0xb85d1834, 0xf9fdccaa, 0x5f13cc3, 0x8d1a00d9,
+ 0xd3b7f623, 0x2d8886bf, 0x1505627e, 0x476ea29b,
+ 0x7758fa96, 0xc59274f8, 0x5d6cd56, 0xf892f3ce,
+ 0xc26a482c, 0xe00f252c, 0x38c981c3, 0x223869ac,
+ 0xaa8bc73f, 0xe8ca1111, 0xed51fdd6, 0xeb0724d4,
+ 0x61b05512, 0x290876c2, 0x50b855d1, 0x20cf2267,
+ 0x894a6a06, 0xd87f0ab4, 0x5961c4f5, 0xdd7781a,
+ 0x8f898f63, 0xe5bcfae8, 0x2ab999c3, 0x6d25c711,
+ 0x11b0621c, 0x7a097422, 0xa7f23f1, 0x9fbfb450,
+ 0xd5e5019b, 0xbe3427a9, 0x70967c5c, 0x18f65981,
+ 0x2c9bde6b, 0xfe6f03c4, 0xc754ef9a, 0x637d1ff5,
+ 0x9749ef7a, 0xae0c1da6, 0x4e05c89c, 0x87e4150a
+ }
+ }
+};
+
+const unsigned char testString[] = { 68, 100, 2, 115, 6, 54, 226, 228 };
+
+} // namespace anonymous
+
+namespace tut
+{
+ struct crypto_data {
+ };
+
+ typedef test_group<crypto_data> tg;
+ tg crypto_test_group("Crypto tests group");
+
+ typedef tg::object testobject;
+
+ template<>
+ template<>
+ void testobject::test<1>()
+ {
+ set_test_name("Check context creation");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ ensure("ctx == testCtx", equalCtx(ctx, testCtx));
+ }
+
+ template<>
+ template<>
+ void testobject::test<2>()
+ {
+ set_test_name("Check encryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t a = 0x12345678;
+ uint32_t b = 0x87654321;
+ Blowfish_Encrypt(&ctx, &a, &b);
+
+ ensure_equals("a == 0xd3988cd", a, 0xd3988cd);
+ ensure_equals("b == 0x7996c6d6", b, 0x7996c6d6);
+ }
+
+ template<>
+ template<>
+ void testobject::test<3>()
+ {
+ set_test_name("Check decryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t a = 0xd3988cd;
+ uint32_t b = 0x7996c6d6;
+ Blowfish_Decrypt(&ctx, &a, &b);
+
+ ensure_equals("a == 0x12345678", a, 0x12345678);
+ ensure_equals("b == 0x87654321", b, 0x87654321);
+ }
+
+ template<>
+ template<>
+ void testobject::test<4>()
+ {
+ set_test_name("Check block encryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t block[2] = {0x12345678, 0x87654321};
+ EncryptBlock(&block, &block, &ctx);
+
+ ensure_equals("block[0] == 0xd3988cd", block[0], 0xd3988cd);
+ ensure_equals("block[1] == 0x7996c6d6", block[1], 0x7996c6d6);
+ }
+
+ template<>
+ template<>
+ void testobject::test<5>()
+ {
+ set_test_name("Check block decryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t block[2] = {0xd3988cd, 0x7996c6d6};
+ DecryptBlock(&block, &block, &ctx);
+
+ ensure_equals("block[0] == 0x12345678", block[0], 0x12345678);
+ ensure_equals("block[1] == 0x87654321", block[1], 0x87654321);
+ }
+
+ template<>
+ template<>
+ void testobject::test<6>()
+ {
+ set_test_name("Check string encryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ char res[8];
+ EncryptString(res, "testtest", 8, &ctx);
+
+ ensure("EncryptString(\"testtest\") == testString", equalString(res, (char *)testString, 8));
+ }
+
+ template<>
+ template<>
+ void testobject::test<7>()
+ {
+ set_test_name("Check long string encryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ char longTest[] = "abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ EncryptString(longTest, longTest, sizeof(longTest), &ctx);
+ DecryptString(longTest, longTest, sizeof(longTest), &ctx);
+
+ ensure("DecryptString(EncryptString(longTest)) == longTest", equalString(longTest, "abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ", sizeof(longTest)));
+ }
+
+}