Exemplo n.º 1
0
        private async Task <bool> ContactCentralApiAsync(CentralApiSubmitTransferDto model)
        {
            var encryptedData = this.SignAndEncryptData(model);

            var client   = new HttpClient();
            var response = await client.PostAsJsonAsync(
                string.Format(CentralApiTransferSubmitUrlFormat, this.bankConfiguration.CentralApiAddress),
                encryptedData);

            return(response != null && response.IsSuccessStatusCode);
        }
Exemplo n.º 2
0
        private string SignAndEncryptData(CentralApiSubmitTransferDto model)
        {
            using (var rsa = RSA.Create())
            {
                RsaExtensions.FromXmlString(rsa, this.bankConfiguration.Key);
                var aesParams = CryptographyExtensions.GenerateKey();
                var key       = Convert.FromBase64String(aesParams[0]);
                var iv        = Convert.FromBase64String(aesParams[1]);

                var serializedModel = JsonConvert.SerializeObject(model);
                var dataObject      = new
                {
                    Model     = serializedModel,
                    Timestamp = DateTime.UtcNow
                };

                var data = JsonConvert.SerializeObject(dataObject);

                var signature = Convert.ToBase64String(rsa
                                                       .SignData(Encoding.UTF8.GetBytes(data), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));

                string encryptedKey;
                string encryptedIv;
                using (var encryptionRsa = RSA.Create())
                {
                    RsaExtensions.FromXmlString(encryptionRsa, this.bankConfiguration.CentralApiPublicKey);
                    encryptedKey = Convert.ToBase64String(encryptionRsa.Encrypt(key, RSAEncryptionPadding.Pkcs1));
                    encryptedIv  = Convert.ToBase64String(encryptionRsa.Encrypt(iv, RSAEncryptionPadding.Pkcs1));
                }

                var encryptedData = Convert.ToBase64String(CryptographyExtensions.Encrypt(data, key, iv));

                var json = new
                {
                    BankName      = this.bankConfiguration.BankName,
                    BankSwiftCode = this.bankConfiguration.UniqueIdentifier,
                    BankCountry   = this.bankConfiguration.Country,
                    EncryptedKey  = encryptedKey,
                    EncryptedIv   = encryptedIv,
                    Data          = encryptedData,
                    Signature     = signature
                };

                var jsonRequest      = JsonConvert.SerializeObject(json);
                var encryptedRequest = Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonRequest));

                return(encryptedRequest);
            }
        }