cryptofun/elgamal/elgamal_test.go
elgamal/elgamal_test.goRaw
1package elgamal
2
3import (
4 "math/big"
5 "testing"
6
7 "github.com/arnaucube/cryptofun/ecc"
8 "github.com/stretchr/testify/assert"
9)
10
11func TestNewEG(t *testing.T) {
12 ec := ecc.NewEC(1, 18, 19)
13 g := ecc.Point{big.NewInt(int64(7)), big.NewInt(int64(11))}
14 eg, err := NewEG(ec, g)
15 assert.Nil(t, err)
16
17 privK := big.NewInt(int64(5))
18 pubK, err := eg.PubK(privK)
19 assert.Nil(t, err)
20
21 if !pubK.Equal(ecc.Point{big.NewInt(int64(13)), big.NewInt(int64(9))}) {
22 t.Errorf("pubK!=(13, 9)")
23 }
24}
25func TestEGEncrypt(t *testing.T) {
26 ec := ecc.NewEC(1, 18, 19)
27 g := ecc.Point{big.NewInt(int64(7)), big.NewInt(int64(11))}
28 eg, err := NewEG(ec, g)
29 assert.Nil(t, err)
30
31 privK := big.NewInt(int64(5))
32 pubK, err := eg.PubK(privK)
33 assert.Nil(t, err)
34
35 // m: point to encrypt
36 m := ecc.Point{big.NewInt(int64(11)), big.NewInt(int64(12))}
37 c, err := eg.Encrypt(m, pubK, big.NewInt(int64(15)))
38 assert.Nil(t, err)
39
40 if !c[0].Equal(ecc.Point{big.NewInt(int64(8)), big.NewInt(int64(5))}) {
41 t.Errorf("c[0] != (8, 5), encryption failed")
42 }
43 if !c[1].Equal(ecc.Point{big.NewInt(int64(2)), big.NewInt(int64(16))}) {
44 t.Errorf("c[1] != (2, 16), encryption failed")
45 }
46}
47
48func TestEGDecrypt(t *testing.T) {
49 ec := ecc.NewEC(1, 18, 19)
50 g := ecc.Point{big.NewInt(int64(7)), big.NewInt(int64(11))}
51 eg, err := NewEG(ec, g)
52 assert.Nil(t, err)
53
54 privK := big.NewInt(int64(5))
55 pubK, err := eg.PubK(privK)
56 assert.Nil(t, err)
57
58 // m: point to encrypt
59 m := ecc.Point{big.NewInt(int64(11)), big.NewInt(int64(12))}
60 c, err := eg.Encrypt(m, pubK, big.NewInt(int64(15)))
61 assert.Nil(t, err)
62
63 d, err := eg.Decrypt(c, privK)
64 assert.Nil(t, err)
65
66 if !m.Equal(d) {
67 t.Errorf("m != d, decrypting failed")
68 }
69}