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); }
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))); }
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)); }