ICEAttacker { public BigInteger attack() { BigInteger result = null; long currentTime = System.currentTimeMillis(); switch (server) { case NORMAL: result = attackNormal(); break; case ORACLE: result = attackOracle(); break; } LOGGER.info("Time needed for the attack: {} seconds", ((System.currentTimeMillis() - currentTime) / 1000)); return result; } ICEAttacker(ECOracle oracle, ServerType server, int oracleAdditionalEquations, NamedGroup group); BigInteger attack(); BigInteger bruteForceWithAdditionalOracleEquations(int[] usedOracleEquations, BigInteger[] congs,
            BigInteger[] modulis, int pointer);  }
@Test() @Category(SlowTests.class) public void testAttack() { CONSOLE.info("Starting ICEAttacker test... this may take some time"); TestECOracle oracle = new TestECOracle(NamedGroup.SECP256R1); ICEAttacker attacker = new ICEAttacker(oracle, ICEAttacker.ServerType.ORACLE, 4, NamedGroup.SECP256R1); BigInteger result = attacker.attack(); LOGGER.debug(result); LOGGER.debug(oracle.getPrivateKey()); assertEquals(oracle.getPrivateKey(), result); }