@@ -266,7 +266,7 @@ def _instance(klass, ava, seccont, base64encode=False, elements_to_sign=None):
266
266
#print("# %s" % (prop))
267
267
if prop in ava :
268
268
if isinstance (ava [prop ], bool ):
269
- setattr (instance , prop , "%s" % ava [prop ])
269
+ setattr (instance , prop , str ( ava [prop ]). encode ( 'utf-8' ) )
270
270
elif isinstance (ava [prop ], int ):
271
271
setattr (instance , prop , "%d" % ava [prop ])
272
272
else :
@@ -313,7 +313,7 @@ def signed_instance_factory(instance, seccont, elements_to_sign=None):
313
313
:return: A class instance if not signed otherwise a string
314
314
"""
315
315
if elements_to_sign :
316
- signed_xml = "%s" % instance
316
+ signed_xml = str ( instance ). encode ( 'utf-8' )
317
317
for (node_name , nodeid ) in elements_to_sign :
318
318
signed_xml = seccont .sign_statement (
319
319
signed_xml , node_name = node_name , node_id = nodeid )
@@ -351,6 +351,7 @@ def make_temp(string, suffix="", decode=True, delete=True):
351
351
xmlsec function).
352
352
"""
353
353
ntf = NamedTemporaryFile (suffix = suffix , delete = delete )
354
+ assert isinstance (string , six .binary_type )
354
355
if decode :
355
356
ntf .write (base64 .b64decode (string ))
356
357
else :
@@ -543,7 +544,7 @@ def extract_rsa_key_from_x509_cert(pem):
543
544
544
545
def pem_format (key ):
545
546
return "\n " .join (["-----BEGIN CERTIFICATE-----" ,
546
- key , "-----END CERTIFICATE-----" ])
547
+ key , "-----END CERTIFICATE-----" ]). encode ( 'ascii' )
547
548
548
549
549
550
def import_rsa_key_from_file (filename ):
@@ -740,8 +741,9 @@ def __init__(self, xmlsec_binary, **kwargs):
740
741
def version (self ):
741
742
com_list = [self .xmlsec , "--version" ]
742
743
pof = Popen (com_list , stderr = PIPE , stdout = PIPE )
744
+ content = pof .stdout .read ().decode ('ascii' )
743
745
try :
744
- return pof . stdout . read () .split (" " )[1 ]
746
+ return content .split (" " )[1 ]
745
747
except IndexError :
746
748
return ""
747
749
@@ -757,7 +759,7 @@ def encrypt(self, text, recv_key, template, session_key_type, xpath=""):
757
759
:return:
758
760
"""
759
761
logger .debug ("Encryption input len: %d" % len (text ))
760
- _ , fil = make_temp ("%s" % text , decode = False )
762
+ _ , fil = make_temp (str ( text ). encode ( 'utf-8' ) , decode = False )
761
763
762
764
com_list = [self .xmlsec , "--encrypt" , "--pubkey-cert-pem" , recv_key ,
763
765
"--session-key" , session_key_type , "--xml-data" , fil ]
@@ -768,6 +770,8 @@ def encrypt(self, text, recv_key, template, session_key_type, xpath=""):
768
770
(_stdout , _stderr , output ) = self ._run_xmlsec (com_list , [template ],
769
771
exception = DecryptError ,
770
772
validate_output = False )
773
+ if isinstance (output , six .binary_type ):
774
+ output = output .decode ('utf-8' )
771
775
return output
772
776
773
777
def encrypt_assertion (self , statement , enc_key , template ,
@@ -785,8 +789,8 @@ def encrypt_assertion(self, statement, enc_key, template,
785
789
if isinstance (statement , SamlBase ):
786
790
statement = pre_encrypt_assertion (statement )
787
791
788
- _ , fil = make_temp ("%s" % statement , decode = False , delete = False )
789
- _ , tmpl = make_temp ("%s" % template , decode = False )
792
+ _ , fil = make_temp (str ( statement ). encode ( 'utf-8' ) , decode = False , delete = False )
793
+ _ , tmpl = make_temp (str ( template ). encode ( 'utf-8' ) , decode = False )
790
794
791
795
if not node_xpath :
792
796
node_xpath = ASSERT_XPATH
@@ -815,7 +819,7 @@ def decrypt(self, enctext, key_file):
815
819
"""
816
820
817
821
logger .debug ("Decrypt input len: %d" % len (enctext ))
818
- _ , fil = make_temp ("%s" % enctext , decode = False )
822
+ _ , fil = make_temp (str ( enctext ). encode ( 'utf-8' ) , decode = False )
819
823
820
824
com_list = [self .xmlsec , "--decrypt" , "--privkey-pem" ,
821
825
key_file , "--id-attr:%s" % ID_ATTR , ENC_KEY_CLASS ]
@@ -838,9 +842,11 @@ def sign_statement(self, statement, node_name, key_file, node_id,
838
842
'id','Id' or 'ID'
839
843
:return: The signed statement
840
844
"""
845
+ if not isinstance (statement , six .binary_type ):
846
+ statement = str (statement ).encode ('utf-8' )
841
847
842
- _ , fil = make_temp ("%s" % statement , suffix = ".xml" , decode = False ,
843
- delete = self ._xmlsec_delete_tmpfiles )
848
+ _ , fil = make_temp (statement , suffix = ".xml" ,
849
+ decode = False , delete = self ._xmlsec_delete_tmpfiles )
844
850
845
851
com_list = [self .xmlsec , "--sign" ,
846
852
"--privkey-pem" , key_file ,
@@ -875,6 +881,8 @@ def validate_signature(self, signedtext, cert_file, cert_type, node_name,
875
881
:param id_attr: Should normally be one of "id", "Id" or "ID"
876
882
:return: Boolean True if the signature was correct otherwise False.
877
883
"""
884
+ if not isinstance (signedtext , six .binary_type ):
885
+ signedtext = signedtext .encode ('utf-8' )
878
886
_ , fil = make_temp (signedtext , suffix = ".xml" ,
879
887
decode = False , delete = self ._xmlsec_delete_tmpfiles )
880
888
@@ -924,8 +932,8 @@ def _run_xmlsec(self, com_list, extra_args, validate_output=True,
924
932
925
933
pof = Popen (com_list , stderr = PIPE , stdout = PIPE )
926
934
927
- p_out = pof .stdout .read ()
928
- p_err = pof .stderr .read ()
935
+ p_out = pof .stdout .read (). decode ( 'utf-8' )
936
+ p_err = pof .stderr .read (). decode ( 'utf-8' )
929
937
930
938
if pof .returncode is not None and pof .returncode < 0 :
931
939
logger .error (LOG_LINE % (p_out , p_err ))
@@ -1685,7 +1693,7 @@ def sign_statement(self, statement, node_name, key=None,
1685
1693
id_attr = ID_ATTR
1686
1694
1687
1695
if not key_file and key :
1688
- _ , key_file = make_temp ("%s" % key , ".pem" )
1696
+ _ , key_file = make_temp (str ( key ). encode ( 'utf-8' ) , ".pem" )
1689
1697
1690
1698
if not key and not key_file :
1691
1699
key_file = self .key_file
0 commit comments