code: async function(ciphertext, nonce, adata) {
        if (ciphertext.length < tagLength) throw new Error('Invalid OCB ciphertext');
  
        const tag = ciphertext.subarray(-tagLength);
        ciphertext = ciphertext.subarray(0, -tagLength);
  
        const crypted = crypt(decipher, ciphertext, nonce, adata);
        // if (Tag[1..TAGLEN] == T)
        if (util.equalsUint8Array(tag, crypted.subarray(-tagLength))) {
          return crypted.subarray(0, -tagLength);
        }
        throw new Error('Authentication tag mismatch');
      }
docs: Decrypt ciphertext input.
  @param  {Uint8Array} ciphertext  The ciphertext input to be decrypted
  @param  {Uint8Array} nonce       The nonce (15 bytes)
  @param  {Uint8Array} adata       Associated data to sign
  @returns {Promise<Uint8Array>}    The ciphertext output