implementation can be described in two phases, the first of which was data representation, and the second of which was data flow. Since words in BLAKE256 are 32 bits/8 bytes, we decided to store everything described as a word as an integer in Java, which is itself a 32bit datatype. We converted some of the larger constants and chaining values to their negative equivalent in binary, because Java integers are signed. We were careful to do this by casting (to long and then back to int), to ensure that the actual bits of the number remained unchanged. The arithmetic operations were defined in the documentation in terms of bit shifting, addition, and xor, so those are the operations we use on ints. For collections of words, such as the block of chaining values or a message block or the constants, we used arrays of type int. We chose to do this so that we could use iteration in the spirit of good coding practice, and for ease of writing. There are some instances where ints are converted to bytes and viceversa, but only for the purposes of IO. We also defined a few counters after when we were designing the data flow. Most of the noniterated data is stored as private fields, for reasons besides efficiency. For our data flow, we decided to take in input as bytes, which is quite natural for IO. We defined the method bytePack to take bytes one by one in sequence until it had four, which it packed into an int and gave to the hash method, in essence becoming a buffer. The hash method would do similarly, taking message words in until it had 16, at which point it would call the rounds method to perform the rounds. The rounds method first calls the initialize method in BLAKEHash, which returns an array containing the expanded chain values. We define a loop in the range of 0 … 13 to perform 14 rounds of the G function on this array, which is in itself two loops, one for the column steps followed by one for the row steps. Each of these loops would contain, respectively, the code for a single Gi function for a row or column. Since the expanded array was stored on locally and not as a field, we decided not to make method calls for each Gi function, which also made for better performance. We defined another method in BLAKEHash, finalize, which is called after the rounds on the expanded array and 9