Exemplo n.º 1
0
        public void SignAndVerifyTransaction()
        {
            // Generate the key pair
            ECKeyPair keyPair = new KeyPairGenerator().Generate();

            Transaction tx = new Transaction();

            tx.From = Address.FromRawBytes(CryptoHelpers.RandomFill(ADR_LENGTH));
            tx.To   = Address.FromRawBytes(CryptoHelpers.RandomFill(ADR_LENGTH));

            Block block = new Block();

            block.AddTransaction(tx);

            // Serialize and hash the transaction
            Hash hash = tx.GetHash();

            // Sign the hash
            ECSigner    signer    = new ECSigner();
            ECSignature signature = signer.Sign(keyPair, hash.DumpByteArray());

            ECVerifier verifier = new ECVerifier(keyPair);

            Assert.True(verifier.Verify(signature, hash.DumpByteArray()));
        }
Exemplo n.º 2
0
        public void VerifySignature_CorrectDataAndSig_ReturnsTrue()
        {
            ECKeyPair keyPair = new KeyPairGenerator().Generate();

            byte[] message = new BigInteger("968236873715988614170569073515315707566766479517").ToByteArray();

            ECSigner    signer    = new ECSigner();
            ECSignature signature = signer.Sign(keyPair, message);

            ECVerifier verifier = new ECVerifier(keyPair);

            Assert.True(verifier.Verify(signature, message));
        }
Exemplo n.º 3
0
        public void SignAndVerifyTransaction()
        {
            byte[] fromAdress = CryptoHelpers.RandomFill(ADR_LENGTH);
            byte[] toAdress   = CryptoHelpers.RandomFill(ADR_LENGTH);

            // Generate the key pair
            ECKeyPair keyPair = new KeyPairGenerator().Generate();


            ;

            Transaction tx = new Transaction();

            tx.From = Address.FromRawBytes(fromAdress);
            tx.To   = Address.FromRawBytes(toAdress);
            tx.Sig  = new Signature
            {
                P = ByteString.CopyFrom(keyPair.PublicKey.Q.GetEncoded())
            };

            // Serialize and hash the transaction
            Hash hash = tx.GetHash();

            // Sign the hash
            ECSigner    signer    = new ECSigner();
            ECSignature signature = signer.Sign(keyPair, hash.DumpByteArray());

            // Update the signature
            tx.Sig.R = ByteString.CopyFrom(signature.R);
            tx.Sig.S = ByteString.CopyFrom(signature.S);

            // Serialize as for sending over the network
            byte[] serializedTx = tx.Serialize();

            /**** broadcast/receive *****/

            Transaction dTx = Transaction.Parser.ParseFrom(serializedTx);

            // Serialize and hash the transaction
            Hash dHash = dTx.GetHash();

            byte[] uncompressedPrivKey = tx.Sig.P.ToByteArray();

            ECKeyPair  recipientKeyPair = ECKeyPair.FromPublicKey(uncompressedPrivKey);
            ECVerifier verifier         = new ECVerifier(recipientKeyPair);

            Assert.True(verifier.Verify(dTx.GetSignature(), dHash.DumpByteArray()));
        }
Exemplo n.º 4
0
        public void VerifySignature_WrongData_ReturnsFalse()
        {
            ECKeyPair keyPair = new KeyPairGenerator().Generate();

            byte[] message = new BigInteger("968236873715988614170569073515315707566766479517").ToByteArray();

            ECSigner    signer    = new ECSigner();
            ECSignature signature = signer.Sign(keyPair, message);

            // Change the message
            message = new BigInteger("9682368737159881417056907351531570756676647951").ToByteArray();

            ECVerifier verifier = new ECVerifier(keyPair);

            Assert.False(verifier.Verify(signature, message));
        }
Exemplo n.º 5
0
Arquivo: Peer.cs Projeto: wyk125/AElf
        /// <summary>
        /// Mainly for testing purposes, it's used for authentifying a node. Note that
        /// is doesn't launch the correponding event.
        /// </summary>
        /// <param name="handshakeMsg"></param>
        internal void AuthentifyWith(Handshake handshakeMsg)
        {
            if (handshakeMsg == null)
            {
                FireInvalidAuth(RejectReason.AuthInvalidHandshakeMsg);
                return;
            }

            _lastReceivedHandshake = handshakeMsg;

            try
            {
                if (handshakeMsg.Version != GlobalConfig.ProtocolVersion)
                {
                    FireInvalidAuth(RejectReason.AuthWrongVersion);
                    return;
                }

                DistantNodeKeyPair = ECKeyPair.FromPublicKey(handshakeMsg.PublicKey.ToByteArray());

                if (DistantNodeKeyPair == null)
                {
                    FireInvalidAuth(RejectReason.AuthInvalidKey);
                    return;
                }

                // verify sig
                ECVerifier verifier = new ECVerifier(DistantNodeKeyPair);
                bool       sigValid = verifier.Verify(
                    new ECSignature(handshakeMsg.R.ToByteArray(), handshakeMsg.S.ToByteArray()),
                    handshakeMsg.NodeInfo.ToByteArray());

                if (!sigValid)
                {
                    FireInvalidAuth(RejectReason.AuthInvalidSig);
                    return;
                }
            }
            catch (Exception)
            {
                FireInvalidAuth(RejectReason.AuthInvalidKey);
                return;
            }

            IsAuthentified = true;
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            ECKeyPair keyPair = KeyPairGenerator.Generate();

            //Console.WriteLine(privateKey.ToString() + Environment.NewLine);

            // Fake data
            byte[] message = new BigInteger("968236873715988614170569073515315707566766479517").ToByteArray();

            ECSigner    signer    = new ECSigner();
            ECSignature signature = signer.Sign(keyPair, message);

            message = new BigInteger("9682368737159881417056907351531570756676647951").ToByteArray();
            ECVerifier verifier = new ECVerifier(keyPair);
            bool       isGood   = verifier.Verify(signature, message);

            Console.WriteLine(isGood);
        }
Exemplo n.º 7
0
        public async Task Mine()
        {
            var chain = await _mock.CreateChain();

            // create miner
            var keypair     = new KeyPairGenerator().Generate();
            var minerconfig = _mock.GetMinerConfig(chain.Id, 10, keypair.GetAddress().DumpByteArray());

            ChainConfig.Instance.ChainId    = chain.Id.DumpHex();
            NodeConfig.Instance.NodeAccount = keypair.GetAddressHex();
            var txPool = _mock.CreateTxPool();

            txPool.Start();

            var txs = CreateTx(chain.Id);

            foreach (var tx in txs)
            {
                await txPool.AddTransactionAsync(tx);
            }

            var manager = _mock.MinerClientManager();
            var miner   = _mock.GetMiner(minerconfig, txPool, manager);

            GrpcLocalConfig.Instance.ClientToSideChain            = false;
            GrpcLocalConfig.Instance.WaitingIntervalInMillisecond = 10;
            NodeConfig.Instance.ECKeyPair = keypair;
            miner.Init();

            var block = await miner.Mine();

            Assert.NotNull(block);
            Assert.Equal(GlobalConfig.GenesisBlockHeight + 1, block.Header.Index);

            byte[]  uncompressedPrivKey = block.Header.P.ToByteArray();
            Address addr = Address.FromRawBytes(uncompressedPrivKey);

            Assert.Equal(minerconfig.CoinBase, addr);

            ECKeyPair  recipientKeyPair = ECKeyPair.FromPublicKey(uncompressedPrivKey);
            ECVerifier verifier         = new ECVerifier(recipientKeyPair);

            Assert.True(verifier.Verify(block.Header.GetSignature(), block.Header.GetHash().DumpByteArray()));
        }
Exemplo n.º 8
0
        public bool Verify(Transaction tx)
        {
            if (tx.P == null)
            {
                return(false);
            }

            var pubKey = tx.P.ToByteArray();
            var addr   = Address.FromRawBytes(pubKey);

            if (!addr.Equals(tx.From))
            {
                return(false);
            }
            var keyPair  = ECKeyPair.FromPublicKey(pubKey);
            var verifier = new ECVerifier(keyPair);

            return(verifier.Verify(tx.GetSignature(), tx.GetHash().DumpByteArray()));
        }
Exemplo n.º 9
0
        /// <summary>
        /// verify signature in tx
        /// </summary>
        /// <param name="tx"></param>
        /// <returns></returns>
        public static bool VerifySignature(this Transaction tx)
        {
            if (tx.Sig == null)
            {
                return(false);
            }


            byte[] uncompressedPrivKey = tx.P.ToByteArray();
            var    addr = Address.FromRawBytes(uncompressedPrivKey);

//            Hash addr = uncompressedPrivKey.Take(ECKeyPair.AddressLength).ToArray();

            if (!addr.Equals(tx.From))
            {
                return(false);
            }
            ECKeyPair  recipientKeyPair = ECKeyPair.FromPublicKey(uncompressedPrivKey);
            ECVerifier verifier         = new ECVerifier(recipientKeyPair);

            return(verifier.Verify(tx.GetSignature(), tx.GetHash().DumpByteArray()));
        }