NAME
csxs-ppcrypt -- simple passphrase-based encryption and decryption
SYNOPSIS
# suggested file name suffix ".csxpp"
csxs-ppcrypt -E myfile.txt myfile.txt.csxpp
echo 'some output' | csxs-ppcrypt -E - somefile.txt.csxpp
csxs-ppcrypt -D myfile.txt.csxspp -
csxs-ppcrypt -D somedir/somefile otherfile.txt
curl https://example.com/super_secret | csxs-ppcrypt -D - -
DESCRIPTION
csxs-ppcrypt encrypts or decrypts data from an input file (or stdin) to an output file (or stdout).
This is a simple demo program. It's not intended for much real-world use, but can still be handy. It is meant to be an example of using Crypt::Sodium::XS::secretstream. Encryption keys are generated from passphrase input using Crypt::Sodium::XS::pwhash.
USAGE
csxs-ppcrypt -h
csxs-ppcrypt -D [-f] <infile> <outfile>
csxs-ppcrypt -E [-f] [-p] <infile> <outfile>
actions:
  -h        print this help message and exit
  -D        decrypt
  -E        encrypt
options:
  -f        force; overwrite an existing <outfile>
  -p        pad; ISO/IEC 7816-4 padding on final block
arguments:
  <infile>  path to input file, or '-' for stdin
  <outfile> path to output file, or '-' for stdout
FILE FORMAT
     4 bytes) magic value "CSXS"
     1 bytes) version number (currently always 1)
     1 bytes) option flags
     2 bytes) RESERVED
     1 bytes) hash primitive id
     1 bytes) secretstream primitive id
     2 bytes) 'bufsize' (blocksize without auth tags) in kilobytes
    16 bytes) salt for pwhash
     8 bytes) opslimit for pwhash
     8 bytes) memlimit for pwhash
    24 bytes) secretstream header
  4113 bytes) 0 or more complete encrypted blocks
              all have tag TAG_MESSAGE
<=4113 bytes) 1 final block
              must have tag TAG_FINAL
              optionally padded to block size
       no further data is allowed.
AUTHOR
Brad Barden <perlmodules@5c30.org>
COPYRIGHT & LICENSE
Copyright (c) 2025 Brad Barden
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.