2010-05-12 14 views
1

Je voulais extraire les informations du signataire de l'image de code signée PKCS # 7 en utilisant C/CPP. Je voulais connaître l'API openssl. I am Able to extract Using bouncy castle (CMSSignedData). Veuillez me faire connaître l'API openssl que je peux utiliser dans C/CPP pour extraire les informations de chaque signataire et signataire et vérifier les signataires.PKCS # 7 Code signé Extraction de l'image

Y at-il une API comme X509_LOOKUP_buffer() au lieu de X509_LOOKUP_file() ???

Merci d'avance opensid

Répondre

0

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; 
} 
+0

Merci Fudaraku, son fonctionnement. – openssid

+0

Fudaraku, est-il possible d'obtenir du contenu signé de l'image de code signé PKCS7? – openssid

+0

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