public void receiveCAVPVectors(String name, Properties config, Properties vectors) { // create Mac based PRF from PRF property, create the KDF final Mac prf = CAVPReader.createPRF(config); final KDFDoublePipelineIterationBytesGenerator gen = new KDFDoublePipelineIterationBytesGenerator(prf); final int count = Integer.parseInt(vectors.getProperty("COUNT")); final int l = Integer.parseInt(vectors.getProperty("L")); final byte[] ki = Hex.decode(vectors.getProperty("KI")); final byte[] fixedInputData = Hex.decode(vectors.getProperty("FixedInputData")); final KDFDoublePipelineIterationParameters params = KDFDoublePipelineIterationParameters.createWithoutCounter(ki, fixedInputData); gen.init(params); final byte[] koGenerated = new byte[l / 8]; gen.generateBytes(koGenerated, 0, koGenerated.length); final byte[] koVectors = Hex.decode(vectors.getProperty("KO")); compareKO(name, config, count, koGenerated, koVectors); }
public void init(DerivationParameters params) { if (!(params instanceof KDFDoublePipelineIterationParameters)) { throw new IllegalArgumentException("Wrong type of arguments given"); } KDFDoublePipelineIterationParameters dpiParams = (KDFDoublePipelineIterationParameters)params; // --- init mac based PRF --- this.prf.init(new KeyParameter(dpiParams.getKI())); // --- set arguments --- this.fixedInputData = dpiParams.getFixedInputData(); int r = dpiParams.getR(); this.ios = new byte[r / 8]; if (dpiParams.useCounter()) { // this is more conservative than the spec BigInteger maxSize = TWO.pow(r).multiply(BigInteger.valueOf(h)); this.maxSizeExcl = maxSize.compareTo(INTEGER_MAX) == 1 ? Integer.MAX_VALUE : maxSize.intValue(); } else { this.maxSizeExcl = Integer.MAX_VALUE; } this.useCounter = dpiParams.useCounter(); // --- set operational state --- generatedBytes = 0; }
public void receiveCAVPVectors(String name, Properties config, Properties vectors) { // out.println(" === " + name + " === "); // out.println(" --- config --- "); // out.println(config); // out.println(" --- vectors --- "); // out.println(vectors); // always skip AFTER_FIXED if (!config.getProperty("CTRLOCATION").matches("AFTER_ITER")) { return; } // create Mac based PRF from PRF property, create the KDF final Mac prf = CAVPReader.createPRF(config); final KDFDoublePipelineIterationBytesGenerator gen = new KDFDoublePipelineIterationBytesGenerator(prf); Matcher matcherForR = CAVPReader.PATTERN_FOR_R.matcher(config.getProperty("RLEN")); if (!matcherForR.matches()) { throw new IllegalStateException("RLEN value should always match"); } final int r = Integer.parseInt(matcherForR.group(1)); final int count = Integer.parseInt(vectors.getProperty("COUNT")); final int l = Integer.parseInt(vectors.getProperty("L")); final byte[] ki = Hex.decode(vectors.getProperty("KI")); final byte[] fixedInputData = Hex.decode(vectors.getProperty("FixedInputData")); final KDFDoublePipelineIterationParameters params = KDFDoublePipelineIterationParameters.createWithCounter(ki, fixedInputData, r); gen.init(params); final byte[] koGenerated = new byte[l / 8]; gen.generateBytes(koGenerated, 0, koGenerated.length); final byte[] koVectors = Hex.decode(vectors.getProperty("KO")); compareKO(name, config, count, koGenerated, koVectors); }