@@ -310,7 +310,9 @@ def signed_instance_factory(instance, seccont, elements_to_sign=None):
310310 :return: A class instance if not signed otherwise a string
311311 """
312312 if elements_to_sign :
313- signed_xml = str (instance )
313+ signed_xml = instance
314+ if not isinstance (instance , six .string_types ):
315+ signed_xml = instance .to_string ()
314316 for (node_name , nodeid ) in elements_to_sign :
315317 signed_xml = seccont .sign_statement (
316318 signed_xml , node_name = node_name , node_id = nodeid )
@@ -336,7 +338,7 @@ def make_temp(string, suffix='', decode=True, delete=True):
336338 ntf = NamedTemporaryFile (suffix = suffix , delete = delete )
337339 # Python3 tempfile requires byte-like object
338340 if not isinstance (string , six .binary_type ):
339- string = string .encode ()
341+ string = string .encode ('utf-8' )
340342
341343 if decode :
342344 ntf .write (base64 .b64decode (string ))
@@ -712,7 +714,7 @@ def encrypt(self, text, recv_key, template, session_key_type, xpath=''):
712714 :return:
713715 """
714716 logger .debug ('Encryption input len: %d' , len (text ))
715- _ , fil = make_temp (str ( text ). encode () , decode = False )
717+ _ , fil = make_temp (text , decode = False )
716718
717719 com_list = [
718720 self .xmlsec ,
@@ -743,13 +745,17 @@ def encrypt_assertion(self, statement, enc_key, template, key_type='des-192', no
743745 :param key_type: The type of session key to use.
744746 :return: The encrypted text
745747 """
748+ if six .PY2 :
749+ _str = unicode
750+ else :
751+ _str = str
746752
747753 if isinstance (statement , SamlBase ):
748754 statement = pre_encrypt_assertion (statement )
749755
750- _ , fil = make_temp (str (statement ). encode ( ), decode = False ,
756+ _ , fil = make_temp (_str (statement ), decode = False ,
751757 delete = False )
752- _ , tmpl = make_temp (str (template ). encode ( ), decode = False )
758+ _ , tmpl = make_temp (_str (template ), decode = False )
753759
754760 if not node_xpath :
755761 node_xpath = ASSERT_XPATH
@@ -776,7 +782,7 @@ def encrypt_assertion(self, statement, enc_key, template, key_type='des-192', no
776782 if not output :
777783 raise EncryptError (_stderr )
778784
779- return output .decode ()
785+ return output .decode ('utf-8' )
780786
781787 def decrypt (self , enctext , key_file , id_attr ):
782788 """
@@ -787,7 +793,7 @@ def decrypt(self, enctext, key_file, id_attr):
787793 """
788794
789795 logger .debug ('Decrypt input len: %d' , len (enctext ))
790- _ , fil = make_temp (str ( enctext ). encode () , decode = False )
796+ _ , fil = make_temp (enctext , decode = False )
791797
792798 com_list = [
793799 self .xmlsec ,
@@ -802,8 +808,7 @@ def decrypt(self, enctext, key_file, id_attr):
802808 [fil ],
803809 exception = DecryptError ,
804810 validate_output = False )
805-
806- return output .decode ()
811+ return output .decode ('utf-8' )
807812
808813 def sign_statement (self , statement , node_name , key_file , node_id , id_attr ):
809814 """
@@ -846,7 +851,7 @@ def sign_statement(self, statement, node_name, key_file, node_id, id_attr):
846851 # this doesn't work if --store-signatures are used
847852 if stdout == '' :
848853 if signed_statement :
849- return signed_statement .decode ()
854+ return signed_statement .decode ('utf-8' )
850855
851856 logger .error ('Signing operation failed :\n stdout : %s\n stderr : %s' , stdout , stderr )
852857 raise SigverError (stderr )
@@ -866,7 +871,7 @@ def validate_signature(self, signedtext, cert_file, cert_type, node_name, node_i
866871 :return: Boolean True if the signature was correct otherwise False.
867872 """
868873 if not isinstance (signedtext , six .binary_type ):
869- signedtext = signedtext .encode ()
874+ signedtext = signedtext .encode ('utf-8' )
870875
871876 _ , fil = make_temp (
872877 signedtext ,
@@ -1409,7 +1414,6 @@ def decrypt(self, enctext, key_file=None, id_attr=''):
14091414 _enctext = self .crypto .decrypt (enctext , key_file , id_attr )
14101415 if _enctext is not None and len (_enctext ) > 0 :
14111416 return _enctext
1412-
14131417 return enctext
14141418
14151419 def verify_signature (self , signedtext , cert_file = None , cert_type = 'pem' , node_name = NODE_NAME , node_id = None , id_attr = '' ):
0 commit comments