@@ -165,18 +165,18 @@ public void Rsa_Encrypt_LengthLimit_Test(RsaSize size)
165165 var rsaKey = EncryptProvider . CreateRsaKey ( size ) ;
166166
167167 var publicKey = rsaKey . PublicKey ;
168+ var privateKey = rsaKey . PrivateKey ;
168169
169170 //Act
170171 var rawStr = "eyJNb2R1bHVzIjoidHVSL1V1dFVSV0RSVElDYTFFRDcraUF2MUVnQUl0dC9oNkhHc0x6SG80QXAyVVdqWGtvRkp4T1NuRmdhY3d4cWM0WUg5UDdRaVIxQ1lCK3lvMnJUbkhZbVIrYWs2V3RJRU1YNWtmTTJrWHBNUVY2aFBrd0FxRTFpU1pWRUM2eXlmeTNGZUJTVmNnVlUwMFpJMGozbzhqT3ZMOXhneGhmT1J1eTcwM1RUbXdFPSIsIkV4cG9uZW50IjoiQVFBQiIsIlAiOiI3MVNIYVRnK2JvOXhzRnEzSXlrcHRFUXVHUXZTNDNEUDFoM04xcVlBN1E1VHpoS0IydEc1RWxvamtYTkF4d0VVVStxSnZMWDBxTHdzd09zRkhaL3lydz09IiwiUSI6Inc2R2ltem84a0lUL0xuS2U0Sk5QTUt2YTlVVzBSZUZlVzA5U1ZtVnFVWS9VeHl2eU9kemowd3JzTTZib1ZCU1JnZi9SbUZwRUZ1bUZTVW9yVWkxNVR3PT0iLCJEUCI6Im9yNXpPaXloMzZLeFozKzRhek54aFlDYmJES3JIRGc1VEZ1Ri9rRngvY0V4WWI4YUNFZDJ0ekVPWUxqandxOU1PR2dUYzN5enV3NEN6TWpEK01vc1J3PT0iLCJEUSI6InMvNGhhQVM2K0pVRlhDemxkT2JVTTRuTEdXUWFxempoNGMwbmlvb2d1ZzVGelVMbnlNa3RiRjFlV1YrMTNyWlY4bS8yM2VBZlNaMXRuckw1RE5EK0RRPT0iLCJJbnZlcnNlUSI6IlBPSkRGUk03MmVxd0R3TytldDFpTzIwTWlQcFVEUS93N1hEMHBMLzJWYTE4OEgrRGlaK0NuZDJRdnFYZyt4NFdNZSsrVlVNYXo2bWM3V1g4WnBaWW9RPT0iLCJEIjoiWE1QUEZPYktDcHFON21pNG4zb0tsSmFveTlwdFAwRG9FWXBydGc4NmoyS2RWMWZzQWhJM1JOZTNvRmRMcXhrY0VWWmxTTTNLUmhHeUxnRkY0WDk0cnVIYjBQeC9LZVQxMW1BeDNvQ2NCRVlWelhabXlIUHQzWCs2dlBMZzdmYUhtRmlxK3N0Y2NMTlBNSEdna2lkWTF6NGtiTXZwZnBlOWxhN0VMWUdKM21VPSJ9" ;
171172
172-
173173 //RSAEncryptionPaddingMode is Pkcs1
174174 var padding = RSAEncryptionPadding . Pkcs1 ;
175175 var maxLength = ( ( int ) size - 384 ) / 8 + 37 ;
176176 var rawData = rawStr . Substring ( 0 , maxLength ) ;
177177
178- var encryptStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
179-
178+ var encryptedStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
179+ var decryptedStr = EncryptProvider . RSADecrypt ( privateKey , encryptedStr , padding ) ;
180180
181181 //RSAEncryptionPaddingMode is Oaep
182182 padding = RSAEncryptionPadding . OaepSHA1 ;
@@ -186,27 +186,54 @@ public void Rsa_Encrypt_LengthLimit_Test(RsaSize size)
186186 maxLength = ( int ) size / 8 - 42 ; //214 //40
187187 rawData = rawStr . Substring ( 0 , maxLength ) ;
188188
189- encryptStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
189+ encryptedStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
190+ decryptedStr = EncryptProvider . RSADecrypt ( privateKey , encryptedStr , padding ) ;
191+ Assert . Equal ( decryptedStr , rawData ) ;
190192
191193
192194 padding = RSAEncryptionPadding . OaepSHA256 ;
193195
194196 maxLength = ( int ) size / 8 - 66 ; //190 //64
195197 rawData = rawStr . Substring ( 0 , maxLength ) ;
196198
197- encryptStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
199+ encryptedStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
200+ decryptedStr = EncryptProvider . RSADecrypt ( privateKey , encryptedStr , padding ) ;
201+
202+ Assert . Equal ( decryptedStr , rawData ) ;
198203
199204 padding = RSAEncryptionPadding . OaepSHA384 ;
200- maxLength = ( int ) size / 8 - 100 ; //158 //96
205+ maxLength = ( int ) size / 8 - 98 ; //158 //96
201206 rawData = rawStr . Substring ( 0 , maxLength ) ;
202207
203- encryptStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
208+ encryptedStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
209+ decryptedStr = EncryptProvider . RSADecrypt ( privateKey , encryptedStr , padding ) ;
210+
211+ Assert . Equal ( decryptedStr , rawData ) ;
204212
205213 padding = RSAEncryptionPadding . OaepSHA512 ;
206214 maxLength = ( int ) size / 8 - 130 ; //126 // 128
207215 rawData = rawStr . Substring ( 0 , maxLength ) ;
208216
209- encryptStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
217+ encryptedStr = EncryptProvider . RSAEncrypt ( publicKey , rawData , padding ) ;
218+ decryptedStr = EncryptProvider . RSADecrypt ( privateKey , encryptedStr , padding ) ;
219+
220+ Assert . Equal ( decryptedStr , rawData ) ;
221+ }
222+
223+ [ Fact ( DisplayName = "Rsa encrypt out of max length exception test" ) ]
224+ public void Rsa_Encrypt_OutofMaxLength_Exception_Test ( )
225+ {
226+ //Act
227+ var rawStr = "eyJNb2R1bHVzIjoidHVSL1V1dFVSV0RSVElDYTFFRDcraUF2MUVnQUl0dC9oNkhHc0x6SG80QXAyVVdqWGtvRkp4T1NuRmdhY3d4cWM0WUg5UDdRaVIxQ1lCK3lvMnJUbkhZbVIrYWs2V3RJRU1YNWtmTTJrWHBNUVY2aFBrd0FxRTFpU1pWRUM2eXlmeTNGZUJTVmNnVlUwMFpJMGozbzhqT3ZMOXhneGhmT1J1eTcwM1RUbXdFPSIsIkV4cG9uZW50IjoiQVFBQiIsIlAiOiI3MVNIYVRnK2JvOXhzRnEzSXlrcHRFUXVHUXZTNDNEUDFoM04xcVlBN1E1VHpoS0IydEc1RWxvamtYTkF4d0VVVStxSnZMWDBxTHdzd09zRkhaL3lydz09IiwiUSI6Inc2R2ltem84a0lUL0xuS2U0Sk5QTUt2YTlVVzBSZUZlVzA5U1ZtVnFVWS9VeHl2eU9kemowd3JzTTZib1ZCU1JnZi9SbUZwRUZ1bUZTVW9yVWkxNVR3PT0iLCJEUCI6Im9yNXpPaXloMzZLeFozKzRhek54aFlDYmJES3JIRGc1VEZ1Ri9rRngvY0V4WWI4YUNFZDJ0ekVPWUxqandxOU1PR2dUYzN5enV3NEN6TWpEK01vc1J3PT0iLCJEUSI6InMvNGhhQVM2K0pVRlhDemxkT2JVTTRuTEdXUWFxempoNGMwbmlvb2d1ZzVGelVMbnlNa3RiRjFlV1YrMTNyWlY4bS8yM2VBZlNaMXRuckw1RE5EK0RRPT0iLCJJbnZlcnNlUSI6IlBPSkRGUk03MmVxd0R3TytldDFpTzIwTWlQcFVEUS93N1hEMHBMLzJWYTE4OEgrRGlaK0NuZDJRdnFYZyt4NFdNZSsrVlVNYXo2bWM3V1g4WnBaWW9RPT0iLCJEIjoiWE1QUEZPYktDcHFON21pNG4zb0tsSmFveTlwdFAwRG9FWXBydGc4NmoyS2RWMWZzQWhJM1JOZTNvRmRMcXhrY0VWWmxTTTNLUmhHeUxnRkY0WDk0cnVIYjBQeC9LZVQxMW1BeDNvQ2NCRVlWelhabXlIUHQzWCs2dlBMZzdmYUhtRmlxK3N0Y2NMTlBNSEdna2lkWTF6NGtiTXZwZnBlOWxhN0VMWUdKM21VPSJ9" ;
228+
229+ var rsaKey = EncryptProvider . CreateRsaKey ( ) ;
230+ var publicKey = rsaKey . PublicKey ;
231+
232+ //Assert
233+ Assert . Throws < OutofMaxlengthException > ( ( ) =>
234+ {
235+ EncryptProvider . RSAEncrypt ( publicKey , rawStr ) ;
236+ } ) ;
210237 }
211238 }
212239}
0 commit comments