Allow roundtripping OpenPGP packet format #1642
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The OpenPGP protocol defines different formats to encode packet lengths.
BC supports reading and writing both packet format types, though it is not always clear, how to chose, which format to use.
This PR improves the status quo by defining an enum
PacketFormat
consisting of 3 options:LEGACY
: Always encode packets using the old legacy packet formatCURRENT
: Always encode packets using the current (new) packet formatROUNDTRIP
: Encode packets that were read from anInputStream
the same way they were originally encoded.Further, packets now contain a new flag remembering the packet format they were originally encoded in.
This, and the fact that there is a new
BCPGOutputStream
constructor allowing the user to chose which format encoding strategy to use allows to round-trip packet streams without changing the packet format.getEncoded()
now round-trips the original packet format, but the user can decide, in which format they want to retrieve the packet encoding by calling e.g.getEncoded(PacketFormat.LEGACY)
.The changes were introduced in a backwards compatible way and the tests still run successful.