コード例 #1
0
        public static IServerDHParams GetResponse(RequestReqDHParams reqDhParams, string privateKey, out AsymmetricCipherKeyPair serverKeyPair, out byte[] newNonce)
        {
            var pqInnerData = DeserializeRequest(reqDhParams, privateKey);

            GeneratePandG(out var p, out var g);

            KeyGenerationParameters kgp = new DHKeyGenerationParameters(new SecureRandom(), new DHParameters(p, BigInteger.ValueOf(g)));
            var keyGen = GeneratorUtilities.GetKeyPairGenerator("DH");

            keyGen.Init(kgp);

            serverKeyPair = keyGen.GenerateKeyPair();

            var publicKey = (DHPublicKeyParameters)serverKeyPair.Public;

            var dhInnerData = new TServerDHInnerData
            {
                DhPrimeAsBinary = publicKey.Parameters.P.ToByteArray(),
                Nonce           = pqInnerData.Nonce,
                ServerNonce     = pqInnerData.ServerNonce,
                G          = publicKey.Parameters.G.IntValue,
                GAAsBinary = publicKey.Y.ToByteArray(),
                ServerTime = (int)((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds()
            };

            newNonce = pqInnerData.NewNonce;

            return(SerializeResponse(pqInnerData, dhInnerData));
        }
コード例 #2
0
        private static TServerDHParamsOk SerializeResponse(TPQInnerData pqInnerData, TServerDHInnerData dhInnerData)
        {
            var dhInnerDataBuffer = Serializer.Serialize(dhInnerData);

            byte[] answer;
            try
            {
                answer = dhInnerDataBuffer.ToArray();
            }
            finally
            {
                dhInnerDataBuffer.SafeRelease();
            }

            var hashsum = Sha1Helper.ComputeHashsum(answer);

            var answerWithHash = hashsum.Concat(answer).ToArray();

            AesHelper.ComputeAesParameters(pqInnerData.NewNonce, pqInnerData.ServerNonce, out var aesKeyData);

            var encryptedAnswer = AES.EncryptAes(aesKeyData, answerWithHash);

            return(new TServerDHParamsOk
            {
                EncryptedAnswerAsBinary = encryptedAnswer,
                Nonce = pqInnerData.Nonce,
                ServerNonce = pqInnerData.ServerNonce
            });
        }