Skip to content

Conversation

@Pr0methean
Copy link
Member

No description provided.

@amazon-q-developer
Copy link
Contributor

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 GitHub

Amazon 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

Command Description
/q <message> Chat with the agent to ask questions or request revisions
/q review Requests an Amazon Q powered code review
/q help Displays usage information

Features

Agentic Chat
Enables interactive conversation with Amazon Q to ask questions about the pull request or request specific revisions. Use /q <message> in comment threads or the review body to engage with the agent directly.

Code Review
Analyzes pull requests for code quality, potential issues, and security concerns. Provides feedback and suggested fixes. Automatically triggered on new or reopened PRs (can be disabled for AWS registered installations), or manually with /q review slash command in a comment.

Customization

You can create project-specific rules for Amazon Q Developer to follow:

  1. Create a .amazonq/rules folder in your project root.
  2. Add Markdown files in this folder to define rules (e.g., cdk-rules.md).
  3. Write detailed prompts in these files, such as coding standards or best practices.
  4. Amazon Q Developer will automatically use these rules when generating code or providing assistance.

Example rule:

All Amazon S3 buckets must have encryption enabled, enforce SSL, and block public access.
All Amazon DynamoDB Streams tables must have encryption enabled.
All Amazon SNS topics must have encryption enabled and enforce SSL.
All Amazon SNS queues must enforce SSL.

Feedback

To 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

  1. Amazon Q Developer uses generative AI. You may need to verify generated code before using it in your environment. See the AWS Responsible AI Policy.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @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 aes_ctr.rs module to remove dependencies on the deprecated GenericArray struct. The primary goal is to ensure compatibility with newer versions of the underlying aes crate and improve the maintainability of the codebase by adopting more current and idiomatic Rust patterns for handling fixed-size arrays in cryptographic operations. The functional behavior of the AES CTR key stream generation remains unchanged.

Highlights

  • Deprecated GenericArray Removal: The pull request eliminates the use of the deprecated GenericArray struct from the aes::cipher module. This involves removing the GenericArray import and updating its instantiation and usage sites.
  • Code Modernization: The changes modernize the src/aes_ctr.rs file by replacing GenericArray::from_slice(key) with key.into() and GenericArray::from_mut_slice(&mut self.buffer) with a direct &mut self.buffer for encrypt_block calls, aligning with current aes crate practices.
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 by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

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 pull request 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 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

  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
Contributor

@amazon-q-developer amazon-q-developer bot left a 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 GenericArray import 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;
Copy link
Contributor

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()),
Copy link
Contributor

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);
Copy link
Contributor

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.

Copy link
Contributor

@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 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.

Pr0methean and others added 2 commits October 26, 2025 14:48
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>
@Pr0methean
Copy link
Member Author

This is currently blocked on RustCrypto/traits#2036.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants