class OpenSSL::PKCS12

def generate(pass, alias_name, key, cert, ca = nil)

def generate(pass, alias_name, key, cert, ca = nil)
  @key = key
  @certificate = cert
  @ca_certs = ca
  key_reader = StringReader.new(key.to_pem)
  key_pair = PEMReader.new(key_reader).read_object
  certificates = cert.to_pem
  if ca
    ca.each { |ca_cert| 
      certificates << ca_cert.to_pem
    }
  end
  cert_input_stream = StringBufferInputStream.new(certificates)
  certs = CertificateFactory.get_instance("X.509").generate_certificates(cert_input_stream)
  store = KeyStore.get_instance("PKCS12", "BC")
  store.load(nil, nil)
  store.set_key_entry(alias_name, key_pair.get_private, nil, certs.to_array(Java::java.security.cert.Certificate[certs.size].new))
  pkcs12_output_stream = ByteArrayOutputStream.new
  password = pass.nil? ? "" : pass;
  begin
    store.store(pkcs12_output_stream, password.to_java.to_char_array)
  rescue java.lang.Exception => e
    raise PKCS12Error, "Exception: #{e}"
  end 
  @der = String.from_java_bytes(pkcs12_output_stream.to_byte_array)
end