Sample code for 30+ languages & platforms
PureBasic

Iterate Keys and Certs in PEM

See more PEM Examples

Demonstrates how to access each of the private keys and certs contained within a PEM.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkCert.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkPem.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    pem.i = CkPem::ckCreate()
    If pem.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Load the PEM from a file.
    ; If the PEM is encrypted, provide a password.  Otherwise pass an empty string for the password.
    password.s = "myPassword"
    success = CkPem::ckLoadPemFile(pem,"../myPemFiles/myPem.pem",password)
    If success = 0
        Debug CkPem::ckLastErrorText(pem)
        CkPem::ckDispose(pem)
        ProcedureReturn
    EndIf

    ; Note: If the app already has the PEM pre-loaded in a string variable, then load it 
    ; by calling LoadPem instead.  
    pemContent.s = "... the PEM contents ..."
    success = CkPem::ckLoadPem(pem,pemContent,password)
    ; Check for success as before..

    ; Iterate over the private keys.
    numPrivateKeys.i = CkPem::ckNumPrivateKeys(pem)
    i.i = 0

    privKey.i = CkPrivateKey::ckCreate()
    If privKey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    While i < numPrivateKeys
        CkPem::ckPrivateKeyAt(pem,i,privKey)
        Debug "Private Key " + Str(i) + " is " + Str(CkPrivateKey::ckBitLength(privKey)) + " in length"
        i = i + 1
    Wend

    ; Iterate over the certificates.
    cert.i = CkCert::ckCreate()
    If cert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    numCerts.i = CkPem::ckNumCerts(pem)
    i = 0
    While i < numCerts
        CkPem::ckCertAt(pem,i,cert)
        Debug "Certificate " + Str(i) + " : " + CkCert::ckSubjectDN(cert)
        i = i + 1
    Wend


    CkPem::ckDispose(pem)
    CkPrivateKey::ckDispose(privKey)
    CkCert::ckDispose(cert)


    ProcedureReturn
EndProcedure