Fix encoding of DSA signatures from security tokens

See https://github.com/open-keychain/open-keychain/issues/2108

Closes #2746
Closes #2497
This commit is contained in:
Vincent Breitmoser
2024-02-21 17:19:05 +01:00
parent 90f859749e
commit 3e3d09ae6d

View File

@@ -145,6 +145,13 @@ public class SecurityTokenPsoSignTokenOp {
if (bs[0] == 0x00 && (bs[1] & 0x80) == 0) {
bs = Arrays.copyOfRange(bs, 1, bs.length);
}
// prepend a zero if the MPI value (i.e. high bit of first byte) is negative
if (br[0] < 0) {
br = Arrays.prepend(br, (byte) 0);
}
if (bs[0] < 0) {
bs = Arrays.prepend(bs, (byte) 0);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ASN1OutputStream out = ASN1OutputStream.create(baos);
out.writeObject(new DERSequence(new ASN1Encodable[]{new ASN1Integer(br), new ASN1Integer(bs)}));