Browse Source

Message digest type is configurable

Mher Movsisyan 13 years ago
parent
commit
9a4d2acf1b
3 changed files with 9 additions and 7 deletions
  1. 2 2
      celery/security/certificate.py
  2. 2 2
      celery/security/key.py
  3. 5 3
      celery/security/serialization.py

+ 2 - 2
celery/security/certificate.py

@@ -39,10 +39,10 @@ class Certificate(object):
         """Serial number/issuer pair uniquely identifies a certificate"""
         return "%s %s" % (self.get_issuer(), self.get_serial_number())
 
-    def verify(self, data, signature):
+    def verify(self, data, signature, digest):
         """Verifies the signature for string containing data."""
         try:
-            crypto.verify(self._cert, signature, data, 'sha1')
+            crypto.verify(self._cert, signature, data, digest)
         except crypto.Error, exc:
             raise SecurityError("Bad signature: %r" % (exc, ))
 

+ 2 - 2
celery/security/key.py

@@ -17,9 +17,9 @@ class PrivateKey(object):
         except crypto.Error, exc:
             raise SecurityError("Invalid private key: %r" % (exc, ))
 
-    def sign(self, data):
+    def sign(self, data, digest):
         """sign string containing data."""
         try:
-            return crypto.sign(self._key, data, "sha1")
+            return crypto.sign(self._key, data, digest)
         except crypto.Error, exc:
             raise SecurityError("Unable to sign data: %r" % (exc, ))

+ 5 - 3
celery/security/serialization.py

@@ -24,12 +24,14 @@ class SecureSerializer(object):
 
     def __init__(self, key=None, cert=None, cert_store=None,
             serialize=anyjson.serialize,
-            deserialize=anyjson.deserialize):
+            deserialize=anyjson.deserialize,
+            digest='sha1'):
         self._key = key
         self._cert = cert
         self._cert_store = cert_store
         self._serialize = serialize
         self._deserialize = deserialize
+        self._digest = digest
 
     def serialize(self, data):
         """serialize data structure into string"""
@@ -37,7 +39,7 @@ class SecureSerializer(object):
         assert self._cert is not None
         try:
             data = self._serialize(data)
-            signature = b64encode(self._key.sign(data))
+            signature = b64encode(self._key.sign(data, self._digest))
             signer = self._cert.get_id()
             return self._serialize(dict(data=data,
                                         signer=signer,
@@ -53,7 +55,7 @@ class SecureSerializer(object):
             signature = b64decode(data["signature"])
             signer = data["signer"]
             data = data["data"]
-            self._cert_store[signer].verify(data, signature)
+            self._cert_store[signer].verify(data, signature, self._digest)
             return self._deserialize(data)
         except Exception, exc:
             raise SecurityError("Unable to deserialize: %r" % (exc, ))