Esempio n. 1
0
        public async Task <BigInteger> GetPrism(Guid user)
        {
            var vault = await GetById(user);

            return(vault != null ? vault.Prismi
                : await _manager.GetPrism(user));
        }
        public async Task <ActionResult <ApplyResponse> > Apply([FromRoute] Guid uid, [FromRoute] string pass)
        {
            if (!pass.FromBase64UrlString(out byte[] bytesPass))
            {
                _logger.LogInformation($"Apply: Invalid pass for {uid}");
                return(BadRequest("Invalid parameters"));
            }

            C25519Point g;

            try
            {
                g = C25519Point.From(bytesPass);
                if (!g.IsValid)
                {
                    _logger.LogInformation($"Apply: Invalid point for {uid}");
                    return(BadRequest("Invalid parameters"));
                }
            }
            catch (ArgumentException)
            {
                _logger.LogInformation($"Apply: Invalid point for {uid} with error");
                return(BadRequest("Invalid parameters"));
            }

            var s = await _manager.GetPrism(uid);

            if (s == BigInteger.Zero)
            {
                _logger.LogInformation($"Apply: Account {uid} does not exist");
                return(BadRequest("Invalid parameters"));
            }

            var gs = g * s;

            _logger.LogInformation($"Login attempt for {uid}", uid, pass);
            return(new ApplyResponse
            {
                Prism = gs.ToByteArray(),
                Token = new TranToken().ToByteArray()
            });
        }