From cb87f9f307afa93a8df89e106e64941ddebacd88 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 8 Nov 2014 17:57:17 +0000 Subject: [PATCH] ProfileOrganizer: More efficient slice calculation, don't pollute Hash cache --- .../src/net/i2p/router/peermanager/ProfileOrganizer.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index 31ff6a03a..ca2829b15 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -1334,12 +1334,13 @@ public class ProfileOrganizer { * others. * @return 0-3 */ - private static int getSubTier(Hash peer, Hash randomKey) { - byte[] data = new byte[Hash.HASH_LENGTH + 4]; + private int getSubTier(Hash peer, Hash randomKey) { + // input is first 36 bytes; output is last 32 bytes + byte[] data = new byte[Hash.HASH_LENGTH + 4 + Hash.HASH_LENGTH]; System.arraycopy(peer.getData(), 0, data, 0, Hash.HASH_LENGTH); System.arraycopy(randomKey.getData(), 0, data, Hash.HASH_LENGTH, 4); - Hash rh = SHA256Generator.getInstance().calculateHash(data); - return rh.getData()[0] & 0x03; + _context.sha().calculateHash(data, 0, Hash.HASH_LENGTH + 4, data, Hash.HASH_LENGTH + 4); + return data[Hash.HASH_LENGTH + 4] & 0x03; } public boolean isSelectable(Hash peer) {