github.com/unionj-cloud/go-doudou/v2@v2.3.5/toolkit/memberlist/security_test.go (about) 1 package memberlist 2 3 import ( 4 "bytes" 5 "reflect" 6 "testing" 7 ) 8 9 func TestPKCS7(t *testing.T) { 10 for i := 0; i <= 255; i++ { 11 // Make a buffer of size i 12 buf := []byte{} 13 for j := 0; j < i; j++ { 14 buf = append(buf, byte(i)) 15 } 16 17 // Copy to bytes buffer 18 inp := bytes.NewBuffer(nil) 19 inp.Write(buf) 20 21 // Pad this out 22 pkcs7encode(inp, 0, 16) 23 24 // Unpad 25 dec := pkcs7decode(inp.Bytes(), 16) 26 27 // Ensure equivilence 28 if !reflect.DeepEqual(buf, dec) { 29 t.Fatalf("mismatch: %v %v", buf, dec) 30 } 31 } 32 33 } 34 35 func TestEncryptDecrypt_V0(t *testing.T) { 36 encryptDecryptVersioned(0, t) 37 } 38 39 func TestEncryptDecrypt_V1(t *testing.T) { 40 encryptDecryptVersioned(1, t) 41 } 42 43 func encryptDecryptVersioned(vsn encryptionVersion, t *testing.T) { 44 k1 := []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} 45 plaintext := []byte("this is a plain text message") 46 extra := []byte("random data") 47 48 var buf bytes.Buffer 49 err := encryptPayload(vsn, k1, plaintext, extra, &buf) 50 if err != nil { 51 t.Fatalf("err: %v", err) 52 } 53 54 expLen := encryptedLength(vsn, len(plaintext)) 55 if buf.Len() != expLen { 56 t.Fatalf("output length is unexpected %d %d %d", len(plaintext), buf.Len(), expLen) 57 } 58 59 msg, err := decryptPayload([][]byte{k1}, buf.Bytes(), extra) 60 if err != nil { 61 t.Fatalf("err: %v", err) 62 } 63 64 cmp := bytes.Compare(msg, plaintext) 65 if cmp != 0 { 66 t.Errorf("len %d %v", len(msg), msg) 67 t.Errorf("len %d %v", len(plaintext), plaintext) 68 t.Fatalf("encrypt/decrypt failed! %d '%s' '%s'", cmp, msg, plaintext) 69 } 70 }