Skip to content

Commit 63a92d1

Browse files
author
Manu Drijvers
committed
[FAB-8921] adds weak-bb signatures
Adds weak-bb signatures that will be used in idemix revocation. Change-Id: I48f231e10c8242732080cb6df6146b89b2a7c57a Signed-off-by: Manu Drijvers <mdr@zurich.ibm.com>
1 parent 8cbae04 commit 63a92d1

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

idemix/idemix_test.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,30 @@ import (
1515
)
1616

1717
func TestIdemix(t *testing.T) {
18+
// Test weak BB sigs:
19+
// Test KeyGen
20+
rng, err := GetRand()
21+
assert.NoError(t, err)
22+
wbbsk, wbbpk := WBBKeyGen(rng)
23+
24+
// Get random message
25+
testmsg := RandModOrder(rng)
26+
27+
// Test Signing
28+
wbbsig := WBBSign(wbbsk, testmsg)
29+
30+
// Test Verification
31+
err = WBBVerify(wbbpk, wbbsig, testmsg)
32+
assert.NoError(t, err)
33+
34+
// Test idemix functionality
1835
AttributeNames := []string{"Attr1", "Attr2", "Attr3", "Attr4", "Attr5"}
1936
attrs := make([]*FP256BN.BIG, len(AttributeNames))
2037
for i := range AttributeNames {
2138
attrs[i] = FP256BN.NewBIGint(i)
2239
}
2340

2441
// Test issuer key generation
25-
rng, err := GetRand()
2642
if err != nil {
2743
t.Fatalf("Error getting rng: \"%s\"", err)
2844
return

idemix/util.go

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ var GenG2 = FP256BN.NewECP2fp2s(
2525
FP256BN.NewFP2bigs(FP256BN.NewBIGints(FP256BN.CURVE_Pxa), FP256BN.NewBIGints(FP256BN.CURVE_Pxb)),
2626
FP256BN.NewFP2bigs(FP256BN.NewBIGints(FP256BN.CURVE_Pya), FP256BN.NewBIGints(FP256BN.CURVE_Pyb)))
2727

28+
// GenGT is a generator of Group GT
29+
var GenGT = FP256BN.Fexp(FP256BN.Ate(GenG2, GenG1))
30+
2831
// GroupOrder is the order of the groups
2932
var GroupOrder = FP256BN.NewBIGints(FP256BN.CURVE_Order)
3033

idemix/weak-bb.go

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package idemix
8+
9+
import (
10+
"github.com/hyperledger/fabric-amcl/amcl"
11+
"github.com/hyperledger/fabric-amcl/amcl/FP256BN"
12+
"github.com/pkg/errors"
13+
)
14+
15+
// WBBKeyGen creates a fresh weak-Boneh-Boyen signature key pair (http://ia.cr/2004/171)
16+
func WBBKeyGen(rng *amcl.RAND) (*FP256BN.BIG, *FP256BN.ECP2) {
17+
// sample sk uniform from Zq
18+
sk := RandModOrder(rng)
19+
// set pk = g2^sk
20+
pk := GenG2.Mul(sk)
21+
return sk, pk
22+
}
23+
24+
// WBBSign places a weak Boneh-Boyen signature on message m using secret key sk
25+
func WBBSign(sk *FP256BN.BIG, m *FP256BN.BIG) *FP256BN.ECP {
26+
// compute exp = 1/(m + sk) mod q
27+
exp := Modadd(sk, m, GroupOrder)
28+
exp.Invmodp(GroupOrder)
29+
30+
// return signature sig = g1^(1/(m + sk))
31+
return GenG1.Mul(exp)
32+
}
33+
34+
// WBBVerify verifies a weak Boneh-Boyen signature sig on message m with public key pk
35+
func WBBVerify(pk *FP256BN.ECP2, sig *FP256BN.ECP, m *FP256BN.BIG) error {
36+
if pk == nil || sig == nil || m == nil {
37+
return errors.Errorf("Weak-BB signature invalid: received nil input")
38+
}
39+
// Set P = pk * g2^m
40+
P := FP256BN.NewECP2()
41+
P.Copy(pk)
42+
P.Add(GenG2.Mul(m))
43+
P.Affine()
44+
// check that e(sig, pk * g2^m) = e(g1, g2)
45+
if !FP256BN.Fexp(FP256BN.Ate(P, sig)).Equals(GenGT) {
46+
return errors.Errorf("Weak-BB signature is invalid")
47+
}
48+
return nil
49+
}

0 commit comments

Comments
 (0)