return false
end
+################################################################################
+# mulmod_test #
+################################################################################
+
+def mulmod_test(a,b,c)
+ begin
+ printf("[testing] mulmod(%#x, %#x, %#x)\n",a,b,c) if $debug
+ line = $sp.gets()
+ line = "" if line==nil
+ puts("DBG got: "+line) if $debug
+ if /^Error:.*/.match(line)
+ puts line
+ return false
+ end
+ end while ! /[\s]*enter a:[\s]*/.match(line)
+ $sp.print(a.to_s(16)+" ")
+ begin
+ line = $sp.gets()
+ line = "" if line==nil
+ puts("DBG got: "+line) if $debug
+ if /^Error:.*/.match(line)
+ puts line
+ return false
+ end
+ end while ! /[\s]*enter b:[\s]*/.match(line)
+ $sp.print(b.to_s(16)+" ")
+ begin
+ line = $sp.gets()
+ line = "" if line==nil
+ puts("DBG got: "+line) if $debug
+ if /^Error:.*/.match(line)
+ puts line
+ return false
+ end
+ end while ! /[\s]*enter c:[\s]*/.match(line)
+ $sp.print(c.to_s(16)+" ")
+ line=''
+ begin
+ line_tmp = $sp.gets()
+ line_tmp = '' if line_tmp==nil
+ line += line_tmp
+ puts("DBG got: "+line) if $debug
+ if /^Error:.*/.match(line)
+ puts line
+ return false
+ end
+ m = /[\s]*\([\s]*([+-]?[0-9a-fA-F]*)[\s]*\*[\s]*([+-]?[0-9a-fA-F]*)[\s]*\)[\s]+%[\s]+([+-]?[0-9a-fA-F]*)[\s]*=[\s]*([+-]?[0-9a-fA-F]+)/.match(line)
+ puts("DBG: line did not match pattern (" + line + ")") if !m && $debug
+ end while ! m
+ a_ = m[1].to_i(16)
+ b_ = m[2].to_i(16)
+ c_ = m[3].to_i(16)
+ d_ = m[4].to_i(16)
+ line.chomp!
+ if(a_== a && b_ == b && c_ == c && d_ == (a * b % c) )
+ $logfile.printf("[pass]: %s\n", line)
+ return true
+ else
+ $logfile.printf("[fail (%s%s%s%s)]: %s", (a == a_) ? '' : 'a', (b == b_) ? '' : 'b', (c_ == c) ? '' : 'c', (d_== (a * b % c)) ? '' : 'd',line)
+ $logfile.printf(" ; should (%s * %s) %% %s = %s\n", a.to_s(16), b.to_s(16), c.to_s(16), (a * b % c).to_s(16))
+ return false
+ end
+ return false
+end
+
################################################################################
# expmod_test #
################################################################################
line=''
begin
line_tmp = $sp.gets()
- line_tmp = '' if line_tmp==nil
+ line_tmp = '' if line_tmp == nil
line += line_tmp
puts("DBG got: "+line) if $debug
- if /^Error:.*/.match(line)
+ if /^Error:/.match(line)
puts line
return false
end
- end while ! m=/[\s]*([+-]?[0-9a-fA-F]*)\*\*([+-]?[0-9a-fA-F]*)[\s]+%[\s]+([+-]?[0-9a-fA-F]*)[\s]*=[\s]*([+-]?[0-9a-fA-F]+)/.match(line)
+ end while ! m=/[\s]*([+-]?[0-9a-fA-F]+)\*\*([+-]?[0-9a-fA-F]+)[\s]+%[\s]+([+-]?[0-9a-fA-F]+)[\s]*=[\s]*([+-]?[0-9a-fA-F]+)/.match(line)
a_ = m[1].to_i(16)
b_ = m[2].to_i(16)
c_ = m[3].to_i(16)
end while length_a_B<4096/8
end
+################################################################################
+# run_test_mul_word #
+################################################################################
+
+def run_test_mul_word(skip=0)
+ length_a_B = skip+1
+ length_b_B = skip+1
+ begin
+ $size = length_a_B
+ (0..255).each do |i|
+ a = rand(256 ** length_a_B)
+ v = mul_test(a, i)
+ screen_progress(v)
+ end
+ length_a_B += 1
+ end while length_a_B < 4096 / 8
+end
+
################################################################################
# run_test_square #
################################################################################
################################################################################
def run_test_expmod(skip=0)
+ length_a_B = skip + 1
+ length_b_B = skip + 1
+ length_c_B = skip + 1
+ begin
+ $size = length_a_B
+ (0..16).each do |i|
+ a = rand(256 ** length_a_B)
+ b = rand(256 ** length_b_B) + 1
+ c = rand(256 ** length_c_B) + 1
+ v = expmod_test(a, b, c)
+ screen_progress(v)
+ end
+ (0..16).each do |i|
+ b_size = rand(length_b_B+1)
+ a = rand(256 ** length_a_B)
+ b = rand(256 ** b_size) + 1
+ c = rand(256 ** b_size) + 1
+ v = expmod_test(a, b, c)
+ screen_progress(v)
+ end
+ length_a_B += 1
+ length_b_B += 1
+ end while length_a_B<4096/8
+end
+
+################################################################################
+# run_test_expmodmont #
+################################################################################
+
+def run_test_expmodmont(skip=0)
+ length_a_B = skip + 1
+ length_b_B = skip + 1
+ length_c_B = skip + 1
+ begin
+ $size = length_a_B
+ (0..16).each do |i|
+ a = rand(256 ** length_a_B)
+ b = rand(256 ** length_b_B) + 1
+ c = rand(256 ** length_c_B) / 2 * 2 +1
+ v = expmod_test(a, b, c)
+ screen_progress(v)
+ end
+ (0..16).each do |i|
+ b_size = rand(length_b_B+1)
+ a = rand(256 ** length_a_B)
+ b = rand(256 ** b_size) + 1
+ c = rand(256 ** b_size) / 2 * 2 +1
+ v = expmod_test(a, b, c)
+ screen_progress(v)
+ end
+ length_a_B += 1
+ length_b_B += 1
+ end while length_a_B<4096/8
+end
+
+################################################################################
+# run_test_mulmod #
+################################################################################
+
+def run_test_mulmod(skip=0)
length_a_B = skip+1
length_b_B = skip+1
length_c_B = skip+1
$size = length_a_B
(0..16).each do |i|
a = rand(256**length_a_B)
- b = rand(256**length_b_B)+1
- c = rand(256**length_c_B)+1
- v = expmod_test(a, b, c)
+ b = rand(256**length_b_B)
+ c = (rand(256**length_c_B) / 2 * 2) + 1
+ a %= c
+ b %= c
+ v = mulmod_test(a, b, c)
screen_progress(v)
end
(0..16).each do |i|
b_size = rand(length_b_B+1)
a = rand(256**length_a_B)
- b = rand(256**b_size)+1
- c = rand(256**b_size)+1
- v = expmod_test(a, b, c)
+ b = rand(256**b_size)
+ c = (rand(256**length_c_B) / 2 * 2) + 1
+ a %= c
+ b %= c
+ v = mulmod_test(a, b, c)
screen_progress(v)
end
length_a_B += 1
length_b_B += 1
+ length_c_B += 1
end while length_a_B<4096/8
end
tests = Hash.new
tests['a'] = proc {|x| run_test_add(x) }
tests['m'] = proc {|x| run_test_mul(x) }
+tests['M'] = proc {|x| run_test_mulmod(x) }
+tests['n'] = proc {|x| run_test_mul_word(x) }
tests['x'] = proc {|x| run_test_add_scale(x) }
tests['s'] = proc {|x| run_test_square(x) }
tests['r'] = proc {|x| run_test_reduce(x) }
tests['e'] = proc {|x| run_test_expmod(x) }
+tests['E'] = proc {|x| run_test_expmodmont(x) }
tests['g'] = proc {|x| run_test_gcdext(x) }
init_str = Hash.new
init_str['a'] = 'add-test'
init_str['x'] = 'add-scale-test'
init_str['m'] = 'mul-test'
+init_str['M'] = 'mul-mont-test'
+init_str['n'] = 'mul-word-test'
init_str['s'] = 'square-test'
init_str['r'] = 'reduce-test'
init_str['e'] = 'expmod-test'
+init_str['E'] = 'expmod-mont-test'
init_str['g'] = 'gcdext-test'
srand(0xdeadbeef)
end
end
else
- 'amsre'.each_char do |x|
+ 'amsrMeE'.each_char do |x|
if tests[x]
puts init_str[x]
init_system(init_str[x])
end
end
end
-
+1
$logile.close()