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.