Documentation ¶
Overview ¶
* * (C) 2023 Ford Motor Company * (C) 2021 Geotab * * All files and artifacts in the repository at https://github.com/covesa/vissr * are licensed under the provisions of the license provided by the LICENSE file in this repository. * *
* * (C) 2021 Geotab * * All files and artifacts in the repository at https://github.com/covesa/vissr * are licensed under the provisions of the license provided by the LICENSE file in this repository. * *
Index ¶
- Constants
- Variables
- func AddKeyValue(message string, key string, value string) string
- func AddRoutingForwardRequest(reqMessage string, mgrId int, clientId int, transportMgrChan chan string)
- func AnalyzeValueType(value string) int
- func CertOptToInt(serverCertOpt string) int
- func CloseLogFile()
- func CompressMessage(message []byte) []byte
- func CompressPath(path string) *int32
- func CompressTS(ts string) int32
- func DecompressMessage(message []byte) []byte
- func DecompressPath(index int32) string
- func DecompressTs(tsCompressed int32) string
- func ExportKeyPair(privKey crypto.PrivateKey, privFileName string, pubFileName string) error
- func ExtractFromToken(token string, claim string) string
- func ExtractRootName(path string) string
- func ExtractSubscriptionId(jsonSubResponse string) string
- func FileExists(filename string) bool
- func FinalizeMessage(responseMap map[string]interface{}) string
- func GenEcdsaKey(curve elliptic.Curve, privKey **ecdsa.PrivateKey) error
- func GenRsaKey(size int, privKey **rsa.PrivateKey) error
- func GenerateHmac(input string, key string) string
- func GetMaxValidation(newValidation int, currentMaxValidation int) int
- func GetModelIP(ipModel int) string
- func GetRequestJsonToPb(vssGetReq string, compression Compression) *pb.GetRequestMessage
- func GetRequestPbToJson(pbGetReq *pb.GetRequestMessage, compression Compression) string
- func GetResponseJsonToPb(vssGetResp string, compression Compression) *pb.GetResponseMessage
- func GetResponsePbToJson(pbGetResp *pb.GetResponseMessage, compression Compression) string
- func GetRfcTime() string
- func GetServerIP() string
- func GetTLSConfig(host string, caCertFile string, certOpt tls.ClientAuthType, ...) *tls.Config
- func GetTimeInMilliSecs() string
- func GetUdsConn(path string, connectionName string) net.Conn
- func GetUdsPath(path string, connectionName string) string
- func ImportEcdsaKey(filename string, privKey **ecdsa.PrivateKey) error
- func ImportRsaKey(filename string, privKey **rsa.PrivateKey) error
- func ImportRsaPubKey(filename string, pubKey **rsa.PublicKey) error
- func InitCompression(vsspathlistFname string) bool
- func InitLog(filename string, logdir string, logFile bool, logLevel string)
- func JsonRecursiveMarshall(key string, value string, jplain *string)
- func JsonToProtobuf(jsonMessage string, compression Compression) []byte
- func MapRequest(request string, rMap *map[string]interface{}) int
- func NextQuoteMark(message []byte, offset int) int
- func PathToUrl(path string) string
- func PemDecodeECDSA(pemKey string, privKey **ecdsa.PrivateKey) error
- func PemDecodeRSA(pemKey string, privKey **rsa.PrivateKey) error
- func PemDecodeRSAPub(pemKey string, pubKey **rsa.PublicKey) error
- func PemEncodeECDSA(privKey *ecdsa.PrivateKey) (strPrivKey string, strPubKey string, err error)
- func PemEncodeRSA(privKey *rsa.PrivateKey) (strPrivKey string, strPubKey string, err error)
- func ProtobufToJson(serialisedMessage []byte, compression Compression) string
- func ReadTransportSecConfig()
- func RemoveInternalData(response string) (string, int)
- func ReturnWsClientIndex(index int)
- func SetErrorResponse(reqMap map[string]interface{}, errRespMap map[string]interface{}, ...)
- func SetRequestJsonToPb(vssSetReq string, compression Compression) *pb.SetRequestMessage
- func SetRequestPbToJson(pbSetReq *pb.SetRequestMessage, compression Compression) string
- func SetResponseJsonToPb(vssSetResp string, compression Compression) *pb.SetResponseMessage
- func SetResponsePbToJson(pbSetResp *pb.SetResponseMessage, compression Compression) string
- func SubscribeRequestJsonToPb(vssSubscribeReq string, compression Compression) *pb.SubscribeRequestMessage
- func SubscribeRequestPbToJson(pbSubscribeReq *pb.SubscribeRequestMessage, compression Compression) string
- func SubscribeStreamJsonToPb(vssSubscribeStream string, compression Compression) *pb.SubscribeStreamMessage
- func SubscribeStreamPbToJson(pbSubscribeResp *pb.SubscribeStreamMessage, compression Compression) string
- func TrimLogFile(logFile *os.File)
- func UnpackFilter(filter interface{}, fList *[]FilterObject)
- func UnsubscribeRequestJsonToPb(vssUnsubscribeReq string, compression Compression) *pb.UnsubscribeRequestMessage
- func UnsubscribeRequestPbToJson(pbUnsubscribeReq *pb.UnsubscribeRequestMessage, compression Compression) string
- func UnsubscribeResponseJsonToPb(vssUnsubscribeResp string, compression Compression) *pb.UnsubscribeResponseMessage
- func UnsubscribeResponsePbToJson(pbUnsubscribeResp *pb.UnsubscribeResponseMessage, compression Compression) string
- func UrlToPath(url string) string
- func VerifyTokenSignature(token string, key string) error
- type ClientHandler
- type ClientServer
- type CodeList
- type Compression
- type ErrorInformation
- type ExtendedJwt
- type FilterObject
- type HttpChannel
- type HttpServer
- type JsonWebKey
- type JsonWebToken
- func (token *JsonWebToken) AddClaim(key string, value string)
- func (token *JsonWebToken) AddHeader(key string, value string)
- func (token *JsonWebToken) AssymSign(privKey crypto.PrivateKey) error
- func (token JsonWebToken) CheckAssymSignature(key crypto.PublicKey) (err error)
- func (token JsonWebToken) CheckSignature(key interface{}) error
- func (token *JsonWebToken) DecodeFromFull(input string) error
- func (token *JsonWebToken) Encode()
- func (token JsonWebToken) GetFullToken() string
- func (token JsonWebToken) GetHeader() string
- func (token JsonWebToken) GetPayload() string
- func (token *JsonWebToken) SetHeader(algorithm string)
- func (token *JsonWebToken) SymmSign(key string)
- type PathList
- type PopToken
- func (popToken *PopToken) CheckAud(aud string) (bool, string)
- func (popToken PopToken) CheckExp() (bool, string)
- func (popToken PopToken) CheckIat(gap int, lifetime int) (bool, string)
- func (popToken *PopToken) CheckSignature() error
- func (popToken PopToken) CheckThumb(thumprint string) (bool, string)
- func (popToken *PopToken) GenerateToken(privKey crypto.PrivateKey) (token string, err error)
- func (popToken PopToken) GetPubEcdsa() (*ecdsa.PublicKey, error)
- func (popToken PopToken) GetPubRsa() (*rsa.PublicKey, error)
- func (popToken *PopToken) Initialize(headerMap, payloadMap map[string]string, pubKey crypto.PublicKey) error
- func (popToken *PopToken) Unmarshal(token string) error
- func (popToken *PopToken) Validate(thumbprint, aud string, gap, lifetime int) (valid bool, info string)
- type SecConfig
- type UdsReg
- type WsChannel
- type WsServer
Constants ¶
const ( NONE Compression = 0 PROPRIETARY = 1 PB_LEVEL1 = 2 // path has string format, e. g. "Vehicle.Acceleration.Longitudinal" PB_LEVEL2 = 3 // path is represented by integer index, retrieved from vsspathlist.json )
const CODELISTINDEXPATH = 4 // must be set to the list index of the "path" element
const CODELISTINDEXREQID = 1 // must be set to the list index of the "requestId" element
const CODELISTINDEXSUBID = 5 // must be set to the list index of the "subscriptionId" element
const CODELISTINDEXTS = 3 // must be set to the list index of the "ts" element
const CODELISTINDEXVALUE = 2 // must be set to the list index of the "value" element
const CODELISTKEYS = 10 // must be set to the number of keys in the list
const CODELISTKEYVALUES = 15 // must be set to the number of keys plus values in the list (excl value types)
const IpEnvVarName = "GEN2MODULEIP"
const IpModel = 0 // IpModel = [0,1,2] = [localhost,extIP,envVarIP]
Variables ¶
var ( // Trace *log.Logger Info *logrus.Logger Warning *logrus.Logger Error *logrus.Logger )
var ErrorInfoList [8]ErrorInformation = [8]ErrorInformation{
{"400", "bad_request", "The request is malformed."},
{"400", "invalid_data", "Data present in the request is invalid."},
{"401", "expired_token", "Access token has expired."},
{"401", "invalid_token", "Access token is invalid."},
{"401", "missing_token", "Access token is missing."},
{"403", "forbidden_request", "The server refuses to carry out the request."},
{"404", "unavailable_data", "The requested data was not found."},
{"503", "service_unavailable", "The server is temporarily unable to handle the request."}}
var HostIP string
var Logfile *os.File
const LOG_FILE = "servercore-log.txt"
var MuxServer = []*http.ServeMux{ http.NewServeMux(), http.NewServeMux(), http.NewServeMux(), }
var TrSecConfigPath string = "../transport_sec/" // relative path to the directory containing the transportSec.json file
var Upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
var WsClientIndexList = []bool{ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, }
len of WsClientIndexList must match the number of select cases in wsMgr
Functions ¶
func AnalyzeValueType ¶
func CertOptToInt ¶
func CloseLogFile ¶
func CloseLogFile()
func CompressMessage ¶
func CompressPath ¶
func CompressTS ¶
func DecompressMessage ¶
func DecompressPath ¶
func DecompressTs ¶
func ExportKeyPair ¶
func ExportKeyPair(privKey crypto.PrivateKey, privFileName string, pubFileName string) error
Export KeyPair to files named as given (ECDSA and RSA supported, pointers to privKey must be given)
func ExtractFromToken ¶
func ExtractRootName ¶
func ExtractSubscriptionId ¶
func FileExists ¶
func FinalizeMessage ¶
func GenEcdsaKey ¶
func GenEcdsaKey(curve elliptic.Curve, privKey **ecdsa.PrivateKey) error
Generates ECDSA private Key using given curve
func GenRsaKey ¶
func GenRsaKey(size int, privKey **rsa.PrivateKey) error
********* KEY GENERATION *********** Generates RSA private key of given size
func GenerateHmac ¶
func GetMaxValidation ¶
func GetModelIP ¶
func GetRequestJsonToPb ¶
func GetRequestJsonToPb(vssGetReq string, compression Compression) *pb.GetRequestMessage
func GetRequestPbToJson ¶
func GetRequestPbToJson(pbGetReq *pb.GetRequestMessage, compression Compression) string
func GetResponseJsonToPb ¶
func GetResponseJsonToPb(vssGetResp string, compression Compression) *pb.GetResponseMessage
func GetResponsePbToJson ¶
func GetResponsePbToJson(pbGetResp *pb.GetResponseMessage, compression Compression) string
func GetRfcTime ¶
func GetRfcTime() string
func GetServerIP ¶
func GetServerIP() string
func GetTLSConfig ¶
func GetTLSConfig(host string, caCertFile string, certOpt tls.ClientAuthType, serverCert *tls.Certificate) *tls.Config
Obtains a tls.Config struct, giving support to https.listenandservetls
func GetTimeInMilliSecs ¶
func GetTimeInMilliSecs() string
func GetUdsPath ¶
func ImportEcdsaKey ¶
func ImportEcdsaKey(filename string, privKey **ecdsa.PrivateKey) error
Gets ecdsa private key from pem file
func ImportRsaKey ¶
func ImportRsaKey(filename string, privKey **rsa.PrivateKey) error
********* PEM KEY IMPORT / EXPORT *********** Gets rsa private key from pem file
func ImportRsaPubKey ¶
Gets rsa public key from pem file
func InitCompression ¶
must be called before calling the methods CompressMessage, DecompressMessage, CompressTS, DecompressTs, CompressPath, DecompressPath
func JsonRecursiveMarshall ¶
Gets Json string (or nothing) and adds received key and value, if it doesnt receive a value or key, it does nothing
func JsonToProtobuf ¶
func JsonToProtobuf(jsonMessage string, compression Compression) []byte
func MapRequest ¶
func NextQuoteMark ¶
func PemDecodeECDSA ¶
func PemDecodeECDSA(pemKey string, privKey **ecdsa.PrivateKey) error
Gets ECDSA key in pem format and decodes it into ecdsa.PrivateKey
func PemDecodeRSA ¶
func PemDecodeRSA(pemKey string, privKey **rsa.PrivateKey) error
********* KEY ENCODING / DECODING *********** Gets rsa key in pem format and decodes it into rsa.privatekey
func PemDecodeRSAPub ¶
Gets rsa pub key in pem format and decodes it into rsa.publickey
func PemEncodeECDSA ¶
func PemEncodeECDSA(privKey *ecdsa.PrivateKey) (strPrivKey string, strPubKey string, err error)
Returns ECDSA Keys as string in PEM format
func PemEncodeRSA ¶
func PemEncodeRSA(privKey *rsa.PrivateKey) (strPrivKey string, strPubKey string, err error)
Returns RSA Keys as string in PEM format
func ProtobufToJson ¶
func ProtobufToJson(serialisedMessage []byte, compression Compression) string
func RemoveInternalData ¶
func ReturnWsClientIndex ¶
func ReturnWsClientIndex(index int)
func SetErrorResponse ¶
func SetErrorResponse(reqMap map[string]interface{}, errRespMap map[string]interface{}, errorListIndex int, altErrorMessage string)
func SetErrorResponse(reqMap map[string]interface{}, errRespMap map[string]interface{}, number string, reason string, message string) {
func SetRequestJsonToPb ¶
func SetRequestJsonToPb(vssSetReq string, compression Compression) *pb.SetRequestMessage
func SetRequestPbToJson ¶
func SetRequestPbToJson(pbSetReq *pb.SetRequestMessage, compression Compression) string
func SetResponseJsonToPb ¶
func SetResponseJsonToPb(vssSetResp string, compression Compression) *pb.SetResponseMessage
func SetResponsePbToJson ¶
func SetResponsePbToJson(pbSetResp *pb.SetResponseMessage, compression Compression) string
func SubscribeRequestJsonToPb ¶
func SubscribeRequestJsonToPb(vssSubscribeReq string, compression Compression) *pb.SubscribeRequestMessage
func SubscribeRequestPbToJson ¶
func SubscribeRequestPbToJson(pbSubscribeReq *pb.SubscribeRequestMessage, compression Compression) string
func SubscribeStreamJsonToPb ¶
func SubscribeStreamJsonToPb(vssSubscribeStream string, compression Compression) *pb.SubscribeStreamMessage
func SubscribeStreamPbToJson ¶
func SubscribeStreamPbToJson(pbSubscribeResp *pb.SubscribeStreamMessage, compression Compression) string
func TrimLogFile ¶
* * The log file is trimmed to 20% of its size when exceeding 10MB. *
func UnpackFilter ¶
func UnpackFilter(filter interface{}, fList *[]FilterObject)
func UnsubscribeRequestJsonToPb ¶
func UnsubscribeRequestJsonToPb(vssUnsubscribeReq string, compression Compression) *pb.UnsubscribeRequestMessage
func UnsubscribeRequestPbToJson ¶
func UnsubscribeRequestPbToJson(pbUnsubscribeReq *pb.UnsubscribeRequestMessage, compression Compression) string
func UnsubscribeResponseJsonToPb ¶
func UnsubscribeResponseJsonToPb(vssUnsubscribeResp string, compression Compression) *pb.UnsubscribeResponseMessage
func UnsubscribeResponsePbToJson ¶
func UnsubscribeResponsePbToJson(pbUnsubscribeResp *pb.UnsubscribeResponseMessage, compression Compression) string
func VerifyTokenSignature ¶
Types ¶
type ClientHandler ¶
type ClientHandler interface {
// contains filtered or unexported methods
}
*********** Client response handlers *******************************************************************************
type ClientServer ¶
type Compression ¶
type Compression int
type ErrorInformation ¶
type ExtendedJwt ¶
type ExtendedJwt struct { Token JsonWebToken HeaderClaims map[string]string PayloadClaims map[string]string }
********* EXTENDED JSON WEB TOKEN *********** ********* Extends the JsonWebToken type, including a map with the claims in header ********* and a map with the claims in payload
func (*ExtendedJwt) DecodeFromFull ¶
func (ext *ExtendedJwt) DecodeFromFull(input string) error
type FilterObject ¶
type HttpChannel ¶
type HttpChannel struct { }
type HttpServer ¶
type HttpServer struct { }
func (HttpServer) InitClientServer ¶
func (server HttpServer) InitClientServer(muxServer *http.ServeMux, httpClientChan []chan string)
Launches the HTTP Manager
type JsonWebKey ¶
type JsonWebKey struct { Thumb string `json:"-"` Type string `json:"kty"` Use string `json:"use,omitempty"` PubMod string `json:"n,omitempty"` // RSA PubExp string `json:"e,omitempty"` // RSA Curve string `json:"crv,omitempty"` //ECDSA Xcoord string `json:"x,omitempty"` //ECDSA Ycoord string `json:"y,omitempty"` //ECDSA }
********* JSON WEB KEY ENCODING *********** ********* Contained in PoP, follows RFC7517 standard. Support for RSA and ECDSA keys
func (*JsonWebKey) GenThumbprint ¶
func (jkey *JsonWebKey) GenThumbprint() string
Generates thumbprint of the JWK
func (*JsonWebKey) Initialize ¶
func (jkey *JsonWebKey) Initialize(pubKey crypto.PublicKey, use string) error
Initializes json web key from public key
func (*JsonWebKey) Marshal ¶
func (jkey *JsonWebKey) Marshal() string
From JsonWebKey struct, returns marshalled text
func (*JsonWebKey) Unmarshall ¶
func (jkey *JsonWebKey) Unmarshall(rcv string) error
Gets the received JWK and unmarshalls it, returns error if fails to unmarshall
type JsonWebToken ¶
type JsonWebToken struct { Header string Payload string EncodedHeader string EncodedPayload string EncodedSignature string }
********* JSON WEB TOKEN *********** ********* Basic JWT including Header, Payload and encoded parts. ********* Methods for decoding and signature check avaliable
func (*JsonWebToken) AddClaim ¶
func (token *JsonWebToken) AddClaim(key string, value string)
Adds a claim to the payload
func (*JsonWebToken) AddHeader ¶
func (token *JsonWebToken) AddHeader(key string, value string)
Adds a claim to the header
func (*JsonWebToken) AssymSign ¶
func (token *JsonWebToken) AssymSign(privKey crypto.PrivateKey) error
Signs the token using an assymetric key
func (JsonWebToken) CheckAssymSignature ¶
func (token JsonWebToken) CheckAssymSignature(key crypto.PublicKey) (err error)
Checks the assymetric signature of the token
func (JsonWebToken) CheckSignature ¶
func (token JsonWebToken) CheckSignature(key interface{}) error
Checks if the token is signed correctly. In case of symm sign, key as string must be passed. In case of assym, a crypto.PublicKey must be passed
func (*JsonWebToken) DecodeFromFull ¶
func (token *JsonWebToken) DecodeFromFull(input string) error
From a signed jwt received, gets header and payload
func (JsonWebToken) GetFullToken ¶
func (token JsonWebToken) GetFullToken() string
Returns the full token
func (JsonWebToken) GetHeader ¶
func (token JsonWebToken) GetHeader() string
Returns the header of the token
func (JsonWebToken) GetPayload ¶
func (token JsonWebToken) GetPayload() string
Returns the payload of the token
func (*JsonWebToken) SetHeader ¶
func (token *JsonWebToken) SetHeader(algorithm string)
Sets the algorithm used
func (*JsonWebToken) SymmSign ¶
func (token *JsonWebToken) SymmSign(key string)
Signs the token using a symmetric key
type PopToken ¶
type PopToken struct { HeaderClaims map[string]string // TYP, ALG, JWK PayloadClaims map[string]string // IAT, JTI Jwk JsonWebKey Jwt JsonWebToken }
********* POP TOKEN *********** ********* POP Token is used by the client to attest its possession of a private key ********* More info in the README of the repo
func (PopToken) CheckIat ¶
Check iats. Gap is the possible error between clocks. lifetime is the maximum time after is creation that the token can be used
func (*PopToken) CheckSignature ¶
Checks signature, checks that alg used to sign is the same as in key (to avoid exploits)
func (PopToken) CheckThumb ¶
Validates keys: same alg, same thumprint...
func (*PopToken) GenerateToken ¶
func (popToken *PopToken) GenerateToken(privKey crypto.PrivateKey) (token string, err error)
Generates popToken using a PrivateKey, can be used even if popToken is not initialized (claims are auto-fulfilled)
func (PopToken) GetPubEcdsa ¶
Obtains ECDSA public ket in the PoP token. Returns nil + error if fails
func (PopToken) GetPubRsa ¶
Obtains Rsa public key included in the PoP token. Returns nil + error if fails
func (*PopToken) Initialize ¶
func (popToken *PopToken) Initialize(headerMap, payloadMap map[string]string, pubKey crypto.PublicKey) error
Initializes popToken from claims and public key. Make sure the private key used to sign is the same used to initialize
type SecConfig ¶
type SecConfig struct { TransportSec string `json:"transportSec"` // "yes" or "no" HttpSecPort string `json:"httpSecPort"` // HTTPS port number WsSecPort string `json:"wsSecPort"` // WSS port number MqttSecPort string `json:"mqttSecPort"` // MQTTS port number GrpcSecPort string `json:"grpcSecPort"` // MQTTS port number AgtsSecPort string `json:"agtsSecPort"` // AGTS port number AtsSecPort string `json:"atsSecPort"` // ATS port number CaSecPath string `json:"caSecPath"` // relative path from the directory containing the transportSec.json file ServerSecPath string `json:"serverSecPath"` // relative path from the directory containing the transportSec.json file ServerCertOpt string `json:"serverCertOpt"` // one of "NoClientCert"/"ClientCertNoVerification"/"ClientCertVerification" ClientSecPath string `json:"clientSecPath"` // relative path from the directory containing the transportSec.json file }
var SecureConfiguration SecConfig // name change to caps allowing to export outside utils