Quiero analizar y verificar una firma separada de OpenPGP usando Bouncycastle. La firma sería algo como esto:

-----BEGIN PGP SIGNATURE-----
Version: fast-openpgp

wsBcBAABCAAQBQJfRm9jCRDzeoZuOgUYnQAAVkoIAEReZ6Pp3SimYKbH+JHzwW8q
LiWeQIPNatFwDQHgD4ipT9aXMaObnXXl83KUQ5lPx8Bw77BxParpUbtCRNTrWoU5
XZ1ikfqzmeVEJrk4YsNKDiBpvjbyF86F8KSkXhwdLWSm1e6yemnXKcTHg2L13AiS
6TIqXXbcRmFF7RTO4DQrjira2YYlW8eHPIcCmOq0YjR4Qpz+R/+3BlfV2TAcL/sd
SeKAczgvdP6CS6be1rPA0nlgw9T853BpgqplQVM30pUhVlni7ga1YRzENm6Qic5A
uEbmPyunim2WHytPuLQq+BQvAq+Wrr2kiM7DhyvYFihDNdFWW67Y+fSlgPxOi/8=
=QKpc
-----END PGP SIGNATURE-----

Y así es como intento crear CMSSignedData en Kotlin:

fun verifyDetached(signatureString: String, dataString: String): Boolean {
    val dataBytes = dataString.toByteArray()
    val signatureBytes = signatureString.toByteArray()
    val processableDataBytes = CMSProcessableByteArray(dataBytes)
    val ci = ContentInfo.getInstance(ASN1Sequence.fromByteArray(signatureBytes))
    val cms = CMSSignedData(processableDataBytes, ci)
    ...
}

Cuando paso todo el bloque de firmas a la función (incluyendo ----- BEGIN PGP SIGNATURE -----) obtengo java.io.IOException: unknown tag 13 encountered.

Cuando elimino los envoltorios de firmas y simplemente paso el contenido de la firma a la función, obtengo java.io.IOException: Extra data detected in stream at org.bouncycastle.asn1.ASN1Primitive.fromByteArray.

Cuando paso directamente signatureBytes al constructor CMSSignedData obtengo java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.DLApplicationSpecific.

¿Cómo debo verificar este tipo de firma usando Bouncycastle?

0
Mohammad Rafigh 26 ago. 2020 a las 17:39

1 respuesta

La mejor respuesta

CMS es completa y totalmente diferente y no está relacionado con PGP. Para PGP, use la implementación BouncyCastle de PGP en bcpg, NO la implementación de CMS en bcpkix. Ver p. Ej. Verificación de la firma PGP mediante BouncyCastle y Cómo firmar y verificar el archivo en JAVA .

1
dave_thompson_085 28 ago. 2020 a las 05:18