public boolean checkHashes() throws CartInvalidCartException {
		List<String> verifiedHashes = new ArrayList<>(); // List of hashes that are present and
														// correct
		List<String> badHashes = new ArrayList<>(); // List of hashes that are present, but wrong

		// Iterate across the hashers, check that the match. Record which are
		// bad or verified.
		for (Map.Entry<String, byte[]> hashCheck : finalHashes.entrySet()) {
			byte[] footerHashValue = hashes.get(hashCheck.getKey());

			try {
				if (Arrays.equals(hashCheck.getValue(), footerHashValue)) {
					verifiedHashes.add(hashCheck.getKey());
				}
				else {
					badHashes.add(hashCheck.getKey());
				}
			}
			catch (IllegalArgumentException e) {
				badHashes.add(hashCheck.getKey());
			}
		}

		if (!badHashes.isEmpty()) {
			throw new CartInvalidCartException("Hash(es) " + String.join(", ", badHashes) +
				" in footer doesn't match CaRT data contents.");
		}

		if (verifiedHashes.isEmpty()) {
			if (!CartCancelDialogs.promptErrorContinue("No Hashes",
				"No hash data in CaRT footer metadata. Cannot verify content. Continue processing?")) {
				throw new CartInvalidCartException("Cancelled due to no hash data.");
			}
		}

		// Return true if there are no bad hashed and at least one verified hash;
		// otherwise false
		return (badHashes.size() == 0) && (verifiedHashes.size() > 0);
	}
Check that hashes of the data read so far and match the values in the footer. Warn
user if any hashes are missing. Throw an exception if any provided hash is
bad.

@return True if there are no bad hashed, and at least one hash was matched;
        otherwise, false.
@throws CartInvalidCartException If one or more hash is bad
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartV1StreamHasher.java