Dekódování struktury CERT_INFO

Prvním krokem při dekódování certifikátu BLOB je volání CertCreateCertificateContext, předáním ukazatele na kódovaný certifikát (BLOB). Při volání této funkce vytvoří duplikát zakódovaného certifikátu, vytvoří strukturu typu CERT_CONTEXTa vytvoří strukturu typu CERT_INFO. Jak je znázorněno na následujícím obrázku,kontext certifikátuzahrnuje původní objektu BLOB, strukturu C typu CERT_CONTEXTa strukturu jazyka C typu CERT_INFO. Jeden ze členů struktury CERT_CONTEXT odkazuje na strukturu CERT_INFO a druhý na zakódovaný objekt BLOB certifikátu.

kontext certifikátu

Kódovaný objekt (datový člen) je vždy poskytován jako vstup CryptDecodeObject funkce a výstup je struktura jazyka C, která může nebo nemusí mít zakódované členy v závislosti na tom, jak daleko do procesu jste.

Existuje jeden další člen, který vyžaduje dekódování, a tím je člen Rozšíření. I když není kódován na úrovni CERT_INFO, obsahuje některé kódované informace. Pokud chcete tyto informace dekódovat, pokračujte, jak je znázorněno na následujícím obrázku.

dekódování informací

Ve struktuře CERT_INFO je člen rgExtension ukazatelem na pole struktur CERT_EXTENSION. Každá struktura CERT_EXTENSION má členskou hodnotu Value, která je v kódované podobě a musí být dekódována. Hodnota členu je předána funkci CryptDecodeObject a výstup této funkce závisí na hodnotě členu pszObjId. Všimněte si, že na obrázku jsou vytvořeny dvě různé struktury, jeden typ CERT_BASIC_CONSTRAINTS_INFO a jeden typ CERT_AUTHORITY_KEY_ID_INFO, v závislosti na hodnotě pszObjId.