1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner. 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works. 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h" 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @file f8_test_mode.c 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project F8 implementation, test, Tom St Denis 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_F8_MODE 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint f8_test_mode(void) 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LTC_TEST 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_NOP; 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static const unsigned char key[16] = { 0x23, 0x48, 0x29, 0x00, 0x84, 0x67, 0xbe, 0x18, 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x6c, 0x3d, 0xe1, 0x4a, 0xae, 0x72, 0xd6, 0x2c }; 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static const unsigned char salt[4] = { 0x32, 0xf2, 0x87, 0x0d }; 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static const unsigned char IV[16] = { 0x00, 0x6e, 0x5c, 0xba, 0x50, 0x68, 0x1d, 0xe5, 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x5c, 0x62, 0x15, 0x99, 0xd4, 0x62, 0x56, 0x4a }; 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static const unsigned char pt[39] = { 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x72, 0x61, 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x6e, 0x64, 0x6f, 0x6d, 0x6e, 0x65, 0x73, 0x73, 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x6e, 0x65, 0x78, 0x74, 0x20, 0x62, 0x65, 0x73, 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x74, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67 }; 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static const unsigned char ct[39] = { 0x01, 0x9c, 0xe7, 0xa2, 0x6e, 0x78, 0x54, 0x01, 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x4a, 0x63, 0x66, 0xaa, 0x95, 0xd4, 0xee, 0xfd, 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x1a, 0xd4, 0x17, 0x2a, 0x14, 0xf9, 0xfa, 0xf4, 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x55, 0xb7, 0xf1, 0xd4, 0xb6, 0x2b, 0xd0, 0x8f, 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x56, 0x2c, 0x0e, 0xef, 0x7c, 0x48, 0x02 }; 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char buf[39]; 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_F8 f8; 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err, idx; 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project idx = find_cipher("aes"); 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (idx == -1) { 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project idx = find_cipher("rijndael"); 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (idx == -1) return CRYPT_NOP; 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* initialize the context */ 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = f8_start(idx, IV, key, sizeof(key), salt, sizeof(salt), 0, &f8)) != CRYPT_OK) { 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return err; 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* encrypt block */ 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = f8_encrypt(pt, buf, sizeof(pt), &f8)) != CRYPT_OK) { 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project f8_done(&f8); 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return err; 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project f8_done(&f8); 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* compare */ 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (XMEMCMP(buf, ct, sizeof(ct))) { 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_FAIL_TESTVECTOR; 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/modes/f8/f8_test_mode.c,v $ */ 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.3 $ */ 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/11/13 11:55:25 $ */ 77