Compare commits

..

16 Commits

Author SHA1 Message Date
Jeromy
a22bf1e2bf gx publish 0.7.11 2017-02-05 23:52:16 -08:00
Jeromy
7bcaf9264a do cid json handling in this package 2017-02-05 23:52:06 -08:00
Jeromy
c1db98f9ae gx publish 0.7.10 2017-02-02 19:05:37 -08:00
Jeromy
40c5ff1bfe gx publish 0.7.9 2017-02-02 18:53:37 -08:00
Jeromy
ebda3c73ae actually update multihash package 2017-02-02 18:53:32 -08:00
Jeromy
03f8d08574 gx publish 0.7.8 2017-02-02 18:39:03 -08:00
Jeromy
4ff5ee2b99 Update go-multibase, multihash. add test for hex 2017-02-02 18:39:00 -08:00
Jeromy Johnson
2b1b4a8339 Merge pull request #13 from ipfs/feat/gx-update-tree-hnwcen
gx update-tree go-cid go-libp2p-interface-pnet
2016-11-25 10:30:18 -08:00
Lars Gierth
ca0a568b21 gx publish 0.7.7 2016-11-25 18:47:39 +01:00
Jeromy Johnson
896454b8a7 Merge pull request #12 from ipfs/fix/build-failure
fix build failures i introduced
2016-11-23 10:14:26 -08:00
Jeromy
f623f824db fix build failures i introduced 2016-11-23 10:04:56 -08:00
Jeromy
15876e12dc update readme 2016-11-22 11:56:12 -08:00
Jeromy
18f61fe7b9 add readme and default files 2016-11-21 17:16:16 -08:00
Jeromy Johnson
f68586ac44 Merge pull request #9 from ipfs/fix/raw-id
fix raw codec number to be 0x55
2016-11-21 08:47:31 -08:00
Jeromy
1260e85a2d fix raw codec number to be 0x55 2016-11-21 08:39:15 -08:00
Jakub Sztandera
a0eff8c9d1 Merge pull request #8 from ipfs/feat/v0.7.6
MIT license, and go-cid v0.7.6
2016-11-18 01:07:25 +01:00
7 changed files with 192 additions and 18 deletions

View File

@@ -1 +1 @@
0.7.6: QmX4hxL9LDFVpYtNfBEBgVSynRGsooVf4F8nrvJiCZuxqq
0.7.11: QmV5gPoRsjN1Gid3LMdNZTyfCtP2DsvqEbMAmz82RmmiGk

24
.travis.yml Normal file
View File

@@ -0,0 +1,24 @@
os:
- linux
- osx
language: go
go:
- 1.7
install: true
before_install:
- make deps
script:
- go vet
- $GOPATH/bin/goveralls -service="travis-ci"
cache:
directories:
- $GOPATH/src/gx
notifications:
email: false

16
Makefile Normal file
View File

@@ -0,0 +1,16 @@
all: deps
gx:
go get github.com/whyrusleeping/gx
go get github.com/whyrusleeping/gx-go
covertools:
go get github.com/mattn/goveralls
go get golang.org/x/tools/cmd/cover
deps: gx covertools
gx --verbose install --global
gx-go rewrite
publish:
gx-go rewrite --undo

94
README.md Normal file
View File

@@ -0,0 +1,94 @@
go-cid
==================
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io)
[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/)
[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)
[![Coverage Status](https://coveralls.io/repos/github/ipfs/go-cid/badge.svg?branch=master)](https://coveralls.io/github/ipfs/go-cid?branch=master)
[![Travis CI](https://travis-ci.org/ipfs/go-cid.svg?branch=master)](https://travis-ci.org/ipfs/go-cid)
> A package to handle content IDs in go.
This is an implementation in go of the [CID spec](https://github.com/ipld/cid).
It is used in go-ipfs and related packages to refer to a typed hunk of data.
## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [API](#api)
- [Contribute](#contribute)
- [License](#license)
## Install
```sh
make deps
```
## Examples
To use CIDs, import it in your code like:
```go
import "github.com/ipfs/go-cid"
```
Then, depending on how you want to use it, something like one of the following examples should work:
### Parsing string input from users
```go
// Create a cid from a marshaled string
c, err := cid.Decode("zdvgqEMYmNeH5fKciougvQcfzMcNjF3Z1tPouJ8C7pc3pe63k")
if err != nil {...}
fmt.Println("Got CID: ", c)
```
### Creating a CID from scratch
```go
// Create a cid manually by specifying the 'prefix' parameters
pref := cid.Prefix{
Version: 1,
Codec: cid.Raw,
MhType: mh.SHA2_256,
MhLength: -1, // default length
}
// And then feed it some data
c, err := pref.Sum([]byte("Hello World!"))
if err != nil {...}
fmt.Println("Created CID: ", c)
```
### Check if two CIDs match
```go
// To test if two cid's are equivalent, be sure to use the 'Equals' method:
if c1.Equals(c2) {
fmt.Println("These two refer to the same exact data!")
}
```
### Check if some data matches a given CID
```go
// To check if some data matches a given cid,
// Get your CIDs prefix, and use that to sum the data in question:
other, err := c.Prefix().Sum(mydata)
if err != nil {...}
if !c.Equals(other) {
fmt.Println("This data is different.")
}
```
## Contribute
PRs are welcome!
Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.
## License
MIT © Jeromy Johnson

33
cid.go
View File

@@ -3,6 +3,7 @@ package cid
import (
"bytes"
"encoding/binary"
"encoding/json"
"errors"
"fmt"
"strings"
@@ -14,10 +15,10 @@ import (
const UnsupportedVersionString = "<unsupported cid version>"
const (
Protobuf = 0x70
CBOR = 0x71
Raw = 0x72
JSON = 0x73
Raw = 0x55
DagProtobuf = 0x70
DagCBOR = 0x71
EthereumBlock = 0x90
EthereumTx = 0x91
@@ -30,7 +31,7 @@ const (
func NewCidV0(h mh.Multihash) *Cid {
return &Cid{
version: 0,
codec: Protobuf,
codec: DagProtobuf,
hash: h,
}
}
@@ -114,7 +115,7 @@ func Cast(data []byte) (*Cid, error) {
}
return &Cid{
codec: Protobuf,
codec: DagProtobuf,
version: 0,
hash: h,
}, nil
@@ -209,7 +210,19 @@ func (c *Cid) UnmarshalJSON(b []byte) error {
if len(b) < 2 {
return fmt.Errorf("invalid cid json blob")
}
out, err := Decode(string(b[1 : len(b)-1]))
obj := struct {
CidTarget string `json:"/"`
}{}
err := json.Unmarshal(b, &obj)
if err != nil {
return err
}
if obj.CidTarget == "" {
return fmt.Errorf("cid was incorrectly formatted")
}
out, err := Decode(obj.CidTarget)
if err != nil {
return err
}
@@ -221,7 +234,7 @@ func (c *Cid) UnmarshalJSON(b []byte) error {
}
func (c *Cid) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf("\"%s\"", c.String())), nil
return []byte(fmt.Sprintf("{\"/\":\"%s\"}", c.String())), nil
}
func (c *Cid) KeyString() string {
@@ -248,7 +261,7 @@ func (c *Cid) Prefix() Prefix {
type Prefix struct {
Version uint64
Codec uint64
MhType int
MhType uint64
MhLength int
}
@@ -302,7 +315,7 @@ func PrefixFromBytes(buf []byte) (Prefix, error) {
return Prefix{
Version: vers,
Codec: codec,
MhType: int(mhtype),
MhType: mhtype,
MhLength: int(mhlen),
}, nil
}

View File

@@ -2,6 +2,7 @@ package cid
import (
"bytes"
"encoding/json"
"fmt"
"math/rand"
"strings"
@@ -93,7 +94,7 @@ func TestV0ErrorCases(t *testing.T) {
func TestPrefixRoundtrip(t *testing.T) {
data := []byte("this is some test content")
hash, _ := mh.Sum(data, mh.SHA2_256, -1)
c := NewCidV1(CBOR, hash)
c := NewCidV1(DagCBOR, hash)
pref := c.Prefix()
@@ -122,7 +123,7 @@ func TestPrefixRoundtrip(t *testing.T) {
func Test16BytesVarint(t *testing.T) {
data := []byte("this is some test content")
hash, _ := mh.Sum(data, mh.SHA2_256, -1)
c := NewCidV1(CBOR, hash)
c := NewCidV1(DagCBOR, hash)
c.codec = 1 << 63
_ = c.Bytes()
@@ -188,3 +189,29 @@ func TestParse(t *testing.T) {
}
}
}
func TestHexDecode(t *testing.T) {
hexcid := "f015512209d8453505bdc6f269678e16b3e56c2a2948a41f2c792617cc9611ed363c95b63"
c, err := Decode(hexcid)
if err != nil {
t.Fatal(err)
}
if c.String() != "zb2rhhFAEMepUBbGyP1k8tGfz7BSciKXP6GHuUeUsJBaK6cqG" {
t.Fatal("hash value failed to round trip decoding from hex")
}
}
func TestFromJson(t *testing.T) {
cval := "zb2rhhFAEMepUBbGyP1k8tGfz7BSciKXP6GHuUeUsJBaK6cqG"
jsoncid := []byte(`{"/":"` + cval + `"}`)
var c Cid
err := json.Unmarshal(jsoncid, &c)
if err != nil {
t.Fatal(err)
}
if c.String() != cval {
t.Fatal("json parsing failed")
}
}

View File

@@ -9,15 +9,15 @@
"gxDependencies": [
{
"author": "whyrusleeping",
"hash": "QmYDds3421prZgqKbLpEK7T9Aa2eVdQ7o3YarX1LVLdP2J",
"hash": "QmbZ6Cee2uHjG7hf19qLHppgKDRtaG4CVtMzdmK9VCVqLu",
"name": "go-multihash",
"version": "1.0.0"
"version": "1.0.2"
},
{
"author": "whyrusleeping",
"hash": "QmUq3H9YpcPphbRj6ct6rBgBE377A8wANP8zPMRqe1WYbf",
"hash": "QmcxkxTVuURV2Ptse8TvkqH5BQDwV62X1x19JqqvbBzwUM",
"name": "go-multibase",
"version": "0.2.1"
"version": "0.2.3"
}
],
"gxVersion": "0.8.0",
@@ -25,6 +25,6 @@
"license": "MIT",
"name": "go-cid",
"releaseCmd": "git commit -a -m \"gx publish $VERSION\"",
"version": "0.7.6"
"version": "0.7.11"
}