int test_twofish256() { twofish256_key skey; unsigned char tmp[16]; int i; for (i = 0; i < _countof(twofish_vectors); i++) { twofish256_set_key(twofish_vectors[i].key, &skey); twofish256_encrypt(twofish_vectors[i].plaintext, tmp, &skey); if (memcmp(twofish_vectors[i].ciphertext, tmp, sizeof(tmp)) != 0) return 0; twofish256_decrypt(twofish_vectors[i].ciphertext, tmp, &skey); if (memcmp(twofish_vectors[i].plaintext, tmp, sizeof(tmp)) != 0) return 0; } return 1; }
int test_twofish256() { twofish256_key skey; char tmp[16]; int i; for (i = 0; i < array_num(twofish_vectors); i++) { twofish256_set_key(twofish_vectors[i].key, &skey); twofish256_encrypt(twofish_vectors[i].plaintext, tmp, &skey); if (memcmp(twofish_vectors[i].ciphertext, tmp, sizeof(tmp)) != 0) { return 0; } twofish256_decrypt(twofish_vectors[i].ciphertext, tmp, &skey); if (memcmp(twofish_vectors[i].plaintext, tmp, sizeof(tmp)) != 0) { return 0; } } return 1; }
void _stdcall xts_set_key(const unsigned char *key, int alg, xts_key *skey) { switch (alg) { case CF_AES: aes256_asm_set_key(key, &skey->crypt_k.aes); aes256_asm_set_key(key + XTS_KEY_SIZE, &skey->tweak_k.aes); skey->encrypt = xts_aes_encrypt; skey->decrypt = xts_aes_decrypt; break; case CF_TWOFISH: twofish256_set_key(key, &skey->crypt_k.twofish); twofish256_set_key(key + XTS_KEY_SIZE, &skey->tweak_k.twofish); skey->encrypt = xts_twofish_encrypt; skey->decrypt = xts_twofish_decrypt; break; case CF_SERPENT: serpent256_set_key(key, &skey->crypt_k.serpent); serpent256_set_key(key + XTS_KEY_SIZE, &skey->tweak_k.serpent); skey->encrypt = xts_serpent_encrypt; skey->decrypt = xts_serpent_decrypt; break; case CF_AES_TWOFISH: twofish256_set_key(key, &skey->crypt_k.twofish); aes256_asm_set_key(key + XTS_KEY_SIZE, &skey->crypt_k.aes); twofish256_set_key(key + XTS_KEY_SIZE*2, &skey->tweak_k.twofish); aes256_asm_set_key(key + XTS_KEY_SIZE*3, &skey->tweak_k.aes); skey->encrypt = xts_aes_twofish_encrypt; skey->decrypt = xts_aes_twofish_decrypt; break; case CF_TWOFISH_SERPENT: serpent256_set_key(key, &skey->crypt_k.serpent); twofish256_set_key(key + XTS_KEY_SIZE, &skey->crypt_k.twofish); serpent256_set_key(key + XTS_KEY_SIZE*2, &skey->tweak_k.serpent); twofish256_set_key(key + XTS_KEY_SIZE*3, &skey->tweak_k.twofish); skey->encrypt = xts_twofish_serpent_encrypt; skey->decrypt = xts_twofish_serpent_decrypt; break; case CF_SERPENT_AES: aes256_asm_set_key(key, &skey->crypt_k.aes); serpent256_set_key(key + XTS_KEY_SIZE, &skey->crypt_k.serpent); aes256_asm_set_key(key + XTS_KEY_SIZE*2, &skey->tweak_k.aes); serpent256_set_key(key + XTS_KEY_SIZE*3, &skey->tweak_k.serpent); skey->encrypt = xts_serpent_aes_encrypt; skey->decrypt = xts_serpent_aes_decrypt; break; case CF_AES_TWOFISH_SERPENT: serpent256_set_key(key, &skey->crypt_k.serpent); twofish256_set_key(key + XTS_KEY_SIZE, &skey->crypt_k.twofish); aes256_asm_set_key(key + XTS_KEY_SIZE*2, &skey->crypt_k.aes); serpent256_set_key(key + XTS_KEY_SIZE*3, &skey->tweak_k.serpent); twofish256_set_key(key + XTS_KEY_SIZE*4, &skey->tweak_k.twofish); aes256_asm_set_key(key + XTS_KEY_SIZE*5, &skey->tweak_k.aes); skey->encrypt = xts_aes_twofish_serpent_encrypt; skey->decrypt = xts_aes_twofish_serpent_decrypt; break; } }