Switch from md5 to sha256 for UIDs and tokens
This commit is contained in:
		
							
								
								
									
										3
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								config
									
									
									
									
									
								
							@@ -70,7 +70,8 @@
 | 
			
		||||
# Htpasswd encryption method
 | 
			
		||||
# Value: plain | sha1 | ssha | crypt | bcrypt | md5
 | 
			
		||||
# Only bcrypt can be considered secure.
 | 
			
		||||
# bcrypt and md5 require the passlib library to be installed.
 | 
			
		||||
# bcrypt requires the passlib[bcrypt] module and md5 requires
 | 
			
		||||
# the passlib module.
 | 
			
		||||
#htpasswd_encryption = bcrypt
 | 
			
		||||
 | 
			
		||||
# Incorrect authentication delay (seconds)
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ Module for address books and calendar entries (see ``Item``).
 | 
			
		||||
 | 
			
		||||
import math
 | 
			
		||||
import sys
 | 
			
		||||
from hashlib import md5
 | 
			
		||||
from hashlib import sha256
 | 
			
		||||
from random import getrandbits
 | 
			
		||||
 | 
			
		||||
import vobject
 | 
			
		||||
@@ -183,7 +183,7 @@ def get_etag(text):
 | 
			
		||||
    Encoded as quoted-string (see RFC 2616).
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    etag = md5()
 | 
			
		||||
    etag = sha256()
 | 
			
		||||
    etag.update(text.encode("utf-8"))
 | 
			
		||||
    return '"%s"' % etag.hexdigest()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ Take a look at the class ``BaseCollection`` if you want to implement your own.
 | 
			
		||||
 | 
			
		||||
import contextlib
 | 
			
		||||
import json
 | 
			
		||||
from hashlib import md5
 | 
			
		||||
from hashlib import sha256
 | 
			
		||||
 | 
			
		||||
import pkg_resources
 | 
			
		||||
import vobject
 | 
			
		||||
@@ -79,7 +79,7 @@ class BaseCollection:
 | 
			
		||||
    @property
 | 
			
		||||
    def etag(self):
 | 
			
		||||
        """Encoded as quoted-string (see RFC 2616)."""
 | 
			
		||||
        etag = md5()
 | 
			
		||||
        etag = sha256()
 | 
			
		||||
        for item in self.get_all():
 | 
			
		||||
            etag.update((item.href + "/" + item.etag).encode("utf-8"))
 | 
			
		||||
        etag.update(json.dumps(self.get_meta(), sort_keys=True).encode())
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
import os
 | 
			
		||||
import pickle
 | 
			
		||||
import time
 | 
			
		||||
from hashlib import md5
 | 
			
		||||
from hashlib import sha256
 | 
			
		||||
 | 
			
		||||
from radicale import pathutils, storage
 | 
			
		||||
from radicale.log import logger
 | 
			
		||||
@@ -54,7 +54,7 @@ class CollectionCacheMixin:
 | 
			
		||||
            self._storage._sync_directory(folder)
 | 
			
		||||
 | 
			
		||||
    def _item_cache_hash(self, raw_text):
 | 
			
		||||
        _hash = md5()
 | 
			
		||||
        _hash = sha256()
 | 
			
		||||
        _hash.update(storage.CACHE_VERSION)
 | 
			
		||||
        _hash.update(raw_text)
 | 
			
		||||
        return _hash.hexdigest()
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
import itertools
 | 
			
		||||
import os
 | 
			
		||||
import pickle
 | 
			
		||||
from hashlib import md5
 | 
			
		||||
from hashlib import sha256
 | 
			
		||||
 | 
			
		||||
from radicale.log import logger
 | 
			
		||||
 | 
			
		||||
@@ -27,10 +27,10 @@ from radicale.log import logger
 | 
			
		||||
class CollectionSyncMixin:
 | 
			
		||||
    def sync(self, old_token=None):
 | 
			
		||||
        # The sync token has the form http://radicale.org/ns/sync/TOKEN_NAME
 | 
			
		||||
        # where TOKEN_NAME is the md5 hash of all history etags of present and
 | 
			
		||||
        # past items of the collection.
 | 
			
		||||
        # where TOKEN_NAME is the sha256 hash of all history etags of present
 | 
			
		||||
        # and past items of the collection.
 | 
			
		||||
        def check_token_name(token_name):
 | 
			
		||||
            if len(token_name) != 32:
 | 
			
		||||
            if len(token_name) != 64:
 | 
			
		||||
                return False
 | 
			
		||||
            for c in token_name:
 | 
			
		||||
                if c not in "0123456789abcdef":
 | 
			
		||||
@@ -47,7 +47,7 @@ class CollectionSyncMixin:
 | 
			
		||||
                raise ValueError("Malformed token: %r" % old_token)
 | 
			
		||||
        # Get the current state and sync-token of the collection.
 | 
			
		||||
        state = {}
 | 
			
		||||
        token_name_hash = md5()
 | 
			
		||||
        token_name_hash = sha256()
 | 
			
		||||
        # Find the history of all existing and deleted items
 | 
			
		||||
        for href, item in itertools.chain(
 | 
			
		||||
                ((item.href, item) for item in self.get_all()),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user