Sha256: 68e7401e54ec798c6840bd873663f871363581b8ac76ab4a3914215559df9943
Contents?: true
Size: 1.51 KB
Versions: 4
Compression:
Stored size: 1.51 KB
Contents
require 'openssl' require 'base64' module Crypto def self.create_keys(priv, pub, bits) private_key = OpenSSL::PKey::RSA.new(bits) File.open(priv, "w+") { |fp| fp << private_key.to_s } File.open(pub, "w+") { |fp| fp << private_key.public_key.to_s } private_key end class Key def initialize(data, size) @public = (data =~ /^-----BEGIN (RSA|DSA) PRIVATE KEY-----$/).nil? @key = OpenSSL::PKey::RSA.new(data) @size = (size == 4096 ? 512 : 256) end def self.from_file(filename, size = 4096) self.new(File.read(filename), size) end def encrypt_to_stream(data) encrypt_data = StringIO.new i = 0 while buf = data[i..(i+=117)] do encrypt_data << encrypt(buf) end encrypt_data.seek 0 encrypt_data end def decrypt_from_stream(data) encrypt_data = StringIO.new(data.chomp) encrypt_data.seek 0 decrypt_data = "" while buf = encrypt_data.read(@size) do decrypt_data += decrypt(buf) end decrypt_data end def encrypt(text) @key.send("#{key_type}_encrypt", text) rescue Exception => e puts_fail "RSA encrypt error: #{e.message}" end def decrypt(text) @key.send("#{key_type}_decrypt", text) rescue Exception => e puts_fail "RSA decrypt error: #{e.message}" end def private? !@public end def public? @public end def key_type @public ? :public : :private end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
encbs-0.2.1.beta2 | lib/crypto.rb |
encbs-0.2.1.beta1 | lib/crypto.rb |
encbs-0.2.1.alpha | lib/crypto.rb |
encbs-0.2.0.alpha | lib/crypto.rb |