secure_channel

package
v0.0.0-...-3192b2a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2022 License: MIT Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TagTBEDataSenderNOC    = 1
	TagTBEDataSenderICAC   = 2
	TagTBEDataSignature    = 3
	TagTBEDataResumptionID = 4

	ProtocolName = "SecureChannel"
)

Variables

View Source
var (
	KDFSR2Info = []byte{0x53, 0x69, 0x67, 0x6d, 0x61, 0x32}
	KDFSR3Info = []byte{0x53, 0x69, 0x67, 0x6d, 0x61, 0x33}
)
View Source
var Id = protocols.New(protocolId, nil)

Functions

func GenerateCASEDestinationId

func GenerateCASEDestinationId(candidateIpkSpan, initiatorRandom []byte, pubKey *crypto.P256PublicKey, fabricId lib.FabricId, nodeId lib.NodeId) (data []byte, err error)

func NewPairingSessionImpl

func NewPairingSessionImpl() pairingSession

Types

type CASEServer

type CASEServer struct {
	// contains filtered or unexported fields
}

CASEServer IMPLEMENT(UnsolicitedMessageHandler SessionEstablishmentDelegate ExchangeDelegate)

func NewCASEServer

func NewCASEServer() *CASEServer

func (*CASEServer) GetMessageDispatch

func (s *CASEServer) GetMessageDispatch() messageing.ExchangeMessageDispatch

func (*CASEServer) InitCASEHandshake

func (s *CASEServer) InitCASEHandshake(ec *messageing.ExchangeContext) error

func (*CASEServer) ListenForSessionEstablishment

func (s *CASEServer) ListenForSessionEstablishment(
	mgr *messageing.ExchangeManager,
	sessionManager *transport.SessionManager,
	fabrics *credentials.FabricTable,
	storage lib.SessionResumptionStorage,
	policy credentials.CertificateValidityPolicy,
	responderGroupDataProvider *credentials.GroupDataProvider,
) error

func (*CASEServer) OnExchangeClosing

func (s *CASEServer) OnExchangeClosing(ec *messageing.ExchangeContext)

func (*CASEServer) OnExchangeCreationFailed

func (s *CASEServer) OnExchangeCreationFailed(delegate messageing.ExchangeDelegate)

func (*CASEServer) OnMessageReceived

func (s *CASEServer) OnMessageReceived(ec *messageing.ExchangeContext, header *raw.PayloadHeader, buf *system.PacketBufferHandle) error

func (*CASEServer) OnResponseTimeout

func (s *CASEServer) OnResponseTimeout(ec *messageing.ExchangeContext)

func (*CASEServer) OnSessionEstablished

func (s *CASEServer) OnSessionEstablished()

func (*CASEServer) OnSessionEstablishmentError

func (s *CASEServer) OnSessionEstablishmentError(err error)

func (*CASEServer) OnSessionEstablishmentStarted

func (s *CASEServer) OnSessionEstablishmentStarted()

func (*CASEServer) OnUnsolicitedMessageReceived

func (s *CASEServer) OnUnsolicitedMessageReceived(header *raw.PayloadHeader) (messageing.ExchangeDelegate, error)

func (*CASEServer) PrepareForSessionEstablishment

func (s *CASEServer) PrepareForSessionEstablishment(previouslyEstablishedPeer *lib.ScopedNodeId)

func (*CASEServer) Session

func (s *CASEServer) Session() *CASESession

type CASESession

type CASESession struct {
	// contains filtered or unexported fields
}

CASESession UnsolicitedMessageHandler, ExchangeDelegate, FabricTable::Delegate, pairingSessionBase

func NewCASESession

func NewCASESession() *CASESession

func (*CASESession) Clear

func (s *CASESession) Clear()

func (*CASESession) ConstructSaltSigma2

func (s *CASESession) ConstructSaltSigma2(rand []byte, publicKey []byte, ipk []byte) (saltSpan []byte, err error)

func (*CASESession) ConstructTBSData

func (s *CASESession) ConstructTBSData(nocCert []byte, ICACert []byte, pubKey []byte, receiverPubKey []byte) (enc []byte, err error)

func (*CASESession) CopySecureSession

func (s *CASESession) CopySecureSession() *transport.SessionHandle

func (*CASESession) DeriveSecureSession

func (s *CASESession) DeriveSecureSession(ctx *transport.CryptoContext) error

func (*CASESession) FabricIndex

func (s *CASESession) FabricIndex() lib.FabricIndex

func (*CASESession) FabricWillBeRemoved

func (s *CASESession) FabricWillBeRemoved(table credentials.FabricTable, index lib.FabricIndex)

func (*CASESession) FindLocalNodeFromDestinationId

func (s *CASESession) FindLocalNodeFromDestinationId(destinationId []byte, initiatorRandom []byte) error

func (*CASESession) GetMessageDispatch

func (s *CASESession) GetMessageDispatch() messageing.ExchangeMessageDispatch

func (*CASESession) GetNewSessionHandlingPolicy

func (s *CASESession) GetNewSessionHandlingPolicy() transport.NewSessionHandlingPolicy

func (*CASESession) GetPeer

func (s *CASESession) GetPeer() lib.ScopedNodeId

func (*CASESession) HandleSigma1

func (s *CASESession) HandleSigma1(msg *system.PacketBufferHandle) error

func (*CASESession) HandleSigma1AndSendSigma2

func (s *CASESession) HandleSigma1AndSendSigma2(buf *system.PacketBufferHandle) error

func (*CASESession) Init

func (s *CASESession) Init(
	manger transport.SessionManagerBase,
	policy credentials.CertificateValidityPolicy,
	delegate *CASEServer,
	previouslyEstablishedPeer *lib.ScopedNodeId,
) error

func (*CASESession) IsSessionEstablishmentInProgress

func (s *CASESession) IsSessionEstablishmentInProgress() bool

func (*CASESession) IsValidPeerSessionId

func (s *CASESession) IsValidPeerSessionId() bool

func (*CASESession) LocalScopedNodeId

func (s *CASESession) LocalScopedNodeId() lib.ScopedNodeId

func (*CASESession) LocalSessionId

func (s *CASESession) LocalSessionId() optional.Option[uint16]

func (*CASESession) NotifySessionEstablishmentError

func (s *CASESession) NotifySessionEstablishmentError(err error)

func (*CASESession) OnExchangeClosing

func (s *CASESession) OnExchangeClosing(ec *messageing.ExchangeContext)

func (*CASESession) OnExchangeCreationFailed

func (s *CASESession) OnExchangeCreationFailed(delegate messageing.ExchangeDelegate)

func (*CASESession) OnFabricCommitted

func (s *CASESession) OnFabricCommitted(table credentials.FabricTable, index lib.FabricIndex)

func (*CASESession) OnFabricRemoved

func (s *CASESession) OnFabricRemoved(table credentials.FabricTable, index lib.FabricIndex)

func (*CASESession) OnFabricUpdated

func (s *CASESession) OnFabricUpdated(table credentials.FabricTable, index lib.FabricIndex)

func (*CASESession) OnMessageReceived

func (s *CASESession) OnMessageReceived(ec *messageing.ExchangeContext, payloadHeader *raw.PayloadHeader, msg *system.PacketBufferHandle) error

func (*CASESession) OnResponseTimeout

func (s *CASESession) OnResponseTimeout(ec *messageing.ExchangeContext)

func (*CASESession) OnSessionEstablished

func (s *CASESession) OnSessionEstablished()

func (*CASESession) OnSessionReleased

func (s *CASESession) OnSessionReleased()

func (*CASESession) OnSuccessStatusReport

func (s *CASESession) OnSuccessStatusReport()

func (*CASESession) OnUnsolicitedMessageReceived

func (s *CASESession) OnUnsolicitedMessageReceived(header *raw.PayloadHeader) (messageing.ExchangeDelegate, error)

func (*CASESession) Peer

func (s *CASESession) Peer() lib.ScopedNodeId

func (*CASESession) PeerCATs

func (s *CASESession) PeerCATs() lib.CATValues

func (*CASESession) PrepareForSessionEstablishment

func (s *CASESession) PrepareForSessionEstablishment(
	sessionManger transport.SessionManagerBase,
	fabrics *credentials.FabricTable,
	storage SessionResumptionStorage,
	policy credentials.CertificateValidityPolicy,
	delegate *CASEServer,
	previouslyEstablishedPeer *lib.ScopedNodeId,
	config *messageing.ReliableMessageProtocolConfig,
) error

func (*CASESession) SendSigma2

func (s *CASESession) SendSigma2() error

func (*CASESession) SetGroupDataProvider

func (s *CASESession) SetGroupDataProvider(provider *credentials.GroupDataProvider)

func (*CASESession) ValidateReceivedMessage

func (s *CASESession) ValidateReceivedMessage(ec *messageing.ExchangeContext, header *raw.PayloadHeader, msg *system.PacketBufferHandle) error

type ErrorType

type ErrorType string
var ErrorNoMemory ErrorType = "ErrorNoMemory"
var ErrorTimeOut ErrorType = "Time Out"

func (ErrorType) Error

func (e ErrorType) Error() string

type MessageCounterManager

type MessageCounterManager struct {
}

func NewMessageCounterManager

func NewMessageCounterManager() *MessageCounterManager

func (*MessageCounterManager) Init

func (*MessageCounterManager) OnExchangeClosing

func (m *MessageCounterManager) OnExchangeClosing(ec *messageing.ExchangeContext)

func (*MessageCounterManager) OnExchangeCreationFailed

func (m *MessageCounterManager) OnExchangeCreationFailed(delegate messageing.ExchangeDelegate)

func (*MessageCounterManager) OnMessageReceived

func (m *MessageCounterManager) OnMessageReceived(context *messageing.ExchangeContext, header *raw.PayloadHeader, data *system.PacketBufferHandle) error

func (*MessageCounterManager) OnResponseTimeout

func (m *MessageCounterManager) OnResponseTimeout(ec *messageing.ExchangeContext)

func (*MessageCounterManager) OnUnsolicitedMessageReceived

func (m *MessageCounterManager) OnUnsolicitedMessageReceived(header *raw.PayloadHeader) (messageing.ExchangeDelegate, error)

func (*MessageCounterManager) QueueReceivedMessageAndStartSync

func (m *MessageCounterManager) QueueReceivedMessageAndStartSync(header *raw.PacketHeader,
	handle *transport.SessionHandle,
	state *session.Secure,
	peerAdders netip.AddrPort,
	buf *system.PacketBufferHandle) error

func (*MessageCounterManager) StartSync

func (m *MessageCounterManager) StartSync(handle *transport.SessionHandle, session *session.Secure) error

type MsgType

type MsgType uint8
const (
	MsgCounterSyncReq MsgType = 0x00
	MsgCounterSyncRsp MsgType = 0x01
)

Message Counter Synchronization Protocol Message Types

const (
	PBKDFParamRequest  MsgType = 0x20
	PBKDFParamResponse MsgType = 0x21
	PASEPake1          MsgType = 0x22
	PASEPake2          MsgType = 0x23
	PASEPake3          MsgType = 0x24
)

Password-based session establishment Message Types

const (
	CASESigma1       MsgType = 0x30
	CASESigma2       MsgType = 0x31
	CASESigma3       MsgType = 0x32
	CASESigma2Resume MsgType = 0x33
	CASEStatusReport MsgType = 0x40
)

Certificate-based session establishment Message Types

const (
	StandaloneAck MsgType = 0x10
)

StandaloneAck Reliable Messaging Protocol Message Types

func (MsgType) MessageType

func (m MsgType) MessageType() uint8

func (MsgType) ProtocolId

func (m MsgType) ProtocolId() protocols.Id

func (MsgType) String

func (m MsgType) String() string

type PASESession

type PASESession struct {
	// contains filtered or unexported fields
}

func NewPASESession

func NewPASESession() *PASESession

func (*PASESession) CopySecureSession

func (s *PASESession) CopySecureSession() *transport.SessionHandle

func (*PASESession) DeriveSecureSession

func (s *PASESession) DeriveSecureSession(ctx *transport.CryptoContext) error

func (*PASESession) GetMessageDispatch

func (s *PASESession) GetMessageDispatch() messageing.ExchangeMessageDispatch

func (*PASESession) GetNewSessionHandlingPolicy

func (s *PASESession) GetNewSessionHandlingPolicy() transport.NewSessionHandlingPolicy

func (*PASESession) HandleMsg1AndSendMsg2

func (s *PASESession) HandleMsg1AndSendMsg2(w io.Reader) (err error)

func (*PASESession) HandleMsg2AndSendMsg3

func (s *PASESession) HandleMsg2AndSendMsg3(w io.Reader) (err error)

func (*PASESession) HandleMsg3

func (s *PASESession) HandleMsg3(w io.Reader) (err error)

func (*PASESession) HandlePBKDFParamRequest

func (s *PASESession) HandlePBKDFParamRequest(w io.Reader) (err error)

func (*PASESession) HandlePBKDFParamResponse

func (s *PASESession) HandlePBKDFParamResponse(msg *system.PacketBufferHandle) (err error)

func (*PASESession) Init

func (s *PASESession) Init(
	sessionManager *transport.SessionManager,
	setupCode uint32,
	delegate SessionEstablishmentDelegate,
) (err error)

func (*PASESession) IsSessionEstablishmentInProgress

func (s *PASESession) IsSessionEstablishmentInProgress() bool

func (*PASESession) IsValidPeerSessionId

func (s *PASESession) IsValidPeerSessionId() bool

func (*PASESession) LocalScopedNodeId

func (s *PASESession) LocalScopedNodeId() lib.ScopedNodeId

func (*PASESession) LocalSessionId

func (s *PASESession) LocalSessionId() optional.Option[uint16]

func (*PASESession) NotifySessionEstablishmentError

func (s *PASESession) NotifySessionEstablishmentError(err error)

func (*PASESession) OnExchangeClosing

func (s *PASESession) OnExchangeClosing(ec *messageing.ExchangeContext)

func (*PASESession) OnExchangeCreationFailed

func (s *PASESession) OnExchangeCreationFailed(delegate messageing.ExchangeDelegate)

func (*PASESession) OnMessageReceived

func (s *PASESession) OnMessageReceived(context *messageing.ExchangeContext, header *raw.PayloadHeader, data *system.PacketBufferHandle) (err error)

func (*PASESession) OnResponseTimeout

func (s *PASESession) OnResponseTimeout(ec *messageing.ExchangeContext)

func (*PASESession) OnSessionReleased

func (s *PASESession) OnSessionReleased()

func (*PASESession) OnSuccessStatusReport

func (s *PASESession) OnSuccessStatusReport()

func (*PASESession) OnUnsolicitedMessageReceived

func (s *PASESession) OnUnsolicitedMessageReceived(header *raw.PayloadHeader) (messageing.ExchangeDelegate, error)

func (*PASESession) Pair

func (s *PASESession) Pair(
	sessionManager *transport.SessionManager,
	peerSetUpPINCode uint32,
	mrpLocalConfig *messageing.ReliableMessageProtocolConfig,
	exchangeCtxt *messageing.ExchangeContext,
	delegate SessionEstablishmentDelegate) (err error)

func (*PASESession) Peer

func (s *PASESession) Peer() lib.ScopedNodeId

func (*PASESession) PeerCATs

func (s *PASESession) PeerCATs() lib.CATValues

func (*PASESession) SendMsg1

func (s *PASESession) SendMsg1() (err error)

func (*PASESession) SendPBKDFParamRequest

func (s *PASESession) SendPBKDFParamRequest() (err error)

func (*PASESession) SendPBKDFParamResponse

func (s *PASESession) SendPBKDFParamResponse(initiatorRandom []byte, initiatorHasPBKDFParams bool) (err error)

func (*PASESession) WaitForPairing

func (s *PASESession) WaitForPairing(sessionManager *transport.SessionManager,
	verifier *crypto.Spake2pVerifier,
	pbkdf2IterCount uint32,
	salt []byte,
	mrpLocalConfig *messageing.ReliableMessageProtocolConfig,
	delegate SessionEstablishmentDelegate) (err error)

type ResumptionIdStorage

type ResumptionIdStorage []byte

type SessionEstablishmentDelegate

type SessionEstablishmentDelegate interface {
	OnSessionEstablishmentError(err error)
	OnSessionEstablishmentStarted()
	OnSessionEstablished(session *transport.SessionHandle)
}

SessionEstablishmentDelegate : CASEServer implementation

type SessionEstablishmentExchangeDispatch

type SessionEstablishmentExchangeDispatch struct {
}

func SessionEstablishmentExchangeDispatchInstance

func SessionEstablishmentExchangeDispatchInstance() *SessionEstablishmentExchangeDispatch

func (SessionEstablishmentExchangeDispatch) IsEncryptionRequired

func (s SessionEstablishmentExchangeDispatch) IsEncryptionRequired() bool

func (SessionEstablishmentExchangeDispatch) IsReliableTransmissionAllowed

func (s SessionEstablishmentExchangeDispatch) IsReliableTransmissionAllowed() bool

func (SessionEstablishmentExchangeDispatch) MessagePermitted

func (s SessionEstablishmentExchangeDispatch) MessagePermitted(id protocols.Id, typ uint8) bool

func (SessionEstablishmentExchangeDispatch) SendMessage

func (s SessionEstablishmentExchangeDispatch) SendMessage(
	mgr *transport.SessionManager,
	handle *transport.SessionHandle,
	exchangeId uint16,
	isInitiator bool,
	rmc *messageing.ReliableMessageContext,
	isReliableTransmission bool,
	protocol protocols.Id,
	msgType uint8,
	message []byte) error

type SessionResumptionStorage

type SessionResumptionStorage interface {
}

type Sigma1

type Sigma1 struct {
	// contains filtered or unexported fields
}

func ParseSigma1

func ParseSigma1(tlvDecoder *tlv.Decoder, sessionResumptionRequested bool) (sigma1 Sigma1, err error)

type StatusReport

type StatusReport struct {
	ProtocolCode uint16
	ProtocolId   protocols.Id
	GeneralCode  generalStatusCode
	ProtocolData []byte
}

func (*StatusReport) Decode

func (s *StatusReport) Decode(buf *bytes.Buffer) (err error)

func (*StatusReport) Encode

func (s *StatusReport) Encode(buf io.Writer) (err error)

type UnsolicitedStatusHandlerImpl

type UnsolicitedStatusHandlerImpl struct {
	// contains filtered or unexported fields
}

func NewUnsolicitedStatusHandler

func NewUnsolicitedStatusHandler() *UnsolicitedStatusHandlerImpl

func (UnsolicitedStatusHandlerImpl) GetMessageDispatch

func (UnsolicitedStatusHandlerImpl) Init

func (UnsolicitedStatusHandlerImpl) OnExchangeClosing

func (h UnsolicitedStatusHandlerImpl) OnExchangeClosing(ec *messageing.ExchangeContext)

func (UnsolicitedStatusHandlerImpl) OnExchangeCreationFailed

func (h UnsolicitedStatusHandlerImpl) OnExchangeCreationFailed(delegate messageing.ExchangeDelegate)

func (UnsolicitedStatusHandlerImpl) OnMessageReceived

func (UnsolicitedStatusHandlerImpl) OnResponseTimeout

func (h UnsolicitedStatusHandlerImpl) OnResponseTimeout(ec *messageing.ExchangeContext)

func (UnsolicitedStatusHandlerImpl) OnUnsolicitedMessageReceived

func (h UnsolicitedStatusHandlerImpl) OnUnsolicitedMessageReceived(header *raw.PayloadHeader) (messageing.ExchangeDelegate, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL