You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chacha20-poly1305 decryption works without setting authTag on decypher in v16 #45874
How often does it reproduce? Is there a required condition?
If running the code using the node v16.19.0, the code runs without throwing an error. If I change to node v18.12.1, an error is thrown, as per the docs.
What is the expected behavior?
According to the docs:
[...] the decipher.setAuthTag() method is used to pass in the received authentication tag. If no tag is provided, or if the cipher text has been tampered with, decipher.final() will throw, indicating that the cipher text should be discarded due to failed authentication.[...]
I would expect the code snipped above to fail, since the authTag is not set on the decypher.
What do you see instead?
The code snippet above runs without throwing any error. It successfully prints "Some file".
Additional information
As soon as I switch from node v16 to v18, the code snipped throws an error, as expected. Uncommenting the setAuthTag line makes the code work. If this is expected behavior in v16 (vs v18), I'd be happy to be guided to a doc/changelog that explains this change.
We experience the same. We use similar file encryption/decryption, and what we observed is that with node 16 it just works as it is, but after upgrading to node 18, it still does work, but we do get an error at decryption, which does not affect the decrypted result. See below.
The error I get:
Error: Unsupported state or unable to authenticate data
at Decipheriv._flush (node:internal/crypto/cipher:160:29)
at Decipheriv.final [as _final] (node:internal/streams/transform:132:10)
at callFinal (node:internal/streams/writable:698:12)
at prefinish (node:internal/streams/writable:710:7)
at finishMaybe (node:internal/streams/writable:720:5)
at Decipheriv.Writable.end (node:internal/streams/writable:634:5)
at Readable.onend (node:internal/streams/readable:705:10)
at Object.onceWrapper (node:events:627:28)
at Readable.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at processTicksAndRejections (node:internal/process/task_queues:82:21)
The "unable to authenticate data" error is expected; its absence in v16 isn't. I speculate openssl 1.x didn't enforce it but openssl 3.x does.
(There is some special handling for chacha20-poly1305 inside node itself but v16.19.0 and v18.12.1 are identical in that respect so that can't explain it.)
The best suggestion I have is to special-case it in CipherBase::Final() in src/crypto/crypto_cipher.cc. Someone want to send a pull request?
Activity
mudlee commentedon Dec 16, 2022
We experience the same. We use similar file encryption/decryption, and what we observed is that with node 16 it just works as it is, but after upgrading to node 18, it still does work, but we do get an error at decryption, which does not affect the decrypted result. See below.
The error I get:
Code
Class
Test
AND here
decryptedFileandtestImageare the same, despite I get the error above.panva commentedon Dec 16, 2022
cc @tniessen @nodejs/crypto
mudlee commentedon Jan 12, 2023
any update on this guys? @tniessen @panva? thanks!
bnoordhuis commentedon Jan 12, 2023
The "unable to authenticate data" error is expected; its absence in v16 isn't. I speculate openssl 1.x didn't enforce it but openssl 3.x does.
(There is some special handling for chacha20-poly1305 inside node itself but v16.19.0 and v18.12.1 are identical in that respect so that can't explain it.)
The best suggestion I have is to special-case it in
CipherBase::Final()in src/crypto/crypto_cipher.cc. Someone want to send a pull request?bnoordhuis commentedon Jan 12, 2023
/me raises hand
#46185
crypto: ensure auth tag set for chacha20-poly1305
mudlee commentedon Jan 12, 2023
Will it be available in 18LTS and in 16LTS?
bnoordhuis commentedon Jan 12, 2023
Whatever happened to "thank you, you're awesome, I want to have your babies"?
...Yes, eventually.
mudlee commentedon Jan 12, 2023
Yes, you're right, I'm sorry. Nothing happened to kindness, I just simply forgot it. :) thanks for your good work!
crypto: ensure auth tag set for chacha20-poly1305
crypto: ensure auth tag set for chacha20-poly1305
crypto: ensure auth tag set for chacha20-poly1305
crypto: ensure auth tag set for chacha20-poly1305
crypto: ensure auth tag set for chacha20-poly1305
crypto: ensure auth tag set for chacha20-poly1305