Skip to content

Commit 361b29f

Browse files
author
Hans Hörberg
committed
Merge remote-tracking branch 'upstream/master'
# Conflicts: # src/saml2/entity.py digest algorithm added to the same functions as sign alg.
1 parent bc93176 commit 361b29f

File tree

7 files changed

+29
-29
lines changed

7 files changed

+29
-29
lines changed

src/saml2/client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def global_logout(self, name_id, reason="", expire=None, sign=None, sign_alg=Non
160160

161161
# find out which IdPs/AAs I should notify
162162
entity_ids = self.users.issuers_of_info(name_id)
163-
return self.do_logout(name_id, entity_ids, reason, expire, sign, sign_alg=sign_alg)
163+
return self.do_logout(name_id, entity_ids, reason, expire, sign, sign_alg=sign_alg, digest_alg=digest_alg)
164164

165165
def do_logout(self, name_id, entity_ids, reason, expire, sign=None,
166166
expected_binding=None, sign_alg=None, digest_alg=None, **kwargs):
@@ -232,7 +232,7 @@ def do_logout(self, name_id, entity_ids, reason, expire, sign=None,
232232
key = kwargs.get("key", self.signkey)
233233
srequest = str(request)
234234
else:
235-
srequest = self.sign(request, sign_alg=sign_alg)
235+
srequest = self.sign(request, sign_alg=sign_alg, digest_alg=digest_alg)
236236
else:
237237
srequest = str(request)
238238

@@ -316,7 +316,7 @@ def handle_logout_response(self, response, sign_alg=None, digest_alg=None):
316316
return self.do_logout(decode(status["name_id"]),
317317
status["entity_ids"],
318318
status["reason"], status["not_on_or_after"],
319-
status["sign"], sign_alg=sign_alg)
319+
status["sign"], sign_alg=sign_alg, digest_alg=digest_alg)
320320

321321
def _use_soap(self, destination, query_type, **kwargs):
322322
_create_func = getattr(self, "create_%s" % query_type)

src/saml2/client_base.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,11 @@ def create_authn_request(self, destination, vorg="", scoping=None,
339339
return self._message(AuthnRequest, destination, message_id,
340340
consent, extensions, sign, sign_prepare,
341341
protocol_binding=binding,
342-
scoping=scoping, nsprefix=nsprefix, sign_alg=sign_alg, **args)
342+
scoping=scoping, nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg, **args)
343343
return self._message(AuthnRequest, destination, message_id, consent,
344344
extensions, sign, sign_prepare,
345345
protocol_binding=binding,
346-
scoping=scoping, nsprefix=nsprefix, sign_alg=sign_alg, **args)
346+
scoping=scoping, nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg, **args)
347347

348348
def create_attribute_query(self, destination, name_id=None,
349349
attribute=None, message_id=0, consent=None,
@@ -404,7 +404,7 @@ def create_attribute_query(self, destination, name_id=None,
404404

405405
return self._message(AttributeQuery, destination, message_id, consent,
406406
extensions, sign, sign_prepare, subject=subject,
407-
attribute=attribute, nsprefix=nsprefix, sign_alg=sign_alg)
407+
attribute=attribute, nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg)
408408

409409
# MUST use SOAP for
410410
# AssertionIDRequest, SubjectQuery,
@@ -430,7 +430,7 @@ def create_authz_decision_query(self, destination, action,
430430
return self._message(AuthzDecisionQuery, destination, message_id,
431431
consent, extensions, sign, action=action,
432432
evidence=evidence, resource=resource,
433-
subject=subject, sign_alg=sign_alg, **kwargs)
433+
subject=subject, sign_alg=sign_alg, digest_alg=digest_alg, **kwargs)
434434

435435
def create_authz_decision_query_using_assertion(self, destination,
436436
assertion, action=None,
@@ -499,7 +499,7 @@ def create_authn_query(self, subject, destination=None, authn_context=None,
499499
extensions, sign, subject=subject,
500500
session_index=session_index,
501501
requested_authn_context=authn_context,
502-
nsprefix=nsprefix, sign_alg=sign_alg)
502+
nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg)
503503

504504
def create_name_id_mapping_request(self, name_id_policy,
505505
name_id=None, base_id=None,
@@ -528,17 +528,17 @@ def create_name_id_mapping_request(self, name_id_policy,
528528
return self._message(NameIDMappingRequest, destination, message_id,
529529
consent, extensions, sign,
530530
name_id_policy=name_id_policy, name_id=name_id,
531-
nsprefix=nsprefix, sign_alg=sign_alg)
531+
nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg)
532532
elif base_id:
533533
return self._message(NameIDMappingRequest, destination, message_id,
534534
consent, extensions, sign,
535535
name_id_policy=name_id_policy, base_id=base_id,
536-
nsprefix=nsprefix, sign_alg=sign_alg)
536+
nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg)
537537
else:
538538
return self._message(NameIDMappingRequest, destination, message_id,
539539
consent, extensions, sign,
540540
name_id_policy=name_id_policy,
541-
encrypted_id=encrypted_id, nsprefix=nsprefix, sign_alg=sign_alg)
541+
encrypted_id=encrypted_id, nsprefix=nsprefix, sign_alg=sign_alg, digest_alg=digest_alg)
542542

543543
# ======== response handling ===========
544544

src/saml2/metadata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ def entities_descriptor(eds, valid_for, name, ident, sign, secc, sign_alg=None,
775775
raise SAMLError("If you want to do signing you should define " +
776776
"where your public key are")
777777

778-
entities.signature = pre_signature_part(ident, secc.my_cert, 1, sign_alg=sign_alg)
778+
entities.signature = pre_signature_part(ident, secc.my_cert, 1, sign_alg=sign_alg, digest_alg=digest_alg)
779779
entities.id = ident
780780
xmldoc = secc.sign_statement("%s" % entities, class_name(entities))
781781
entities = md.entities_descriptor_from_string(xmldoc)
@@ -797,7 +797,7 @@ def sign_entity_descriptor(edesc, ident, secc, sign_alg=None, digest_alg=None):
797797
if not ident:
798798
ident = sid()
799799

800-
edesc.signature = pre_signature_part(ident, secc.my_cert, 1, sign_alg=sign_alg)
800+
edesc.signature = pre_signature_part(ident, secc.my_cert, 1, sign_alg=sign_alg, digest_alg=digest_alg)
801801
edesc.id = ident
802802
xmldoc = secc.sign_statement("%s" % edesc, class_name(edesc))
803803
edesc = md.entity_descriptor_from_string(xmldoc)

src/saml2/server.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ def _authn_response(self, in_response_to, consumer_url,
399399
if not encrypt_assertion:
400400
if sign_assertion:
401401
assertion.signature = pre_signature_part(assertion.id, self.sec.my_cert, 1,
402-
sign_alg=sign_alg)
402+
sign_alg=sign_alg, digest_alg=digest_alg)
403403
to_sign.append((class_name(assertion), assertion.id))
404404

405405
#if not encrypted_advice_attributes:
@@ -429,7 +429,7 @@ def _authn_response(self, in_response_to, consumer_url,
429429
encrypt_assertion_self_contained=encrypt_assertion_self_contained,
430430
encrypted_advice_attributes=encrypted_advice_attributes,
431431
sign_assertion=sign_assertion,
432-
pefim=pefim, sign_alg=sign_alg,
432+
pefim=pefim, sign_alg=sign_alg, digest_alg=digest_alg,
433433
**args)
434434

435435
# ------------------------------------------------------------------------
@@ -489,14 +489,14 @@ def create_attribute_response(self, identity, in_response_to, destination,
489489

490490
if sign_assertion:
491491
assertion.signature = pre_signature_part(assertion.id,
492-
self.sec.my_cert, 1, sign_alg=sign_alg)
492+
self.sec.my_cert, 1, sign_alg=sign_alg, digest_alg=digest_alg)
493493
# Just the assertion or the response and the assertion ?
494494
to_sign = [(class_name(assertion), assertion.id)]
495495

496496
args["assertion"] = assertion
497497

498498
return self._response(in_response_to, destination, status, issuer,
499-
sign_response, to_sign, sign_alg=sign_alg, **args)
499+
sign_response, to_sign, sign_alg=sign_alg, digest_alg=digest_alg, **args)
500500

501501
# ------------------------------------------------------------------------
502502

@@ -648,7 +648,7 @@ def create_authn_response(self, identity, in_response_to, destination,
648648
encrypt_cert_advice=encrypt_cert_advice,
649649
encrypt_cert_assertion=encrypt_cert_assertion,
650650
pefim=pefim,
651-
sign_alg=sign_alg)
651+
sign_alg=sign_alg, digest_alg=digest_alg)
652652
return self._authn_response(in_response_to, # in_response_to
653653
destination, # consumer_url
654654
sp_entity_id, # sp_entity_id
@@ -666,7 +666,7 @@ def create_authn_response(self, identity, in_response_to, destination,
666666
encrypt_cert_advice=encrypt_cert_advice,
667667
encrypt_cert_assertion=encrypt_cert_assertion,
668668
pefim=pefim,
669-
sign_alg=sign_alg)
669+
sign_alg=sign_alg, digest_alg=digest_alg)
670670

671671
except MissingValue as exc:
672672
return self.create_error_response(in_response_to, destination,
@@ -703,7 +703,7 @@ def create_assertion_id_request_response(self, assertion_id, sign=False, sign_al
703703
if to_sign:
704704
if assertion.signature is None:
705705
assertion.signature = pre_signature_part(assertion.id,
706-
self.sec.my_cert, 1, sign_alg=sign_alg)
706+
self.sec.my_cert, 1, sign_alg=sign_alg, digest_alg=digest_alg)
707707

708708
return signed_instance_factory(assertion, self.sec, to_sign)
709709
else:
@@ -735,7 +735,7 @@ def create_name_id_mapping_response(self, name_id=None, encrypted_id=None,
735735
in_response_to=in_response_to, **ms_args)
736736

737737
if sign_response:
738-
return self.sign(_resp, sign_alg=sign_alg)
738+
return self.sign(_resp, sign_alg=sign_alg, digest_alg=digest_alg)
739739
else:
740740
logger.info("Message: %s", _resp)
741741
return _resp
@@ -764,7 +764,7 @@ def create_authn_query_response(self, subject, session_index=None,
764764
args = {}
765765

766766
return self._response(in_response_to, "", status, issuer,
767-
sign_response, to_sign=[], sign_alg=sign_alg, **args)
767+
sign_response, to_sign=[], sign_alg=sign_alg, digest_alg=digest_alg, **args)
768768

769769
# ---------
770770

src/saml2/sigver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,7 +1779,7 @@ def multiple_signatures(self, statement, to_sign, key=None, key_file=None, sign_
17791779
sid = item.id
17801780

17811781
if not item.signature:
1782-
item.signature = pre_signature_part(sid, self.cert_file, sign_alg=sign_alg)
1782+
item.signature = pre_signature_part(sid, self.cert_file, sign_alg=sign_alg, digest_alg=digest_alg)
17831783

17841784
statement = self.sign_statement(statement, class_name(item),
17851785
key=key, key_file=key_file,
@@ -1922,7 +1922,7 @@ def response_factory(sign=False, encrypt=False, sign_alg=None, digest_alg=None,
19221922
issue_instant=instant())
19231923

19241924
if sign:
1925-
response.signature = pre_signature_part(kwargs["id"], sign_alg=sign_alg)
1925+
response.signature = pre_signature_part(kwargs["id"], sign_alg=sign_alg, digest_alg=digest_alg)
19261926
if encrypt:
19271927
pass
19281928

src/saml2/xmldsig/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
TRANSFORM_ENVELOPED = 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'
6262

6363

64-
class DefaultSignature:
65-
class _DefaultSignature:
64+
class DefaultSignature(object):
65+
class _DefaultSignature(object):
6666
def __init__(self, sign_alg=None, digest_alg=None):
6767
if sign_alg is None:
6868
self.sign_alg = sig_default

tests/test_52_default_sign_alg.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,20 +142,20 @@ def test_signed_response_2(self):
142142
sign_response=True,
143143
sign_assertion=True,
144144
sign_alg=ds.SIG_RSA_SHA256,
145-
digest_alg=ds.DIGEST_SHA512
145+
digest_alg=ds.DIGEST_SHA256
146146
)
147147

148148
sresponse = response_from_string(signed_resp)
149149
assert ds.SIG_RSA_SHA256 in str(sresponse), "Not correctly signed!"
150-
assert ds.DIGEST_SHA512 in str(sresponse), "Not correctly signed!"
150+
assert ds.DIGEST_SHA256 in str(sresponse), "Not correctly signed!"
151151
valid = self.server.sec.verify_signature(signed_resp,
152152
self.server.config.cert_file,
153153
node_name='urn:oasis:names:tc:SAML:2.0:protocol:Response',
154154
node_id=sresponse.id,
155155
id_attr="")
156156
assert valid
157157
assert ds.SIG_RSA_SHA256 in str(sresponse.assertion[0]), "Not correctly signed!"
158-
assert ds.DIGEST_SHA512 in str(sresponse.assertion[0]), "Not correctly signed!"
158+
assert ds.DIGEST_SHA256 in str(sresponse.assertion[0]), "Not correctly signed!"
159159
valid = self.server.sec.verify_signature(signed_resp,
160160
self.server.config.cert_file,
161161
node_name='urn:oasis:names:tc:SAML:2.0:assertion:Assertion',

0 commit comments

Comments
 (0)