Files
bun.sh/test/js/third_party/jsonwebtoken/test-utils.js
Ciro Spaciari 35109160ca feat(KeyObject) (#5940)
* oops

* createSecretKey but weird error

* use the right prototype, do not add a function called export lol

* HMAC JWT export + base64 fix

* Fix Equals, Fix Get KeySize, add complete export RSA

* fix RSA export

* add EC exports

* X25519 and ED25519 export + fixes

* fix default exports

* better asymmetricKeyType

* fix private exports

* fix symmetricKeySize

* createPublicKey validations + refactor

* jwt + der fixes

* oopsies

* add PEM into createPublicKey

* cleanup

* WIP

* bunch of fixes

* public from private + private OKP

* encrypted keys fixes

* oops

* fix clear tls error, add some support to jwk and other formats on publicEncrypt/publicDecrypt

* more fixes and tests working

* more fixes more tests

* more clear hmac errors

* more tests and fixes

* add generateKeyPair

* more tests passing, some skips

* fix EC key from private

* fix OKP JWK

* nodejs ignores ext and key_ops on KeyObject.exports

* add EC sign verify test

* some fixes

* add crypto.generateKeyPairSync(type, options)

* more fixes and more tests

* fix hmac tests

* jsonwebtoken tests

* oops

* oops2

* generated files

* revert package.json

* vm tests

* todos instead of failues

* toBunString -> toString

* undo simdutf

* improvements

* unlikely

* cleanup

* cleanup 2

* oops

* move _generateKeyPairSync checks to native
2023-10-07 15:22:45 -07:00

117 lines
3.3 KiB
JavaScript

"use strict";
import jwt from "jsonwebtoken";
function expect(value) {
return {
toEqual: expected => {
if (typeof value === "object") {
if (typeof expected === "object") {
for (const propertyName in expected) {
expect(value[propertyName]).toEqual(expected[propertyName]);
}
return;
}
throw new Error(`Expected ${value} to strictly equal ${expected}`);
}
if (value !== expected) {
throw new Error(`Expected ${value} to equal ${expected}`);
}
},
toStrictEqual: expected => {
if (typeof value === "object") {
if (typeof expected === "object") {
for (const propertyName in expected) {
expect(value[propertyName]).toStrictEqual(expected[propertyName]);
}
return;
}
throw new Error(`Expected ${value} to strictly equal ${expected}`);
}
if (value !== expected) {
throw new Error(`Expected ${value} to strictly equal ${expected}`);
}
},
};
}
/**
* Correctly report errors that occur in an asynchronous callback
* @param {function(err): void} done The mocha callback
* @param {function(): void} testFunction The assertions function
*/
function asyncCheck(done, testFunction) {
try {
testFunction();
done();
} catch (err) {
done(err);
}
}
/**
* Base64-url encode a string
* @param str {string} The string to encode
* @returns {string} The encoded string
*/
function base64UrlEncode(str) {
return Buffer.from(str).toString("base64").replace(/[=]/g, "").replace(/\+/g, "-").replace(/\//g, "_");
}
/**
* Verify a JWT, ensuring that the asynchronous and synchronous calls to `verify` have the same result
* @param {string} jwtString The JWT as a string
* @param {string} secretOrPrivateKey The shared secret or private key
* @param {object} options Verify options
* @param {function(err, token):void} callback
*/
function verifyJWTHelper(jwtString, secretOrPrivateKey, options, callback) {
let error;
let syncVerified;
try {
syncVerified = jwt.verify(jwtString, secretOrPrivateKey, options);
} catch (err) {
error = err;
}
jwt.verify(jwtString, secretOrPrivateKey, options, (err, asyncVerifiedToken) => {
if (error) {
callback(err);
} else {
expect(syncVerified).toStrictEqual(asyncVerifiedToken);
callback(null, syncVerified);
}
});
}
/**
* Sign a payload to create a JWT, ensuring that the asynchronous and synchronous calls to `sign` have the same result
* @param {object} payload The JWT payload
* @param {string} secretOrPrivateKey The shared secret or private key
* @param {object} options Sign options
* @param {function(err, token):void} callback
*/
function signJWTHelper(payload, secretOrPrivateKey, options, callback) {
let error;
let syncSigned;
try {
syncSigned = jwt.sign(payload, secretOrPrivateKey, options);
} catch (err) {
error = err;
}
jwt.sign(payload, secretOrPrivateKey, options, (err, asyncSigned) => {
if (error) {
callback(err);
} else {
expect(syncSigned).toEqual(asyncSigned);
callback(null, syncSigned);
}
});
}
export { asyncCheck, base64UrlEncode, signJWTHelper, verifyJWTHelper };
export default {
asyncCheck,
base64UrlEncode,
signJWTHelper,
verifyJWTHelper,
};