jose/test-cloudflare-workers/template.js
2021-09-07 10:42:28 +02:00

77 lines
3.3 KiB
JavaScript

import jweCompactEncrypt from '../dist/browser/jwe/compact/encrypt.js';
import jweFlattenedEncrypt from '../dist/browser/jwe/flattened/encrypt.js';
import jwsCompactSign from '../dist/browser/jws/compact/sign.js';
import jwsFlattenedSign from '../dist/browser/jws/flattened/sign.js';
import jwsGeneralSign from '../dist/browser/jws/general/sign.js';
import jwtEncrypt from '../dist/browser/jwt/encrypt.js';
import jwtSign from '../dist/browser/jwt/sign.js';
import jwtUnsecured from '../dist/browser/jwt/unsecured.js';
import jweCompactDecrypt from '../dist/browser/jwe/compact/decrypt.js';
import jweFlattenedDecrypt from '../dist/browser/jwe/flattened/decrypt.js';
import jweGeneralDecrypt from '../dist/browser/jwe/general/decrypt.js';
import jwkEmbedded from '../dist/browser/jwk/embedded.js';
import jwkFromKeyLike from '../dist/browser/jwk/from_key_like.js';
import jwkParse from '../dist/browser/jwk/parse.js';
import jwkThumbprint from '../dist/browser/jwk/thumbprint.js';
import jwksRemote from '../dist/browser/jwks/remote.js';
import jwsCompactVerify from '../dist/browser/jws/compact/verify.js';
import jwsFlattenedVerify from '../dist/browser/jws/flattened/verify.js';
import jwsGeneralVerify from '../dist/browser/jws/general/verify.js';
import jwtDecrypt from '../dist/browser/jwt/decrypt.js';
import jwtVerify from '../dist/browser/jwt/verify.js';
import utilDecodeProtectedHeader from '../dist/browser/util/decode_protected_header.js';
import utilGenerateKeyPair from '../dist/browser/util/generate_key_pair.js';
import utilGenerateSecret from '../dist/browser/util/generate_secret.js';
import utilRandom from '../dist/browser/util/random.js';
const headers = { 'content-type': 'application/json' };
function respond(status, error) {
const body = {};
if (status !== 200) {
body.error = error.stack;
}
return new Response(JSON.stringify(body), { headers, status });
}
const success = respond.bind(undefined, 200);
const failure = respond.bind(undefined, 400);
addEventListener('fetch', (event) => {
event.respondWith(test().then(success, failure));
});
async function jweAsymmetricTest({ publicKey, privateKey }, alg) {
const jwe = await new jweFlattenedEncrypt(utilRandom(new Uint8Array(32)))
.setProtectedHeader({ alg, enc: 'A256GCM' })
.setAdditionalAuthenticatedData(utilRandom(new Uint8Array(32)))
.encrypt(publicKey);
utilDecodeProtectedHeader(jwe);
await jweFlattenedDecrypt(jwe, privateKey);
}
async function jwsAsymmetricTest({ publicKey, privateKey }, alg) {
const jws = await new jwsFlattenedSign(utilRandom(new Uint8Array(32)))
.setProtectedHeader({ alg })
.sign(privateKey);
utilDecodeProtectedHeader(jws);
await jwsFlattenedVerify(jws, publicKey);
}
async function jwsSymmetricTest(secretKey, alg) {
const jws = await new jwsFlattenedSign(utilRandom(new Uint8Array(32)))
.setProtectedHeader({ alg })
.sign(secretKey);
utilDecodeProtectedHeader(jws);
await jwsFlattenedVerify(jws, secretKey);
}
async function jweSymmetricTest(secretKey, { alg, enc }) {
const jwe = await new jweFlattenedEncrypt(utilRandom(new Uint8Array(32)))
.setProtectedHeader({ alg, enc })
.setAdditionalAuthenticatedData(utilRandom(new Uint8Array(32)))
.encrypt(secretKey);
utilDecodeProtectedHeader(jwe);
await jweFlattenedDecrypt(jwe, secretKey);
}