• XChaCha20 Python3 CLI tool

    From Stefan Claas@21:1/5 to All on Sun Sep 8 17:31:34 2024
    Hi all,

    DJB's XChaCha20 stream cipher is pretty cool for Text messages (SMS),
    if you have also a proper encoder for the binary output.

    So I decided to convert my Go Code to Python3.

    Here is the program to play with, base64 encoded.

    $ ./xchacha20.py
    Error: Incorrect number of arguments
    Usage: ./xchacha20.py <keyfile> <noncefile> < infile > outfile

    XChaCha20 encryption/decryption tool

    Arguments:
    keyfile Path to the file containing the key in hexadecimal format
    noncefile Path to the file containing the nonce in hexadecimal format

    The program reads from stdin and writes to stdout. Use input/output redirection for files.

    Examples:
    Encryption: ./xchacha20.py key.hex nonce.hex < plaintext.txt > encrypted.bin
    Decryption: ./xchacha20.py key.hex nonce.hex < encrypted.bin > decrypted.txt

    Note: The key should be 32 hex bytes (64 characters) long.
    The nonce should be 24 hex bytes (48 characters) long.

    IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHN5cwppbXBvcnQgb3MKZnJvbSBDcnlwdG8u Q2lwaGVyIGltcG9ydCBDaGFDaGEyMAoKZGVmIHJlYWRfaGV4X2ZpbGUoZmlsZW5hbWUpOgogICAg d2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CiAgICAgICAgaGV4X3N0cmluZyA9IGYucmVh ZCgpLnN0cmlwKCkKICAgIHJldHVybiBieXRlcy5mcm9taGV4KGhleF9zdHJpbmcpCgpkZWYgcHJp bnRfdXNhZ2UoKToKICAgIHByaW50KGYiIiJVc2FnZToge3N5cy5hcmd2WzBdfSA8a2V5ZmlsZT4g PG5vbmNlZmlsZT4gPCBpbmZpbGUgPiBvdXRmaWxlCgpYQ2hhQ2hhMjAgZW5jcnlwdGlvbi9kZWNy eXB0aW9uIHRvb2wKCkFyZ3VtZW50czoKICBrZXlmaWxlICAgIFBhdGggdG8gdGhlIGZpbGUgY29u dGFpbmluZyB0aGUga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdAogIG5vbmNlZmlsZSAgUGF0aCB0 byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBub25jZSBpbiBoZXhhZGVjaW1hbCBmb3JtYXQKClRo ZSBwcm9ncmFtIHJlYWRzIGZyb20gc3RkaW4gYW5kIHdyaXRlcyB0byBzdGRvdXQuIFVzZSBpbnB1 dC9vdXRwdXQgcmVkaXJlY3Rpb24gZm9yIGZpbGVzLgoKRXhhbXBsZXM6CiAgRW5jcnlwdGlvbjog e3N5cy5hcmd2WzBdfSBrZXkuaGV4IG5vbmNlLmhleCA8IHBsYWludGV4dC50eHQgPiBlbmNyeXB0 ZWQuYmluCiAgRGVjcnlwdGlvbjoge3N5cy5hcmd2WzBdfSBrZXkuaGV4IG5vbmNlLmhleCA8IGVu Y3J5cHRlZC5iaW4gPiBkZWNyeXB0ZWQudHh0CgpOb3RlOiBUaGUga2V5IHNob3VsZCBiZSAzMiBo ZXggYnl0ZXMgKDY0IGNoYXJhY3RlcnMpIGxvbmcuCiAgICAgIFRoZSBub25jZSBzaG91bGQgYmUg MjQgaGV4IGJ5dGVzICg0OCBjaGFyYWN0ZXJzKSBsb25nLgoiIiIsIGZpbGU9c3lzLnN0ZGVycikK CmRlZiBtYWluKCk6CiAgICBpZiBsZW4oc3lzLmFyZ3YpICE9IDM6CiAgICAgICAgcHJpbnQoIkVy cm9yOiBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIsIGZpbGU9c3lzLnN0ZGVycikKICAg ICAgICBwcmludF91c2FnZSgpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBrZXlfZmlsZSA9IHN5 cy5hcmd2WzFdCiAgICBub25jZV9maWxlID0gc3lzLmFyZ3ZbMl0KCiAgICB0cnk6CiAgICAgICAg a2V5ID0gcmVhZF9oZXhfZmlsZShrZXlfZmlsZSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK ICAgICAgICBwcmludChmIkVycm9yIHJlYWRpbmcga2V5IGZpbGU6IHtlfSIsIGZpbGU9c3lzLnN0 ZGVycikKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIHRyeToKICAgICAgICBub25jZSA9IHJlYWRf aGV4X2ZpbGUobm9uY2VfZmlsZSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBw cmludChmIkVycm9yIHJlYWRpbmcgbm9uY2UgZmlsZToge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQog ICAgICAgIHN5cy5leGl0KDEpCgogICAgaWYgbGVuKGtleSkgIT0gMzI6CiAgICAgICAgcHJpbnQo ZiJFcnJvcjogSW52YWxpZCBrZXkgc2l6ZS4gRXhwZWN0ZWQgMzIgaGV4IGJ5dGVzLCBnb3Qge2xl bihrZXkpfSBieXRlcyIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICBzeXMuZXhpdCgxKQoKICAg IGlmIGxlbihub25jZSkgIT0gMjQ6CiAgICAgICAgcHJpbnQoZiJFcnJvcjogSW52YWxpZCBub25j ZSBzaXplLiBFeHBlY3RlZCAyNCBoZXggYnl0ZXMsIGdvdCB7bGVuKG5vbmNlKX0gYnl0ZXMiLCBm aWxlPXN5cy5zdGRlcnIpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBjaXBoZXIgPSBDaGFDaGEy MC5uZXcoa2V5PWtleSwgbm9uY2U9bm9uY2UpCgogICAgd2hpbGUgVHJ1ZToKICAgICAgICBjaHVu ayA9IHN5cy5zdGRpbi5idWZmZXIucmVhZCg4MTkyKQogICAgICAgIGlmIG5vdCBjaHVuazoKICAg ICAgICAgICAgYnJlYWsKICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShjaXBoZXIuZW5j cnlwdChjaHVuaykpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCg==


    $ openssl rand -hex 32 > key
    $ openssl rand -hex 24 > nonce
    $ echo -n 'Hello World!' | xchacha20 key nonce | hexdump -Cv
    00000000 01 eb 7f 2e d5 e9 a4 e0 c8 e4 e2 d6 |............|
    0000000c

    --
    Regards
    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Claas@21:1/5 to Stefan Claas on Sun Sep 8 17:48:25 2024
    Stefan Claas wrote:

    Hi all,

    DJB's XChaCha20 stream cipher is pretty cool for Text messages (SMS),
    if you have also a proper encoder for the binary output.

    So I decided to convert my Go Code to Python3.

    Here is the program to play with, base64 encoded.

    Forgot to mention:

    pip3 install pycryptodome

    --
    Regards
    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Claas@21:1/5 to Stefan Claas on Sun Sep 8 19:03:11 2024
    Stefan Claas wrote:
    Stefan Claas wrote:
    Stefan Claas wrote:

    Hi all,

    DJB's XChaCha20 stream cipher is pretty cool for Text messages (SMS),
    if you have also a proper encoder for the binary output.

    So I decided to convert my Go Code to Python3.

    Here is the program to play with, base64 encoded.

    Just for fun :-):

    $ echo -n 'Test' | xchacha20 key nonce | armor
    -----BEGIN PGP MESSAGE-----

    eQyt7Q==
    =yEnM
    -----END PGP MESSAGE-----


    And a padded SMS in two fiver groups, for easy and error
    free typing and reading with a dumb phone. :-)

    $ echo -n 'Test' | mp | xchacha20 key nonce2 | az | ug -g
    Data successfully padded.
    Original size: 4 bytes
    Padded size: 5 bytes
    OCMOM PCSKG

    --
    Regards
    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Claas@21:1/5 to Stefan Claas on Sun Sep 8 18:54:28 2024
    Stefan Claas wrote:
    Stefan Claas wrote:

    Hi all,

    DJB's XChaCha20 stream cipher is pretty cool for Text messages (SMS),
    if you have also a proper encoder for the binary output.

    So I decided to convert my Go Code to Python3.

    Here is the program to play with, base64 encoded.

    Just for fun :-):

    $ echo -n 'Test' | xchacha20 key nonce | armor
    -----BEGIN PGP MESSAGE-----

    eQyt7Q==
    =yEnM
    -----END PGP MESSAGE-----

    --
    Regards
    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Phil Carmody@21:1/5 to Stefan Claas on Mon Oct 7 17:17:02 2024
    Stefan Claas <pollux@tilde.club> writes:
    Hi all,

    DJB's XChaCha20 stream cipher is pretty cool for Text messages (SMS),
    if you have also a proper encoder for the binary output.

    So I decided to convert my Go Code to Python3.

    Here is the program to play with, base64 encoded.

    $ ./xchacha20.py
    Error: Incorrect number of arguments
    Usage: ./xchacha20.py <keyfile> <noncefile> < infile > outfile

    XChaCha20 encryption/decryption tool

    Arguments:
    keyfile Path to the file containing the key in hexadecimal format
    noncefile Path to the file containing the nonce in hexadecimal format

    Why is the nonce in a file - are you planning on using it multiple
    times?

    Phil
    --
    We are no longer hunters and nomads. No longer awed and frightened, as we have gained some understanding of the world in which we live. As such, we can cast aside childish remnants from the dawn of our civilization.
    -- NotSanguine on SoylentNews, after Eugen Weber in /The Western Tradition/

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Claas@21:1/5 to Phil Carmody on Mon Oct 7 16:22:08 2024
    Phil Carmody wrote:
    Stefan Claas <pollux@tilde.club> writes:
    Hi all,

    DJB's XChaCha20 stream cipher is pretty cool for Text messages (SMS),
    if you have also a proper encoder for the binary output.

    So I decided to convert my Go Code to Python3.

    Here is the program to play with, base64 encoded.

    $ ./xchacha20.py
    Error: Incorrect number of arguments
    Usage: ./xchacha20.py <keyfile> <noncefile> < infile > outfile

    XChaCha20 encryption/decryption tool

    Arguments:
    keyfile Path to the file containing the key in hexadecimal format
    noncefile Path to the file containing the nonce in hexadecimal format

    Why is the nonce in a file - are you planning on using it multiple
    times?

    I always use nonces from files and for each message a new one. I have
    my nonce rachtet program 'nora' which calculates them, without needing
    to transfer them.

    https://github.com/706f6c6c7578/nora

    --
    Regards
    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)