Exemple #1
0
        /// <summary>
        /// export to proprietary xml format
        /// </summary>
        /// <returns>public key and private key in proprietary xml form, plus with some attributes redundantly expressed in the XML</returns>
        public string ToXml()
        {
            var toser = new CertificateAuthorityForEphemeralCertsXml
            {
                SerialNumber = PublicKey.SerialNumber,
                SubjectName  = PublicKey.SubjectName.Name,
                Expires      = PublicKey.GetExpirationDateString(),
                Thumbprint   = PublicKey.Thumbprint,

                PrivateKeyParameters = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)PrivateKeyBouncy),
                PublicKeyData        = PublicKey.Export(X509ContentType.Cert)
            };

            var sb = new StringBuilder();

            using (var sw = new StringWriter(sb))
            {
                var xser = new XmlSerializer(typeof(CertificateAuthorityForEphemeralCertsXml));
                xser.Serialize(sw, toser);
                return(sb.ToString());
            }
        }
Exemple #2
0
        /// <summary>
        /// build from xml serial struct
        /// </summary>
        /// <param name="xel"></param>
        private CertificateAuthority(CertificateAuthorityForEphemeralCertsXml xel)
        {
            SubjectName      = xel.SubjectName;
            PrivateKeyBouncy = DotNetUtilities.GetRsaKeyPair(xel.PrivateKeyParameters).Private;
            var cert = new X509Certificate2(xel.PublicKeyData);

            PublicKey = cert;
            KeySize   = cert.PublicKey.Key.KeySize;

            if (SubjectName != cert.SubjectName.Name)
            {
                throw new InvalidOperationException($"xml CA invalid: expecting subject {cert.SubjectName.Name}");
            }
            if (xel.Thumbprint != cert.Thumbprint)
            {
                throw new InvalidOperationException($"xml CA invalid: expecting Thumbprint {cert.Thumbprint}");
            }
            if (xel.SerialNumber != cert.SerialNumber)
            {
                throw new InvalidOperationException($"xml CA invalid: expecting Serial {cert.SerialNumber}");
            }
        }