class CryptoGost::Verify
DigitalSignature
@author WildDima
Attributes
create_hash[R]
group[R]
message[R]
public_key[R]
Public Class Methods
new(message, group, create_hash = Stribog::CreateHash)
click to toggle source
# File lib/crypto_gost/verify.rb, line 10 def initialize(message, group, create_hash = Stribog::CreateHash) @message = message @group = group @create_hash = create_hash end
Public Instance Methods
call(public_key, sign)
click to toggle source
# File lib/crypto_gost/verify.rb, line 16 def call(public_key, sign) @public_key = public_key @sign = sign @hashed_message = hash_message(@message, size: 256) r = sign.r s = sign.s return false if invalid_vector?(r) || invalid_vector?(s) (c_param(r, s).x % group.order) == r end
Private Instance Methods
c_param(r, s)
click to toggle source
# File lib/crypto_gost/verify.rb, line 54 def c_param(r, s) group.generator * z_param(s) + public_key * z_param(-r) end
hash_message(message, size: 256)
click to toggle source
# File lib/crypto_gost/verify.rb, line 28 def hash_message(message, size: 256) create_hash.new(message).(size) end
hash_mod_ecn()
click to toggle source
# File lib/crypto_gost/verify.rb, line 32 def hash_mod_ecn hashed = hash_message(message, size: 256).dec hashed.zero? ? 1 : hashed end
invalid_vector?(vector)
click to toggle source
# File lib/crypto_gost/verify.rb, line 45 def invalid_vector?(vector) !valid_vector?(vector) end
mod_inv(opt, mod)
click to toggle source
# File lib/crypto_gost/verify.rb, line 37 def mod_inv(opt, mod) ModularArithmetic.invert(opt, mod) end
valid_vector?(vector)
click to toggle source
# File lib/crypto_gost/verify.rb, line 41 def valid_vector?(vector) (1...group.order).cover? vector end
z_param(param)
click to toggle source
# File lib/crypto_gost/verify.rb, line 49 def z_param(param) param * mod_inv(hash_mod_ecn, group.order) % group.order end