@@ -498,8 +498,32 @@ def test_signed_response_2(self):
498
498
499
499
assert sresponse .assertion [0 ].signature == None
500
500
501
+ def test_signed_response_3 (self ):
501
502
502
503
504
+ signed_resp = self .server .create_authn_response (
505
+ self .ava ,
506
+ "id12" , # in_response_to
507
+ "http://lingon.catalogix.se:8087/" , # consumer_url
508
+ "urn:mace:example.com:saml:roland:sp" , # sp_entity_id
509
+ name_id = self .name_id ,
510
+ sign_response = False ,
511
+ sign_assertion = True ,
512
+ )
513
+
514
+ sresponse = response_from_string (signed_resp )
515
+
516
+ assert sresponse .signature == None
517
+
518
+ valid = self .server .sec .verify_signature (signed_resp ,
519
+ self .server .config .cert_file ,
520
+ node_name = 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion' ,
521
+ node_id = sresponse .assertion [0 ].id ,
522
+ id_attr = "" )
523
+ assert valid
524
+
525
+ self .verify_assertion (sresponse .assertion )
526
+
503
527
def test_encrypted_signed_response_1 (self ):
504
528
505
529
cert_str , cert_key_str = generate_cert ()
@@ -512,10 +536,10 @@ def test_encrypted_signed_response_1(self):
512
536
name_id = self .name_id ,
513
537
sign_response = True ,
514
538
sign_assertion = True ,
515
- encrypt_assertion = True ,
539
+ encrypt_assertion = False ,
516
540
encrypt_assertion_self_contained = True ,
517
541
encrypted_advice_attributes = True ,
518
- encrypt_cert = cert_str ,
542
+ encrypt_cert_advice = cert_str ,
519
543
)
520
544
521
545
sresponse = response_from_string (signed_resp )
@@ -527,34 +551,26 @@ def test_encrypted_signed_response_1(self):
527
551
id_attr = "" )
528
552
assert valid
529
553
554
+ valid = self .server .sec .verify_signature (signed_resp ,
555
+ self .server .config .cert_file ,
556
+ node_name = 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion' ,
557
+ node_id = sresponse .assertion [0 ].id ,
558
+ id_attr = "" )
559
+
560
+ assert valid
561
+
530
562
_ , key_file = make_temp ("%s" % cert_key_str , decode = False )
531
563
532
564
decr_text = self .server .sec .decrypt (signed_resp , key_file )
533
565
534
566
resp = samlp .response_from_string (decr_text )
535
567
536
- valid = self .server .sec .verify_signature (decr_text ,
537
- self .server .config .cert_file ,
538
- node_name = 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion' ,
539
- node_id = resp .assertion [0 ].id ,
540
- id_attr = "" )
541
- assert valid
542
-
543
568
assert resp .assertion [0 ].advice .encrypted_assertion [0 ].extension_elements
544
569
545
570
assertion = extension_elements_to_elements (resp .assertion [0 ].advice .encrypted_assertion [0 ].extension_elements ,
546
571
[saml , samlp ])
547
- assert assertion
548
- assert assertion [0 ].attribute_statement
549
572
550
- ava = ava = get_ava (assertion [0 ])
551
-
552
- assert ava == \
553
- {
'mail' : [
'[email protected] ' ],
'givenname' : [
'Derek' ],
'surname' : [
'Jeter' ],
'title' : [
'The man' ]}
554
-
555
- assert 'EncryptedAssertion><encas2:Assertion xmlns:encas0="http://www.w3.org/2000/09/xmldsig#" ' \
556
- 'xmlns:encas1="http://www.w3.org/2001/XMLSchema-instance" ' \
557
- 'xmlns:encas2="urn:oasis:names:tc:SAML:2.0:assertion"' in decr_text
573
+ self .verify_assertion (assertion )
558
574
559
575
valid = self .server .sec .verify_signature (decr_text ,
560
576
self .server .config .cert_file ,
@@ -573,7 +589,7 @@ def test_encrypted_signed_response_2(self):
573
589
"urn:mace:example.com:saml:roland:sp" , # sp_entity_id
574
590
name_id = self .name_id ,
575
591
sign_response = True ,
576
- sign_assertion = True ,
592
+ sign_assertion = False ,
577
593
encrypt_assertion = True ,
578
594
encrypt_assertion_self_contained = True ,
579
595
encrypt_cert = cert_str ,
@@ -588,33 +604,16 @@ def test_encrypted_signed_response_2(self):
588
604
id_attr = "" )
589
605
assert valid
590
606
591
- _ , key_file = make_temp ("%s" % cert_key_str , decode = False )
592
-
593
- decr_text = self .server .sec .decrypt (signed_resp , key_file )
607
+ decr_text = self .server .sec .decrypt (signed_resp , self .client .config .key_file )
594
608
595
609
resp = samlp .response_from_string (decr_text )
596
610
597
- assert resp .encrypted_assertion [0 ].extension_elements
598
-
599
- assertion = extension_elements_to_elements (resp .encrypted_assertion [0 ].extension_elements , [saml , samlp ])
600
- assert assertion
601
- assert assertion [0 ].attribute_statement
611
+ resp .assertion = extension_elements_to_elements (resp .encrypted_assertion [0 ].extension_elements , [saml , samlp ])
602
612
603
- ava = get_ava ( assertion [0 ])
613
+ assert resp . assertion [0 ]. signature == None
604
614
605
- assert ava == \
606
- {
'mail' : [
'[email protected] ' ],
'givenname' : [
'Derek' ],
'surname' : [
'Jeter' ],
'title' : [
'The man' ]}
607
-
608
- assert 'EncryptedAssertion><encas2:Assertion xmlns:encas0="http://www.w3.org/2000/09/xmldsig#" ' \
609
- 'xmlns:encas1="http://www.w3.org/2001/XMLSchema-instance" ' \
610
- 'xmlns:encas2="urn:oasis:names:tc:SAML:2.0:assertion"' in decr_text
615
+ self .verify_assertion (resp .assertion )
611
616
612
- valid = self .server .sec .verify_signature (decr_text ,
613
- self .server .config .cert_file ,
614
- node_name = 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion' ,
615
- node_id = assertion [0 ].id ,
616
- id_attr = "" )
617
- assert valid
618
617
619
618
def test_encrypted_signed_response_3 (self ):
620
619
cert_str , cert_key_str = generate_cert ()
@@ -628,7 +627,8 @@ def test_encrypted_signed_response_3(self):
628
627
sign_response = True ,
629
628
sign_assertion = True ,
630
629
encrypt_assertion = True ,
631
- encrypt_cert = cert_str ,
630
+ encrypt_assertion_self_contained = False ,
631
+ encrypt_cert_assertion = cert_str ,
632
632
)
633
633
634
634
sresponse = response_from_string (signed_resp )
@@ -646,27 +646,24 @@ def test_encrypted_signed_response_3(self):
646
646
647
647
resp = samlp .response_from_string (decr_text )
648
648
649
- assert resp .encrypted_assertion [0 ].extension_elements
650
-
651
- assertion = extension_elements_to_elements (resp .encrypted_assertion [0 ].extension_elements , [saml , samlp ])
652
- assert assertion
653
- assert assertion [0 ].attribute_statement
654
-
655
- ava = get_ava (assertion [0 ])
656
-
657
- assert ava == \
658
- {
'mail' : [
'[email protected] ' ],
'givenname' : [
'Derek' ],
'surname' : [
'Jeter' ],
'title' : [
'The man' ]}
649
+ resp .assertion = extension_elements_to_elements (resp .encrypted_assertion [0 ].extension_elements , [saml , samlp ])
659
650
660
- assert 'xmlns:encas' not in decr_text
661
651
662
652
valid = self .server .sec .verify_signature (decr_text ,
663
653
self .server .config .cert_file ,
664
654
node_name = 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion' ,
665
- node_id = assertion [0 ].id ,
655
+ node_id = resp . assertion [0 ].id ,
666
656
id_attr = "" )
657
+
667
658
assert valid
668
659
660
+ self .verify_assertion (resp .assertion )
661
+
662
+ assert 'xmlns:encas' not in decr_text
663
+
664
+
669
665
def test_encrypted_signed_response_4 (self ):
666
+
670
667
cert_str , cert_key_str = generate_cert ()
671
668
672
669
signed_resp = self .server .create_authn_response (
@@ -678,8 +675,9 @@ def test_encrypted_signed_response_4(self):
678
675
sign_response = True ,
679
676
sign_assertion = True ,
680
677
encrypt_assertion = True ,
678
+ encrypt_assertion_self_contained = True ,
681
679
encrypted_advice_attributes = True ,
682
- encrypt_cert = cert_str ,
680
+ encrypt_cert_advice = cert_str ,
683
681
)
684
682
685
683
sresponse = response_from_string (signed_resp )
@@ -691,35 +689,30 @@ def test_encrypted_signed_response_4(self):
691
689
id_attr = "" )
692
690
assert valid
693
691
694
- _ , key_file = make_temp ("%s" % cert_key_str , decode = False )
695
-
696
- decr_text = self .server .sec .decrypt (signed_resp , key_file )
692
+ decr_text = self .server .sec .decrypt (signed_resp , self .client .config .key_file )
697
693
698
694
resp = samlp .response_from_string (decr_text )
699
695
696
+ resp .assertion = extension_elements_to_elements (resp .encrypted_assertion [0 ].extension_elements , [saml , samlp ])
697
+
700
698
valid = self .server .sec .verify_signature (decr_text ,
701
699
self .server .config .cert_file ,
702
700
node_name = 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion' ,
703
701
node_id = resp .assertion [0 ].id ,
704
702
id_attr = "" )
705
- assert valid
706
-
707
- assert resp .assertion [0 ].advice .encrypted_assertion [0 ].extension_elements
708
703
709
- assertion = extension_elements_to_elements (resp .assertion [0 ].advice .encrypted_assertion [0 ].extension_elements ,
710
- [saml , samlp ])
711
- assert assertion
712
- assert assertion [0 ].attribute_statement
704
+ assert valid
713
705
714
- ava = ava = get_ava ( assertion [ 0 ] )
706
+ _ , key_file = make_temp ( "%s" % cert_key_str , decode = False )
715
707
716
- assert ava == \
717
- {
'mail' : [
'[email protected] ' ],
'givenname' : [
'Derek' ],
'surname' : [
'Jeter' ],
'title' : [
'The man' ]}
708
+ decr_text = self .server .sec .decrypt (decr_text , key_file )
718
709
719
- #Should work, but I suspect that xmlsec manipulates the xml to much while encrypting that the signature
720
- #is no longer working. :(
710
+ resp = samlp .response_from_string (decr_text )
721
711
722
- assert 'xmlns:encas' not in decr_text
712
+ assertion = extension_elements_to_elements (resp .encrypted_assertion [0 ].extension_elements , [saml , samlp ])
713
+ assertion = \
714
+ extension_elements_to_elements (assertion [0 ].advice .encrypted_assertion [0 ].extension_elements ,[saml , samlp ])
715
+ self .verify_assertion (assertion )
723
716
724
717
valid = self .server .sec .verify_signature (decr_text ,
725
718
self .server .config .cert_file ,
@@ -1079,4 +1072,4 @@ def test_1(self):
1079
1072
if __name__ == "__main__" :
1080
1073
ts = TestServer1 ()
1081
1074
ts .setup_class ()
1082
- ts .test_signed_response_1 ()
1075
+ ts .test_encrypted_signed_response_4 ()
0 commit comments