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