Sample code for 30+ languages & platforms
PureBasic

Add Private Key and Certificate to a PEM

See more PEM Examples

Demonstrates how to add certificates and private keys to 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.

    ; The Chilkat PEM class was introduced in v9.5.0.49.  
    ; It requires the bundle to be unlocked, as shown above.
    pem.i = CkPem::ckCreate()
    If pem.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Add the private key found in alice.key to this PEM.
    ; 
    privKey.i = CkPrivateKey::ckCreate()
    If privKey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkPrivateKey::ckLoadAnyFormatFile(privKey,"qa_data/alice.key","")
    If success <> 1
        Debug CkPrivateKey::ckLastErrorText(privKey)
        CkPem::ckDispose(pem)
        CkPrivateKey::ckDispose(privKey)
        ProcedureReturn
    EndIf

    ; Add it to the PEM:
    success = CkPem::ckAddPrivateKey(pem,privKey)

    ; Add the certificate found in alice.crt to this PEM.
    ; 
    cert.i = CkCert::ckCreate()
    If cert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkCert::ckLoadFromFile(cert,"qa_data/alice.crt")
    If success <> 1
        Debug CkCert::ckLastErrorText(cert)
        CkPem::ckDispose(pem)
        CkPrivateKey::ckDispose(privKey)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    ; Add it to the PEM:
    includeCertChain.i = 0
    success = CkPem::ckAddCert(pem,cert,includeCertChain)

    ; Write the PEM containing the private key and certificate.
    ; The private key will be output in PKCS8 encrypted form.
    ; Certificates are never encrypted.

    ; This is the password that will be required to open and access the private key
    ; from the PEM we're about to write..
    password.s = "secret"
    extendedAttrs.i = 0
    noKeys.i = 0
    noCerts.i = 0
    noCaCerts.i = 0
    encryptAlg.s = "aes128"

    pemStr.s = CkPem::ckToPemEx(pem,extendedAttrs,noKeys,noCerts,noCaCerts,encryptAlg,password)
    Debug pemStr


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


    ProcedureReturn
EndProcedure