/// <summary> /// Método para crear el atributo que contiene la información del certificado empleado para la firma /// </summary> /// <param name="parameters"></param> /// <returns></returns> private BcCms.Attribute MakeSigningCertificateAttribute(SignatureParameters parameters) { X509Certificate certificate = new X509CertificateParser().ReadCertificate(parameters.Certificate.GetRawCertData()); TbsCertificateStructure tbs = TbsCertificateStructure.GetInstance( Asn1Object.FromByteArray( certificate.GetTbsCertificate())); GeneralName gn = new GeneralName(tbs.Issuer); GeneralNames gns = new GeneralNames(gn); IssuerSerial issuerSerial = new IssuerSerial(gns, tbs.SerialNumber); byte[] certHash = DigestUtilities.CalculateDigest(parameters.DigestMethod.Name, certificate.GetEncoded()); var policies = GetPolicyInformation(certificate); if (parameters.DigestMethod == DigestMethod.SHA1) { SigningCertificate sc = null; if (policies != null) { Asn1EncodableVector v = new Asn1EncodableVector(); v.Add(new DerSequence(new EssCertID(certHash, issuerSerial))); v.Add(new DerSequence(policies)); sc = SigningCertificate.GetInstance(new DerSequence(v)); } else { sc = new SigningCertificate(new EssCertID(certHash, issuerSerial)); } return(new BcCms.Attribute(PkcsObjectIdentifiers.IdAASigningCertificate, new DerSet(sc))); } else { EssCertIDv2 essCert = new EssCertIDv2(new AlgorithmIdentifier(parameters.DigestMethod .Oid), certHash, issuerSerial); SigningCertificateV2 scv2 = new SigningCertificateV2(new EssCertIDv2[] { essCert }, policies); return(new BcCms.Attribute(PkcsObjectIdentifiers.IdAASigningCertificateV2, new DerSet (scv2))); } }
public static byte[] GetSubjectPublicKeyInfo(this System.Security.Cryptography.X509Certificates.X509Certificate certificate) { var cert = new X509CertificateParser().ReadCertificate(certificate.GetRawCertData()); var tbsCert = TbsCertificateStructure.GetInstance(Asn1Object.FromByteArray(cert.GetTbsCertificate())); var info = tbsCert.SubjectPublicKeyInfo.GetDerEncoded(); return(info); }