docs: def PwDecrypt(self, password):
          """Unobfuscate a RADIUS password. RADIUS hides passwords in packets by
          using an algorithm based on the MD5 hash of the packet authenticator
          and RADIUS secret. This function reverses the obfuscation process.
  
          :param password: obfuscated form of password
          :type password:  binary string
          :return:         plaintext password
          :rtype:          unicode string
          """
          buf = password
          pw = six.b('')
  
          last = self.authenticator
          while buf:
              hash = md5_constructor(self.secret + last).digest()
              if six.PY3:
                  for i in range(16):
                      pw += bytes((hash[i] ^ buf[i],))
              else:
                  for i in range(16):
                      pw += chr(ord(hash[i]) ^ ord(buf[i]))
  
              (last, buf) = (buf[:16], buf[16:])
  
          while pw.endswith(six.b('\x00')):
              pw = pw[:-1]
  
          return pw.decode('utf-8')