示例#1
0
        public bool DecryptHashCode(IResultOfEncryptionHash resultOfEncryptionHash)
        {
            var hashRes = resultOfEncryptionHash as DSAResultOfEncryptionHash
                          ?? throw new ArgumentException("Результат хеша был не того типа.");

            var p = Subscriber.P;
            var q = Subscriber.Q;
            var g = Subscriber.G;
            var y = hashRes.Y; // открытый ключ отправителя
            var m = hashRes.M; // хэш

            var r = hashRes.R;
            var s = hashRes.S;

            var w  = (CryptoFormula.АлгоритмЕвклида(q, s, out var euErr) ?? throw new Exception(euErr));
            var u1 = ((m % q) * (w % q)) % q;
            var u2 = ((r % q) * (w % q)) % q;

            ////                   (g.ВСтепень(u1) mod p) mod q
            //var v = (((((((g % p) % q).ВСтепень((u1 % p) % q)) % p) % q)
            ////                   (y.ВСтепень(u2) mod p) mod q
            //    *   (((((y % p) % q).ВСтепень((u2 % p) % q)) % p) % q))
            //                                                            % p) % q;

            var v = ((g.ВСтепень(u1) * y.ВСтепень(u2)) % p) % q;

            hashRes.W  = w;
            hashRes.U1 = u1;
            hashRes.U2 = u2;
            hashRes.V  = v;

            return(v == r);
        }
示例#2
0
        public MessageEventArgs(string text, TSub from, TSub to, IResultOfEncryptionHash resultOfEncryptionHash)
        {
            Text = text;
            From = from;
            To   = to;
            ResultOfEncryptionHash = resultOfEncryptionHash;
            DateCreated            = DateTime.UtcNow;

            // Полное сообщение в чат с датой и т.п. Должно быть заполнено каким нибудь контроллером, если это будет нужно
            Message = text;
        }
        public bool DecryptHashCode(IResultOfEncryptionHash resultOfEncryptionHash)
        {
            var hashRes = resultOfEncryptionHash as ElgamalResultOfEncryptionHash
                          ?? throw new ArgumentException("Результат хеша был не того типа.");

            var p = Subscriber.P;
            var a = hashRes.A;
            var b = hashRes.B;
            var y = hashRes.Y;
            var g = Subscriber.G;
            var m = hashRes.M;

            var leftSolution  = (y.ВСтепень(a) % p) * (a.ВСтепень(b) % p) % p;
            var rightSolution = (g.ВСтепень(m) % p);

            return(leftSolution == rightSolution);
        }
 public bool DecryptHashCode(IResultOfEncryptionHash resultOfEncryptionHash)
 {
     throw new NotImplementedException();
 }