public void CanGenerateSignature()
        {
            // Arrange
            string normalizedUrl;
            string normalizedRequestParameters;

            // Act
            List <QueryParameter> parameters = Helper.GetQueryParameters(RequestUrl.Query);
            string signature = Helper.GenerateSignature(RequestUrl,
                                                        "xckey",
                                                        "xcs",
                                                        "xcb",
                                                        "xat",
                                                        "xats",
                                                        "post",
                                                        "12345",
                                                        "abcd",
                                                        SignatureTypes.HMACSHA1,
                                                        out normalizedUrl,
                                                        out normalizedRequestParameters);

            // Assert
            Assert.AreEqual("V4iyFCIi0CtoAVdOA1UgpIOaRAw=", signature);
        }
        public async Task <RongCloudSmsResult> SendCodeAsync(RongCloudSmsMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }
            if (string.IsNullOrWhiteSpace(_rongAccount.AppKey))
            {
                throw new ArgumentNullException(nameof(_rongAccount.AppKey));
            }
            if (string.IsNullOrWhiteSpace(_rongAccount.AppSecret))
            {
                throw new ArgumentNullException(nameof(_rongAccount.AppSecret));
            }

            message.CheckParameters();

            var bizParams = new Dictionary <string, string>
            {
                { "mobile", message.Mobile },
                { "templateId", message.TemplateId },
                { "region", message.Region }
            };

            foreach (var kvp in message.Vars)
            {
                bizParams.Add($"p{kvp.Key}", kvp.Value);
            }

            var signatureTuple = SignatureHelper.GenerateSignature(_rongAccount.AppSecret);
            var signatureBag   = new RongCloudSignatureBag
            {
                AppKey    = _rongAccount.AppKey,
                Nonce     = signatureTuple.nonce,
                Signature = signatureTuple.signature,
                Timestamp = signatureTuple.timestamp
            };

            var content = new FormUrlEncodedContent(bizParams);

            return(await _proxy.SendSmsAsync(signatureBag, content)
                   .Retry(_config.RetryTimes)
                   .Handle().WhenCatch <Exception>(e =>
            {
                _exceptionHandler?.Invoke(e);
                return ReturnAsDefaultResponse();
            }));
        }
Exemple #3
0
        public void CanGenerateSignature()
        {
            // sample, pub/priv key pair for test only
            RsaKeyParameters pub1 = new RsaKeyParameters(false,
                                                         new BigInteger("a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137", 16),
                                                         new BigInteger("010001", 16));

            RsaKeyParameters prv1 = new RsaPrivateCrtKeyParameters(
                new BigInteger("a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137", 16),
                new BigInteger("010001", 16),
                new BigInteger("33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325", 16),
                new BigInteger("e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443", 16),
                new BigInteger("b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd", 16),
                new BigInteger("28fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa027861979", 16),
                new BigInteger("1a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729", 16),
                new BigInteger("27156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d", 16));

            var message = "POST\n/live/in-store/v1/refund\naccept:application/json\ncontent-type:application/json\naccept;content-type\n95b0d65e9efb9f0b9e8c2f3b7744628c765477";

            byte[] bytesToSign = Encoding.UTF8.GetBytes(message);

            // Get string version of private key
            TextWriter textWriter = new StringWriter();
            PemWriter  pemWriter  = new PemWriter(textWriter);

            pemWriter.WriteObject(prv1);
            pemWriter.Writer.Flush();
            var privateKey = textWriter.ToString();

            var helper =
                new SignatureHelper(new ApiConfiguration(Region.UnitedStates, Environment.Sandbox, "THISISONLYATEST", privateKey),
                                    new CanonicalBuilder());

            var result   = helper.GenerateSignature(message);
            var sigBytes = Convert.FromBase64String(result);

            PssSigner signer = new PssSigner(new RsaEngine(), new Sha256Digest(), 20);

            signer.Init(true, pub1);
            signer.BlockUpdate(bytesToSign, 0, bytesToSign.Length);
            var resultVerify = signer.VerifySignature(sigBytes);

            Assert.IsTrue(resultVerify);
        }
Exemple #4
0
        private IActionResult GenerateTweet(IPrivateKey privateKey, IPublicKey publicKey, string message)
        {
            if (String.IsNullOrEmpty(message))
            {
                return(BadRequest("Messages must contain text"));
            }

            if (message.Length > 240)
            {
                return(BadRequest("Messages have a maximum length of 240 characters."));
            }

            var publicKeyByteString = ByteString.CopyFrom(publicKey.Bytes);

            var transaction = new TransactionBroadcast();
            var publicEntry = new PublicEntry();

            publicEntry.Amount = ByteString.CopyFrom(0);

            var contractEntry = new ContractEntry();

            contractEntry.Amount = ByteString.CopyFrom(0);
            contractEntry.Data   = ByteString.CopyFromUtf8($"tw:{message}");

            var contractEntryBase = new BaseEntry();

            contractEntryBase.SenderPublicKey = publicKeyByteString;
            contractEntryBase.TransactionFees = ByteString.CopyFrom(0);

            contractEntry.Base = contractEntryBase;
            publicEntry.Base   = contractEntryBase;

            transaction.Timestamp = Timestamp.FromDateTime(DateTime.UtcNow);
            transaction.ContractEntries.Add(contractEntry);
            transaction.PublicEntries.Add(publicEntry);

            transaction.Signature = SignatureHelper.GenerateSignature(_cryptoWrapper, privateKey, transaction, _signingContext);

            _transactionReceivedEvent.OnTransactionReceived(transaction);

            return(Ok());
        }