Convert mdc2 test print to internal test
authorRichard Levitte <levitte@openssl.org>
Thu, 27 Oct 2016 20:18:50 +0000 (22:18 +0200)
committerRichard Levitte <levitte@openssl.org>
Thu, 3 Nov 2016 12:13:31 +0000 (13:13 +0100)
Reviewed-by: Emilia Käsper <emilia@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1789)

crypto/mdc2/mdc2dgst.c
test/build.info
test/mdc2_internal_test.c [new file with mode: 0644]

index 37d99f4..14233b9 100644 (file)
@@ -124,24 +124,3 @@ int MDC2_Final(unsigned char *md, MDC2_CTX *c)
     memcpy(&(md[MDC2_BLOCK]), (char *)c->hh, MDC2_BLOCK);
     return 1;
 }
-
-#undef TEST
-
-#ifdef TEST
-main()
-{
-    unsigned char md[MDC2_DIGEST_LENGTH];
-    int i;
-    MDC2_CTX c;
-    static char *text = "Now is the time for all ";
-
-    MDC2_Init(&c);
-    MDC2_Update(&c, text, strlen(text));
-    MDC2_Final(&(md[0]), &c);
-
-    for (i = 0; i < MDC2_DIGEST_LENGTH; i++)
-        printf("%02X", md[i]);
-    printf("\n");
-}
-
-#endif
index 4f89ce8..46403ea 100644 (file)
@@ -315,6 +315,9 @@ IF[{- !$disabled{tests} -}]
   # are needed, since all symbols are available anyway, regardless of what's
   # listed in util/*.num.
   PROGRAMS_NO_INST=asn1_internal_test modes_internal_test x509_internal_test
+  IF[{- !$disabled{mdc2} -}]
+    PROGRAMS_NO_INST=mdc2_internal_test
+  ENDIF
   IF[{- !$disabled{poly1305} -}]
     PROGRAMS_NO_INST=poly1305_internal_test
   ENDIF
@@ -371,6 +374,10 @@ IF[{- !$disabled{tests} -}]
   ENDIF
   INCLUDE[x509_internal_test]=.. ../include
   DEPEND[x509_internal_test]=../libcrypto
+
+  SOURCE[mdc2_internal_test]=mdc2_internal_test.c testutil.c
+  INCLUDE[mdc2_internal_test]=.. ../include
+  DEPEND[mdc2_internal_test]=../libcrypto
 ENDIF
 
 {-
diff --git a/test/mdc2_internal_test.c b/test/mdc2_internal_test.c
new file mode 100644 (file)
index 0000000..7f6a95c
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the mdc2 module */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/mdc2.h>
+#include "testutil.h"
+#include "e_os.h"
+
+typedef struct {
+    const char *input;
+    const unsigned char expected[MDC2_DIGEST_LENGTH];
+} TESTDATA;
+
+typedef struct {
+    const char *case_name;
+    int num;
+    const TESTDATA *data;
+} SIMPLE_FIXTURE;
+
+/**********************************************************************
+ *
+ * Test of mdc2 internal functions
+ *
+ ***/
+
+static SIMPLE_FIXTURE setup_mdc2(const char *const test_case_name)
+{
+    SIMPLE_FIXTURE fixture;
+    fixture.case_name = test_case_name;
+    return fixture;
+}
+
+static int execute_mdc2(SIMPLE_FIXTURE fixture)
+{
+    unsigned char md[MDC2_DIGEST_LENGTH];
+    MDC2_CTX c;
+
+    MDC2_Init(&c);
+    MDC2_Update(&c, (const unsigned char *)fixture.data->input,
+                strlen(fixture.data->input));
+    MDC2_Final(&(md[0]), &c);
+
+    if (memcmp(fixture.data->expected, md, MDC2_DIGEST_LENGTH)) {
+        fprintf(stderr, "mdc2 test %d: unexpected output\n", fixture.num);
+        return 0;
+    }
+
+    return 1;
+}
+
+static void teardown_mdc2(SIMPLE_FIXTURE fixture)
+{
+    ERR_print_errors_fp(stderr);
+}
+
+/**********************************************************************
+ *
+ * Test driver
+ *
+ ***/
+
+static TESTDATA tests[] = {
+    {
+        "Now is the time for all ",
+        {
+            0x42, 0xE5, 0x0C, 0xD2, 0x24, 0xBA, 0xCE, 0xBA,
+            0x76, 0x0B, 0xDD, 0x2B, 0xD4, 0x09, 0x28, 0x1A
+        }
+    }
+};
+
+static int drive_tests(int idx)
+{
+    SETUP_TEST_FIXTURE(SIMPLE_FIXTURE, setup_mdc2);
+    fixture.num = idx;
+    fixture.data = &tests[idx];
+    EXECUTE_TEST(execute_mdc2, teardown_mdc2);
+}
+
+int main(int argc, char **argv)
+{
+    ADD_ALL_TESTS(drive_tests, OSSL_NELEM(tests));
+
+    return run_tests(argv[0]);
+}