Documentation ¶
Index ¶
- Constants
- Variables
- func GenerateKey(rng io.Reader) (PublicKey, PrivateKey, error)
- func HasPrefix(x []byte, prefix []byte, nbits int) bool
- func IsErrClosed(err error) bool
- func IsErrPublicKeyNotFound(err error) bool
- func IsErrUnreachable(err error) bool
- func MarshalPublicKey(out []byte, pubKey PublicKey) []byte
- func NewPacketConn(n Node) net.PacketConn
- func Receive(ctx context.Context, n Node, msg *Message) error
- func Sign(out []byte, privateKey PrivateKey, purpose string, msg []byte) []byte
- func Verify(publicKey PublicKey, purpose string, msg, sig []byte) bool
- type Addr
- type Ed25519PrivateKey
- type Ed25519PublicKey
- type ErrAddrUnreachable
- type ID
- type Message
- type Node
- type NodeConfig
- type NodeOption
- type PrivateKey
- type PublicKey
- type RSAPrivateKey
- type RSAPublicKey
- type ReceiveFunc
- type Service
Constants ¶
const ( // AddrSize is the size of an address in bytes AddrSize = 32 // Base64Alphabet is used when encoding IDs as base64 strings. // It is a URL and filepath safe encoding, which maintains ordering. Base64Alphabet = "-0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "_" + "abcdefghijklmnopqrstuvwxyz" )
const ( // MaxPublicKeySize is the maximum size of a serialized PublicKey in bytes MaxPublicKeySize = 1 << 15 // MaxSignatureSize is the maximum size of a signature in bytes MaxSignatureSize = 1 << 15 )
const ( // MinMTU is the minimum MTU a network can provide to any address. // Applications should be designed to operate correctly if they can only send messages up to this size. MinMTU = 1 << 15 // MaxMTU is the size of largest message that a network will ever receive from any address. // Applications should be prepared to receieve this much data at a time or they may encounter io.ErrShortBuffer MaxMTU = 1 << 16 )
Variables ¶
var ( ErrPublicKeyNotFound = p2p.ErrPublicKeyNotFound ErrNoAddrWithPrefix = errors.New("no address with prefix") ErrClosed = net.ErrClosed )
Functions ¶
func GenerateKey ¶ added in v0.0.7
func GenerateKey(rng io.Reader) (PublicKey, PrivateKey, error)
GenerateKey generates a new key pair using entropy read from rng.
The algorithm used currently is Ed25519, but this may change at any time, and callers *must not* depend on this. If a specific public key algorithm is required use the standard library to generate a key and convert it using PrivateKeyFromBuiltIn.
func IsErrClosed ¶
func IsErrPublicKeyNotFound ¶ added in v0.0.3
func IsErrUnreachable ¶ added in v0.0.3
func MarshalPublicKey ¶
MarshalPublicKey marshals pubKey and the resulting bytes to out. All keys returned by ParsePublic key will successfully marshal, so a panic indicates a bug.
func NewPacketConn ¶
func NewPacketConn(n Node) net.PacketConn
NewPacketConn wraps a node with the net.PacketConn interface
Types ¶
type Addr ¶
Addr is an address in an INET256 Network. It uniquely identifies a Node.
func AddrFromBytes ¶
AddrFromBytes creates a new address by reading up to 32 bytes from x Note that these bytes are not interpretted as a public key, they are interpretted as the raw address. To derive an address from a PublicKey use NewAddr
func ParseAddrBase64 ¶ added in v0.0.5
ParseAddrBase64 attempts to parse a base64 encoded INET256 address from data
func (Addr) Base64String ¶ added in v0.0.5
Base64String returns the base64 encoding of the Addr as a string
func (Addr) MarshalText ¶
func (*Addr) UnmarshalText ¶
type Ed25519PrivateKey ¶ added in v0.0.7
type Ed25519PrivateKey [ed25519.PrivateKeySize]byte
func (*Ed25519PrivateKey) BuiltIn ¶ added in v0.0.7
func (pk *Ed25519PrivateKey) BuiltIn() crypto.Signer
func (*Ed25519PrivateKey) Public ¶ added in v0.0.7
func (pk *Ed25519PrivateKey) Public() PublicKey
type Ed25519PublicKey ¶ added in v0.0.7
type Ed25519PublicKey [ed25519.PublicKeySize]byte
Ed25519PublicKey implements PublicKey
func (*Ed25519PublicKey) BuiltIn ¶ added in v0.0.7
func (pk *Ed25519PublicKey) BuiltIn() crypto.PublicKey
BuiltIn implements PublicKey.BuiltIn
type ErrAddrUnreachable ¶
type ErrAddrUnreachable struct {
Addr Addr
}
func (ErrAddrUnreachable) Error ¶
func (e ErrAddrUnreachable) Error() string
type Message ¶
Message is the essential information carried by Tell and Receive provided as a struct for use in queues or other APIs
type Node ¶
type Node interface { // Tell sends a message containing data to the node at addr. // The message will be delivered at most once. Send(ctx context.Context, addr Addr, data []byte) error // Receive calls fn with a message sent to this node. // The message fields, and payload must not be accessed outside fn. Receive(ctx context.Context, fn ReceiveFunc) error // MTU finds the maximum message size that can be sent to addr. // If the context expires, a reasonable default (normally a significant underestimate) will be returned. MTU(ctx context.Context, addr Addr) int // LookupPublicKey attempts to find the public key corresponding to addr. // If it can't find it, ErrPublicKeyNotFound is returned. LookupPublicKey(ctx context.Context, addr Addr) (PublicKey, error) // FindAddr looks for an address with nbits leading bits in common with prefix. FindAddr(ctx context.Context, prefix []byte, nbits int) (Addr, error) // LocalAddr returns this Node's address LocalAddr() Addr // PublicKey returns this Node's public key PublicKey() PublicKey // Close indicates no more messages should be sent or received from this node // and releases any resources allocated for this node. Close() error }
Node is a single host in an INET256 network. Nodes send and receive messages to and from other nodes in the network. Nodes are usually created and managed by a Service. Nodes have an single ID or address corresponding to their public key.
This interface is compatible with the INET256 specification.
type NodeConfig ¶ added in v0.0.3
type NodeConfig struct { }
NodeConfig is an aggregate of applied NodeOptions Not all implementations will support all the options.
func CollectNodeOptions ¶ added in v0.0.3
func CollectNodeOptions(opts []NodeOption) (cfg NodeConfig)
CollectNodeOptions applyies each option in opts to a NodeOptions and returns the result.
type NodeOption ¶ added in v0.0.3
type NodeOption = func(*NodeConfig)
NodeOption is the type of functions which configure a Node.
type PrivateKey ¶
type PrivateKey interface { // BuiltIn returns a crypto.Signer from the standard library. BuiltIn() crypto.Signer // Public returns the corresponding public key for this PrivateKey Public() PublicKey // contains filtered or unexported methods }
func PrivateKeyFromBuiltIn ¶ added in v0.0.7
func PrivateKeyFromBuiltIn(x crypto.Signer) (PrivateKey, error)
PrivateKeyFromBuiltIn
type PublicKey ¶
type PublicKey interface { // BuiltIn returns a crypto.PublicKey from the standard library BuiltIn() crypto.PublicKey // contains filtered or unexported methods }
PublicKey is a signing key used to prove identity within INET256.
func ParsePublicKey ¶
ParsePublicKey attempts to parse a PublicKey from data
type RSAPrivateKey ¶ added in v0.0.7
type RSAPrivateKey rsa.PrivateKey
func (*RSAPrivateKey) BuiltIn ¶ added in v0.0.7
func (pk *RSAPrivateKey) BuiltIn() crypto.Signer
func (*RSAPrivateKey) Public ¶ added in v0.0.7
func (pk *RSAPrivateKey) Public() PublicKey
type RSAPublicKey ¶ added in v0.0.7
RSAPublicKey implements PublicKey
func (*RSAPublicKey) BuiltIn ¶ added in v0.0.7
func (pk *RSAPublicKey) BuiltIn() crypto.PublicKey
BuiltIn implements PublicKey.BuiltIn
type ReceiveFunc ¶
type ReceiveFunc = func(Message)
ReceiveFunc is passed as a callback to Node.Receive
type Service ¶
type Service interface { Open(ctx context.Context, privKey PrivateKey, opts ...NodeOption) (Node, error) Drop(ctx context.Context, privKey PrivateKey) error }
Service is the top level INET256 object. It manages a set of nodes which can be created and deleted.
This interface is compatible with the INET256 specification.