Documentation ¶
Index ¶
- Constants
- func ExpTimeToDuration(expTime uint8) time.Duration
- func MAC(h hash.Hash, info *InfoField, hf *HopField) []byte
- func MACInput(segID uint16, timestamp uint32, expTime uint8, consIngress, consEgress uint16) []byte
- func RegisterPath(pathMeta Metadata)
- func VerifyMAC(h hash.Hash, info *InfoField, hf *HopField) error
- type HopField
- type InfoField
- type Metadata
- type Path
- type Type
Constants ¶
const ( // HopLen is the size of a HopField in bytes. HopLen = 12 // MacLen is the size of the MAC of each HopField. MacLen = 6 )
const InfoLen = 8
InfoLen is the size of an InfoField in bytes.
const MaxTTL = 24 * 60 * 60 // One day in seconds
MaxTTL is the maximum age of a HopField in seconds.
Variables ¶
This section is empty.
Functions ¶
func ExpTimeToDuration ¶
ExpTimeToDuration calculates the relative expiration time in seconds. Note that for a 0 value ExpTime, the minimal duration is expTimeUnit.
func MAC ¶
MAC calculates the HopField MAC according to https://scion.docs.anapaya.net/en/latest/protocols/scion-header.html#hop-field-mac-computation this method does not modify info or hf.
func MACInput ¶
MACInput returns the MAC input data block with the following layout:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 | SegID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 | ExpTime | ConsIngress | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ConsEgress | 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
func RegisterPath ¶
func RegisterPath(pathMeta Metadata)
RegisterPath registers a new SCION path type globally. The PathType passed in must be unique, or a runtime panic will occur.
Types ¶
type HopField ¶
type HopField struct { // IngressRouterAlert flag. If the IngressRouterAlert is set, the ingress router (in // construction direction) will process the L4 payload in the packet. IngressRouterAlert bool // EgressRouterAlert flag. If the EgressRouterAlert is set, the egress router (in // construction direction) will process the L4 payload in the packet. EgressRouterAlert bool // Exptime is the expiry time of a HopField. The field is 1-byte long, thus there are 256 // different values available to express an expiration time. The expiration time expressed by // the value of this field is relative, and an absolute expiration time in seconds is computed // in combination with the timestamp field (from the corresponding info field) as follows // // Timestamp + (1 + ExpTime) * (24*60*60)/256 ExpTime uint8 // ConsIngress is the ingress interface ID in construction direction. ConsIngress uint16 // ConsEgress is the egress interface ID in construction direction. ConsEgress uint16 // Mac is the 6-byte Message Authentication Code to authenticate the HopField. Mac []byte }
HopField is the HopField used in the SCION and OneHop path types.
The Hop Field has the following format:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |r r r r r r I E| ExpTime | ConsIngress | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ConsEgress | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | MAC | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
func (*HopField) DecodeFromBytes ¶
DecodeFromBytes populates the fields from a raw buffer. The buffer must be of length >= path.HopLen
func (*HopField) SerializeTo ¶
SerializeTo writes the fields into the provided buffer. The buffer must be of length >= path.HopLen
type InfoField ¶
type InfoField struct { // Peer is the peering flag. If set to true, then the forwarding path is built as a peering // path, which requires special processing on the dataplane. Peer bool // ConsDir is the construction direction flag. If set to true then the hop fields are arranged // in the direction they have been constructed during beaconing. ConsDir bool // SegID is a updatable field that is required for the MAC-chaining mechanism. SegID uint16 // Timestamp created by the initiator of the corresponding beacon. The timestamp is expressed in // Unix time, and is encoded as an unsigned integer within 4 bytes with 1-second time // granularity. This timestamp enables validation of the hop field by verification of the // expiration time and MAC. Timestamp uint32 }
InfoField is the InfoField used in the SCION and OneHop path types.
InfoField has the following format:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |r r r r r r P C| RSV | SegID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
func (*InfoField) DecodeFromBytes ¶
DecodeFromBytes populates the fields from a raw buffer. The buffer must be of length >= path.InfoLen
func (*InfoField) SerializeTo ¶
SerializeTo writes the fields into the provided buffer. The buffer must be of length >= path.InfoLen
func (*InfoField) UpdateSegID ¶
UpdateSegID updates the SegID field by XORing the SegID field with the 2 first bytes of the MAC. It is the beta calculation according to https://scion.docs.anapaya.net/en/latest/protocols/scion-header.html#hop-field-mac-computation
type Metadata ¶
type Metadata struct { // Type is a unique value for the path. Type Type // Desc is the description/name of the path. Desc string // New is a path constructor function. New func() Path }
Metadata defines a new SCION path type, used for dynamic SICON path type registration.
type Path ¶
type Path interface { // SerializeTo serializes the path into the provided buffer. SerializeTo(b []byte) error // DecodesFromBytes decodes the path from the provided buffer. DecodeFromBytes(b []byte) error // Reverse reverses a path such that it can be used in the reversed direction. // // XXX(shitz): This method should possibly be moved to a higher-level path manipulation package. Reverse() (Path, error) // Len returns the length of a path in bytes. Len() int // Type returns the type of a path. Type() Type }
Path is the path contained in the SCION header.