CERT_INFO構造体のエンコード
エンコード プロセスは、「 CERT_INFO構造体のデコード」で説明されているデコード プロセスの逆です。 たとえば、次の手順では、エンコードされた 発行者 を CERT_INFO 構造体に追加します。 手順に従う図も参照してください。
エンコードされた発行者をCERT_INFO構造体に追加するには
- 使用する発行者名を含む文字列を作成します。
- CERT_RDN_ATTR構造体の配列を作成します。この配列は、先ほど作成した発行者名文字列に関する適切な情報を格納するように初期化されます。
- CERT_RDN構造体の配列を作成します。そのうちの 1 つは、初期化CERT_RDN_ATTR構造体の配列に関する情報を持ちます。
- 作成 したばかりの構造体 の配列へのポインターを持つ CERT_NAME_INFO構造体CERT_RDN 作成します。
- CryptEncodeObject を呼び出して、出力でエンコードされた BLOB のサイズを取得し、先ほど作成したCERT_NAME_INFO構造体のアドレスを渡します。
- 出力エンコードされた BLOB にメモリを割り当てます。
- CryptEncodeObject をもう一度呼び出し、同じ情報を渡しますが、割り当てたばかりのメモリのアドレスを渡します。
- CERT_INFO構造体の Issuer.cbData メンバーを手順 5 で返されたサイズに設定し、Issuer.pbData メンバーを手順 6 で取得したアドレスに設定します。 エンコードされた 発行者 BLOB がそこに存在するようになりました。
証明書拡張機能の情報を初期化してエンコードするには、次の手順に従います。 手順に従う図も参照してください。
エンコードされた拡張機能情報をCERT_INFO構造体に追加するには
- 拡張機能情報構造体を作成して初期化します。この例では、 CERT_BASIC_CONSTRAINTS_INFO 構造体です。
- CryptEncodeObject を呼び出し、先ほど作成した構造体のアドレスを渡して、出力でエンコードされた BLOB のサイズを取得します。
- 出力エンコードされた BLOB にメモリを割り当てます。
- 割り当てられたメモリのアドレスを渡す場合を除き、同じ情報を渡して CryptEncodeObject をもう一度呼び出します。
- CERT_EXTENSION構造体の配列を作成します。
- pszObjId が Value に含まれるデータの適切な文字列であり、その値に CryptEncodeObject への呼び出しから出力された暗号化されたデータ BLOB が含まれるように、CERT_EXTENSION構造体のいずれかを初期化します。
- CERT_INFO構造体の rgExtension メンバーを初期化して、 CERT_EXTENSION 構造体の配列 を 指します。