1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* test the multi helpers... */
2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <tomcrypt.h>
3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint main(void)
5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   unsigned char key[16], buf[2][MAXBLOCKSIZE];
7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   unsigned long len, len2;
8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* register algos */
11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   register_hash(&sha256_desc);
12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   register_cipher(&aes_desc);
13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* HASH testing */
15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len = sizeof(buf[0]);
16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hash_memory(find_hash("sha256"), (unsigned char*)"hello", 5, buf[0], &len);
17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"hello", 5, NULL);
19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL, 0);
25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, NULL);
31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* HMAC */
37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len = sizeof(buf[0]);
38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hmac_memory(find_hash("sha256"), key, 16, (unsigned char*)"hello", 5, buf[0], &len);
39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5UL, NULL);
41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL);
47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, NULL);
53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* OMAC */
59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len = sizeof(buf[0]);
60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   omac_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len);
61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5UL, NULL);
63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL);
69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, NULL);
75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* PMAC */
81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len = sizeof(buf[0]);
82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   pmac_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len);
83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5, NULL);
85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL);
91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   len2 = sizeof(buf[0]);
96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, NULL);
97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (len != len2 || memcmp(buf[0], buf[1], len)) {
98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      printf("Failed: %d %lu %lu\n", __LINE__, len, len2);
99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return EXIT_FAILURE;
100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   printf("All passed\n");
104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return EXIT_SUCCESS;
105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/demos/multi.c,v $ */
109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.3 $ */
110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/06/07 22:25:09 $ */
111