C
C
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 C Downloads
#include <C_CkPfx.h>
#include <C_CkJavaKeyStore.h>
#include <C_CkStringBuilder.h>
#include <C_CkJsonObject.h>
void ChilkatSample(void)
{
BOOL success;
HCkPfx pfx;
const char *alias;
const char *password;
HCkJavaKeyStore jks;
HCkStringBuilder sbJwkSet;
HCkJsonObject jwkSet;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
pfx = CkPfx_Create();
success = CkPfx_LoadPfxFile(pfx,"qa_data/pfx/myEccCert.p12","MY_ECC_PFX_PASSWORD");
if (success == FALSE) {
printf("%s\n",CkPfx_lastErrorText(pfx));
CkPfx_Dispose(pfx);
return;
}
// 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 = "my_ecc_key";
password = "secret123";
jks = CkJavaKeyStore_Create();
success = CkPfx_ToJksObj(pfx,alias,password,jks);
if (success == FALSE) {
printf("%s\n",CkPfx_lastErrorText(pfx));
CkPfx_Dispose(pfx);
CkJavaKeyStore_Dispose(jks);
return;
}
sbJwkSet = CkStringBuilder_Create();
// The ToJwkSet method writes to sbJwkSet.
success = CkJavaKeyStore_ToJwkSet(jks,password,sbJwkSet);
if (success == FALSE) {
printf("%s\n",CkJavaKeyStore_lastErrorText(jks));
CkPfx_Dispose(pfx);
CkJavaKeyStore_Dispose(jks);
CkStringBuilder_Dispose(sbJwkSet);
return;
}
jwkSet = CkJsonObject_Create();
CkJsonObject_LoadSb(jwkSet,sbJwkSet);
CkJsonObject_putEmitCompact(jwkSet,FALSE);
printf("%s\n",CkJsonObject_emit(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_Dispose(pfx);
CkJavaKeyStore_Dispose(jks);
CkStringBuilder_Dispose(sbJwkSet);
CkJsonObject_Dispose(jwkSet);
}