1#!/usr/bin/perl
2# 10.10.1999, Sampo Kellomaki <sampo@iki.fi>
3#
4# Test SMIMEUtil module
5
6use Data::Dumper;
7use SMIMEUtil;
8
9$foo = SMIMEUtil::base64(1, "foo bar bash", 12);
10print $foo, '-->', SMIMEUtil::base64(0, $foo, length($foo));
11
12$r = rand;
13print SMIMEUtil::smime_init("rand.txt", $r, length($r)), "\n";
14print SMIMEUtil::smime_get_errors(), "\n";
15print SMIMEUtil::smime_hex("abc", 3), "\n";
16print SMIMEUtil::smime_dotted_hex("abc", 3), "\n";
17
18$data = "abasasdasdsadsadsadsadsadsadsadasdsadc";
19$md = SMIMEUtil::smime_md5($data);
20print SMIMEUtil::smime_hex($md, length($md)), "\n";
21
22$req = <<REQ
23-----BEGIN CERTIFICATE REQUEST-----
24MIIB4DCCAUkCAQAwgZAxCzAJBgNVBAYTAlBUMScwJQYDVQQKEx5Vbml2ZXJzaWRh
25ZGUgVGVjbmljYSBkZSBMaXNib2ExHzAdBgNVBAsTFklTVCwgZW5nZW5oYXJpYSBz
26b2NpYWwxFzAVBgNVBAMTDlNpbWFvIEZlcnJlaXJhMR4wHAYJKoZIhvcNAQkBFg90
27ZXN0QGlzdC51dGwucHQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALT4cW6F
289GLLFW/Xal1pmZqTUSR1v/8CIwAh/2iYOLOINhqIgkyxLouSmnpLvX/q14XPKmLi
29BJ8AUED0HDxOLId5Nf2Akl9g+7y95tjBsQ9s/KwYKi+HfUEEAz8vK014X5XiKwyw
30urclQsb6xYj8lFq4xiBP92FRJWl37PlttsObAgMBAAGgDzANBgNVBA0xBhMEdDEw
31ADANBgkqhkiG9w0BAQQFAAOBgQB1fH+BKnqi3WXWL61NfkLY3ZhFvyhiuM95pihT
323/HnKZsaoMLWWurSG7qzTZY0kZPGkbtHOfLqgf5tWVdeNcR7OAiUrz3xGvKlOfer
33LYDjzZLvDHO18U+Ihq6J/HPM+rcnqc5ZhmiS7Dj2AoWJg0Ol8wMnRjh6V+sQN9gw
349Vd0HA==
35-----END CERTIFICATE REQUEST-----
36REQ
37    ;
38
39print SMIMEUtil::smime_get_req_name($req), "\n";
40print SMIMEUtil::smime_get_req_attr($req);
41print SMIMEUtil::smime_get_req_modulus($req), "\n";
42print SMIMEUtil::smime_get_req_hash($req), "\n";
43
44$pubcrt = <<CERT;
45-----BEGIN CERTIFICATE-----
46MIIC6zCCAlSgAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJQVDEM
47MAoGA1UEChMDVVRMMQwwCgYDVQQLEwNJU1QxFDASBgNVBAMTC0pvcmdlIEFsdmVz
48MRswGQYJKoZIhvcNAQkBFgx0MTdAdGVzdC5jb20wHhcNOTkxMDEwMTI1NDMwWhcN
49MDAxMDA5MTI1NDMwWjBcMQswCQYDVQQGEwJQVDEMMAoGA1UEChMDVVRMMQwwCgYD
50VQQLEwNJU1QxFDASBgNVBAMTC0pvcmdlIEFsdmVzMRswGQYJKoZIhvcNAQkBFgx0
51MTdAdGVzdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOq1xmjzxEqT
52P37MO5SOvomZsQgemk0QcdIFDhtGWH8GkyzLwjLjod05MXBnEmAg7iL22tDo/Nt0
53/s2FGG5Lggp2lrlBUlDJfFbMP9eFT1A/1EJzMtUAhwHfdY1OBwtXP+bgV8sellbd
54H6VA1+duGIiAlgP0Y5Lj+ILJHc0cq33NAgMBAAGjgbwwgbkwDwYDVR0TBAgwBgEB
55/wIBAzARBglghkgBhvhCAQEEBAMCAPcwCwYDVR0PBAQDAgH+MIGFBglghkgBhvhC
56AQ0EeBZ2U2VsZiBzaWduZWQgY2VydCBmb3IgdGVtcG9yYXJ5IHNpZ25pbmcgaW4g
57TUNUIHByb2plY3QuIENvbnRhY3QgU2FtcG8gS2VsbG9tYWtpIDxzYW1wb0Bpa2ku
58Zmk+IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLjANBgkqhkiG9w0BAQQFAAOBgQCa
59GZ3JNH5UIyipRFqeNLyO8Ye85jIK6R7qKJDmS1qjVJ2fjqVarvVo3ZfbLHBqg3UT
60yiU9e3J1em7MaCZD8Kx/YpN3R8dZnd5F7pynxtEypjWAQLM87PbyaVAJdv/jcSaw
61n9LiLt7ZMTpeQCgd2x8VYC4LXQ/l2lbtdMS0QoAmrg==
62-----END CERTIFICATE-----
63CERT
64    ;
65
66$sig = <<SIG
67Content-type: application/x-pkcs7-mime; name="smime.p7m"
68Content-transfer-encoding: base64
69Content-Disposition: attachment; filename="smime.p7m"
70
71MIAGCSqGSIb3DQEHAqCAMIIEPQIBATEJMAcGBSsOAwIaMIAGCSqGSIb3DQEHAaCA
72BIICrkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbg0KDQpET0NfSUQ9MTIxMzEyNDMy
73NQ0KRE9DX01ENV9IQVNIPTFFM0Y4OTFBMUUzRjg5MUExRTNGODkxQTFFM0Y4OTFB
74DQpET0NfU1RBVFVTPTAwMTogZGVjaWZyYWRvIE9LLCBhY2VpdGUgcGFyYSBmaWxh
75IGRlIHByb2Nlc3NhbWVudG8NCkRPQ19BQ0NFUFRfVElNRVNUQU1QPTE5OTkxMDEy
76MTYwMzEyDQoNClJlY2libw0KDQpGb2kgYWNlaXRlLCBwZWxhIHNpc3RlbWEgU2Fw
77aWVucywgcGFyYSBwcm9jZXNzYW1lbnRvIG8gZG9jdW1lbnRvIGN1amENCmNvbnRl
78dWRvIOkgc3VtbWFyaXphZG8gZW0gRE9DX01ENV9IQVNILiBPIGRvY3VtZW50byBm
79b2kgYXRyaWJ1aWRvIG8NCm76bWVybyBkZSBwcm9jZXNzYW1lbnRvIGluZGljYWRv
80IHBlbG8gRE9DX0lELiBBIGRhdGEg6SBob3JhIGRlDQpyZWNlcOfjbyBz428gaW5k
81aWNhZG9zIHBlbG8gRE9DX0FDQ0VQVF9USU1FU1RBTVAsIGlzdG8g6SAxMiBkZSBP
82dXR1YnJvDQpkZSAxOTk5LCAxNjowMzoxMi4NCg0KRXN0ZSByZWNpYm8gc2VydmUg
83Y29tbyBwcm92YSBkZSBlbnRyZWdhIGRlIGRvY3VtZW50byBwYXJhIGNvbmN1cnNv
84IFhYWCwgdW1hDQp2ZXogcXVlIG8gRE9DX0FDQ0VQVF9USU1FU1RBTVAg6SBhbnRl
85cmlvciBhbyBob3JhIGRvIGZlY2hvIHD6YmxpY2Fkby4NCg0KLS0gTyBFc2NyaXbj
86byBFbGVjdHLzbmljbyAtLQ0KAAAAADGCAWYwggFiAgEBMGEwXDELMAkGA1UEBhMC
87UFQxDDAKBgNVBAoTA1VUTDEMMAoGA1UECxMDSVNUMRQwEgYDVQQDEwtKb3JnZSBB
88bHZlczEbMBkGCSqGSIb3DQEJARYMdDE3QHRlc3QuY29tAgEAMAkGBSsOAwIaBQCg
89XTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw05OTEw
90MTIwNTUxMjlaMCMGCSqGSIb3DQEJBDEWBBT6eHDBAtDrb2tEQ0bO3jmsTbwpTDAN
91BgkqhkiG9w0BAQEFAASBgHdpDYfmbzyk9f/A2UuTEEAPwbBbvMmLtlcrcF56t40T
92sHCtL7AQBsaFuVdPDe1Ih5Qn0bmfW8Rheqi3mOplC6s/qrf+1gUyptJZHn6Q3Vog
93t8xQzu7DUMUgSXNLoGk+P3txbwWfqZ6bWOoTvuuxgPDfiEjd+yKPshTODDNUffDI
94AAAAAA==
95SIG
96    ;
97
98print "------- verify sig\n";
99$res = SMIMEUtil::smime_verify_signature($pubcrt, $sig, '', 0), "\n";
100print Dumper($res);
101
102$mime = "Content-type: text/plain\r\n\r\nfoo";
103
104$id = <<KEY_AND_CERT;
105-----BEGIN RSA PRIVATE KEY-----
106Proc-Type: 4,ENCRYPTED
107DEK-Info: DES-EDE3-CBC,1D7ADC69F74A221B
108
109oaEYtg5HRsEJ6nuA6Y97u66udgxzgB9qcPMkOantl0yH3kQoih9DKJhu5tUmeSXE
110PN4P7O/1K0JMuwEzRm6HKiyPQZaXzdG+Mgpg6WhkaeVOFREmBSjweHGf4vMd8NLn
111e8exKvhHeJTOM6gM78KJZ8KYqNOe3IHH49Eoq4WTfPQHi9FCT4aujjSy32ctkeHZ
112LJnnHXaW5gjTfRmOML2HpJ6y6uzmT2FomQA9mrtR+Q1WLq4ms54ESaC5x5286qBh
113XnqMZFclTEcnyv3O95X0ZxG5IXwZtBWZy018TxryxqAhAhcl87k6fPRwaRsJi6zD
114/Vzr7VI7Wu9rNtxvQNBqvWqGH8KF80qPmUiNnUSE+kk+jiR5PylDLM90DfLRHElI
115E8nGvqUk3bgLujeYR/89Mx9s4orSMbWmPUROFKTA+8p9Ni2wDutIyotYGI6e+amu
116D38N/+NaKPn2OZfDvZUnDJ5bakYAuSX8M8QtP8B99m1ul2zLUL23a5hcKxS9DiyJ
117vI80V3ingIGLIR+kk/waEVpRaPuPn/wtqOKVlt0g8977LyNFOisEWxLwEafQA9w3
1189wVt5JzRowZWI33dq3lza368seJVMPtmZ5u+fFrWKEy+wLnfThdgdrs97ruJOTxM
119w6kkEjsKzXyWKJqXEPy/vEWDJRBQHmX0s8ENC6N7+yeS0Z3dppD/uuqO8NCX0nUk
120dNAldivL2vBBf/jDscyePyP1/FmkbRj+Uw22H1ApO2GXTEgez1E6h8kQ9wXZtVvn
1218VOsXj6nT+M8rNpHmu33WwkKl6jr0g+W/BUiQTgUsKYjxtPcncjQKg==
122-----END RSA PRIVATE KEY-----
123-----BEGIN CERTIFICATE-----
124MIIC6zCCAlSgAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJQVDEM
125MAoGA1UEChMDVVRMMQwwCgYDVQQLEwNJU1QxFDASBgNVBAMTC0pvcmdlIEFsdmVz
126MRswGQYJKoZIhvcNAQkBFgx0MTdAdGVzdC5jb20wHhcNOTkxMDEwMTI1NDMwWhcN
127MDAxMDA5MTI1NDMwWjBcMQswCQYDVQQGEwJQVDEMMAoGA1UEChMDVVRMMQwwCgYD
128VQQLEwNJU1QxFDASBgNVBAMTC0pvcmdlIEFsdmVzMRswGQYJKoZIhvcNAQkBFgx0
129MTdAdGVzdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOq1xmjzxEqT
130P37MO5SOvomZsQgemk0QcdIFDhtGWH8GkyzLwjLjod05MXBnEmAg7iL22tDo/Nt0
131/s2FGG5Lggp2lrlBUlDJfFbMP9eFT1A/1EJzMtUAhwHfdY1OBwtXP+bgV8sellbd
132H6VA1+duGIiAlgP0Y5Lj+ILJHc0cq33NAgMBAAGjgbwwgbkwDwYDVR0TBAgwBgEB
133/wIBAzARBglghkgBhvhCAQEEBAMCAPcwCwYDVR0PBAQDAgH+MIGFBglghkgBhvhC
134AQ0EeBZ2U2VsZiBzaWduZWQgY2VydCBmb3IgdGVtcG9yYXJ5IHNpZ25pbmcgaW4g
135TUNUIHByb2plY3QuIENvbnRhY3QgU2FtcG8gS2VsbG9tYWtpIDxzYW1wb0Bpa2ku
136Zmk+IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLjANBgkqhkiG9w0BAQQFAAOBgQCa
137GZ3JNH5UIyipRFqeNLyO8Ye85jIK6R7qKJDmS1qjVJ2fjqVarvVo3ZfbLHBqg3UT
138yiU9e3J1em7MaCZD8Kx/YpN3R8dZnd5F7pynxtEypjWAQLM87PbyaVAJdv/jcSaw
139n9LiLt7ZMTpeQCgd2x8VYC4LXQ/l2lbtdMS0QoAmrg==
140-----END CERTIFICATE-----
141KEY_AND_CERT
142    ;
143
144print "------- encrypt\n";
145$enc = SMIMEUtil::smime_encrypt($pubcrt, $mime);
146print $enc, "\n";
147
148print "------- decrypt\n";
149($len, $plain) = SMIMEUtil::smime_decrypt($id, 'secret', $enc);
150print $plain, "\n";
151
152$enc2 =<<ENC2;
153Content-type: application/x-pkcs7-mime; name="smime.p7m"
154Content-transfer-encoding: base64
155Content-Disposition: attachment; filename="smime.p7m"
156
157MIAGCSqGSIb3DQEHA6CAMIIBTgIBADGB+zCB+AIBADBhMFwxCzAJBgNVBAYTAlBU
158MQwwCgYDVQQKEwNVVEwxDDAKBgNVBAsTA0lTVDEUMBIGA1UEAxMLSm9yZ2UgQWx2
159ZXMxGzAZBgkqhkiG9w0BCQEWDHQxN0B0ZXN0LmNvbQIBADANBgkqhkiG9w0BAQEF
160AASBgDld1yR7Ni9Hr7az4LuyJ9nNEbGD3pdHbZmE7UEM6odIr93rOcw4kXQscbfv
161sloFJ2FdG3uB3YWby+JWwotEEwC68YEhWXUD1Vx2SZUXMgcJfoULJ0rIdXx4CLDV
162D2zANqXbtEVM58WQ8ih1NMPRbg6MGCPH5PNSYrJ4GYplKYsFMEsGCSqGSIb3DQEH
163BjAUBggqhkiG9w0DBwQIhoT5ut6S4JmAKJt3y00IQBvi6dPFdRfMSXmjOP83R5kg
164/g2ZcaqAaeu7kRR2vlD1xB8AAAAA
165ENC2
166    ;
167
168print "------- decrypt2\n";
169($len, $plain) = SMIMEUtil::smime_decrypt($id, 'secret', $enc2);
170print $plain, "\n";
171
172print "-------- sign\n";
173$s = SMIMEUtil::smime_sign($id, 'secret', $mime);
174print $s, "\n";
175
176print "-------- ... and verify\n";
177$res = SMIMEUtil::smime_verify_signature($pubcrt,$s, '', 0), "\n";
178print Dumper($res);
179
180print "-------- clear sig\n";
181$clear_sig = SMIMEUtil::smime_clear_sign($id, 'secret', $mime);
182print $clear_sig, "\n";
183
184print "-------- verify clear sig\n";
185
186#$mime .= 'aa';
187$res = SMIMEUtil::smime_verify_signature($pubcrt, $clear_sig,
188					 $mime, length($mime)), "\n";
189
190print Dumper($res);
191
192print "Done.\n";
193
194#EOF
195