package netproto import ( "encoding/base64" ) type MainHeader struct { Version uint8 `json:"version"` Meta map[string]string `json:"meta"` ExtensionHeaders []ExtensionHeader `json:"extension_headers"` } const ( MainHeaderVersion1 = 1 ) const ( ExtensionHeaderType_Source uint8 = 1 /* https://git.send.nrw/sendnrw/sendnrwlib/issues/1 */ ExtensionHeaderType_Destination uint8 = 2 /* https://git.send.nrw/sendnrw/sendnrwlib/issues/1 */ ExtensionHeaderType_PayloadDefinition uint8 = 3 ExtensionHeaderType_Protocol uint8 = 4 ExtensionHeaderType_Control uint8 = 5 /*Syn/SynAck/Ack/AckFin/Fin*/ ExtensionHeaderType_Crypto uint8 = 6 /*Hinweis auf eine Verschlüsselung*/ ExtensionHeaderType_Validation uint8 = 7 /*Hinweis auf eine Validierung oder Checksum*/ ExtensionHeaderType_Routing uint8 = 8 /*Hinweis auf eine Routing-Information*/ ) const ( ControlFlag_Flow_SYN string = "SYN" ControlFlag_Flow_SYNACK string = "SYNACK" ControlFlag_Flow_ACK string = "ACK" ControlFlag_Flow_ACKFIN string = "ACKFIN" ControlFlag_Flow_FIN string = "FIN" ControlFlag_Encryption_INSECURE string = "INSECURE" ControlFlag_Encryption_STAYINSECURE string = "STAYINSECURE" ControlFlag_Encryption_SECURESTART string = "SECURESTART" ControlFlag_Encryption_SECUREACCEPT string = "SECUREACCEPT" ControlFlag_Encryption_SECUREFAIL string = "SECUREFAIL" ) func GenerateEHT1(IPv4, IPv6, Port string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_Source, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"ipv4": IPv4, "ipv6": IPv6, "port": Port}, } } func GenerateEHT2(IPv4, IPv6, Port string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_Destination, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"ipv4": IPv4, "ipv6": IPv6, "port": Port}, } } func GenerateEHT3(PayloadMime, PayloadLength, PayloadChecksum string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_PayloadDefinition, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"payloadmime": PayloadMime, "payloadlength": PayloadLength, "payloadchecksum": PayloadChecksum}, } } func GenerateEHT4(ProtocolName, ProtocolVersion, ProtocolOID string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_Protocol, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"protocolname": ProtocolName, "protocolversion": ProtocolVersion, "protocoloid": ProtocolOID}, } } func GenerateEHT5(ControlFlagFlow, ControlFlagEncryption string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_Control, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"controlflagflow": ControlFlagFlow, "controlflagencryption": ControlFlagEncryption}, } } func GenerateEHT6(PublicKey string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_Crypto, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"publickey": PublicKey}, } } func GenerateEHT7(Checksum string) ExtensionHeader { return ExtensionHeader{ Type: ExtensionHeaderType_Validation, Meta: map[string]string{"version": "1.0"}, Data: map[string]string{"checksum": Checksum}, } } func GenerateMainHeader(Version uint8, Flag string, ExH ...ExtensionHeader) MainHeader { return MainHeader{ Version: Version, Meta: map[string]string{"version": "1.0", "flag": Flag}, ExtensionHeaders: ExH, } } func GenerateNetworkProtocol(mainheader MainHeader, payload string) NetworkProtocol { return NetworkProtocol{ Header: mainheader, Payload: payload, } } func EncodeBase64(input string) (string, error) { return base64.StdEncoding.EncodeToString([]byte(input)), nil } func DecodeBase64(input string) (string, error) { d, err := base64.StdEncoding.DecodeString(input) if err != nil { return "", err } return string(d), nil } type ExtensionHeader struct { Type uint8 `json:"type"` Meta map[string]string `json:"meta"` Data map[string]string `json:"data"` } type NetworkProtocol struct { Header MainHeader `json:"header"` Payload string `json:"payload"` }