Ich versuche das AquaticPrime Framework für Mac nach Windows zu portieren.
Auf dem Mac wird die opsll-Bibliothek verwendet, und ich versuche zu verstehen, wie ich dies auf Windows portieren kann, wo ich die CryptoAPI verwenden muss, nehme ich an.
Ich brauche hauptsächlich den Code für die Validierung der generierten Signatur mit einem bestimmten öffentlichen Schlüssel.
So wird die Überprüfung mit openssl durchgeführt:
Also, wie mache ich das mit CryptoAPI? Ich bin soweit gekommen:
An dieser Stelle rufe ich an:
%Vor%Dies schlägt mit dem Fehlercode ERROR_INVALID_PARAMETER fehl.
Das Seltsame ist, dass ich, als ich versehentlich einen doppelt so großen öffentlichen Schlüssel in der PUBLICKEYBLOB-Struktur gespeichert habe, stattdessen einen NTE_BAD_SIGNATURE-Fehler erhalten habe. Dies könnte darauf hindeuten, dass jetzt der öffentliche Schlüssel, den ich übergebe, korrekt ist.
Warum der Fehler ERROR_INVALID_PARAMETER jetzt? Ich habe überprüft, dass der Hash-Wert korrekt ist, und der Schlüssel scheint auch akzeptiert zu werden. Und der Parameter "sig" ist nur ein Zeiger auf die 128 Bytes der Signatur und sigLen ist 128.
Also, was fehlt mir hier?
OK, ich habe das Problem nach vielen Versuchen gelöst.
Sowohl die Signatur- als auch die öffentlichen Schlüsseldaten, wenn sie in ihrer reinen Bytekettenform vorliegen, müssen umgekehrt werden, d. h. das erste Byte zur letzten Position und so weiter. Dann funktioniert das obige.
Tags und Links openssl rsa cryptoapi aquaticprime