class CryptoGost3410::Verifier

DigitalSignature

@author vblazhnovgit

Attributes

group[R]

Public Class Methods

new(group) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 8
def initialize(group)
  @group = group
end

Public Instance Methods

verify(hash, public_key, signature) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 12
def verify(hash, public_key, signature)
  @public_key = public_key
  r = signature.x
  s = signature.y
  return false if invalid_vector?(r) || invalid_vector?(s)
  (c_param(hash, public_key, r, s).x % group.order) == r
end

Private Instance Methods

c_param(hash, public_key, r, s) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 38
def c_param(hash, public_key, r, s)
  group.generator * z_param(hash, s) + public_key * z_param(hash, -r)
end
invalid_vector?(vector) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 30
def invalid_vector?(vector)
  !valid_vector?(vector)
end
mod_inv(opt, mod) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 22
def mod_inv(opt, mod)
  ModularArithmetic.invert(opt, mod)
end
valid_vector?(vector) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 26
def valid_vector?(vector)
  (1...group.order).cover? vector
end
z_param(hash, param) click to toggle source
# File lib/crypto_gost3410/verifier.rb, line 34
def z_param(hash, param)
  (param * mod_inv(hash, group.order)) % group.order
end