Migrate JCA signing from DER encoding to P1363 encoding #155
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.
DER-encoded ECDSA signatures are an ASN.1 structure, with variable length integer representation. P1363-encoded ECDSA signatures are fixed-length concatenated integers with no additional structure.
This means that P1363 -> DER is easy, while DER -> P1363 is impossible without additional information (such as the curve used).
We currently use the
RawByteEncodable
marker interface to indicate whether a given (EC) signature can be encoded to P1363.The JCA extensions in Indispensable currently produce and consume DER signatures. This is awkward, since it means that
CryptoSignature.parseFromJCA
cannot returnRawByteEncodable
signatures -- not even in the RSA case!This PR fixes this. It declares the individual parts of the signing process as hazmat (since they are encoding dependent) and switches them to use P1363. The stable API going forward for signing ops using the JCA will be
.signWithJCA
, which guarantees that the signature object and signature byte decoding use the same encoding (whatever that may be on any given platform).