Sample code for 30+ languages & platforms
C

Get a Certificate's Key Size

See more Certificates Examples

Demonstrates how to get the RSA key size of a certificate (for example, 1024-bit, 2048-bit, etc.)

Chilkat C Downloads

C
#include <C_CkStringBuilder.h>
#include <C_CkCert.h>
#include <C_CkPublicKey.h>
#include <C_CkXml.h>
#include <C_CkBinData.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkStringBuilder sbCertBase64;
    HCkCert cert;
    HCkPublicKey pubKey;
    int numBits;
    HCkXml xml;
    HCkBinData binDat;

    success = FALSE;

    // For this example, I have a certificate in raw base64 format (not PEM),
    // that looks like this:  "MIIGkDCCBHigAwIBAgIUMDA ... s/iqLsLA=="
    sbCertBase64 = CkStringBuilder_Create();
    success = CkStringBuilder_LoadFile(sbCertBase64,"qa_data/certs/base64Cert.txt","utf-8");

    cert = CkCert_Create();
    success = CkCert_LoadFromBase64(cert,CkStringBuilder_getAsString(sbCertBase64));
    if (success == FALSE) {
        printf("%s\n",CkCert_lastErrorText(cert));
        CkStringBuilder_Dispose(sbCertBase64);
        CkCert_Dispose(cert);
        return;
    }

    // Get the public key.
    pubKey = CkPublicKey_Create();
    CkCert_GetPublicKey(cert,pubKey);

    numBits = CkPublicKey_getKeySize(pubKey);
    printf("Number of bits = %d\n",numBits);

    // If using an older version of Chilkat, the key size can be obtained like this:
    xml = CkXml_Create();
    CkXml_LoadXml(xml,CkPublicKey_getXml(pubKey));

    binDat = CkBinData_Create();
    CkBinData_AppendEncoded(binDat,CkXml_getChildContent(xml,"Modulus"),"base64");

    numBits = 8 * CkBinData_getNumBytes(binDat);
    printf("Number of bits = %d\n",numBits);


    CkStringBuilder_Dispose(sbCertBase64);
    CkCert_Dispose(cert);
    CkPublicKey_Dispose(pubKey);
    CkXml_Dispose(xml);
    CkBinData_Dispose(binDat);

    }