1
1
import bls from "@chainsafe/bls" ;
2
2
import { CoordType , PointFormat , PublicKey } from "@chainsafe/bls/types" ;
3
3
import { ISignatureSet , SignatureSetType } from "@lodestar/state-transition" ;
4
- import { VerifySignatureOpts } from "../interface .js" ;
5
- import { getAggregatedPubkey } from "../utils .js" ;
6
- import { LinkedList } from "../../../util/array .js" ;
7
- import { Metrics } from "../../../metrics/metrics .js" ;
4
+ import { LinkedList } from "../../util/array .js" ;
5
+ import { Metrics } from "../../metrics/metrics .js" ;
6
+ import { VerifySignatureOpts } from "./interface .js" ;
7
+ import { getAggregatedPubkey } from "./utils .js" ;
8
8
import { BlsWorkReq } from "./types.js" ;
9
+ import { randomBytesNonZero } from "./utils.js" ;
9
10
10
11
export type JobQueueItem = JobQueueItemDefault | JobQueueItemSameMessage ;
11
12
@@ -56,7 +57,7 @@ export function jobItemWorkReq(job: JobQueueItem, format: PointFormat, metrics:
56
57
opts : job . opts ,
57
58
sets : job . sets . map ( ( set ) => ( {
58
59
// this can throw, handled in the consumer code
59
- publicKey : getAggregatedPubkey ( set , metrics ) . toBytes ( format ) ,
60
+ publicKey : getAggregatedPubkey ( set , metrics ) ,
60
61
signature : set . signature ,
61
62
message : set . signingRoot ,
62
63
} ) ) ,
@@ -73,13 +74,19 @@ export function jobItemWorkReq(job: JobQueueItem, format: PointFormat, metrics:
73
74
const signatures = job . sets . map ( ( set ) => bls . Signature . fromBytes ( set . signature , CoordType . affine , true ) ) ;
74
75
timer ?.( ) ;
75
76
77
+ // adding verification randomness is napi specific. must not attempt with herumi until
78
+ // @chainsafe /bls is updated to support it with herumi
79
+ const randomness : Uint8Array [ ] = [ ] ;
80
+ for ( let i = 0 ; i < job . sets . length ; i ++ ) {
81
+ randomness . push ( randomBytesNonZero ( 8 ) ) ;
82
+ }
76
83
return {
77
84
opts : job . opts ,
78
85
sets : [
79
86
{
80
- publicKey : bls . PublicKey . aggregate ( job . sets . map ( ( set ) => set . publicKey ) ) . toBytes ( format ) ,
81
- signature : bls . Signature . aggregate ( signatures ) . toBytes ( format ) ,
82
87
message : job . message ,
88
+ publicKey : bls . PublicKey . aggregate ( job . sets . map ( ( set , i ) => set . publicKey . multiplyBy ( randomness [ i ] ) ) ) ,
89
+ signature : bls . Signature . aggregate ( signatures . map ( ( sig , i ) => sig . multiplyBy ( randomness [ i ] ) ) ) ,
83
90
} ,
84
91
] ,
85
92
} ;
0 commit comments