84 lines
1.5 KiB
Go
Executable File
84 lines
1.5 KiB
Go
Executable File
package main
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
"local/encoder"
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
func key() []byte {
|
|
k := []byte(os.Getenv("KEY"))
|
|
if len(k) == 0 {
|
|
panic("KEY is empty")
|
|
}
|
|
return k
|
|
}
|
|
|
|
func do_stdin_op(op string, src ...io.Reader) (io.Reader, error) {
|
|
k := key()
|
|
bops := []encoder.BOP{
|
|
&encoder.Salter{},
|
|
//&encoder.Zipper{},
|
|
&encoder.AES{Key: k},
|
|
//&encoder.Zipper{},
|
|
//&encoder.PAR2{},
|
|
}
|
|
if os.Getenv("chunksize") == "" {
|
|
os.Setenv("chunksize", "1")
|
|
}
|
|
chunksize, err := strconv.ParseFloat(os.Getenv("chunksize"), 64)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
//encoder.SetPipeBuffSize(int(chunksize * 1000 * 1000 * 1000 / float64(len(bops)+1) * .66))
|
|
encoder.SetPipeBuffSize(int(chunksize * 1000 * 1000 * 1000 * .9))
|
|
enc, err := encoder.New(nil, bops...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var o io.Reader = os.Stdin
|
|
if len(src) > 0 {
|
|
o = src[0]
|
|
}
|
|
var p io.Reader
|
|
switch op {
|
|
case "enc":
|
|
p, err = enc.Encode2(o)
|
|
case "dec":
|
|
p, err = enc.Decode2(o)
|
|
default:
|
|
err = errors.New("unknown op " + op)
|
|
}
|
|
return p, err
|
|
}
|
|
|
|
func DecIO(src io.Reader) (io.Reader, error) {
|
|
return do_stdin_op("dec", src)
|
|
}
|
|
|
|
func EncIO(src io.Reader) (io.Reader, error) {
|
|
return do_stdin_op("enc", src)
|
|
}
|
|
|
|
func Enc(src ...io.Reader) error {
|
|
b, err := do_stdin_op("enc", src...)
|
|
if err == nil {
|
|
if _, err := io.Copy(os.Stdout, b); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func Dec(src ...io.Reader) error {
|
|
b, err := do_stdin_op("dec", src...)
|
|
if err == nil {
|
|
if _, err = io.Copy(os.Stdout, b); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return err
|
|
}
|