Пример #1
0
        public KdfResult Kdf(KdfParameterIkeV1 param, BitString fixedInfo = null)
        {
            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);
        }
Пример #2
0
        public KdfResult Kdf(KdfParameterIkeV1 param, BitString fixedInfo = null)
        {
            var hashFunction = ShaAttributes.GetHashFunctionFromEnum(param.HashFunction);

            var kdf = _ikeV1Factory.GetIkeV1Instance(AuthenticationMethods.Dsa, hashFunction);

            var result = kdf.GenerateIke(param.InitiatorEphemeralData, param.ResponderEphemeralData, param.Z,
                                         param.AdditionalInitiatorNonce, param.AdditionalResponderNonce, null);

            var dkm = new BitString(0)
                      .ConcatenateBits(result.SKeyIdD)
                      .ConcatenateBits(result.SKeyIdA)
                      .ConcatenateBits(result.SKeyIdE);

            return(new KdfResult(dkm.GetMostSignificantBits(param.L)));
        }
Пример #3
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));
        }