code: private byte[] pad() {
          int pos = (int) (msgLength % BYTE_BLOCK_LENGTH);
          int padLength = (pos < 56) ? (64 - pos) : (128 - pos);
          byte[] pad = new byte[padLength];
  
          // First bit of the padding set to 1
          pad[0] = (byte) 0x80;
  
          long bits = msgLength << 3;
          int index = padLength - 8;
          for (int i = 0; i < 8; i++) {
              pad[index++] = (byte) (bits >>> (i << 3));
          }
  
          return pad;
      }
docs: Pads the buffer by appending the byte 0x80, then append as many zero
  bytes as necessary to make the buffer length a multiple of 64 bytes.
  The last 8 bytes will be filled with the length of the buffer in bits.
  If there's no room to store the length in bits in the block i.e the block
  is larger than 56 bytes then an additionnal 64-bytes block is appended.
  
  @see sections 3.1 & 3.2 of the RFC 1320.
  
  @return the pad byte array