Skip to content

Instantly share code, notes, and snippets.

@sbfaulkner
Created July 7, 2015 14:42
Show Gist options
  • Save sbfaulkner/19e5e24080cb5040d9b2 to your computer and use it in GitHub Desktop.
Save sbfaulkner/19e5e24080cb5040d9b2 to your computer and use it in GitHub Desktop.
crypt tests
require 'rubygems'
require 'base64'
require 'encryptor'
require 'builder'
# private_key = OpenSSL::PKey::RSA.new(2048)
# public_key = private_key.public_key
# test data from TST
# key = Base64.decode64("NxQLMrUXaSKZYm0Ef3Ab1siRevbOxF5HLpvCKXPdZh4=")
# iv = Base64.decode64("mWJtBH9wG9YO4QAF5ACDEg==")
key = Base64.decode64("UaroOFOO0OfZWe4M94bMS4UIv97YD/+qLEfO+6vZOnI=")
iv = Base64.decode64("2VnuDPeGzEs+Q77CY9gufA==")
# encrypted_text = "rseOdNdXu1Pjyl+M21iGH4J4ozgYXvrlcyxyH7/CTNA="
################################################################################
# SENDER (ie. on Windows)
#
# # generate random key
# key = Digest::SHA1.hexdigest("secret-#{Time.now}-#{rand}")
# puts "--- random key ---\n#{key}\n---"
# puts
text = "testing 1 2 3"
# encrypt text
text = Encryptor.encrypt(text, :key => key, :iv => iv)
text = Base64.encode64(text)
puts "--- #{Encryptor.default_options[:algorithm]} encrypted text ---\n#{text}---"
puts
# load RSA public key
public_key = OpenSSL::PKey::RSA.new <<-END_PUBLIC_KEY
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
END_PUBLIC_KEY
# puts public_key.to_pem
# puts
# #
# # encoding public key as xml
# #
# class OpenSSL::BN
# def bytes
# bytes = []
# (num_bytes-1).downto(0) do |index|
# bytes << ((self >> (index*8)).to_i & 0xFF)
# end
# bytes
# end
#
# def chars
# bytes.collect { |byte| byte.chr }
# end
# end
#
# class String
# def to_bn
# OpenSSL::BN.new(bytes.collect.inject(0) { |bn,byte| (bn << 8) + byte }.to_s)
# end
# end
#
# modulus = public_key.n
# puts "--- public key modulus ---\n#{modulus}\n---"
# puts
#
# exponent = public_key.e
# puts "--- public key exponent ---\n#{exponent}\n---"
# puts
#
# modulus = Base64.encode64(modulus.chars.join).split("\n").join
# exponent = Base64.encode64(exponent.chars.join).split("\n").join
#
# xml = Builder::XmlMarkup.new
# xml.RSAKeyValue do |key|
# key.Modulus modulus
# key.Exponent exponent
# end
# puts "--- public key as xml ---\n#{xml.target!}\n---"
# puts
#
# modulus = Base64.decode64(modulus).to_bn
# puts "--- public key modulus ---\n#{modulus}\n---"
# puts
#
# exponent = Base64.decode64(exponent).to_bn
# puts "--- public key exponent ---\n#{exponent}\n---"
# puts
# encrypt key
key = Base64.encode64(key)
key = public_key.public_encrypt(key)
key = Base64.encode64(key)
puts "--- public key encrypted key ---\n#{key}---"
puts
################################################################################
# RECEIVER (ie. on Linux)
#
# load RSA private key
private_key = OpenSSL::PKey::RSA.new <<-END_PRIVATE_KEY
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
END_PRIVATE_KEY
key = Base64.decode64("UaroOFOO0OfZWe4M94bMS4UIv97YD/+qLEfO+6vZOnI=")
iv = Base64.decode64("2VnuDPeGzEs+Q77CY9gufA==")
text = "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"
# decrypt key
# key = Base64.decode64(key)
# key = private_key.private_decrypt(key)
# key = Base64.decode64(key)
puts "--- private key decrypted key ---\n#{Base64.encode64(key)}\n---"
puts
puts "key=#{key.inspect}"
puts "iv=#{iv.inspect}"
# decrypt text
text = Base64.decode64(text).decrypt(:key => key, :iv => iv)
puts "--- #{Encryptor.default_options[:algorithm]} decrypted text ---\n#{text}\n---"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment