diff --git a/packages/hybridkem-x-wing/README.md b/packages/hybridkem-x-wing/README.md index 717804836..a298f216d 100644 --- a/packages/hybridkem-x-wing/README.md +++ b/packages/hybridkem-x-wing/README.md @@ -16,7 +16,12 @@ Documentation: [jsr.io](https://jsr.io/@hpke/hybridkem-x-wing/doc) | +An example of use: + ```ts +import { Aes256Gcm, CipherSuite, HkdfSha256 } from "@hpke/core"; +import { XWing } from "@hpke/hybridkem-x-wing"; + async function doHpke() { const suite = new CipherSuite({ kem: new XWing(), @@ -24,8 +29,9 @@ async function doHpke() { aead: new Aes256Gcm(), }); - // NOTE: The following support for JWKs with the AKP key type is experimental. Please be aware that the specifications are subject to change without notice. - const jwkPkR = { + // NOTE: The following support for JWKs with the AKP key type is experimental. + // Please be aware that the specifications are subject to change without notice. + const jwkPub = { kty: "AKP", kid: "01", alg: "X-Wing", @@ -33,27 +39,29 @@ async function doHpke() { "4iNrNajCSzmxCqEyOpapGaLO2IQAYzp7BxMXE_wUsrWxnPw9pfoaksSfJVE-D9MNaxYRyauWNdcIZyekt9IdNCROZpac8Vs7KnhTKfYbCWsnfqA3ODR5prVW3nIx_kt_qcmsJMBpmgAYpSU0AbrPqQXKgWVz5WotLgZ-m3KHUzuhOpN97bMfpEus7UB2mSNhADSuMeYZoXAkUZmzxcOYZIWf4bTJcXoHwwSVvfuYoKACzPVsEobO9QQd7ePETPFr9WLHRIUYAms9i5lAaAq9OKFXX9J7WNoGO_rDLDnDCGk3TAXBrrGJi2swPMaL5FU0buCvaZY2IkoUjKKuoQRjERxwn2m2nHDOhTh0ZpjExgqa7wAwx5JM7sQqXTaBb1RerhMpNGCzrLN-oOE9cOSqeGhto5ioOXwI6vloghE_5Pe61NpAsFAeHHU-_nMFPIcBToZhwzCZr-i-3kFKWxqifYOSs-Ex6acMEFWHgkDK0PQNX-PN-FI26tl-KpdEg2OygIyq_VFs0lBSxcNiVDwlF-Ss0OYOwHFjAJtkJfwyJ3rO5xwkurU-2fKedMZqCjVklVmY12uWqai1DRY1pNemfrQt9WRNMwRXKTqAQvU8x6aSiPF-1Vgn6Cso6CZlqGoU-9lmReyoFywET4O8DYwLTIYmmFYxyoevgpBo8TWJY8szNmTKSCdjujs7sghXf5umrGLCX3ZZJ0O2S-UZMXcUy0ECy3svmiWytPBhXeMd7NnKVQJtbaC2URGxb-Uv7tikh-FERiptupNyj1ALb_xJ5RVWnvJf7Rev9SBQc2glNSWGD1i-O-YclkYEpqyBTmk1WWQCpSCkZws9KEMYhmWT0VpLsBw14-WH7gxn0ogNbyQH-3pwcSuDjeuWxde_K0S89gOMy-M_vPUaVKWE_pAIPJHHptQ9T7FfSMYML9ZuCoqtStZOXEK7iHfA6-wrXjh8ipiP3CO-ueFsh1d4HgoUmcYeE4wh8hbCnQdpeYccqmlCuvwJBUS-6ZtUsWy5qaNk1iRtn0LM5TxmtZxFyPmukpmnXRUYDDyVIVGpG3oQdyQp3Ey65vzGIvqAGMY0OfiQYwuZKNtrt_lDiuQGXtNNc9SG8_UvkPCAfciN_djHKOlU8aw1wGwADOQaBYJYDju1e2cpcokKxeeYjnhQZXEW8bV9CAmq7ewL7eGuFIFIMRxvfjFzRuUYn7jNY1uYb4wL3SdkHFhLd4s6kRqAvhyWkquOG7sSg5VzzOGd8YO0WDW7tVBS-fxmoWeO8qNt6nhBHmyNYFAbTmBZLRNpipQ7UJGF25EuLqEL4GFxI2syfHFxYJTJZKaLAzd_UToFvNmcHzRlg7sFKXehChKt_HWANOVhfaTBJ2WF5XdOHzuZeLCdDpxE07yGFRxDqtGFcScXNAIjrDgdIRUKBClOl7sTu9ohtaGCttqWnhmn_QcnN_qOiApTwkKOPQSbfSGXQFKW3bNhkSp7z0gnztYR0Men2hBN3kMiCVM59kph1bsQj_C_TXgMrlCfsiwlaRQZP_c0kEJYEjfVIoKIJO4739B_sD8flC0uoXn-ci8GzAPeW2mFntsG7_OJsn3OWYRFcCFiI1k9S6MtmrrIzQSQQO9lNA", key_ops: [], }; - const pkR = await suite.kem.importKey("jwk", jwkPkR, true); - const sender = await suite.createSenderContext({ - recipientPublicKey: pkR, - }); + const pk = await suite.kem.importKey("jwk", jwkPub, true); + // In addition to importing keys from external sources, you can also generate keys as follows: + // const rkp = await suite.kem.generateKeyPair(); + // const rkp = await suite.kem.deriveKeyPair(random32bytesValue); - const jwkSkR = { + const sender = await suite.createSenderContext({ recipientPublicKey: pk }); + + const jwkPriv = { kty: "AKP", kid: "01", alg: "X-Wing", priv: "f5wrpOiPgn1hYEVQdgWFPtc7gJP277yI6xpurPpm7yY", key_ops: ["deriveBits"], }; - const skR = await suite.kem.importKey("jwk", jwkSkR, false); + const sk = await suite.kem.importKey("jwk", jwkPriv, false); const recipient = await suite.createRecipientContext({ - recipientKey: skR, + recipientKey: sk, enc: sender.enc, }); - const ct = await sender.seal( + const encrypted = await sender.seal( new TextEncoder().encode("Hellow world!"), ); - const pt = await recipient.open(ct); + const pt = await recipient.open(encrypted); // Hello world! console.log(new TextDecoder().decode(pt));