xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.


Ticket #2329: xpra-1.0.13.fips-md5-sha256.patch

File xpra-1.0.13.fips-md5-sha256.patch, 6.3 KB (added by Eric Lemings, 2 years ago)

Xpra 1.x patch for FIPS-compliant checksums

  • xpra/client/gtk2/client.py

    a b  
    7070        color_str = color_str.replace(":off", "")
    7171        if color_str=="auto" or color_str=="":
    7272            try:
     73                from hashlib import md5
    7374                try:
    74                     from hashlib import md5
    75                 except ImportError:
    76                     from md5 import md5
    77                 m = md5()
     75                    m = md5()
     76                except ValueError:
     77                    from hashlib import sha1
     78                    m = sha1()
    7879                for x in extra_args:
    7980                    m.update(str(x))
    8081                color_str = "#%s" % m.hexdigest()[:6]
  • xpra/client/window_backing_base.py

    a b  
    468468                l = options.get("z.len")
    469469                if l:
    470470                    assert l==len(img_data), "compressed pixel data failed length integrity check: expected %i bytes but got %i" % (l, len(img_data))
    471                 md5 = options.get("z.md5")
    472                 if md5:
    473                     h = hashlib.md5(img_data)
     471                try:
     472                    chksum = options.get("z.md5")
     473                    if chksum:
     474                        h = hashlib.md5(img_data)
     475                except ValueError:
     476                    chksum = options.get("z.sha1")
     477                    if chksum:
     478                        h = hashlib.sha1(img_data)
     479                if h:
    474480                    hd = h.hexdigest()
    475                     assert md5==hd, "pixel data failed compressed md5 integrity check: expected %s but got %s" % (md5, hd)
    476                 deltalog("passed compressed data integrity checks: len=%s, md5=%s (type=%s)", l, md5, type(img_data))
     481                    assert chksum==hd, "pixel data failed compressed chksum integrity check: expected %s but got %s" % (chksum, hd)
     482                deltalog("passed compressed data integrity checks: len=%s, chksum=%s (type=%s)", l, chksum, type(img_data))
    477483            if coding == "mmap":
    478484                self.idle_add(self.paint_mmap, img_data, x, y, width, height, rowstride, options, callbacks)
    479485            elif coding == "rgb24" or coding == "rgb32":
  • xpra/server/auth/file_auth.py

    a b  
    2929            log.error("Error: authentication failed")
    3030            log.error(" no password for '%s' in '%s'", self.username, self.password_filename)
    3131            return False
    32         verify = hmac.HMAC(strtobytes(password), strtobytes(salt), digestmod=hashlib.md5).hexdigest()
     32        verify = hmac.HMAC(strtobytes(password), strtobytes(salt), digestmod=hashlib.sha256).hexdigest()
    3333        log("authenticate(%s) password='%s', hex(salt)=%s, hash=%s", challenge_response, nonl(password), binascii.hexlify(strtobytes(salt)), verify)
    3434        if hasattr(hmac, "compare_digest"):
    3535            eq = hmac.compare_digest(verify, challenge_response)
  • xpra/server/auth/multifile_auth.py

    a b  
    132132            log.error(" no password for '%s' in '%s'", self.username, self.password_filename)
    133133            return None
    134134        fpassword, uid, gid, displays, env_options, session_options = entry
    135         verify = hmac.HMAC(strtobytes(fpassword), strtobytes(salt), digestmod=hashlib.md5).hexdigest()
     135        verify = hmac.HMAC(strtobytes(fpassword), strtobytes(salt), digestmod=hashlib.sha1).hexdigest()
    136136        log("authenticate(%s) password='%s', hex(salt)=%s, hash=%s", challenge_response, fpassword, binascii.hexlify(strtobytes(salt)), verify)
    137137        if hasattr(hmac, "compare_digest"):
    138138            eq = hmac.compare_digest(verify, challenge_response)
  • xpra/server/auth/sys_auth_base.py

    a b  
    115115            log.error("Error: %s authentication failed", self)
    116116            log.error(" no password defined for '%s'", self.username)
    117117            return False
    118         verify = hmac.HMAC(strtobytes(password), strtobytes(salt), digestmod=hashlib.md5).hexdigest()
     118        verify = hmac.HMAC(strtobytes(password), strtobytes(salt), digestmod=hashlib.sha256).hexdigest()
    119119        log("authenticate(%s) password=%s, hex(salt)=%s, hash=%s", challenge_response, password, hexstr(strtobytes(salt)), verify)
    120120        if hasattr(hmac, "compare_digest"):
    121121            eq = hmac.compare_digest(verify, challenge_response)
  • xpra/server/proxy/proxy_instance_process.py

    a b  
    652652            import hmac, hashlib
    653653            password = strtobytes(password)
    654654            salt = strtobytes(salt)
    655             challenge_response = hmac.HMAC(password, salt, digestmod=hashlib.md5).hexdigest()
     655            challenge_response = hmac.HMAC(password, salt, digestmod=hashlib.sha1).hexdigest()
    656656            log.info("sending %s challenge response", digest)
    657657            self.send_hello(challenge_response, client_salt)
    658658            return
  • xpra/server/window/window_source.py

    a b  
    18721872                v = data.data
    18731873            except:
    18741874                v = data
    1875             md5 = hashlib.md5(v).hexdigest()
    1876             client_options["z.md5"] = md5
     1875            try:
     1876                chksum = hashlib.md5(v).hexdigest()
     1877                client_options["z.md5"] = chksum
     1878            except ValueError:
     1879                chksum = hashlib.sha1().hexdigest()
     1880                client_options["z.sha1"] = chksum
    18771881            client_options["z.len"] = len(data)
    1878             log("added len and hash of compressed data integrity %19s: %8i / %s", type(v), len(v), md5)
     1882            log("added len and hash of compressed data integrity %19s: %8i / %s", type(v), len(v), chksum)
    18791883        #actual network packet:
    18801884        if self.supports_flush and flush not in (None, 0):
    18811885            client_options["flush"] = flush