package rabbitio_test import ( "bytes" "encoding/hex" "fmt" "io" "strings" "testing" "snix.ir/rabbitio" ) func TestNewWriterCipher(t *testing.T) { key, ivt := []byte("12345678abcdefgh"), []byte("1234qwer") txt := "dummy text to test NewWriterCipher" twr := strings.NewReader(txt) iw := new(bytes.Buffer) t.Logf("encrypting plain text ---") cw, err := rabbitio.NewWriterCipher(key, ivt, iw) if err != nil { t.Fatal(err) } if _, err := io.Copy(cw, twr); err != nil { t.Fatal(err) } t.Logf("cipher-text: %v", hex.EncodeToString(iw.Bytes())) t.Logf("decrypting cipher text ---") ir := new(bytes.Buffer) cr, err := rabbitio.NewWriterCipher(key, ivt, ir) if err != nil { t.Fatal(err) } if _, err := io.Copy(cr, iw); err != nil { t.Fatal(err) } if ir.String() != txt { t.Error("error: ir.String() is not equal to txt") } } func TestNewReaderCipher(t *testing.T) { key, ivt := []byte("12345678abcdefgh"), []byte("1234qwer") txt := "test NewReadercipher text dummy tx" twr := strings.NewReader(txt) iw := new(bytes.Buffer) t.Logf("encrypting plain text ---") cw, err := rabbitio.NewReaderCipher(key, ivt, twr) if err != nil { t.Fatal(err) } if _, err := io.Copy(iw, cw); err != nil { t.Fatal(err) } t.Logf("cipher-text: %v", hex.EncodeToString(iw.Bytes())) t.Logf("decrypting cipher text ---") ir := new(bytes.Buffer) cr, err := rabbitio.NewReaderCipher(key, ivt, iw) if err != nil { t.Fatal(err) } if _, err := io.Copy(ir, cr); err != nil { t.Fatal(err) } if ir.String() != txt { t.Error("error: ir.String() is not equal to txt") } } func TestNewCipher(t *testing.T) { key, ivt := []byte("12345678abcdefgh"), []byte("1234qwer") txt := "test NewReadercipher text dummy tx" cph, err := rabbitio.NewCipher(key, ivt) if err != nil { t.Fatal(err) } dst := make([]byte, len(txt)) cph.XORKeyStream(dst, []byte(txt)) t.Logf("cipher-text: %v", hex.EncodeToString(dst)) cph, err = rabbitio.NewCipher(key, ivt) if err != nil { t.Fatal(err) } nds := make([]byte, len(dst)) cph.XORKeyStream(nds, dst) if string(nds) != txt { t.Error("error: nds is not equal to txt") } } func BenchmarkNewCipher(b *testing.B) { b.Run(fmt.Sprintf("bench %v", b.N), func(b *testing.B) { for i := 0; i < b.N; i++ { key, ivt := []byte("12345678abcdefgh"), []byte("1234qwer") txt := "test NewReadercipher text dummy tx" cph, err := rabbitio.NewCipher(key, ivt) if err != nil { b.Fatal(err) } dst := make([]byte, len(txt)) cph.XORKeyStream(dst, []byte(txt)) cph, err = rabbitio.NewCipher(key, ivt) if err != nil { b.Fatal(err) } nds := make([]byte, len(dst)) cph.XORKeyStream(nds, dst) if string(nds) != txt { b.Error("error: nds is not equal to txt") } } }) }