code: async function(ciphertext, nonce, adata) {
        if (ciphertext.length < tagLength) throw new Error('Invalid EAX ciphertext');
        const ciphered = ciphertext.subarray(0, -tagLength);
        const ctTag = ciphertext.subarray(-tagLength);
        const [
          omacNonce,
          omacAdata,
          omacCiphered
        ] = await Promise.all([
          omac(zero, nonce),
          omac(one, adata),
          omac(two, ciphered)
        ]);
        const tag = omacCiphered; // Assumes that omac(*).length === tagLength.
        for (let i = 0; i < tagLength; i++) {
          tag[i] ^= omacAdata[i] ^ omacNonce[i];
        }
        if (!util.equalsUint8Array(ctTag, tag)) throw new Error('Authentication tag mismatch');
        const plaintext = await ctr(ciphered, omacNonce);
        return plaintext;
      }
docs: Decrypt ciphertext input.
  @param  {Uint8Array} ciphertext   The ciphertext input to be decrypted
  @param  {Uint8Array} nonce        The nonce (16 bytes)
  @param  {Uint8Array} adata        Associated data to verify
  @returns {Promise<Uint8Array>}     The plaintext output