Exemplo n.º 1
0
        public static TLString GetVBytes(TLString passwordBytes, TLPasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow algo)
        {
            if (!TLUtils.CheckPrime(algo.P.Data, algo.G.Value))
            {
                return(null);
            }

            return(TLString.FromBigEndianData(GetBigIntegerBytes(GetV(passwordBytes, algo))));
        }
Exemplo n.º 2
0
        private static BigInteger GetV(TLString passwordBytes, TLPasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow algo)
        {
            var g = BigInteger.ValueOf(algo.G.Value);
            var p = new BigInteger(1, algo.P.Data);

            var x_bytes = GetX(passwordBytes, algo);
            var x       = new BigInteger(1, x_bytes.Data);

            return(g.ModPow(x, p));
        }
Exemplo n.º 3
0
        public static TLString GetX(TLString password, TLPasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow algo)
        {
            var x_bytes = Telegram.Api.Helpers.Utils.ComputeSHA256(TLUtils.Combine(algo.Salt1.Data, password.Data, algo.Salt1.Data));

            x_bytes = Telegram.Api.Helpers.Utils.ComputeSHA256(TLUtils.Combine(algo.Salt2.Data, x_bytes, algo.Salt2.Data));
            x_bytes = PBKDF2.GetHash(x_bytes.AsBuffer(), algo.Salt1.Data.AsBuffer()).ToArray();
            x_bytes = Telegram.Api.Helpers.Utils.ComputeSHA256(TLUtils.Combine(algo.Salt2.Data, x_bytes, algo.Salt2.Data));

            return(TLString.FromBigEndianData(x_bytes));
        }