public SigPolicyQualifierInfo[] GetSigPolicyQualifiers() { if (sigPolicyQualifiers == null) { return(null); } SigPolicyQualifierInfo[] array = new SigPolicyQualifierInfo[sigPolicyQualifiers.Count]; for (int i = 0; i < sigPolicyQualifiers.Count; i++) { array[i] = SigPolicyQualifierInfo.GetInstance(sigPolicyQualifiers[i]); } return(array); }
public virtual void ToSignaturePolicyIdentifierTest() { SignaturePolicyIdentifier actual = new SignaturePolicyInfo(POLICY_IDENTIFIER, POLICY_HASH, POLICY_DIGEST_ALGORITHM , POLICY_URI).ToSignaturePolicyIdentifier(); DerIA5String deria5String = new DerIA5String(POLICY_URI); SigPolicyQualifierInfo sigPolicyQualifierInfo = new SigPolicyQualifierInfo(Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.IdSpqEtsUri , deria5String); DerOctetString derOctetString = new DerOctetString(POLICY_HASH); String algId = DigestAlgorithms.GetAllowedDigest(POLICY_DIGEST_ALGORITHM); DerObjectIdentifier asn1ObjectIdentifier = new DerObjectIdentifier(algId); AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(asn1ObjectIdentifier); OtherHashAlgAndValue otherHashAlgAndValue = new OtherHashAlgAndValue(algorithmIdentifier, derOctetString); DerObjectIdentifier derObjectIdentifier = new DerObjectIdentifier(POLICY_IDENTIFIER); DerObjectIdentifier derObjectIdentifierInstance = DerObjectIdentifier.GetInstance(derObjectIdentifier); SignaturePolicyId signaturePolicyId = new SignaturePolicyId(derObjectIdentifierInstance, otherHashAlgAndValue , SignUtils.CreateSigPolicyQualifiers(sigPolicyQualifierInfo)); SignaturePolicyIdentifier expected = new SignaturePolicyIdentifier(signaturePolicyId); NUnit.Framework.Assert.AreEqual(expected.ToAsn1Object(), actual.ToAsn1Object()); }
internal virtual SignaturePolicyIdentifier ToSignaturePolicyIdentifier() { String algId = DigestAlgorithms.GetAllowedDigest(this.policyDigestAlgorithm); if (algId == null || algId.Length == 0) { throw new ArgumentException("Invalid policy hash algorithm"); } SignaturePolicyIdentifier signaturePolicyIdentifier = null; SigPolicyQualifierInfo spqi = null; if (this.policyUri != null && this.policyUri.Length > 0) { spqi = new SigPolicyQualifierInfo(Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.IdSpqEtsUri, new DerIA5String (this.policyUri)); } signaturePolicyIdentifier = new SignaturePolicyIdentifier(new SignaturePolicyId(DerObjectIdentifier.GetInstance (new DerObjectIdentifier(this.policyIdentifier.Replace("urn:oid:", ""))), new OtherHashAlgAndValue(new AlgorithmIdentifier(new DerObjectIdentifier(algId)), new DerOctetString(this.policyHash)), SignUtils.CreateSigPolicyQualifiers (spqi))); return(signaturePolicyIdentifier); }
protected internal SignaturePolicyIdentifier ToSignaturePolicyIdentifier() { string algId = DigestAlgorithms.GetAllowedDigests(this.PolicyDigestAlgorithm); if (string.IsNullOrEmpty(algId)) { throw new ArgumentException("Invalid policy hash algorithm"); } SignaturePolicyIdentifier signaturePolicyIdentifier = null; SigPolicyQualifierInfo spqi = null; if (!string.IsNullOrEmpty(this.PolicyUri)) { spqi = new SigPolicyQualifierInfo(PkcsObjectIdentifiers.IdSpqEtsUri, new DerIA5String(this.PolicyUri)); } signaturePolicyIdentifier = new SignaturePolicyIdentifier(new SignaturePolicyId( DerObjectIdentifier.GetInstance(new DerObjectIdentifier(this.PolicyIdentifier.Replace("urn:oid:", ""))), new OtherHashAlgAndValue(new AlgorithmIdentifier(algId), new DerOctetString(this.PolicyHash)), spqi)); return(signaturePolicyIdentifier); }
public SigPolicyQualifierInfo[] GetSigPolicyQualifiers() { if (sigPolicyQualifiers == null) return null; SigPolicyQualifierInfo[] infos = new SigPolicyQualifierInfo[sigPolicyQualifiers.Count]; for (int i = 0; i < sigPolicyQualifiers.Count; ++i) { infos[i] = SigPolicyQualifierInfo.GetInstance(sigPolicyQualifiers[i]); } return infos; }
static void Main(string[] args) { byte[] entradaArray = File.ReadAllBytes(@"certificado/arquivoTeste.txt"); AsymmetricKeyParameter chavePrivada; X509Certificate certificadoX509 = getCertificadoX509(@"certificado/certificado.p12", "123!@#", out chavePrivada); SHA512Managed hashSHA512 = new SHA512Managed(); SHA256Managed hashSHA256 = new SHA256Managed(); byte[] certificadoX509Hash = hashSHA256.ComputeHash(certificadoX509.GetEncoded()); byte[] EntradaHash = hashSHA512.ComputeHash(entradaArray); CmsSignedDataGenerator geradorCms = new CmsSignedDataGenerator(); // //atributos // Asn1EncodableVector atributosAssinados = new Asn1EncodableVector(); //1.2.840.113549.1.9.3 -> ContentType //1.2.840.113549.1.7.1 -> RSA Security Data Inc atributosAssinados.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(CmsAttributes.ContentType, new DerSet(new DerObjectIdentifier("1.2.840.113549.1.7.1")))); //1.2.840.113549.1.9.5 -> Signing Time atributosAssinados.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(CmsAttributes.SigningTime, new DerSet(new DerUtcTime(DateTime.Now)))); //1.2.840.113549.1.9.4 -> messageDigest atributosAssinados.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(CmsAttributes.MessageDigest, new DerSet(new DerOctetString(EntradaHash)))); //2.16.840.1.101.3.4.2.3 -> SHA-512 //2.16.840.1.101.3.4.2.1 -> SHA-256 //1.2.840.113549.1.9.16.5.1 -> sigPolicyQualifier-spuri DerObjectIdentifier identificadorPolicyID = new DerObjectIdentifier("1.2.840.113549.1.9.16.2.15"); byte[] policyHASH = System.Text.Encoding.ASCII.GetBytes("0F6FA2C6281981716C95C79899039844523B1C61C2C962289CDAC7811FEEE29E"); List <SigPolicyQualifierInfo> sigPolicyQualifierInfos = new List <SigPolicyQualifierInfo>(); Org.BouncyCastle.Asn1.X509.AlgorithmIdentifier algoritmoIdentificador = new Org.BouncyCastle.Asn1.X509.AlgorithmIdentifier("2.16.840.1.101.3.4.2.3"); SigPolicyQualifierInfo bcSigPolicyQualifierInfo = new SigPolicyQualifierInfo(new DerObjectIdentifier("1.2.840.113549.1.9.16.5.1"), new DerIA5String("http://politicas.icpbrasil.gov.br/PA_AD_RB_v2_2.der")); sigPolicyQualifierInfos.Add(bcSigPolicyQualifierInfo); SignaturePolicyId signaturePolicyId = new SignaturePolicyId(DerObjectIdentifier.GetInstance(new DerObjectIdentifier("2.16.76.1.7.1.6.2.2")), new OtherHashAlgAndValue(algoritmoIdentificador, new DerOctetString(policyHASH)), sigPolicyQualifierInfos); atributosAssinados.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(identificadorPolicyID, new DerSet(signaturePolicyId))); //1.2.840.113549.1.9.16.2.47 -> id-aa-signingCertificateV2 Org.BouncyCastle.Asn1.Ess.EssCertIDv2 essCertIDv2; essCertIDv2 = new Org.BouncyCastle.Asn1.Ess.EssCertIDv2(certificadoX509Hash); atributosAssinados.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(new DerObjectIdentifier("1.2.840.113549.1.9.16.2.47"), new DerSet(essCertIDv2))); AttributeTable atributosAssinadosTabela = new AttributeTable(atributosAssinados); //geradorCms.AddSigner(chavePrivada, certificadoX509, CmsSignedDataGenerator.DigestSha256, new DefaultSignedAttributeTableGenerator(atributosAssinadosTabela), null); geradorCms.AddSigner(chavePrivada, certificadoX509, CmsSignedDataGenerator.DigestSha512, new DefaultSignedAttributeTableGenerator(atributosAssinadosTabela), null); List <X509Certificate> certificadoX509Lista = new List <X509Certificate>(); certificadoX509Lista.Add(certificadoX509); //storeCerts.AddRange(chain); X509CollectionStoreParameters parametrosArmazem = new X509CollectionStoreParameters(certificadoX509Lista); IX509Store armazemCertificado = X509StoreFactory.Create("CERTIFICATE/COLLECTION", parametrosArmazem); geradorCms.AddCertificates(armazemCertificado); var dadosAssinado = geradorCms.Generate(new CmsProcessableByteArray(entradaArray), true); // encapsulate = false for detached signature Console.WriteLine("Codificado => " + Convert.ToBase64String(dadosAssinado.GetEncoded())); }