hashChildren = function(left, right) {
  // We don't use InvalidArgumentsError because this is an assertion for
  // correctness/debugging, not a precondition on the argument.
  e2e.assert(
      left.length == NODE_HASH_SIZE_BYTES_,
      'left child has bad length (' + left.length + ' bytes)');
  e2e.assert(
      right.length == NODE_HASH_SIZE_BYTES_,
      'right child has bad length (' + right.length + ' bytes)');
  const h = new Sha512_256();
  h.update(left);
  h.update(right);
  return h.digest();
}
Calculates the hash for a node with at least one non-empty child node.

Both arguments must not be null.  If one of the child nodes being
considered is "empty," then use hashEmpty to calculate its hash before
calling hashChildren.

@param {!e2e.ByteArray} left Hash of the left child node.
@param {!e2e.ByteArray} right Hash of the right child node.
@return {!e2e.ByteArray}