All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gems.jruby-openssl-0.7.5.test.test_pkey_rsa.rb Maven / Gradle / Ivy

The newest version!
require "openssl"
require "test/unit"

class TestPKeyRSA < Test::Unit::TestCase
  def test_has_correct_methods
    pkey_methods = OpenSSL::PKey::PKey.instance_methods(false).sort.map(&:intern) - [:initialize]
    assert_equal [:sign, :verify], pkey_methods

    rsa_methods = OpenSSL::PKey::RSA.instance_methods(false).sort.map(&:intern) - [:initialize]
    assert_equal [:d, :d=, :dmp1, :dmp1=, :dmq1, :dmq1=, :e, :e=, :export, :iqmp, :iqmp=, :n, :n=, :p, :p=, :params, :private?, :private_decrypt, :private_encrypt, :public?, :public_decrypt, :public_encrypt, :public_key, :q, :q=, :to_der, :to_pem, :to_s, :to_text], rsa_methods

    assert_equal [:generate], OpenSSL::PKey::RSA.methods(false).map(&:intern)
  end
  
  #iqmp == coefficient
  #e == public exponent
  #n == modulus
  #d == private exponent
  #p == prime1
  #q == prime2
  #dmq1 == exponent2
  #dmp1 == exponent1
  
  def test_can_generate_rsa_key
    OpenSSL::PKey::RSA.generate(512)
  end

  def test_malformed_rsa_handling
    pem = <<__EOP__
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtiU1/UMzIQ1On9OlZGoV
S0yySFYWoXLH12nmP69fg9jwdRbQlb0rxLn7zATbwfqcvGpCcW+8SmdwW74elNrc
wRtbKjJKfbJCsVfDssbbj6BF+Bcq3ihi8+CGNXFdJOYhZZ+5Adg2Qc9Qp3Ubw9wu
/3Ai87+1aQxoZPMFwdX2BRiZvxch9dwHVyL8EuFGUOYId/8JQepHyZMbTqp/8wlA
UAbMcPW+IKp3N0WMgred3CjXKHAqqM0Ira9RLSXdlO2uFV4OrM0ak8rnTN5w1DsI
McjvVvOck0aIxfHEEmeadt3YMn4PCW33/j8geulZLvt0ci60/OWMSCcIqByITlvY
DwIDAQAB
-----END PUBLIC KEY-----
__EOP__
    pkey = OpenSSL::PKey::RSA.new(pem)
    # jruby-openssl/0.6 raises NativeException
    assert_raise(OpenSSL::PKey::RSAError, 'JRUBY-4492') do
      pkey.public_decrypt("rah")
    end
  end

  # http://github.com/jruby/jruby-openssl/issues#issue/1
  def test_load_pkey_rsa
    pem = <<__EOP__
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALRiMLAh9iimur8V
A7qVvdqxevEuUkW4K+2KdMXmnQbG9Aa7k7eBjK1S+0LYmVjPKlJGNXHDGuy5Fw/d
7rjVJ0BLB+ubPK8iA/Tw3hLQgXMRRGRXXCn8ikfuQfjUS1uZSatdLB81mydBETlJ
hI6GH4twrbDJCR2Bwy/XWXgqgGRzAgMBAAECgYBYWVtleUzavkbrPjy0T5FMou8H
X9u2AC2ry8vD/l7cqedtwMPp9k7TubgNFo+NGvKsl2ynyprOZR1xjQ7WgrgVB+mm
uScOM/5HVceFuGRDhYTCObE+y1kxRloNYXnx3ei1zbeYLPCHdhxRYW7T0qcynNmw
rn05/KO2RLjgQNalsQJBANeA3Q4Nugqy4QBUCEC09SqylT2K9FrrItqL2QKc9v0Z
zO2uwllCbg0dwpVuYPYXYvikNHHg+aCWF+VXsb9rpPsCQQDWR9TT4ORdzoj+Nccn
qkMsDmzt0EfNaAOwHOmVJ2RVBspPcxt5iN4HI7HNeG6U5YsFBb+/GZbgfBT3kpNG
WPTpAkBI+gFhjfJvRw38n3g/+UeAkwMI2TJQS4n8+hid0uus3/zOjDySH3XHCUno
cn1xOJAyZODBo47E+67R4jV1/gzbAkEAklJaspRPXP877NssM5nAZMU0/O/NGCZ+
3jPgDUno6WbJn5cqm8MqWhW1xGkImgRk+fkDBquiq4gPiT898jusgQJAd5Zrr6Q8
AO/0isr/3aa6O6NLQxISLKcPDk2NOccAfS/xOtfOz4sJYM3+Bs4Io9+dZGSDCA54
Lw03eHTNQghS0A==
-----END PRIVATE KEY-----
__EOP__
    assert_nothing_raised do
      pkey = OpenSSL::PKey::RSA.new(pem)
      pkey2 = OpenSSL::PKey::RSA.new(pkey.to_pem)
      assert_equal(pkey.n, pkey2.n)
      assert_equal(pkey.e, pkey2.e)
      assert_equal(pkey.d, pkey2.d)
    end
  end

  def test_load_pkey_rsa_enc
    # password is '1234'
    pem = <<__EOP__
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICoTAbBgkqhkiG9w0BBQMwDgQIfvehP6JEg2wCAggABIICgD7kzSr+xWgdAuzG
cYNkCEWyKF6V0cJ58AKSoL4FQ59OQvQP/hMnSZEMiUpeGNRE6efC7O02RUjNarIk
ciCYIBqd5EFG3OSypK5l777AbCChIkzZHbyE/pIbadr8ZX9C4pkwzPqS0Avzavxi
5s1WDX2GggJkBcQUijqG9QuOZcOvoYbojHPT4tdJq+J6s+0LFas9Jp3a6dYkxtgv
u8Z6EFDZoLGOSVy/jCSMuZAnhoOxUCYqd9FFo2jryV7tQ/CaYAUApAQFTLgBA9qk
4WmyKRpwzIx6EG1pkqulvPXJCcTat9YwllEDVuQ2rKVwDepSl9O7X170Kx1sBecz
mGcfqviU9xwP5mkXO/TLoTZExkHF08Y3d/PTMdxGEDZH37/yRqCIb3Uyqv/jLibM
/s9fm52aWsfO1ndHEhciovlMJvGXq3+e+9gmq1w2TyNQahRc5fwfhwWKhPKfYDBk
7AtjPGfELDX61WZ5m+4Kb70BcGSAEgXCaBydVsMROy0B8jkYgtAnVBb4EMrGOsCG
jmNeW9MRIhrhDcifdyq1DMNg7IONMF+5mDdQ3FhK6WzlFU+8cTN517qA8L3A3+ZX
asiS+rx5/50InINknjuvVkmTGMzjl89nMNrZCjhx9sIDfXQ3ZKFmh1mvnXq/fLan
CgXn/UtLoykrSlobgqIxZslhj3p01kMCgGe62S3kokYrDTQEc57rlKWWR3Xyjy/T
LsecXAKEROj95IHSMMnT4jl+TJnbvGKQ2U9tOOB3W+OOOlDEFE59pQlcmQPAwdzr
mzI4kupi3QRTFjOgvX29leII9sPtpr4dKMKVIRxKnvMZhUAkS/n3+Szfa6zKexLa
4CHVgDo=
-----END ENCRYPTED PRIVATE KEY-----
__EOP__
    assert_nothing_raised do
      pkey = OpenSSL::PKey::RSA.new(pem, '1234')
      pkey2 = OpenSSL::PKey::RSA.new(pkey.to_pem)
      assert_equal(pkey.n, pkey2.n)
      assert_equal(pkey.e, pkey2.e)
      assert_equal(pkey.d, pkey2.d)
    end
  end

  # jruby-openssl/0.6 causes NPE
  def test_generate_pkey_rsa_empty
    assert_nothing_raised do
      OpenSSL::PKey::RSA.new.to_pem
    end
  end

  def test_generate_pkey_rsa_length
    assert_nothing_raised do
      OpenSSL::PKey::RSA.new(512).to_pem
    end
  end

  def test_generate_pkey_rsa_to_text
    assert_match(
      /Private-Key: \(512 bit\)/,
      OpenSSL::PKey::RSA.new(512).to_text
    )
  end

  def test_load_pkey_rsa
    pkey = OpenSSL::PKey::RSA.new(512)
    assert_equal(pkey.to_pem, OpenSSL::PKey::RSA.new(pkey.to_pem).to_pem)
  end

  def test_load_pkey_rsa_public
    pkey = OpenSSL::PKey::RSA.new(512).public_key
    assert_equal(pkey.to_pem, OpenSSL::PKey::RSA.new(pkey.to_pem).to_pem)
  end

  def test_load_pkey_rsa_der
    pkey = OpenSSL::PKey::RSA.new(512)
    assert_equal(pkey.to_der, OpenSSL::PKey::RSA.new(pkey.to_der).to_der)
  end

  def test_load_pkey_rsa_public_der
    pkey = OpenSSL::PKey::RSA.new(512).public_key
    assert_equal(pkey.to_der, OpenSSL::PKey::RSA.new(pkey.to_der).to_der)
  end

  def test_load_rsa_des_encrypted
    password = 'pass'
    pkey = OpenSSL::PKey::RSA.generate(1024)
    cipher = OpenSSL::Cipher::Cipher.new('des-cbc')
    pem = pkey.to_pem(cipher, password)
    assert_equal(pkey.n, OpenSSL::PKey::RSA.new(pem, password).n)
  end

  def test_load_rsa_3des_encrypted
    password = 'pass'
    pkey = OpenSSL::PKey::RSA.generate(1024)
    cipher = OpenSSL::Cipher::Cipher.new('des-ede3-cbc')
    pem = pkey.to_pem(cipher, password)
    assert_equal(pkey.n, OpenSSL::PKey::RSA.new(pem, password).n)
  end

  def test_load_rsa_aes_encrypted
    password = 'pass'
    pkey = OpenSSL::PKey::RSA.generate(1024)
    cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
    pem = pkey.to_pem(cipher, password)
    assert_equal(pkey.n, OpenSSL::PKey::RSA.new(pem, password).n)
  end

  CRUBY_DES_RSA_PEM = <




© 2015 - 2025 Weber Informatics LLC | Privacy Policy