Example #1
0
        public void ShouldMultiExpandSameResult()
        {
            var fixedInfo = new BitString(128);
            var salt      = new BitString(128);
            var z         = new BitString(128);
            var hmacAlg   = HashFunctions.Sha2_d256;
            var l         = 256;

            var hkdfParam = new KdfParameterHkdf()
            {
                L       = l,
                Salt    = salt,
                Z       = z,
                HmacAlg = hmacAlg
            };
            var multiExpandHkdfParam = new KdfMultiExpansionParameterHkdf()
            {
                Salt                = salt,
                Z                   = z,
                HmacAlg             = hmacAlg,
                IterationParameters = new List <KdfMultiExpansionIterationParameter>()
                {
                    new KdfMultiExpansionIterationParameter(l, fixedInfo),
                    new KdfMultiExpansionIterationParameter(l, fixedInfo),
                }
            };

            var hkdfResult            = _kdfVisitor.Kdf(hkdfParam, fixedInfo);
            var multiExpandHkdfResult = _kdfMultiExpansionVisitor.Kdf(multiExpandHkdfParam);

            Assert.True(multiExpandHkdfResult.Results.Count == 2);
            Assert.AreEqual(hkdfResult.DerivedKey, multiExpandHkdfResult.Results[0].DerivedKey);
            Assert.AreEqual(hkdfResult.DerivedKey, multiExpandHkdfResult.Results[1].DerivedKey);
        }
Example #2
0
        public KdfResult Kdf(KdfParameterHkdf param, BitString fixedInfo)
        {
            var result      = _kdfVisitor.Kdf(param, fixedInfo);
            var dkmBytesLen = result.DerivedKey.BitLength.CeilingDivide(BitString.BITSINBYTE);

            // Modify a random byte within DKM
            result.DerivedKey[_random.GetRandomInt(0, dkmBytesLen)] += 2;

            return(result);
        }
Example #3
0
        public KdfResult Kdf(KdfParameterHkdf param, BitString fixedInfo)
        {
            var kdf = _hkdfFactory.GetKdf(ShaAttributes.GetHashFunctionFromEnum(param.HmacAlg));

            var result = kdf.DeriveKey(param.Salt, param.Z, fixedInfo, param.L / BitString.BITSINBYTE);

            if (result.Success)
            {
                return(new KdfResult(result.DerivedKey));
            }

            return(new KdfResult(result.ErrorMessage));
        }
Example #4
0
        public KdfResult Kdf(KdfParameterHkdf param, BitString fixedInfo)
        {
            var zBytesLen = param.Z.BitLength.CeilingDivide(BitString.BITSINBYTE);

            var modifiedParam = new KdfParameterIkeV1()
            {
                L            = param.L,
                Z            = param.Z.GetDeepCopy(),
                HashFunction = param.HmacAlg
            };

            // Modify a random byte within Z
            modifiedParam.Z[_random.GetRandomInt(0, zBytesLen)] += 2;

            return(_kdfVisitor.Kdf(modifiedParam, fixedInfo));
        }