- Included in:
- , , , ,
- Defined in:
Implements comparisons of keys
This permits both timing invariant equality tests, as well as lexicographical sorting.
Instance Method Summary collapse
Instance Method Details
#<=>(other) ⇒ 0, ...
19 20 21 22 23 24 25 26 27 28
# File 'lib/rbnacl/key_comparator.rb', line 19 def <=>(other) if > other.class other = other.to_bytes elsif other.respond_to?(:to_str) other = other.to_str else return nil end compare32(other) end
#==(other) ⇒ true, false
The equality operator is explicity defined, despite including Comparable and having a spaceship operator, so that if equality tests are desired, they can be timing invariant, without any chance that the further comparisons for greater than and less than can leak information. Maybe this is too paranoid, but I don't know how ruby works under the hood with comparable.
43 44 45 46 47 48 49 50 51 52
# File 'lib/rbnacl/key_comparator.rb', line 43 def ==(other) if > other.class other = other.to_bytes elsif other.respond_to?(:to_str) other = other.to_str else return false end .(to_bytes, other) end