CRYPTO NEWS

Encrypt-then-MAC: full random keys or keys derived from master key?

I have this scenario where I use Encrypt-then-MAC (AES256-CBC and HMAC-SHA256) with keys generated by a CSPRNG (specifically, SecureRandom in Java). I’d like to know which is better:

  • Use the CSPRNG to generate two distinct keys of 32 byte each

or

  • Use the CSPRNG to generate a master key of 32 byte and then use HKDF to derive the encryption and authentication key

I’d like to add that no human interaction is involved: this keys are stored inside a DB and are only used by machines.

Thank you very much!

Error: Returned error: VM Exception while processing transaction: revert only owner can call this function

Question Open the TestGaming.sol contract in the test folder. Write a test for the function withdrawFunds . Your test should check the balance of the owner who called the withdrawFunds function. Your test should also verify if the owner’s balance has increased by 10 ether. Gaming.sol pragma solidity ^0.5.0; contract Gaming { /* Our Online::Listen

Question

Open the TestGaming.sol contract in the test folder. Write a test for the function withdrawFunds . Your test should check the balance of the owner who called the withdrawFunds function. Your test should also verify if the owner’s balance has increased by 10 ether.

Gaming.sol

pragma solidity ^0.5.0;  contract Gaming {     /* Our Online gaming contract */     address public owner;     bool public online;      struct Player {         uint wins;         uint losses;     }      mapping (address => Player) public players;      constructor() public payable {         owner = msg.sender;         online = true;     }      modifier isOwner() {         require(msg.sender == owner, "Only owner can call this function");         _;     }  event GameFunded(address funder, uint amount);     event PlayerWon(address player, uint amount, uint mysteryNumber, uint displayedNumber);     event PlayerLost(address player, uint amount, uint mysteryNumber, uint displayedNumber);      function mysteryNumber() internal view returns (uint) {         uint randomNumber = uint(blockhash(block.number-1))%10 + 1;         return randomNumber;     }      function determineWinner(uint number, uint display, bool guess) public pure returns (bool) {         if (guess == true && number > display) {             return true;         } else if (guess == true && number < display) {             return false;         } else if (guess == false && number > display) {             return false;         } else if (guess == false && number < display) {             return true;         }     }      function winOrLose(uint display, bool guess) external payable returns (bool, uint) {         /* Use true for a higher guess, false for a lower guess */         require(online == true, "The game is online");         require(msg.sender.balance > msg.value, "Insufficient funds");         uint mysteryNumber_ = mysteryNumber();         bool isWinner = determineWinner(mysteryNumber_, display, guess);         Player storage player = players[msg.sender];         /* Player Won */         if (isWinner == true) {             player.wins += 1;             msg.sender.transfer(msg.value * 2);             emit PlayerWon(msg.sender, msg.value, mysteryNumber_, display);             return (true, mysteryNumber_);           /* Player Lost */         } else if (isWinner == false) {             player.losses += 1;             emit PlayerLost(msg.sender, msg.value, mysteryNumber_, display);             return (false, mysteryNumber_);         }     } 

TestGaming

pragma solidity ^0.5.0;  import "truffle/Assert.sol"; import "truffle/DeployedAddresses.sol"; import "../contracts/Gaming.sol";  contract TestGaming {     uint public initialBalance = 10 ether;     Gaming gaming;     address owner;      function beforeAll() public {         gaming = Gaming(DeployedAddresses.Gaming());         owner = gaming.owner();      }      function testWithdrawFunds() public {         sssssgaming.withdrawFunds();         Assert.equal(initialBalance + 10 ether, owner.balance, "Owner's balance should have increased by 10 ether");     }      function testPlayerWonGuessHigher() public {         bool expected = true;         bool result = gaming.determineWinner(5, 4, true);          Assert.equal(expected, result, "The player should have won by guessing the mystery number was higher than their number");     }      function testPlayerWonGuessLower() public {         bool expected = true;         bool result = gaming.determineWinner(5, 6, false);          Assert.equal(expected, result, "The player should have won by guessing the mystery number was lower than their number");     }      function testPlayerLostGuessLower() public {         bool expected = false;         bool result = gaming.determineWinner(5, 4, false);          Assert.equal(expected, result, "The player should have lost by guessing the mystery number was lower than their number");     }      function testPlayerLostGuessHigher() public {         bool expected = false;         bool result = gaming.determineWinner(5, 6, true);          Assert.equal(expected, result, "The player should have lost by guessing the mystery number was higher than their number");     } } 

Error enter image description here

Encrypt-then-MAC: full random keys or keys derived from master key?

Shopping cart
There are no products in the cart!
Continue shopping
0