private KeyToken createUnusedToken(final Message message) { byte[] address = message.getDestination().getAddress(); byte[] token = new byte[tokenSizeLimit]; KeyToken result; // TODO what to do when there are no more unused tokens left? do { rng.nextBytes(token); result = KeyToken.fromValues(token, address, message.getDestinationPort()); } while (!usedTokens.add(result)); return result; } }