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