Skip to content

Commit ff9b8ad

Browse files
author
timotei
committed
Add more tests
1 parent 368c9e6 commit ff9b8ad

File tree

2 files changed

+64
-18
lines changed

2 files changed

+64
-18
lines changed

RestSharp.Tests/Extensions/RSACryptoServiceProviderExtensionsTests.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Security.Cryptography;
1+
using System;
2+
using System.Security.Cryptography;
23
using NUnit.Framework;
34
using RestSharp.Extensions;
45

@@ -32,5 +33,33 @@ public void FromXmlStringImpl_GivenPrivateKeyXml_GivesSameResultAsDotNetImplemen
3233
Assert.AreEqual(dotnetBasedParameters.Q, customBasedParameters.Q);
3334
}
3435
}
36+
37+
[Test]
38+
public void FromXmlStringImpl_GivenInvalidPrivateKeyXml_ThrowsInvalidOperationException()
39+
{
40+
const string samplePrivateKeyXml =
41+
"<something></something>";
42+
43+
using (var provider = new RSACryptoServiceProvider())
44+
{
45+
var exception = Assert.Throws<InvalidOperationException>(() =>
46+
RSACryptoServiceProviderExtensions.FromXmlStringImpl(provider, samplePrivateKeyXml));
47+
Assert.AreEqual("Invalid XML RSA key.", exception.Message);
48+
}
49+
}
50+
51+
[Test]
52+
public void FromXmlStringImpl_GivenPrivateKeyXmlWithUnknownNode_ThrowsInvalidOperationException()
53+
{
54+
const string samplePrivateKeyXml =
55+
"<RSAKeyValue><pi>unexpected</pi></RSAKeyValue>";
56+
57+
using (var provider = new RSACryptoServiceProvider())
58+
{
59+
var exception = Assert.Throws<InvalidOperationException>(() =>
60+
RSACryptoServiceProviderExtensions.FromXmlStringImpl(provider, samplePrivateKeyXml));
61+
Assert.AreEqual("Unknown node name: pi", exception.Message);
62+
}
63+
}
3564
}
3665
}

RestSharp/Extensions/RSACryptoServiceProviderExtensions.cs

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,43 @@ internal static void FromXmlStringImpl(RSACryptoServiceProvider rsa, string xmlS
2929
var xmlDoc = new XmlDocument();
3030
xmlDoc.LoadXml(xmlString);
3131

32-
if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue"))
32+
if (!xmlDoc.DocumentElement.Name.Equals("RSAKeyValue"))
3333
{
34-
foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
35-
{
36-
switch (node.Name)
37-
{
38-
case "Modulus": parameters.Modulus = Convert.FromBase64String(node.InnerText); break;
39-
case "Exponent": parameters.Exponent = Convert.FromBase64String(node.InnerText); break;
40-
case "P": parameters.P = Convert.FromBase64String(node.InnerText); break;
41-
case "Q": parameters.Q = Convert.FromBase64String(node.InnerText); break;
42-
case "DP": parameters.DP = Convert.FromBase64String(node.InnerText); break;
43-
case "DQ": parameters.DQ = Convert.FromBase64String(node.InnerText); break;
44-
case "InverseQ": parameters.InverseQ = Convert.FromBase64String(node.InnerText); break;
45-
case "D": parameters.D = Convert.FromBase64String(node.InnerText); break;
46-
}
47-
}
34+
throw new InvalidOperationException("Invalid XML RSA key.");
4835
}
49-
else
36+
37+
38+
foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
5039
{
51-
throw new InvalidOperationException("Invalid XML RSA key.");
40+
switch (node.Name)
41+
{
42+
case "Modulus":
43+
parameters.Modulus = Convert.FromBase64String(node.InnerText);
44+
break;
45+
case "Exponent":
46+
parameters.Exponent = Convert.FromBase64String(node.InnerText);
47+
break;
48+
case "P":
49+
parameters.P = Convert.FromBase64String(node.InnerText);
50+
break;
51+
case "Q":
52+
parameters.Q = Convert.FromBase64String(node.InnerText);
53+
break;
54+
case "DP":
55+
parameters.DP = Convert.FromBase64String(node.InnerText);
56+
break;
57+
case "DQ":
58+
parameters.DQ = Convert.FromBase64String(node.InnerText);
59+
break;
60+
case "InverseQ":
61+
parameters.InverseQ = Convert.FromBase64String(node.InnerText);
62+
break;
63+
case "D":
64+
parameters.D = Convert.FromBase64String(node.InnerText);
65+
break;
66+
default:
67+
throw new InvalidOperationException("Unknown node name: " + node.Name);
68+
}
5269
}
5370

5471
rsa.ImportParameters(parameters);

0 commit comments

Comments
 (0)