1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-07-01 10:49:24 +08:00

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

License: MIT
Signed-off-by: Kevin Atkinson <k@kevina.org>
This commit is contained in:
Kevin Atkinson
2017-05-13 00:35:22 -04:00
parent a6e96e6c99
commit e23dbd291b
3 changed files with 36 additions and 5 deletions

View File

@ -165,10 +165,21 @@ func (db *DagBuilderHelper) GetNextDataNode() (*UnixfsNode, error) {
} }
if db.rawLeaves { if db.rawLeaves {
return &UnixfsNode{ if db.prefix == nil {
rawnode: dag.NewRawNode(data), return &UnixfsNode{
raw: true, rawnode: dag.NewRawNode(data),
}, nil raw: true,
}, nil
} else {
rawnode, err := dag.NewRawNodeWPrefix(data, *db.prefix)
if err != nil {
return nil, err
}
return &UnixfsNode{
rawnode: rawnode,
raw: true,
}, nil
}
} else { } else {
blk := db.NewUnixfsBlock() blk := db.NewUnixfsBlock()
blk.SetData(data) blk.SetData(data)

View File

@ -116,7 +116,7 @@ func decodeBlock(b blocks.Block) (node.Node, error) {
decnd.Prefix = b.Cid().Prefix() decnd.Prefix = b.Cid().Prefix()
return decnd, nil return decnd, nil
case cid.Raw: case cid.Raw:
return NewRawNode(b.RawData()), nil return NewRawNodeWPrefix(b.RawData(), b.Cid().Prefix())
case cid.DagCBOR: case cid.DagCBOR:
return ipldcbor.Decode(b.RawData()) return ipldcbor.Decode(b.RawData())
default: default:

View File

@ -12,6 +12,8 @@ type RawNode struct {
blocks.Block blocks.Block
} }
// NewRawNode creates a RawNode using the default sha2-256 hash
// funcition.
func NewRawNode(data []byte) *RawNode { func NewRawNode(data []byte) *RawNode {
h := u.Hash(data) h := u.Hash(data)
c := cid.NewCidV1(cid.Raw, h) c := cid.NewCidV1(cid.Raw, h)
@ -20,6 +22,24 @@ func NewRawNode(data []byte) *RawNode {
return &RawNode{blk} return &RawNode{blk}
} }
// NewRawNodeWPrefix creates a RawNode with the hash function
// specified in prefix.
func NewRawNodeWPrefix(data []byte, prefix cid.Prefix) (*RawNode, error) {
prefix.Codec = cid.Raw
if prefix.Version == 0 {
prefix.Version = 1
}
c, err := prefix.Sum(data)
if err != nil {
return nil, err
}
blk, err := blocks.NewBlockWithCid(data, c)
if err != nil {
return nil, err
}
return &RawNode{blk}, nil
}
func (rn *RawNode) Links() []*node.Link { func (rn *RawNode) Links() []*node.Link {
return nil return nil
} }