-func (w *Worker) Thread(doDecrypt bool) {
- var task WorkerTask
- nonce := make([]byte, chacha20poly1305.NonceSize)
- var done []byte
+func NewWorker(key, salt []byte) *Worker {
+ aead, err := chacha20poly1305.NewX(key)
+ if err != nil {
+ panic(err)
+ }
+ w := Worker{
+ aead: aead,
+ nonce: make([]byte, chacha20poly1305.NonceSizeX),
+ input: make([]byte, LenSize+bs+poly1305.TagSize),
+ ready: make(chan struct{}),
+ task: make(chan Task),
+ output: make(chan []byte),
+ written: make(chan struct{}),
+ }
+ copy(w.nonce, salt)
+ go w.Run()
+ return &w
+}
+
+func (w *Worker) Run() {
+ var output []byte
+ var err error