1/*
2 * ccOpensslCompat.cpp - verify that the compatibility macros at the end of CommonDigest.h
3 *                       result in openssl-compatible calls
4 */
5
6#include <stdlib.h>
7#include <strings.h>
8#include <stdio.h>
9#include <unistd.h>
10#include "digestCommonExtern.h"
11#include "common.h"
12
13#define MAX_DIGEST_LEN		64
14
15static void usage(char **argv)
16{
17	printf("usage: %s [options]\n", argv[0]);
18	printf("Options:\n");
19	printf("   q              -- quiet\n");
20	/* etc. */
21	exit(1);
22}
23
24int main(int argc, char **argv)
25{
26	int quiet = false;
27	int arg;
28	char *argp;
29
30	for(arg=1; arg<argc; arg++) {
31		argp = argv[arg];
32		switch(argp[0]) {
33			case 'q':
34				quiet = true;
35				break;
36			default:
37				usage(argv);
38		}
39	}
40
41	testStartBanner("ccOpensslCompat", argc, argv);
42
43	const char *str = "digest this";
44	unsigned len = strlen(str);
45	unsigned char digestOS[MAX_DIGEST_LEN];
46	unsigned char digestCC[MAX_DIGEST_LEN];
47
48	/* MD2 */
49	if(!quiet) {
50		printf("...testing MD2\n");
51	}
52	if(md2os(str, len, digestOS)) {
53		printf("***Error on openssl MD2\n");
54		exit(1);
55	}
56	if(md2cc(str, len, digestCC)) {
57		printf("***Error on CommonCrypto MD2\n");
58		exit(1);
59	}
60	if(memcmp(digestOS, digestCC, 16)) {
61		printf("***MD2 Digest miscompare\n");
62		exit(1);
63	}
64
65	/* MD4 */
66	if(!quiet) {
67		printf("...testing MD4\n");
68	}
69	if(md4os(str, len, digestOS)) {
70		printf("***Error on openssl MD4\n");
71		exit(1);
72	}
73	if(md4cc(str, len, digestCC)) {
74		printf("***Error on CommonCrypto MD5\n");
75		exit(1);
76	}
77	if(memcmp(digestOS, digestCC, 16)) {
78		printf("***MD4 Digest miscompare\n");
79		exit(1);
80	}
81
82	/* MD5 */
83	if(!quiet) {
84		printf("...testing MD5\n");
85	}
86	if(md5os(str, len, digestOS)) {
87		printf("***Error on openssl MD5\n");
88		exit(1);
89	}
90	if(md5cc(str, len, digestCC)) {
91		printf("***Error on CommonCrypto MD5\n");
92		exit(1);
93	}
94	if(memcmp(digestOS, digestCC, 16)) {
95		printf("***MD5 Digest miscompare\n");
96		exit(1);
97	}
98
99	/* SHA1 */
100	if(!quiet) {
101		printf("...testing SHA1\n");
102	}
103	if(sha1os(str, len, digestOS)) {
104		printf("***Error on openssl SHA1\n");
105		exit(1);
106	}
107	if(sha1cc(str, len, digestCC)) {
108		printf("***Error on CommonCrypto SHA1\n");
109		exit(1);
110	}
111	if(memcmp(digestOS, digestCC, 20)) {
112		printf("***SHA1 Digest miscompare\n");
113		exit(1);
114	}
115
116	/* SHA224 */
117	if(!quiet) {
118		printf("...testing SHA224\n");
119	}
120	if(sha224os(str, len, digestOS)) {
121		printf("***Error on openssl SHA224\n");
122		exit(1);
123	}
124	if(sha224cc(str, len, digestCC)) {
125		printf("***Error on CommonCrypto SHA224\n");
126		exit(1);
127	}
128	if(memcmp(digestOS, digestCC, 28)) {
129		printf("***SHA224 Digest miscompare\n");
130		exit(1);
131	}
132
133	/* SHA256 */
134	if(!quiet) {
135		printf("...testing SHA256\n");
136	}
137	if(sha256os(str, len, digestOS)) {
138		printf("***Error on openssl SHA256\n");
139		exit(1);
140	}
141	if(sha256cc(str, len, digestCC)) {
142		printf("***Error on CommonCrypto SHA256\n");
143		exit(1);
144	}
145	if(memcmp(digestOS, digestCC, 32)) {
146		printf("***SHA256 Digest miscompare\n");
147		exit(1);
148	}
149
150	/* SHA384 */
151	if(!quiet) {
152		printf("...testing SHA384\n");
153	}
154	if(sha384os(str, len, digestOS)) {
155		printf("***Error on openssl SHA384\n");
156		exit(1);
157	}
158	if(sha384cc(str, len, digestCC)) {
159		printf("***Error on CommonCrypto SHA384\n");
160		exit(1);
161	}
162	if(memcmp(digestOS, digestCC, 48)) {
163		printf("***SHA384 Digest miscompare\n");
164		exit(1);
165	}
166
167	/* SHA512 */
168	if(!quiet) {
169		printf("...testing SHA512\n");
170	}
171	if(sha512os(str, len, digestOS)) {
172		printf("***Error on openssl SHA512\n");
173		exit(1);
174	}
175	if(sha512cc(str, len, digestCC)) {
176		printf("***Error on CommonCrypto SHA512\n");
177		exit(1);
178	}
179	if(memcmp(digestOS, digestCC, 64)) {
180		printf("***SHA512 Digest miscompare\n");
181		exit(1);
182	}
183
184	if(!quiet) {
185		printf("...success\n");
186	}
187	return 0;
188}
189