initial commit
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Crypto.Generators;
|
||||
using Org.BouncyCastle.Crypto.Operators;
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using Org.BouncyCastle.Crypto.Prng;
|
||||
using Org.BouncyCastle.Math;
|
||||
using Org.BouncyCastle.Security;
|
||||
using Org.BouncyCastle.X509;
|
||||
using Org.BouncyCastle.X509.Extension;
|
||||
using System;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace Quasar.Server.Helper
|
||||
{
|
||||
public static class CertificateHelper
|
||||
{
|
||||
public static X509Certificate2 CreateCertificate(string certName, X509Certificate2 ca, int keyStrength)
|
||||
{
|
||||
var caCert = DotNetUtilities.FromX509Certificate(ca);
|
||||
var random = new SecureRandom(new CryptoApiRandomGenerator());
|
||||
var keyPairGen = new RsaKeyPairGenerator();
|
||||
keyPairGen.Init(new KeyGenerationParameters(random, keyStrength));
|
||||
AsymmetricCipherKeyPair keyPair = keyPairGen.GenerateKeyPair();
|
||||
|
||||
var certificateGenerator = new X509V3CertificateGenerator();
|
||||
|
||||
var CN = new X509Name("CN=" + certName);
|
||||
var SN = BigInteger.ProbablePrime(120, random);
|
||||
|
||||
certificateGenerator.SetSerialNumber(SN);
|
||||
certificateGenerator.SetSubjectDN(CN);
|
||||
certificateGenerator.SetIssuerDN(caCert.IssuerDN);
|
||||
certificateGenerator.SetNotAfter(DateTime.MaxValue);
|
||||
certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(1, 0, 0, 0)));
|
||||
certificateGenerator.SetPublicKey(keyPair.Public);
|
||||
certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keyPair.Public));
|
||||
certificateGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, new AuthorityKeyIdentifierStructure(caCert.GetPublicKey()));
|
||||
|
||||
var caKeyPair = DotNetUtilities.GetKeyPair(ca.PrivateKey);
|
||||
|
||||
ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", caKeyPair.Private, random);
|
||||
|
||||
var certificate = certificateGenerator.Generate(signatureFactory);
|
||||
|
||||
certificate.Verify(caCert.GetPublicKey());
|
||||
|
||||
var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate));
|
||||
certificate2.PrivateKey = DotNetUtilities.ToRSA(keyPair.Private as RsaPrivateCrtKeyParameters);
|
||||
|
||||
return certificate2;
|
||||
}
|
||||
|
||||
public static X509Certificate2 CreateCertificateAuthority(string caName, int keyStrength)
|
||||
{
|
||||
var random = new SecureRandom(new CryptoApiRandomGenerator());
|
||||
var keyPairGen = new RsaKeyPairGenerator();
|
||||
keyPairGen.Init(new KeyGenerationParameters(random, keyStrength));
|
||||
AsymmetricCipherKeyPair keypair = keyPairGen.GenerateKeyPair();
|
||||
|
||||
var certificateGenerator = new X509V3CertificateGenerator();
|
||||
|
||||
var CN = new X509Name("CN=" + caName);
|
||||
var SN = BigInteger.ProbablePrime(120, random);
|
||||
|
||||
certificateGenerator.SetSerialNumber(SN);
|
||||
certificateGenerator.SetSubjectDN(CN);
|
||||
certificateGenerator.SetIssuerDN(CN);
|
||||
certificateGenerator.SetNotAfter(DateTime.MaxValue);
|
||||
certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(2, 0, 0, 0)));
|
||||
certificateGenerator.SetPublicKey(keypair.Public);
|
||||
certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keypair.Public));
|
||||
certificateGenerator.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(true));
|
||||
|
||||
ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", keypair.Private, random);
|
||||
|
||||
var certificate = certificateGenerator.Generate(signatureFactory);
|
||||
|
||||
var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate));
|
||||
certificate2.PrivateKey = DotNetUtilities.ToRSA(keypair.Private as RsaPrivateCrtKeyParameters);
|
||||
|
||||
return certificate2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Quasar.Server.Helper
|
||||
{
|
||||
public static class ClipboardHelper
|
||||
{
|
||||
public static void SetClipboardTextSafe(string text)
|
||||
{
|
||||
try
|
||||
{
|
||||
Clipboard.SetText(text);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using Quasar.Server.Utilities;
|
||||
|
||||
namespace Quasar.Server.Helper
|
||||
{
|
||||
public static class NativeMethodsHelper
|
||||
{
|
||||
private const int LVM_FIRST = 0x1000;
|
||||
private const int LVM_SETITEMSTATE = LVM_FIRST + 43;
|
||||
|
||||
private const int WM_VSCROLL = 277;
|
||||
private static readonly IntPtr SB_PAGEBOTTOM = new IntPtr(7);
|
||||
|
||||
public static int MakeWin32Long(short wLow, short wHigh)
|
||||
{
|
||||
return (int)wLow << 16 | (int)(short)wHigh;
|
||||
}
|
||||
|
||||
public static void SetItemState(IntPtr handle, int itemIndex, int mask, int value)
|
||||
{
|
||||
NativeMethods.LVITEM lvItem = new NativeMethods.LVITEM
|
||||
{
|
||||
stateMask = mask,
|
||||
state = value
|
||||
};
|
||||
|
||||
NativeMethods.SendMessageListViewItem(handle, LVM_SETITEMSTATE, new IntPtr(itemIndex), ref lvItem);
|
||||
}
|
||||
|
||||
public static void ScrollToBottom(IntPtr handle)
|
||||
{
|
||||
NativeMethods.SendMessage(handle, WM_VSCROLL, SB_PAGEBOTTOM, IntPtr.Zero);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using Quasar.Server.Networking;
|
||||
|
||||
namespace Quasar.Server.Helper
|
||||
{
|
||||
public static class WindowHelper
|
||||
{
|
||||
public static string GetWindowTitle(string title, Client c)
|
||||
{
|
||||
return string.Format("{0} - {1}@{2} [{3}:{4}]", title, c.Value.Username, c.Value.PcName, c.EndPoint.Address.ToString(), c.EndPoint.Port.ToString());
|
||||
}
|
||||
|
||||
public static string GetWindowTitle(string title, int count)
|
||||
{
|
||||
return string.Format("{0} [Selected: {1}]", title, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user