-
Notifications
You must be signed in to change notification settings - Fork 76
Support getting encryption context on a message #526
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
Support getting encryption context on a message #526
Conversation
This reverts commit e8e3e23.
e53f8c6 to
5775987
Compare
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.
Pull request overview
This PR adds support for retrieving encryption context from messages in the Pulsar C++ client, enabling applications to inspect encryption metadata and manually decrypt messages when ConsumerCryptoFailureAction::CONSUME is configured. The implementation introduces a new public EncryptionContext class that encapsulates encryption keys, parameters, algorithm, and compression information, along with a flag indicating decryption failure status.
Key changes:
- Introduces
EncryptionContextclass andEncryptionKeystruct as public API types to expose encryption metadata - Adds
Message::getEncryptionContext()method returningstd::optional<const EncryptionContext*>to access encryption context - Refactors
MessageCryptoto useEncryptionContextinstead of protobuf types for better API abstraction
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| include/pulsar/EncryptionContext.h | New public header defining EncryptionContext and EncryptionKey with methods to access encryption metadata |
| include/pulsar/Message.h | Adds getEncryptionContext() method and includes <optional> for C++17 support |
| lib/EncryptionContext.cc | Implementation of EncryptionContext constructor that converts protobuf metadata to public API types |
| lib/Message.cc | Implements getEncryptionContext() returning pointer to optional encryption context |
| lib/MessageImpl.h | Adds encryptionContext_ member to store optional encryption context in message implementation |
| lib/MessageCrypto.h | Updates method signatures to accept EncryptionContext and EncryptionKey instead of protobuf types |
| lib/MessageCrypto.cc | Refactors decryption methods to work with EncryptionContext API, converting from protobuf field access to method calls |
| lib/ConsumerImpl.h | Introduces DecryptionResult enum to distinguish between successful decryption, consuming encrypted, and failure states |
| lib/ConsumerImpl.cc | Creates encryption context before decryption, sets isDecryptionFailed_ flag for consumed encrypted messages, and propagates context to Message |
| lib/Commands.cc | Propagates encryption context from batched messages to individual deserialized messages |
| tests/EncryptionTest.cc | New comprehensive test demonstrating manual decryption using encryption context when decryption is disabled |
| tests/BasicEndToEndTest.cc | Adds assertion to verify encryption context availability and correctness in existing encryption test |
| win-examples/CMakeLists.txt | Sets C++17 standard required for std::optional support in Windows examples |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Zike Yang <zike@apache.org>
No description provided.