gcm_test.c revision f7fc46c63fdc8f39234fea409b8dbe116d73ebf8
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
12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   @file gcm_test.c
14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   GCM implementation, testing, by Tom St Denis
15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h"
17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef GCM_MODE
19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Test the GCM code
22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @return CRYPT_OK on success
23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint gcm_test(void)
25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LTC_TEST
27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_NOP;
28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   static const struct {
30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned char K[32];
31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       int           keylen;
32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned char P[128];
33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned long ptlen;
34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned char A[128];
35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned long alen;
36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned char IV[128];
37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned long IVlen;
38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned char C[128];
39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       unsigned char T[16];
40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } tests[] = {
41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #1 */
43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* key */
45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  16,
48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* plaintext */
50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0 },
51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  0,
52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* AAD data */
54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0 },
55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  0,
56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* IV */
58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00, 0x00, 0x00, 0x00 },
60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  12,
61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* ciphertext  */
63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0 },
64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* tag */
66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a }
68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #2 */
71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* key */
73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  16,
76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* PT */
78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  16,
81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* ADATA */
83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0 },
84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  0,
85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* IV */
87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00, 0x00, 0x00, 0x00 },
89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  12,
90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* CT */
92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 },
94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* TAG */
96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf }
98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #3 */
101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* key */
103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, },
105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* PT */
108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, },
116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  64,
117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* ADATA */
119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0 },
120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  0,
121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* IV */
123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xde, 0xca, 0xf8, 0x88,  },
125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  12,
126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* CT */
128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85, },
136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* TAG */
138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4, }
140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #4 */
143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* key */
145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, },
147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* PT */
150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xba, 0x63, 0x7b, 0x39,  },
158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   60,
159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* ADATA */
161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xab, 0xad, 0xda, 0xd2,  },
164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* IV */
167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xde, 0xca, 0xf8, 0x88,  },
169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   12,
170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* CT */
172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x3d, 0x58, 0xe0, 0x91,  },
180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* TAG */
182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47, }
184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #5 */
188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* key */
190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, },
192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* PT */
195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xba, 0x63, 0x7b, 0x39,  },
203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   60,
204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* ADATA */
206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xab, 0xad, 0xda, 0xd2,  },
209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* IV */
212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, },
213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   8,
214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* CT */
216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a,
217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55,
218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8,
219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23,
220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2,
221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42,
222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07,
223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xc2, 0x3f, 0x45, 0x98,  },
224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* TAG */
226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85,
227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb, }
228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #6 */
231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* key */
233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, },
235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* PT */
238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xba, 0x63, 0x7b, 0x39,  },
246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   60,
247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* ADATA */
249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xab, 0xad, 0xda, 0xd2,  },
252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* IV */
255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xa6, 0x37, 0xb3, 0x9b,  },
263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   60,
264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* CT */
266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6,
267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94,
268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8,
269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7,
270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90,
271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f,
272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03,
273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x4c, 0x34, 0xae, 0xe5,  },
274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* TAG */
276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa,
277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50, }
278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test case #46 from BG (catches the LTC bug of v1.15) */
281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* key */
283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* PT */
288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xa2, 0xaa, 0xb3, 0xad, 0x8b, 0x17, 0xac, 0xdd,
289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xa2, 0x88, 0x42, 0x6c, 0xd7, 0xc4, 0x29, 0xb7,
290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xca, 0x86, 0xb7, 0xac, 0xa0, 0x58, 0x09, 0xc7,
291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x0c, 0xe8, 0x2d, 0xb2, 0x57, 0x11, 0xcb, 0x53,
292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x02, 0xeb, 0x27, 0x43, 0xb0, 0x36, 0xf3, 0xd7,
293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x50, 0xd6, 0xcf, 0x0d, 0xc0, 0xac, 0xb9, 0x29,
294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x50, 0xd5, 0x46, 0xdb, 0x30, 0x8f, 0x93, 0xb4,
295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xff, 0x24, 0x4a, 0xfa, 0x9d, 0xc7, 0x2b, 0xcd,
296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x75, 0x8d, 0x2c },
297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   67,
298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* ADATA */
300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x68, 0x8e, 0x1a, 0xa9, 0x84, 0xde, 0x92, 0x6d,
301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xc7, 0xb4, 0xc4, 0x7f, 0x44 },
302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   13,
303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* IV */
305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xb7, 0x21, 0x38, 0xb5, 0xa0, 0x5f, 0xf5, 0x07,
306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x0e, 0x8c, 0xd9, 0x41, 0x83, 0xf7, 0x61, 0xd8 },
307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* CT */
310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xcb, 0xc8, 0xd2, 0xf1, 0x54, 0x81, 0xa4, 0xcc,
311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x7d, 0xd1, 0xe1, 0x9a, 0xaa, 0x83, 0xde, 0x56,
312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x78, 0x48, 0x3e, 0xc3, 0x59, 0xae, 0x7d, 0xec,
313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x2a, 0xb8, 0xd5, 0x34, 0xe0, 0x90, 0x6f, 0x4b,
314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x46, 0x63, 0xfa, 0xff, 0x58, 0xa8, 0xb2, 0xd7,
315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x33, 0xb8, 0x45, 0xee, 0xf7, 0xc9, 0xb3, 0x31,
316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xe9, 0xe1, 0x0e, 0xb2, 0x61, 0x2c, 0x99, 0x5f,
317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xeb, 0x1a, 0xc1, 0x5a, 0x62, 0x86, 0xcc, 0xe8,
318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xb2, 0x97, 0xa8 },
319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* TAG */
321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x8d, 0x2d, 0x2a, 0x93, 0x72, 0x62, 0x6f, 0x6b,
322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xee, 0x85, 0x80, 0x27, 0x6a, 0x63, 0x66, 0xbf }
323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* rest of test cases are the same except AES key size changes... ignored... */
326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   int           idx, err;
328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   unsigned long x, y;
329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   unsigned char out[2][128], T[2][16];
330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* find aes */
332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   idx = find_cipher("aes");
333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (idx == -1) {
334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      idx = find_cipher("rijndael");
335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      if (idx == -1) {
336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         return CRYPT_NOP;
337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       y = sizeof(T[0]);
342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if ((err = gcm_memory(idx, tests[x].K, tests[x].keylen,
343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             tests[x].IV, tests[x].IVlen,
344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             tests[x].A, tests[x].alen,
345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             (unsigned char*)tests[x].P, tests[x].ptlen,
346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             out[0], T[0], &y, GCM_ENCRYPT)) != CRYPT_OK) {
347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return err;
348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if (XMEMCMP(out[0], tests[x].C, tests[x].ptlen)) {
351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if 0
352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\nCiphertext wrong %lu\n", x);
353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          for (y = 0; y < tests[x].ptlen; y++) {
354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project              printf("%02x", out[0][y] & 255);
355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          }
356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\n");
357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return CRYPT_FAIL_TESTVECTOR;
359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if (XMEMCMP(T[0], tests[x].T, 16)) {
362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if 0
363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\nTag on plaintext wrong %lu\n", x);
364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          for (y = 0; y < 16; y++) {
365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project              printf("%02x", T[0][y] & 255);
366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          }
367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\n");
368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return CRYPT_FAIL_TESTVECTOR;
370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       y = sizeof(T[1]);
373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if ((err = gcm_memory(idx, tests[x].K, tests[x].keylen,
374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             tests[x].IV, tests[x].IVlen,
375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             tests[x].A, tests[x].alen,
376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             out[1], tests[x].ptlen,
377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                             out[0], T[1], &y, GCM_DECRYPT)) != CRYPT_OK) {
378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return err;
379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if (XMEMCMP(out[1], tests[x].P, tests[x].ptlen)) {
382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if 0
383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\nplaintext wrong %lu\n", x);
384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          for (y = 0; y < tests[x].ptlen; y++) {
385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project              printf("%02x", out[0][y] & 255);
386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          }
387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\n");
388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return CRYPT_FAIL_TESTVECTOR;
390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if (XMEMCMP(T[1], tests[x].T, 16)) {
393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if 0
394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\nTag on ciphertext wrong %lu\n", x);
395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          for (y = 0; y < 16; y++) {
396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project              printf("%02x", T[1][y] & 255);
397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          }
398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          printf("\n");
399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return CRYPT_FAIL_TESTVECTOR;
401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_OK;
405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_test.c,v $ */
412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.20 $ */
413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/12/03 17:25:44 $ */
414