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

Commit b117134

Browse files
committed
BBS Update: align impl to Signature test vector.
Signed-off-by: Sergey Minaev <sergey.minaev@avast.com>
1 parent 1201ae8 commit b117134

File tree

9 files changed

+165
-59
lines changed

9 files changed

+165
-59
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: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,25 @@ 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,
29-
"84d9677e651d7e039ff1bd3c6c37a6d465b23ebcc1291cf0082cd94c3971ff2ec64d8ddfd0c2f68d37429f6c751003a7"+
30-
"5435cae4b55250e5a3e357b7bd52589ff830820cd5e07a6125d846245efacccb"+
31-
"5814139b8bef5b329b3a269f576565d33bf6254916468f9e997a685ac68508a6")
32-
28+
sigBytes := hexToBytes(t,
29+
"9157456791e4f9cae1130372f7cf37709ba661e43df5c23cc1c76be91abff7e2603e2ddaaa71fc42bd6f9d44bd58315b"+
30+
"09ee5cc4e7614edde358f2c497b6b05c8b118fae3f71a52af482dceffccb3785"+
31+
"1907573c03d2890dffbd1f660cdf89c425d4e0498bbf73dd96ff15ad9a8b581a")
32+
header := hexToBytes(t, "11223344556677889900aabbccddeeff")
3333
messagesBytes := default10messages(t)
3434

3535
bls := bbs12381g2pub.New()
3636

3737
t.Run("valid signature", func(t *testing.T) {
38-
err = bls.Verify(nil, messagesBytes, sigBytes, pkBytes)
38+
err = bls.Verify(header, messagesBytes, sigBytes, pkBytes)
3939
require.NoError(t, err)
4040
})
4141

@@ -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, "000a0005b309e66b61ed40151fe80418c2a603ac98ba5a41348daa5ff8452f8d1c3540e627d1d455cc21e416508566f2ad425ecb8e1502e60fb0b4229ea355768725f249ddd96d16aac62317932d7249cd672780518d361956cadde8113304136cba7de696a928df91d8cd4b839c4539fadfb69eaa7fb06f9383df5e71a63313f595a998052e2c5f0f8041b5fdeaa96587d8365f000000748b822f236fbe22a18573db03f7b7867925e25d765f5b3689a480ae429f7bc93b5e7705b19f03ab752d5d8f40f2179f4e0000000206b4f1e7ac8f6342a3f21fbc8f73689d9020b43749c5b59c08019c009506b3fa7293bf6163a59f207b5bddd63520c24186d294169118757f90adbd00c277f911881f03648d511521053c722b69cb4e9901b0c9e5ec1a2b8dc7effcb2cc9551d2c62e908a7906a19e252b9dc9deb435e30000000a1da464bde0b8b36051d9dafe48478fb07c66d809cb01f5ff1af65ddea5926ae25f7eeb0fc7abe707313cd88a82f338ff9bfa6e66438cb07cae7bbc2539a234fa5abde85f4157c27a5e4bb3f91f71e5ba3218ff6a442bb346a6b25cb4f22f7b346b9a713272d5b47740b12f23e8bf2c28ed396b95c94352cfdc6e217fd92d19671ab662782134a08463c3ad2fd45942f980ada1a0e507283d4c5a650c82a818f86f3260817ff2866634485ee4ca5b5ee530e40c7bfbb18165bcd558a8f8e5f8ef257c733a3f0c1eb7a5d5a7be14a6ef5dc897c77ad5e05e830a0e180608aa88fe0d4963a99d88008fe7d9ff77005ba59a3b667d9d17a95510095d631a1e61be812540857d411593c464a0d403713daa9e377d58867dfbb315d09b8eecd2aa58f72de98c306484f88a325ba57b33fd1636c713c340147c55e6c932b394afea1567") //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]}
@@ -195,7 +195,7 @@ func TestBBSG2Pub_VerifyProof_SeveralDisclosedMessages(t *testing.T) {
195195
proofBytesCopy := make([]byte, len(proofBytes))
196196

197197
copy(proofBytesCopy, proofBytes)
198-
proofBytesCopy[23] = 255 - proofBytesCopy[23]
198+
proofBytesCopy[21] = 255 - proofBytesCopy[21]
199199

200200
err = bls.VerifyProof(nil, revealedMessagesBytes, proofBytesCopy, nonce, pkBytes)
201201
require.Error(t, err)
@@ -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,

0 commit comments

Comments
 (0)