8
8
"strings"
9
9
"time"
10
10
11
+ "golang.org/x/crypto/blake2b"
12
+
11
13
coredocumentpb "github.com/centrifuge/centrifuge-protobufs/gen/go/coredocument"
12
14
"github.com/centrifuge/go-centrifuge/contextutil"
13
15
"github.com/centrifuge/go-centrifuge/crypto"
@@ -46,9 +48,6 @@ const (
46
48
// BasicDataRootField represents the basic document data tree root
47
49
BasicDataRootField = "bd_root"
48
50
49
- // ZKDataRootField represents the zk document data tree root
50
- ZKDataRootField = "zkd_root"
51
-
52
51
// SignaturesRootField represents the signatures property of a tree
53
52
SignaturesRootField = "signatures_root"
54
53
@@ -64,9 +63,6 @@ const (
64
63
// BasicDataRootPrefix represents the basic document data tree
65
64
BasicDataRootPrefix = "bdr_tree"
66
65
67
- // ZKDataRootPrefix represents the zk document data tree
68
- ZKDataRootPrefix = "zkdr_tree"
69
-
70
66
// SigningTreePrefix is the human readable prefix for signing tree props
71
67
SigningTreePrefix = "signing_tree"
72
68
@@ -103,8 +99,6 @@ func CompactProperties(key string) []byte {
103
99
return []byte {0 , 0 , 0 , 10 }
104
100
case BasicDataRootField :
105
101
return []byte {0 , 0 , 0 , 11 }
106
- case ZKDataRootField :
107
- return []byte {0 , 0 , 0 , 12 }
108
102
case CDTreePrefix :
109
103
return []byte {1 , 0 , 0 , 0 }
110
104
case SigningTreePrefix :
@@ -115,8 +109,6 @@ func CompactProperties(key string) []byte {
115
109
return []byte {4 , 0 , 0 , 0 }
116
110
case BasicDataRootPrefix :
117
111
return []byte {5 , 0 , 0 , 0 }
118
- case ZKDataRootPrefix :
119
- return []byte {6 , 0 , 0 , 0 }
120
112
default :
121
113
return []byte {}
122
114
}
@@ -411,49 +403,37 @@ func newRoleWithCollaborators(collaborators ...identity.DID) *coredocumentpb.Rol
411
403
412
404
// CreateProofs takes document data leaves and list of fields and generates proofs.
413
405
func (cd * CoreDocument ) CreateProofs (docType string , dataLeaves []proofs.LeafNode , fields []string ) (* DocumentProof , error ) {
414
- return cd .createProofs (false , docType , dataLeaves , fields )
415
- }
416
-
417
- // CreateProofsFromZKTree takes document data leaves and list of fields and generates proofs from ZK-ready Tree.
418
- func (cd * CoreDocument ) CreateProofsFromZKTree (docType string , dataLeaves []proofs.LeafNode , fields []string ) (* DocumentProof , error ) {
419
- return cd .createProofs (true , docType , dataLeaves , fields )
406
+ return cd .createProofs (docType , dataLeaves , fields )
420
407
}
421
408
422
409
// createProofs takes document data tree and list to fields and generates proofs.
423
410
// it will generate proofs from the dataTree and cdTree.
424
411
// It only generates proofs up to the root of the tree/s that correspond to
425
- func (cd * CoreDocument ) createProofs (fromZKTree bool , docType string , dataLeaves []proofs.LeafNode , fields []string ) (* DocumentProof , error ) {
412
+ func (cd * CoreDocument ) createProofs (docType string , dataLeaves []proofs.LeafNode , fields []string ) (* DocumentProof , error ) {
426
413
treeProofs := make (map [string ]* proofs.DocumentTree , 4 )
427
414
drTree , err := cd .DocumentRootTree (docType , dataLeaves )
428
415
if err != nil {
429
416
return nil , err
430
417
}
431
418
432
- signatureTree , err := cd .GetSignaturesDataTree ()
419
+ signaturesTree , err := cd .GetSignaturesDataTree ()
433
420
if err != nil {
434
421
return nil , errors .NewTypedError (ErrCDTree , errors .New ("failed to generate signatures tree: %v" , err ))
435
422
}
436
423
437
- dTrees , sdr , err := cd .SigningDataTrees (docType , dataLeaves )
424
+ signingTree , err := cd .SigningDataTree (docType , dataLeaves )
438
425
if err != nil {
439
426
return nil , errors .NewTypedError (ErrCDTree , errors .New ("failed to generate signing data trees: %v" , err ))
440
427
}
441
- basicDataTree := dTrees [0 ]
442
- zkDataTree := dTrees [1 ]
443
428
444
429
dataPrefix , err := getDataTreePrefix (dataLeaves )
445
430
if err != nil {
446
431
return nil , err
447
432
}
448
433
449
- targetTree := basicDataTree
450
- if fromZKTree {
451
- targetTree = zkDataTree
452
- }
453
-
454
- treeProofs [dataPrefix ] = targetTree
434
+ treeProofs [dataPrefix ] = signingTree
455
435
treeProofs [CDTreePrefix ] = treeProofs [dataPrefix ]
456
- treeProofs [SignaturesTreePrefix ] = signatureTree
436
+ treeProofs [SignaturesTreePrefix ] = signaturesTree
457
437
treeProofs [DRTreePrefix ] = drTree
458
438
459
439
rawProofs , err := generateProofs (fields , treeProofs )
@@ -463,10 +443,8 @@ func (cd *CoreDocument) createProofs(fromZKTree bool, docType string, dataLeaves
463
443
464
444
return & DocumentProof {
465
445
FieldProofs : rawProofs ,
466
- LeftDataRooot : basicDataTree .RootHash (),
467
- RightDataRoot : zkDataTree .RootHash (),
468
- SigningRoot : sdr ,
469
- SignaturesRoot : signatureTree .RootHash (),
446
+ SigningRoot : signingTree .RootHash (),
447
+ SignaturesRoot : signaturesTree .RootHash (),
470
448
}, nil
471
449
}
472
450
@@ -619,99 +597,34 @@ func (cd *CoreDocument) DocumentRootTree(docType string, dataLeaves []proofs.Lea
619
597
return tree , nil
620
598
}
621
599
622
- func (cd * CoreDocument ) basicDataTree (dataLeaves []proofs.LeafNode , cdLeaves []proofs.LeafNode ) (tree * proofs.DocumentTree , err error ) {
600
+ // SigningDataTree returns the merkle tree + signingRoot Hash for the document data tree provided
601
+ func (cd * CoreDocument ) SigningDataTree (docType string , dataLeaves []proofs.LeafNode ) (trees * proofs.DocumentTree , err error ) {
623
602
if dataLeaves == nil {
624
603
return nil , errors .NewTypedError (ErrCDTree , errors .New ("data tree is invalid" ))
625
604
}
626
- if cdLeaves == nil {
627
- return nil , errors .NewTypedError (ErrCDTree , errors .New ("cd tree is invalid" ))
628
- }
629
- // create the docDataTrees out of docData and coredoc trees
630
- tree , err = cd .DefaultTreeWithPrefix (BasicDataRootPrefix , CompactProperties (BasicDataRootPrefix ))
631
- if err != nil {
632
- return nil , err
633
- }
634
- err = tree .AddLeaves (append (dataLeaves , cdLeaves ... ))
635
- if err != nil {
636
- return nil , err
637
- }
638
- err = tree .Generate ()
605
+ cdLeaves , err := cd .coredocLeaves (docType )
639
606
if err != nil {
640
607
return nil , err
641
608
}
642
- return tree , nil
643
- }
644
609
645
- func (cd * CoreDocument ) zkDataTree (dataLeaves []proofs.LeafNode , cdLeaves []proofs.LeafNode ) (tree * proofs.DocumentTree , err error ) {
646
- if dataLeaves == nil {
647
- return nil , errors .NewTypedError (ErrCDTree , errors .New ("data tree is invalid" ))
648
- }
649
- if cdLeaves == nil {
650
- return nil , errors .NewTypedError (ErrCDTree , errors .New ("cd tree is invalid" ))
651
- }
652
610
// create the docDataTrees out of docData and coredoc trees
653
- tree , err = cd .DefaultZTreeWithPrefix ( ZKDataRootPrefix , CompactProperties (ZKDataRootPrefix ))
611
+ tree , err : = cd .DefaultTreeWithPrefix ( SigningTreePrefix , CompactProperties (SigningTreePrefix ))
654
612
if err != nil {
655
613
return nil , err
656
614
}
657
- err = tree .AddLeaves (append (dataLeaves , cdLeaves ... ))
658
- if err != nil {
659
- return nil , err
660
- }
661
- err = tree .Generate ()
662
- if err != nil {
663
- return nil , err
664
- }
665
- return tree , nil
666
- }
667
615
668
- // SigningDataTrees returns the merkle trees (basicData and zkData) + signingRoot Hash for the document data tree provided
669
- func (cd * CoreDocument ) SigningDataTrees (docType string , dataLeaves []proofs.LeafNode ) (trees []* proofs.DocumentTree , rootHash []byte , err error ) {
670
- if dataLeaves == nil {
671
- return nil , nil , errors .NewTypedError (ErrCDTree , errors .New ("data tree is invalid" ))
672
- }
673
- cdLeaves , err := cd .coredocLeaves (docType )
674
- if err != nil {
675
- return nil , nil , err
676
- }
677
- // create the docDataTrees out of docData and coredoc trees
678
- tree , err := cd .DefaultOrderedTreeWithPrefix (SigningTreePrefix , CompactProperties (SigningTreePrefix ))
679
- if err != nil {
680
- return nil , nil , err
681
- }
682
- basicTree , err := cd .basicDataTree (dataLeaves , cdLeaves )
616
+ signingDataLeaves := append (dataLeaves , cdLeaves ... )
617
+ err = tree .AddLeaves (signingDataLeaves )
683
618
if err != nil {
684
- return nil , nil , err
685
- }
686
- zkTree , err := cd .zkDataTree (dataLeaves , cdLeaves )
687
- if err != nil {
688
- return nil , nil , err
689
- }
690
-
691
- // The first leave added is the basic data tree root
692
- err = tree .AddLeaf (proofs.LeafNode {
693
- Hash : basicTree .RootHash (),
694
- Hashed : true ,
695
- Property : NewLeafProperty (fmt .Sprintf ("%s.%s" , SigningTreePrefix , BasicDataRootField ), append (CompactProperties (SigningTreePrefix ), CompactProperties (BasicDataRootField )... ))})
696
- if err != nil {
697
- return nil , nil , err
698
- }
699
-
700
- // The second leave added is the zkSnarks docData tree root
701
- err = tree .AddLeaf (proofs.LeafNode {
702
- Hash : zkTree .RootHash (),
703
- Hashed : true ,
704
- Property : NewLeafProperty (fmt .Sprintf ("%s.%s" , SigningTreePrefix , ZKDataRootField ), append (CompactProperties (SigningTreePrefix ), CompactProperties (ZKDataRootField )... ))})
705
- if err != nil {
706
- return nil , nil , err
619
+ return nil , err
707
620
}
708
621
709
622
err = tree .Generate ()
710
623
if err != nil {
711
- return nil , nil , err
624
+ return nil , err
712
625
}
713
626
714
- return [] * proofs. DocumentTree { basicTree , zkTree }, tree . RootHash () , nil
627
+ return tree , nil
715
628
}
716
629
717
630
func (cd * CoreDocument ) coredocRawTree (docType string ) (* proofs.DocumentTree , error ) {
@@ -732,7 +645,11 @@ func (cd *CoreDocument) coredocRawTree(docType string) (*proofs.DocumentTree, er
732
645
Value : []byte (docType ),
733
646
}
734
647
735
- err = documentTypeNode .HashNode (sha3 .NewLegacyKeccak256 (), true )
648
+ b2b , err := blake2b .New256 (nil )
649
+ if err != nil {
650
+ return nil , err
651
+ }
652
+ err = documentTypeNode .HashNode (b2b , true )
736
653
if err != nil {
737
654
return nil , err
738
655
}
@@ -880,12 +797,12 @@ func (cd *CoreDocument) CalculateDocumentRoot(docType string, dataLeaves []proof
880
797
881
798
// CalculateSigningRoot calculates the signing root of the core document.
882
799
func (cd * CoreDocument ) CalculateSigningRoot (docType string , dataLeaves []proofs.LeafNode ) ([]byte , error ) {
883
- _ , treeHash , err := cd .SigningDataTrees (docType , dataLeaves )
800
+ tree , err := cd .SigningDataTree (docType , dataLeaves )
884
801
if err != nil {
885
802
return nil , err
886
803
}
887
804
888
- return treeHash , nil
805
+ return tree . RootHash () , nil
889
806
}
890
807
891
808
// PackCoreDocument prepares the document into a core document.
0 commit comments