-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdlog.rb
33 lines (26 loc) · 897 Bytes
/
dlog.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
require 'openssl'
P = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171
G = 11717829880366207009516117596335367088558084999998952205599979459063929499736583746670572176471460312928594829675428279466566527115212748467589894601965568
H = 3239475104050450443565264378728065788649097520952449527834792452971981976143292558073856937958553180532878928001494706097394108577585732452307673444020333
B = 2**20
left = {}
f = G.to_bn.mod_exp(P-2, P)
result = H
(1..B).each do |x1|
puts x1
result = (result * f) % P
left[result] = x1
end
f = G.to_bn.mod_exp(B, P)
result = 1
(1..B).each do |x0|
puts x0
result = (result * f) % P
if left.has_key?(result) then
puts "Match found for:"
puts "x_0 = #{x0}"
puts "x_1 = #{left[result]}"
puts "x = #{x0*B + left[result]}"
break
end
end