Просмотр исходного кода

Enforce code coverage of secret

tags/v2.0.0-rc1
9seconds 5 лет назад
Родитель
Сommit
5941f0674a
2 измененных файлов: 27 добавлений и 23 удалений
  1. 16
    22
      mtglib/secret.go
  2. 11
    1
      mtglib/secret_test.go

+ 16
- 22
mtglib/secret.go Просмотреть файл

5
 	"encoding/base64"
5
 	"encoding/base64"
6
 	"encoding/hex"
6
 	"encoding/hex"
7
 	"fmt"
7
 	"fmt"
8
-	"strings"
9
 )
8
 )
10
 
9
 
11
 const (
10
 const (
12
 	SecretKeyLength = 16
11
 	SecretKeyLength = 16
13
 
12
 
14
-	secretFakeTLSFirstByte byte = 238
13
+	secretFakeTLSFirstByte byte = 0xee
15
 )
14
 )
16
 
15
 
17
 var secretEmptyKey [SecretKeyLength]byte
16
 var secretEmptyKey [SecretKeyLength]byte
35
 		return ErrSecretEmpty
34
 		return ErrSecretEmpty
36
 	}
35
 	}
37
 
36
 
38
-	var (
39
-		decoded []byte
40
-		err     error
41
-	)
42
-
43
-	if strings.HasPrefix(text, "ee") {
44
-		decoded, err = hex.DecodeString(strings.TrimPrefix(text, "ee"))
45
-	}
46
-
47
-	if err != nil || len(decoded) <= SecretKeyLength {
37
+	decoded, err := hex.DecodeString(text)
38
+	if err != nil {
48
 		decoded, err = base64.RawURLEncoding.DecodeString(text)
39
 		decoded, err = base64.RawURLEncoding.DecodeString(text)
40
+	}
49
 
41
 
50
-		if err != nil {
51
-			return fmt.Errorf("incorrect secret format: %w", err)
52
-		}
42
+	if err != nil {
43
+		return fmt.Errorf("incorrect secret format: %w", err)
44
+	}
53
 
45
 
54
-		if len(decoded) <= SecretKeyLength {
55
-			return fmt.Errorf("secret has incorrect length %d", len(text))
56
-		}
46
+	if len(decoded) < 2 { // nolint: gomnd // we need at least 1 byte here
47
+		return fmt.Errorf("secret is truncated, length=%d", len(decoded))
48
+	}
57
 
49
 
58
-		if decoded[0] != secretFakeTLSFirstByte {
59
-			return fmt.Errorf("incorrect first byte: %v", decoded[0])
60
-		}
50
+	if decoded[0] != secretFakeTLSFirstByte {
51
+		return fmt.Errorf("incorrect first byte of secret: %#x", decoded[0])
52
+	}
61
 
53
 
62
-		decoded = decoded[1:]
54
+	decoded = decoded[1:]
55
+	if len(decoded) < SecretKeyLength {
56
+		return fmt.Errorf("secret has incorrect length %d", len(decoded))
63
 	}
57
 	}
64
 
58
 
65
 	copy(s.Key[:], decoded[:SecretKeyLength])
59
 	copy(s.Key[:], decoded[:SecretKeyLength])

+ 11
- 1
mtglib/secret_test.go Просмотреть файл

45
 }
45
 }
46
 
46
 
47
 func (suite *SecretTestSuite) TestSerialize() {
47
 func (suite *SecretTestSuite) TestSerialize() {
48
+	s := mtglib.Secret{}
49
+
50
+	data, err := s.MarshalText()
51
+	suite.NoError(err)
52
+	suite.Empty(data)
53
+
48
 	secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
54
 	secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
49
-	s := mtglib.Secret{
55
+	s = mtglib.Secret{
50
 		Host: "google.com",
56
 		Host: "google.com",
51
 	}
57
 	}
52
 
58
 
77
 		"+ueJ0q91t5XOnFYP8Xac3A",
83
 		"+ueJ0q91t5XOnFYP8Xac3A",
78
 		"eed11c6cbbd9efe7fed5bc0db220b09665",
84
 		"eed11c6cbbd9efe7fed5bc0db220b09665",
79
 		"ed11c6cbbd9efe7fed5bc0db220b09665",
85
 		"ed11c6cbbd9efe7fed5bc0db220b09665",
86
+		"",
87
+		"+**",
88
+		"ee",
89
+		"efd11c6cbbd9efe7fed5bc0db220b09665",
80
 	}
90
 	}
81
 
91
 
82
 	for _, v := range testData {
92
 	for _, v := range testData {

Загрузка…
Отмена
Сохранить