Class: IOTA::Crypto::RubyCurl
- Inherits:
-
Object
- Object
- IOTA::Crypto::RubyCurl
- Defined in:
- lib/iota/crypto/curl_ruby.rb
Constant Summary collapse
- NUMBER_OF_ROUNDS =
81
- HASH_LENGTH =
243
- STATE_LENGTH =
3 * HASH_LENGTH
- TRUTH_TABLE =
[1, 0, -1, 1, -1, 0, -1, 1, 0]
Instance Method Summary collapse
- #absorb(trits) ⇒ Object
-
#initialize(rounds = nil) ⇒ RubyCurl
constructor
A new instance of RubyCurl.
- #reset ⇒ Object
- #squeeze(trits) ⇒ Object
- #transform ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize(rounds = nil) ⇒ RubyCurl
Returns a new instance of RubyCurl.
9 10 11 12 |
# File 'lib/iota/crypto/curl_ruby.rb', line 9 def initialize(rounds = nil) @rounds = rounds || NUMBER_OF_ROUNDS reset end |
Instance Method Details
#absorb(trits) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/iota/crypto/curl_ruby.rb', line 18 def absorb(trits) length = trits.length offset = 0 while offset < length start = offset stop = [start + HASH_LENGTH, length].min @state[0...stop-start] = trits.slice(start, stop-start) transform offset += HASH_LENGTH end end |
#reset ⇒ Object
14 15 16 |
# File 'lib/iota/crypto/curl_ruby.rb', line 14 def reset @state = [0] * STATE_LENGTH end |
#squeeze(trits) ⇒ Object
33 34 35 36 |
# File 'lib/iota/crypto/curl_ruby.rb', line 33 def squeeze(trits) trits[0...HASH_LENGTH] = @state.slice(0, HASH_LENGTH) transform end |
#transform ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/iota/crypto/curl_ruby.rb', line 38 def transform previousState = @state.slice(0, @state.length) newState = @state.slice(0, @state.length) index = 0 round = 0 while round < @rounds previousTrit = previousState[index].to_i pos = 0 while true index += (index < 365) ? 364 : -365 newTrit = previousState[index].to_i newState[pos] = TRUTH_TABLE[previousTrit + (3 * newTrit) + 4] previousTrit = newTrit pos += 1 break if pos >= STATE_LENGTH end previousState = newState newState = newState.slice(0, newState.length) round += 1 end @state = newState end |
#version ⇒ Object
65 66 67 |
# File 'lib/iota/crypto/curl_ruby.rb', line 65 def version "Ruby" end |