new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / tests / test_os_crypto.c
1 /* Copyright (C) 2014 Trend Micro Inc.
2  * All rights reserved.
3  *
4  * This program is a free software; you can redistribute it
5  * and/or modify it under the terms of the GNU General Public
6  * License (version 2) as published by the FSF - Free Software
7  * Foundation
8  */
9
10 #include <check.h>
11 #include <stdlib.h>
12 #include <unistd.h>
13
14 #include "headers/defs.h"
15 #include "../os_crypto/blowfish/bf_op.h"
16 #include "../os_crypto/md5/md5_op.h"
17 #include "../os_crypto/sha1/sha1_op.h"
18 #include "../os_crypto/md5_sha1/md5_sha1_op.h"
19
20 Suite *test_suite(void);
21
22
23 START_TEST(test_blowfish)
24 {
25     const char *key = "test_key";
26     const char *string = "test string";
27     const int buffersize = 1024;
28     char buffer1[buffersize];
29     char buffer2[buffersize];
30
31     OS_BF_Str(string, buffer1, key, buffersize, OS_ENCRYPT);
32     OS_BF_Str(buffer1, buffer2, key, buffersize, OS_DECRYPT);
33
34     ck_assert_str_eq(buffer2, string);
35 }
36 END_TEST
37
38 START_TEST(test_md5string)
39 {
40     const char *string = "teststring";
41     const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
42     os_md5 buffer;
43
44     OS_MD5_Str(string, buffer);
45
46     ck_assert_str_eq(buffer, string_md5);
47 }
48 END_TEST
49
50 START_TEST(test_md5file)
51 {
52     const char *string = "teststring";
53     const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
54
55     /* create tmp file */
56     char file_name[256];
57     strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
58     int fd = mkstemp(file_name);
59
60     write(fd, string, strlen(string));
61     close(fd);
62
63     os_md5 buffer;
64     ck_assert_int_eq(OS_MD5_File(file_name, buffer, OS_TEXT), 0);
65
66     ck_assert_str_eq(buffer, string_md5);
67 }
68 END_TEST
69
70 START_TEST(test_md5file_fail)
71 {
72     os_md5 buffer;
73     ck_assert_int_eq(OS_MD5_File("not_existing_file", buffer, OS_TEXT), -1);
74 }
75 END_TEST
76
77 START_TEST(test_sha1file)
78 {
79     const char *string = "teststring";
80     const char *string_sha1 = "b8473b86d4c2072ca9b08bd28e373e8253e865c4";
81
82     /* create tmp file */
83     char file_name[256];
84     strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
85     int fd = mkstemp(file_name);
86
87     write(fd, string, strlen(string));
88     close(fd);
89
90     os_sha1 buffer;
91     ck_assert_int_eq(OS_SHA1_File(file_name, buffer, OS_TEXT), 0);
92
93     ck_assert_str_eq(buffer, string_sha1);
94 }
95 END_TEST
96
97 START_TEST(test_sha1file_fail)
98 {
99     os_sha1 buffer;
100     ck_assert_int_eq(OS_SHA1_File("not_existing_file", buffer, OS_TEXT), -1);
101 }
102 END_TEST
103
104 START_TEST(test_md5sha1file)
105 {
106     const char *string = "teststring";
107     const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
108     const char *string_sha1 = "b8473b86d4c2072ca9b08bd28e373e8253e865c4";
109
110     /* create tmp file */
111     char file_name[256];
112     strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
113     int fd = mkstemp(file_name);
114
115     write(fd, string, strlen(string));
116     close(fd);
117
118     os_md5 md5buffer;
119     os_sha1 sha1buffer;
120
121     ck_assert_int_eq(OS_MD5_SHA1_File(file_name, NULL, md5buffer, sha1buffer, OS_TEXT), 0);
122
123     ck_assert_str_eq(md5buffer, string_md5);
124     ck_assert_str_eq(sha1buffer, string_sha1);
125 }
126 END_TEST
127
128 START_TEST(test_md5sha1cmdfile)
129 {
130     const char *string = "teststring";
131     const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
132     const char *string_sha1 = "b8473b86d4c2072ca9b08bd28e373e8253e865c4";
133
134     /* create tmp file */
135     char file_name[256];
136     strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
137     int fd = mkstemp(file_name);
138
139     write(fd, string, strlen(string));
140     close(fd);
141
142     os_md5 md5buffer;
143     os_sha1 sha1buffer;
144
145     ck_assert_int_eq(OS_MD5_SHA1_File(file_name, "cat ", md5buffer, sha1buffer, OS_TEXT), 0);
146
147     ck_assert_str_eq(md5buffer, string_md5);
148     ck_assert_str_eq(sha1buffer, string_sha1);
149 }
150 END_TEST
151
152 START_TEST(test_md5sha1cmdfile_fail)
153 {
154     os_md5 md5buffer;
155     os_sha1 sha1buffer;
156
157     ck_assert_int_eq(OS_MD5_SHA1_File("not_existing_file", NULL, md5buffer, sha1buffer, OS_TEXT), -1);
158 }
159 END_TEST
160
161 Suite *test_suite(void)
162 {
163     Suite *s = suite_create("os_crypto");
164
165     TCase *tc_blowfish = tcase_create("blowfish");
166     tcase_add_test(tc_blowfish, test_blowfish);
167
168     TCase *tc_md5 = tcase_create("md5");
169     tcase_add_test(tc_md5, test_md5string);
170     tcase_add_test(tc_md5, test_md5file);
171     tcase_add_test(tc_md5, test_md5file_fail);
172
173     TCase *tc_sha1 = tcase_create("sha1");
174     tcase_add_test(tc_sha1, test_sha1file);
175     tcase_add_test(tc_sha1, test_sha1file_fail);
176
177     TCase *tc_md5sha1 = tcase_create("md5_sha1");
178     tcase_add_test(tc_md5sha1, test_md5sha1file);
179     tcase_add_test(tc_md5sha1, test_md5sha1cmdfile);
180     tcase_add_test(tc_md5sha1, test_md5sha1cmdfile_fail);
181     tcase_set_timeout(tc_md5sha1, 7);
182
183     suite_add_tcase(s, tc_blowfish);
184     suite_add_tcase(s, tc_md5);
185     suite_add_tcase(s, tc_sha1);
186     suite_add_tcase(s, tc_md5sha1);
187
188     return (s);
189 }
190
191 int main(void)
192 {
193     Suite *s = test_suite();
194     SRunner *sr = srunner_create(s);
195     srunner_run_all(sr, CK_NORMAL);
196     int number_failed = srunner_ntests_failed(sr);
197     srunner_free(sr);
198
199     return ((number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
200 }