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); }
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(); }
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)); }
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)); } }
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); }
public string CalculateTransactionHash() { string txnHash = ClaimNumber + SettlementAmount + SettlementDate + CarRegistration + Mileage + ClaimType; return(HashFun.GetSha256(txnHash)); }
public bool VerifyBlock(string blockHash, string signature) { return(HashFun.VerifySignature(blockHash, signature, Certificate.PublicKey)); }
public string SignBlock(string blockHash) { return(HashFun.SignData(blockHash, Certificate.PrivateKey)); }
public KeyStore(byte[] authenticatedhashKey) { AuthenticatedHashKey = authenticatedhashKey; Certificate = HashFun.AssignNewKey(); }