package y
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"io"
)
func XORBlock (dst , src , key , iv []byte ) error {
block , err := aes .NewCipher (key )
if err != nil {
return err
}
stream := cipher .NewCTR (block , iv )
stream .XORKeyStream (dst , src )
return nil
}
func XORBlockAllocate (src , key , iv []byte ) ([]byte , error ) {
block , err := aes .NewCipher (key )
if err != nil {
return nil , err
}
stream := cipher .NewCTR (block , iv )
dst := make ([]byte , len (src ))
stream .XORKeyStream (dst , src )
return dst , nil
}
func XORBlockStream (w io .Writer , src , key , iv []byte ) error {
block , err := aes .NewCipher (key )
if err != nil {
return err
}
stream := cipher .NewCTR (block , iv )
sw := cipher .StreamWriter {S : stream , W : w }
_, err = io .Copy (sw , bytes .NewReader (src ))
return Wrapf (err , "XORBlockStream" )
}
func GenerateIV () ([]byte , error ) {
iv := make ([]byte , aes .BlockSize )
_ , err := rand .Read (iv )
return iv , err
}
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .