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