Skip to content

Commit 80f94a9

Browse files
peppelinuxc00kiemon5ter
authored andcommitted
Configurable signing and digest alg
1 parent 2f756ba commit 80f94a9

File tree

5 files changed

+41
-3
lines changed

5 files changed

+41
-3
lines changed

docs/howto/config.rst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ The globally unique identifier of the entity.
247247
.. note:: It is recommended that the entityid should point to a real
248248
webpage where the metadata for the entity can be found.
249249

250+
250251
key_file
251252
^^^^^^^^
252253

@@ -1013,6 +1014,23 @@ Example::
10131014
}
10141015
}
10151016

1017+
1018+
signing_algorithm
1019+
"""""""""""""""""
1020+
1021+
Default algorithm to be used. Example::
1022+
1023+
'signing_algorithm': saml2.xmldsig.SIG_RSA_SHA256,
1024+
1025+
1026+
digest_algorithm
1027+
"""""""""""""""""
1028+
1029+
Default algorithm to be used. Example::
1030+
1031+
'digest_algorithm': saml2.xmldsig.DIGEST_SHA256,
1032+
1033+
10161034
logout_responses_signed
10171035
"""""""""""""""""""""""
10181036

@@ -1031,6 +1049,7 @@ Example::
10311049
}
10321050
}
10331051

1052+
10341053
subject_data
10351054
""""""""""""
10361055

src/saml2/client_base.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ def __init__(self, config=None, identity_cache=None, state_cache=None,
186186

187187
setattr(self, attr, val)
188188

189+
# signing and digest algs
190+
self.signing_algorithm = self.config.getattr('signing_algorithm', "sp")
191+
self.digest_algorithm = self.config.getattr('digest_algorithm', "sp")
192+
189193
if self.entity_type == "sp" and not any(
190194
[
191195
self.want_assertions_signed,
@@ -234,8 +238,10 @@ def _sso_location(self, entityid=None, binding=BINDING_HTTP_REDIRECT):
234238
raise IdpUnspecified("Too many IdPs to choose from: %s" % eids)
235239

236240
try:
237-
srvs = self.metadata.single_sign_on_service(list(eids.keys())[0], binding)
241+
srvs = self.metadata.single_sign_on_service(list(eids.keys())[0],
242+
binding)
238243
return next(locations(srvs), None)
244+
239245
except IndexError:
240246
raise IdpUnspecified("No IdP to send to given the premises")
241247

src/saml2/config.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@
7676
"metadata",
7777
"ui_info",
7878
"name_id_format",
79+
"signing_algorithm",
80+
"digest_algorithm",
7981
]
8082

8183
SP_ARGS = [
@@ -225,6 +227,8 @@ def __init__(self, homedir="."):
225227
self.attribute_profile = []
226228
self.requested_attribute_name_format = NAME_FORMAT_URI
227229
self.delete_tmpfiles = True
230+
self.signing_algorithm = None
231+
self.digest_algorithm = None
228232

229233
def setattr(self, context, attr, val):
230234
if context == "":

src/saml2/entity.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,10 @@ def sign(
453453
sign_alg=None,
454454
digest_alg=None,
455455
):
456+
# sign adn digest algs
457+
sign_alg = sign_alg or self.signing_algorithm
458+
digest_alg = digest_alg or self.digest_algorithm
459+
456460
if msg.signature is None:
457461
msg.signature = pre_signature_part(
458462
msg.id, self.sec.my_cert, 1, sign_alg=sign_alg, digest_alg=digest_alg

src/saml2/server.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,8 @@ def create_attribute_response(self, identity, in_response_to, destination,
524524

525525
if not name_id and userid:
526526
try:
527-
name_id = self.ident.construct_nameid(userid, policy, sp_entity_id)
527+
name_id = self.ident.construct_nameid(userid, policy,
528+
sp_entity_id)
528529
logger.warning("Unspecified NameID format")
529530
except Exception:
530531
pass
@@ -593,7 +594,11 @@ def gather_authn_response_args(self, sp_entity_id, name_id_policy, userid,
593594
args['best_effort'] = kwargs["best_effort"]
594595
except KeyError:
595596
args['best_effort'] = False
596-
597+
598+
# signing and digest algs
599+
self.signing_algorithm = self.config.getattr('signing_algorithm', "idp")
600+
self.digest_algorithm = self.config.getattr('digest_algorithm', "idp")
601+
597602
for param in ['sign_assertion', 'sign_response', 'encrypt_assertion',
598603
'encrypt_assertion_self_contained',
599604
'encrypted_advice_attributes', 'encrypt_cert_advice',

0 commit comments

Comments
 (0)