Class: Touchpass::Crypt
- Inherits:
-
Object
- Object
- Touchpass::Crypt
- Defined in:
- lib/touchpass/crypt.rb
Constant Summary collapse
- HASH_CRYPTO_PROVIDER =
Encryption method Options: :md5, :sha1, :sha256, :sha512
:sha256
- ENCRYPTION_ALGORITHM =
'AES-128-CBC'
Class Method Summary collapse
- .cipher(mode, data, key) ⇒ Object
- .decrypt(data, key) ⇒ Object
- .encrypt(data, key) ⇒ Object
- .generate_encryption_key ⇒ Object
-
.hash(string) ⇒ Object
hex digest.
- .read_rsa_key(pem) ⇒ Object
- .salt(length = 10) ⇒ Object
Class Method Details
.cipher(mode, data, key) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/touchpass/crypt.rb', line 27 def self.cipher(mode, data, key) return nil unless data crypt = OpenSSL::Cipher.new(ENCRYPTION_ALGORITHM).send(mode) crypt.key = key crypt.padding = 1 crypt.update(data) << crypt.final end |
.decrypt(data, key) ⇒ Object
39 40 41 |
# File 'lib/touchpass/crypt.rb', line 39 def self.decrypt(data, key) cipher(:decrypt, data, key) end |
.encrypt(data, key) ⇒ Object
35 36 37 |
# File 'lib/touchpass/crypt.rb', line 35 def self.encrypt(data, key) cipher(:encrypt, data, key) end |
.generate_encryption_key ⇒ Object
21 22 23 24 25 |
# File 'lib/touchpass/crypt.rb', line 21 def self.generate_encryption_key crypt = OpenSSL::Cipher.new(ENCRYPTION_ALGORITHM) crypt.encrypt crypt.random_key end |
.hash(string) ⇒ Object
hex digest
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/touchpass/crypt.rb', line 44 def self.hash(string) crypto_provider = nil case HASH_CRYPTO_PROVIDER when :md5 require 'digest/md5' unless defined?(Digest::MD5) crypto_provider = Digest::MD5 when :sha1 require 'digest/sha1' unless defined?(Digest::SHA1) crypto_provider = Digest::SHA1 when :sha256 require 'digest/sha2' unless defined?(Digest::SHA2) crypto_provider = Digest::SHA256 when :sha512 require 'digest/sha2' unless defined?(Digest::SHA2) crypto_provider = Digest::SHA512 end return crypto_provider.hexdigest(string) end |
.read_rsa_key(pem) ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/touchpass/crypt.rb', line 63 def self.read_rsa_key(pem) begin return OpenSSL::PKey::RSA.new(pem) rescue warn "Unable to read key." end return nil end |
.salt(length = 10) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/touchpass/crypt.rb', line 8 def self.salt(length=10) seeds = ('a'..'z').to_a seeds.concat( ('A'..'Z').to_a ) seeds.concat( (0..9).to_a ) seeds.concat ['/', '.'] seeds.compact! salt_string = '$1$' length.times { salt_string << seeds[ rand(seeds.size) ].to_s } salt_string end |