From 27beb9c9e9b2ec207c631e8c02c4f32386539018 Mon Sep 17 00:00:00 2001 From: p0p3yee Date: Fri, 10 Feb 2023 17:38:55 -0500 Subject: [PATCH 1/2] Update struct fields to public --- .gitignore | 1 + aggregation.go | 12 ++++++------ extract.go | 4 ++-- go.mod | 9 --------- go.sum | 46 ---------------------------------------------- test_functions.go | 30 +++++++++++++++--------------- verification.go | 10 +++++----- 7 files changed, 29 insertions(+), 83 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/aggregation.go b/aggregation.go index 02e85c1..e2f2926 100644 --- a/aggregation.go +++ b/aggregation.go @@ -19,17 +19,17 @@ func AggregateSK(s pairing.Suite, receivedShares []ExtractedKey, commitments []C } Qid := hG2.Hash(id) if verifyShare(s, commitment, receivedShare, Qid) { - valid = append(valid, receivedShare.index) + valid = append(valid, receivedShare.Index) validShare = append(validShare, receivedShare) } else { - invalid = append(invalid, commitment.index) + invalid = append(invalid, commitment.Index) } } for _, r := range validShare { processedShare := processSK(s, r, valid) - SkShares = append(SkShares, processedShare.sk) + SkShares = append(SkShares, processedShare.Sk) } SK := aggregate(SkShares...) @@ -38,9 +38,9 @@ func AggregateSK(s pairing.Suite, receivedShares []ExtractedKey, commitments []C func processSK(suite pairing.Suite, share ExtractedKey, S []uint32) ExtractedKey { - lagrangeCoef := LagrangeCoefficient(suite, share.index, S) - idenityKey := share.sk.Mul(lagrangeCoef, share.sk) - return ExtractedKey{idenityKey, share.index} + lagrangeCoef := LagrangeCoefficient(suite, share.Index, S) + idenityKey := share.Sk.Mul(lagrangeCoef, share.Sk) + return ExtractedKey{idenityKey, share.Index} } func aggregate(keys ...kyber.Point) kyber.Point { diff --git a/extract.go b/extract.go index b371594..9e54da5 100644 --- a/extract.go +++ b/extract.go @@ -7,8 +7,8 @@ import ( ) type ExtractedKey struct { - sk kyber.Point - index uint32 + Sk kyber.Point + Index uint32 } func Extract(s pairing.Suite, share kyber.Scalar, index uint32, id []byte) ExtractedKey { diff --git a/go.mod b/go.mod index dc4e67d..42eaada 100644 --- a/go.mod +++ b/go.mod @@ -10,15 +10,6 @@ require ( ) require ( - 9fans.net/go v0.0.4 // indirect - github.com/766b/go-outliner v0.0.0-20180511142203-fc6edecdadd7 // indirect - github.com/acroca/go-symbols v0.1.1 // indirect github.com/kilic/bls12-381 v0.1.0 // indirect - github.com/nsf/gocode v0.0.0-20190302080247-5bee97b48836 // indirect - github.com/ramya-rao-a/go-outline v0.0.0-20210608161538-9736a4bde949 // indirect - github.com/rogpeppe/godef v1.1.2 // indirect - github.com/yuin/goldmark v1.5.4 // indirect - golang.org/x/mod v0.7.0 // indirect golang.org/x/sys v0.5.0 // indirect - golang.org/x/tools v0.5.0 // indirect ) diff --git a/go.sum b/go.sum index 97504a9..5d82bf0 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,5 @@ -9fans.net/go v0.0.0-20181112161441-237454027057/go.mod h1:diCsxrliIURU9xsYtjCp5AbpQKqdhKmf0ujWDUSkfoY= -9fans.net/go v0.0.4 h1:g7K+b5I1PlSBFLnjuco3LAx5boK39UUl0Gsrmw6Gl2U= -9fans.net/go v0.0.4/go.mod h1:lfPdxjq9v8pVQXUMBCx5EO5oLXWQFlKRQgs1kEkjoIM= filippo.io/age v1.1.1 h1:pIpO7l151hCnQ4BdyBujnGP2YlUo0uj6sAVNHGBvXHg= filippo.io/age v1.1.1/go.mod h1:l03SrzDUrBkdBx8+IILdnn2KZysqQdbEBUQ4p3sqEQE= -github.com/766b/go-outliner v0.0.0-20180511142203-fc6edecdadd7 h1:cJXisB2yAM61AzMutv7X+KM8F3xVLxGH99S8VmaSlps= -github.com/766b/go-outliner v0.0.0-20180511142203-fc6edecdadd7/go.mod h1:1SzhThoS5lcKfE4IFOLQJ04WCmFpaAiPe8H9yqXyYSU= -github.com/acroca/go-symbols v0.1.1 h1:q3IzaMNYocw/Bnc2a8jkXf0hM3+POfLoq30x8HYuaPE= -github.com/acroca/go-symbols v0.1.1/go.mod h1:RKAIDWtcELAw6/wjNJGWRYZ7QEinSWoJeJ2H5cfK6AM= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/drand/kyber v1.1.17 h1:A7zHO2KJj1NssXKLR1U0Wlwjb4tC+SG6YSIseFDmV4U= github.com/drand/kyber v1.1.17/go.mod h1:2SbJSUoZt8D61uMWH2QTEWqzK9BBYzcObeb1TKDKwvo= @@ -14,50 +7,11 @@ github.com/drand/kyber-bls12381 v0.2.5 h1:4ugiCmXQsvgAuylSk929rK49WGFxCxT/7ArH2v github.com/drand/kyber-bls12381 v0.2.5/go.mod h1:8fm2tmRaAdYRGMTh5tjF7qrGHywC+rmM5hrUFL+9fCI= github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= -github.com/nsf/gocode v0.0.0-20190302080247-5bee97b48836 h1:oc3CL18CoGhyOQJ7HDa9gJAde33bwI8Vi28zLdIzJVc= -github.com/nsf/gocode v0.0.0-20190302080247-5bee97b48836/go.mod h1:6Q8/OMaaKAgTX7/jt2bOXVDrm1eJhoNd+iwzghR7jvs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/ramya-rao-a/go-outline v0.0.0-20210608161538-9736a4bde949 h1:iaD+iVf9xGfajsJp+zYrg9Lrk6gMJ6/hZHO4cYq5D5o= -github.com/ramya-rao-a/go-outline v0.0.0-20210608161538-9736a4bde949/go.mod h1:9V3eNbj9Z53yO7cKB6cSX9f0O7rYdIiuGBhjA1YsQuw= -github.com/rogpeppe/godef v1.1.2 h1:c5mCx0EcCORJOdVMREX7Lgh1raTxAHFmOfXdEB9u8Jw= -github.com/rogpeppe/godef v1.1.2/go.mod h1:WtY9A/ovuQ+UakAJ1/CEqwwulX/WJjb2kgkokCHi/GY= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.5.4 h1:2uY/xC0roWy8IBEGLgB1ywIoEJFGmRrX21YQcvGZzjU= -github.com/yuin/goldmark v1.5.4/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200226224502-204d844ad48d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= -golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/test_functions.go b/test_functions.go index 0ae3a24..1af60f0 100644 --- a/test_functions.go +++ b/test_functions.go @@ -1,6 +1,7 @@ package distIBE import ( + enc "DistributedIBE/encryption" "bytes" "crypto/rand" "fmt" @@ -9,14 +10,13 @@ import ( "github.com/drand/kyber/pairing" "math/big" "reflect" - enc "DistributedIBE/encryption" ) func H3Tag() []byte { return []byte("IBE-H3") } -func h3(s pairing.Suite, sigma, msg []byte) (kyber.Scalar, error) { +func H3(s pairing.Suite, sigma, msg []byte) (kyber.Scalar, error) { h3 := s.Hash() if _, err := h3.Write(H3Tag()); err != nil { @@ -36,7 +36,7 @@ func h3(s pairing.Suite, sigma, msg []byte) (kyber.Scalar, error) { return hashable.Hash(s, h3Reader) } -func bigFromHex(hex string) *big.Int { +func BigFromHex(hex string) *big.Int { if len(hex) > 1 && hex[:2] == "0x" { hex = hex[2:] } @@ -50,8 +50,8 @@ func DistributedIBE(n int, t int, ID string, src bytes.Buffer, message string) ( // Setup s := bls.NewBLS12381Suite() var secretVal []byte = []byte{187} - var qBig = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") - secret, _ := h3(s, secretVal, []byte("msg")) + var qBig = BigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") + secret, _ := H3(s, secretVal, []byte("msg")) signers := []int{} for i := 0; i < n; i++ { @@ -110,14 +110,14 @@ func DistributedIBE(n int, t int, ID string, src bytes.Buffer, message string) ( return true, nil } -//n keepers in total, threshold = t, (t-1) of them participated in decryption +// n keepers in total, threshold = t, (t-1) of them participated in decryption func DistributedIBEFail(n int, t int, ID string, src bytes.Buffer, message string) (bool, error) { // Setup s := bls.NewBLS12381Suite() var secretVal []byte = []byte{187} - var qBig = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") - secret, _ := h3(s, secretVal, []byte("msg")) + var qBig = BigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") + secret, _ := H3(s, secretVal, []byte("msg")) signers := []int{} for i := 0; i < n; i++ { @@ -185,8 +185,8 @@ func DistributedIBEFInvalidCommitment(n int, t int, ID string, src bytes.Buffer, // Setup s := bls.NewBLS12381Suite() var secretVal []byte = []byte{187} - var qBig = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") - secret, _ := h3(s, secretVal, []byte("msg")) + var qBig = BigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") + secret, _ := H3(s, secretVal, []byte("msg")) signers := []int{} for i := 0; i < n; i++ { @@ -259,8 +259,8 @@ func DistributedIBEFInvalidShare(n int, t int, ID string, src bytes.Buffer, mess // Setup s := bls.NewBLS12381Suite() var secretVal []byte = []byte{187} - var qBig = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") - secret, _ := h3(s, secretVal, []byte("msg")) + var qBig = BigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") + secret, _ := H3(s, secretVal, []byte("msg")) signers := []int{} for i := 0; i < n; i++ { @@ -304,7 +304,7 @@ func DistributedIBEFInvalidShare(n int, t int, ID string, src bytes.Buffer, mess } } // chaning the first extracted key to something else (previous value * 2 in this case) - sk[0].sk = sk[0].sk.Add(sk[0].sk, sk[0].sk) + sk[0].Sk = sk[0].Sk.Add(sk[0].Sk, sk[0].Sk) // Aggregating keys to get the secret key for decryption SK, invalids := AggregateSK(s, sk, @@ -333,8 +333,8 @@ func DistributedIBEWrongCiphertext(n int, t int, ID string, src bytes.Buffer, me // Setup s := bls.NewBLS12381Suite() var secretVal []byte = []byte{187} - var qBig = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") - secret, _ := h3(s, secretVal, []byte("msg")) + var qBig = BigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") + secret, _ := H3(s, secretVal, []byte("msg")) signers := []int{} for i := 0; i < n; i++ { diff --git a/verification.go b/verification.go index 2fb53b4..ae05a68 100644 --- a/verification.go +++ b/verification.go @@ -1,21 +1,21 @@ package distIBE import ( - "reflect" "github.com/drand/kyber" "github.com/drand/kyber/pairing" + "reflect" ) type Commitment struct { - sP kyber.Point - index uint32 + Sp kyber.Point + Index uint32 } func verifyShare(s pairing.Suite, c Commitment, share ExtractedKey, qid kyber.Point) bool { //e(s1 * P, H(ID)) - a := s.Pair(c.sP, qid) + a := s.Pair(c.Sp, qid) //e(P, s1 * H(ID)) - b := s.Pair(s.G1().Point().Base(), share.sk) + b := s.Pair(s.G1().Point().Base(), share.Sk) return reflect.DeepEqual(a, b) } From 1494d2871e0188566d76f80684f6c1a98d6d45ed Mon Sep 17 00:00:00 2001 From: p0p3yee Date: Mon, 13 Feb 2023 22:20:14 -0500 Subject: [PATCH 2/2] Make VerifyShare function public --- aggregation.go | 2 +- verification.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/aggregation.go b/aggregation.go index e2f2926..d11847b 100644 --- a/aggregation.go +++ b/aggregation.go @@ -18,7 +18,7 @@ func AggregateSK(s pairing.Suite, receivedShares []ExtractedKey, commitments []C panic("point needs to implement `kyber.HashablePoint`") } Qid := hG2.Hash(id) - if verifyShare(s, commitment, receivedShare, Qid) { + if VerifyShare(s, commitment, receivedShare, Qid) { valid = append(valid, receivedShare.Index) validShare = append(validShare, receivedShare) } else { diff --git a/verification.go b/verification.go index ae05a68..3fcc837 100644 --- a/verification.go +++ b/verification.go @@ -11,11 +11,10 @@ type Commitment struct { Index uint32 } -func verifyShare(s pairing.Suite, c Commitment, share ExtractedKey, qid kyber.Point) bool { +func VerifyShare(s pairing.Suite, c Commitment, share ExtractedKey, qid kyber.Point) bool { //e(s1 * P, H(ID)) a := s.Pair(c.Sp, qid) //e(P, s1 * H(ID)) b := s.Pair(s.G1().Point().Base(), share.Sk) return reflect.DeepEqual(a, b) - }