class Ciri::Crypto::Signature
Attributes
r[R]
s[R]
v[R]
Public Class Methods
new(signature: nil, vrs: nil)
click to toggle source
# File lib/ciri/crypto/signature.rb, line 34 def initialize(signature: nil, vrs: nil) if !!signature == !!vrs raise ArgumentError.new("should pass signature_bytes or vrs, but can't provide both together") end if signature unless signature.size == 65 raise ECDSASignatureError.new("signature size should be 65, got: #{signature.size}") end @r = Utils.big_endian_decode(signature[0...32]) @s = Utils.big_endian_decode(signature[32...64]) @v = Utils.big_endian_decode(signature[64]) else @v, @r, @s = vrs unless self.signature.size == 65 raise ECDSASignatureError.new("vrs is incorrect") end end end
Public Instance Methods
low_s?()
click to toggle source
# File lib/ciri/crypto/signature.rb, line 70 def low_s? s < (SECP256K1N / 2) end
signature()
click to toggle source
# File lib/ciri/crypto/signature.rb, line 56 def signature @signature ||= Utils.big_endian_encode(@r, "\x00".b, size: 32) + Utils.big_endian_encode(@s, "\x00".b, size: 32) + Utils.big_endian_encode(@v, "\x00".b) end
Also aliased as: to_s
valid?()
click to toggle source
# File lib/ciri/crypto/signature.rb, line 64 def valid? v <= 1 && r < SECP256K1N && r >= 1 && s < SECP256K1N && s >= 1 end