11import assert from 'assert' ;
2- import { concatBytes } from '../../../../src/tss/eddsa-mps/util' ;
2+ import { encode } from 'cbor-x' ;
3+ import { concatBytes , fetchMaterial } from '../../../../src/tss/eddsa-mps/util' ;
4+
5+ function makeShareBuffer ( overrides : Partial < Record < string , unknown > > = { } ) : Buffer {
6+ const share = {
7+ threshold : 2 ,
8+ total_parties : 3 ,
9+ party_id : 0 ,
10+ d_i : new Uint8Array ( [ 0xaa , 0xbb , 0xcc ] ) ,
11+ public_key : new Uint8Array ( [ 0x01 , 0x02 , 0x03 , 0x04 ] ) ,
12+ key_id : new Uint8Array ( [ 0x10 , 0x20 ] ) ,
13+ root_chain_code : new Uint8Array ( [ 0xde , 0xad , 0xbe , 0xef ] ) ,
14+ final_session_id : new Uint8Array ( [ 0xff , 0x00 ] ) ,
15+ ...overrides ,
16+ } ;
17+ return Buffer . from ( encode ( share ) ) ;
18+ }
319
420describe ( 'EdDSA Utility Functions' , function ( ) {
521 describe ( 'concatBytes' , function ( ) {
@@ -14,4 +30,47 @@ describe('EdDSA Utility Functions', function () {
1430 assert . deepStrictEqual ( result , expected , 'concatBytes should concatenate arrays correctly' ) ;
1531 } ) ;
1632 } ) ;
33+
34+ describe ( 'fetchMaterial' , function ( ) {
35+ it ( 'should return empty array for empty input' , function ( ) {
36+ assert . deepStrictEqual ( fetchMaterial ( [ ] ) , [ ] ) ;
37+ } ) ;
38+
39+ it ( 'should decode a single share and convert byte fields to hex' , function ( ) {
40+ const [ result ] = fetchMaterial ( [ makeShareBuffer ( ) ] ) ;
41+
42+ assert . strictEqual ( result . threshold , 2 ) ;
43+ assert . strictEqual ( result . total_parties , 3 ) ;
44+ assert . strictEqual ( result . party_id , 0 ) ;
45+ assert . strictEqual ( result . d_i , 'aabbcc' ) ;
46+ assert . strictEqual ( result . public_key , '01020304' ) ;
47+ assert . strictEqual ( result . key_id , '1020' ) ;
48+ assert . strictEqual ( result . root_chain_code , 'deadbeef' ) ;
49+ assert . strictEqual ( result . final_session_id , 'ff00' ) ;
50+ } ) ;
51+
52+ it ( 'should decode multiple shares preserving per-party fields' , function ( ) {
53+ const share0 = makeShareBuffer ( { party_id : 0 , d_i : new Uint8Array ( [ 0x01 ] ) } ) ;
54+ const share1 = makeShareBuffer ( { party_id : 1 , d_i : new Uint8Array ( [ 0x02 ] ) } ) ;
55+ const share2 = makeShareBuffer ( { party_id : 2 , d_i : new Uint8Array ( [ 0x03 ] ) } ) ;
56+
57+ const results = fetchMaterial ( [ share0 , share1 , share2 ] ) ;
58+
59+ assert . strictEqual ( results . length , 3 ) ;
60+ assert . strictEqual ( results [ 0 ] . party_id , 0 ) ;
61+ assert . strictEqual ( results [ 1 ] . party_id , 1 ) ;
62+ assert . strictEqual ( results [ 2 ] . party_id , 2 ) ;
63+
64+ assert . strictEqual ( results [ 0 ] . d_i , '01' ) ;
65+ assert . strictEqual ( results [ 1 ] . d_i , '02' ) ;
66+ assert . strictEqual ( results [ 2 ] . d_i , '03' ) ;
67+
68+ // Shared fields should be the same across shares
69+ results . forEach ( ( r ) => {
70+ assert . strictEqual ( r . threshold , 2 ) ;
71+ assert . strictEqual ( r . total_parties , 3 ) ;
72+ assert . strictEqual ( r . public_key , '01020304' ) ;
73+ } ) ;
74+ } ) ;
75+ } ) ;
1776} ) ;
0 commit comments