@@ -70,28 +70,33 @@ def RSAVP1(pair, s):
7070 return pow (s , e , n )
7171
7272 @staticmethod
73- def EMSA_PKCS1_V15_ENCODE (M , emLen ):
73+ def EMSA_PKCS1_V15_ENCODE (M , emLen , hlen = 256 ):
7474 import hashlib
7575 h = hashlib .sha256 ()
76+ if hlen == 512 :
77+ h = hashlib .sha512 ()
7678 h .update (M )
7779 H = h .digest ()
7880
7981 T = bytes ([0x30 , 0x31 , 0x30 , 0x0d , 0x06 , 0x09 , 0x60 , 0x86 , 0x48 , 0x01 , 0x65 , 0x03 , 0x04 , 0x02 , 0x01 , 0x05 , 0x00 , 0x04 , 0x20 ]) + H
82+ if hlen == 512 :
83+ T = bytes ([0x30 , 0x51 , 0x30 , 0x0d , 0x06 , 0x09 , 0x60 , 0x86 , 0x48 , 0x01 , 0x65 , 0x03 , 0x04 , 0x02 , 0x03 , 0x05 , 0x00 , 0x04 , 0x40 ]) + H
84+
8085 tLen = len (T )
8186 if emLen < tLen + 11 :
8287 return None
8388 PS = bytes ([0xff for _ in range (emLen - tLen - 3 )])
8489 return b"" .join ([b"\x00 \x01 " , PS , b"\x00 " , T ])
85-
90+
8691 @staticmethod
87- def RSAASSA_PKCS1_V15_VERIFY (pair , M , S ):
92+ def RSAASSA_PKCS1_V15_VERIFY (pair , M , S , l = 256 ):
8893 n , e = pair
8994 s = HelperMethods .OS2IP (S )
9095 m = HelperMethods .RSAVP1 ((n ,e ), s )
9196 if m is None : return False
9297 EM = HelperMethods .I2OSP (m , 256 )
9398 if EM is None : return False
94- EM2 = HelperMethods .EMSA_PKCS1_V15_ENCODE (M , 256 )
99+ EM2 = HelperMethods .EMSA_PKCS1_V15_ENCODE (M , 256 , l )
95100 if EM2 is None : return False
96101
97102 try :
@@ -114,6 +119,23 @@ def verify_signature(response, rsaPublicKey):
114119
115120 return HelperMethods .RSAASSA_PKCS1_V15_VERIFY ((n ,e ), m , r )
116121
122+ @staticmethod
123+ def verify_signature_metadata (signature , rsaPublicKey ):
124+
125+ import base64
126+ import json
127+
128+ n = HelperMethods .OS2IP (base64 .b64decode (rsaPublicKey .modulus ))
129+ e = HelperMethods .OS2IP (base64 .b64decode (rsaPublicKey .exponent ))
130+
131+ data = json .loads (base64 .b64decode (signature ))
132+
133+ d = base64 .b64decode (data ["Data" ])
134+ s = base64 .b64decode (data ["Signature" ])
135+
136+ return [HelperMethods .RSAASSA_PKCS1_V15_VERIFY ((n ,e ), d ,s , l = 512 ), d ]
137+
138+
117139 @staticmethod
118140 def int2base64 (num ):
119141 return base64 .b64encode (int .to_bytes (num ), byteorder = 'big' )
0 commit comments