public void Init(IDerivationParameters parameters) { KdfDoublePipelineIterationParameters dpiParams = parameters as KdfDoublePipelineIterationParameters; if (dpiParams == null) { throw new ArgumentException("Wrong type of arguments given"); } // --- init mac based PRF --- this.prf.Init(new KeyParameter(dpiParams.Ki)); // --- set arguments --- this.fixedInputData = dpiParams.FixedInputData; int r = dpiParams.R; 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(IntegerMax) == 1 ? Int32.MaxValue : maxSize.IntValue; } else { this.maxSizeExcl = IntegerMax.IntValue; } this.useCounter = dpiParams.UseCounter; // --- set operational state --- generatedBytes = 0; }
private void KdfDblPipelineCounterTest() { string file = "KDFDblPipelineCounter_gen.rsp"; ArrayList vectors = CavpReader.ReadVectorFile(file); foreach (Vector vector in vectors) { if (vector.HeaderAsString("CTRLOCATION") != "AFTER_ITER") { continue; } IMac prf = CavpReader.CreatePrf(vector); KdfDoublePipelineIterationBytesGenerator gen = new KdfDoublePipelineIterationBytesGenerator(prf); int r = -1; { string rlen = vector.HeaderAsString("RLEN"); if (rlen == null) { Assert.Fail("No RLEN"); } r = Int32.Parse(rlen.Split('_')[0]); } int count = vector.ValueAsInt("COUNT"); int l = vector.ValueAsInt("L"); byte[] ki = vector.ValueAsBytes("KI"); byte[] fixedInputData = vector.ValueAsBytes("FixedInputData"); KdfDoublePipelineIterationParameters param = KdfDoublePipelineIterationParameters.CreateWithCounter(ki, fixedInputData, r); gen.Init(param); byte[] koGenerated = new byte[l / 8]; gen.GenerateBytes(koGenerated, 0, koGenerated.Length); byte[] koVectors = vector.ValueAsBytes("KO"); CompareKO(file, vector, count, koGenerated, koVectors); } }
private void KdfDblPipelineNoCounterTest() { string file = "KDFDblPipelineNoCounter_gen.rsp"; ArrayList vectors = CavpReader.ReadVectorFile(file); foreach (Vector vector in vectors) { IMac prf = CavpReader.CreatePrf(vector); KdfDoublePipelineIterationBytesGenerator gen = new KdfDoublePipelineIterationBytesGenerator(prf); int count = vector.ValueAsInt("COUNT"); int l = vector.ValueAsInt("L"); byte[] ki = vector.ValueAsBytes("KI"); byte[] fixedInputData = vector.ValueAsBytes("FixedInputData"); KdfDoublePipelineIterationParameters param = KdfDoublePipelineIterationParameters.CreateWithoutCounter(ki, fixedInputData); gen.Init(param); byte[] koGenerated = new byte[l / 8]; gen.GenerateBytes(koGenerated, 0, koGenerated.Length); byte[] koVectors = vector.ValueAsBytes("KO"); CompareKO(file, vector, count, koGenerated, koVectors); } }