code: function contentEncryptCbc(aad, cek, cekEnc, plain, bits) {
    let iv = crypto.randomBytes(16);
    let bytes = bits >> 3;
    let cipher = crypto.createCipheriv(`AES-${bits}-CBC`, cek.slice(bytes), iv);
    let enc = Buffer.concat([cipher.update(plain), cipher.final()]);
    let len = aad.length << 3;
    let al = Buffer.from(`000000000000000${len.toString(16)}`.slice(-16), 'hex');
    let hmac = crypto.createHmac(`SHA${bits << 1}`, cek.slice(0, bytes));
    hmac.update(Buffer.from(aad)).update(iv).update(enc).update(al);
    let tag = buf2b64url(hmac.digest().slice(0, bytes));
    return `${aad}.${cekEnc}.${buf2b64url(iv)}.${buf2b64url(enc)}.${tag}`;
  }
docs: ===== A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 ==========================