Class: SipHash::State
- Inherits:
-
Object
- Object
- SipHash::State
- Defined in:
- lib/siphash.rb
Constant Summary collapse
- MASK_64 =
0xffffffffffffffff
Instance Method Summary collapse
- #apply_block(m) ⇒ Object
- #compress ⇒ Object
- #digest ⇒ Object
- #finalize ⇒ Object
-
#initialize(key) ⇒ State
constructor
A new instance of State.
- #rotl64(num, shift) ⇒ Object
Constructor Details
#initialize(key) ⇒ State
Returns a new instance of State.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/siphash.rb', line 64 def initialize(key) @v0 = 0x736f6d6570736575 @v1 = 0x646f72616e646f6d @v2 = 0x6c7967656e657261 @v3 = 0x7465646279746573 k0 = key.slice(0, 8).unpack('Q<')[0] k1 = key.slice(8, 8).unpack('Q<')[0] @v0 ^= k0 @v1 ^= k1 @v2 ^= k0 @v3 ^= k1 end |
Instance Method Details
#apply_block(m) ⇒ Object
79 80 81 82 83 |
# File 'lib/siphash.rb', line 79 def apply_block(m) @v3 ^= m 2.times { compress } @v0 ^= m end |
#compress ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/siphash.rb', line 89 def compress @v0 = (@v0 + @v1) & MASK_64 @v2 = (@v2 + @v3) & MASK_64 @v1 = rotl64(@v1, 13) @v3 = rotl64(@v3, 16) @v1 ^= @v0 @v3 ^= @v2 @v0 = rotl64(@v0, 32) @v2 = (@v2 + @v1) & MASK_64 @v0 = (@v0 + @v3) & MASK_64 @v1 = rotl64(@v1, 17) @v3 = rotl64(@v3, 21) @v1 ^= @v2 @v3 ^= @v0 @v2 = rotl64(@v2, 32) end |
#digest ⇒ Object
111 112 113 |
# File 'lib/siphash.rb', line 111 def digest @v0 ^ @v1 ^ @v2 ^ @v3 end |
#finalize ⇒ Object
106 107 108 109 |
# File 'lib/siphash.rb', line 106 def finalize @v2 ^= 0xff 4.times { compress } end |
#rotl64(num, shift) ⇒ Object
85 86 87 |
# File 'lib/siphash.rb', line 85 def rotl64(num, shift) ((num << shift) & MASK_64) | (num >> (64 - shift)) end |