diff --git a/docs/tutorial/23c.md b/docs/tutorial/23c.md
new file mode 100644
index 0000000..b4967d8
--- /dev/null
+++ b/docs/tutorial/23c.md
@@ -0,0 +1,837 @@
+
+**[Homepage](https://github.com/hakavlad/tird) | [Tutorial](https://github.com/hakavlad/tird/blob/main/docs/tutorial/README.md)**
+
+## Encrypting files with short comments
+
+
+Screenshot
+
+![Screenshot](https://i.imgur.com/jdJxHMI.png)
+
+
+
+Output
+
+```
+$ tird
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 2
+I: action #2: encrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+[06] File to encrypt: file1
+I: path: "file1"; size: 500000 B, 488.3 KiB
+[07] Output (encrypted) file: file2
+I: path: "file2"
+[10] Comments (optional, up to 512 B): This is file1
+I: comments will be shown as: ['This is file1']
+[11] Keyfile path (optional):
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+I: deriving keys...
+I: keys derived in 1.8s
+I: processing, reading, writing...
+I: written 501732 B, 490.0 KiB, 100.0% in 0.0s, avg 82.8 MiB/s
+I: padding location in output file:
+ [16; 273] -- 257 B
+ [500849; 501716] -- 867 B
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+
+
+## Decrypting files with short comments
+
+
+Screenshot
+
+![Screenshot](https://i.imgur.com/AQzOBDF.png)
+
+
+
+Output
+
+```
+$ tird
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 3
+I: action #3: decrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+[06] File to decrypt: file2
+I: path: "file2"; size: 501732 B, 490.0 KiB
+[07] Output (decrypted) file: file3
+I: path: "file3"
+[11] Keyfile path (optional):
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+I: deriving keys...
+I: keys derived in 1.8s
+I: processing, reading, writing...
+I: comments: ['This is file1']
+I: decryption is completed
+I: integrity/authenticity verification: OK
+I: written 500000 B, 488.3 KiB, 100.0% in 0.0s, avg 72.2 MiB/s
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: ^C
+I: caught signal 2
+```
+
+
+### The same with debug messages enabled
+
+Encrypt:
+
+
+Output
+
+```
+$ tird -d
+W: debug messages enabled!
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 2
+I: action #2: encrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+D: Argon2 time cost: 4
+D: max padding size, %: 20
+D: use fake MAC tag: False
+[06] File to encrypt: file1
+D: real path: "/home/user/file1"
+D: opening file "file1" in mode "rb"
+D: opened file (object): <_io.BufferedReader name='file1'>
+I: path: "file1"; size: 500000 B, 488.3 KiB
+D: ciphertext_size: 500512
+D: min_cryptoblob_size: 500608
+D: max_pad: 100101
+D: max_cryptoblob_size: 600709
+[07] Output (encrypted) file: file2
+D: real path: "/home/user/file2"
+D: opening file "file2" in mode "wb"
+D: opened file (object): <_io.BufferedWriter name='file2'>
+I: path: "file2"
+[10] Comments (optional, up to 512 B): This is file1
+D: comments_bytes: [b'This is file1\xff\xb2Q\x11\xa0T@\xf9\xe1\x19\x05\x1ejZ\xc4\xcb\xb4\xfc:\xd3\xa0\xf0\xea\xe2\xb2\xeaf\xca"\xdf\xf5\x89\xe4e\xa7s\xac\xaf]\x93\xa4\x84\xa9\xca\x8c1\xd4\x1f\xa5X\xbd\xf4n\x87\x07YWeQs\xeb\xa4\xc4\x81\x82\xd0N\xe7\xd2 \xef,\x0c\xe1\xdaV\xe5\x1c(\xe9&k\xe0N\xfb\t\xea<4\xcad0m\xa0\xc2\x12\xa8\xc5\xa10#\x7fW\xa8\xea\xee\x8e\n\x10\x17\xfb\x9e\xd2C\t,K\xb2\'\'a\xa6F\x91\xf4[[*\x85\xac\x05f\x8b\x9a&\xa8\xe5\x962\x86=\xc9\xf8\x92\xa7\xd8\x16\x8b\xa8\xa2\xaf\xf1\xac\x84\xa5\x94\xaag\x86\x01\xff\x8fi?<3\x0b\x88\xf7e\xf5u\xbf\xef\xa8)\t\x01\x05q\xa6\xbc\x04\xe0\x07]\x0f\xb8eg9\xb5\xfd\xd0\xdfdj\xac\t\na\xedz\xa4\x9aIWE\xe7\xede\x99\n\xd8{i\x19\x92\\\xeb\xbf\xbdOw\xe4\x8e\xef8\xdf)\x84\xbeQ\xe9B\x96Q\xa8\xe7\x1a\xc0qSm\'GY\xe65\xd5\xd1)A\xb3\x04h\x16\xafWlR\x1cA']
+I: comments will be shown as: ['This is file1']
+D: salt handling...
+D: blake2_salt: e2aa616c07b9a2b457cd2b9945f675a8
+D: argon2_salt: c667adbeeed67b0f720cf511d308bf2e
+D: header_salt: e2aa616c07b9a2b4c667adbeeed67b0f
+D: footer_salt: 57cd2b9945f675a8720cf511d308bf2e
+D: salt handling is completed
+[11] Keyfile path (optional):
+W: entered passphrases will be displayed!
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+D: receiving user input is completed
+D: current positions: if=0, of=0
+D: argon2_password:
+ 1fdefb88d39326b8d383013a2c88622829654dd2792ccd2e70d18ed42675f6164328c1eb1d13b048a8da201af0f6293d8f4bb503722fd0c76f700d12d14f9a56
+I: deriving keys...
+D: argon2_tag:
+ 2465dabe8734feed1b9291434fea1fe1b022f141811c987f68a32f2b1d669e519f9157ebf6e6a377faf9ba30d7547f65c3dc33d6dadd84dbff7154b2ee82ebe11fbacc67bb8aead116b922e65283f82b5f0551addd6250e484f320ea15157b255a27c346522cc21a6e93f3d1e6ce43ae624f153450e0f0d41a24b4c6094be13c
+D: enc_key:
+ 2465dabe8734feed1b9291434fea1fe1b022f141811c987f68a32f2b1d669e51
+D: pad_key:
+ 9f9157ebf6e6a377faf9ba30d7547f65c3dc33d6dadd84dbff7154b2ee82ebe1
+D: mac_key:
+ 1fbacc67bb8aead116b922e65283f82b5f0551addd6250e484f320ea15157b255a27c346522cc21a6e93f3d1e6ce43ae624f153450e0f0d41a24b4c6094be13c
+I: keys derived in 1.8s
+D: pad_from_ciphertext()...
+D: rnd_bytes:
+ 9f9157ebf6e6a377faf9ba30d7547f65
+D: rnd_int:
+ 134913170046853394742690205657416044959
+D: rnd_int/RND_SPACE:
+ 0.396474173104007
+D: header_footer_pads()...
+D: rnd_bytes:
+ c3dc33d6dadd84dbff7154b2ee82ebe1
+D: rnd_int:
+ 300299144438103328872326081479301127363
+D: rnd_int/RND_SPACE:
+ 0.8824998696093915
+D: pad_size: 39688 B, 38.8 KiB
+D: header_pad_size: 36983 B, 36.1 KiB
+D: footer_pad_size: 2705 B, 2.6 KiB
+D: contents size: 500000 B, 488.3 KiB
+D: cryptoblob size: 540296 B, 527.6 KiB
+D: output data size: 540296 B, 527.6 KiB
+I: processing, reading, writing...
+D: writing header_salt...
+D: header_salt is written
+D: current positions: if=0, of=16
+D: handling header padding...
+D: handling header padding is completed
+D: current positions: if=0, of=36999
+D: handling comments...
+D: nonce counter: 1, nonce: 010000000000000000000000
+D: comments (padded binary) found in plain and encrypted forms
+D: encrypted comments (size=512) is written
+D: handling comments is completed
+D: current positions: if=0, of=37511
+D: handling input file contents...
+D: nonce counter: 2, nonce: 020000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=131072, of=168583
+D: nonce counter: 3, nonce: 030000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=262144, of=299655
+D: nonce counter: 4, nonce: 040000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=393216, of=430727
+D: nonce counter: 5, nonce: 050000000000000000000000
+D: contents chunk (size=106784) is written
+D: handling input file contents is completed
+D: encryption is completed
+D: current positions: if=500000, of=537511
+D: handling MAC tag...
+D: found MAC tag:
+ 06746f0757a0283a2e3faba75930efe2fd42d68d6579d6935b666d43206d1fe03aecfab94529beece2a0ab2071cbfeaf4980c10dad5969ae3a2380953c7447a5
+D: fake MAC tag:
+ 59b1986697b876cb4fba1ab91a867b36ab380eedaecfc16f584ee33622c306463d12583704a20fbb41c116c090c468192f935f284f627e8b12436cdc6f132f52
+D: MAC tag to write:
+ 06746f0757a0283a2e3faba75930efe2fd42d68d6579d6935b666d43206d1fe03aecfab94529beece2a0ab2071cbfeaf4980c10dad5969ae3a2380953c7447a5
+D: MAC tag is written
+D: handling MAC tag is completed
+D: current positions: if=500000, of=537575
+D: handling footer padding...
+D: handling footer padding is completed
+D: current positions: if=500000, of=540280
+D: writing footer_salt...
+I: written 540296 B, 527.6 KiB, 100.0% in 0.0s, avg 82.7 MiB/s
+D: footer_salt is written
+D: current positions: if=500000, of=540296
+D: expected output data size: 540296 B
+D: written 540296 B
+I: padding location in output file:
+ [16; 36999] -- 36983 B, 36.1 KiB
+ [537575; 540280] -- 2705 B, 2.6 KiB
+D: closing <_io.BufferedReader name='file1'>
+D: <_io.BufferedReader name='file1'> closed
+D: closing <_io.BufferedWriter name='file2'>
+D: <_io.BufferedWriter name='file2'> closed
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+
+
+Decrypt:
+
+
+Output
+
+```
+$ tird -d
+W: debug messages enabled!
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 3
+I: action #3: decrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+D: Argon2 time cost: 4
+D: max padding size, %: 20
+[06] File to decrypt: file2
+D: real path: "/home/user/file2"
+D: opening file "file2" in mode "rb"
+D: opened file (object): <_io.BufferedReader name='file2'>
+I: path: "file2"; size: 540296 B, 527.6 KiB
+[07] Output (decrypted) file: file3
+D: real path: "/home/user/file3"
+D: opening file "file3" in mode "wb"
+D: opened file (object): <_io.BufferedWriter name='file3'>
+I: path: "file3"
+D: salt handling...
+D: header_salt has been read
+D: current positions: if=16, of=0
+D: move to position 540280 in <_io.BufferedReader name='file2'>
+D: current position: before footer_salt
+D: current positions: if=540280, of=0
+D: footer_salt has been read
+D: current positions: if=540296, of=0
+D: move to position 16 in <_io.BufferedReader name='file2'>
+D: returned to the position after header_salt
+D: current positions: if=16, of=0
+D: blake2_salt: e2aa616c07b9a2b457cd2b9945f675a8
+D: argon2_salt: c667adbeeed67b0f720cf511d308bf2e
+D: header_salt: e2aa616c07b9a2b4c667adbeeed67b0f
+D: footer_salt: 57cd2b9945f675a8720cf511d308bf2e
+D: salt handling is completed
+[11] Keyfile path (optional):
+W: entered passphrases will be displayed!
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+D: receiving user input is completed
+D: current positions: if=16, of=0
+D: argon2_password:
+ 1fdefb88d39326b8d383013a2c88622829654dd2792ccd2e70d18ed42675f6164328c1eb1d13b048a8da201af0f6293d8f4bb503722fd0c76f700d12d14f9a56
+I: deriving keys...
+D: argon2_tag:
+ 2465dabe8734feed1b9291434fea1fe1b022f141811c987f68a32f2b1d669e519f9157ebf6e6a377faf9ba30d7547f65c3dc33d6dadd84dbff7154b2ee82ebe11fbacc67bb8aead116b922e65283f82b5f0551addd6250e484f320ea15157b255a27c346522cc21a6e93f3d1e6ce43ae624f153450e0f0d41a24b4c6094be13c
+D: enc_key:
+ 2465dabe8734feed1b9291434fea1fe1b022f141811c987f68a32f2b1d669e51
+D: pad_key:
+ 9f9157ebf6e6a377faf9ba30d7547f65c3dc33d6dadd84dbff7154b2ee82ebe1
+D: mac_key:
+ 1fbacc67bb8aead116b922e65283f82b5f0551addd6250e484f320ea15157b255a27c346522cc21a6e93f3d1e6ce43ae624f153450e0f0d41a24b4c6094be13c
+I: keys derived in 1.8s
+D: pad_from_padded_ciphertext()...
+D: rnd_bytes:
+ 9f9157ebf6e6a377faf9ba30d7547f65
+D: rnd_int:
+ 134913170046853394742690205657416044959
+D: rnd_int/RND_SPACE:
+ 0.396474173104007
+D: header_footer_pads()...
+D: rnd_bytes:
+ c3dc33d6dadd84dbff7154b2ee82ebe1
+D: rnd_int:
+ 300299144438103328872326081479301127363
+D: rnd_int/RND_SPACE:
+ 0.8824998696093915
+D: pad_size: 39688 B, 38.8 KiB
+D: header_pad_size: 36983 B, 36.1 KiB
+D: footer_pad_size: 2705 B, 2.6 KiB
+D: contents size: 500000 B, 488.3 KiB
+D: cryptoblob size: 540296 B, 527.6 KiB
+D: output data size: 500000 B, 488.3 KiB
+I: processing, reading, writing...
+D: handling header padding...
+D: move to position 36983 in <_io.BufferedReader name='file2'>
+D: handling header padding is completed
+D: current positions: if=36999, of=0
+D: handling comments...
+D: nonce counter: 1, nonce: 010000000000000000000000
+D: comments (padded binary) found in plain and encrypted forms
+I: comments: ['This is file1']
+D: handling comments is completed
+D: current positions: if=37511, of=0
+D: writing output file contents...
+D: nonce counter: 2, nonce: 020000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=168583, of=131072
+D: nonce counter: 3, nonce: 030000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=299655, of=262144
+D: nonce counter: 4, nonce: 040000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=430727, of=393216
+D: nonce counter: 5, nonce: 050000000000000000000000
+D: contents chunk (size=106784) is written
+D: handling input file contents is completed
+D: current positions: if=537511, of=500000
+I: decryption is completed
+D: handling MAC tag...
+D: found MAC tag:
+ 06746f0757a0283a2e3faba75930efe2fd42d68d6579d6935b666d43206d1fe03aecfab94529beece2a0ab2071cbfeaf4980c10dad5969ae3a2380953c7447a5
+D: read MAC tag:
+ 06746f0757a0283a2e3faba75930efe2fd42d68d6579d6935b666d43206d1fe03aecfab94529beece2a0ab2071cbfeaf4980c10dad5969ae3a2380953c7447a5
+D: found_mac_tag is equal to read_mac_tag
+I: integrity/authenticity verification: OK
+D: handling MAC tag is completed
+D: current positions: if=537575, of=500000
+D: handling footer padding...
+D: move to position 2705 in <_io.BufferedReader name='file2'>
+D: handling footer padding is completed
+D: current positions: if=540280, of=500000
+I: written 500000 B, 488.3 KiB, 100.0% in 0.0s, avg 77.5 MiB/s
+D: expected output data size: 500000 B
+D: written 500000 B
+D: closing <_io.BufferedReader name='file2'>
+D: <_io.BufferedReader name='file2'> closed
+D: closing <_io.BufferedWriter name='file3'>
+D: <_io.BufferedWriter name='file3'> closed
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+
+
+---
+
+## Encrypting files with long comments
+
+
+Screenshot
+
+![Screenshot](https://i.imgur.com/eI7EaiV.png)
+
+
+
+Output
+
+```
+$ tird
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 2
+I: action #2: encrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+[06] File to encrypt: file1
+I: path: "file1"; size: 500000 B, 488.3 KiB
+[07] Output (encrypted) file: file2
+I: path: "file2"
+[10] Comments (optional, up to 512 B): Both ciphers are built on a pseudorandom function based on add–rotate–XOR (ARX) operations — 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4–14 cycles per byte in software on modern x86 processors,[5] and reasonable hardware performance. It is not patented, and Bernstein has written several public domain implementations optimized for common architectures.[6]
+I: comments will be shown as: ['Both ciphers are built on a pseudorandom function based on add–rotate–XOR (ARX) operations — 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4–14 cycles p']
+[11] Keyfile path (optional):
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+I: deriving keys...
+I: keys derived in 1.8s
+I: processing, reading, writing...
+I: written 587225 B, 573.5 KiB, 100.0% in 0.0s, avg 89.2 MiB/s
+I: padding location in output file:
+ [16; 65227] -- 65211 B, 63.7 KiB
+ [565803; 587209] -- 21406 B, 20.9 KiB
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+
+
+## Decrypting files with long comments
+
+
+Screenshot
+
+![Screenshot](https://i.imgur.com/8IHo1lK.png)
+
+
+
+Output
+
+```
+$ tird
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 3
+I: action #3: decrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+[06] File to decrypt: file2
+I: path: "file2"; size: 587225 B, 573.5 KiB
+[07] Output (decrypted) file: file3
+I: path: "file3"
+[11] Keyfile path (optional):
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+I: deriving keys...
+I: keys derived in 1.8s
+I: processing, reading, writing...
+I: comments: ['Both ciphers are built on a pseudorandom function based on add–rotate–XOR (ARX) operations — 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4–14 cycles p']
+I: decryption is completed
+I: integrity/authenticity verification: OK
+I: written 500000 B, 488.3 KiB, 100.0% in 0.0s, avg 79.9 MiB/s
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+
+
+### The same with debug messages enabled
+
+Encrypt:
+
+
+Output
+
+```
+$ tird -d
+W: debug messages enabled!
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 2
+I: action #2: encrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+D: Argon2 time cost: 4
+D: max padding size, %: 20
+D: use fake MAC tag: False
+[06] File to encrypt: file1
+D: real path: "/home/user/file1"
+D: opening file "file1" in mode "rb"
+D: opened file (object): <_io.BufferedReader name='file1'>
+I: path: "file1"; size: 500000 B, 488.3 KiB
+D: ciphertext_size: 500512
+D: min_cryptoblob_size: 500608
+D: max_pad: 100101
+D: max_cryptoblob_size: 600709
+[07] Output (encrypted) file: file2
+D: real path: "/home/user/file2"
+D: opening file "file2" in mode "wb"
+D: opened file (object): <_io.BufferedWriter name='file2'>
+I: path: "file2"
+[10] Comments (optional, up to 512 B): Both ciphers are built on a pseudorandom function based on add–rotate–XOR (ARX) operations — 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4–14 cycles per byte in software on modern x86 processors,[5] and reasonable hardware performance. It is not patented, and Bernstein has written several public domain implementations optimized for common architectures.[6]
+D: comments_bytes: [b'Both ciphers are built on a pseudorandom function based on add\xe2\x80\x93rotate\xe2\x80\x93XOR (ARX) operations \xe2\x80\x94 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4\xe2\x80\x9314 cycles p']
+I: comments will be shown as: ['Both ciphers are built on a pseudorandom function based on add–rotate–XOR (ARX) operations — 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4–14 cycles p']
+D: salt handling...
+D: blake2_salt: c14c44f1c3116a7d35d43e3621ff1a32
+D: argon2_salt: 14bbc482bd443c4567af5dc890a286b0
+D: header_salt: c14c44f1c3116a7d14bbc482bd443c45
+D: footer_salt: 35d43e3621ff1a3267af5dc890a286b0
+D: salt handling is completed
+[11] Keyfile path (optional):
+W: entered passphrases will be displayed!
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+D: receiving user input is completed
+D: current positions: if=0, of=0
+D: argon2_password:
+ 01548f2fc5633552cb1fdda45a26950e15a32f6088de01dd91da558d3c90205900839c715dd16c30113e340b7965d9cc6baf5e0fc5a2a39aa015a2d717c68ea9
+I: deriving keys...
+D: argon2_tag:
+ 2c74baa36a5b1cb695256da66eedcf68275640613b4e358787e9bcea6e1e9575b3d5e246a8426304ddac9e4732fcc58b7adb9fa27842b186ea067edbe17a245bcb855bead099eeaa021a931bc431bb46825fdd37f98abeca31a4c68e15786b48cf1f54c5c00df2dcee6af40974e79bd152cc162b808abe1ed7c1f678d51000dd
+D: enc_key:
+ 2c74baa36a5b1cb695256da66eedcf68275640613b4e358787e9bcea6e1e9575
+D: pad_key:
+ b3d5e246a8426304ddac9e4732fcc58b7adb9fa27842b186ea067edbe17a245b
+D: mac_key:
+ cb855bead099eeaa021a931bc431bb46825fdd37f98abeca31a4c68e15786b48cf1f54c5c00df2dcee6af40974e79bd152cc162b808abe1ed7c1f678d51000dd
+I: keys derived in 1.8s
+D: pad_from_ciphertext()...
+D: rnd_bytes:
+ b3d5e246a8426304ddac9e4732fcc58b
+D: rnd_int:
+ 185790689046028175611509678387553818035
+D: rnd_int/RND_SPACE:
+ 0.545989763522466
+D: header_footer_pads()...
+D: rnd_bytes:
+ 7adb9fa27842b186ea067edbe17a245b
+D: rnd_int:
+ 121149162651572383906729856015907412858
+D: rnd_int/RND_SPACE:
+ 0.3560253907594345
+D: pad_size: 54654 B, 53.4 KiB
+D: header_pad_size: 35283 B, 34.5 KiB
+D: footer_pad_size: 19371 B, 18.9 KiB
+D: contents size: 500000 B, 488.3 KiB
+D: cryptoblob size: 555262 B, 542.2 KiB
+D: output data size: 555262 B, 542.2 KiB
+I: processing, reading, writing...
+D: writing header_salt...
+D: header_salt is written
+D: current positions: if=0, of=16
+D: handling header padding...
+D: handling header padding is completed
+D: current positions: if=0, of=35299
+D: handling comments...
+D: nonce counter: 1, nonce: 010000000000000000000000
+D: comments (padded binary) found in plain and encrypted forms
+D: encrypted comments (size=512) is written
+D: handling comments is completed
+D: current positions: if=0, of=35811
+D: handling input file contents...
+D: nonce counter: 2, nonce: 020000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=131072, of=166883
+D: nonce counter: 3, nonce: 030000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=262144, of=297955
+D: nonce counter: 4, nonce: 040000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=393216, of=429027
+D: nonce counter: 5, nonce: 050000000000000000000000
+D: contents chunk (size=106784) is written
+D: handling input file contents is completed
+D: encryption is completed
+D: current positions: if=500000, of=535811
+D: handling MAC tag...
+D: found MAC tag:
+ d4887d560e1f3ba3a72adc8b50bc15d940ca09f48a12eedd6630c47764c0b0d86ffb32f85a4d76e1ff124f58755943caf6d9f577225857ae5b90355902c20484
+D: fake MAC tag:
+ 790582e61a833779fc7259a0cb173ca7c34eb4615587910fd54d1c0fade098cc2cca6e381b613724828a980af1b667018155f4bd43ddc857e31cfa250dc6fb73
+D: MAC tag to write:
+ d4887d560e1f3ba3a72adc8b50bc15d940ca09f48a12eedd6630c47764c0b0d86ffb32f85a4d76e1ff124f58755943caf6d9f577225857ae5b90355902c20484
+D: MAC tag is written
+D: handling MAC tag is completed
+D: current positions: if=500000, of=535875
+D: handling footer padding...
+D: handling footer padding is completed
+D: current positions: if=500000, of=555246
+D: writing footer_salt...
+I: written 555262 B, 542.2 KiB, 100.0% in 0.0s, avg 84.2 MiB/s
+D: footer_salt is written
+D: current positions: if=500000, of=555262
+D: expected output data size: 555262 B
+D: written 555262 B
+I: padding location in output file:
+ [16; 35299] -- 35283 B, 34.5 KiB
+ [535875; 555246] -- 19371 B, 18.9 KiB
+D: closing <_io.BufferedReader name='file1'>
+D: <_io.BufferedReader name='file1'> closed
+D: closing <_io.BufferedWriter name='file2'>
+D: <_io.BufferedWriter name='file2'> closed
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+
+
+Decrypt:
+
+
+Output
+
+```
+$ tird -d
+W: debug messages enabled!
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]: 3
+I: action #3: decrypt file contents
+[02] Use custom settings? (Y/N, default=N):
+I: use custom settings: False
+D: Argon2 time cost: 4
+D: max padding size, %: 20
+[06] File to decrypt: file2
+D: real path: "/home/user/file2"
+D: opening file "file2" in mode "rb"
+D: opened file (object): <_io.BufferedReader name='file2'>
+I: path: "file2"; size: 555262 B, 542.2 KiB
+[07] Output (decrypted) file: file3
+D: real path: "/home/user/file3"
+D: opening file "file3" in mode "wb"
+D: opened file (object): <_io.BufferedWriter name='file3'>
+I: path: "file3"
+D: salt handling...
+D: header_salt has been read
+D: current positions: if=16, of=0
+D: move to position 555246 in <_io.BufferedReader name='file2'>
+D: current position: before footer_salt
+D: current positions: if=555246, of=0
+D: footer_salt has been read
+D: current positions: if=555262, of=0
+D: move to position 16 in <_io.BufferedReader name='file2'>
+D: returned to the position after header_salt
+D: current positions: if=16, of=0
+D: blake2_salt: c14c44f1c3116a7d35d43e3621ff1a32
+D: argon2_salt: 14bbc482bd443c4567af5dc890a286b0
+D: header_salt: c14c44f1c3116a7d14bbc482bd443c45
+D: footer_salt: 35d43e3621ff1a3267af5dc890a286b0
+D: salt handling is completed
+[11] Keyfile path (optional):
+W: entered passphrases will be displayed!
+[12] Passphrase (optional):
+I: receiving keying material is completed
+W: no keyfile or passphrase specified!
+D: receiving user input is completed
+D: current positions: if=16, of=0
+D: argon2_password:
+ 01548f2fc5633552cb1fdda45a26950e15a32f6088de01dd91da558d3c90205900839c715dd16c30113e340b7965d9cc6baf5e0fc5a2a39aa015a2d717c68ea9
+I: deriving keys...
+D: argon2_tag:
+ 2c74baa36a5b1cb695256da66eedcf68275640613b4e358787e9bcea6e1e9575b3d5e246a8426304ddac9e4732fcc58b7adb9fa27842b186ea067edbe17a245bcb855bead099eeaa021a931bc431bb46825fdd37f98abeca31a4c68e15786b48cf1f54c5c00df2dcee6af40974e79bd152cc162b808abe1ed7c1f678d51000dd
+D: enc_key:
+ 2c74baa36a5b1cb695256da66eedcf68275640613b4e358787e9bcea6e1e9575
+D: pad_key:
+ b3d5e246a8426304ddac9e4732fcc58b7adb9fa27842b186ea067edbe17a245b
+D: mac_key:
+ cb855bead099eeaa021a931bc431bb46825fdd37f98abeca31a4c68e15786b48cf1f54c5c00df2dcee6af40974e79bd152cc162b808abe1ed7c1f678d51000dd
+I: keys derived in 1.8s
+D: pad_from_padded_ciphertext()...
+D: rnd_bytes:
+ b3d5e246a8426304ddac9e4732fcc58b
+D: rnd_int:
+ 185790689046028175611509678387553818035
+D: rnd_int/RND_SPACE:
+ 0.545989763522466
+D: header_footer_pads()...
+D: rnd_bytes:
+ 7adb9fa27842b186ea067edbe17a245b
+D: rnd_int:
+ 121149162651572383906729856015907412858
+D: rnd_int/RND_SPACE:
+ 0.3560253907594345
+D: pad_size: 54654 B, 53.4 KiB
+D: header_pad_size: 35283 B, 34.5 KiB
+D: footer_pad_size: 19371 B, 18.9 KiB
+D: contents size: 500000 B, 488.3 KiB
+D: cryptoblob size: 555262 B, 542.2 KiB
+D: output data size: 500000 B, 488.3 KiB
+I: processing, reading, writing...
+D: handling header padding...
+D: move to position 35283 in <_io.BufferedReader name='file2'>
+D: handling header padding is completed
+D: current positions: if=35299, of=0
+D: handling comments...
+D: nonce counter: 1, nonce: 010000000000000000000000
+D: comments (padded binary) found in plain and encrypted forms
+I: comments: ['Both ciphers are built on a pseudorandom function based on add–rotate–XOR (ARX) operations — 32-bit addition, bitwise addition (XOR) and rotation operations. The core function maps a 256-bit key, a 64-bit nonce, and a 64-bit counter to a 512-bit block of the key stream (a Salsa version with a 128-bit key also exists). This gives Salsa20 and ChaCha the unusual advantage that the user can efficiently seek to any position in the key stream in constant time. Salsa20 offers speeds of around 4–14 cycles p']
+D: handling comments is completed
+D: current positions: if=35811, of=0
+D: writing output file contents...
+D: nonce counter: 2, nonce: 020000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=166883, of=131072
+D: nonce counter: 3, nonce: 030000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=297955, of=262144
+D: nonce counter: 4, nonce: 040000000000000000000000
+D: contents chunk (size=131072) is written
+D: current positions: if=429027, of=393216
+D: nonce counter: 5, nonce: 050000000000000000000000
+D: contents chunk (size=106784) is written
+D: handling input file contents is completed
+D: current positions: if=535811, of=500000
+I: decryption is completed
+D: handling MAC tag...
+D: found MAC tag:
+ d4887d560e1f3ba3a72adc8b50bc15d940ca09f48a12eedd6630c47764c0b0d86ffb32f85a4d76e1ff124f58755943caf6d9f577225857ae5b90355902c20484
+D: read MAC tag:
+ d4887d560e1f3ba3a72adc8b50bc15d940ca09f48a12eedd6630c47764c0b0d86ffb32f85a4d76e1ff124f58755943caf6d9f577225857ae5b90355902c20484
+D: found_mac_tag is equal to read_mac_tag
+I: integrity/authenticity verification: OK
+D: handling MAC tag is completed
+D: current positions: if=535875, of=500000
+D: handling footer padding...
+D: move to position 19371 in <_io.BufferedReader name='file2'>
+D: handling footer padding is completed
+D: current positions: if=555246, of=500000
+I: written 500000 B, 488.3 KiB, 100.0% in 0.0s, avg 77.5 MiB/s
+D: expected output data size: 500000 B
+D: written 500000 B
+D: closing <_io.BufferedReader name='file2'>
+D: <_io.BufferedReader name='file2'> closed
+D: closing <_io.BufferedWriter name='file3'>
+D: <_io.BufferedWriter name='file3'> closed
+I: action is completed
+
+ MENU
+ ———————————————————————————————————————————
+ 0. Exit 1. Info
+ 2. Encrypt 3. Decrypt
+ 4. Embed 5. Extract
+ 6. Encrypt & embed 7. Extract & decrypt
+ 8. Create w/ random 9. Overwrite w/ random
+ ———————————————————————————————————————————
+[01] Select an option [0-9]:
+```
+