Sample code for 30+ languages & platforms
Unicode 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 Unicode C Downloads

Unicode C
#include <C_CkStringBuilderW.h>
#include <C_CkCertW.h>
#include <C_CkPublicKeyW.h>
#include <C_CkXmlW.h>
#include <C_CkBinDataW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkStringBuilderW sbCertBase64;
    HCkCertW cert;
    HCkPublicKeyW pubKey;
    int numBits;
    HCkXmlW xml;
    HCkBinDataW binDat;

    success = FALSE;

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

    cert = CkCertW_Create();
    success = CkCertW_LoadFromBase64(cert,CkStringBuilderW_getAsString(sbCertBase64));
    if (success == FALSE) {
        wprintf(L"%s\n",CkCertW_lastErrorText(cert));
        CkStringBuilderW_Dispose(sbCertBase64);
        CkCertW_Dispose(cert);
        return;
    }

    // Get the public key.
    pubKey = CkPublicKeyW_Create();
    CkCertW_GetPublicKey(cert,pubKey);

    numBits = CkPublicKeyW_getKeySize(pubKey);
    wprintf(L"Number of bits = %d\n",numBits);

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

    binDat = CkBinDataW_Create();
    CkBinDataW_AppendEncoded(binDat,CkXmlW_getChildContent(xml,L"Modulus"),L"base64");

    numBits = 8 * CkBinDataW_getNumBytes(binDat);
    wprintf(L"Number of bits = %d\n",numBits);


    CkStringBuilderW_Dispose(sbCertBase64);
    CkCertW_Dispose(cert);
    CkPublicKeyW_Dispose(pubKey);
    CkXmlW_Dispose(xml);
    CkBinDataW_Dispose(binDat);

    }