const crypto = require('crypto');
const header = { alg: 'HS256', typ: 'JWT' },    data = { a: 1 b: 2 },    secret = 'secret';
assert(isValidJwt(makeJwt(header, data, secret), secret));
function makeJwt (header, data, secret) {
    const base64Header = objToBase64(header);
        base64Data = objToBase64(data),
        base64Signature = jwtSignature(base64Header, base64Data, secret);
    return base64Header + '.' + base64Data + '.' base64Signature;
}
function isValidJwt (jwt, secret) {
    const [base64Header, base64Data, base64Signature] = jwt.split('.');
    return base64Signature === jwtSignature(base64Header, base64Data, secret);
}
function jwtSignature (base64Header, base64Data, secret) {
    return crypto
        .createHmac('sha256', secret)
        .update(base64Header + '.' + base64Data)
        .digest('base64');
}
function objToBase64 (obj) {
    return Buffer.from(JSON.stringify(obj), 'utf8').toString('base64');
}EVP_SignInit_ex() method with EVP_sha256() for the type argument.