symmetric-encryption 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -55,9 +55,8 @@ module Symmetric
55
55
  self.key = symmetric_key
56
56
  self.iv = symmetric_iv
57
57
  else
58
- load_keys(config['key_filename'], config['iv_filename'], config['private_key'])
58
+ load_keys(config['symmetric_key_filename'], config['symmetric_iv_filename'], config['private_rsa_key'])
59
59
  end
60
-
61
60
  end
62
61
 
63
62
  # Load the symmetric key to use for encrypting and decrypting data
@@ -76,35 +75,39 @@ module Symmetric
76
75
  nil
77
76
  end
78
77
 
79
- # Generate new random keys for use with this Encryption library
80
- #
81
- # Creates:
82
- # 2048 bit Private Key private.key
83
- # 2048 bit Public Key public.key
78
+ # Generate new random symmetric keys for use with this Encryption library
84
79
  #
85
- # Symmetric Key .key
80
+ # Creates Symmetric Key .key
86
81
  # and initilization vector .iv
87
82
  # which is encrypted with the above Public key
88
83
  #
89
84
  # Note: Existing files will be overwritten
90
- def self.generate_key_files(symmetric_keys_path='.', rsa_keys_path='.', cipher='aes-256-cbc')
91
- # Generate Asymmetric key pair
92
- new_key = OpenSSL::PKey::RSA.generate(2048)
85
+ def self.generate_symmetric_key_files(filename=nil, environment=nil)
86
+ # Temporary: Generate private key manually for now. Will automate soon.
87
+ #new_key = OpenSSL::PKey::RSA.generate(2048)
88
+
89
+ filename ||= File.join(Rails.root, "config", "symmetric-encryption.yml")
90
+ environment ||= (Rails.env || ENV['RAILS'])
91
+ config = YAML.load_file(filename)[environment]
92
+
93
+ raise "Missing mandatory 'key_filename' for environment:#{environment} in #{filename}" unless key_filename = config['symmetric_key_filename']
94
+ iv_filename = config['symmetric_iv_filename']
95
+ raise "Missing mandatory 'private_key' for environment:#{environment} in #{filename}" unless private_key = config['private_rsa_key']
96
+ rsa_key = OpenSSL::PKey::RSA.new(private_key)
97
+
93
98
  # To ensure compatibility with C openssl code, remove RSA from pub file headers
94
- pub_key = new_key.public_key.export.gsub('RSA PUBLIC','PUBLIC')
95
- File.open(File.join(rsa_keys_path, 'public.key'), 'w') {|file| file.write(pub_key)}
96
- File.open(File.join(rsa_keys_path, 'private.key'), 'w') {|file| file.write(new_key.to_pem)}
99
+ #File.open(File.join(rsa_keys_path, 'private.key'), 'w') {|file| file.write(new_key.to_pem)}
97
100
 
98
101
  # Generate Symmetric Key
99
- cipher = OpenSSL::Cipher::Cipher.new(cipher)
100
- cipher.encrypt
101
- @@key = cipher.random_key
102
- @@iv = cipher.random_iv
102
+ openssl_cipher = OpenSSL::Cipher::Cipher.new(config['cipher'] || 'aes-256-cbc')
103
+ openssl_cipher.encrypt
104
+ @@key = openssl_cipher.random_key
105
+ @@iv = openssl_cipher.random_iv if iv_filename
103
106
 
104
107
  # Save symmetric key after encrypting it with the private asymmetric key
105
- File.open(File.join(symmetric_keys_path, '.key'), 'wb') {|file| file.write( OpenSSL::PKey::RSA.new(new_key.public_key).public_encrypt(@@key) ) }
106
- File.open(File.join(symmetric_keys_path, '.iv'), 'wb') {|file| file.write( OpenSSL::PKey::RSA.new(new_key.public_key).public_encrypt(@@iv) ) }
107
- Rails.logger.info("Generated new Private, Public and Symmetric Key for encryption. Please copy #{filename} to the other servers.")
108
+ File.open(key_filename, 'wb') {|file| file.write( rsa_key.public_encrypt(@@key) ) }
109
+ File.open(iv_filename, 'wb') {|file| file.write( rsa_key.public_encrypt(@@iv) ) } if iv_filename
110
+ puts("Generated new Symmetric Key for encryption. Please copy #{key_filename} and #{iv_filename} to the other web servers in #{environment}.")
108
111
  end
109
112
 
110
113
  # Generate a 22 character random password
@@ -1,13 +1,13 @@
1
- namespace 'symmetric-encryption' do
1
+ namespace :symmetric_encryption do
2
2
 
3
- desc 'Decrypt the supplied string. Example: VALUE="Hello World" rake symmetric-encryption:decrypt'
4
- task :decrypt do
3
+ desc 'Decrypt the supplied string. Example: VALUE="_encrypted_string_" rake symmetric_encryption:decrypt'
4
+ task :decrypt => :environment do
5
5
  puts "\nEncrypted: #{ENV['VALUE']}"
6
6
  puts "Decrypted: #{Symmetric::Encryption.decrypt(ENV['VALUE'])}\n\n"
7
7
  end
8
8
 
9
- desc 'Encrypt a value, such as a password. Example: rake symmetric-encryption:encrypt'
10
- task :encrypt do
9
+ desc 'Encrypt a value, such as a password. Example: rake symmetric_encryption:encrypt'
10
+ task :encrypt => :environment do
11
11
  require 'highline'
12
12
  password1 = nil
13
13
  password2 = 0
@@ -23,8 +23,13 @@ namespace 'symmetric-encryption' do
23
23
  puts "\nEncrypted: #{Symmetric::Encryption.encrypt(password1)}\n\n"
24
24
  end
25
25
 
26
- desc 'Generate a random password and display its encrypted form'
27
- task :random_password do
26
+ desc 'Generate new Symmetric key and initialization vector. Example: RAILS_ENV=production rake symmetric_encryption:generate_symmetric_keys'
27
+ task :generate_symmetric_keys do
28
+ Symmetric::Encryption.generate_symmetric_key_files
29
+ end
30
+
31
+ desc 'Generate a random password and display its encrypted form. Example: rake symmetric_encryption:random_password'
32
+ task :random_password => :environment do
28
33
  p = Symmetric::Encryption.random_password
29
34
  puts "\nGenerated Password: #{p}"
30
35
  puts "Encrypted: #{Symmetric::Encryption.encrypt(p)}\n\n"
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Symmetric #:nodoc
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: symmetric-encryption
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Reid Morrison
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-01-18 00:00:00 Z
13
+ date: 2012-01-19 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: Symmetric Encryption is a library to seamlessly enable symmetric encryption in a project, written in Ruby.