Пример #1
0
        public bool IsValidChain(string prevBlockHash, bool verbose)
        {
            bool isValid = true;

            BuildMerkleTree();

            string newBlockHash = HashFun.GetSha256(Nonce + CalculateBlockHash(prevBlockHash));

            bool validSignature = KeyStore.VerifyBlock(newBlockHash, BlockSignature);

            if (newBlockHash != BlockHash)
            {
                isValid = false;
            }
            else
            {
                isValid |= PreviousBlockHash == prevBlockHash;
            }

            PrintVerificationMessage(verbose, isValid, validSignature);

            if (NextBlock != null)
            {
                return(NextBlock.IsValidChain(newBlockHash, true));
            }

            return(isValid);
        }
Пример #2
0
        static void RunWithTransactionPool()
        {
            var       txn5     = SetupTransactions();
            IKeyStore keyStore = new KeyStore(HashFun.Generate256BitKey());

            IMBlock block1 = new MBlock(0, keyStore);
            IMBlock block2 = new MBlock(1, keyStore);
            IMBlock block3 = new MBlock(2, keyStore);
            IMBlock block4 = new MBlock(3, keyStore);

            AddTransactionsToBlocksAndCalculateHashes(block1, block2, block3, block4);

            MBlockChain chain = new MBlockChain();

            chain.AcceptBlock(block1);
            chain.AcceptBlock(block2);
            chain.AcceptBlock(block3);
            chain.AcceptBlock(block4);

            chain.VerifyChain();

            Console.WriteLine("");
            Console.WriteLine("");

            txn5.ClaimNumber = "weqwewe";
            chain.VerifyChain();

            Console.WriteLine();
        }
Пример #3
0
        public string CalculateBlockHash(string previousBlockHash)
        {
            string txnHash     = ClaimNumber + SettlementAmount + SettlementDate + CarRegistration + Mileage + ClaimType;
            string blockHeader = BlockNumber + CreatedDate.ToString() + previousBlockHash;
            string combined    = txnHash + blockHeader;

            return(HashFun.GetSha256(combined));
        }
Пример #4
0
        public string CalculateBlockHash(string previousBlockHash)
        {
            string blockheader = BlockNumber + CreatedDate.ToString() + previousBlockHash;
            string combined    = merkleTree.RootNode + blockheader;

            if (KeyStore == null)
            {
                return(HashFun.GetSha256(combined));
            }
            else
            {
                return(HashFun.GetHMACHash(combined, KeyStore.AuthenticatedHashKey));
            }
        }
Пример #5
0
        private static unsafe byte[] GetHash(HashFun fun, byte[] input)
        {
            var output = new byte[64];

            fixed(byte *inBuf = input)
            {
                fixed(byte *outBuf = output)
                {
                    fun(inBuf, outBuf, input.Length);
                    for (int i = 0; i < output.Length; i++)
                    {
                        output[i] = outBuf[i];
                    }
                }
            }

            return(output);
        }
Пример #6
0
        public string CalculateTransactionHash()
        {
            string txnHash = ClaimNumber + SettlementAmount + SettlementDate + CarRegistration + Mileage + ClaimType;

            return(HashFun.GetSha256(txnHash));
        }
Пример #7
0
 public bool VerifyBlock(string blockHash, string signature)
 {
     return(HashFun.VerifySignature(blockHash, signature, Certificate.PublicKey));
 }
Пример #8
0
 public string SignBlock(string blockHash)
 {
     return(HashFun.SignData(blockHash, Certificate.PrivateKey));
 }
Пример #9
0
 public KeyStore(byte[] authenticatedhashKey)
 {
     AuthenticatedHashKey = authenticatedhashKey;
     Certificate          = HashFun.AssignNewKey();
 }