summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2017-10-14 19:52:43 +0200
committerChristian Pointner <equinox@anytun.org>2017-10-14 19:52:43 +0200
commit8edee696315d8586bb9a77b0e0e28b0aa14edcde (patch)
tree0bb2e895a0170243eda3ab02001459a6117b67e1
parentadded text marshaler for role (diff)
added skeleton security assoc
-rw-r--r--satp/security-association.go89
-rw-r--r--satp/security-association_test.go45
-rw-r--r--satp/sequence-window.go2
3 files changed, 135 insertions, 1 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
+}
diff --git a/satp/security-association_test.go b/satp/security-association_test.go
new file mode 100644
index 0000000..311fb6c
--- /dev/null
+++ b/satp/security-association_test.go
@@ -0,0 +1,45 @@
+//
+// 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 (
+ "testing"
+)
+
+func TestSecurityAssociationNew(t *testing.T) {
+ sa := NewSecurityAssociation()
+ if sa.mtx == nil {
+ t.Fatal("mutex must not be nil")
+ }
+ if sa.seqWins == nil {
+ t.Fatal("sequence-window map not properly initialized")
+ }
+}
diff --git a/satp/sequence-window.go b/satp/sequence-window.go
index ff0b48e..e8a1ed6 100644
--- a/satp/sequence-window.go
+++ b/satp/sequence-window.go
@@ -58,10 +58,10 @@ func bitSliceIndex(top, seq uint32) int {
}
type SequenceWindow struct {
+ mtx *sync.RWMutex
size int
head uint64
body []uint32
- mtx *sync.RWMutex
}
func octet2str(octet uint8) (str string) {