Class: Touchpass::Crypt

Inherits:
Object
  • Object
show all
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

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_keyObject



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