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