2
** Copyright (c) 2005-2008 Sendmail, Inc. and its suppliers.
3
** All rights reserved.
5
** Copyright (c) 2009, 2010, The OpenDKIM Project. All rights reserved.
9
static char t_test137_c_id[] = "@(#)$Id: t-test137.c,v 1.1 2010/04/30 17:01:28 cm-msk Exp $";
13
#include <sys/types.h>
17
#include <arpa/nameser.h>
19
/* libopendkim includes */
21
#include "t-testdata.h"
23
#define MAXHEADER 4096
25
#define SIG1 "v=1; a=rsa-sha1; c=simple/simple; d=example.com; s=test;\r\n\tt=1172620939; bh=ll/0h2aWgG+D3ewmE4Y3pY7Ukz8=; h=Received:Received:\r\n\t Received:From:To:Date:Subject:Message-ID; b=V+wiYd1cE70A40eDNUtYwU\r\n\tvqi727NN/vVo/OdC7jG4zvztIXCRjPKDXEfiZdW+6PZ08M4zA3GmLZI2p+IJTza+VDQ\r\n\tbohnvIUSRR6q9+Nddqz1qTCL0gNM5d64xKwrLUesk/3wb/Cvua6Atr+VBMFVCwQmSDf\r\n\trs4brLkqMyFOkCE="
26
#define SIG2 "v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=test;\r\n\tt=1172620939; bh=yHBAX+3IwxTZIynBuB/5tlsBInJq9n8qz5fgAycHi80=;\r\n\th=Received:Received:Received:From:To:Date:Subject:Message-ID; b=12345678Y3y\r\n\tVeA3WZdCZl1sGuOZNC3BBRhtGCOExkZdw5xQoGPvSX/q6AC1SAJvOUWOri95AZAUGs0\r\n\t/bIDzzt23ei9jc+rptlavrl/5ijMrl6ShmvkACk6It62KPkJcDpoGfi5AZkrfX1Ou/z\r\n\tqGg5xJX86Kqd7FgNolMg7PbfyWliK2Yb84="
27
#define SIG3 "v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=test;\r\n\tt=1172620939; bh=yHBAX+3IwxTZIynBuB/5tlsBInJq9n8qz5fgAycHi80=;\r\n\th=Received:Received:Received:From:To:Date:Subject:Message-ID; b=12345678Y4y\r\n\tVeA3WZdCZl1sGuOZNC3BBRhtGCOExkZdw5xQoGPvSX/q6AC1SAJvOUWOri95AZAUGs0\r\n\t/bIDzzt23ei9jc+rptlavrl/5ijMrl6ShmvkACk6It62KPkJcDpoGfi5AZkrfX1Ou/z\r\n\tqGg5xJX86Kqd7FgNolMg7PbfyWliK2Yb84="
30
** MAIN -- program mainline
40
main(int argc, char **argv)
42
#ifdef TEST_KEEP_FILES
44
#endif /* TEST_KEEP_FILES */
51
unsigned char hdr[MAXHEADER + 1];
53
/* instantiate the library */
54
lib = dkim_init(NULL, NULL);
57
if (!dkim_libfeature(lib, DKIM_FEATURE_SHA256))
59
printf("*** simple/simple rsa-sha256 signature substrings SKIPPED\n");
64
printf("*** simple/simple rsa-sha256 verifying signature substrings\n");
66
#ifdef TEST_KEEP_FILES
68
flags = (DKIM_LIBFLAGS_TMPFILES|DKIM_LIBFLAGS_KEEPFILES);
69
(void) dkim_options(lib, DKIM_OP_SETOPT, DKIM_OPTS_FLAGS, &flags,
71
#endif /* TEST_KEEP_FILES */
73
dkim = dkim_verify(lib, JOBID, NULL, &status);
76
snprintf(hdr, sizeof hdr, "%s: %s", DKIM_SIGNHEADER, SIG1);
77
status = dkim_header(dkim, hdr, strlen(hdr));
78
assert(status == DKIM_STAT_OK);
80
snprintf(hdr, sizeof hdr, "%s: %s", DKIM_SIGNHEADER, SIG2);
81
status = dkim_header(dkim, hdr, strlen(hdr));
82
assert(status == DKIM_STAT_OK);
84
status = dkim_header(dkim, HEADER01, strlen(HEADER01));
85
assert(status == DKIM_STAT_OK);
87
status = dkim_header(dkim, HEADER02, strlen(HEADER02));
88
assert(status == DKIM_STAT_OK);
90
status = dkim_header(dkim, HEADER03, strlen(HEADER03));
91
assert(status == DKIM_STAT_OK);
93
status = dkim_header(dkim, HEADER04, strlen(HEADER04));
94
assert(status == DKIM_STAT_OK);
96
status = dkim_header(dkim, HEADER05, strlen(HEADER05));
97
assert(status == DKIM_STAT_OK);
99
status = dkim_header(dkim, HEADER06, strlen(HEADER06));
100
assert(status == DKIM_STAT_OK);
102
status = dkim_header(dkim, HEADER07, strlen(HEADER07));
103
assert(status == DKIM_STAT_OK);
105
status = dkim_header(dkim, HEADER08, strlen(HEADER08));
106
assert(status == DKIM_STAT_OK);
108
status = dkim_header(dkim, HEADER09, strlen(HEADER09));
109
assert(status == DKIM_STAT_OK);
111
status = dkim_eoh(dkim);
112
assert(status == DKIM_STAT_OK);
114
status = dkim_getsiglist(dkim, &sigs, &nsigs);
115
assert(status == DKIM_STAT_OK);
118
memset(hdr, '\0', sizeof hdr);
119
hdrlen = sizeof hdr - 1;
120
status = dkim_get_sigsubstring(dkim, sigs[0], hdr, &hdrlen);
121
assert(status == DKIM_STAT_OK);
123
assert(strcmp(hdr, "V+wiYd1c") == 0);
124
status = dkim_get_sigsubstring(dkim, sigs[1], hdr, &hdrlen);
125
assert(status == DKIM_STAT_OK);
127
assert(strcmp(hdr, "12345678") == 0);
129
status = dkim_free(dkim);
130
assert(status == DKIM_STAT_OK);
132
dkim = dkim_verify(lib, JOBID, NULL, &status);
133
assert(dkim != NULL);
135
snprintf(hdr, sizeof hdr, "%s: %s", DKIM_SIGNHEADER, SIG1);
136
status = dkim_header(dkim, hdr, strlen(hdr));
137
assert(status == DKIM_STAT_OK);
139
snprintf(hdr, sizeof hdr, "%s: %s", DKIM_SIGNHEADER, SIG2);
140
status = dkim_header(dkim, hdr, strlen(hdr));
141
assert(status == DKIM_STAT_OK);
143
snprintf(hdr, sizeof hdr, "%s: %s", DKIM_SIGNHEADER, SIG3);
144
status = dkim_header(dkim, hdr, strlen(hdr));
145
assert(status == DKIM_STAT_OK);
147
status = dkim_header(dkim, HEADER01, strlen(HEADER01));
148
assert(status == DKIM_STAT_OK);
150
status = dkim_header(dkim, HEADER02, strlen(HEADER02));
151
assert(status == DKIM_STAT_OK);
153
status = dkim_header(dkim, HEADER03, strlen(HEADER03));
154
assert(status == DKIM_STAT_OK);
156
status = dkim_header(dkim, HEADER04, strlen(HEADER04));
157
assert(status == DKIM_STAT_OK);
159
status = dkim_header(dkim, HEADER05, strlen(HEADER05));
160
assert(status == DKIM_STAT_OK);
162
status = dkim_header(dkim, HEADER06, strlen(HEADER06));
163
assert(status == DKIM_STAT_OK);
165
status = dkim_header(dkim, HEADER07, strlen(HEADER07));
166
assert(status == DKIM_STAT_OK);
168
status = dkim_header(dkim, HEADER08, strlen(HEADER08));
169
assert(status == DKIM_STAT_OK);
171
status = dkim_header(dkim, HEADER09, strlen(HEADER09));
172
assert(status == DKIM_STAT_OK);
174
status = dkim_eoh(dkim);
175
assert(status == DKIM_STAT_OK);
177
status = dkim_getsiglist(dkim, &sigs, &nsigs);
178
assert(status == DKIM_STAT_OK);
181
memset(hdr, '\0', sizeof hdr);
182
hdrlen = sizeof hdr - 1;
183
status = dkim_get_sigsubstring(dkim, sigs[0], hdr, &hdrlen);
184
assert(status == DKIM_STAT_OK);
185
assert(hdrlen == 10);
186
assert(strcmp(hdr, "V+wiYd1cE7") == 0);
187
status = dkim_get_sigsubstring(dkim, sigs[1], hdr, &hdrlen);
188
assert(status == DKIM_STAT_OK);
189
assert(hdrlen == 10);
190
assert(strcmp(hdr, "12345678Y3") == 0);
191
status = dkim_get_sigsubstring(dkim, sigs[2], hdr, &hdrlen);
192
assert(status == DKIM_STAT_OK);
193
assert(hdrlen == 10);
194
assert(strcmp(hdr, "12345678Y4") == 0);
196
status = dkim_free(dkim);
197
assert(status == DKIM_STAT_OK);