module OpenSSL::PKey

Public Class Methods

pkcs8_parse(der_bytes) click to toggle source

Parse the correct type of OpenSSL::PKey from a der encoded PKCS8 private key

# File lib/keystores/jks/pkcs8_key.rb, line 142
def self.pkcs8_parse(der_bytes)
  key_type = extract_key_type(der_bytes)
  OpenSSL::PKey.const_get(key_type).new(der_bytes)
end

Private Class Methods

box(lines) click to toggle source
# File lib/keystores/jks/pkcs8_key.rb, line 165
def self.box(lines)
  lines.unshift '-----BEGIN PRIVATE KEY-----'
  lines.push '-----END PRIVATE KEY-----'
  lines.join("\n")
end
der_to_pem(der) click to toggle source
# File lib/keystores/jks/pkcs8_key.rb, line 161
def self.der_to_pem(der)
  box(Base64.strict_encode64(der).scan(/.{1,64}/))
end
extract_key_type(der_bytes) click to toggle source
# File lib/keystores/jks/pkcs8_key.rb, line 149
def self.extract_key_type(der_bytes)
  asn1 = OpenSSL::ASN1.decode(der_bytes)
  algorithm = asn1.value[1].value[0].value.downcase
  if algorithm.include? 'rsa'
    'RSA'
  elsif algorithm.include? 'ec'
    'EC'
  elsif algorithm.include? 'dsa'
    'DSA'
  end
end