Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea/
14 changes: 7 additions & 7 deletions aggregation.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,18 @@ 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) {
valid = append(valid, receivedShare.index)
if VerifyShare(s, commitment, receivedShare, Qid) {
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...)
Expand All @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions extract.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
9 changes: 0 additions & 9 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
46 changes: 0 additions & 46 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,63 +1,17 @@
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=
github.com/drand/kyber-bls12381 v0.2.5 h1:4ugiCmXQsvgAuylSk929rK49WGFxCxT/7ArH2vw6Tlg=
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=
30 changes: 15 additions & 15 deletions test_functions.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package distIBE

import (
enc "DistributedIBE/encryption"
"bytes"
"crypto/rand"
"fmt"
Expand All @@ -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 {
Expand All @@ -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:]
}
Expand All @@ -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++ {
Expand Down Expand Up @@ -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++ {
Expand Down Expand Up @@ -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++ {
Expand Down Expand Up @@ -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++ {
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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++ {
Expand Down
13 changes: 6 additions & 7 deletions verification.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
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 {
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)

}