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;
        }
Ejemplo n.º 2
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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }