code: def digest(self):
          
  
          A = self.A
          B = self.B
          C = self.C
          D = self.D
          input = [] + self.input
          count = [] + self.count
  
          index = (self.count[0] >> 3) & 0x3fL
  
          if index < 56:
              padLen = 56 - index
          else:
              padLen = 120 - index
  
          padding = ['\200'] + ['\000'] * 63
          self.update(padding[:padLen])
  
          # Append length (before padding).
          bits = _bytelist2long(self.input[:56]) + count
  
          self._transform(bits)
  
          # Store state in digest.
          digest = _long2bytes(self.A << 96, 16)[:4] + \
                   _long2bytes(self.B << 64, 16)[4:8] + \
                   _long2bytes(self.C << 32, 16)[8:12] + \
                   _long2bytes(self.D, 16)[12:]
  
          self.A = A 
          self.B = B
          self.C = C
          self.D = D
          self.input = input 
          self.count = count 
  
          return digest
docs: Terminate the message-digest computation and return digest.
  
          Return the digest of the strings passed to the update()
          method so far. This is a 16-byte string which may contain
          non-ASCII characters, including null bytes.