public MessageDigest get() throws NoSuchAlgorithmException { if(javaName == null) { if(this.name().equals("ED2K")) return new Ed2MessageDigest(); if(this.name().equals("TTH")) return new TigerTree(); } if(name().equals("SHA256")) { // User the pool return freenet.crypt.SHA256.getMessageDigest(); } else { return MessageDigest.getInstance(javaName, Util.mdProviders.get(javaName)); } }
public static boolean strictEquals(HashResult[] results, HashResult[] hashes) { if(results.length != hashes.length) { Logger.error(HashResult.class, "Hashes not equal: "+results.length+" hashes vs "+hashes.length+" hashes"); return false; } for(int i=0;i<results.length;i++) { if(results[i].type != hashes[i].type) { // FIXME Db4o kludge if(HashType.valueOf(results[i].type.name()) != HashType.valueOf(hashes[i].type.name())) { Logger.error(HashResult.class, "Hashes not the same type: "+results[i].type.name()+" vs "+hashes[i].type.name()); return false; } } if(!Arrays.equals(results[i].result, hashes[i].result)) { Logger.error(HashResult.class, "Hash "+results[i].type.name()+" not equal"); return false; } } return true; }
@Override public SimpleFieldSet getFieldSet() { if(hashes == null) { Logger.error(this, "Hashes == null, possibly persistence issue caused prior to build 1411 on "+this); return null; } SimpleFieldSet fs = new SimpleFieldSet(false); SimpleFieldSet values = new SimpleFieldSet(false); for(HashResult hash : hashes) { if(hash == null) { Logger.error(this, "Hash == null, possibly persistence issue caused prior to build 1411 on "+this); return null; } values.putOverwrite(hash.type.name(), hash.hashAsHex()); } fs.put("Hashes", values); fs.putOverwrite("Identifier", identifier); fs.put("Global", global); return fs; }
Logger.debug(this, "Computed hashes for "+this+" for "+block.desiredURI+" size "+origSize); for(HashResult res : hashes) { Logger.debug(this, res.type.name()+" : "+res.hashAsHex());