Skip to content
This repository was archived by the owner on Mar 27, 2024. It is now read-only.

Commit 70f3297

Browse files
committed
BBS Update: align impl to Signature test vector.
Signed-off-by: Sergey Minaev <[email protected]>
1 parent 923a1ed commit 70f3297

File tree

9 files changed

+159
-53
lines changed

9 files changed

+159
-53
lines changed

pkg/crypto/primitive/bbs12381g2pub/bbs.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,14 @@ func (bbs *BBSG2Pub) SignWithKey(header []byte, messages [][]byte, privKey *Priv
190190
return nil, fmt.Errorf("build generators from public key: %w", err)
191191
}
192192

193+
messagesFr := ParseSignatureMessages(messages)
194+
193195
esBuilder := newEcnodeForHashBuilder()
194196
esBuilder.addScalar(privKey.FR)
195197
esBuilder.addScalar(pubKeyWithGenerators.domain)
196198

197-
for _, msg := range messages {
198-
esBuilder.addBytes(msg)
199+
for _, msgFr := range messagesFr {
200+
esBuilder.addScalar(msgFr.FR)
199201
}
200202

201203
es := Hash2scalars(esBuilder.build(), 2)
@@ -204,7 +206,6 @@ func (bbs *BBSG2Pub) SignWithKey(header []byte, messages [][]byte, privKey *Priv
204206
exp.Add(exp, e)
205207
exp.Inverse(exp)
206208

207-
messagesFr := ParseSignatureMessages(messages)
208209
b := computeB(s, messagesFr, pubKeyWithGenerators)
209210

210211
sig := g1.New()
@@ -222,12 +223,9 @@ func (bbs *BBSG2Pub) SignWithKey(header []byte, messages [][]byte, privKey *Priv
222223
func computeB(s *bls12381.Fr, messages []*SignatureMessage, key *PublicKeyWithGenerators) *bls12381.PointG1 {
223224
const basesOffset = 2
224225

225-
bindingBasis := g1.One()
226-
bindingExp := bls12381.NewFr().One()
227-
228226
cb := newCommitmentBuilder(len(messages) + basesOffset)
229227

230-
cb.add(bindingBasis, bindingExp)
228+
cb.add(key.p1, bls12381.NewFr().One())
231229
cb.add(key.q1, s)
232230
cb.add(key.q2, key.domain)
233231

pkg/crypto/primitive/bbs12381g2pub/bbs_test.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ import (
1717
)
1818

1919
func TestBlsG2Pub_Verify(t *testing.T) {
20-
privateKeyBytes := hexStringToBytesTest(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
20+
privateKeyBytes := hexToBytes(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
2121

2222
privateKey, err := bbs12381g2pub.UnmarshalPrivateKey(privateKeyBytes)
2323
require.NoError(t, err)
2424

2525
pkBytes, err := privateKey.PublicKey().Marshal()
2626
require.NoError(t, err)
2727

28-
sigBytes := hexStringToBytesTest(t,
28+
sigBytes := hexToBytes(t,
2929
"84d9677e651d7e039ff1bd3c6c37a6d465b23ebcc1291cf0082cd94c3971ff2ec64d8ddfd0c2f68d37429f6c751003a7"+
3030
"5435cae4b55250e5a3e357b7bd52589ff830820cd5e07a6125d846245efacccb"+
3131
"5814139b8bef5b329b3a269f576565d33bf6254916468f9e997a685ac68508a6")
@@ -135,15 +135,15 @@ func TestBBSG2Pub_Sign(t *testing.T) {
135135
}
136136

137137
func TestBBSG2Pub_SignWithPredefinedKeys(t *testing.T) {
138-
privateKeyBytes := hexStringToBytesTest(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
139-
header := hexStringToBytesTest(t, "11223344556677889900aabbccddeeff")
138+
privateKeyBytes := hexToBytes(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
139+
header := hexToBytes(t, "11223344556677889900aabbccddeeff")
140140
messagesBytes := default10messages(t)
141141

142142
bls := bbs12381g2pub.New()
143143
signature, err := bls.Sign(header, messagesBytes, privateKeyBytes)
144144
require.NoError(t, err)
145145

146-
expectedSignatureBytes := hexStringToBytesTest(t,
146+
expectedSignatureBytes := hexToBytes(t,
147147
"9157456791e4f9cae1130372f7cf37709ba661e43df5c23cc1c76be91abff7e2603e2ddaaa71fc42bd6f9d44bd58315b"+
148148
"09ee5cc4e7614edde358f2c497b6b05c8b118fae3f71a52af482dceffccb3785"+
149149
"1907573c03d2890dffbd1f660cdf89c425d4e0498bbf73dd96ff15ad9a8b581a")
@@ -152,18 +152,18 @@ func TestBBSG2Pub_SignWithPredefinedKeys(t *testing.T) {
152152
}
153153

154154
func TestBBSG2Pub_VerifyProof_SeveralDisclosedMessages(t *testing.T) {
155-
privateKeyBytes := hexStringToBytesTest(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
155+
privateKeyBytes := hexToBytes(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
156156

157157
privateKey, err := bbs12381g2pub.UnmarshalPrivateKey(privateKeyBytes)
158158
require.NoError(t, err)
159159

160160
pkBytes, err := privateKey.PublicKey().Marshal()
161161
require.NoError(t, err)
162162

163-
proofBytes := hexStringToBytesTest(t, "000a0005ab1a7238bc9ba5065c9d1f395720f97b8d68208e89edb1fa8f1cde16c07b7771a46359ef198317ca71cfae5937200485b3e62de95b4d05a95c8d882197c56e582f74b5e6e1e4ae866a93fa13ae32690b8ea1bbbd7f1138f18a750ede1915a6d2898eec5b19028f2765585f36be4f152bd4ac2ad280743bed14ec78e0cdbf80f0547b37b1de62d71144f03e1fdec89b05000000748adcb65ca0ed38b9c6d1649bef5cd942175affdb9c7ad5212b371f0472d39228dc6c220cc80846fb2f44911b7aed2f32000000020910a8400998e7903a401b439d9a84723e46c9f0c03a9949ac9ee2d545caf72a50cd0f2f340a04a22ffbc8c4c6aa15af1ae972c18bbe6b463707836fb08d624089a4b92531729d0ce3f44ca36b47331a4c9a51af11d5b0f9bf4b55d8d09db24c8df59c6ad111ae0f9af56e16681a53df0000000a5916c0c291dc659d25699f2b182e2fbafe091bdf7a0667a4e4f047e80fa3d64214ee7f20d63f31472ec2eeac73ca01e51c2e420f3a26cda4e0cbe82e64f92a62075131c9dfde53d16e8c3e1d0b56bd6ac203f07af450cb94b019c6bb667df2465f9317c9ac178e58f638eb52751638fd54a211ab0ab3aeee8d87a69392de458f6ddb6b9f007589f6bdb5376eeffc4f64f7c7c0c426197be97f4f83a1a6f06ff74473dde98edbb444976ef4083237a859807d1a4c1e94fe68b69609fa00431e4b4622a39bd74791ce4b1f7545291b5ded098a757f680cbe1612312c8f841a8d0b077e5cf3eb5cf85f0ed9a3a061c3aa447c9a6bc87808d3ee1f293d157d1f41f14edd5cd0b1fcb5112d7e09386a276f396d4f31f1660bb65f0206eb92d669d2800f1e0f418be23895ad0cac055f973b50c38d57df54563e5493dd7910308ed9a6") //nolint:lll
163+
proofBytes := hexToBytes(t, "000a0005ab1a7238bc9ba5065c9d1f395720f97b8d68208e89edb1fa8f1cde16c07b7771a46359ef198317ca71cfae5937200485b3e62de95b4d05a95c8d882197c56e582f74b5e6e1e4ae866a93fa13ae32690b8ea1bbbd7f1138f18a750ede1915a6d2898eec5b19028f2765585f36be4f152bd4ac2ad280743bed14ec78e0cdbf80f0547b37b1de62d71144f03e1fdec89b05000000748adcb65ca0ed38b9c6d1649bef5cd942175affdb9c7ad5212b371f0472d39228dc6c220cc80846fb2f44911b7aed2f32000000020910a8400998e7903a401b439d9a84723e46c9f0c03a9949ac9ee2d545caf72a50cd0f2f340a04a22ffbc8c4c6aa15af1ae972c18bbe6b463707836fb08d624089a4b92531729d0ce3f44ca36b47331a4c9a51af11d5b0f9bf4b55d8d09db24c8df59c6ad111ae0f9af56e16681a53df0000000a5916c0c291dc659d25699f2b182e2fbafe091bdf7a0667a4e4f047e80fa3d64214ee7f20d63f31472ec2eeac73ca01e51c2e420f3a26cda4e0cbe82e64f92a62075131c9dfde53d16e8c3e1d0b56bd6ac203f07af450cb94b019c6bb667df2465f9317c9ac178e58f638eb52751638fd54a211ab0ab3aeee8d87a69392de458f6ddb6b9f007589f6bdb5376eeffc4f64f7c7c0c426197be97f4f83a1a6f06ff74473dde98edbb444976ef4083237a859807d1a4c1e94fe68b69609fa00431e4b4622a39bd74791ce4b1f7545291b5ded098a757f680cbe1612312c8f841a8d0b077e5cf3eb5cf85f0ed9a3a061c3aa447c9a6bc87808d3ee1f293d157d1f41f14edd5cd0b1fcb5112d7e09386a276f396d4f31f1660bb65f0206eb92d669d2800f1e0f418be23895ad0cac055f973b50c38d57df54563e5493dd7910308ed9a6") //nolint:lll
164164

165165
// TODO "header": "11223344556677889900aabbccddeeff"
166-
nonce := hexStringToBytesTest(t, "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501")
166+
nonce := hexToBytes(t, "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501")
167167

168168
messagesBytes := default10messages(t)
169169
revealedMessagesBytes := [][]byte{messagesBytes[0], messagesBytes[2]}
@@ -210,7 +210,7 @@ func TestBBSG2Pub_VerifyProof_SeveralDisclosedMessages(t *testing.T) {
210210
}
211211

212212
func TestBBSG2Pub_DeriveProof(t *testing.T) {
213-
privKeyBytes := hexStringToBytesTest(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
213+
privKeyBytes := hexToBytes(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
214214

215215
privKey, err := bbs12381g2pub.UnmarshalPrivateKey(privKeyBytes)
216216
require.NoError(t, err)
@@ -228,7 +228,7 @@ func TestBBSG2Pub_DeriveProof(t *testing.T) {
228228

229229
require.NoError(t, bls.Verify(nil, messagesBytes, signatureBytes, pubKeyBytes))
230230

231-
nonce := hexStringToBytesTest(t, "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501")
231+
nonce := hexToBytes(t, "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501")
232232
revealedIndexes := []int{0, 2}
233233
proofBytes, err := bls.DeriveProof(nil, messagesBytes, signatureBytes, nonce, pubKeyBytes, revealedIndexes)
234234
require.NoError(t, err)
@@ -251,22 +251,22 @@ func TestBBSG2Pub_DeriveProof(t *testing.T) {
251251

252252
func default10messages(t *testing.T) [][]byte {
253253
messagesBytes := [][]byte{
254-
hexStringToBytesTest(t, "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02"),
255-
hexStringToBytesTest(t, "87a8bd656d49ee07b8110e1d8fd4f1dcef6fb9bc368c492d9bc8c4f98a739ac6"),
256-
hexStringToBytesTest(t, "96012096adda3f13dd4adbe4eea481a4c4b5717932b73b00e31807d3c5894b90"),
257-
hexStringToBytesTest(t, "ac55fb33a75909edac8994829b250779298aa75d69324a365733f16c333fa943"),
258-
hexStringToBytesTest(t, "d183ddc6e2665aa4e2f088af9297b78c0d22b4290273db637ed33ff5cf703151"),
259-
hexStringToBytesTest(t, "515ae153e22aae04ad16f759e07237b43022cb1ced4c176e0999c6a8ba5817cc"),
260-
hexStringToBytesTest(t, "496694774c5604ab1b2544eababcf0f53278ff5040c1e77c811656e8220417a2"),
261-
hexStringToBytesTest(t, "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c23364568523f8b91"),
262-
hexStringToBytesTest(t, "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b7320912416"),
263-
hexStringToBytesTest(t, "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80"),
254+
hexToBytes(t, "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02"),
255+
hexToBytes(t, "87a8bd656d49ee07b8110e1d8fd4f1dcef6fb9bc368c492d9bc8c4f98a739ac6"),
256+
hexToBytes(t, "96012096adda3f13dd4adbe4eea481a4c4b5717932b73b00e31807d3c5894b90"),
257+
hexToBytes(t, "ac55fb33a75909edac8994829b250779298aa75d69324a365733f16c333fa943"),
258+
hexToBytes(t, "d183ddc6e2665aa4e2f088af9297b78c0d22b4290273db637ed33ff5cf703151"),
259+
hexToBytes(t, "515ae153e22aae04ad16f759e07237b43022cb1ced4c176e0999c6a8ba5817cc"),
260+
hexToBytes(t, "496694774c5604ab1b2544eababcf0f53278ff5040c1e77c811656e8220417a2"),
261+
hexToBytes(t, "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c23364568523f8b91"),
262+
hexToBytes(t, "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b7320912416"),
263+
hexToBytes(t, "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80"),
264264
}
265265

266266
return messagesBytes
267267
}
268268

269-
func hexStringToBytesTest(t *testing.T, msg string) []byte {
269+
func hexToBytes(t *testing.T, msg string) []byte {
270270
bytes, err := hex.DecodeString(msg)
271271
require.NoError(t, err)
272272

pkg/crypto/primitive/bbs12381g2pub/fr.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,9 @@ import (
1717
)
1818

1919
const (
20-
logP2 = 384
2120
k = 128
2221
h2sDST = csID + "H2S_"
23-
expandLen = (logP2 + k) / 8
22+
expandLen = (logR2 + k + 7) / 8 //nolint:gomnd
2423
)
2524

2625
func parseFr(data []byte) *bls12381.Fr {
@@ -74,20 +73,25 @@ func Hash2scalar(message []byte) *bls12381.Fr {
7473

7574
// Hash2scalars convert messages represented in bytes to Fr.
7675
func Hash2scalars(msg []byte, cnt int) []*bls12381.Fr {
76+
return hash2scalars(msg, []byte(h2sDST), cnt)
77+
}
78+
79+
func hash2scalars(msg, dst []byte, cnt int) []*bls12381.Fr {
7780
bufLen := cnt * expandLen
7881
msgLen := len(msg)
7982
roundSz := 1
8083
msgLenSz := 4
8184

8285
msgExt := make([]byte, msgLen+roundSz+msgLenSz)
86+
// msgExt is a concatenation of: msg || I2OSP(round, 1) || I2OSP(cnt, 4)
8387
copy(msgExt, msg)
84-
copy(msgExt[msgLen+1:], uint32ToBytes(uint32(msgLen)))
88+
copy(msgExt[msgLen+1:], uint32ToBytes(uint32(cnt)))
8589

8690
out := make([]*bls12381.Fr, cnt)
8791

8892
for round, completed := byte(0), false; !completed; {
8993
msgExt[msgLen] = round
90-
buf, _ := bls12381intern.ExpandMsgXOF(sha3.NewShake256(), msgExt, []byte(h2sDST), bufLen) //nolint:errcheck
94+
buf, _ := bls12381intern.ExpandMsgXOF(sha3.NewShake256(), msgExt, dst, bufLen) //nolint:errcheck
9195

9296
ok := true
9397
for i := 0; i < cnt && ok; i++ {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
Copyright SecureKey Technologies Inc. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package bbs12381g2pub_test
8+
9+
import (
10+
"testing"
11+
12+
"github.com/stretchr/testify/require"
13+
14+
bbs "github.com/hyperledger/aries-framework-go/pkg/crypto/primitive/bbs12381g2pub"
15+
)
16+
17+
func TestHash2Scalars(t *testing.T) {
18+
msg := hexToBytes(t, "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02")
19+
20+
t.Run("single", func(t *testing.T) {
21+
sc := bbs.Hash2scalar(msg).ToBytes()
22+
require.Equal(t, hexToBytes(t, "260cab748e24ccc2bbd66f5b834d692622fa131f5ce898fa57217434c9ed14fa"), sc)
23+
})
24+
25+
t.Run("multiple", func(t *testing.T) {
26+
sc := bbs.Hash2scalars(msg, 10)
27+
require.Equal(t, hexToBytes(t, "5c6e62607c16397ee6d9624673be9a7ddacbc7b7dd290bdb853cf4c74a34de0a"), sc[0].ToBytes())
28+
require.Equal(t, hexToBytes(t, "2a3524e43413a5d1b34c4c8ed119c4c5a2f9b84392ff0fea0d34e1be44ceafbc"), sc[1].ToBytes())
29+
require.Equal(t, hexToBytes(t, "4b649b82eed1e62117d91cd8d22438e72f3f931a0f8ad683d1ade253333c472a"), sc[2].ToBytes())
30+
require.Equal(t, hexToBytes(t, "64338965f1d37d17a14b6f431128c0d41a7c3924a5f484c282d20205afdfdb8f"), sc[3].ToBytes())
31+
require.Equal(t, hexToBytes(t, "0dfe01c01ff8654e43a611b76aaf4faec618a50d85d34f7cc89879b179bde3d5"), sc[4].ToBytes())
32+
require.Equal(t, hexToBytes(t, "6b6935016e64791f5d719f8206284fbe27dbb8efffb4141512c3fbfbfa861a0f"), sc[5].ToBytes())
33+
require.Equal(t, hexToBytes(t, "0dfe13f85a36df5ebfe0efac3759becfcc2a18b134fd22485c151db85f981342"), sc[6].ToBytes())
34+
require.Equal(t, hexToBytes(t, "5071751012c142046e7c3508decb0b7ba9a453d06ce7787189f4d93a821d538e"), sc[7].ToBytes())
35+
require.Equal(t, hexToBytes(t, "5cdae3304e745553a75134d914db5b282cc62d295e3ed176fb12f792919fd85e"), sc[8].ToBytes())
36+
require.Equal(t, hexToBytes(t, "32b67dfbba729831798279071a39021b66fd68ee2e68684a0f6901cd6fcb8256"), sc[9].ToBytes())
37+
})
38+
}

pkg/crypto/primitive/bbs12381g2pub/keys.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ import (
2121
)
2222

2323
const (
24-
seedSize = frCompressedSize
25-
seedDST = csID + "SIG_GENERATOR_SEED_"
26-
generatorDST = csID + "SIG_GENERATOR_DST_"
27-
generatorSeed = csID + "MESSAGE_GENERATOR_SEED"
28-
logR2 = 251
29-
seedLen = ((logR2 + k) + 7) / 8 //nolint:gomnd
24+
seedSize = frCompressedSize
25+
seedDST = csID + "SIG_GENERATOR_SEED_"
26+
generatorDST = csID + "SIG_GENERATOR_DST_"
27+
generatorSeed = csID + "MESSAGE_GENERATOR_SEED"
28+
generatorBPSeed = csID + "BP_MESSAGE_GENERATOR_SEED"
29+
logR2 = 251
30+
seedLen = ((logR2 + k) + 7) / 8 //nolint:gomnd
3031
)
3132

3233
// PublicKey defines BLS Public Key.
@@ -42,6 +43,7 @@ type PrivateKey struct {
4243
// PublicKeyWithGenerators extends PublicKey with a blinding generator h0, a commitment to the secret key w,
4344
// and a generator for each message h.
4445
type PublicKeyWithGenerators struct {
46+
p1 *bls12381.PointG1
4547
q1 *bls12381.PointG1
4648
q2 *bls12381.PointG1
4749
h []*bls12381.PointG1
@@ -58,7 +60,12 @@ func (pk *PublicKey) ToPublicKeyWithGenerators(messagesCount int, header []byte)
5860
specGenCnt := 2
5961
genCnt := messagesCount + specGenCnt
6062

61-
generators, err := CreateGenerators(genCnt)
63+
generators, err := CreateMessageGenerators(genCnt)
64+
if err != nil {
65+
return nil, err
66+
}
67+
68+
bpGenerators, err := crateGenerators(genCnt, []byte(generatorBPSeed))
6269
if err != nil {
6370
return nil, err
6471
}
@@ -77,6 +84,7 @@ func (pk *PublicKey) ToPublicKeyWithGenerators(messagesCount int, header []byte)
7784
domain := Hash2scalar(domainBuilder.build())
7885

7986
return &PublicKeyWithGenerators{
87+
p1: bpGenerators[0],
8088
q1: generators[0],
8189
q2: generators[1],
8290
h: generators[2:],
@@ -97,11 +105,15 @@ func hashToG1(data, dst []byte) (*bls12381.PointG1, error) {
97105
return g1.FromBytes(g.ToBytes(p))
98106
}
99107

100-
// CreateGenerators create `cnt` determenistic generators.
101-
func CreateGenerators(cnt int) ([]*bls12381.PointG1, error) {
108+
// CreateMessageGenerators create `cnt` determenistic generators.
109+
func CreateMessageGenerators(cnt int) ([]*bls12381.PointG1, error) {
110+
return crateGenerators(cnt, []byte(generatorSeed))
111+
}
112+
113+
func crateGenerators(cnt int, seed []byte) ([]*bls12381.PointG1, error) {
102114
generators := make([]*bls12381.PointG1, cnt)
103115

104-
v, err := bls12381intern.ExpandMsgXOF(sha3.NewShake256(), []byte(generatorSeed), []byte(seedDST), seedLen)
116+
v, err := bls12381intern.ExpandMsgXOF(sha3.NewShake256(), seed, []byte(seedDST), seedLen)
105117
if err != nil {
106118
return nil, err
107119
}

pkg/crypto/primitive/bbs12381g2pub/keys_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,21 +67,21 @@ func TestPrivateKey_PublicKey(t *testing.T) {
6767

6868
t.Run("pre-generated key pair", func(t *testing.T) {
6969
// original hex seed 746869732d49532d6a7573742d616e2d546573742d494b4d2d746f2d67656e65726174652d246528724074232d6b6579
70-
privateKeyB58 := "5qNVd4Wsp7LPC7vxrbuVMsAkAGif2dA82wm1Wte1zH4Z"
71-
publicKeyB58 := "25pRBEBDHvG5ryqsEB5tw6eAa3Ds8bx6jMKhEtXnWjCLNg7ikYokwaNtpggZZY3MvWTxBPCidfxFBq2ZiVVTpioCh6GJLs4iESiEydJca9kmeMkEkqK6ePudqoqLHSv4NA7p" // nolint: lll
70+
privateKeyBytes := hexToBytes(t, "47d2ede63ab4c329092b342ab526b1079dbc2595897d4f2ab2de4d841cbe7d56")
71+
publicKeyBytesExpeted := hexToBytes(t, "b65b7cbff4e81b723456a13936b6bcc77a078bf6291765f3ae13170072249dd7daa7ec1bd82b818ab60198030b45b8fa159c155fc3841a9ad4045e37161c9f0d9a4f361b93cfdc67d365f3be1a398e56aa173d7a55e01b4a8dd2494e7fb90da7") // nolint: lll
7272

73-
privateKey, err := bbs.UnmarshalPrivateKey(base58.Decode(privateKeyB58))
73+
privateKey, err := bbs.UnmarshalPrivateKey(privateKeyBytes)
7474
require.NoError(t, err)
7575

7676
publicKeyBytes, err := privateKey.PublicKey().Marshal()
77-
require.Equal(t, publicKeyB58, base58.Encode(publicKeyBytes))
77+
require.Equal(t, publicKeyBytesExpeted, publicKeyBytes)
7878
require.NoError(t, err)
7979
})
8080
}
8181

8282
func TestGenerators(t *testing.T) {
8383
msgCnt := 2
84-
generators, err := bbs.CreateGenerators(msgCnt + 2)
84+
generators, err := bbs.CreateMessageGenerators(msgCnt + 2)
8585
require.NoError(t, err)
8686

8787
bytes := bls12381.NewG1().ToCompressed(generators[0])

pkg/crypto/primitive/bbs12381g2pub/signature_message.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010
bls12381 "github.com/kilic/bls12-381"
1111
)
1212

13+
const (
14+
dstMapMsg = csID + "MAP_MSG_TO_SCALAR_AS_HASH_"
15+
)
16+
1317
// SignatureMessage defines a message to be used for a signature check.
1418
type SignatureMessage struct {
1519
FR *bls12381.Fr
@@ -20,7 +24,7 @@ func parseSignatureMessage(message []byte) *SignatureMessage {
2024
encodedForHashMsg := newEcnodeForHashBuilder()
2125
encodedForHashMsg.addBytes(message)
2226

23-
elm := Hash2scalar(encodedForHashMsg.build())
27+
elm := hash2scalars(encodedForHashMsg.build(), []byte(dstMapMsg), 1)[0]
2428

2529
return &SignatureMessage{
2630
FR: elm,
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
Copyright SecureKey Technologies Inc. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package bbs12381g2pub_test
8+
9+
import (
10+
"testing"
11+
12+
"github.com/stretchr/testify/require"
13+
14+
bbs "github.com/hyperledger/aries-framework-go/pkg/crypto/primitive/bbs12381g2pub"
15+
)
16+
17+
func TestParseSignatureMessages(t *testing.T) {
18+
msgs := [][]byte{
19+
hexToBytes(t, "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02"),
20+
hexToBytes(t, "87a8bd656d49ee07b8110e1d8fd4f1dcef6fb9bc368c492d9bc8c4f98a739ac6"),
21+
hexToBytes(t, "96012096adda3f13dd4adbe4eea481a4c4b5717932b73b00e31807d3c5894b90"),
22+
hexToBytes(t, "ac55fb33a75909edac8994829b250779298aa75d69324a365733f16c333fa943"),
23+
hexToBytes(t, "d183ddc6e2665aa4e2f088af9297b78c0d22b4290273db637ed33ff5cf703151"),
24+
hexToBytes(t, "515ae153e22aae04ad16f759e07237b43022cb1ced4c176e0999c6a8ba5817cc"),
25+
hexToBytes(t, "496694774c5604ab1b2544eababcf0f53278ff5040c1e77c811656e8220417a2"),
26+
hexToBytes(t, "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c23364568523f8b91"),
27+
hexToBytes(t, "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b7320912416"),
28+
hexToBytes(t, "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80"),
29+
}
30+
31+
sc := bbs.ParseSignatureMessages(msgs)
32+
33+
require.Equal(t,
34+
hexToBytes(t, "4e67c49cf68df268bca0624880770bb57dbe8460c89883cc0ac496785b68bbe9"), sc[0].FR.ToBytes())
35+
require.Equal(t,
36+
hexToBytes(t, "12d92c990f37ffab1c6ac4b0cd83378ffb8a8610259d62d3b885fc4c1bc50f7f"), sc[1].FR.ToBytes())
37+
require.Equal(t,
38+
hexToBytes(t, "41a157520e8752ca100a365ffde4683fb9610bf105b40933bb98dcacbbd56ace"), sc[2].FR.ToBytes())
39+
require.Equal(t,
40+
hexToBytes(t, "3344daad11febac28f0f8e3740cd2921fd6da18ebc7e9692a8287cedea5f4bf4"), sc[3].FR.ToBytes())
41+
require.Equal(t,
42+
hexToBytes(t, "0407198a8ffc4640b840fc924e5308f405ca86035d05366718aafd0b688876f3"), sc[4].FR.ToBytes())
43+
require.Equal(t,
44+
hexToBytes(t, "1918fa78c85628cb3ac705cc4843197d3fce88c8132d9242d87201e65a4d3743"), sc[5].FR.ToBytes())
45+
require.Equal(t,
46+
hexToBytes(t, "0a272f853369d70526d7bd37281bb87d1c8db7d0975dd833812bb9d264f4b0eb"), sc[6].FR.ToBytes())
47+
require.Equal(t,
48+
hexToBytes(t, "00776f91d1ecb5cc01ffe155ae05efea0b820f3d40bada5142bb852f9922b7e1"), sc[7].FR.ToBytes())
49+
require.Equal(t,
50+
hexToBytes(t, "3902ced42427bca88822f818912d2f4c0d88ba1d1fc7a9b0e2321674a5d53f27"), sc[8].FR.ToBytes())
51+
require.Equal(t,
52+
hexToBytes(t, "397864d9292b1f4a5fff5fa33088ed8e1a9ec52346dbd5f66ee0f978bd67595d"), sc[9].FR.ToBytes())
53+
}

0 commit comments

Comments
 (0)