diff options
Diffstat (limited to 'satp/crypto-kd.go')
-rw-r--r-- | satp/crypto-kd.go | 49 |
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 } |