Skip to content

Instantly share code, notes, and snippets.

@renatoargh
Created April 27, 2023 04:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renatoargh/5bde1ee4b9e8516b7262670c7d3b451e to your computer and use it in GitHub Desktop.
Save renatoargh/5bde1ee4b9e8516b7262670c7d3b451e to your computer and use it in GitHub Desktop.
Example for RSA-OAEP-256 with A128CBC-HS256 encryption/decryption using node-jose
import { JWE, JWK } from "node-jose";
async function main() {
const originalPayload = 'this is a test with a short payload, but long payloads are also supported';
console.log('> Original payload:', originalPayload);
// We generate an RSA key to be used with the RSA-OAEP-256 algorithm
const key = await JWK.createKey("RSA", 2048, {
alg: "RSA-OAEP-256", // Key encryption algorithm
use: 'enc',
})
// Let's check the contents of the key
console.log('> Private key:', key.toJSON(true))
console.log('> Private key (PEM formatted):\n', key.toPEM(true))
console.log('> Public key (PEM formatted):\n', key.toPEM(false))
const encryptor = JWE.createEncrypt({
format: 'compact',
contentAlg: 'A128CBC-HS256', // Content encryption algorithm
}, key);
const encryptedPayload = await encryptor.update(Buffer.from(originalPayload)).final();
console.log('> Encrypted payload:', encryptedPayload)
const decryptor = JWE.createDecrypt(key)
const { plaintext } = await decryptor.decrypt(encryptedPayload);
const decryptedPayload = plaintext.toString();
console.log('> Decrypted payload:', decryptedPayload)
console.log('> Works:', originalPayload === decryptedPayload);
}
main()
> Original payload: this is a test with a short payload, but long payloads are also supported
> Private key: {
kty: 'RSA',
kid: 'te6djQjFhx0cWkkzyrsnfBh6hoWN78w_I_4OWx6xqT4',
use: 'enc',
alg: 'RSA-OAEP-256',
e: 'AQAB',
n: 'v4f2iLlRI0zuY8Zvt8kdw23Ta_Py7Iri8ceK5tjsIEqLfvUGTdsZ4E75lnHAtUTKeEFKI6WvWFzYrBLkRy2wiI2GQeem8eZdwPR8uS6IpHdovfRxrFC8LCYVpi4cuOFTXPXLDJAT_VlZSPfyG4uCaDyCKKD8d9GMM9nlsoaPqa3ZKTKeu0KGa_1TkHji9_t-sR1niRQjrTiUr0szNjSFFwWD3p7haoNnXuRkE66lMA8gNoxKsuDpYostCdyNUNECruiARwZBg2t0Eb58Amu0V-IUF7FuRJOCgnXZ8WW3B2TL4OmQtsTgejHsxE8mzTyMpMHQ6Jv3DHE6k3tcrWFbzw',
d: 'crFri3JVySrPcoYo7kiL_zRsL7AU31tIDXrtjdGGjMu2_x6hWMwEkdMZGOMjgCkiiaKnT_Nurh5jTZ--fXU5ynvdUufyi9bke6Csc4QPJVWwLlgMHiD2ngVsX2groPalofw6TFqW7dasZcq8e4wuWlcppkTJCsM8DuzD5QU5UGSV4G3lHjBugbVxy7gWK07OCt5DqBUhqBsCSngCbzsOiFY9oZmF4tfE5wpl4ZByDLmQUalLK0PPEpLhbutExJhV4yXMs2qHLfwXbVP9R1h2pUmEuzFnhuWFhf7H-Ao-6A9_7VyabrKAeFukMJITcCHAmUl4YPH7HT2UiPEjFEK5cQ',
p: '7PEVikKxbWvxhai7tT3nKmvmgzt87pOuudktHa9SdycI04Vvw715r0yBu_uEwLKlKLqBSUX-2EFI6HD78dKycBW5LOsFa4CgwbK6_zyy0z8G6va1KH8b_C79NHUUI5YPEnUR-rzWjAtowC9k9YiNcCEH1pa4MfPz0SG7_zLmB9c',
q: 'zu_Rvad25xxD9WbUa9Zlfn8mm06cEaAehvwr5OiR87fsG3cz1Dd1_dMnn3OVRa7u-RMgqdebqR9rbcdqUAVgL4P3mXzzN-TAQ3tY7F4mUwZrsYJ6qpqVZC_rE0cJUClFcVJzX1fZ8ads5qcFci21VhFc1Gyh1x4buRnvdBdt7Mk',
dp: 'Y89eqoJTqWtaL1qXz85GzZjsXoW1p-5wIPu6RJHxJB4-WpQQM51iYBTTZbObBW17oz-FbK9engxKQRgvGXwPDKYp_iD2hIWHsnCu0wvnrJMVP-8y-t8ok7_bi7hyBleU-8pzC3N20UGRG7wbRE8EfaJ8YcnVx70jDQqv3d28Brs',
dq: 'fIfnsXko3dWts-2I4cho1aIRCp9Y3mZ8WIFCrQOkaYWCSdkHUKt7jx9WFefJqeCnIS74lh0RKMqmrK639KX3h0CkbTK7byRy62k8TyotaANSJcW-qhJS2rLXhYdXPG1Jw_N5SKQmnP1DVN6oMVj-amgSdCdXkYwl5NONvVAoL7k',
qi: 'iogORw501hnEcnjJQUgvHxDVXvheOx6fqzvk64R9SoOQl6_ZFupK5zYe8RwPSHV910VK6lb9c56VojTwZPHX9qD9mH7NTXGCkVXGK9O9XajsngYq59zP_dyPf5_pSi1rSHnHQVHkI3z9pCJK_5iwL9mVRo3BckMcV8QbieFrj50'
}
> Private key (PEM formatted):
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAv4f2iLlRI0zuY8Zvt8kdw23Ta/Py7Iri8ceK5tjsIEqLfvUG
TdsZ4E75lnHAtUTKeEFKI6WvWFzYrBLkRy2wiI2GQeem8eZdwPR8uS6IpHdovfRx
rFC8LCYVpi4cuOFTXPXLDJAT/VlZSPfyG4uCaDyCKKD8d9GMM9nlsoaPqa3ZKTKe
u0KGa/1TkHji9/t+sR1niRQjrTiUr0szNjSFFwWD3p7haoNnXuRkE66lMA8gNoxK
suDpYostCdyNUNECruiARwZBg2t0Eb58Amu0V+IUF7FuRJOCgnXZ8WW3B2TL4OmQ
tsTgejHsxE8mzTyMpMHQ6Jv3DHE6k3tcrWFbzwIDAQABAoIBAHKxa4tyVckqz3KG
KO5Ii/80bC+wFN9bSA167Y3RhozLtv8eoVjMBJHTGRjjI4ApIomip0/zbq4eY02f
vn11Ocp73VLn8ovW5HugrHOEDyVVsC5YDB4g9p4FbF9oK6D2paH8Okxalu3WrGXK
vHuMLlpXKaZEyQrDPA7sw+UFOVBkleBt5R4wboG1ccu4FitOzgreQ6gVIagbAkp4
Am87DohWPaGZheLXxOcKZeGQcgy5kFGpSytDzxKS4W7rRMSYVeMlzLNqhy38F21T
/UdYdqVJhLsxZ4blhYX+x/gKPugPf+1cmm6ygHhbpDCSE3AhwJlJeGDx+x09lIjx
IxRCuXECgYEA7PEVikKxbWvxhai7tT3nKmvmgzt87pOuudktHa9SdycI04Vvw715
r0yBu/uEwLKlKLqBSUX+2EFI6HD78dKycBW5LOsFa4CgwbK6/zyy0z8G6va1KH8b
/C79NHUUI5YPEnUR+rzWjAtowC9k9YiNcCEH1pa4MfPz0SG7/zLmB9cCgYEAzu/R
vad25xxD9WbUa9Zlfn8mm06cEaAehvwr5OiR87fsG3cz1Dd1/dMnn3OVRa7u+RMg
qdebqR9rbcdqUAVgL4P3mXzzN+TAQ3tY7F4mUwZrsYJ6qpqVZC/rE0cJUClFcVJz
X1fZ8ads5qcFci21VhFc1Gyh1x4buRnvdBdt7MkCgYBjz16qglOpa1ovWpfPzkbN
mOxehbWn7nAg+7pEkfEkHj5alBAznWJgFNNls5sFbXujP4Vsr16eDEpBGC8ZfA8M
pin+IPaEhYeycK7TC+eskxU/7zL63yiTv9uLuHIGV5T7ynMLc3bRQZEbvBtETwR9
onxhydXHvSMNCq/d3bwGuwKBgHyH57F5KN3VrbPtiOHIaNWiEQqfWN5mfFiBQq0D
pGmFgknZB1Cre48fVhXnyangpyEu+JYdESjKpqyut/Sl94dApG0yu28kcutpPE8q
LWgDUiXFvqoSUtqy14WHVzxtScPzeUikJpz9Q1TeqDFY/mpoEnQnV5GMJeTTjb1Q
KC+5AoGBAIqIDkcOdNYZxHJ4yUFILx8Q1V74Xjsen6s75OuEfUqDkJev2RbqSuc2
HvEcD0h1fddFSupW/XOelaI08GTx1/ag/Zh+zU1xgpFVxivTvV2o7J4GKufcz/3c
j3+f6Uota0h5x0FR5CN8/aQiSv+YsC/ZlUaNwXJDHFfEG4nha4+d
-----END RSA PRIVATE KEY-----
> Public key (PEM formatted):
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv4f2iLlRI0zuY8Zvt8kd
w23Ta/Py7Iri8ceK5tjsIEqLfvUGTdsZ4E75lnHAtUTKeEFKI6WvWFzYrBLkRy2w
iI2GQeem8eZdwPR8uS6IpHdovfRxrFC8LCYVpi4cuOFTXPXLDJAT/VlZSPfyG4uC
aDyCKKD8d9GMM9nlsoaPqa3ZKTKeu0KGa/1TkHji9/t+sR1niRQjrTiUr0szNjSF
FwWD3p7haoNnXuRkE66lMA8gNoxKsuDpYostCdyNUNECruiARwZBg2t0Eb58Amu0
V+IUF7FuRJOCgnXZ8WW3B2TL4OmQtsTgejHsxE8mzTyMpMHQ6Jv3DHE6k3tcrWFb
zwIDAQAB
-----END PUBLIC KEY-----
> Encrypted payload: eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAtMjU2Iiwia2lkIjoidGU2ZGpRakZoeDBjV2trenlyc25mQmg2aG9XTjc4d19JXzRPV3g2eHFUNCJ9.nU10K_f721kxwkiq1iA6P4BlUsuvXY2-uLUEziv2hx-cT3lOCwjr6t6X0VrmgJ_zhCI3xG6RVg588dzObDUl4AOacpNaed5KbtCKdz3WMYbEsg-G8TEwF_zVBl7IlYNW1aLnCthdkkf-qrHTcrATt-xhxz2xntI-jgJ6vfqs19P6lWXtzw_twt1I5eqtIpaecUkZlzL8m5LE5UuMeq0_ohRDiVjIMZfY-Ptu8ACWkhtVjpUAE-mnLKs8CAjcUcj7V467YdZYMME5GXn9CzmQluP15os8JGNlaJ31qsLOR-13oDkMfjbozVdTtjuhowMv30AEAS8HPozQwsflL2xn6Q.TXpV9yxOcuoRtSS_tI-SyA.CjKhYrG6kTXa6CP4t7ITdKNQO6QhgeOJrn-B0nKqkGPldWVO_jaVHcuPS0r9AzuOjfgLhiqAM4XJltFl_cbO-QM7Tlt7Ck19sH8LaCr_DV0.IRPRe7o_6MtNYMCr9lM8uw
> Decrypted payload: this is a test with a short payload, but long payloads are also supported
> Works: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment