|
4 | 4 | using Xunit;
|
5 | 5 | using NETCore.Encrypt;
|
6 | 6 | using System.Security.Cryptography;
|
| 7 | +using NETCore.Encrypt.Extensions; |
7 | 8 |
|
8 | 9 | namespace NETCore.Encrypt.Tests
|
9 | 10 | {
|
@@ -154,5 +155,85 @@ public void Rsa_From_JsonString_Test()
|
154 | 155 | Assert.NotNull(rsa);
|
155 | 156 |
|
156 | 157 | }
|
| 158 | + |
| 159 | + [Theory(DisplayName = "Rsa encrypt string length limit test")] |
| 160 | + [InlineData(RsaSize.R2048)] |
| 161 | + [InlineData(RsaSize.R3072)] |
| 162 | + [InlineData(RsaSize.R4096)] |
| 163 | + public void Rsa_Encrypt_LengthLimit_Test(RsaSize size) |
| 164 | + { |
| 165 | + var rsaKey = EncryptProvider.CreateRsaKey(size); |
| 166 | + |
| 167 | + var publicKey = rsaKey.PublicKey; |
| 168 | + var privateKey = rsaKey.PrivateKey; |
| 169 | + |
| 170 | + //Act |
| 171 | + var rawStr = "eyJNb2R1bHVzIjoidHVSL1V1dFVSV0RSVElDYTFFRDcraUF2MUVnQUl0dC9oNkhHc0x6SG80QXAyVVdqWGtvRkp4T1NuRmdhY3d4cWM0WUg5UDdRaVIxQ1lCK3lvMnJUbkhZbVIrYWs2V3RJRU1YNWtmTTJrWHBNUVY2aFBrd0FxRTFpU1pWRUM2eXlmeTNGZUJTVmNnVlUwMFpJMGozbzhqT3ZMOXhneGhmT1J1eTcwM1RUbXdFPSIsIkV4cG9uZW50IjoiQVFBQiIsIlAiOiI3MVNIYVRnK2JvOXhzRnEzSXlrcHRFUXVHUXZTNDNEUDFoM04xcVlBN1E1VHpoS0IydEc1RWxvamtYTkF4d0VVVStxSnZMWDBxTHdzd09zRkhaL3lydz09IiwiUSI6Inc2R2ltem84a0lUL0xuS2U0Sk5QTUt2YTlVVzBSZUZlVzA5U1ZtVnFVWS9VeHl2eU9kemowd3JzTTZib1ZCU1JnZi9SbUZwRUZ1bUZTVW9yVWkxNVR3PT0iLCJEUCI6Im9yNXpPaXloMzZLeFozKzRhek54aFlDYmJES3JIRGc1VEZ1Ri9rRngvY0V4WWI4YUNFZDJ0ekVPWUxqandxOU1PR2dUYzN5enV3NEN6TWpEK01vc1J3PT0iLCJEUSI6InMvNGhhQVM2K0pVRlhDemxkT2JVTTRuTEdXUWFxempoNGMwbmlvb2d1ZzVGelVMbnlNa3RiRjFlV1YrMTNyWlY4bS8yM2VBZlNaMXRuckw1RE5EK0RRPT0iLCJJbnZlcnNlUSI6IlBPSkRGUk03MmVxd0R3TytldDFpTzIwTWlQcFVEUS93N1hEMHBMLzJWYTE4OEgrRGlaK0NuZDJRdnFYZyt4NFdNZSsrVlVNYXo2bWM3V1g4WnBaWW9RPT0iLCJEIjoiWE1QUEZPYktDcHFON21pNG4zb0tsSmFveTlwdFAwRG9FWXBydGc4NmoyS2RWMWZzQWhJM1JOZTNvRmRMcXhrY0VWWmxTTTNLUmhHeUxnRkY0WDk0cnVIYjBQeC9LZVQxMW1BeDNvQ2NCRVlWelhabXlIUHQzWCs2dlBMZzdmYUhtRmlxK3N0Y2NMTlBNSEdna2lkWTF6NGtiTXZwZnBlOWxhN0VMWUdKM21VPSJ9"; |
| 172 | + |
| 173 | + //RSAEncryptionPaddingMode is Pkcs1 |
| 174 | + var padding = RSAEncryptionPadding.Pkcs1; |
| 175 | + var maxLength = ((int) size - 384) / 8 + 37; |
| 176 | + var rawData = rawStr.Substring(0, maxLength); |
| 177 | + |
| 178 | + var encryptedStr = EncryptProvider.RSAEncrypt(publicKey, rawData, padding); |
| 179 | + var decryptedStr = EncryptProvider.RSADecrypt(privateKey, encryptedStr, padding); |
| 180 | + |
| 181 | + //RSAEncryptionPaddingMode is Oaep |
| 182 | + padding = RSAEncryptionPadding.OaepSHA1; |
| 183 | + |
| 184 | + var sha1 = "oaep".SHA1(); |
| 185 | + var length = sha1.Length; |
| 186 | + maxLength = (int) size / 8 - 42; //214 //40 |
| 187 | + rawData = rawStr.Substring(0, maxLength); |
| 188 | + |
| 189 | + encryptedStr = EncryptProvider.RSAEncrypt(publicKey, rawData, padding); |
| 190 | + decryptedStr = EncryptProvider.RSADecrypt(privateKey, encryptedStr, padding); |
| 191 | + Assert.Equal(decryptedStr, rawData); |
| 192 | + |
| 193 | + |
| 194 | + padding = RSAEncryptionPadding.OaepSHA256; |
| 195 | + |
| 196 | + maxLength = (int) size / 8 - 66; //190 //64 |
| 197 | + rawData = rawStr.Substring(0, maxLength); |
| 198 | + |
| 199 | + encryptedStr = EncryptProvider.RSAEncrypt(publicKey, rawData, padding); |
| 200 | + decryptedStr = EncryptProvider.RSADecrypt(privateKey, encryptedStr, padding); |
| 201 | + |
| 202 | + Assert.Equal(decryptedStr, rawData); |
| 203 | + |
| 204 | + padding = RSAEncryptionPadding.OaepSHA384; |
| 205 | + maxLength = (int) size / 8 - 98; //158 //96 |
| 206 | + rawData = rawStr.Substring(0, maxLength); |
| 207 | + |
| 208 | + encryptedStr = EncryptProvider.RSAEncrypt(publicKey, rawData, padding); |
| 209 | + decryptedStr = EncryptProvider.RSADecrypt(privateKey, encryptedStr, padding); |
| 210 | + |
| 211 | + Assert.Equal(decryptedStr, rawData); |
| 212 | + |
| 213 | + padding = RSAEncryptionPadding.OaepSHA512; |
| 214 | + maxLength = (int) size / 8 - 130; //126 // 128 |
| 215 | + rawData = rawStr.Substring(0, maxLength); |
| 216 | + |
| 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 | + }); |
| 237 | + } |
157 | 238 | }
|
158 | 239 | }
|
0 commit comments