spec/rsa_spec.rb in gibberish-0.0.2 vs spec/rsa_spec.rb in gibberish-1.0.0
- old
+ new
@@ -1,43 +1,78 @@
require 'spec_helper'
describe "RSA key generation" do
it "should generate a key" do
keypair = Gibberish::RSA.generate_keypair
- keypair.should be_instance_of(Gibberish::RSA::KeyPair)
+ keypair.must_be_instance_of(Gibberish::RSA::KeyPair)
end
it "should generate a key with custom bits" do
keypair = Gibberish::RSA.generate_keypair(1024)
- keypair.should be_instance_of(Gibberish::RSA::KeyPair)
+ keypair.must_be_instance_of(Gibberish::RSA::KeyPair)
end
it "should answer to public and private key methods" do
keypair = Gibberish::RSA.generate_keypair(1024)
- keypair.should be_instance_of(Gibberish::RSA::KeyPair)
- keypair.public_key.should_not be_nil
- keypair.private_key.should_not be_nil
+ keypair.must_be_instance_of(Gibberish::RSA::KeyPair)
+ keypair.public_key.wont_be_nil
+ keypair.private_key.wont_be_nil
end
end
describe "RSA" do
before do
k = Gibberish::RSA.generate_keypair(1024)
- @cipher = Gibberish::RSA.new(k.public_key, k.private_key)
- @pub_cipher = Gibberish::RSA.new(k.public_key, k.private_key)
+ @cipher = Gibberish::RSA.new(k.private_key)
+ @pub_cipher = Gibberish::RSA.new(k.public_key)
end
it "should encrypt/decrypt with a keypair" do
encrypted = @cipher.encrypt("Some data")
- p encrypted
decrypted = @cipher.decrypt(encrypted)
- encrypted.should match(/^[a-zA-Z0-9\+\\\n=]+$/) # Be base64
- decrypted.should eql("Some data")
+ encrypted.must_match(/^[a-zA-Z0-9\+\/\n=]+$/) # Be base64
+ decrypted.must_equal("Some data")
end
it "should work without private key" do
enc = @pub_cipher.encrypt("Some data")
- enc.should_not be_nil
+ enc.must_match(/^[a-zA-Z0-9\+\/\n=]+$/) # Be base64
+ end
+
+end
+
+describe "OpenSSL interop" do
+
+ before do
+ @ossl_private_key = File.read('spec/openssl/private.pem')
+ @ossl_public_key = File.read('spec/openssl/public.pem')
+ @keypair = Gibberish::RSA.generate_keypair(1024)
+ @keypair.passphrase = "p4ssw0rd"
+ tmp_file = "/tmp/gibberish-spec"
+ @pub_key_file = "#{tmp_file}-pub.pem"
+ @priv_key_file = "#{tmp_file}-priv.pem"
+ File.open(@pub_key_file, 'w') {|f| f.write(@keypair.public_key) }
+ File.open(@priv_key_file, 'w') {|f| f.write(@keypair.private_key) }
+ end
+
+ it "should decode and OpenSSL generated key and crypted message" do
+ # openssl genrsa -des3 -out spec/openssl/private.pem 2048
+ # openssl rsa -in spec/openssl/private.pem -out spec/openssl/public.pem -outform PEM -pubout
+ # openssl rsautl -encrypt -inkey public.pem -pubin -in spec/openssl/plaintext.txt -out spec/openssl/plaintext.crypted
+ cipher = Gibberish::RSA.new(@ossl_private_key, @keypair.passphrase)
+ cipher.decrypt(File.read('spec/openssl/plaintext.crypted'), :binary => true).must_equal(File.read('spec/openssl/plaintext.txt'))
+ end
+
+ if ENV['INTERACTIVE']
+ it "should encode an OpenSSL compatible format" do
+ # openssl rsautl -decrypt -inkey /tmp/gibberish-spec-priv.pem -in /tmp/gibberish-spec-test.crypted
+ cipher = Gibberish::RSA.new(@keypair.public_key)
+ tmp_crypt_file = '/tmp/gibberish-spec-test.crypted'
+ File.open(tmp_crypt_file, 'w') {|f| f.write(cipher.encrypt("secret text", :binary => true))}
+ puts "\n Please type '#{@keypair.passphrase}' when prompted"
+ output = `openssl rsautl -decrypt -inkey /tmp/gibberish-spec-priv.pem -in /tmp/gibberish-spec-test.crypted`
+ output.must_equal("secret text")
+ end
end
end