I have a JWE and I want to decrypt the Content Encryption Key (cek) with openssl (and other command line)
here my JWE:
eyJlcGsiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJHQ2wtLWxRSGI3TktZVTNqWHBLVklfQllhVGxBTFQ1SkZQZGwzc2JCOW1ZIiwieSI6IkFEUlgyNVBCU2xaSkU3OWRyRVQwQVJ0UnFaQWtVSU1OdDlhYTJiYmpCWVkifSwiZW5jIjoiQTEyOEdDTSIsImFsZyI6IkVDREgtRVMrQTEyOEtXIn0.IFiUOn11TxTgnYWCA2rJLTYV3_r2n_qW.[IV].[Payload].[Sign]
So now I have retrieved this elements:
The Ephemeral Public Key (EPK):
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEGCl++lQHb7NKYU3jXpKVI/BYaTlA
LT5JFPdl3sbB9mYANFfbk8FKVkkTv12sRPQBG1GpkCRQgw231prZtuMFhg==
-----END PUBLIC KEY-----
The private key:
-----BEGIN EC PRIVATE KEY-----
MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCC0pi7An729X2hjD01f
TwwrlDzFIZ1XaNpJjqM01hyVuA==
-----END EC PRIVATE KEY-----
The shared key from private key and the EPK (base 64):
5gMHliQ850OswmbhgSK/QR6QU43sTGfXxbQDPhgK0Qw=
The Key Encryption Key (kek) in base 64:
jy5VPMvuVJTxTwtf1rhUKA==
The JWE header decrypted:
{
"epk": {
"kty": "EC",
"crv": "P-256",
"x": "GCl--lQHb7NKYU3jXpKVI_BYaTlALT5JFPdl3sbB9mY",
"y": "ADRX25PBSlZJE79drET0ARtRqZAkUIMNt9aa2bbjBYY"
},
"enc": "A128GCM",
"alg": "ECDH-ES+A128KW"
}
Now I try to decrypt the CEK: IFiUOn11TxTgnYWCA2rJLTYV3_r2n_qW . But I have some errors.
here the command:
openssl enc -nosalt -aes128-wrap -base64 -k $(base64 kek) -d -in encrypted-cek.64 -out cek
with base64 kek
equals to jy5VPMvuVJTxTwtf1rhUKA==
and encrypted-cek.64 contains IFiUOn11TxTgnYWCA2rJLTYV3/r2n/qW
(I have converted the cek from base64url to base64)
Here the error:
Error setting cipher id-aes128-wrap
140295367438784:error:0607B0AA:digital envelope routines:EVP_CipherInit_ex:wrap mode not allowed:../crypto/evp/evp_enc.c:160:
What I have forgotten.