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
to_s()
Alias for: signature
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