lux/crypto/lux_key.go
2024-12-29 13:35:51 +02:00

50 lines
886 B
Go

package crypto
import (
"crypto/rand"
"lux/proto"
)
type LuxKey struct {
Type proto.LuxType // 2
Id proto.LuxID // 16
Key []byte // 32
}
const LUX_KEY_AES_SIZE = 32
const LUX_PROTO_KEY_SIZE = proto.LUX_PROTO_TYPE_SIZE + proto.LUX_PROTO_ID_SIZE + LUX_KEY_AES_SIZE
func (key *LuxKey) NewLuxKey(keyType proto.LuxType) error {
key.Type = keyType
key.Id = proto.NewLuxID()
key.Key = make([]byte, 32)
if _, err := rand.Read(key.Key); err != nil {
return err
} else {
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)
}