Skip to content

Commit 6e34b69

Browse files
committed
Set sha256 and rsa-sha256 as default algorithms to be used
1 parent a55cc9a commit 6e34b69

File tree

8 files changed

+23
-23
lines changed

8 files changed

+23
-23
lines changed

src/onelogin/saml2/auth.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ def get_slo_response_url(self):
523523
"""
524524
return self._settings.get_idp_slo_response_url()
525525

526-
def add_request_signature(self, request_data, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA1):
526+
def add_request_signature(self, request_data, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA256):
527527
"""
528528
Builds the Signature of the SAML Request.
529529
@@ -535,7 +535,7 @@ def add_request_signature(self, request_data, sign_algorithm=OneLogin_Saml2_Cons
535535
"""
536536
return self._build_signature(request_data, 'SAMLRequest', sign_algorithm)
537537

538-
def add_response_signature(self, response_data, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA1):
538+
def add_response_signature(self, response_data, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA256):
539539
"""
540540
Builds the Signature of the SAML Response.
541541
:param response_data: The Response parameters
@@ -588,7 +588,7 @@ def _build_sign_query(saml_data, relay_state, algorithm, saml_type, lowercase_ur
588588
sign_data.append('SigAlg=%s' % OneLogin_Saml2_Utils.escape_url(algorithm, lowercase_urlencoding))
589589
return '&'.join(sign_data)
590590

591-
def _build_signature(self, data, saml_type, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA1):
591+
def _build_signature(self, data, saml_type, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA256):
592592
"""
593593
Builds the Signature
594594
:param data: The Request data
@@ -621,7 +621,7 @@ def _build_signature(self, data, saml_type, sign_algorithm=OneLogin_Saml2_Consta
621621
OneLogin_Saml2_Constants.RSA_SHA384: xmlsec.Transform.RSA_SHA384,
622622
OneLogin_Saml2_Constants.RSA_SHA512: xmlsec.Transform.RSA_SHA512
623623
}
624-
sign_algorithm_transform = sign_algorithm_transform_map.get(sign_algorithm, xmlsec.Transform.RSA_SHA1)
624+
sign_algorithm_transform = sign_algorithm_transform_map.get(sign_algorithm, xmlsec.Transform.RSA_SHA256)
625625

626626
signature = OneLogin_Saml2_Utils.sign_binary(msg, key, sign_algorithm_transform, self._settings.is_debug_active())
627627
data['Signature'] = OneLogin_Saml2_Utils.b64encode(signature)

src/onelogin/saml2/metadata.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def builder(cls, sp, authnsign=False, wsign=False, valid_until=None, cache_durat
193193
return metadata
194194

195195
@staticmethod
196-
def sign_metadata(metadata, key, cert, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA1, digest_algorithm=OneLogin_Saml2_Constants.SHA1):
196+
def sign_metadata(metadata, key, cert, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA256, digest_algorithm=OneLogin_Saml2_Constants.SHA256):
197197
"""
198198
Signs the metadata with the key/cert provided
199199

src/onelogin/saml2/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,10 +307,10 @@ def _add_default_values(self):
307307
self._security.setdefault('wantNameIdEncrypted', False)
308308

309309
# Signature Algorithm
310-
self._security.setdefault('signatureAlgorithm', OneLogin_Saml2_Constants.RSA_SHA1)
310+
self._security.setdefault('signatureAlgorithm', OneLogin_Saml2_Constants.RSA_SHA256)
311311

312312
# Digest Algorithm
313-
self._security.setdefault('digestAlgorithm', OneLogin_Saml2_Constants.SHA1)
313+
self._security.setdefault('digestAlgorithm', OneLogin_Saml2_Constants.SHA256)
314314

315315
# AttributeStatement required by default
316316
self._security.setdefault('wantAttributeStatement', True)

src/onelogin/saml2/utils.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ def decrypt_element(encrypted_data, key, debug=False, inplace=False):
697697
return enc_ctx.decrypt(encrypted_data)
698698

699699
@staticmethod
700-
def add_sign(xml, key, cert, debug=False, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA1, digest_algorithm=OneLogin_Saml2_Constants.SHA1):
700+
def add_sign(xml, key, cert, debug=False, sign_algorithm=OneLogin_Saml2_Constants.RSA_SHA256, digest_algorithm=OneLogin_Saml2_Constants.SHA256):
701701
"""
702702
Adds signature key and senders certificate to an element (Message or
703703
Assertion).
@@ -735,7 +735,7 @@ def add_sign(xml, key, cert, debug=False, sign_algorithm=OneLogin_Saml2_Constant
735735
OneLogin_Saml2_Constants.RSA_SHA384: xmlsec.Transform.RSA_SHA384,
736736
OneLogin_Saml2_Constants.RSA_SHA512: xmlsec.Transform.RSA_SHA512
737737
}
738-
sign_algorithm_transform = sign_algorithm_transform_map.get(sign_algorithm, xmlsec.Transform.RSA_SHA1)
738+
sign_algorithm_transform = sign_algorithm_transform_map.get(sign_algorithm, xmlsec.Transform.RSA_SHA256)
739739

740740
signature = xmlsec.template.create(elem, xmlsec.Transform.EXCL_C14N, sign_algorithm_transform, ns='ds')
741741

@@ -770,7 +770,7 @@ def add_sign(xml, key, cert, debug=False, sign_algorithm=OneLogin_Saml2_Constant
770770
OneLogin_Saml2_Constants.SHA384: xmlsec.Transform.SHA384,
771771
OneLogin_Saml2_Constants.SHA512: xmlsec.Transform.SHA512
772772
}
773-
digest_algorithm_transform = digest_algorithm_transform_map.get(digest_algorithm, xmlsec.Transform.SHA1)
773+
digest_algorithm_transform = digest_algorithm_transform_map.get(digest_algorithm, xmlsec.Transform.SHA256)
774774

775775
ref = xmlsec.template.add_reference(signature, digest_algorithm_transform, uri=elem_id)
776776
xmlsec.template.add_transform(ref, xmlsec.Transform.ENVELOPED)
@@ -983,7 +983,7 @@ def validate_node_sign(signature_node, elem, cert=None, fingerprint=None, finger
983983
return True
984984

985985
@staticmethod
986-
def sign_binary(msg, key, algorithm=xmlsec.Transform.RSA_SHA1, debug=False):
986+
def sign_binary(msg, key, algorithm=xmlsec.Transform.RSA_SHA256, debug=False):
987987
"""
988988
Sign binary message
989989
@@ -1009,7 +1009,7 @@ def sign_binary(msg, key, algorithm=xmlsec.Transform.RSA_SHA1, debug=False):
10091009
return dsig_ctx.sign_binary(compat.to_bytes(msg), algorithm)
10101010

10111011
@staticmethod
1012-
def validate_binary_sign(signed_query, signature, cert=None, algorithm=OneLogin_Saml2_Constants.RSA_SHA1, debug=False):
1012+
def validate_binary_sign(signed_query, signature, cert=None, algorithm=OneLogin_Saml2_Constants.RSA_SHA256, debug=False):
10131013
"""
10141014
Validates signed binary data (Used to validate GET Signature).
10151015
@@ -1041,7 +1041,7 @@ def validate_binary_sign(signed_query, signature, cert=None, algorithm=OneLogin_
10411041
OneLogin_Saml2_Constants.RSA_SHA384: xmlsec.Transform.RSA_SHA384,
10421042
OneLogin_Saml2_Constants.RSA_SHA512: xmlsec.Transform.RSA_SHA512
10431043
}
1044-
sign_algorithm_transform = sign_algorithm_transform_map.get(algorithm, xmlsec.Transform.RSA_SHA1)
1044+
sign_algorithm_transform = sign_algorithm_transform_map.get(algorithm, xmlsec.Transform.RSA_SHA256)
10451045

10461046
dsig_ctx.verify_binary(compat.to_bytes(signed_query),
10471047
sign_algorithm_transform,

tests/src/OneLogin/saml2_tests/auth_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ def testProcessSLORequestSignedResponse(self):
567567
self.assertIn('SigAlg', parsed_query)
568568
self.assertIn('Signature', parsed_query)
569569
self.assertIn('http://relaystate.com', parsed_query['RelayState'])
570-
self.assertIn(OneLogin_Saml2_Constants.RSA_SHA1, parsed_query['SigAlg'])
570+
self.assertIn(OneLogin_Saml2_Constants.RSA_SHA256, parsed_query['SigAlg'])
571571

572572
def testLogin(self):
573573
"""
@@ -624,7 +624,7 @@ def testLoginSigned(self):
624624
self.assertIn('SigAlg', parsed_query)
625625
self.assertIn('Signature', parsed_query)
626626
self.assertIn(return_to, parsed_query['RelayState'])
627-
self.assertIn(OneLogin_Saml2_Constants.RSA_SHA1, parsed_query['SigAlg'])
627+
self.assertIn(OneLogin_Saml2_Constants.RSA_SHA256, parsed_query['SigAlg'])
628628

629629
def testLoginForceAuthN(self):
630630
"""
@@ -824,7 +824,7 @@ def testLogoutSigned(self):
824824
self.assertIn('SigAlg', parsed_query)
825825
self.assertIn('Signature', parsed_query)
826826
self.assertIn(return_to, parsed_query['RelayState'])
827-
self.assertIn(OneLogin_Saml2_Constants.RSA_SHA1, parsed_query['SigAlg'])
827+
self.assertIn(OneLogin_Saml2_Constants.RSA_SHA256, parsed_query['SigAlg'])
828828

829829
def testLogoutNoSLO(self):
830830
"""
@@ -1088,7 +1088,7 @@ def testBuildRequestSignature(self):
10881088
auth = OneLogin_Saml2_Auth(self.get_request(), old_settings=settings)
10891089

10901090
auth.add_request_signature(parameters)
1091-
valid_signature = 'Pb1EXAX5TyipSJ1SndEKZstLQTsT+1D00IZAhEepBM+OkAZQSToivu3njgJu47HZiZAqgXZFgloBuuWE/+GdcSsRYEMkEkiSDWTpUr25zKYLJDSg6GNo6iAHsKSuFt46Z54Xe/keYxYP03Hdy97EwuuSjBzzgRc5tmpV+KC7+a0='
1091+
valid_signature = 'CqdIlbO6GieeJFV+PYqyqz1QVJunQXdZZl+ZyIby9O3/eMJM0XHi+TWReRrpgNxKkbmmvx5fp/t7mphbLiVYNMgGINEaaa/OfoaGwU9GM5YCVULA2t7qZBel1yrIXGMxijJizB7UPR2ZMo4G+Wdhx1zbmbB0GYM0A27w6YCe/+k='
10921092
self.assertEqual(valid_signature, parameters["Signature"])
10931093

10941094
settings['sp']['privateKey'] = ''
@@ -1109,7 +1109,7 @@ def testBuildResponseSignature(self):
11091109
parameters = {"SAMLResponse": message, 'RelayState': relay_state}
11101110

11111111
auth.add_response_signature(parameters)
1112-
valid_signature = 'IcyWLRX6Dz3wHBfpcUaNLVDMGM3uo6z2Z11Gjq0/APPJaHboKGljffsgMVAGBml497yckq+eYKmmz+jpURV9yTj2sF9qfD6CwX2dEzSzMdRzB40X7pWyHgEJGIhs6BhaOt5oXEk4T+h3AczERqpVYFpL00yo7FNtyQkhZFpHFhM='
1112+
valid_signature = 'fFGaOuO/2+ch/xlwU5o7iS6R+v2quWchLAtiDyQTxStFQZKY1NsBs/eYIin2Meq7oTl1Ks6tpT6JshH5OwhPh/08K7M2oa6FIKb99cjg+jIJ/WwpuJ5h9SH0XXP8y3RLhCxLIomHDsBOGQK8WvOlXFUg+9nvOaEMNi6raUWrGhA='
11131113
self.assertEqual(valid_signature, parameters['Signature'])
11141114

11151115
settings['sp']['privateKey'] = ''

tests/src/OneLogin/saml2_tests/metadata_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ def testSignMetadata(self):
222222
self.assertIn('<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>', signed_metadata)
223223

224224
self.assertIn('<ds:SignedInfo>\n<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>', signed_metadata)
225-
self.assertIn('<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>', signed_metadata)
226-
self.assertIn('<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>', signed_metadata)
225+
self.assertIn('<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>', signed_metadata)
226+
self.assertIn('<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>', signed_metadata)
227227
self.assertIn('<ds:Reference', signed_metadata)
228228
self.assertIn('<ds:KeyInfo>\n<ds:X509Data>\n<ds:X509Certificate>', signed_metadata)
229229

tests/src/OneLogin/saml2_tests/settings_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ def generateAndCheckMetadata(self, settings):
593593
self.assertIn('<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://stuff.com/endpoints/endpoints/sls.php"/>', metadata)
594594
self.assertIn('<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>', metadata)
595595
self.assertIn('<ds:SignedInfo>\n<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>', metadata)
596-
self.assertIn('<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>', metadata)
596+
self.assertIn('<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>', metadata)
597597
self.assertIn('<ds:Reference', metadata)
598598
self.assertIn('<ds:KeyInfo>\n<ds:X509Data>\n<ds:X509Certificate>', metadata)
599599

tests/src/OneLogin/saml2_tests/utils_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -792,8 +792,8 @@ def testAddSignCheckAlg(self):
792792
xml_authn = b64decode(self.file_contents(join(self.data_path, 'requests', 'authn_request.xml.base64')))
793793
xml_authn_signed = compat.to_string(OneLogin_Saml2_Utils.add_sign(xml_authn, key, cert))
794794
self.assertIn('<ds:SignatureValue>', xml_authn_signed)
795-
self.assertIn('<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>', xml_authn_signed)
796-
self.assertIn('<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>', xml_authn_signed)
795+
self.assertIn('<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>', xml_authn_signed)
796+
self.assertIn('<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>', xml_authn_signed)
797797

798798
xml_authn_signed_2 = compat.to_string(OneLogin_Saml2_Utils.add_sign(xml_authn, key, cert, False, OneLogin_Saml2_Constants.RSA_SHA256, OneLogin_Saml2_Constants.SHA384))
799799
self.assertIn('<ds:SignatureValue>', xml_authn_signed_2)

0 commit comments

Comments
 (0)