@Override public String toString() { return getClassName() + ":" + hashToString(this.classHash); } }
/** * Convert a string of hex digits to a hash. * * @param s * string of hex digits * @return the hash value represented by the string */ public static byte[] stringToHash(String s) { if (s.length() % 2 != 0) { throw new IllegalArgumentException("Invalid hash string: " + s); } byte[] hash = new byte[s.length() / 2]; for (int i = 0; i < s.length(); i += 2) { byte b = (byte) ((hexDigitValue(s.charAt(i)) << 4) + hexDigitValue(s.charAt(i + 1))); hash[i / 2] = b; } return hash; }
@Override public boolean equals(Object o) { if (!(o instanceof ClassHash)) { return false; } return isSameHash((ClassHash) o); }
@Override public void writeXML(XMLOutput xmlOutput) throws IOException { xmlOutput.startTag(CLASS_HASH_ELEMENT_NAME); xmlOutput.addAttribute("class", className); xmlOutput.addAttribute("value", hashToString(classHash)); xmlOutput.stopTag(false); for (Map.Entry<XMethod, MethodHash> entry : methodHashMap.entrySet()) { xmlOutput.startTag(METHOD_HASH_ELEMENT_NAME); xmlOutput.addAttribute("name", entry.getKey().getName()); xmlOutput.addAttribute("signature", entry.getKey().getSignature()); xmlOutput.addAttribute("isStatic", String.valueOf(entry.getKey().isStatic())); xmlOutput.addAttribute("value", hashToString(entry.getValue().getMethodHash())); xmlOutput.stopTag(true); } xmlOutput.closeTag(CLASS_HASH_ELEMENT_NAME); }
@Test public void testStringToHash() { byte[] hash2 = ClassHash.stringToHash(s); Assert.assertTrue(Arrays.equals(hash, hash2)); }
@Test public void testHashToString() { String s2 = ClassHash.hashToString(hash); Assert.assertEquals(s, s2); }
@Override public String toString() { return getClassName() + ":" + hashToString(this.classHash); } }
@Override public void writeXML(XMLOutput xmlOutput) throws IOException { xmlOutput.startTag(CLASS_HASH_ELEMENT_NAME); xmlOutput.addAttribute("class", className); xmlOutput.addAttribute("value", hashToString(classHash)); xmlOutput.stopTag(false); for (Map.Entry<XMethod, MethodHash> entry : methodHashMap.entrySet()) { xmlOutput.startTag(METHOD_HASH_ELEMENT_NAME); xmlOutput.addAttribute("name", entry.getKey().getName()); xmlOutput.addAttribute("signature", entry.getKey().getSignature()); xmlOutput.addAttribute("isStatic", String.valueOf(entry.getKey().isStatic())); xmlOutput.addAttribute("value", hashToString(entry.getValue().getMethodHash())); xmlOutput.stopTag(true); } xmlOutput.closeTag(CLASS_HASH_ELEMENT_NAME); }
@Override public boolean equals(Object o) { if (!(o instanceof ClassHash)) { return false; } return isSameHash((ClassHash) o); }
/** * Convert a string of hex digits to a hash. * * @param s * string of hex digits * @return the hash value represented by the string */ public static byte[] stringToHash(String s) { if (s.length() % 2 != 0) { throw new IllegalArgumentException("Invalid hash string: " + s); } byte[] hash = new byte[s.length() / 2]; for (int i = 0; i < s.length(); i += 2) { byte b = (byte) ((hexDigitValue(s.charAt(i)) << 4) + hexDigitValue(s.charAt(i + 1))); hash[i / 2] = b; } return hash; }