public ActionResult <string> GenerateDigest([FromBody] string request, SigningAlgoritm algoritm = SigningAlgoritm.SHA256WITHRSA)
 {
     _logger.LogDebug($"Calling POST /generateDigest{algoritm} endpoint ");
     if (request == null)
     {
         return(BadRequest());
     }
     try
     {
         request = DecodeBase64(request);
     }
     catch (Exception ex)
     {
         _logger.LogError($"Error decoding request data", ex);
         return(BadRequest("Error decoding request data, check base64 encoding"));
     }
     if (algoritm == SigningAlgoritm.SHA256WITHRSA)
     {
         return($"SHA-256={Sha256Helper.GenerateHash(request)}");
     }
     else if (algoritm == SigningAlgoritm.SHA512WITHRSA)
     {
         return($"SHA-512={Sha512Helper.GenerateHash(request)}");
     }
     else
     {
         return(BadRequest($"Unsupported digest algoritm {algoritm}"));
     }
 }
    public void ReturnRandomValue()
    {
        // Arrange & Act
        var result = Sha512Helper.GetRandomValue();

        _output.WriteLine("Generated hash: " + result);

        // Assert
        Assert.Equal(128, result.Length);
    }
Beispiel #3
0
    public async Task <IActionResult> Edit(CertificateViewModel cvm, CancellationToken cancellationToken)
    {
        var _user = await _userManager.GetUserAsync(User);

        if (ModelState.IsValid)
        {
            if (cvm.File != null)
            {
                if (cvm.File.CheckFileExtension(_fileSettings.Expansion))
                {
                    ModelState.AddModelError("File", _localizer["FileExtensionError"]);
                    return(View(cvm));
                }

                using (var binaryReader = new BinaryReader(cvm.File.OpenReadStream()))
                {
                    if (cvm.File.CheckFileSize(_fileSettings.MinSize, _fileSettings.SizeLimit))
                    {
                        ModelState.AddModelError("File", _localizer["FileSizeError"]);
                        return(View(cvm));
                    }

                    var path = $"/private/{Sha512Helper.GetRandomValue()}.jpg";

                    using (var stream = System.IO.File.Create(_appEnvironment.WebRootPath + path))
                    {
                        await cvm.File.CopyToAsync(stream, cancellationToken);
                    }

                    cvm.Path = path;
                }
            }

            try
            {
                await _certificateService.UpdateCertificateAsync(cvm, _user.Id, cancellationToken);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                _logger.LogError("An error occurred while updating the certificate: " + ex.Message);

                return(RedirectToAction(nameof(Index)));
            }

            _logger.LogInformation($"Certificate {cvm.Id} changed by User {_user.Id}");

            return(RedirectToAction(nameof(Details), new { id = cvm.Id }));
        }

        return(View(cvm));
    }
Beispiel #4
0
    public async Task <IActionResult> Create(CertificateViewModel cvm, CancellationToken cancellationToken)
    {
        var _user = await _userManager.GetUserAsync(User);

        if (cvm.File is null)
        {
            ModelState.AddModelError("File", _localizer["Required"]);
        }

        if (ModelState.IsValid)
        {
            if (cvm.File.CheckFileExtension(_fileSettings.Expansion))
            {
                ModelState.AddModelError("File", _localizer["FileExtensionError"]);
                return(View());
            }

            using (var binaryReader = new BinaryReader(cvm.File.OpenReadStream()))
            {
                if (cvm.File.CheckFileSize(_fileSettings.MinSize, _fileSettings.SizeLimit))
                {
                    ModelState.AddModelError("File", _localizer["FileSizeError"]);
                    return(View());
                }

                var path = $"/private/{Sha512Helper.GetRandomValue()}.jpg";

                using (var stream = System.IO.File.Create(_appEnvironment.WebRootPath + path))
                {
                    await cvm.File.CopyToAsync(stream, cancellationToken);
                }

                cvm.Path = path;
            }

            await _certificateService.CreateCertificateAsync(cvm, _user.Id, cancellationToken);

            _logger.LogInformation($"New certificate created by User {_user.Id}");

            return(RedirectToAction(nameof(Index)));
        }

        return(View());
    }
        public IActionResult SignData([FromBody] SigningRequest request)
        {
            _logger.LogDebug($"Calling POST /generateDigest endpoint ");
            if (request == null)
            {
                return(BadRequest());
            }

            _logger.LogDebug($"Calling POST /generateDigest endpoint ");
            try
            {
                request.DataToSign = DecodeBase64(request.DataToSign);
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error decoding data to sign", ex);
                return(BadRequest("Error decoding data to sign, check base64 encoding"));
            }
            if (request.Algorithm == SigningAlgoritm.SHA256WITHRSA)
            {
                var bytes     = Encoding.UTF8.GetBytes(request.DataToSign ?? request.Digest.Replace("SHA-256=", ""));
                var signBytes = Sha256Helper.SignData(request.PrivateKey, bytes);
                var signature = Convert.ToBase64String(signBytes);
                var testValid = Sha256Helper.VerifyData(request.Certificate, bytes, signBytes);

                var response = new SigningResponse()
                {
                    Algorithm = Enum.GetName(typeof(SigningAlgoritm),
                                             request.Algorithm),
                    Headers              = "digest tpp-transaction - id tpp - request - id timestamp psu-id",
                    KeyId                = request.KeyID,
                    Signature            = signature,
                    CertificateAuthority = "CA",
                    IsValid              = testValid
                };


                return(Ok(response));
            }
            else if (request.Algorithm == SigningAlgoritm.SHA512WITHRSA)
            {
                var bytes     = Encoding.UTF8.GetBytes(request.DataToSign ?? request.Digest.Replace("SHA-512=", ""));
                var signBytes = Sha512Helper.SignData(request.PrivateKey, bytes);
                var signature = Convert.ToBase64String(signBytes);
                var testValid = Sha512Helper.VerifyData(request.Certificate, bytes, signBytes);
                var response  = new SigningResponse()
                {
                    Algorithm            = GetEnumDescription(request.Algorithm),
                    Headers              = "digest tpp-transaction - id tpp - request - id timestamp psu-id",
                    KeyId                = request.KeyID,
                    Signature            = signature,
                    CertificateAuthority = "CA",
                    IsValid              = testValid
                };
                return(Ok(response));
            }
            else
            {
                return(BadRequest($"Unsupported signing algoritm {request.Algorithm}"));
            }
        }