private BitString ConcatenatePieceOntoOtherInfo(string workingPiece) { BitString oi = new BitString(0); if (workingPiece.Equals("uPartyInfo", StringComparison.OrdinalIgnoreCase)) { if (_thisPartyKeyAgreementRole == KeyAgreementRole.InitiatorPartyU) { oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_thisPartyOtherInfo.PartyId)); oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_thisPartyOtherInfo.DkmNonce)); } else { oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_otherPartyOtherInfo.PartyId)); oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_otherPartyOtherInfo.DkmNonce)); } return(oi); } if (workingPiece.Equals("vPartyInfo", StringComparison.OrdinalIgnoreCase)) { if (_thisPartyKeyAgreementRole == KeyAgreementRole.ResponderPartyV) { oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_thisPartyOtherInfo.PartyId)); oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_thisPartyOtherInfo.DkmNonce)); } else { oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_otherPartyOtherInfo.PartyId)); oi = oi.ConcatenateBits(BitString.GetAtLeastZeroLengthBitString(_otherPartyOtherInfo.DkmNonce)); } return(oi); } if (workingPiece.Equals("counter", StringComparison.OrdinalIgnoreCase)) { oi = oi.ConcatenateBits(new BitString(32).BitStringAddition(BitString.One())); return(oi); } if (workingPiece.StartsWith("literal[", StringComparison.OrdinalIgnoreCase)) { // remove the "literal[]" to get just the hex value workingPiece = workingPiece.Replace("literal[", "").Replace("]", ""); oi = oi.ConcatenateBits(new BitString(workingPiece)); return(oi); } throw new ArgumentException(nameof(workingPiece)); }
private void GetDataFromPiece(Dictionary <string, BitString> fixedInfoParts, string workingPiece, FixedInfoParameter fixedInfoParameter) { if (workingPiece.Equals("uPartyInfo", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyU.PartyId) .ConcatenateBits( BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyU.EphemeralData))); return; } if (workingPiece.Equals("uPartyId", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyU.PartyId)); return; } if (workingPiece.Equals("uEphemeralData", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyU.EphemeralData)); return; } if (workingPiece.Equals("vPartyInfo", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyV.PartyId) .ConcatenateBits( BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyV.EphemeralData))); return; } if (workingPiece.Equals("vPartyId", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyV.PartyId)); return; } if (workingPiece.Equals("vEphemeralData", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.GetAtLeastZeroLengthBitString(fixedInfoParameter.FixedInfoPartyV.EphemeralData)); return; } if (workingPiece.Equals("L", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, BitString.To32BitString(fixedInfoParameter.L)); return; } if (workingPiece.Equals("salt", StringComparison.OrdinalIgnoreCase)) { if (fixedInfoParameter.Salt?.BitLength > 0) { // We only want to add the salt to the fixed info when it isn't the default if (fixedInfoParameter.Salt.ToPositiveBigInteger() == 0) { return; } fixedInfoParts.Add(workingPiece, fixedInfoParameter.Salt); } return; } if (workingPiece.Equals("iv", StringComparison.OrdinalIgnoreCase)) { if (fixedInfoParameter.Iv?.BitLength > 0) { fixedInfoParts.Add(workingPiece, fixedInfoParameter.Iv); } return; } if (workingPiece.Equals("counter", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, new BitString(32).BitStringAddition(BitString.One())); return; } if (workingPiece.Equals("algorithmId", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, fixedInfoParameter.AlgorithmId); return; } if (workingPiece.Equals("label", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, fixedInfoParameter.Label); return; } if (workingPiece.Equals("context", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, fixedInfoParameter.Context); return; } if (workingPiece.Equals("t", StringComparison.OrdinalIgnoreCase)) { fixedInfoParts.Add(workingPiece, fixedInfoParameter.T); return; } if (workingPiece.StartsWith("literal[", StringComparison.OrdinalIgnoreCase)) { // remove the "literal[]" to get just the hex value workingPiece = workingPiece.Replace("literal[", "").Replace("]", ""); fixedInfoParts.Add(workingPiece, new BitString(workingPiece)); return; } if (workingPiece.StartsWith("entropyBits[", StringComparison.OrdinalIgnoreCase)) { workingPiece = workingPiece.Replace("entropyBits[", "").Replace("]", ""); int.TryParse(workingPiece, out var result); fixedInfoParts.Add("entropyBits", fixedInfoParameter.EntropyBits); return; } throw new ArgumentException($"{nameof(workingPiece)}: {workingPiece}"); }