summaryrefslogtreecommitdiff
path: root/satp/crypto-kd.go
diff options
context:
space:
mode:
Diffstat (limited to 'satp/crypto-kd.go')
-rw-r--r--satp/crypto-kd.go49
1 files changed, 44 insertions, 5 deletions
diff --git a/satp/crypto-kd.go b/satp/crypto-kd.go
index db52f77..73d2faa 100644
--- a/satp/crypto-kd.go
+++ b/satp/crypto-kd.go
@@ -30,6 +30,11 @@
package satp
+import (
+ "errors"
+ "strings"
+)
+
type KDRole int
type KeyUsage int
type Label uint32
@@ -38,11 +43,6 @@ const (
RoleLeft KDRole = iota
RoleRight
- RoleServer = RoleLeft
- RoleClient = RoleRight
- RoleAlice = RoleLeft
- RoleBob = RoleRight
-
UsageEncryptKey KeyUsage = iota
UsageEncryptSalt
UsageAuthKey
@@ -55,6 +55,45 @@ const (
LabelRightAuthKey = 0xC1DFD96E
)
+func (r KDRole) String() string {
+ switch r {
+ case RoleLeft:
+ return "left"
+ case RoleRight:
+ return "right"
+ }
+ return "unknown"
+}
+
+func (r *KDRole) FromString(str string) (err error) {
+ switch strings.ToLower(str) {
+ case "server":
+ fallthrough
+ case "alice":
+ fallthrough
+ case "left":
+ *r = RoleLeft
+ case "client":
+ fallthrough
+ case "bob":
+ fallthrough
+ case "right":
+ *r = RoleRight
+ default:
+ return errors.New("invalid role: '" + str + "'")
+ }
+ return
+}
+
+func (r KDRole) MarshalText() (data []byte, err error) {
+ data = []byte(r.String())
+ return
+}
+
+func (r *KDRole) UnmarshalText(data []byte) (err error) {
+ return r.FromString(string(data))
+}
+
type KeyDerivation interface {
Generate(dir Direction, usage KeyUsage, sequenceNumber uint32, out []byte) error
}