-
Notifications
You must be signed in to change notification settings - Fork 94
fix: Eliminate use of deprecated struct GenericArray #457
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
|
⏳ Code review in progress. Analyzing for code quality issues and best practices. You can monitor the review status in the checks section at the bottom of this pull request. Detailed findings will be posted upon completion. Using Amazon Q Developer for GitHubAmazon Q Developer1 is an AI-powered assistant that integrates directly into your GitHub workflow, enhancing your development process with intelligent features for code development, review, and transformation. Slash Commands
FeaturesAgentic Chat Code Review CustomizationYou can create project-specific rules for Amazon Q Developer to follow:
Example rule: FeedbackTo provide feedback on Amazon Q Developer, create an issue in the Amazon Q Developer public repository. For more detailed information, visit the Amazon Q for GitHub documentation. Footnotes
|
Summary of ChangesHello @Pr0methean, 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! This pull request focuses on refactoring the Highlights
Using Gemini Code AssistThe 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 by creating a comment using either
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 Limitations & Feedback Gemini Code Assist 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. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. 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. Footnotes
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary
This is an excellent modernization PR that successfully eliminates the use of the deprecated GenericArray struct from the AES-CTR implementation. The changes are clean, minimal, and leverage the modern aes crate API effectively.
Key Improvements
- ✅ Removed deprecated dependency: Eliminated
GenericArrayimport and usage - ✅ Simplified API calls: Used direct slice conversions (
key.into()and&mut self.buffer) - ✅ Maintained functionality: All existing behavior preserved while modernizing the code
- ✅ Follows conventions: The PR title correctly follows Conventional Commits format with
fix:prefix
Code Quality
The changes demonstrate good understanding of Rust's type system and the evolution of the aes crate API. The replacements are more idiomatic and eliminate unnecessary wrapper types.
Approval Status: ✅ APPROVED - This change is ready to merge once CI passes.
Coming soon: You'll be able to request the agent to implement changes and create commits on your pull request's source branch. This may trigger any configured CI/CD workflows automatically.
You can disable any CI/CD workflow that you have configured to run on the source branch of the pull request. For more information, see Disabling and enabling a workflow in the GitHub documentation.
| //! See [AesCtrZipKeyStream] for more information. | ||
| use crate::unstable::LittleEndianWriteExt; | ||
| use aes::cipher::generic_array::GenericArray; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good modernization! The removal of the deprecated GenericArray import is appropriate. The aes crate has evolved to accept slice types directly, making the GenericArray wrapper unnecessary.
src/aes_ctr.rs
Outdated
| AesCtrZipKeyStream { | ||
| counter: 1, | ||
| cipher: C::Cipher::new(GenericArray::from_slice(key)), | ||
| cipher: C::Cipher::new(key.into()), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Excellent simplification! Using key.into() is much cleaner than the previous GenericArray::from_slice(key) approach. This leverages Rust's type system to automatically convert the slice to the appropriate type expected by the AES cipher's new method.
| .expect("did not expect u128 le conversion to fail"); | ||
| self.cipher | ||
| .encrypt_block(GenericArray::from_mut_slice(&mut self.buffer)); | ||
| self.cipher.encrypt_block(&mut self.buffer); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perfect modernization! The direct use of &mut self.buffer instead of GenericArray::from_mut_slice(&mut self.buffer) is much more idiomatic. The BlockEncrypt::encrypt_block method now accepts mutable slice references directly, eliminating the need for the GenericArray wrapper.
There was a problem hiding this 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 aims to remove the use of the deprecated GenericArray struct from the aes crate. The changes are mostly correct and follow this goal. However, I found an issue in AesCtrZipKeyStream::new where key.into() is used to initialize the cipher. This is incorrect as it attempts to convert a slice &[u8] into a fixed-size array reference, which is not a valid conversion and will fail to compile. I've provided a suggestion to use try_into() which correctly handles the conversion and maintains the documented panicking behavior for invalid key lengths.
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Chris Hennick <4961925+Pr0methean@users.noreply.github.com>
|
This is currently blocked on RustCrypto/traits#2036. |
No description provided.