new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / tests / test_os_crypto.c
diff --git a/src/tests/test_os_crypto.c b/src/tests/test_os_crypto.c
new file mode 100644 (file)
index 0000000..84d66b8
--- /dev/null
@@ -0,0 +1,200 @@
+/* Copyright (C) 2014 Trend Micro Inc.
+ * All rights reserved.
+ *
+ * This program is a free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General Public
+ * License (version 2) as published by the FSF - Free Software
+ * Foundation
+ */
+
+#include <check.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "headers/defs.h"
+#include "../os_crypto/blowfish/bf_op.h"
+#include "../os_crypto/md5/md5_op.h"
+#include "../os_crypto/sha1/sha1_op.h"
+#include "../os_crypto/md5_sha1/md5_sha1_op.h"
+
+Suite *test_suite(void);
+
+
+START_TEST(test_blowfish)
+{
+    const char *key = "test_key";
+    const char *string = "test string";
+    const int buffersize = 1024;
+    char buffer1[buffersize];
+    char buffer2[buffersize];
+
+    OS_BF_Str(string, buffer1, key, buffersize, OS_ENCRYPT);
+    OS_BF_Str(buffer1, buffer2, key, buffersize, OS_DECRYPT);
+
+    ck_assert_str_eq(buffer2, string);
+}
+END_TEST
+
+START_TEST(test_md5string)
+{
+    const char *string = "teststring";
+    const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
+    os_md5 buffer;
+
+    OS_MD5_Str(string, buffer);
+
+    ck_assert_str_eq(buffer, string_md5);
+}
+END_TEST
+
+START_TEST(test_md5file)
+{
+    const char *string = "teststring";
+    const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
+
+    /* create tmp file */
+    char file_name[256];
+    strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
+    int fd = mkstemp(file_name);
+
+    write(fd, string, strlen(string));
+    close(fd);
+
+    os_md5 buffer;
+    ck_assert_int_eq(OS_MD5_File(file_name, buffer, OS_TEXT), 0);
+
+    ck_assert_str_eq(buffer, string_md5);
+}
+END_TEST
+
+START_TEST(test_md5file_fail)
+{
+    os_md5 buffer;
+    ck_assert_int_eq(OS_MD5_File("not_existing_file", buffer, OS_TEXT), -1);
+}
+END_TEST
+
+START_TEST(test_sha1file)
+{
+    const char *string = "teststring";
+    const char *string_sha1 = "b8473b86d4c2072ca9b08bd28e373e8253e865c4";
+
+    /* create tmp file */
+    char file_name[256];
+    strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
+    int fd = mkstemp(file_name);
+
+    write(fd, string, strlen(string));
+    close(fd);
+
+    os_sha1 buffer;
+    ck_assert_int_eq(OS_SHA1_File(file_name, buffer, OS_TEXT), 0);
+
+    ck_assert_str_eq(buffer, string_sha1);
+}
+END_TEST
+
+START_TEST(test_sha1file_fail)
+{
+    os_sha1 buffer;
+    ck_assert_int_eq(OS_SHA1_File("not_existing_file", buffer, OS_TEXT), -1);
+}
+END_TEST
+
+START_TEST(test_md5sha1file)
+{
+    const char *string = "teststring";
+    const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
+    const char *string_sha1 = "b8473b86d4c2072ca9b08bd28e373e8253e865c4";
+
+    /* create tmp file */
+    char file_name[256];
+    strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
+    int fd = mkstemp(file_name);
+
+    write(fd, string, strlen(string));
+    close(fd);
+
+    os_md5 md5buffer;
+    os_sha1 sha1buffer;
+
+    ck_assert_int_eq(OS_MD5_SHA1_File(file_name, NULL, md5buffer, sha1buffer, OS_TEXT), 0);
+
+    ck_assert_str_eq(md5buffer, string_md5);
+    ck_assert_str_eq(sha1buffer, string_sha1);
+}
+END_TEST
+
+START_TEST(test_md5sha1cmdfile)
+{
+    const char *string = "teststring";
+    const char *string_md5 = "d67c5cbf5b01c9f91932e3b8def5e5f8";
+    const char *string_sha1 = "b8473b86d4c2072ca9b08bd28e373e8253e865c4";
+
+    /* create tmp file */
+    char file_name[256];
+    strncpy(file_name, "/tmp/tmp_file-XXXXXX", 256);
+    int fd = mkstemp(file_name);
+
+    write(fd, string, strlen(string));
+    close(fd);
+
+    os_md5 md5buffer;
+    os_sha1 sha1buffer;
+
+    ck_assert_int_eq(OS_MD5_SHA1_File(file_name, "cat ", md5buffer, sha1buffer, OS_TEXT), 0);
+
+    ck_assert_str_eq(md5buffer, string_md5);
+    ck_assert_str_eq(sha1buffer, string_sha1);
+}
+END_TEST
+
+START_TEST(test_md5sha1cmdfile_fail)
+{
+    os_md5 md5buffer;
+    os_sha1 sha1buffer;
+
+    ck_assert_int_eq(OS_MD5_SHA1_File("not_existing_file", NULL, md5buffer, sha1buffer, OS_TEXT), -1);
+}
+END_TEST
+
+Suite *test_suite(void)
+{
+    Suite *s = suite_create("os_crypto");
+
+    TCase *tc_blowfish = tcase_create("blowfish");
+    tcase_add_test(tc_blowfish, test_blowfish);
+
+    TCase *tc_md5 = tcase_create("md5");
+    tcase_add_test(tc_md5, test_md5string);
+    tcase_add_test(tc_md5, test_md5file);
+    tcase_add_test(tc_md5, test_md5file_fail);
+
+    TCase *tc_sha1 = tcase_create("sha1");
+    tcase_add_test(tc_sha1, test_sha1file);
+    tcase_add_test(tc_sha1, test_sha1file_fail);
+
+    TCase *tc_md5sha1 = tcase_create("md5_sha1");
+    tcase_add_test(tc_md5sha1, test_md5sha1file);
+    tcase_add_test(tc_md5sha1, test_md5sha1cmdfile);
+    tcase_add_test(tc_md5sha1, test_md5sha1cmdfile_fail);
+    tcase_set_timeout(tc_md5sha1, 7);
+
+    suite_add_tcase(s, tc_blowfish);
+    suite_add_tcase(s, tc_md5);
+    suite_add_tcase(s, tc_sha1);
+    suite_add_tcase(s, tc_md5sha1);
+
+    return (s);
+}
+
+int main(void)
+{
+    Suite *s = test_suite();
+    SRunner *sr = srunner_create(s);
+    srunner_run_all(sr, CK_NORMAL);
+    int number_failed = srunner_ntests_failed(sr);
+    srunner_free(sr);
+
+    return ((number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
+}