add CHD support.
[pcsx_rearmed.git] / deps / crypto / des_test.c
1 /*********************************************************************
2 * Filename:   des_test.c
3 * Author:     Brad Conte (brad AT bradconte.com)
4 * Copyright:
5 * Disclaimer: This code is presented "as is" without any guarantees.
6 * Details:    Performs known-answer tests on the corresponding DES
7                   implementation. These tests do not encompass the full
8                   range of available test vectors, however, if the tests
9                   pass it is very, very likely that the code is correct
10                   and was compiled properly. This code also serves as
11                   example usage of the functions.
12 *********************************************************************/
13
14 /*************************** HEADER FILES ***************************/
15 #include <stdio.h>
16 #include <memory.h>
17 #include "des.h"
18
19 /*********************** FUNCTION DEFINITIONS ***********************/
20 int des_test()
21 {
22         BYTE pt1[DES_BLOCK_SIZE] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xE7};
23         BYTE pt2[DES_BLOCK_SIZE] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
24         BYTE pt3[DES_BLOCK_SIZE] = {0x54,0x68,0x65,0x20,0x71,0x75,0x66,0x63};
25         BYTE ct1[DES_BLOCK_SIZE] = {0xc9,0x57,0x44,0x25,0x6a,0x5e,0xd3,0x1d};
26         BYTE ct2[DES_BLOCK_SIZE] = {0x85,0xe8,0x13,0x54,0x0f,0x0a,0xb4,0x05};
27         BYTE ct3[DES_BLOCK_SIZE] = {0xc9,0x57,0x44,0x25,0x6a,0x5e,0xd3,0x1d};
28         BYTE ct4[DES_BLOCK_SIZE] = {0xA8,0x26,0xFD,0x8C,0xE5,0x3B,0x85,0x5F};
29         BYTE key1[DES_BLOCK_SIZE] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
30         BYTE key2[DES_BLOCK_SIZE] = {0x13,0x34,0x57,0x79,0x9B,0xBC,0xDF,0xF1};
31         BYTE three_key1[DES_BLOCK_SIZE * 3] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
32                                                0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
33                                                0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
34         BYTE three_key2[DES_BLOCK_SIZE * 3] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
35                                                0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,0x01,
36                                                0x45,0x67,0x89,0xAB,0xCD,0xEF,0x01,0x23};
37
38         BYTE schedule[16][6];
39         BYTE three_schedule[3][16][6];
40         BYTE buf[DES_BLOCK_SIZE];
41         int pass = 1;
42
43         des_key_setup(key1, schedule, DES_ENCRYPT);
44         des_crypt(pt1, buf, schedule);
45         pass = pass && !memcmp(ct1, buf, DES_BLOCK_SIZE);
46
47         des_key_setup(key1, schedule, DES_DECRYPT);
48         des_crypt(ct1, buf, schedule);
49         pass = pass && !memcmp(pt1, buf, DES_BLOCK_SIZE);
50
51         des_key_setup(key2, schedule, DES_ENCRYPT);
52         des_crypt(pt2, buf, schedule);
53         pass = pass && !memcmp(ct2, buf, DES_BLOCK_SIZE);
54
55         des_key_setup(key2, schedule, DES_DECRYPT);
56         des_crypt(ct2, buf, schedule);
57         pass = pass && !memcmp(pt2, buf, DES_BLOCK_SIZE);
58
59         three_des_key_setup(three_key1, three_schedule, DES_ENCRYPT);
60         three_des_crypt(pt1, buf, three_schedule);
61         pass = pass && !memcmp(ct3, buf, DES_BLOCK_SIZE);
62
63         three_des_key_setup(three_key1, three_schedule, DES_DECRYPT);
64         three_des_crypt(ct3, buf, three_schedule);
65         pass = pass && !memcmp(pt1, buf, DES_BLOCK_SIZE);
66
67         three_des_key_setup(three_key2, three_schedule, DES_ENCRYPT);
68         three_des_crypt(pt3, buf, three_schedule);
69         pass = pass && !memcmp(ct4, buf, DES_BLOCK_SIZE);
70
71         three_des_key_setup(three_key2, three_schedule, DES_DECRYPT);
72         three_des_crypt(ct4, buf, three_schedule);
73         pass = pass && !memcmp(pt3, buf, DES_BLOCK_SIZE);
74
75         return(pass);
76 }
77
78 int main()
79 {
80         printf("DES test: %s\n", des_test() ? "SUCCEEDED" : "FAILED");
81
82         return(0);
83 }