Documentation ¶
Index ¶
- Constants
- Variables
- func Compare(a, b *pb.IpnsEntry) (int, error)
- func Create(sk ic.PrivKey, val []byte, seq uint64, eol time.Time, ttl time.Duration) (*pb.IpnsEntry, error)
- func EmbedPublicKey(pk ic.PubKey, entry *pb.IpnsEntry) error
- func ExtractPublicKey(pid peer.ID, entry *pb.IpnsEntry) (ic.PubKey, error)
- func GetEOL(entry *pb.IpnsEntry) (time.Time, error)
- func RecordKey(pid peer.ID) string
- func UnmarshalIpnsEntry(data []byte) (*pb.IpnsEntry, error)
- func Validate(pk ic.PubKey, entry *pb.IpnsEntry) error
- func ValidateWithPeerID(pid peer.ID, entry *pb.IpnsEntry) error
- type Validator
Examples ¶
Constants ¶
const MaxRecordSize int = 10 << (10 * 1)
10 KiB limit defined in https://github.com/ipfs/specs/pull/319
Variables ¶
var ErrBadRecord = errors.New("record could not be unmarshalled")
ErrBadRecord should be returned when an ipns record cannot be unmarshalled
var ErrExpiredRecord = errors.New("expired record")
ErrExpiredRecord should be returned when an ipns record is invalid due to being too old
var ErrInvalidPath = errors.New("record path invalid")
ErrInvalidPath should be returned when an ipns record path is not in a valid format
var ErrKeyFormat = errors.New("record key could not be parsed into peer ID")
ErrKeyFormat should be returned when an ipns record key is incorrectly formatted (not a peer ID)
var ErrPublicKeyMismatch = errors.New("public key in record did not match expected pubkey")
ErrPublicKeyMismatch should be returned when the public key embedded in the record doesn't match the expected public key.
var ErrPublicKeyNotFound = errors.New("public key not found in peer store")
ErrPublicKeyNotFound should be returned when the public key corresponding to the ipns record path cannot be retrieved from the peer store
var ErrRecordSize = errors.New("record exceeds allowed size limit")
ErrRecordSize should be returned when an ipns record is invalid due to being too big
var ErrSignature = errors.New("record signature verification failed")
ErrSignature should be returned when an ipns record fails signature verification
var ErrUnrecognizedValidity = errors.New("unrecognized validity type")
ErrUnrecognizedValidity is returned when an IpnsRecord has an unknown validity type.
Functions ¶
func Compare ¶
Compare compares two IPNS entries. It returns:
* -1 if a is older than b * 0 if a and b cannot be ordered (this doesn't mean that they are equal) * +1 if a is newer than b
It returns an error when either a or b are malformed.
NOTE: It *does not* validate the records, the caller is responsible for calling `Validate` first.
NOTE: If a and b cannot be ordered by this function, you can determine their order by comparing their serialized byte representations (using `bytes.Compare`). You must do this if you are implementing a libp2p record validator (or you can just use the one provided for you by this package).
func Create ¶
func Create(sk ic.PrivKey, val []byte, seq uint64, eol time.Time, ttl time.Duration) (*pb.IpnsEntry, error)
Create creates a new IPNS entry and signs it with the given private key.
This function does not embed the public key. If you want to do that, use `EmbedPublicKey`.
Example ¶
// Generate a private key to sign the IPNS record with. Most of the time, // however, you'll want to retrieve an already-existing key from IPFS using // go-ipfs/core/coreapi CoreAPI.KeyAPI() interface. privateKey, _, err := ci.GenerateKeyPair(ci.RSA, 2048) if err != nil { panic(err) } // Create an IPNS record that expires in one hour and points to the IPFS address // /ipfs/Qme1knMqwt1hKZbc1BmQFmnm9f36nyQGwXxPGVpVJ9rMK5 ipnsRecord, err := Create(privateKey, []byte("/ipfs/Qme1knMqwt1hKZbc1BmQFmnm9f36nyQGwXxPGVpVJ9rMK5"), 0, time.Now().Add(1*time.Hour), 0) if err != nil { panic(err) } fmt.Println(ipnsRecord)
Output:
func EmbedPublicKey ¶
EmbedPublicKey embeds the given public key in the given ipns entry. While not strictly required, some nodes (e.g., DHT servers) may reject IPNS entries that don't embed their public keys as they may not be able to validate them efficiently.
func ExtractPublicKey ¶
ExtractPublicKey extracts a public key matching `pid` from the IPNS record, if possible.
This function returns (nil, nil) when no public key can be extracted and nothing is malformed.
func GetEOL ¶
GetEOL returns the EOL of this IPNS entry
This function returns ErrUnrecognizedValidity if the validity type of the record isn't EOL. Otherwise, it returns an error if it can't parse the EOL.
func UnmarshalIpnsEntry ¶
UnmarshalIpnsEntry unmarshalls an IPNS entry from a slice of bytes.
Types ¶
type Validator ¶
type Validator struct { // KeyBook, if non-nil, will be used to lookup keys for validating IPNS // records. KeyBook pstore.KeyBook }
Validator is an IPNS record validator that satisfies the libp2p record validator interface.