/// <summary> /// Reads the "X509DataElement" element conforming to https://www.w3.org/TR/2001/PR-xmldsig-core-20010820/#sec-X509Data. /// </summary> /// <param name="reader">A <see cref="XmlReader"/> positioned on a <see cref="XmlSignatureConstants.Elements.X509Data"/> element.</param> private X509Data ReadX509Data(XmlReader reader) { var data = new X509Data(); if (reader.IsEmptyElement) { throw XmlUtil.LogReadException(LogMessages.IDX30108); } reader.ReadStartElement(XmlSignatureConstants.Elements.X509Data, XmlSignatureConstants.Namespace); while (reader.IsStartElement()) { if (reader.IsStartElement(XmlSignatureConstants.Elements.X509Certificate, XmlSignatureConstants.Namespace)) { data.Certificates.Add(reader.ReadElementContentAsString()); } else if (reader.IsStartElement(XmlSignatureConstants.Elements.X509IssuerSerial, XmlSignatureConstants.Namespace)) { if (data.IssuerSerial != null) { throw XmlUtil.LogReadException(LogMessages.IDX30015, XmlSignatureConstants.Elements.X509IssuerSerial); } data.IssuerSerial = ReadIssuerSerial(reader); } else if (reader.IsStartElement(XmlSignatureConstants.Elements.X509SKI, XmlSignatureConstants.Namespace)) { if (data.SKI != null) { throw XmlUtil.LogReadException(LogMessages.IDX30015, XmlSignatureConstants.Elements.X509SKI); } data.SKI = reader.ReadElementContentAsString(); } else if (reader.IsStartElement(XmlSignatureConstants.Elements.X509SubjectName, XmlSignatureConstants.Namespace)) { if (data.SubjectName != null) { throw XmlUtil.LogReadException(LogMessages.IDX30015, XmlSignatureConstants.Elements.X509SubjectName); } data.SubjectName = reader.ReadElementContentAsString(); } else if (reader.IsStartElement(XmlSignatureConstants.Elements.X509CRL, XmlSignatureConstants.Namespace)) { if (data.CRL != null) { throw XmlUtil.LogReadException(LogMessages.IDX30015, XmlSignatureConstants.Elements.X509CRL); } data.CRL = reader.ReadElementContentAsString(); } else { // Skip the element since it is not one of <X509Certificate>, <X509IssuerSerial>, <X509SKI>, <X509SubjectName>, <X509CRL> LogHelper.LogWarning(LogMessages.IDX30300, reader.ReadOuterXml()); } } // </X509Data> reader.ReadEndElement(); return(data); }
/// <summary> /// Initializes an instance of <see cref="KeyInfo"/>. /// </summary> /// <param name="key">the <see cref="SecurityKey"/>to populate the <see cref="KeyInfo"/>.</param> public KeyInfo(SecurityKey key) { if (key is X509SecurityKey x509Key) { var data = new X509Data(); data.Certificates.Add(Convert.ToBase64String(x509Key.Certificate.RawData)); X509Data.Add(data); } else if (key is RsaSecurityKey rsaKey) { var rsaParameters = rsaKey.Parameters; // Obtain parameters from the RSA if the rsaKey does not contain a valid value for RSAParameters if (rsaKey.Parameters.Equals(default(RSAParameters))) { rsaParameters = rsaKey.Rsa.ExportParameters(false); } RSAKeyValue = new RSAKeyValue(Convert.ToBase64String(rsaParameters.Modulus), Convert.ToBase64String(rsaParameters.Exponent)); } }
/// <summary> /// Initializes an instance of <see cref="KeyInfo"/>. /// </summary> /// <param name="certificate">the <see cref="X509Certificate2"/>to populate the X509Data.</param> public KeyInfo(X509Certificate2 certificate) { var data = new X509Data(certificate); X509Data.Add(data); }