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