Enforce code coverage of secret

This commit is contained in:
9seconds
2021-04-02 11:03:35 +03:00
parent 155a97c25d
commit 5941f0674a
2 changed files with 27 additions and 23 deletions
+16 -22
View File
@@ -5,13 +5,12 @@ import (
"encoding/base64" "encoding/base64"
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"strings"
) )
const ( const (
SecretKeyLength = 16 SecretKeyLength = 16
secretFakeTLSFirstByte byte = 238 secretFakeTLSFirstByte byte = 0xee
) )
var secretEmptyKey [SecretKeyLength]byte var secretEmptyKey [SecretKeyLength]byte
@@ -35,31 +34,26 @@ func (s *Secret) UnmarshalText(data []byte) error {
return ErrSecretEmpty return ErrSecretEmpty
} }
var ( decoded, err := hex.DecodeString(text)
decoded []byte if err != nil {
err error decoded, err = base64.RawURLEncoding.DecodeString(text)
)
if strings.HasPrefix(text, "ee") {
decoded, err = hex.DecodeString(strings.TrimPrefix(text, "ee"))
} }
if err != nil || len(decoded) <= SecretKeyLength { if err != nil {
decoded, err = base64.RawURLEncoding.DecodeString(text) return fmt.Errorf("incorrect secret format: %w", err)
}
if err != nil { if len(decoded) < 2 { // nolint: gomnd // we need at least 1 byte here
return fmt.Errorf("incorrect secret format: %w", err) return fmt.Errorf("secret is truncated, length=%d", len(decoded))
} }
if len(decoded) <= SecretKeyLength { if decoded[0] != secretFakeTLSFirstByte {
return fmt.Errorf("secret has incorrect length %d", len(text)) return fmt.Errorf("incorrect first byte of secret: %#x", decoded[0])
} }
if decoded[0] != secretFakeTLSFirstByte { decoded = decoded[1:]
return fmt.Errorf("incorrect first byte: %v", decoded[0]) if len(decoded) < SecretKeyLength {
} return fmt.Errorf("secret has incorrect length %d", len(decoded))
decoded = decoded[1:]
} }
copy(s.Key[:], decoded[:SecretKeyLength]) copy(s.Key[:], decoded[:SecretKeyLength])
+11 -1
View File
@@ -45,8 +45,14 @@ func (suite *SecretTestSuite) TestParseSecret() {
} }
func (suite *SecretTestSuite) TestSerialize() { func (suite *SecretTestSuite) TestSerialize() {
s := mtglib.Secret{}
data, err := s.MarshalText()
suite.NoError(err)
suite.Empty(data)
secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665") secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
s := mtglib.Secret{ s = mtglib.Secret{
Host: "google.com", Host: "google.com",
} }
@@ -77,6 +83,10 @@ func (suite *SecretTestSuite) TestIncorrectSecret() {
"+ueJ0q91t5XOnFYP8Xac3A", "+ueJ0q91t5XOnFYP8Xac3A",
"eed11c6cbbd9efe7fed5bc0db220b09665", "eed11c6cbbd9efe7fed5bc0db220b09665",
"ed11c6cbbd9efe7fed5bc0db220b09665", "ed11c6cbbd9efe7fed5bc0db220b09665",
"",
"+**",
"ee",
"efd11c6cbbd9efe7fed5bc0db220b09665",
} }
for _, v := range testData { for _, v := range testData {