1require 'openssl'
2require 'optparse'
3include OpenSSL
4
5options = ARGV.getopts("c:k:r:")
6
7cert_file = options["c"]
8key_file  = options["k"]
9rcpt_file = options["r"]
10
11cert = X509::Certificate.new(File::read(cert_file))
12key = PKey::RSA.new(File::read(key_file))
13
14data  = "Content-Type: text/plain\r\n"
15data << "\r\n"
16data << "This is a clear-signed message.\r\n"
17
18p7sig  = PKCS7::sign(cert, key, data, [], PKCS7::DETACHED)
19smime0 = PKCS7::write_smime(p7sig)
20
21rcpt  = X509::Certificate.new(File::read(rcpt_file))
22p7enc = PKCS7::encrypt([rcpt], smime0)
23print PKCS7::write_smime(p7enc)
24