Files
PluginManager/PluginManagerGUI/PluginRoot.cs
T
2017-08-19 16:43:12 +02:00

84 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Runtime.Serialization;
using System.Security.Cryptography;
using Newtonsoft.Json;
namespace PluginManagerGUI
{
public abstract class Signable
{
[JsonProperty("signature", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Signature;
private string GetMessage()
{
var oldSignature = Signature;
try
{
Signature = "SIGNSIGNSIGN";
return Utils.Serialize(this);
}
finally
{
Signature = oldSignature;
}
}
public string Sign(RSAParameters privateKey)
{
return Utils.SignData(GetMessage(), privateKey);
}
public bool Verify(string signature, RSAParameters publicKey)
{
return Utils.VerifySignature(GetMessage(), signature, publicKey);
}
}
public class PluginRoot : Signable
{
[JsonProperty("plugins")]
public PluginRootMeta[] Plugins;
[JsonProperty("authors")]
public PluginAuthor[] Authors;
}
public class PluginRootMeta
{
[JsonProperty("name", Required = Required.Always)]
public string Name;
[JsonProperty("author", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Author;
[JsonProperty("container", Required = Required.Always)]
public string Container;
[JsonProperty("trust-signatures", DefaultValueHandling = DefaultValueHandling.Ignore)]
public Dictionary<string, string> TrustSignatures; //version -> signature
public override string ToString()
{
return Name;
}
}
public class PluginAuthor
{
[JsonProperty("name", Required = Required.Always)]
public string Name;
[JsonProperty("pubkey", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Pubkey;
[JsonProperty("trust-signature", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string TrustSignature;
}
}