summaryrefslogtreecommitdiff
path: root/satp/security-association.go
diff options
context:
space:
mode:
Diffstat (limited to 'satp/security-association.go')
-rw-r--r--satp/security-association.go89
1 files changed, 89 insertions, 0 deletions
diff --git a/satp/security-association.go b/satp/security-association.go
new file mode 100644
index 0000000..28c7851
--- /dev/null
+++ b/satp/security-association.go
@@ -0,0 +1,89 @@
+//
+// Copyright (c) 2017 anygone contributors (see AUTHORS file)
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// * Neither the name of anygone nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+package satp
+
+import (
+ "net"
+ "sync"
+)
+
+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
+}
+
+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) 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)
+ return
+}