From 3a7f25020a994681146aa3a2fda32243125f53f7 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Sun, 29 Dec 2024 13:27:06 +0200 Subject: [PATCH] implement key structure --- crypto/lux_key.go | 29 +++++++++++++++++++++++++---- proto/lux_data.go | 2 +- proto/lux_id.go | 28 ++++++++++++++++++++++++++++ proto/lux_type.go | 4 ++++ 4 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 proto/lux_id.go diff --git a/crypto/lux_key.go b/crypto/lux_key.go index a42ce31..04df4cf 100644 --- a/crypto/lux_key.go +++ b/crypto/lux_key.go @@ -3,19 +3,17 @@ package crypto import ( "crypto/rand" "lux/proto" - - "github.com/google/uuid" ) type LuxKey struct { Type proto.LuxType - Id uuid.UUID + Id proto.LuxID Key []byte } func (key *LuxKey) NewLuxKey(keyType proto.LuxType) error { key.Type = keyType - key.Id = uuid.New() + key.Id = proto.NewLuxID() key.Key = make([]byte, 32) if _, err := rand.Read(key.Key); err != nil { @@ -24,3 +22,26 @@ func (key *LuxKey) NewLuxKey(keyType proto.LuxType) error { return nil } } + +func (key *LuxKey) Read(rd *proto.LuxBuffer) error { + if err := key.Type.Read(rd); err != nil { + return err + } + if err := key.Id.Read(rd); err != nil { + return err + } + + _key, err := rd.ReadNext(32) + if err != nil { + return err + } + + key.Key = _key + return nil +} + +func (key *LuxKey) Write(wd *proto.LuxBuffer) { + key.Type.Write(wd) + key.Id.Write(wd) + wd.WriteBytes(key.Key) +} diff --git a/proto/lux_data.go b/proto/lux_data.go index 952c76a..2158ec1 100644 --- a/proto/lux_data.go +++ b/proto/lux_data.go @@ -2,5 +2,5 @@ package proto type LuxData interface { Read(rd *LuxBuffer) error - Write(wd *LuxBuffer) error + Write(wd *LuxBuffer) } diff --git a/proto/lux_id.go b/proto/lux_id.go new file mode 100644 index 0000000..39c3765 --- /dev/null +++ b/proto/lux_id.go @@ -0,0 +1,28 @@ +package proto + +import "github.com/google/uuid" + +type LuxID struct{ uuid.UUID } + +func NewLuxID() LuxID { + return LuxID{uuid.New()} +} + +func (id *LuxID) Read(rd *LuxBuffer) error { + bytes, err := rd.ReadNext(16) + if err != nil { + return err + } + + _id, err := uuid.FromBytes(bytes) + if err != nil { + return err + } + + id.UUID = _id + return nil +} + +func (id *LuxID) Write(wd *LuxBuffer) { + wd.WriteBytes(id.UUID[:]) +} diff --git a/proto/lux_type.go b/proto/lux_type.go index ca6d832..a619f34 100644 --- a/proto/lux_type.go +++ b/proto/lux_type.go @@ -15,3 +15,7 @@ func (luxType *LuxType) Read(rd *LuxBuffer) error { return nil } } + +func (luxType *LuxType) Write(wd *LuxBuffer) { + wd.WriteUint16(uint16(*luxType)) +}