|
|
@@ -1,67 +1,67 @@
|
|
|
package vmess
|
|
|
|
|
|
import (
|
|
|
- "bytes"
|
|
|
- "crypto/aes"
|
|
|
- "crypto/rand"
|
|
|
- mrand "math/rand"
|
|
|
- "testing"
|
|
|
+ "bytes"
|
|
|
+ "crypto/aes"
|
|
|
+ "crypto/rand"
|
|
|
+ mrand "math/rand"
|
|
|
+ "testing"
|
|
|
)
|
|
|
|
|
|
func randomBytes(p []byte, t *testing.T) {
|
|
|
- nBytes, err := rand.Read(p)
|
|
|
- if err != nil {
|
|
|
- t.Fatal(err)
|
|
|
- }
|
|
|
- if nBytes != len(p) {
|
|
|
- t.Error("Unable to generate %d bytes of random buffer", len(p))
|
|
|
- }
|
|
|
+ nBytes, err := rand.Read(p)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+ if nBytes != len(p) {
|
|
|
+ t.Error("Unable to generate %d bytes of random buffer", len(p))
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func TestNormalReading(t *testing.T) {
|
|
|
- testSize := 256
|
|
|
- plaintext := make([]byte, testSize)
|
|
|
- randomBytes(plaintext, t)
|
|
|
-
|
|
|
- keySize := 16
|
|
|
- key := make([]byte, keySize)
|
|
|
- randomBytes(key, t)
|
|
|
-
|
|
|
- cipher, err := aes.NewCipher(key)
|
|
|
- if err != nil {
|
|
|
- t.Fatal(err)
|
|
|
- }
|
|
|
-
|
|
|
- ciphertext := make([]byte, testSize)
|
|
|
- for encryptSize := 0; encryptSize < testSize; encryptSize += blockSize {
|
|
|
- cipher.Encrypt(ciphertext[encryptSize:], plaintext[encryptSize:])
|
|
|
- }
|
|
|
-
|
|
|
- ciphertextcopy := make([]byte, testSize)
|
|
|
- copy(ciphertextcopy, ciphertext)
|
|
|
-
|
|
|
- reader, err := NewDecryptionReader(bytes.NewReader(ciphertextcopy), key)
|
|
|
- if err != nil {
|
|
|
- t.Fatal(err)
|
|
|
- }
|
|
|
-
|
|
|
- readtext := make([]byte, testSize)
|
|
|
- readSize := 0
|
|
|
- for readSize < testSize {
|
|
|
- nBytes := mrand.Intn(16) + 1
|
|
|
- if nBytes > testSize - readSize {
|
|
|
- nBytes = testSize - readSize
|
|
|
- }
|
|
|
- bytesRead, err := reader.Read(readtext[readSize:readSize + nBytes])
|
|
|
- if err != nil {
|
|
|
- t.Fatal(err)
|
|
|
- }
|
|
|
- if bytesRead != nBytes {
|
|
|
- t.Errorf("Expected to read %d bytes, but only read %d bytes", nBytes, bytesRead)
|
|
|
- }
|
|
|
- readSize += nBytes
|
|
|
- }
|
|
|
- if ! bytes.Equal(readtext, plaintext) {
|
|
|
- t.Errorf("Expected plaintext %v, but got %v", plaintext, readtext)
|
|
|
- }
|
|
|
-}
|
|
|
+ testSize := 256
|
|
|
+ plaintext := make([]byte, testSize)
|
|
|
+ randomBytes(plaintext, t)
|
|
|
+
|
|
|
+ keySize := 16
|
|
|
+ key := make([]byte, keySize)
|
|
|
+ randomBytes(key, t)
|
|
|
+
|
|
|
+ cipher, err := aes.NewCipher(key)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ ciphertext := make([]byte, testSize)
|
|
|
+ for encryptSize := 0; encryptSize < testSize; encryptSize += blockSize {
|
|
|
+ cipher.Encrypt(ciphertext[encryptSize:], plaintext[encryptSize:])
|
|
|
+ }
|
|
|
+
|
|
|
+ ciphertextcopy := make([]byte, testSize)
|
|
|
+ copy(ciphertextcopy, ciphertext)
|
|
|
+
|
|
|
+ reader, err := NewDecryptionReader(bytes.NewReader(ciphertextcopy), key)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ readtext := make([]byte, testSize)
|
|
|
+ readSize := 0
|
|
|
+ for readSize < testSize {
|
|
|
+ nBytes := mrand.Intn(16) + 1
|
|
|
+ if nBytes > testSize-readSize {
|
|
|
+ nBytes = testSize - readSize
|
|
|
+ }
|
|
|
+ bytesRead, err := reader.Read(readtext[readSize : readSize+nBytes])
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+ if bytesRead != nBytes {
|
|
|
+ t.Errorf("Expected to read %d bytes, but only read %d bytes", nBytes, bytesRead)
|
|
|
+ }
|
|
|
+ readSize += nBytes
|
|
|
+ }
|
|
|
+ if !bytes.Equal(readtext, plaintext) {
|
|
|
+ t.Errorf("Expected plaintext %v, but got %v", plaintext, readtext)
|
|
|
+ }
|
|
|
+}
|