PureBasic
PureBasic
Convert PFX to JWK Set
See more PFX/P12 Examples
Demonstrates how to convert a PFX (.pfx or .p12) to a JWK Set (a JSON Web Key Set).Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJavaKeyStore.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkPfx.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
pfx.i = CkPfx::ckCreate()
If pfx.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPfx::ckLoadPfxFile(pfx,"qa_data/pfx/myEccCert.p12","MY_ECC_PFX_PASSWORD")
If success = 0
Debug CkPfx::ckLastErrorText(pfx)
CkPfx::ckDispose(pfx)
ProcedureReturn
EndIf
; To get the contents of the PFX in JWK Set form, we must first convert
; to a Java KeyStore object:
; The alias will become the key id ("kid") the the JWK Set.
; The password is an input argument that becomes the password for the JavaKeyStore.
alias.s = "my_ecc_key"
password.s = "secret123"
jks.i = CkJavaKeyStore::ckCreate()
If jks.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPfx::ckToJksObj(pfx,alias,password,jks)
If success = 0
Debug CkPfx::ckLastErrorText(pfx)
CkPfx::ckDispose(pfx)
CkJavaKeyStore::ckDispose(jks)
ProcedureReturn
EndIf
sbJwkSet.i = CkStringBuilder::ckCreate()
If sbJwkSet.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; The ToJwkSet method writes to sbJwkSet.
success = CkJavaKeyStore::ckToJwkSet(jks,password,sbJwkSet)
If success = 0
Debug CkJavaKeyStore::ckLastErrorText(jks)
CkPfx::ckDispose(pfx)
CkJavaKeyStore::ckDispose(jks)
CkStringBuilder::ckDispose(sbJwkSet)
ProcedureReturn
EndIf
jwkSet.i = CkJsonObject::ckCreate()
If jwkSet.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoadSb(jwkSet,sbJwkSet)
CkJsonObject::setCkEmitCompact(jwkSet, 0)
Debug CkJsonObject::ckEmit(jwkSet)
; The output is:
; (Line breaks in the "x5c" base64 data were added for readability)
; {
; "keys": [
; {
; "kty": "EC",
; "crv": "P-384",
; "x": "uB62JGMJKXnp1PNsOOIYKGhrzfLev3O-UuthL6UzEqNNDTd8dEYMUQP_DTS3qk98",
; "y": "gyQEFxdmZUsPF0fFokkZZ1cV6z7QD3MsPvSjrBzB0GUB3r8CLnDK_F4pF2Q995hr",
; "d": "ugTy2ZpuQqv1uQyLSgz1SPRvngzrd5vLyzU2ICaJd25zZRIxxlNR-uFo9UWC6llt",
; "kid": "my_ecc_key",
; "x5c": [
; "MIICzjCCAlOgAwIBAgIETULS8zAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50
; cnVzdCwgSW5jLjEfMB0GA1UECxMWRm9yIFRlc3QgUHVycG9zZXMgT25seTElMCMGA1UEAxMcRW50cnVzdCBFQ0MgR
; GVtb25zdHJhdGlvbiBDQTAeFw0xNjAzMTgxMjM5MzFaFw0xNjA1MTcxMzA5MzFaMFgxHzAdBgNVBAsTFkZvciBUZX
; N0IFB1cnBvc2VzIE9ubHkxHTAbBgNVBAsTFFBlcnNvbmEgTm90IFZlcmlmaWVkMRYwFAYDVQQDEw1DaGlsa2F0IEF
; kbWluMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuB62JGMJKXnp1PNsOOIYKGhrzfLev3O+UuthL6UzEqNNDTd8dEYM
; UQP/DTS3qk98gyQEFxdmZUsPF0fFokkZZ1cV6z7QD3MsPvSjrBzB0GUB3r8CLnDK/F4pF2Q995hro4HYMIHVMA4GA
; 1UdDwEB/wQEAwIDiDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cD
; ovL2NybC5lbnRydXN0LmNvbS9DUkwvZWNjZGVtby5jcmwwIAYDVR0RBBkwF4EVYWRtaW5AY2hpbGthdHNvZnQuY29
; tMB8GA1UdIwQYMBaAFCQFS+Fkghr4Ccz7eHkh+nDmkzLqMB0GA1UdDgQWBBTB82fmvrdG2iX5uS/agVW3L4DisjAJ
; BgNVHRMEAjAAMAoGCCqGSM49BAMDA2kAMGYCMQCHILghMprWoYPEp9mCE+tpVE7vYwkFV3m0RDzT2BSUezL8Ky78X
; Nk+XPqSB2biT70CMQDCase1oaPY4AxCmjB+rEB1ir+QS8mrtF+iCSqHVv1aIxT6abQL57BZSdvwIm/TT8o=",
; "MIICljCCAhugAwIBAgIETUHhezAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50
; cnVzdCwgSW5jLjEfMB0GA1UECxMWRm9yIFRlc3QgUHVycG9zZXMgT25seTElMCMGA1UEAxMcRW50cnVzdCBFQ0MgR
; GVtb25zdHJhdGlvbiBDQTAeFw0xMTAxMjcyMDQ5NTRaFw0zNjAxMjcyMTE5NTRaMG0xCzAJBgNVBAYTAlVTMRYwFA
; YDVQQKEw1FbnRydXN0LCBJbmMuMR8wHQYDVQQLExZGb3IgVGVzdCBQdXJwb3NlcyBPbmx5MSUwIwYDVQQDExxFbnR
; ydXN0IEVDQyBEZW1vbnN0cmF0aW9uIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhCWBpuJuzvRtQyibkcbCj7Ek
; cwAqS2EqRQ/QntroTdRM2SssEN4TruTxtwcY/7lR64L6Tfjz3+ujrfjNFss3EWVpUlbOJ+xHC3xHPteNyAGZtHbZO
; 3tVuhP6yX6dFqCCo4GLMIGIMCsGA1UdEAQkMCKADzIwMTEwMTI3MjA0OTU0WoEPMjAzNjAxMjcyMTE5NTRaMAsGA1
; UdDwQEAwIBBjAfBgNVHSMEGDAWgBQkBUvhZIIa+AnM+3h5Ifpw5pMy6jAdBgNVHQ4EFgQUJAVL4WSCGvgJzPt4eSH
; 6cOaTMuowDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAyAhA70OIb6lbfN6kOTQloHyCLmihNK+PT5wO
; uaMR//KSQP2c/H18YhDYnlwMxF9fAjEA0URaJOXMF0qwdvS2rm7N5PWMLc/4BbeOZyZ94XJiG5u96iTgp6N9JI0MM
; mCQE87N"
; ]
; }
; ]
; }
;
CkPfx::ckDispose(pfx)
CkJavaKeyStore::ckDispose(jks)
CkStringBuilder::ckDispose(sbJwkSet)
CkJsonObject::ckDispose(jwkSet)
ProcedureReturn
EndProcedure