DataFlex
DataFlex
JWE using ECDH-ES+A256KW
See more JSON Web Encryption (JWE) Examples
Create a JWE with the following public/private key pair:
{
"kty": "EC",
"d": "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c",
"use": "enc",
"crv": "P-256",
"kid": "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs",
"x": "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM",
"y": "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4",
"alg": "ECDH-ES+A256KW"
}
Also shows how to decrypt.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoJson
Variant vPubkey
Handle hoPubkey
Handle hoJwt
Variant vJweProtHdr
Handle hoJweProtHdr
Handle hoJwe
String sPlainText
String sStrJwe
Variant vPrivkey
Handle hoPrivkey
2 Handle hoJwe2
String sDecryptedText
String sTemp1
Integer iTemp1
Boolean bTemp1
Move False To iSuccess
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Create the following JSON:
// {
// "kty": "EC",
// "d": "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c",
// "use": "enc",
// "crv": "P-256",
// "kid": "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs",
// "x": "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM",
// "y": "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4",
// "alg": "ECDH-ES+A256KW"
// }
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get ComUpdateString Of hoJson "kty" "EC" To iSuccess
Get ComUpdateString Of hoJson "d" "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c" To iSuccess
Get ComUpdateString Of hoJson "use" "enc" To iSuccess
Get ComUpdateString Of hoJson "crv" "P-256" To iSuccess
Get ComUpdateString Of hoJson "kid" "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs" To iSuccess
Get ComUpdateString Of hoJson "x" "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM" To iSuccess
Get ComUpdateString Of hoJson "y" "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4" To iSuccess
Get ComUpdateString Of hoJson "alg" "ECDH-ES+A256KW" To iSuccess
Get Create (RefClass(cComChilkatPublicKey)) To hoPubkey
If (Not(IsComObjectCreated(hoPubkey))) Begin
Send CreateComObject of hoPubkey
End
Get ComEmit Of hoJson To sTemp1
Get ComLoadFromString Of hoPubkey sTemp1 To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPubkey To sTemp1
Showln sTemp1
Procedure_Return
End
// Build our protected header:
// {
// "alg": "ECDH-ES+A256KW",
// "enc": "A256GCM",
// "exp": 1621957030,
// "cty": "NJWT",
// "epk": {
// "kty": "EC",
// "x": "QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w"
// "y": "AJh7pJ3zZKDJkm8rbeG69GBooTosXJgSsvNFH0i3Vxnu"
// "crv": "BP-256"
// }
// }
// Use jwt only for getting the current date/time + 3600 seconds.
Get Create (RefClass(cComChilkatJwt)) To hoJwt
If (Not(IsComObjectCreated(hoJwt))) Begin
Send CreateComObject of hoJwt
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJweProtHdr
If (Not(IsComObjectCreated(hoJweProtHdr))) Begin
Send CreateComObject of hoJweProtHdr
End
Get ComUpdateString Of hoJweProtHdr "alg" "ECDH-ES+A256KW" To iSuccess
Get ComUpdateString Of hoJweProtHdr "enc" "A256GCM" To iSuccess
Get ComGenNumericDate Of hoJwt 3600 To iTemp1
Get ComUpdateInt Of hoJweProtHdr "exp" iTemp1 To iSuccess
Get ComUpdateString Of hoJweProtHdr "cty" "NJWT" To iSuccess
Get ComUpdateString Of hoJweProtHdr "epk.kty" "EC" To iSuccess
Get ComUpdateString Of hoJweProtHdr "epk.x" "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM" To iSuccess
Get ComUpdateString Of hoJweProtHdr "epk.y" "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4" To iSuccess
Get ComUpdateString Of hoJweProtHdr "epk.crv" "P-256" To iSuccess
Get Create (RefClass(cComChilkatJwe)) To hoJwe
If (Not(IsComObjectCreated(hoJwe))) Begin
Send CreateComObject of hoJwe
End
Get pvComObject of hoJweProtHdr to vJweProtHdr
Get ComSetProtectedHeader Of hoJwe vJweProtHdr To iSuccess
Get pvComObject of hoPubkey to vPubkey
Get ComSetPublicKey Of hoJwe 0 vPubkey To iSuccess
Move "This is the text to be encrypted." To sPlainText
Get ComEncrypt Of hoJwe sPlainText "utf-8" To sStrJwe
Get ComLastMethodSuccess Of hoJwe To bTemp1
If (bTemp1 <> True) Begin
Get ComLastErrorText Of hoJwe To sTemp1
Showln sTemp1
Procedure_Return
End
Showln sStrJwe
// Let's decrypt...
Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivkey
If (Not(IsComObjectCreated(hoPrivkey))) Begin
Send CreateComObject of hoPrivkey
End
Get ComEmit Of hoJson To sTemp1
Get ComLoadJwk Of hoPrivkey sTemp1 To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPrivkey To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatJwe)) To hoJwe2
If (Not(IsComObjectCreated(hoJwe2))) Begin
Send CreateComObject of hoJwe2
End
Get ComLoadJwe Of hoJwe2 sStrJwe To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoJwe2 To sTemp1
Showln sTemp1
Procedure_Return
End
Get pvComObject of hoPrivkey to vPrivkey
Get ComSetPrivateKey Of hoJwe2 0 vPrivkey To iSuccess
// Decrypt.
Get ComDecrypt Of hoJwe2 0 "utf-8" To sDecryptedText
Get ComLastMethodSuccess Of hoJwe2 To bTemp1
If (bTemp1 <> True) Begin
Get ComLastErrorText Of hoJwe2 To sTemp1
Showln sTemp1
Procedure_Return
End
Showln sDecryptedText
End_Procedure