code: public final long digest() {
          byte msgLenMod256 = this.len;
  
          while (this.m_idx < 7) {
              update((byte) 0);
          }
          update(msgLenMod256);
  
          this.v2 ^= 0xff;
          for (int i = 0; i < this.d; i++) {
              round();
          }
  
          return this.v0 ^ this.v1 ^ this.v2 ^ this.v3;
      }
docs: Finalizes the digest and returns the hash.
  
  This works by padding to the next 8-byte block, before applying
  the compression rounds once more - but this time using D rounds
  of compression rather than C.
  
  @return
  the final result of the hash as a long.