示例#1
0
        /// <summary>
        /// Функция генерирует два случайных числа a и b меньше P, возвращает true в случае подлинности подписи
        /// </summary>
        /// <param name="P">Опубликованное простое число</param>
        /// <param name="G">Порождающий элемент</param>
        /// <param name="X">Закрытый ключ</param>
        /// <param name="Z">Подписанное сообщение</param>
        /// <param name="M">Неподписанное сообщение</param>
        /// <returns></returns>
        static bool Bob(BigInteger P, BigInteger G, BigInteger X, BigInteger Z, BigInteger M)
        {
            BigInteger A = BigIntegerRandom.GenerateRandom(0, P, new Random());

            Thread.Sleep(5);
            BigInteger B       = BigIntegerRandom.GenerateRandom(0, P, new Random());
            BigInteger C       = (BigInteger.ModPow(BigInteger.ModPow(Z, A, P) * BigInteger.ModPow(G, X * B, P), 1, P));
            BigInteger D_Bob   = BigInteger.ModPow(BigInteger.ModPow(M, A, P) * BigInteger.ModPow(G, B, P), 1, P);
            BigInteger D_Alice = Alice(C, P, X);

            return(D_Alice == D_Bob);
        }