mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 22:24:02 +03:00
Enforce code coverage of secret
This commit is contained in:
+16
-22
@@ -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
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user