Sample code for 30+ languages & platforms
Ruby

Get Public Key from CSR

See more CSR Examples

Demonstrates how to get the public key from a CSR.

Chilkat Ruby Downloads

Ruby
require 'chilkat'

success = false

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

pem = Chilkat::CkPem.new()

# No password is required.  Pass an empty password string..
noPassword = ""
success = pem.LoadPemFile("qa_data/csr/csr2.pem",noPassword)
if (success != true)
    print pem.lastErrorText() + "\n";
    exit
end

strBase64 = pem.getEncodedItem("csr","","base64",0)

asn = Chilkat::CkAsn.new()
success = asn.LoadEncoded(strBase64,"base64")
if (success != true)
    print asn.lastErrorText() + "\n";
    exit
end

# Convert the ASN.1 to XML.
xml = Chilkat::CkXml.new()
success = xml.LoadXml(asn.asnToXml())
print xml.getXml() + "\n";
print "----" + "\n";

strModulusHex = xml.getChildContent("bits")
print "strModulusHex = " + strModulusHex + "\n";
print "----" + "\n";

# We need the modulus as base64.
bd = Chilkat::CkBinData.new()
bd.AppendEncoded(strModulusHex,"hex")
modulus64 = bd.getEncoded("base64")
print "modulus64 = " + modulus64 + "\n";
print "----" + "\n";

# Build the XML for the public key.
xmlPubKey = Chilkat::CkXml.new()
xmlPubKey.put_Tag("RSAPublicKey")
xmlPubKey.UpdateChildContent("Modulus",modulus64)
# The RSA exponent will always be decimal 65537 (base64 = AQAB)
xmlPubKey.UpdateChildContent("Exponent","AQAB")

print "RSA public key as XML:" + "\n";
print xmlPubKey.getXml() + "\n";
print "----" + "\n";

# Load the XML into a Chilkat public key object.
pubkey = Chilkat::CkPublicKey.new()
success = pubkey.LoadFromString(xmlPubKey.getXml())
if (success != true)
    print pubkey.lastErrorText() + "\n";
    exit
end

# Show the public key as PEM.
preferPkcs1 = true
print pubkey.getPem(preferPkcs1) + "\n";