m18400_init: Computes startKey = SHA-256(password). Sets up HMAC-SHA1 ipad/opad using the 32-byte startKey as the HMAC key. Runs the first PBKDF2 iteration for both blocks (block counter j=1 and j=2, big-endian, appended to the 16-byte salt as 4-byte suffix, total message = 20 bytes). Stores ipad/opad and initial dgst/out into tmps.
m18400_loop: SIMD-vectorized. Iterates remaining PBKDF2-HMAC-SHA1 rounds (LOOP_CNT per kernel invocation) for both blocks. Each iteration feeds the previous HMAC-SHA1 output as the next message, XORs into the running out accumulator. Two blocks processed: i=0 (out[0..4]) and i=5 (out[5..9]).
m18400_comp: Assembles the 32-byte derived key from out[0..7] (byte-swapped). Builds AES-256 decryption key schedule. Decrypts the full ciphertext using AES-256-CBC with the stored IV. Computes SHA-256(plaintext) over the decrypted bytes. Compares the first 4 words of the computed SHA-256 against the stored checksum (digest[0..3]).
ODF 1.1 Blowfish-CFB: Uses SHA-1 start key and SHA-1 checksum with Blowfish cipher. Covered by mode 18600, not parseable here (cipher_type and checksum_type must both be 1).
Non-AES-256 ciphers: Any cipher_type other than 1 is rejected.
Non-SHA-256 checksums: Any checksum_type other than 1 is rejected.
Non-standard key/salt/IV sizes: key_size must be 32, salt_len must be 16, iv_len must be 16. Non-standard profile combinations are rejected.
Iteration counts outside 4–6 digit range: Counts below 1000 or at/above 1000000 fail the token length constraint on field 3 (4–6 decimal digits).
Large ciphertext: Maximum 1024 raw bytes (2048 hex chars) due to the 256 x u32 esalt buffer. Streams longer than this must be truncated by the extractor.
Whole-package encryption: ODF encrypted-package format is not supported by extractors or this module.
Sheet/section protection: Unrelated digest-based protection, not handled by this mode.