Note that there are some explanatory texts on larger screens.

plurals
  1. POReading and Verifying Certificates
    primarykey
    data
    text
    <p>Hi I have two certificates, i.e mycert.crt and root.crt. and I need to verfiy if my certificate is signed by root certificate. I am using the following code to do so using the following code but I am getting an error <strong>Segmentation fault (core dumped)</strong></p> <pre><code>static int verifyCerti (BYTE *cert1, BYTE *cert2, int certlenght1, int certlenght2); int main (int ac, char **av) { FILE *f_in, *f_in2; BYTE *certBuf, *certBuf2; UINT32 certBufLen,certBufLen2; UINT32 certLen,certLen2; int result; //////////// Reading first certificate///// certBufLen = 0; certBuf = malloc (1); //for (i=0; i&lt;nCerts; i++) { if ((f_in = fopen (av[1], "rb")) == NULL) { fprintf (stderr, "Unable to open file %s for input\n", av[1]); exit (1); } fseek (f_in, 0, SEEK_END); certLen = ftell (f_in); fseek (f_in, 0, SEEK_SET); certBuf = realloc (certBuf, certBufLen + certLen); if (fread (certBuf+certBufLen, 1, certLen, f_in) != certLen) { fprintf (stderr, "Failed to read file %s\n", av[1]); exit (1); } if (certBuf[certBufLen] != 0x30) { fprintf (stderr, "Certificate file %s not in binary format\n", av[1]); exit (1); } fclose (f_in); printf ("we reach here %s \n", av[1]); ////////////////Reading second certificate///////////////////////////////////////////////// certBufLen2 = 0; certBuf2 = malloc (1); if ((f_in2 = fopen (av[2], "rb")) == NULL) { fprintf (stderr, "Unable to open file %s for input\n", av[2]); exit (1); } fseek (f_in2, 0, SEEK_END); certLen2 = ftell (f_in2); fseek (f_in2, 0, SEEK_SET); certBuf2 = realloc (certBuf2, certBufLen2 + certLen2); if (fread (certBuf2+certBufLen2, 1, certLen2, f_in2) != certLen2) { fprintf (stderr, "Failed to read file %s\n", av[2]); exit (1); } if (certBuf2[certBufLen2] != 0x30) { fprintf (stderr, "Certificate file %s not in binary format\n", av[2]); exit (1); } fclose (f_in2); printf ("we reach here %s \n", av[2]); if (verifyCerti (certBuf, certBuf2, certBufLen, certBufLen2) &lt; 0) { fprintf (stderr, "Certificate chain is incorrect\n"); exit (1); } } static int verifyCerti (BYTE *cert1, BYTE *cert2, int certLen1, int certLen2) { X509 *root; X509 *mycert; root = d2i_X509 (NULL, (unsigned char const **)&amp;cert2, certLen2); mycert = d2i_X509 (NULL, (unsigned char const **)&amp;cert1, certLen1); //Get root certificate into root //Get mycert into mycert. //Get the public key. EVP_PKEY *pubkey = X509_get_pubkey(root); //verify. result less than or 0 means not verified or some error. int result = X509_verify(mycert, pubkey); //free the public key. EVP_PKEY_free(pubkey); return result; } </code></pre> <p>The error is i think because of X509_verify(), but I am not sure.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload