2 require 'lib/secretsharing/shamir'
4 DEFAULT_SECRET_BITLENGTH = 256
6 class TestShamir < Test::Unit::TestCase
8 assert_raise( ArgumentError ) { SecretSharing::Shamir.new }
9 s1 = SecretSharing::Shamir.new(5)
12 assert(! s1.secret_set?)
13 s2 = SecretSharing::Shamir.new(5, 3)
16 assert(! s2.secret_set?)
17 assert_raise( ArgumentError ) { SecretSharing::Shamir.new(5, 7) }
18 assert_raise( ArgumentError ) { SecretSharing::Shamir.new(1) }
21 def test_create_random_secret
22 s = SecretSharing::Shamir.new(5)
23 s.create_random_secret()
25 assert_not_nil(s.secret)
26 assert_not_nil(s.shares)
27 assert_equal(Array, s.shares.class)
28 assert_equal(5, s.shares.length)
29 assert_equal(SecretSharing::Shamir::Share, s.shares[0].class)
30 assert_equal(DEFAULT_SECRET_BITLENGTH, s.secret_bitlength)
32 # can only be called once
33 assert_raise( RuntimeError) { s.create_random_secret() }
35 s2 = SecretSharing::Shamir.new(7)
36 s2.create_random_secret(512)
37 assert_equal(512, s2.secret_bitlength)
40 def test_recover_secret_k_eq_n
41 s = SecretSharing::Shamir.new(5)
42 s.create_random_secret()
44 s2 = SecretSharing::Shamir.new(5)
46 assert(! s2.secret_set?)
48 # adding the same share raises an error
49 assert_raise( RuntimeError ) { s2 << s.shares[0] }
52 assert(! s2.secret_set?)
54 assert(! s2.secret_set?)
56 assert(! s2.secret_set?)
58 assert(s2.secret_set?)
59 assert_equal(s.secret, s2.secret)
62 def test_recover_secret_k_le_n
63 s = SecretSharing::Shamir.new(5, 3)
64 s.create_random_secret()
66 s2 = SecretSharing::Shamir.new(5, 3)
68 assert(! s2.secret_set?)
72 assert(! s2.secret_set?)
74 assert(s2.secret_set?)
75 assert_equal(s.secret, s2.secret)
77 # adding more shares than needed raises an error
78 assert_raise( RuntimeError ) { s2 << s.shares[3] }
81 def test_recover_secret_k_le_n_strings
82 s = SecretSharing::Shamir.new(5, 3)
83 s.create_random_secret()
85 s2 = SecretSharing::Shamir.new(5, 3)
86 s2 << "#{s.shares[0]}"
87 assert(! s2.secret_set?)
90 s2 << "#{s.shares[1]}"
91 assert(! s2.secret_set?)
92 s2 << s.shares[2].to_s
93 assert(s2.secret_set?)
94 assert_equal(s.secret, s2.secret)
96 # adding more shares than needed raises an error
97 assert_raise( RuntimeError ) { s2 << s.shares[3] }