class ActionMailerX509::X509
Attributes
certificate[RW]
certificate_store[RW]
cipher[RW]
rsa_key[RW]
Public Class Methods
new(attrs = {})
click to toggle source
pass_phrase cipher_type_str certificate and rsa_key
or certificate_p12
# File lib/action_mailer_x509/x509.rb, line 13 def initialize(attrs = {}) attrs.symbolize_keys! attrs.reverse_merge!(pass_phrase: '', cipher_type_str: 'des') if attrs[:certificate_p12] p12 = OpenSSL::PKCS12.new(prepare_value(attrs[:certificate_p12]), attrs[:pass_phrase]) @certificate = p12.certificate @rsa_key = p12.key elsif attrs[:certificate] and attrs[:rsa_key] @certificate = OpenSSL::X509::Certificate.new(prepare_value(attrs[:certificate])) @rsa_key = OpenSSL::PKey::RSA.new(prepare_value(attrs[:rsa_key]), attrs[:pass_phrase]) else raise Exception.new('Wrong configuration') end @cipher = OpenSSL::Cipher.new(attrs[:cipher_type_str]) @certificate_store = OpenSSL::X509::Store.new @certificate_store.add_cert(certificate) end
Public Instance Methods
decode(encrypted_text)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 39 def decode(encrypted_text) pkcs7 = read(encrypted_text) pkcs7.decrypt(@rsa_key, certificate) rescue => e raise DecodeError.new(e.message) end
encode(text)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 34 def encode(text) write OpenSSL::PKCS7.encrypt([certificate], text, cipher) #OpenSSL::PKCS7.encrypt([certificate], text, cipher, OpenSSL::PKCS7::BINARY) end
sign(text)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 46 def sign(text) write OpenSSL::PKCS7.sign(certificate, rsa_key, text, [], OpenSSL::PKCS7::DETACHED|OpenSSL::PKCS7::BINARY) end
verify(text)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 50 def verify(text) #set the signer's certificates are not chain verified. result = read(text).verify(nil, @certificate_store, nil, OpenSSL::PKCS7::NOVERIFY) result ? read(text).data : raise(VerificationError.new('Verification failed !!!')) rescue => e raise VerificationError.new(e.message) end
Protected Instance Methods
read(text)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 63 def read(text) OpenSSL::PKCS7.read_smime(text) rescue OpenSSL::PKCS7.new(text) end
write(pcks7)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 59 def write(pcks7) OpenSSL::PKCS7::write_smime pcks7 end
Private Instance Methods
prepare_value(attr)
click to toggle source
# File lib/action_mailer_x509/x509.rb, line 68 def prepare_value(attr) case attr.class.name when 'String' attr when 'Pathname' File::read(attr) when 'File' attr.read else raise Exception.new('Wrong param type') end end