server.rb
Ruby
code posted
by
lamchcl
created at 03 Sep 17:01
Edit
|
Back
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#!/usr/bin/env ruby require 'securerandom' ## Parameters P = 115792089237316195423570985008687907853269984665640564039457584007913129639747 N = 100 K = 25 L = 38 # The number of liars def apply_polynomial(coeffs, x) r = 0 coeffs.inject(0) do |r, c| r = (r * x + c) % P end end def create_polynomial coeff = SecureRandom.hex(64 * K) coeff.chars.each_slice(128).map{|a|a.join.to_i(16) % P} end secret = SecureRandom.hex(64).to_i(16) % P polynomial = create_polynomial polynomial[-1] = secret # Distribute Secret user = Array.new(N) {|i| apply_polynomial(polynomial, i + 1) } # Some user are liars [*0...N].shuffle[0, L].each{|i| user[i] = rand(P) } STDOUT.puts "--- Distributed Secret ---" N.times do |i| STDOUT.puts "User #{i}: #{user[i]}" end STDOUT.flush STDOUT.puts STDOUT.puts "What's secret? " STDOUT.flush input_secret = STDIN.gets.to_i if input_secret == secret STDOUT.puts "OK. I'll give you the flag" STDOUT.puts File.read("flag").chomp else STDOUT.puts "Wrong" end STDOUT.flush STDOUT.close |
1.07 KB in 3 ms with coderay