Class: Decidim::Tokenizer
- Inherits:
-
Object
- Object
- Decidim::Tokenizer
- Defined in:
- app/services/decidim/tokenizer.rb
Overview
This class is used to generate secure tokens
Instance Attribute Summary collapse
-
#length ⇒ Object
readonly
Returns the value of attribute length.
-
#salt ⇒ Object
readonly
Returns the value of attribute salt.
Class Method Summary collapse
Instance Method Summary collapse
-
#digest(string) ⇒ Object
returns a securely generated string of bytes.
- #hex_digest(string) ⇒ Object
-
#initialize(salt: nil, length: 32) ⇒ Tokenizer
constructor
Initializes the Tokenizer.
- #int_digest(string) ⇒ Object
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
#length ⇒ Object (readonly)
Returns the value of attribute length.
23 24 25 |
# File 'app/services/decidim/tokenizer.rb', line 23 def length @length end |
#salt ⇒ Object (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_salt ⇒ Object
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 |