Skip to content

Conversation

kingstjo
Copy link
Contributor

Issues:

Addresses #CryptoAlg-3382

Description of changes:

This PR implements a minimal EC CLI tool for AWS-LC to provide EC key processing capabilities similar to OpenSSL's openssl ec command. The tool supports essential EC key operations including format conversion between PEM/DER for both private and public keys, using AWS-LC's native EC APIs for proper key handling.

Testing:

  • Unit tests: 13 comprehensive test cases in ec_test.cc covering:
    • Format conversion (PEM ↔ DER) for both private and public keys
    • Round-trip validation ensuring data integrity
    • Error handling for invalid inputs and file operations
    • Cross-compatibility with OpenSSL when environment variables are set
  • Manual verification: Tested format conversion and OpenSSL interoperability during development

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license.

@kingstjo kingstjo requested a review from a team as a code owner August 25, 2025 21:55
@codecov-commenter
Copy link

codecov-commenter commented Aug 25, 2025

Codecov Report

❌ Patch coverage is 73.78049% with 43 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.86%. Comparing base (154edc9) to head (6b751a0).

Files with missing lines Patch % Lines
tool-openssl/ec_test.cc 67.64% 33 Missing ⚠️
tool-openssl/ec.cc 83.87% 10 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2640      +/-   ##
==========================================
+ Coverage   78.81%   78.86%   +0.04%     
==========================================
  Files         667      669       +2     
  Lines      114088   114252     +164     
  Branches    16063    16075      +12     
==========================================
+ Hits        89923    90103     +180     
+ Misses      23390    23375      -15     
+ Partials      775      774       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment on lines +11 to +14
enum Format {
FORMAT_PEM = 1,
FORMAT_DER = 2
};
Copy link
Contributor

Choose a reason for hiding this comment

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

NP: This type is common enough, perhaps it should be shared across the different commands?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

OpenSSL supports PEM, DER, PKCS12, SMIME, ENGINE, MSBLOB, PVK, HTTP, NSS, and TEXT formats. The implementation is located in /apps/opt.c in the opt_format() function at lines 197-272, using a centralized parser with flag-based format selection.
I believe centralizing format parsing across the CLI commands warrants its own PR to consider full implementation of opt_format() for AWS-LC.

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe format parsing can be its own, but at least defining these macros/types could move to common header?

- Create ec.cc with EC-specific key processing
- Support options: -inform, -in, -pubout, -out, -outform
- Handle PEM/DER format conversion for EC private/public keys
- Use EC-specific AWS-LC APIs for proper key handling
- Integrate ecTool into build system (CMakeLists.txt, internal.h, tool.cc)
- Tested format conversion and OpenSSL interoperability

Assisted by Amazon Q
- Create ec_test.cc with cross-compatibility testing
- Test all minimal EC options: -inform, -in, -pubout, -out, -outform
- Include format conversion tests (PEM/DER) and round-trip validation
- Add error handling tests for invalid inputs/outputs
- Support conditional OpenSSL cross-compatibility when env vars set
- Use BIO pattern consistent with other AWS-LC tool tests
- All 13 tests pass including OpenSSL interoperability validation

Assisted by Amazon Q
- Load original keys for comparison in both round-trip tests
- Use BN_cmp() to validate private key values remain identical
- Ensures data integrity through PEM↔DER format conversions
- Use isStringUpperCaseEqual() for case-insensitive format checking
- Simplify error messages to show only supported formats
- Make format validation consistent with other tools
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.

4 participants