From ca0a550f121d000a5f03e116099b4ca36d0e9433 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Wed, 10 Mar 2021 18:26:36 +0300 Subject: [PATCH] Use array of fixed length for secret --- mtglib/secret.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mtglib/secret.go b/mtglib/secret.go index b35fc7a..ea2d51e 100644 --- a/mtglib/secret.go +++ b/mtglib/secret.go @@ -10,13 +10,15 @@ import ( const SecretKeyLength = 16 +var secretEmptyKey [SecretKeyLength]byte + type Secret struct { - Key []byte + Key [SecretKeyLength]byte Host string } func (s Secret) MarshalText() ([]byte, error) { - if s.Key == nil { + if s.Key == secretEmptyKey { return nil, nil } @@ -51,7 +53,7 @@ func (s *Secret) UnmarshalText(data []byte) error { return fmt.Errorf("secret has incorrect length %d", len(text)) } - s.Key = decoded[:SecretKeyLength] + copy(s.Key[:], decoded[:SecretKeyLength]) s.Host = string(decoded[SecretKeyLength:]) return nil @@ -70,7 +72,7 @@ func (s Secret) Hex() string { } func (s *Secret) makeBytes() []byte { - data := append([]byte{238}, s.Key...) // hex 'ee' = 238 + data := append([]byte{238}, s.Key[:]...) // hex 'ee' = 238 data = append(data, s.Host...) return data @@ -78,13 +80,18 @@ func (s *Secret) makeBytes() []byte { func GenerateSecret(hostname string) Secret { s := Secret{ - Key: make([]byte, SecretKeyLength), Host: hostname, } - if _, err := rand.Read(s.Key); err != nil { + if _, err := rand.Read(s.Key[:]); err != nil { panic(err) } return s } + +func ParseSecret(secret string) (Secret, error) { + s := Secret{} + + return s, s.UnmarshalText([]byte(secret)) +}