Go
Go
JWE with Binary Data
See more JSON Web Encryption (JWE) Examples
Demonstrates how to create a JWE that contains a binary payload (such as a JPG image).Note: This example requires Chilkat v9.5.0.66 or greater.
Chilkat Go Downloads
success := false
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Note: This example requires Chilkat v9.5.0.66 or greater.
// Load a JPG file that will be the JWE payload.
jpgBytes := chilkat.NewBinData()
success = jpgBytes.LoadFile("qa_data/jpg/starfish.jpg")
// Make sure your app checks the success/failure of the call to LoadFile..
fmt.Println("Original JPG size = ", jpgBytes.NumBytes())
jwe := chilkat.NewJwe()
jweProtHdr := chilkat.NewJsonObject()
jweProtHdr.AppendString("alg","A128KW")
jweProtHdr.AppendString("enc","A128CBC-HS256")
jwe.SetProtectedHeader(jweProtHdr)
aesWrappingKey := "GawgguFyGrWKav7AX4VKUg"
jwe.SetWrappingKey(0,aesWrappingKey,"base64url")
// Encrypt and return the JWE in sbJwe:
sbJwe := chilkat.NewStringBuilder()
success = jwe.EncryptBd(jpgBytes,sbJwe)
if success != true {
fmt.Println(jwe.LastErrorText())
jpgBytes.DisposeBinData()
jwe.DisposeJwe()
jweProtHdr.DisposeJsonObject()
sbJwe.DisposeStringBuilder()
return
}
// Show the JWE:
fmt.Println(*sbJwe.GetAsString())
fmt.Println("size of JWE: ", sbJwe.Length())
// ---------------------------------------------------------
// Decrypt to get the original JPG file..
jwe2 := chilkat.NewJwe()
success = jwe2.LoadJweSb(sbJwe)
if success != true {
fmt.Println(jwe2.LastErrorText())
jpgBytes.DisposeBinData()
jwe.DisposeJwe()
jweProtHdr.DisposeJsonObject()
sbJwe.DisposeStringBuilder()
jwe2.DisposeJwe()
return
}
// Set the AES wrap key.
jwe2.SetWrappingKey(0,aesWrappingKey,"base64url")
// Decrypt.
jpgOriginal := chilkat.NewBinData()
success = jwe2.DecryptBd(0,jpgOriginal)
if success != true {
fmt.Println(jwe2.LastErrorText())
jpgBytes.DisposeBinData()
jwe.DisposeJwe()
jweProtHdr.DisposeJsonObject()
sbJwe.DisposeStringBuilder()
jwe2.DisposeJwe()
jpgOriginal.DisposeBinData()
return
}
fmt.Println("Decrypted JPG size = ", jpgOriginal.NumBytes())
// Save the decrypted JPG to a file.
success = jpgOriginal.WriteFile("qa_output/jwe_decrypted_starfish.jpg")
fmt.Println("success = ", success)
// The output of this program, when tested, was:
// Original JPG size = 6229
// eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.9YFz_wteV ... 7Et3hKhpxnKEXw
// size of JWE: 8473
// Decrypted JPG size = 6229
// success = True
jpgBytes.DisposeBinData()
jwe.DisposeJwe()
jweProtHdr.DisposeJsonObject()
sbJwe.DisposeStringBuilder()
jwe2.DisposeJwe()
jpgOriginal.DisposeBinData()