diff --git a/pkg/crypto/scheme/layer2/hybrid/scheme_test.go b/pkg/crypto/scheme/layer2/hybrid/scheme_test.go
index b3e2a0f0..0c97fc79 100644
--- a/pkg/crypto/scheme/layer2/hybrid/scheme_test.go
+++ b/pkg/crypto/scheme/layer2/hybrid/scheme_test.go
@@ -79,6 +79,16 @@ func TestInvalidKeys(t *testing.T) {
t.Error("success decrypt with invalid privkey")
return
}
+
+ _key := make([]byte, symmetric.CCipherKeySize)
+ if _, _, err := _scheme.DecryptMessage(symmetric.NewCipherCFB(_key), enc); err == nil {
+ t.Error("success decrypt with another key type")
+ return
+ }
+ if _, err := _scheme.EncryptMessage(symmetric.NewCipherCFB(_key), enc); err == nil {
+ t.Error("success encrypt with another key type")
+ return
+ }
}
func TestInvalidScheme(t *testing.T) {
diff --git a/pkg/crypto/scheme/layer2/symmetric/errors.go b/pkg/crypto/scheme/layer2/symmetric/errors.go
index 018f8cde..fb60810d 100644
--- a/pkg/crypto/scheme/layer2/symmetric/errors.go
+++ b/pkg/crypto/scheme/layer2/symmetric/errors.go
@@ -4,18 +4,18 @@ const (
errPrefix = "pkg/crypto/scheme/layer2/symmetric = "
)
-type SClientError struct {
+type SError struct {
str string
}
-func (err *SClientError) Error() string {
+func (err *SError) Error() string {
return errPrefix + err.str
}
var (
- ErrInvalidKeyType = &SClientError{"invalid key type"}
- ErrDecryptMessage = &SClientError{"decrypt message"}
- ErrLimitMessageSize = &SClientError{"limit message size"}
- ErrMessageSize = &SClientError{"message size"}
- ErrDecodeMessage = &SClientError{"decode message"}
+ ErrInvalidKeyType = &SError{"invalid key type"}
+ ErrDecryptMessage = &SError{"decrypt message"}
+ ErrLimitMessageSize = &SError{"limit message size"}
+ ErrInvalidMessageSize = &SError{"invalidmessage size"}
+ ErrDecodeMessage = &SError{"decode message"}
)
diff --git a/pkg/crypto/scheme/layer2/symmetric/scheme.go b/pkg/crypto/scheme/layer2/symmetric/scheme.go
index 4bf04f09..7feab57f 100644
--- a/pkg/crypto/scheme/layer2/symmetric/scheme.go
+++ b/pkg/crypto/scheme/layer2/symmetric/scheme.go
@@ -15,7 +15,7 @@ var (
)
const (
- cSaltSize = 16 // bytes
+ cSaltSize = 16 // salt for key generation
)
type sScheme struct {
@@ -30,10 +30,7 @@ func NewScheme(pMessageSize uint64) layer2.IScheme {
encKey := make([]byte, symmetric.CCipherKeySize)
cipher := symmetric.NewCipherGCM(encKey)
- encMsg, err := scheme.encryptWithPadding(cipher, []byte{}, 0)
- if err != nil {
- panic(err)
- }
+ encMsg := scheme.encryptWithPadding(cipher, []byte{}, 0)
structSize := uint64(len(encMsg))
if pMessageSize <= structSize {
@@ -68,19 +65,17 @@ func (p *sScheme) EncryptMessage(pRecv layer2.IParticipantKey, pMsg []byte) ([]b
if resultSize > payloadLimit {
return nil, ErrLimitMessageSize
}
- return p.encryptWithPadding(recv, pMsg, payloadLimit-resultSize)
+ return p.encryptWithPadding(recv, pMsg, payloadLimit-resultSize), nil
}
func (p *sScheme) DecryptMessage(pListKeys layer2.IKeysContainer, pMsg []byte) (layer2.IParticipantKey, []byte, error) {
- var lenMsg = len(pMsg)
- if (uint64(lenMsg) != p.fMessageSize) || (lenMsg < cSaltSize+encoding.CSizeUint32) {
- return nil, nil, ErrMessageSize
- }
-
listCiphers, ok := pListKeys.(symmetric.IListCiphers)
if !ok {
return nil, nil, ErrInvalidKeyType
}
+ if uint64(len(pMsg)) != p.fMessageSize {
+ return nil, nil, ErrInvalidMessageSize
+ }
salt := pMsg[:cSaltSize]
list := listCiphers.Get()
@@ -91,7 +86,7 @@ func (p *sScheme) DecryptMessage(pListKeys layer2.IKeysContainer, pMsg []byte) (
cipher := symmetric.NewCipherGCM(encKey)
decMsg := cipher.DecryptBytes(pMsg[cSaltSize:])
- if len(decMsg) < encoding.CSizeUint32 {
+ if decMsg == nil {
continue
}
@@ -114,7 +109,7 @@ func (p *sScheme) encryptWithPadding(
pCipher symmetric.ICipher,
pMsg []byte,
pPadd uint64,
-) ([]byte, error) {
+) []byte {
var (
rand = random.NewRandom()
salt = rand.GetBytes(cSaltSize)
@@ -128,5 +123,5 @@ func (p *sScheme) encryptWithPadding(
return bytes.Join([][]byte{
salt,
symmetric.NewCipherGCM(encKey).EncryptBytes(data),
- }, []byte{}), nil
+ }, []byte{})
}
diff --git a/pkg/crypto/scheme/layer2/symmetric/scheme_test.go b/pkg/crypto/scheme/layer2/symmetric/scheme_test.go
index 94cfcf75..664c5291 100644
--- a/pkg/crypto/scheme/layer2/symmetric/scheme_test.go
+++ b/pkg/crypto/scheme/layer2/symmetric/scheme_test.go
@@ -2,13 +2,41 @@ package symmetric
import (
"bytes"
- "fmt"
"testing"
+ "github.com/number571/go-peer/pkg/crypto/asymmetric"
"github.com/number571/go-peer/pkg/crypto/random"
"github.com/number571/go-peer/pkg/crypto/symmetric"
)
+func TestError(t *testing.T) {
+ t.Parallel()
+
+ str := "value"
+ err := &SError{str}
+ if err.Error() != errPrefix+str {
+ t.Error("incorrect err.Error()")
+ return
+ }
+}
+
+func TestPanicNewScheme(t *testing.T) {
+ t.Parallel()
+
+ tcNewSchemeWithSmallMsgSize(t)
+}
+
+func tcNewSchemeWithSmallMsgSize(t *testing.T) {
+ defer func() {
+ if r := recover(); r == nil {
+ t.Error("nothing panics")
+ return
+ }
+ }()
+
+ _ = NewScheme(8)
+}
+
func TestScheme(t *testing.T) {
t.Parallel()
@@ -22,6 +50,9 @@ func TestScheme(t *testing.T) {
if err != nil {
t.Fatal(err)
}
+ if _, err := scheme.EncryptMessage(key, make([]byte, 256)); err == nil {
+ t.Fatal("success encrypt message with overflow")
+ }
listCiphers := symmetric.NewListCiphers()
listCiphers.Add(symmetric.NewCipherGCM(key.ToBytes()))
@@ -30,16 +61,37 @@ func TestScheme(t *testing.T) {
if err != nil {
t.Fatal(err)
}
+ if _, _, err := scheme.DecryptMessage(listCiphers, []byte{}); err == nil {
+ t.Fatal("success decrypt with invalid message size")
+ }
+
+ anotherListCiphers := symmetric.NewListCiphers()
+ anotherListCiphers.Add(symmetric.NewCipherGCM(make([]byte, symmetric.CCipherKeySize)))
+ if _, _, err := scheme.DecryptMessage(anotherListCiphers, encMsg); err == nil {
+ t.Fatal("success decrypt with undefined key")
+ }
if !bytes.Equal(key.ToBytes(), gotKey.ToBytes()) {
t.Fatal("keys are diff")
}
if !bytes.Equal(msg, gotMsg) {
- fmt.Println(string(gotMsg))
t.Fatal("msgs are diff")
}
- fmt.Println(scheme.GetMessageSize())
- fmt.Println(scheme.GetMessageSize() - scheme.GetPayloadLimit())
- fmt.Println(scheme.GetPayloadLimit())
+ if _, _, err := scheme.DecryptMessage(asymmetric.NewMapPubKeys(), []byte{}); err == nil {
+ t.Error("success decrypt with another key type")
+ return
+ }
+ if _, err := scheme.EncryptMessage(asymmetric.NewPrivKey().GetPubKey(), []byte{}); err == nil {
+ t.Error("success encrypt with another key type")
+ return
+ }
+
+ if scheme.GetRandomKey().ToString() == scheme.GetRandomKey().ToString() { //nolint:staticcheck
+ t.Fatal("random got equal values")
+ }
+
+ // fmt.Println(scheme.GetMessageSize())
+ // fmt.Println(scheme.GetMessageSize() - scheme.GetPayloadLimit())
+ // fmt.Println(scheme.GetPayloadLimit())
}
diff --git a/pkg/crypto/symmetric/cipher_test.go b/pkg/crypto/symmetric/cipher_test.go
index 718e035b..a25eaccb 100644
--- a/pkg/crypto/symmetric/cipher_test.go
+++ b/pkg/crypto/symmetric/cipher_test.go
@@ -2,6 +2,7 @@ package symmetric
import (
"bytes"
+ "crypto/des" //nolint:gosec
"testing"
"github.com/number571/go-peer/pkg/encoding"
@@ -25,7 +26,6 @@ func testPanicEncrypt(t *testing.T) {
return
}
}()
-
cipher := &sAESCipher{fMode: 999}
_ = cipher.EncryptBytes([]byte{})
}
@@ -94,4 +94,16 @@ func testEncrypt(t *testing.T, c func(pKey []byte) ICipher) {
if cipher.ToString() != encoding.HexEncode(tgKey) {
t.Fatal("string key not equal")
}
+
+ block, err := des.NewCipher([]byte("abcdefgh")) //nolint:gosec
+ if err != nil {
+ t.Fatal(err)
+ }
+ anotherCipher := &sAESCipher{fMode: modeGCM, fBlock: block}
+ if m := anotherCipher.encryptBytesGCM([]byte{}); m != nil {
+ t.Fatal("success encrypt message with another cipher")
+ }
+ if m := anotherCipher.decryptBytesGCM([]byte{}); m != nil {
+ t.Fatal("success decrypt message with another cipher")
+ }
}
diff --git a/pkg/types/types_test.go b/pkg/types/types_test.go
index 14e90669..dd7a7da5 100644
--- a/pkg/types/types_test.go
+++ b/pkg/types/types_test.go
@@ -12,6 +12,19 @@ type tsSomeStruct struct {
N int `json:"n"`
}
+func TestPanic(t *testing.T) {
+ t.Parallel()
+
+ defer func() {
+ if r := recover(); r == nil {
+ t.Error("nothing panics")
+ return
+ }
+ }()
+
+ _ = NewConverter(func() {})
+}
+
func TestConverter(t *testing.T) {
t.Parallel()
diff --git a/test/result/badge_codelines.svg b/test/result/badge_codelines.svg
index a7ec5d1b..0f13ba68 100644
--- a/test/result/badge_codelines.svg
+++ b/test/result/badge_codelines.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/test/result/badge_coverage.svg b/test/result/badge_coverage.svg
index 09558fd2..65824887 100644
--- a/test/result/badge_coverage.svg
+++ b/test/result/badge_coverage.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/test/result/coverage.svg b/test/result/coverage.svg
index bb54ce34..bddf977b 100644
--- a/test/result/coverage.svg
+++ b/test/result/coverage.svg
@@ -7,7 +7,7 @@
>
-
+
-
+
-
+
-
+
anonymity/qb
@@ -52,25 +52,25 @@
-
+
crypto
-
+
encoding
@@ -78,12 +78,12 @@
-
+
logger
@@ -91,12 +91,12 @@
-
+
network
@@ -104,12 +104,12 @@
-
+
payload
@@ -117,12 +117,12 @@
-
+
state
@@ -130,12 +130,12 @@
-
+
storage
@@ -143,25 +143,25 @@
-
+
types/converter.go
-
+
action.go
@@ -169,18 +169,18 @@
-
+
-
+
anonymity.go
@@ -188,18 +188,18 @@
-
+
-
+
head.go
@@ -207,12 +207,12 @@
-
+
logger/log_builder.go
@@ -220,12 +220,12 @@
-
+
queue
@@ -233,12 +233,12 @@
-
+
settings.go
@@ -246,12 +246,12 @@
-
+
asymmetric
@@ -259,12 +259,12 @@
-
+
hashing
@@ -272,18 +272,18 @@
-
+
-
+
puzzle/puzzle.go
@@ -291,12 +291,12 @@
-
+
random/random.go
@@ -304,25 +304,25 @@
-
+
scheme
-
+
symmetric
@@ -330,12 +330,12 @@
-
+
bytes.go
@@ -343,30 +343,30 @@
-
+
-
+
-
+
-
+
serialize_yaml.go
@@ -374,12 +374,12 @@
-
+
logger.go
@@ -387,18 +387,18 @@
-
+
-
+
conn
@@ -406,12 +406,12 @@
-
+
connkeeper
@@ -419,12 +419,12 @@
-
+
network.go
@@ -432,12 +432,12 @@
-
+
settings.go
@@ -445,12 +445,12 @@
-
+
joiner
@@ -458,12 +458,12 @@
-
+
payload32.go
@@ -471,12 +471,12 @@
-
+
payload64.go
@@ -484,12 +484,12 @@
-
+
state.go
@@ -497,12 +497,12 @@
-
+
cache/lru.go
@@ -510,12 +510,12 @@
-
+
database
@@ -523,18 +523,18 @@
-
+
-
+
queue.go
@@ -542,12 +542,12 @@
-
+
settings.go
@@ -555,12 +555,12 @@
-
+
dsa.go
@@ -568,12 +568,12 @@
-
+
kem.go
@@ -581,12 +581,12 @@
-
+
key.go
@@ -594,12 +594,12 @@
-
+
map_pubkeys.go
@@ -607,12 +607,12 @@
-
+
hashing.go
@@ -620,12 +620,12 @@
-
+
hmac.go
@@ -633,12 +633,12 @@
-
+
layer1
@@ -646,25 +646,25 @@
-
+
layer2
-
+
cfb.go
@@ -672,31 +672,31 @@
-
+
-
+
gcm.go
-
+
list_ciphers.go
@@ -704,12 +704,12 @@
-
+
conn.go
@@ -717,12 +717,12 @@
-
+
settings.go
@@ -730,12 +730,12 @@
-
+
connkeeper.go
@@ -743,18 +743,18 @@
-
+
-
+
joiner32.go
@@ -762,12 +762,12 @@
-
+
database.go
@@ -775,12 +775,12 @@
-
+
message.go
@@ -788,13 +788,13 @@
-
+
-
+
-
+
symmetric
-
+
-
+
scheme.go
@@ -839,13 +839,13 @@
-
+
scheme.go