RSA Verification of Signature of CA X509 Certificate for authenticity

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

RSA Verification of Signature of CA X509 Certificate for authenticity

Jump to solution
396 Views
R_S002
Contributor III

Hi @lukaszadrapa,

I have created a CA self-signed certificate through which I need to build an application where i need to verify the signature of the certificate by its public key.

This is my application code, and I'm facing a verification failed error code:

int main(void) {
/* ==========================================================
* 1.  Initialize environment and hardware security module
* ========================================================== */
WaitForHSEFWInitToFinish();
 
/*Key Handle for ECC key pair in NVM Catalog*/
hseKeyHandle_t g2b_keyPairHandler = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM,
0, 0);
/*Key Handle for Public Key in RAM catalog*/
hseKeyHandle_t g2b_keyPubHandler = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_RAM, 0,
0);
 
/*Formats the Key catalogs */
g2b_HSE_Status = FormatKeyCatalogs(g2b_nvmKeyCatalog_rsa,
g2b_ramKeyCatalog_rsa);
 
/*Initializes the Key Allocator Driver for Hanfdling Keys in the framework*/
g2b_HSE_Status = HKF_Init(g2b_nvmKeyCatalog_rsa, g2b_ramKeyCatalog_rsa);
 
/* ==========================================================
* 2.  Load the CA certificate (in PEM format)
* ========================================================== */
static const char *ca_pem =
"-----BEGIN CERTIFICATE-----\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"
"BjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZp\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"
"-----END CERTIFICATE-----\r\n";
pem_cert_to_der(ca_pem, &ca_der, &ca_der_len);
 
/* ==========================================================
* 3.  Parse the CA certificate to extract important fields
* ========================================================== */
 
int rc = simple_x509_parse_der(ca_der, ca_der_len, &c);
if (rc) {
/* If this fails, the certificate is malformed or unsupported. */
}
 
/* ==========================================================
* 4.  Locate critical ASN.1 slices for verification
* ========================================================== */
 
if (simple_x509_locate_core(ca_der, ca_der_len, &tbs, &tbs_len, &sig_oid,
&sig_oid_len, &sig, &sig_len) != SX_OK) {
printf("Locate core failed\n");
return -1;
}
 
/* ==========================================================
* 5.  Extract the CA's own public key (SPKI bits -> N, E)
* ========================================================== */
 
simple_x509_locate_spki_bits(ca_der, ca_der_len, &spki_bits, &spki_len);
rsa_pub_init(&ca_pub);
 
/* ==========================================================
* 6.  Map signatureAlgorithm OID → RSA + SHA256 scheme
* ========================================================== */
 
sig_params_t scheme = map_sig_oid(sig_oid, sig_oid_len);
 
g2b_HSE_Status = HashReq(HSE_ACCESS_MODE_ONE_PASS, 0U, 1U,
HSE_HASH_ALGO_SHA2_256, 0U, (uint32_t) tbs_len, tbs, &hash_len, hash,
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);
 
/* Demo end: stay alive*/
for (;;) {
 
}
 
/* Unreachable */
/* return 0; */
}
Tags (2)
0 Kudos
Reply
1 Solution
280 Views
lukaszadrapa
NXP TechSupport
NXP TechSupport

Hi @R_S002 

Just to clarify, have you tried verifying each step of the process individually – maybe by comparing the intermediate results with OpenSSL? That might help pinpoint where things diverge. If possible, could you share the intermediate data (tbs, signature, public key…) you got?

Regards,

Lukas

View solution in original post

3 Replies
281 Views
lukaszadrapa
NXP TechSupport
NXP TechSupport

Hi @R_S002 

Just to clarify, have you tried verifying each step of the process individually – maybe by comparing the intermediate results with OpenSSL? That might help pinpoint where things diverge. If possible, could you share the intermediate data (tbs, signature, public key…) you got?

Regards,

Lukas

276 Views
R_S002
Contributor III

hi @lukaszadrapa 


Actually, I built this complete code step by step, only by verifying every step before moving to the next. Therefore, i dont think/expect there is any issue above the signature verification step.

Also, you can build and run this code directly into the DS, cause intermediate data are pointers. Therefore, copying and pasting them here is tedious.
If you want, I can drop PEM files of the certificate and public key.

It is an urgent development so your quick revert will be really helpful.

0 Kudos
Reply
235 Views
lukaszadrapa
NXP TechSupport
NXP TechSupport

Hi @R_S002 

I saw that you accepted my previous reply as a solution. Does it mean you solved the problem? I wanted to check it today, so please confirm if it is still active issue or not. 

Thanks,

Lukas

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2196962%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERSA%20Verification%20of%20Signature%20of%20CA%20X509%20Certificate%20for%20authenticity%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2196962%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F37795%22%20target%3D%22_blank%22%3E%40lukaszadrapa%3C%2FA%3E%2C%3C%2FP%3E%3CP%3EI%20have%20created%20a%20CA%20self-signed%20certificate%20through%20which%20I%20need%20to%20build%20an%20application%20where%20i%20need%20to%20verify%20the%20signature%20of%20the%20certificate%20by%20its%20public%20key.%3CBR%20%2F%3E%3CBR%20%2F%3EThis%20is%20my%20application%20code%2C%20and%20I'm%20facing%20a%20verification%20failed%20error%20code%3A%3C%2FP%3E%3CDIV%3Eint%20main(void)%20%7B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%201.%26nbsp%3B%20Initialize%20environment%20and%20hardware%20security%20module%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EWaitForHSEFWInitToFinish()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*Key%20Handle%20for%20ECC%20key%20pair%20in%20NVM%20Catalog*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EhseKeyHandle_t%20g2b_keyPairHandler%20%3D%20GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E0%2C%200)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*Key%20Handle%20for%20Public%20Key%20in%20RAM%20catalog*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EhseKeyHandle_t%20g2b_keyPubHandler%20%3D%20GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_RAM%2C%200%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E0)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*Formats%20the%20Key%20catalogs%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eg2b_HSE_Status%20%3D%20FormatKeyCatalogs(g2b_nvmKeyCatalog_rsa%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eg2b_ramKeyCatalog_rsa)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*Initializes%20the%20Key%20Allocator%20Driver%20for%20Hanfdling%20Keys%20in%20the%20framework*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eg2b_HSE_Status%20%3D%20HKF_Init(g2b_nvmKeyCatalog_rsa%2C%20g2b_ramKeyCatalog_rsa)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%202.%26nbsp%3B%20Load%20the%20CA%20certificate%20(in%20PEM%20format)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Estatic%20const%20char%20*ca_pem%20%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22-----BEGIN%20CERTIFICATE-----%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22MIIDhDCCAmygAwIBAgIINYKWbrYzIuEwDQYJKoZIhvcNAQELBQAwSDELMAkGA1UE%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22BhMCSU4xJzAlBgNVBAoTHkdldHRvYnl0ZSBUZWNobm9sb2dpZXMgUHZ0IEx0ZDEQ%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22MA4GA1UEAwwHUm9vdF9DQTAeFw0yNTEwMjgxMTQ0MDBaFw0zNTEwMjgxMTQ0MDBa%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22MEgxCzAJBgNVBAYTAklOMScwJQYDVQQKEx5HZXR0b2J5dGUgVGVjaG5vbG9naWVz%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22IFB2dCBMdGQxEDAOBgNVBAMMB1Jvb3RfQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22DwAwggEKAoIBAQC5%2BqqEb%2BwIDQTG7mgAAgXdH9eM1PjuR34e4qDZDTW7aRukWt0I%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22Whwef6NbfXV51N%2FCI%2B4%2B446sND4jW8Y4tK8h7i%2BQJBaTx3sdDyBO3JNthpp%2FuUtt%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22%2B2EUGJP8tKNiP1GhhAjjCMmHwrY3kqyAzXKiCdRFGnWOdQvae6QfgTogDGoXwfEj%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22IGRfOAXZYOLo%2F%2BPTm7AZvF%2BeWSGnXV3mnvP0FimE%2FNhBdJwL3T8AoxaMW%2BjNWRTf%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22XV5NAZili62U7Va%2FBdGSw3Vrbf70O3S7nbnQWmHJTKrZT8CjUft2fVXpsNWJ%2BlAp%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22cWqRrOtY5Ux5sO2ke5l52vXVrWckwSHESCCjAgMBAAGjcjBwMA8GA1UdEwEB%2FwQF%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22MAMBAf8wHQYDVR0OBBYEFOaB3KdlqOw1UgifcfwjaAQmyoHjMAsGA1UdDwQEAwIB%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22BjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZp%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22Y2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAtkNO6oP39gHMzH6Zz53dOs6zqJbrZFab%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22w1ekLN30hwAbC9v32zp9Elq1zFnZRQAeILOYTpeR2ejD2PgpZATeYhH9w93OgDgx%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22%2FCWtDQAcYN%2FkOvIzAaFGBY3%2BQoRsOTzggLNNehhO4ZhevBjRS6QWsJDY1RaAp8ss%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%229QWJnuYtkfUAtfqDD3jGC3VsE9h5dBQn4JG0REeC7go6S7D%2BofzzgBDbK%2FgwdFcr%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22YnS4e9Mse0D1RQjFEaEKibB0hX7L3uEAzVIDCS2lD%2F0jzwCLxQ1xhFooVzv5Tb4k%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22nRr%2Bv8ht%2FbaCu3vtZEeGxM8%2FIeP3ttjavdNnb%2FIiCS2nVgj%2FYfzNDw%3D%3D%5Cr%5Cn%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%22-----END%20CERTIFICATE-----%5Cr%5Cn%22%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Epem_cert_to_der(ca_pem%2C%20%26amp%3Bca_der%2C%20%26amp%3Bca_der_len)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%203.%26nbsp%3B%20Parse%20the%20CA%20certificate%20to%20extract%20important%20fields%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eint%20rc%20%3D%20simple_x509_parse_der(ca_der%2C%20ca_der_len%2C%20%26amp%3Bc)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eif%20(rc)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20If%20this%20fails%2C%20the%20certificate%20is%20malformed%20or%20unsupported.%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%204.%26nbsp%3B%20Locate%20critical%20ASN.1%20slices%20for%20verification%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eif%20(simple_x509_locate_core(ca_der%2C%20ca_der_len%2C%20%26amp%3Btbs%2C%20%26amp%3Btbs_len%2C%20%26amp%3Bsig_oid%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26amp%3Bsig_oid_len%2C%20%26amp%3Bsig%2C%20%26amp%3Bsig_len)%20!%3D%20SX_OK)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eprintf(%22Locate%20core%20failed%5Cn%22)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Ereturn%20-1%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%205.%26nbsp%3B%20Extract%20the%20CA's%20own%20public%20key%20(SPKI%20bits%20-%26gt%3B%20N%2C%20E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Esimple_x509_locate_spki_bits(ca_der%2C%20ca_der_len%2C%20%26amp%3Bspki_bits%2C%20%26amp%3Bspki_len)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Ersa_pub_init(%26amp%3Bca_pub)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%206.%26nbsp%3B%20Map%20signatureAlgorithm%20OID%20%E2%86%92%20RSA%20%2B%20SHA256%20scheme%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Esig_params_t%20scheme%20%3D%20map_sig_oid(sig_oid%2C%20sig_oid_len)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eg2b_HSE_Status%20%3D%20HashReq(HSE_ACCESS_MODE_ONE_PASS%2C%200U%2C%201U%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EHSE_HASH_ALGO_SHA2_256%2C%200U%2C%20(uint32_t)%20tbs_len%2C%20tbs%2C%20%26amp%3Bhash_len%2C%20hash%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EtxOptions%2C%20HSE_SGT_OPTION_NONE)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Euint16_t%20modulus_len%20%3D%20ca_pub.N_len%20*%208%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Euint16_t%20exponent_len%20%3D%20ca_pub.E_len%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eg2b_HSE_Status%20%3D%20LoadRsaPublicKey(%26amp%3Bg2b_keyPubHandler%2C%200U%2C%20modulus_len%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eca_pub.N%2C%20exponent_len%2C%20ca_pub.E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eg2b_HSE_Status%20%3D%20RsaPkcs1v15VerSrv(g2b_keyPubHandler%2C%20HSE_HASH_ALGO_SHA2_256%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E(uint32_t)%20tbs_len%2C%20tbs%2C%20FALSE%2C%20HSE_SGT_OPTION_NONE%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E(uint32_t)%20%26amp%3Bsig_len%2C%20sig)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Ersa_pub_free(%26amp%3Bca_pub)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20Demo%20end%3A%20stay%20alive*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Efor%20(%3B%3B)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20Unreachable%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20return%200%3B%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%7D%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2198881%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RSA%20Verification%20of%20Signature%20of%20CA%20X509%20Certificate%20for%20authenticity%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2198881%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F253472%22%20target%3D%22_blank%22%3E%40R_S002%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EI%20saw%20that%20you%20accepted%20my%20previous%20reply%20as%20a%20solution.%20Does%20it%20mean%20you%20solved%20the%20problem%3F%20I%20wanted%20to%20check%20it%20today%2C%20so%20please%20confirm%20if%20it%20is%20still%20active%20issue%20or%20not.%26nbsp%3B%3C%2FP%3E%0A%3CP%3EThanks%2C%3C%2FP%3E%0A%3CP%3ELukas%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2198089%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RSA%20Verification%20of%20Signature%20of%20CA%20X509%20Certificate%20for%20authenticity%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2198089%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3Ehi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F37795%22%20target%3D%22_blank%22%3E%40lukaszadrapa%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EActually%2C%20I%20built%20this%20complete%20code%20step%20by%20step%2C%20only%20by%20verifying%20every%20step%20before%20moving%20to%20the%20next.%20Therefore%2C%20i%20dont%20think%2Fexpect%20there%20is%20any%20issue%20above%20the%20signature%20verification%20step.%3C%2FP%3E%3CP%3EAlso%2C%20you%20can%20build%20and%20run%20this%20code%20directly%20into%20the%20DS%2C%20cause%20intermediate%20data%20are%20pointers.%20Therefore%2C%20copying%20and%20pasting%20them%20here%20is%20tedious.%3CBR%20%2F%3EIf%20you%20want%2C%20I%20can%20drop%20PEM%20files%20of%20the%20certificate%20and%20public%20key.%3CBR%20%2F%3E%3CBR%20%2F%3EIt%20is%20an%20urgent%20development%20so%20your%20quick%20revert%20will%20be%20really%20helpful.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2198026%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RSA%20Verification%20of%20Signature%20of%20CA%20X509%20Certificate%20for%20authenticity%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2198026%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F253472%22%20target%3D%22_blank%22%3E%40R_S002%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EJust%20to%20clarify%2C%20have%20you%20tried%20verifying%20each%20step%20of%20the%20process%20individually%20%E2%80%93%20maybe%20by%20comparing%20the%20intermediate%20results%20with%20OpenSSL%3F%20That%20might%20help%20pinpoint%20where%20things%20diverge.%20If%20possible%2C%20could%20you%20share%20the%20intermediate%20data%20(tbs%2C%20signature%2C%20public%20key%E2%80%A6)%20you%20got%3F%3C%2FP%3E%0A%3CP%3ERegards%2C%3C%2FP%3E%0A%3CP%3ELukas%3C%2FP%3E%3C%2FLINGO-BODY%3E