aboutsummaryrefslogblamecommitdiff
path: root/io_test.go
blob: dddcf657d40f531c5d0798cf793baab1f2630eae (plain) (tree)
1
2
3
4
5
6




                      
             



































































































                                                                  


























                                                                                  
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")
			}
		}
	})

}

Snix LLC Git Repository Holder Copyright(C) 2022 All Rights Reserved Email To Snix.IR