Recurro a vosotros porque llevo unos dias bastante desesperado dandole vueltas a un problema que no consigo resolver. Estoy desarrollando una aplicacion en J2ME para validar certificados digitales y no consigo obtener los campos que necesito para sacar el hash o la firma digital del certificado. La libreria que he escogido es IAIK para plataformas moviles (IAIK_ME) con la que en teoria deberia resultar sencillo sacar cada uno de los campos de mi certificado, pero por algun motivo me da error a la hora de obtener el campo toBeSigned en formato byte[]
Código PHP:
String path = "file:///c:/Data/Images/Pictures/certificado_pkc.cer";
try{
byte[] salida = getBytesFromFile(path);
String salidaBase64 = iaik.me.utils.Base64.encode(salida);
System.out.println("Certificado en base64: ");
System.out.println(salidaBase64);
ASN1 tbsCertificate = salidaASN1.getElementAt(0);
byte[] tbsCertificateByte = tbsCertificate.gvByteArray();
System.out.println("Certificado cifrado con KPU: ");
System.out.println("******************************************");
System.out.println("Datos a cifrar: "+iaik.me.utils.Base64.encode(tbsCertificateByte));
X509Certificate certbytes = new X509Certificate(salida);
String algoritmo = certbytes.getSigAlgOID();
PublicKey KPU = certbytes.getPublicKey();
System.out.println(iaik.me.utils.Base64.encode(getHash(algoritmo, tbsCertificateByte, KPU)));
.....
}
Error: java.io.IOException: Not a byte[] type: 16
Que en teoria aparece en el siguiente caso:
Código:
Pero lo raro del asunto es que si cojo el 3er elemento (indice 2 que corresponde a la firma) y lo meto en un array de bytes, no me da ningun problema. Solo me lanza la excepcion cuando cojo el primer o segundo elemento del certificadogvByteArray public byte[] gvByteArray() throws IOException Get the value as a byte array. If this is not an byte[] type, an IOException is thrown.
Código PHP:
ASN1 tbsCertificate = salidaASN1.getElementAt(2);
byte[] tbsCertificateByte = tbsCertificate.gvByteArray();