public void Init(IDerivationParameters param) { KdfCounterParameters kdfParams = param as KdfCounterParameters; if (kdfParams == null) { throw new ArgumentException("Wrong type of arguments given"); } // --- init mac based PRF --- this.prf.Init(new KeyParameter(kdfParams.Ki)); // --- set arguments --- this.fixedInputDataCtrPrefix = kdfParams.FixedInputDataCounterPrefix; this.fixedInputData_afterCtr = kdfParams.FixedInputDataCounterSuffix; int r = kdfParams.R; this.ios = new byte[r / 8]; BigInteger maxSize = Two.Pow(r).Multiply(BigInteger.ValueOf(h)); this.maxSizeExcl = maxSize.CompareTo(IntegerMax) == 1 ? Int32.MaxValue : maxSize.IntValue; // --- set operational state --- generatedBytes = 0; }
private void ProcessVectors(string name, ArrayList vectors) { foreach (Vector vector in vectors) { IMac prf = CavpReader.CreatePrf(vector); KdfCounterBytesGenerator gen = new KdfCounterBytesGenerator(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"); if (vector.HeaderAsString("CTRLOCATION") == "BEFORE_FIXED") { byte[] fixedInputData = vector.ValueAsBytes("FixedInputData"); KdfCounterParameters param = new KdfCounterParameters(ki, null, fixedInputData, r); gen.Init(param); } else if (vector.HeaderAsString("CTRLOCATION") == "AFTER_FIXED") { byte[] fixedInputData = vector.ValueAsBytes("FixedInputData"); KdfCounterParameters param = new KdfCounterParameters(ki, fixedInputData, null, r); gen.Init(param); } else if (vector.HeaderAsString("CTRLOCATION") == "MIDDLE_FIXED") { byte[] DataBeforeCtrData = vector.ValueAsBytes("DataBeforeCtrData"); byte[] DataAfterCtrData = vector.ValueAsBytes("DataAfterCtrData"); KdfCounterParameters param = new KdfCounterParameters(ki, DataBeforeCtrData, DataAfterCtrData, r); gen.Init(param); } else { throw new InvalidOperationException("Unknown CTRLOCATION: " + vector.HeaderAsString("CTRLOCATION")); } byte[] koGenerated = new byte[l / 8]; gen.GenerateBytes(koGenerated, 0, koGenerated.Length); byte[] koVectors = vector.ValueAsBytes("KO"); CompareKO(name, vector, count, koGenerated, koVectors); } }