public IKdfParameter CreateParameter(OneStepNoCounterConfiguration kdfConfiguration) { var fiPieces = kdfConfiguration.FixedInfoPattern.Split("||", StringSplitOptions.RemoveEmptyEntries).ToList(); var fiPiecesRemovedDelimiter = fiPieces.Select(fiPiece => fiPiece.Replace("||", "")).ToList(); var param = new KdfParameterOneStepNoCounter() { L = kdfConfiguration.L, AuxFunction = kdfConfiguration.AuxFunction, FixedInfoPattern = kdfConfiguration.FixedInfoPattern, FixedInputEncoding = kdfConfiguration.FixedInfoEncoding, // If the fixedInfoPattern contains these optional context specific fields, make up a value for them Context = kdfConfiguration.FixedInfoPattern.Contains(nameof(KdfParameterOneStep.Context), StringComparison.OrdinalIgnoreCase) ? _entropyProvider.GetEntropy(BitsOfEntropy) : null, AlgorithmId = kdfConfiguration.FixedInfoPattern.Contains(nameof(KdfParameterOneStep.AlgorithmId), StringComparison.OrdinalIgnoreCase) ? _entropyProvider.GetEntropy(BitsOfEntropy) : null, Label = kdfConfiguration.FixedInfoPattern.Contains(nameof(KdfParameterOneStep.Label), StringComparison.OrdinalIgnoreCase) ? _entropyProvider.GetEntropy(BitsOfEntropy) : null, T = GetNullOrT(kdfConfiguration.FixedInfoPattern), EntropyBits = GetEntropyBitsOrNull(kdfConfiguration.FixedInfoPattern), }; if (kdfConfiguration.SaltLen > 0) { param.Salt = kdfConfiguration.SaltMethod == MacSaltMethod.Default ? new BitString(kdfConfiguration.SaltLen) : _entropyProvider.GetEntropy(kdfConfiguration.SaltLen); } return(param); }
public KdfResult Kdf(KdfParameterOneStepNoCounter 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(KdfParameterOneStepNoCounter param, BitString fixedInfo) { var zBytesLen = param.Z.BitLength.CeilingDivide(BitString.BITSINBYTE); var modifiedParam = new KdfParameterOneStepNoCounter() { L = param.L, Salt = param.Salt, Z = param.Z.GetDeepCopy(), AuxFunction = param.AuxFunction, FixedInfoPattern = param.FixedInfoPattern, FixedInputEncoding = param.FixedInputEncoding }; // Modify a random byte within Z modifiedParam.Z[_random.GetRandomInt(0, zBytesLen)] += 2; return(_kdfVisitor.Kdf(modifiedParam, fixedInfo)); }
public KdfResult Kdf(KdfParameterOneStepNoCounter param, BitString fixedInfo) { var kdf = _kdfOneStepFactory.GetInstance(param.AuxFunction, false); return(kdf.DeriveKey(param.Z, param.L, fixedInfo, param.Salt)); }