diff options
Diffstat (limited to 'satp/security-association.go')
-rw-r--r-- | satp/security-association.go | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/satp/security-association.go b/satp/security-association.go index 28c7851..48d6c5c 100644 --- a/satp/security-association.go +++ b/satp/security-association.go @@ -36,54 +36,48 @@ import ( ) type SecurityAssociation struct { - mtx *sync.RWMutex - kd KeyDerivation - endpoints []*net.UDPAddr - nextSeq uint32 - seqWins map[uint16]*SequenceWindow -} - -func (sa *SecurityAssociation) SetKeyDerivation(kd KeyDerivation) { - sa.mtx.Lock() - defer sa.mtx.Unlock() - sa.kd = kd + kd KeyDerivation + endpoints []*net.UDPAddr + nextSeqNr uint32 + initialSeqNrInbound uint32 + seqWins *sync.Map } func (sa *SecurityAssociation) KeyGenerate(dir Direction, usage KeyUsage, sequenceNumber uint32, out []byte) error { - sa.mtx.RLock() - defer sa.mtx.RUnlock() return sa.kd.Generate(dir, usage, sequenceNumber, out) } +func (sa *SecurityAssociation) EndpointUpdate(idx uint, ep *net.UDPAddr) { + // TODO: implement this +} + func (sa *SecurityAssociation) EndpointCompareAndUpdate(idx uint, ep *net.UDPAddr) { - sa.mtx.RLock() - defer sa.mtx.RUnlock() // TODO: implement this } func (sa *SecurityAssociation) EndpointsAndSequenceNumber() (seqNum uint32, eps []*net.UDPAddr) { - sa.mtx.RLock() - defer sa.mtx.RUnlock() // TODO: implement this return 0, nil } func (sa *SecurityAssociation) SquenceNumberCheck(senderID uint16, sequenceNumber uint32) bool { - sa.mtx.RLock() - defer sa.mtx.RUnlock() // TODO: implement this return false } func (sa *SecurityAssociation) SequenceNumberCheckAndSet(senderID uint16, sequenceNumber uint32) bool { - sa.mtx.RLock() - defer sa.mtx.RUnlock() // TODO: implement this return false } -func NewSecurityAssociation() (sa *SecurityAssociation) { - sa = &SecurityAssociation{mtx: &sync.RWMutex{}} - sa.seqWins = make(map[uint16]*SequenceWindow) +func NewSecurityAssociation(kd KeyDerivation, numEndpoints uint, initialSeqNrOutbound, initialSeqNrInbound uint32) (sa *SecurityAssociation) { + sa = &SecurityAssociation{kd: kd} + sa.endpoints = make([]*net.UDPAddr, numEndpoints) + for i := range sa.endpoints { + sa.endpoints[i] = &net.UDPAddr{} + } + sa.nextSeqNr = initialSeqNrOutbound + sa.initialSeqNrInbound = initialSeqNrInbound + sa.seqWins = &sync.Map{} return } |