]> code.citadel.org Git - citadel.git/blob - citadel/tests/dkimtester/dkimtester.c
c923bd5d3e5519d05f7259ffbef623eabb19584e
[citadel.git] / citadel / tests / dkimtester / dkimtester.c
1 // ***** TEST HARNESS *****
2 // This contains a private key that, at the time of writing, matches the DKIM public key for dev.citadel.org
3 // We can use the attached test message to validate a signature against that.
4
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <ctype.h>
9 #include <string.h>
10 #include <time.h>
11 #include <assert.h>
12 #include <syslog.h>
13 #include <libcitadel.h>
14
15 // oof, a prototype where one does not belong hehe
16 void dkim_sign(StrBuf *email, char *pkey_in, char *domain, char *selector);
17
18 int main(int argc, char *argv[]) {
19
20         openlog("dkim", LOG_PERROR, LOG_USER);
21
22         char *private_key =
23                 "-----BEGIN PRIVATE KEY-----\n"
24                 "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDfuefcepokRrnp\n"
25                 "SSDsxu+QDqeD8GL9QnZz/N6IxTdBv6Wc10ExBe2IjS5dKI7AvhSSEK0zGE8Hkpmw\n"
26                 "eccbiepQqeueteWzAMZ1uT43bD3k7eye7vWobiOP9QtoYGR6sG25h2W5Tbc91W4f\n"
27                 "dvYnxYVJjx8wIVF0f3o25v+rQueoo0HlvGyA9/xi9GAaJL05OmK1xnMJgSvW/Q8Q\n"
28                 "zq7apf1D6XPXHuhv5tevElkZ5jlvM2w0cTVyAzMrUh6Rkcn9xM4/NPWYghBc3jO4\n"
29                 "TrPnSrobQGrX0fcizE/FN6I0in0Ke8Z+gMM8NeFcsjvLZe9MpY9i0pw/ygLIh5t3\n"
30                 "O4qpwC1JAgMBAAECggEAIwiTCMEAGzciDKhhagJ66BWLYMtHTP5X2zDZThSH4xlW\n"
31                 "HznL4RfbCtuEy5y6we7h/L90x8ACPB7WRz7CkYrmsMvy9A7q0b2I1k10MyyVgqBJ\n"
32                 "QdgMitv4YKYQK7+QbG/tNrS/lqVXUOz3iiDQSgkRpqOtUBWfkj0WD7vbhF99NDhV\n"
33                 "dxaehFkKv3yNy0bXJlHJBJ6KtOUnDwub8TExh8dyj3kB8Qzj4I98shaXPNUSSaOw\n"
34                 "zG6QG72yrxlMs495jkIPbF2JDidmLrX+oVISwKyaBWx+BkFV/KFAEKgaB5/nCw7+\n"
35                 "qq/jxsmXim3HuQ3MIAjq1yw9aGRH1HMi8Gn7tYlNGwKBgQDy6EEKpuEiW9wwlI2+\n"
36                 "GVuSkhSTTX1h6qK/ay8Jtyb8yJM/BxogAQlfjdgFixiZHy5MaomTbfeT2GDji553\n"
37                 "+RsnZ60+g7FI9nHwabSxtuCQ+vjbFqCsdMPAiSeG0bEzo0zf5TjASdUtuZL0vXjl\n"
38                 "yMZWDEuESoVNlYlvCOVkw2nvIwKBgQDryPuSq6PNVHRWsKRRs5ju4wKs/1ucBOg5\n"
39                 "gCcN8lE03mFCWAlZhypE4/fAhTQ/a5KQoAzc0QZcXRueDyNsnc+QWw3/QWf8/fkV\n"
40                 "HPfTWS3Dcuj+4RnWUucaZ/mKFlTC3+eNSlpyaPIMlCjXGsJ9GlPrsaAi9KPbD2v/\n"
41                 "XcMq/PMOowKBgHVf7S3sfZVQthFzdxqIvksQ84hKRW/vJT1B2bTkH56+fQhTsjgM\n"
42                 "yC64J85l7DjxbDnYsSngVWXHhOnvKV/nq0tbOcefcydCjsQREBNfvxvPajjTskgj\n"
43                 "FAQRQlxPL0U4f4khBk9EXhJ+PZithaHjZpNl1YfTSp62x3Yz4kTSeHnpAoGAGn5m\n"
44                 "5kArE7NdrzACBrwrfww7DL1Uyd8zSOLBgKutvEcQnqfNxSWO9la3TAarrESmH2Ic\n"
45                 "j+Nc15wOsl/5FwdUf1/73qa2zJKtHlY28qSeo8uRqrIYeSCvnyP3wjBoLc2C8zlb\n"
46                 "mGd6azdqr2DuYahHrcAzwjnC/6Zn+DXM7FOn7AkCgYBp1xxY88cCoF24yffkD3MC\n"
47                 "ACUury4qRSDTGx6/qCCkIyWxg1vuiDrlPWhSwQznxHvovcfpdjdbWcFY87IK6mpG\n"
48                 "aJHwMJ7Kw+baoxGPZWHwdg6BgvUCihe3xlcaq6rOBoLviD6FOzbogg++Tvi0LemG\n"
49                 "y/wEs/mZkaRzW4n41ir0Xw==\n"
50                 "-----END PRIVATE KEY-----\n"
51         ;
52
53         // These elements are identical to the ones from previous revisions.  Don't change them; we need to compare.
54         char *domain = "dev.citadel.org";
55         char *selector = "foo";
56
57         // Sample message
58         StrBuf *email = NewStrBufPlain(HKEY(
59                 "From: Fred Bloggs <bloggs@dev.citadel.org>\r\n"
60                 "X-irrelevant-header: wow mom 303\r\n"
61                 "To: Bread Floggs <bf@example.com>\r\n"
62                 "Subject: The ultimate test message!\r\n"
63                 "Message-ID: <73294856-8726543-473298@dev.citadel.org>\r\n"
64                 "\r\n"
65                 "Hi.\r\n"
66                 "\r\n"
67                 "Bhille Disassemble.  Highly recommend.\r\n"
68                 "\r\n"
69                 "--Fred\r\n"
70         ));
71
72         // create signature
73         dkim_sign(email, private_key, domain, selector);
74
75         // Show the user what we did
76         printf("%s", (char *)ChrPtr(email));
77
78         FILE *fp;
79         printf("\033[34m-----\033[0m\n");
80         printf("Piping original version to test program...\n");
81         fp = popen("./tester.pl | sed s/pass/\033[32mpass\033[0m/g | sed s/fail/\033[31mfail\033[0m/g", "w");
82         fwrite((char *)ChrPtr(email), StrLength(email), 1, fp);
83         pclose(fp);
84         printf("\033[34m-----\033[0m\n");
85         printf("Piping altered version to test program...\n");
86         fp = popen("sed s/oggs/argh/g | ./tester.pl | sed s/pass/\033[32mpass\033[0m/g | sed s/fail/\033[31mfail\033[0m/g", "w");
87         fwrite((char *)ChrPtr(email), StrLength(email), 1, fp);
88         pclose(fp);
89         printf("\033[34m-----\033[0m\n");
90
91         // free some memory
92         FreeStrBuf(&email);
93
94         // exit the test program
95         return(0);
96 }