Skip to content

Commit ba4245e

Browse files
committed
Compare raw digest bytes. Fixes #155
1 parent 18efa28 commit ba4245e

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

signxml/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class XMLSignatureProcessor(XMLProcessor):
156156
def _get_digest(self, data, digest_algorithm):
157157
hasher = Hash(algorithm=digest_algorithm, backend=default_backend())
158158
hasher.update(data)
159-
return ensure_str(b64encode(hasher.finalize()))
159+
return hasher.finalize()
160160

161161
def _get_digest_method(self, digest_algorithm_id, methods=None):
162162
if methods is None:
@@ -515,7 +515,7 @@ def _build_sig(self, sig_root, reference_uris, c14n_inputs, sig_insp, payload_in
515515
digest_value = SubElement(reference, ds_tag("DigestValue"))
516516
payload_c14n = self._c14n(c14n_inputs[i], algorithm=self.c14n_alg, inclusive_ns_prefixes=payload_insp)
517517
digest = self._get_digest(payload_c14n, self._get_digest_method_by_tag(self.digest_alg))
518-
digest_value.text = digest
518+
digest_value.text = ensure_str(b64encode(digest))
519519
signature_value = SubElement(sig_root, ds_tag("SignatureValue"))
520520
return signed_info, signature_value
521521

@@ -869,11 +869,11 @@ def verify(self, data, require_x509=True, x509_cert=None, cert_subject_name=None
869869
copied_root = self.fromstring(self.tostring(root))
870870
copied_signature_ref = self._get_signature(copied_root)
871871
transforms = self._find(reference, "Transforms", require=False)
872-
digest_algorithm = self._find(reference, "DigestMethod").get("Algorithm")
872+
digest_alg = self._find(reference, "DigestMethod").get("Algorithm")
873873
digest_value = self._find(reference, "DigestValue")
874874
payload = self._resolve_reference(copied_root, reference, uri_resolver=uri_resolver)
875875
payload_c14n = self._apply_transforms(payload, transforms, copied_signature_ref, c14n_algorithm)
876-
if digest_value.text != self._get_digest(payload_c14n, self._get_digest_method(digest_algorithm)):
876+
if b64decode(digest_value.text) != self._get_digest(payload_c14n, self._get_digest_method(digest_alg)):
877877
raise InvalidDigest("Digest mismatch for reference {}".format(len(verify_results)))
878878

879879
# We return the signed XML (and only that) to ensure no access to unsigned data happens

0 commit comments

Comments
 (0)