using GostCryptography.Base;
using System.Security.Cryptography.Xml;
using System.Xml;
namespace GostCryptography.Xml
{
///
/// Параметры открытого ключа цифровой подписи ГОСТ Р 34.10 элемента
///
public abstract class GostKeyValue : KeyInfoClause
{
///
/// URI пространства имен для XML-подписи ГОСТ Р 34.10
///
public const string XmlDsigNamespaceUrl = "urn:ietf:params:xml:ns:cpxmlsec";
///
/// Создает экземпляр класса с заданным публичным ключом
///
protected GostKeyValue(GostAsymmetricAlgorithm publicKey)
{
PublicKey = publicKey;
}
///
/// Открытый ключ
///
public GostAsymmetricAlgorithm PublicKey { get; set; }
///
public override void LoadXml(XmlElement element)
{
if (element == null)
{
throw ExceptionUtility.ArgumentNull(nameof(element));
}
PublicKey.FromXmlString(element.OuterXml);
}
///
public override XmlElement GetXml()
{
var document = new XmlDocument { PreserveWhitespace = true };
var element = document.CreateElement("KeyValue", SignedXml.XmlDsigNamespaceUrl);
element.InnerXml = PublicKey.ToXmlString(false);
return element;
}
}
}