Sample code for 30+ languages & platforms
Visual FoxPro

Get Public Key from CSR

See more CSR Examples

Demonstrates how to get the public key from a CSR.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loPem
LOCAL lcNoPassword
LOCAL lcStrBase64
LOCAL loAsn
LOCAL loXml
LOCAL lcStrModulusHex
LOCAL loBd
LOCAL lcModulus64
LOCAL loXmlPubKey
LOCAL loPubkey
LOCAL lnPreferPkcs1

lnSuccess = 0

* This requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loPem = CreateObject('Chilkat.Pem')

* No password is required.  Pass an empty password string..
lcNoPassword = ""
lnSuccess = loPem.LoadPemFile("qa_data/csr/csr2.pem",lcNoPassword)
IF (lnSuccess <> 1) THEN
    ? loPem.LastErrorText
    RELEASE loPem
    CANCEL
ENDIF

lcStrBase64 = loPem.GetEncodedItem("csr","","base64",0)

loAsn = CreateObject('Chilkat.Asn')
lnSuccess = loAsn.LoadEncoded(lcStrBase64,"base64")
IF (lnSuccess <> 1) THEN
    ? loAsn.LastErrorText
    RELEASE loPem
    RELEASE loAsn
    CANCEL
ENDIF

* Convert the ASN.1 to XML.
loXml = CreateObject('Chilkat.Xml')
lnSuccess = loXml.LoadXml(loAsn.AsnToXml())
? loXml.GetXml()
? "----"

lcStrModulusHex = loXml.GetChildContent("bits")
? "strModulusHex = " + lcStrModulusHex
? "----"

* We need the modulus as base64.
loBd = CreateObject('Chilkat.BinData')
loBd.AppendEncoded(lcStrModulusHex,"hex")
lcModulus64 = loBd.GetEncoded("base64")
? "modulus64 = " + lcModulus64
? "----"

* Build the XML for the public key.
loXmlPubKey = CreateObject('Chilkat.Xml')
loXmlPubKey.Tag = "RSAPublicKey"
loXmlPubKey.UpdateChildContent("Modulus",lcModulus64)
* The RSA exponent will always be decimal 65537 (base64 = AQAB)
loXmlPubKey.UpdateChildContent("Exponent","AQAB")

? "RSA public key as XML:"
? loXmlPubKey.GetXml()
? "----"

* Load the XML into a Chilkat public key object.
loPubkey = CreateObject('Chilkat.PublicKey')
lnSuccess = loPubkey.LoadFromString(loXmlPubKey.GetXml())
IF (lnSuccess <> 1) THEN
    ? loPubkey.LastErrorText
    RELEASE loPem
    RELEASE loAsn
    RELEASE loXml
    RELEASE loBd
    RELEASE loXmlPubKey
    RELEASE loPubkey
    CANCEL
ENDIF

* Show the public key as PEM.
lnPreferPkcs1 = 1
? loPubkey.GetPem(lnPreferPkcs1)

RELEASE loPem
RELEASE loAsn
RELEASE loXml
RELEASE loBd
RELEASE loXmlPubKey
RELEASE loPubkey