Class: Decidim::Tokenizer

Inherits:
Object
  • Object
show all
Defined in:
app/services/decidim/tokenizer.rb

Overview

This class is used to generate secure tokens

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(salt: nil, length: 32) ⇒ Tokenizer

Initializes the Tokenizer.

salt - The salt fr the encryption (it should be at leas 30 chars long) length - How long the key generated should be (in bytes)



14
15
16
17
# File 'app/services/decidim/tokenizer.rb', line 14

def initialize(salt: nil, length: 32)
  @salt = salt.presence || Tokenizer.random_salt
  @length = length
end

Instance Attribute Details

#lengthObject (readonly)

Returns the value of attribute length.



23
24
25
# File 'app/services/decidim/tokenizer.rb', line 23

def length
  @length
end

#saltObject (readonly)

Returns the value of attribute salt.



23
24
25
# File 'app/services/decidim/tokenizer.rb', line 23

def salt
  @salt
end

Class Method Details

.random_saltObject



19
20
21
# File 'app/services/decidim/tokenizer.rb', line 19

def self.random_salt
  SecureRandom.hex(32)
end

Instance Method Details

#digest(string) ⇒ Object

returns a securely generated string of bytes



26
27
28
# File 'app/services/decidim/tokenizer.rb', line 26

def digest(string)
  OpenSSL::PKCS5.pbkdf2_hmac(string.to_s, salt, 20_000, length, "sha256")
end

#hex_digest(string) ⇒ Object



34
35
36
# File 'app/services/decidim/tokenizer.rb', line 34

def hex_digest(string)
  digest(string.to_s).bytes.map { |c| c.ord.to_s(16) }.join
end

#int_digest(string) ⇒ Object



30
31
32
# File 'app/services/decidim/tokenizer.rb', line 30

def int_digest(string)
  digest(string.to_s).bytes.inject { |a, b| (a << 8) + b }
end