示例#1
0
        public void TestVerifyingForMessagesMethodEquivalence()
        {
            var privateKey = _wrapper.GeneratePrivateKey();

            var message1 = new PublicEntry {Nonce = 123};
            var context = new SigningContext {NetworkType = NetworkType.Mainnet};

            var signature = _wrapper.Sign(privateKey, message1.ToByteArray(), context.ToByteArray());

            var expected = _wrapper.Verify(signature, message1.ToByteArray(), context.ToByteArray());
            var actual = _wrapper.Verify(signature, message1, context);

            actual.Should().Be(expected);
        }
示例#2
0
        private IActionResult LikeOrUnlikeTweet(string tweetId, bool value)
        {
            var tweetLike = new TweetLikeData
            {
                TweetId    = tweetId,
                PublicKey  = Base58.Bitcoin.Encode(_publicKey.Bytes),
                PostedDate = DateTime.UtcNow
            };

            var signatureBytes = _cryptoWrapper.StdSign(_privateKey,
                                                        Encoding.UTF8.GetBytes($"{tweetLike.TweetId}{tweetLike.PublicKey}{value}{tweetLike.PostedDate}"),
                                                        _signingContext.ToByteArray()).SignatureBytes;

            tweetLike.Signature = Base58.Bitcoin.Encode(signatureBytes);

            var client   = new RestClient(_twitterModuleConfig.TwitterLikesApiUrl);
            var endpoint = value ? "Like" : "Unlike";
            var request  = new RestRequest($"/api/TweetLike/{endpoint}");

            request.AddJsonBody(tweetLike);
            var response = client.Post(request);

            if (!response.IsSuccessful)
            {
                return(BadRequest(response.ErrorMessage));
            }

            return(Ok());
        }
示例#3
0
        public static TransactionBroadcast Sign(this TransactionBroadcast transaction,
                                                ICryptoContext cryptoContext,
                                                IPrivateKey privateKey,
                                                SigningContext context)
        {
            var clone = transaction.Clone();

            if (transaction.Signature?.RawBytes.Length == cryptoContext.SignatureLength)
            {
                Logger.Debug("The transaction was already signed, returning a clone.");
                return(clone);
            }

            clone.Signature = null;
            var signatureBytes = cryptoContext.Sign(privateKey, clone.ToByteArray(),
                                                    context.ToByteArray()).SignatureBytes;

            clone.Signature = new Signature
            {
                RawBytes       = signatureBytes.ToByteString(),
                SigningContext = context
            };

            return(clone);
        }
示例#4
0
        private static Signature GeneratePublicEntrySignature(PublicEntry publicEntry,
                                                              ICryptoContext cryptoContext,
                                                              IPrivateKey privateKey,
                                                              SigningContext context)
        {
            publicEntry.Signature = null;
            var signatureBytes = cryptoContext.Sign(privateKey, publicEntry.ToByteArray(),
                                                    context.ToByteArray()).SignatureBytes;

            return(new Signature
            {
                RawBytes = signatureBytes.ToByteString(),
                SigningContext = context
            });
        }
        public static Signature GenerateSignature(IWrapper cryptoWrapper, IPrivateKey privateKey,
                                                  TransactionBroadcast transactionBroadcast, SigningContext signingContext)
        {
            var transactionWithoutSig = transactionBroadcast.Clone();

            transactionWithoutSig.Signature = null;

            var signature = cryptoWrapper.StdSign(privateKey, transactionWithoutSig.ToByteArray(),
                                                  signingContext.ToByteArray());

            var sig = new Signature
            {
                RawBytes = ByteString.CopyFrom(signature.SignatureBytes), SigningContext = signingContext
            };

            return(sig);
        }
 private ISignature Sign(byte[] data, SigningContext signingContext, IPrivateKey privateKey)
 {
     return(_cryptoContext.Sign(privateKey, data, signingContext.ToByteArray()));
 }
 /// <inheritdoc/>
 public bool Verify(ISignature signature, byte[] message, SigningContext signingContext)
 {
     return(_cryptoContext.Verify(signature, message, signingContext.ToByteArray()));
 }
示例#8
0
        public void Valid_Message_Signature_Can_Return_True_Response()
        {
            var privateKey = _keySigner.KeyStore.KeyStoreDecrypt(KeyRegistryTypes.DefaultKey);

            var signingContext = new SigningContext
            {
                NetworkType   = NetworkType.Devnet,
                SignatureType = SignatureType.TransactionPublic
            };

            var requestMessage = new VerifyMessageRequest
            {
                Message        = _testMessageToSign,
                PublicKey      = privateKey.GetPublicKey().Bytes.ToByteString(),
                Signature      = _keySigner.CryptoContext.Sign(privateKey, _testMessageToSign.ToByteArray(), signingContext.ToByteArray()).SignatureBytes.ToByteString(),
                SigningContext = signingContext
            };

            _verifyMessageRequestObserver
            .OnNext(new ObserverDto(_fakeContext,
                                    requestMessage.ToProtocolMessage(_peerId)));
            AssertVerifyResponse(true);
        }
        public void ValidateTransactionSignature_will_pass_with_valid_transaction_signature()
        {
            var subbedLogger         = Substitute.For <ILogger>();
            var cryptoContext        = new FfiWrapper();
            var transactionValidator = new TransactionValidator(subbedLogger, cryptoContext);

            // build a valid transaction
            var privateKey = cryptoContext.GeneratePrivateKey();

            var validTransaction = new PublicEntry
            {
                SenderAddress = privateKey.GetPublicKey().Bytes.ToByteString()
            };

            var signingContext = new SigningContext
            {
                NetworkType   = NetworkType.Devnet,
                SignatureType = SignatureType.TransactionPublic
            };

            var signature = new Signature
            {
                // sign an actual TransactionBroadcast object
                RawBytes = cryptoContext.Sign(privateKey, validTransaction.ToByteArray(), signingContext.ToByteArray())
                           .SignatureBytes.ToByteString(),
                SigningContext = signingContext
            };

            validTransaction.Signature = signature;

            var result = transactionValidator.ValidateTransaction(validTransaction);

            result.Should().BeTrue();
        }