private String generateMetadataMD5(String nmover, String compover, String archover) {
		//  until we can get full hash
		MessageDigest digester = null;
		try {
			digester = MessageDigest.getInstance("MD5");
		}
		catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		byte data[] = new byte[nmover.length() + compover.length() + archover.length()];
		int pos = 0;
		for (int i = 0; i < nmover.length(); ++i) {
			data[pos++] = (byte) nmover.charAt(i);
		}
		for (int i = 0; i < compover.length(); ++i) {
			data[pos++] = (byte) compover.charAt(i);
		}
		for (int i = 0; i < archover.length(); ++i) {
			data[pos++] = (byte) archover.charAt(i);
		}
		digester.update(data);
		byte[] digest = digester.digest();
		StringBuffer buf = new StringBuffer();
		char[] hexdigits =
			{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
		for (int i = 0; i < 16; ++i) {
			char val1 = hexdigits[(digest[i] >> 4) & 0xf];
			char val2 = hexdigits[digest[i] & 0xf];
			buf.append(val1).append(val2);
		}
		return buf.toString();
	}
Generate an MD5 hash based just on executable metadata
@param nmover is name of executable
@param compover is architecture metadata
@param archover is architecture metadata
@return the md5 result as an ascii string
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/GenSignatures.java