Пример #1
0
        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));
        }
Пример #2
0
        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}");
        }