aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Cryptography
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2017-08-19 16:06:14 -0400
committerGitHub <noreply@github.com>2017-08-19 16:06:14 -0400
commitff2f3108ee62fc8c943b1d83ec6312d6696990d8 (patch)
tree80f1823f901bdadad6af4fce8d36d9b73f79c0fb /Emby.Server.Implementations/Cryptography
parent6b077f3f8467caa26388a25e6acd1990d286b5d0 (diff)
parentc58db90c950c766321615eca236557d87b8d1b74 (diff)
Merge pull request #2832 from MediaBrowser/beta
Beta
Diffstat (limited to 'Emby.Server.Implementations/Cryptography')
-rw-r--r--Emby.Server.Implementations/Cryptography/CertificateGenerator.cs42
-rw-r--r--Emby.Server.Implementations/Cryptography/CryptographyProvider.cs40
2 files changed, 81 insertions, 1 deletions
diff --git a/Emby.Server.Implementations/Cryptography/CertificateGenerator.cs b/Emby.Server.Implementations/Cryptography/CertificateGenerator.cs
index 2600d7470..b4c84a600 100644
--- a/Emby.Server.Implementations/Cryptography/CertificateGenerator.cs
+++ b/Emby.Server.Implementations/Cryptography/CertificateGenerator.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections;
using System.Security.Cryptography;
+using System.Xml;
namespace Emby.Server.Core.Cryptography
{
@@ -27,7 +28,11 @@ namespace Emby.Server.Core.Cryptography
DateTime notAfter = DateTime.Now.AddYears(10);
RSA issuerKey = RSA.Create();
+#if NET46
issuerKey.FromXmlString(MonoTestRootAgency);
+#else
+ RSACryptoServiceProviderExtensions.FromXmlString(issuerKey, MonoTestRootAgency);
+#endif
RSA subjectKey = RSA.Create();
// serial number MUST be positive
@@ -44,7 +49,7 @@ namespace Emby.Server.Core.Cryptography
cb.NotAfter = notAfter;
cb.SubjectName = subject;
cb.SubjectPublicKey = subjectKey;
-
+
// signature
cb.Hash = "SHA256";
byte[] rawcert = cb.Sign(issuerKey);
@@ -66,4 +71,39 @@ namespace Emby.Server.Core.Cryptography
p12.SaveToFile(fileName);
}
}
+
+ public static class RSACryptoServiceProviderExtensions
+ {
+ public static void FromXmlString(RSA rsa, string xmlString)
+ {
+ RSAParameters parameters = new RSAParameters();
+
+ XmlDocument xmlDoc = new XmlDocument();
+ xmlDoc.LoadXml(xmlString);
+
+ if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue"))
+ {
+ foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
+ {
+ switch (node.Name)
+ {
+ case "Modulus": parameters.Modulus = Convert.FromBase64String(node.InnerText); break;
+ case "Exponent": parameters.Exponent = Convert.FromBase64String(node.InnerText); break;
+ case "P": parameters.P = Convert.FromBase64String(node.InnerText); break;
+ case "Q": parameters.Q = Convert.FromBase64String(node.InnerText); break;
+ case "DP": parameters.DP = Convert.FromBase64String(node.InnerText); break;
+ case "DQ": parameters.DQ = Convert.FromBase64String(node.InnerText); break;
+ case "InverseQ": parameters.InverseQ = Convert.FromBase64String(node.InnerText); break;
+ case "D": parameters.D = Convert.FromBase64String(node.InnerText); break;
+ }
+ }
+ }
+ else
+ {
+ throw new Exception("Invalid XML RSA key.");
+ }
+
+ rsa.ImportParameters(parameters);
+ }
+ }
}
diff --git a/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs b/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs
new file mode 100644
index 000000000..6402da0c9
--- /dev/null
+++ b/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs
@@ -0,0 +1,40 @@
+using System;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+using MediaBrowser.Model.Cryptography;
+
+namespace Emby.Server.Implementations.Cryptography
+{
+ public class CryptographyProvider : ICryptoProvider
+ {
+ public Guid GetMD5(string str)
+ {
+ return new Guid(ComputeMD5(Encoding.Unicode.GetBytes(str)));
+ }
+
+ public byte[] ComputeSHA1(byte[] bytes)
+ {
+ using (var provider = SHA1.Create())
+ {
+ return provider.ComputeHash(bytes);
+ }
+ }
+
+ public byte[] ComputeMD5(Stream str)
+ {
+ using (var provider = MD5.Create())
+ {
+ return provider.ComputeHash(str);
+ }
+ }
+
+ public byte[] ComputeMD5(byte[] bytes)
+ {
+ using (var provider = MD5.Create())
+ {
+ return provider.ComputeHash(bytes);
+ }
+ }
+ }
+}