Skip to content

fs,crypto: AAD decryption of fs stream > 32768 bytes fails #31733

Description

@fenying
  • Node.js Version: v12.15.0
  • OS: Linux 5.5.2-arch1-1
  • Scope (install, code, runtime, meta, other?): code
  • Module (and version) (if relevant): crypto (openssl: '1.1.1d')

With a 32768 bytes message, the AES-128-CCM cipher and decipher both work well.
With a 32769 bytes message, the AES-128-CCM cipher works well, but the decipher failed with a message:

Error: Unsupported state or unable to authenticate data
at Decipheriv._flush (internal/crypto/cipher.js:139:29)
at Decipheriv.prefinish (_stream_transform.js:140:10)
at Decipheriv.emit (events.js:223:5)
at prefinish (_stream_writable.js:670:14)
at finishMaybe (_stream_writable.js:678:5)
at endWritable (_stream_writable.js:698:3)
at Decipheriv.Writable.end (_stream_writable.js:627:5)
at ReadStream.onend (_stream_readable.js:693:10)
at Object.onceWrapper (events.js:312:28)
at ReadStream.emit (events.js:228:7)

I can't understand why. Whatever I change the AAD/IV/authTagLength, it can‘t work.

Here is my code:

// execute after: dd if=/dev/random of=random.bin count=1 bs=32769const$Crypto=require("crypto");const$fs=require("fs");constkey=$Crypto.randomBytes(16);constiv=$Crypto.randomBytes(8);constaad=$Crypto.randomBytes(1);conststream=$Crypto.createCipheriv("aes-128-ccm",key,iv,{authTagLength: 16});stream.setAAD(aad,{plaintextLength: 32769});$fs.createReadStream("./random.bin").pipe(stream).pipe($fs.createWriteStream("./random.bin.ciphertext")).on("finish",function(){console.info("encrypted");constdestream=$Crypto.createDecipheriv("aes-128-ccm",key,iv,{authTagLength: 16});destream.setAAD(aad,{plaintextLength: 32769});destream.setAuthTag(stream.getAuthTag());$fs.createReadStream("./random.bin.ciphertext").pipe(destream).pipe($fs.createWriteStream("./random.bin.plaintext"));});

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues with confirmed bugs.cryptoIssues and PRs related to the crypto subsystem.fsIssues and PRs related to the fs subsystem / file system.streamIssues and PRs related to the stream subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions