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
}