J'ai eu un problème similaire. J'ai dû extraire l'attribut signingTime d'une signature PKCS # 7. Je ne pouvais pas trouver la solution ultime sur Internet, mais je pouvais ramasser des morceaux et des pièces de différents endroits et je me suis rendu compte de cela. Peut-être y a-t-il un moyen plus agréable/meilleur/plus sûr, c'est la première fois que je fais cela mais ça semble fonctionner.
Dans une fonction j'ai p_pkcs7SigSize octets de signature PKCS # 7 dans un tampon pointé par const void * p_pkcs7Sig. J'ai eu le temps de signer par ça. J'ai supprimé la gestion des erreurs, n'utilisez pas ce code verbeux!
BIO *v_in = NULL;
PKCS7 *v_p7 = NULL;
STACK_OF(PKCS7_SIGNER_INFO) *v_signerInfos = NULL;
PKCS7_SIGNER_INFO *v_signerInfo = NULL;
ASN1_TYPE *v_asn1SigningTime = NULL;
/* make BIO for input buffer */
v_in = BIO_new_mem_buf((void*)(uintptr_t) p_pkcs7Sig, p_pkcs7SigSize);
/* make a PKCS7 object of it */
v_p7 = d2i_PKCS7_bio(v_in, NULL);
/* get all signer infos */
v_signerInfos = PKCS7_get_signer_info(v_p7);
/* if you need all signer infos then loop through all,
* count you get by k_PKCS7_SIGNER_INFO_num(v_signerInfos)
*/
/* get the first signer info */
v_signerInfo = sk_PKCS7_SIGNER_INFO_value(v_signerInfos,0);
/* get signing time */
v_asn1SigningTime = PKCS7_get_signed_attribute(v_signerInfo, NID_pkcs9_signingTime);
/* You should got a v_asn1SigningTime->type == V_ASN1_UTCTIME,
* if yes then the actual value is in the string buffer at
* v_asn1SigningTime->value.utctime->data
*/
if (v_in)
{
BIO_free_all(v_in);
v_in = NULL;
}
Merci Fudaraku, son fonctionnement. – openssid
Fudaraku, est-il possible d'obtenir du contenu signé de l'image de code signé PKCS7? – openssid
Salut j'ai eu les réponses, Merci pour vos soutiens. "aaa = PKCS7_verify (p7, certs, NULL, dans, NULL, PKCS7_NOVERIFY);" travaille pour la vérification. Pour copier le contenu signé "aaa = PKCS7_verify (p7, certs, NULL, in, out, PKCS7_NOVERIFY);" travaux. char * p; longSize; lSize = BIO_get_mem_data (out, &p); p contient le contenu signé Merci – openssid