Skip to content

Conversation

c3retc3
Copy link

@c3retc3 c3retc3 commented Jun 4, 2025

As per the Node.js documentation, 'binary' encoding is outdated and can lead to unexpected behavior or data loss.

  1. Replaced deprecated 'binary' string encoding with direct Buffer operations for data key handling.
  2. The encrypt method now passes the dataKey buffer directly to crypto.update.
  3. The decrypt method now correctly reconstructs the dataKey using Buffer.concat.

This improves code quality and future compatibility without altering the cryptographic logic.

@c3retc3 c3retc3 requested a review from a team as a code owner June 4, 2025 08:22
Copy link

google-cla bot commented Jun 4, 2025

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @c3retc3, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Summary of Changes

Hello! Gemini here, providing a summary of this pull request. This PR, authored by c3retc3, aims to refactor the AESTransitCrypto class to eliminate the use of the deprecated 'binary' string encoding in Node.js. As noted in the description, using 'binary' encoding can lead to unexpected behavior or data loss. The changes involve modifying how the encrypted data key is handled during both encryption and decryption, transitioning from string manipulation with 'binary' encoding to direct Buffer operations. This improves code quality and aligns with current Node.js best practices without altering the core cryptographic logic.

Highlights

  • Refactor Deprecated Encoding: Replaces the use of the deprecated 'binary' string encoding with direct Buffer handling for the encrypted data key.
  • Improved Buffer Handling: Modifies the encrypt method to pass the data key as a Buffer directly to crypto.update and updates the decrypt method to reconstruct the decrypted data key using Buffer.concat from Buffer chunks returned by the crypto methods.
  • Code Quality: Enhances code quality and future compatibility by adopting modern Node.js Buffer practices.

Changelog

  • src/crypto/aes_transit_crypto.ts
    • In the encrypt method, removed the toString("binary") call on the data key and the corresponding 'binary' input encoding argument from the masterCipher.update call (line 23). The dataKey is now passed directly as a Buffer.
    • In the decrypt method, refactored the data key decryption logic (lines 53-56). Instead of concatenating 'binary' strings from masterCipher.update and masterCipher.final and then creating a Buffer, the methods are now called without an output encoding to return Buffers directly. These Buffer chunks are collected and concatenated using Buffer.concat to form the final byteKey Buffer.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.


Old 'binary' string,
A source of bugs it would bring.
Buffers now take flight,
Making crypto feel right,
A cleaner, safer thing.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request effectively addresses the deprecation of the 'binary' encoding in Node.js by refactoring the data key handling to use direct Buffer operations. The changes in both the encrypt and decrypt methods are clear, correct, and improve the codebase's robustness and future compatibility. Well done on identifying and fixing this deprecated usage!

I have one suggestion for a minor improvement to enhance type safety.

Summary of Findings

  • Explicit Typing for Array: In src/crypto/aes_transit_crypto.ts, the decryptedKeyChunks array could benefit from explicit typing (e.g., Buffer[]) for improved clarity and type safety, aligning with TypeScript best practices.

Merge Readiness

The pull request is well-structured and addresses an important deprecation. The core logic is sound. I've made one medium severity suggestion regarding explicit typing for better maintainability. Addressing this point would make the code even more robust.

As a reviewer, I am not authorized to approve pull requests. Please ensure this change is reviewed and approved by a maintainer before merging. I recommend addressing the suggested change before merging.

Copy link
Author

@c3retc3 c3retc3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explicitly declaring Buffer[] to prevent accidental pushes or incorrect types during maintenance

As per the Node.js documentation, 'binary' encoding is outdated and can lead to unexpected behavior or data loss.

1. Replaced deprecated 'binary' string encoding with direct Buffer operations for data key handling.
2. The encrypt method now passes the dataKey buffer directly to crypto.update.
3. The decrypt method now correctly reconstructs the dataKey using Buffer.concat.

This improves code quality and future compatibility without altering the cryptographic logic.
c3retc3 added 2 commits June 4, 2025 18:02
Explicitly declaring it as Buffer[] enhances code readability and type safety from the point of initialization
@c3retc3
Copy link
Author

c3retc3 commented Jun 8, 2025

Hello everyone, could someone please take a look at this PR on deprecated 'binary' string encoding, or point me to the right reviewer?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant