こんにちは@lukaszadrapaさん、
私は CA 自己署名証明書を作成しました。これを使用して、公開キーによって証明書の署名を検証する必要があるアプリケーションを構築する必要があります。
これは私のアプリケーション コードですが、検証失敗のエラー コードが表示されています。
int main(void) {
/* ==========================================================
* 1. 環境とハードウェアセキュリティモジュールを初期化する
* ============================================================ */
終了するまで待機します();
/*NVMカタログ内のECCキーペアのキーハンドル*/
hseKeyHandle_t g2b_keyPairHandler = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM,
0, 0);
/* RAMカタログ内の公開鍵のキーハンドル*/
hseKeyHandle_t g2b_keyPubHandler = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_RAM, 0,
0);
/*キーカタログをフォーマットします */
g2b_HSE_Status = フォーマットキーカタログ(g2b_nvmKeyCatalog_rsa,
g2b_ramKeyCatalog_rsa);
/*フレームワーク内のキーを処理するためのキーアロケータドライバを初期化します*/
g2b_HSE_Status = HKF_Init(g2b_nvmKeyCatalog_rsa、g2b_ramKeyCatalog_rsa);
/* ==========================================================
* 2. CA証明書(PEM形式)をロードする
* ============================================================ */
静的定数char *ca_pem =
"-----証明書開始-----\r\n"
"MIIDhDCCAmygAwIBAgIINYKWbrYzIuEwDQYJKoZIhvcNAQELBQAwSDELMAkGA1UE\r\n"
"BhMCSU4xJzAlBgNVBAoTHkdldHRvYnl0ZSBUZWNobm9sb2dpZXMgUHZ0IEx0ZDEQ\r\n"
「MA4GA1UEAwwHUm9vdF9DQTAeFw0yNTEwMjgxMTQ0MDBaFw0zNTEwMjgxMTQ0MDBa\r\n」
「MEgxCzAJBgNVBAYTAklOMScwJQYDVQQKEx5HZXR0b2J5dGUgVGVjaG5vbG9naWVz\r\n」
「IFB2dCBMdGQxEDAOBgNVBAMMB1Jvb3RfQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\r\n」
"DwAwggEKAoIBAQC5+qqEb+wIDQTG7mgAAgXdH9eM1PjuR34e4qDZDTW7aRukWt0I\r\n"
"Whwef6NbfXV51N/CI+4+446sND4jW8Y4tK8h7i+QJBaTx3sdDyBO3JNthpp/uUtt\r\n"
"+2EUGJP8tKNiP1GhhAjjCMmHwrY3kqyAzXKiCdRFGnWOdQvae6QfgTogDGoXwfEj\r\n"
"IGRfOAXZYOLo/+PTm7AZvF+eWSGnXV3mnvP0FimE/NhBdJwL3T8AoxaMW+jNWRTf\r\n"
"XV5NAZili62U7Va/BdGSw3Vrbf70O3S7nbnQWmHJTKrZT8CjUft2fVXpsNWJ+lAp\r\n"
"cWqRrOtY5Ux5sO2ke5l52vXVrWckwSHESCCjAgMBAAGjcjBwMA8GA1UdEweb/wQF\r\n"
"MAMBAf8wHQYDVR0OBBYEFOaB3KdlqOw1UgifcfwjaAQmyoHjMAsGA1UdDwQEAwIB\r\n"
"BjARBglghkgBhvhCAQEEBAMCAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZp\r\n"
"Y2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAtkNO6oP39gHMzH6Zz53dOs6zqJbrZFab\r\n"
「w1ekLN30hwAbC9v32zp9Elq1zFnZRQAeILOYTpeR2ejD2PgpZATeYhH9w93OgDgx\r\n」
"/CWtDQAcYN/kOvIzAaFGBY3+QoRsOTzggLNNehhO4ZhevBjRS6QWsJDY1RaAp8ss\r\n"
"9QWJnuYtkfUAtfqDD3jGC3VsE9h5dBQn4JG0REeC7go6S7D+ofzzgBDbK/gwdFcr\r\n"
「YnS4e9Mse0D1RQjFEaEKibB0hX7L3uEAzVIDCS2lD/0jzwCLxQ1xhFooVzv5Tb4k\r\n」
「nRr+v8ht/baCu3vtZEeGxM8/IeP3ttjavdNnb/IiCS2nVgj/YfzNDw==\r\n」
"-----証明書終了-----\r\n";
pem_cert_to_der(ca_pem, &ca_der, &ca_der_len);
/* ==========================================================
* 3. CA証明書を解析して重要なフィールドを抽出する
* ============================================================ */
int rc = simple_x509_parse_der(ca_der, ca_der_len, &c);
(rc) の場合 {
/* これが失敗した場合、証明書は不正な形式であるかサポートされていません。*/
}
/* ==========================================================
* 4. 検証のために重要なASN.1スライスを見つける
* ============================================================ */
if (simple_x509_locate_core(ca_der, ca_der_len, &tbs, &tbs_len, &sig_oid,
&sig_oid_len, &sig, &sig_len) != SX_OK) {
printf("コアの検索に失敗しました\n");
-1 を返します。
}
/* ==========================================================
* 5. CA自身の公開鍵を抽出する(SPKIビット -> N、E)
* ============================================================ */
simple_x509_locate_spki_bits(ca_der, ca_der_len, &spki_bits, &spki_len);
rsa_pub_init(&ca_pub);
/* ==========================================================
* 6. 署名アルゴリズムOIDをRSA + SHA256スキームにマッピング
* ============================================================ */
sig_params_t スキーム = map_sig_oid(sig_oid, sig_oid_len);
g2b_HSE_Status = ハッシュ要求(HSE_ACCESS_MODE_ONE_PASS, 0U, 1U,
HSE_HASH_ALGO_SHA2_256, 0U, (uint32_t) tbs_len, tbs, &hash_len, ハッシュ,
txOptions、HSE_SGT_OPTION_NONE);
uint16_t modulus_len = ca_pub.N_len * 8;
uint16_t exponent_len = ca_pub.E_len;
g2b_HSE_Status = LoadRsaPublicKey(&g2b_keyPubHandler, 0U, modulus_len,
ca_pub.N、exponent_len、ca_pub.E);
g2b_HSE_Status = RsaPkcs1v15VerSrv(g2b_keyPubHandler、HSE_HASH_ALGO_SHA2_256、
(uint32_t) tbs_len, tbs, FALSE, HSE_SGT_OPTION_NONE,
(uint32_t) &sig_len, sig);
rsa_pub_free(&ca_pub);
/* デモ終了: 生き続ける*/
のために (;;) {
}
/* 到達不能 */
/* 0を返す; */
}