Sample code for 30+ languages & platforms
Tcl

Get Public Key from CSR

See more CSR Examples

Demonstrates how to get the public key from a CSR.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set pem [new_CkPem]

# No password is required.  Pass an empty password string..
set noPassword ""
set success [CkPem_LoadPemFile $pem "qa_data/csr/csr2.pem" $noPassword]
if {$success != 1} then {
    puts [CkPem_lastErrorText $pem]
    delete_CkPem $pem
    exit
}

set strBase64 [CkPem_getEncodedItem $pem "csr" "" "base64" 0]

set asn [new_CkAsn]

set success [CkAsn_LoadEncoded $asn $strBase64 "base64"]
if {$success != 1} then {
    puts [CkAsn_lastErrorText $asn]
    delete_CkPem $pem
    delete_CkAsn $asn
    exit
}

# Convert the ASN.1 to XML.
set xml [new_CkXml]

set success [CkXml_LoadXml $xml [CkAsn_asnToXml $asn]]
puts [CkXml_getXml $xml]
puts "----"

set strModulusHex [CkXml_getChildContent $xml "bits"]
puts "strModulusHex = $strModulusHex"
puts "----"

# We need the modulus as base64.
set bd [new_CkBinData]

CkBinData_AppendEncoded $bd $strModulusHex "hex"
set modulus64 [CkBinData_getEncoded $bd "base64"]
puts "modulus64 = $modulus64"
puts "----"

# Build the XML for the public key.
set xmlPubKey [new_CkXml]

CkXml_put_Tag $xmlPubKey "RSAPublicKey"
CkXml_UpdateChildContent $xmlPubKey "Modulus" $modulus64
# The RSA exponent will always be decimal 65537 (base64 = AQAB)
CkXml_UpdateChildContent $xmlPubKey "Exponent" "AQAB"

puts "RSA public key as XML:"
puts [CkXml_getXml $xmlPubKey]
puts "----"

# Load the XML into a Chilkat public key object.
set pubkey [new_CkPublicKey]

set success [CkPublicKey_LoadFromString $pubkey [CkXml_getXml $xmlPubKey]]
if {$success != 1} then {
    puts [CkPublicKey_lastErrorText $pubkey]
    delete_CkPem $pem
    delete_CkAsn $asn
    delete_CkXml $xml
    delete_CkBinData $bd
    delete_CkXml $xmlPubKey
    delete_CkPublicKey $pubkey
    exit
}

# Show the public key as PEM.
set preferPkcs1 1
puts [CkPublicKey_getPem $pubkey $preferPkcs1]

delete_CkPem $pem
delete_CkAsn $asn
delete_CkXml $xml
delete_CkBinData $bd
delete_CkXml $xmlPubKey
delete_CkPublicKey $pubkey