@cryptotaxi247 / kubo / commits / e23dbd291

Add support for using an alternative hash function with raw nodes.

License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>

Kevin Atkinson committed May 13, 2017 at 00:35 UTC e23dbd291be024b369c43709357d85b51c14ddd4
3 files changed +36 -5
importer/helpers/dagbuilder.go
+15 -4
@@ -165,10 +165,21 @@ func (db *DagBuilderHelper) GetNextDataNode() (*UnixfsNode, error) {
165 }
166
167 if db.rawLeaves {
168 - return &UnixfsNode{
169 - rawnode: dag.NewRawNode(data),
170 - raw: true,
171 - }, nil
168 + if db.prefix == nil {
169 + return &UnixfsNode{
170 + rawnode: dag.NewRawNode(data),
171 + raw: true,
172 + }, nil
173 + } else {
174 + rawnode, err := dag.NewRawNodeWPrefix(data, *db.prefix)
175 + if err != nil {
176 + return nil, err
177 + }
178 + return &UnixfsNode{
179 + rawnode: rawnode,
180 + raw: true,
181 + }, nil
182 + }
183 } else {
184 blk := db.NewUnixfsBlock()
185 blk.SetData(data)
merkledag/merkledag.go
+1 -1
@@ -116,7 +116,7 @@ func decodeBlock(b blocks.Block) (node.Node, error) {
116 decnd.Prefix = b.Cid().Prefix()
117 return decnd, nil
118 case cid.Raw:
119 - return NewRawNode(b.RawData()), nil
119 + return NewRawNodeWPrefix(b.RawData(), b.Cid().Prefix())
120 case cid.DagCBOR:
121 return ipldcbor.Decode(b.RawData())
122 default:
merkledag/raw.go
+20
@@ -12,6 +12,8 @@ type RawNode struct {
12 blocks.Block
13 }
14
15 +// NewRawNode creates a RawNode using the default sha2-256 hash
16 +// funcition.
17 func NewRawNode(data []byte) *RawNode {
18 h := u.Hash(data)
19 c := cid.NewCidV1(cid.Raw, h)
@@ -20,6 +22,24 @@ func NewRawNode(data []byte) *RawNode {
22 return &RawNode{blk}
23 }
24
25 +// NewRawNodeWPrefix creates a RawNode with the hash function
26 +// specified in prefix.
27 +func NewRawNodeWPrefix(data []byte, prefix cid.Prefix) (*RawNode, error) {
28 + prefix.Codec = cid.Raw
29 + if prefix.Version == 0 {
30 + prefix.Version = 1
31 + }
32 + c, err := prefix.Sum(data)
33 + if err != nil {
34 + return nil, err
35 + }
36 + blk, err := blocks.NewBlockWithCid(data, c)
37 + if err != nil {
38 + return nil, err
39 + }
40 + return &RawNode{blk}, nil
41 +}
42 +
43 func (rn *RawNode) Links() []*node.Link {
44 return nil
45 }