Go high-performance encryption utility. gohpenc highly resembles hpenc tool (https://github.com/vstakhov/hpenc). hpenc solves the problem that there is no simple tool to quickly transfer data with encryption and authentication: * openssl enc -- non-parallelized, no authentication * GnuPG -- non-parallelized, complex key generation/management * age -- non-parallelized * OpenSSH -- non-parallelized, not very fast * encpipe -- slow Why gohpenc was written? hpenc has some problems: it does not work on aarch64 and sparc64 architectures under FreeBSD (as seen in the port's Makefile) and produces incompatible output (unauthenticated after 8192 blocks) between FreeBSD and HardenedBSD systems somehow. Instead of painful debugging I decided to write something similar on the Go language, widening supported platforms. But with loose of compatibility with hpenc. Also hpenc won't fail if transmission was truncated (in valid block bounds). It uses ChaCha20-Poly1305, parallelized AEAD encryption of blocks. $ key=`gohpenc -psk` $ echo "message to be transmitted" | gohpenc -k $key > encrypted $ gohpenc -d -k $key < encrypted Blocksize can be specified with -b option (in KiBs). By default it uses 1MiB blocks. By default all CPUs are used, that can be overriden with -c option. If you have got 8 CPUs, then you require (8+1)*1MiB=9MiB of memory for buffers allocation. There is random number generation mode (-r option), that just generates random key and encrypt dummy data in the buffers. gohpenc is free software: see the file COPYING for copying conditions.