internal SignerInfoGeneratorImpl( CmsSignedDataStreamGenerator outer, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr) { this.outer = outer; _signerIdentifier = signerIdentifier; _digestOID = digestOID; _encOID = encOID; _sAttr = sAttr; _unsAttr = unsAttr; _encName = Helper.GetEncryptionAlgName(_encOID); string digestName = Helper.GetDigestAlgName(_digestOID); string signatureName = digestName + "with" + _encName; if (_sAttr != null) { _sig = Helper.GetSignatureInstance(signatureName); } else { // Note: Need to use raw signatures here since we have already calculated the digest if (_encName.Equals("RSA")) { _sig = Helper.GetSignatureInstance("RSA"); } else if (_encName.Equals("DSA")) { _sig = Helper.GetSignatureInstance("NONEwithDSA"); } // TODO Add support for raw PSS // else if (_encName.equals("RSAandMGF1")) // { // _sig = CMSSignedHelper.INSTANCE.getSignatureInstance("NONEWITHRSAPSS", _sigProvider); // try // { // // Init the params this way to avoid having a 'raw' version of each PSS algorithm // Signature sig2 = CMSSignedHelper.INSTANCE.getSignatureInstance(signatureName, _sigProvider); // PSSParameterSpec spec = (PSSParameterSpec)sig2.getParameters().getParameterSpec(PSSParameterSpec.class); // _sig.setParameter(spec); // } // catch (Exception e) // { // throw new SignatureException("algorithm: " + _encName + " could not be configured."); // } // } else { throw new SignatureException("algorithm: " + _encName + " not supported in base signatures."); } } _sig.Init(true, new ParametersWithRandom(key, outer.rand)); }
public override bool IsSameAs(SignerIdentifier other) { var otherCustomIdentifier = other as CustomIdentifier; return(otherCustomIdentifier != null && IsEqual(Value, otherCustomIdentifier.Value)); }
internal SignerInfoGeneratorImpl(CmsSignedDataStreamGenerator outer, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr) { this.outer = outer; _signerIdentifier = signerIdentifier; _digestOID = digestOID; _encOID = encOID; _sAttr = sAttr; _unsAttr = unsAttr; _encName = Helper.GetEncryptionAlgName(_encOID); string digestAlgName = Helper.GetDigestAlgName(_digestOID); string algorithm = digestAlgName + "with" + _encName; if (_sAttr != null) { _sig = Helper.GetSignatureInstance(algorithm); } else if (_encName.Equals("RSA")) { _sig = Helper.GetSignatureInstance("RSA"); } else { if (!_encName.Equals("DSA")) { throw new SignatureException("algorithm: " + _encName + " not supported in base signatures."); } _sig = Helper.GetSignatureInstance("NONEwithDSA"); } _sig.Init(forSigning: true, new ParametersWithRandom(key, outer.rand)); }
private void DoAddSigner(AsymmetricKeyParameter privateKey, SignerIdentifier signerIdentifier, string encryptionOid, string digestOid, CmsAttributeTableGenerator signedAttrGenerator, CmsAttributeTableGenerator unsignedAttrGenerator) { ConfigureDigest(digestOid); SignerInfoGeneratorImpl signerInf = new SignerInfoGeneratorImpl(this, privateKey, signerIdentifier, digestOid, encryptionOid, signedAttrGenerator, unsignedAttrGenerator); _signerInfs.Add(new DigestAndSignerInfoGeneratorHolder(signerInf, digestOid)); }
internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureFactory <AlgorithmIdentifier> signerFactory, IDigestFactoryProvider <AlgorithmIdentifier> digesterProvider, ISignatureEncryptionAlgorithmFinder sigEncAlgFinder, bool isDirectSignature) { this.sigId = sigId; this.signer = signerFactory; this.signerCalculator = signerFactory.CreateCalculator(); if (digesterProvider != null) { this.digester = digesterProvider.CreateDigestFactory(digAlgFinder.Find(signer.AlgorithmDetails)); this.digestCalculator = digester.CreateCalculator(); } else { this.digester = null; } this.sigEncAlgFinder = sigEncAlgFinder; this.isDirectSignature = isDirectSignature; if (this.isDirectSignature) { this.signedGen = null; this.unsignedGen = null; } else { this.signedGen = new DefaultSignedAttributeTableGenerator(); this.unsignedGen = null; } }
internal SignerInformation(Org.BouncyCastle.Asn1.Cms.SignerInfo info, DerObjectIdentifier contentType, CmsProcessable content, IDigestCalculator digestCalculator) { this.info = info; this.sid = new SignerID(); this.contentType = contentType; this.isCounterSignature = (contentType == null); try { SignerIdentifier signerID = info.SignerID; if (signerID.IsTagged) { Asn1OctetString instance = Asn1OctetString.GetInstance(signerID.ID); this.sid.SubjectKeyIdentifier = instance.GetEncoded(); } else { Org.BouncyCastle.Asn1.Cms.IssuerAndSerialNumber instance2 = Org.BouncyCastle.Asn1.Cms.IssuerAndSerialNumber.GetInstance(signerID.ID); this.sid.Issuer = instance2.Name; this.sid.SerialNumber = instance2.SerialNumber.Value; } } catch (IOException) { throw new ArgumentException("invalid sid in SignerInfo"); } this.digestAlgorithm = info.DigestAlgorithm; this.signedAttributeSet = info.AuthenticatedAttributes; this.unsignedAttributeSet = info.UnauthenticatedAttributes; this.encryptionAlgorithm = info.DigestEncryptionAlgorithm; this.signature = info.EncryptedDigest.GetOctets(); this.content = content; this.digestCalculator = digestCalculator; }
public SignerInfo(Asn1Sequence seq) { IEnumerator enumerator = seq.GetEnumerator(); enumerator.MoveNext(); version = (DerInteger)enumerator.Current; enumerator.MoveNext(); sid = SignerIdentifier.GetInstance(enumerator.Current); enumerator.MoveNext(); digAlgorithm = AlgorithmIdentifier.GetInstance(enumerator.Current); enumerator.MoveNext(); object current = enumerator.Current; if (current is Asn1TaggedObject) { authenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject)current, explicitly: false); enumerator.MoveNext(); digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(enumerator.Current); } else { authenticatedAttributes = null; digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(current); } enumerator.MoveNext(); encryptedDigest = Asn1OctetString.GetInstance(enumerator.Current); if (enumerator.MoveNext()) { unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject)enumerator.Current, explicitly: false); } else { unauthenticatedAttributes = null; } }
public TestHelper Sign_job(SignerIdentifier signerIdentifier) { Assert_state(_jobResponse); var identifierValue = signerIdentifier.IsPersonalIdentificationNumber() ? ((PersonalIdentificationNumber)signerIdentifier).Value : ((CustomIdentifier)signerIdentifier).Value; var statusUrl = _directClient.AutoSign(_jobResponse.JobId, identifierValue).Result; try { var queryParams = new Uri(statusUrl).Query; var queryDictionary = HttpUtility.ParseQueryString(queryParams); var statusQueryToken = queryDictionary.Get(0); var jobStatus = _jobResponse.StatusUrl; if (jobStatus != null && jobStatus.HasValue()) { _statusReference = MorphStatusReferenceIfMayBe(jobStatus.Status(statusQueryToken)); } return(this); } catch (Exception) { throw new InvalidOperationException("Unable to auto-sign. This is probably a result of the backend not supporting the kind of job you are trying to sign."); } }
internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureCalculator contentSigner, CmsAttributeTableGenerator signedGen, CmsAttributeTableGenerator unsignedGen) { this.sigId = sigId; this.contentSigner = contentSigner; this.signedGen = signedGen; this.unsignedGen = unsignedGen; this.isDirectSignature = false; }
public SignerInfoGenerator Build(ISignatureFactory contentSigner, X509Certificate certificate) { SignerIdentifier sigId = new SignerIdentifier(new IssuerAndSerialNumber(certificate.IssuerDN, new DerInteger(certificate.SerialNumber))); SignerInfoGenerator signerInfoGenerator = CreateGenerator(contentSigner, sigId); signerInfoGenerator.setAssociatedCertificate(certificate); return(signerInfoGenerator); }
public TestHelper Get_XAdES(SignerIdentifier signer) { Assert_state(_status); var xades = _directClient.GetXades(_status.GetSignatureFor(signer).XadesReference).Result; Assert.True(xades.CanRead); return(this); }
public SignerInfo(SignerIdentifier sid, AlgorithmIdentifier digAlgorithm, Attributes authenticatedAttributes, AlgorithmIdentifier digEncryptionAlgorithm, Asn1OctetString encryptedDigest, Attributes unauthenticatedAttributes) { version = new DerInteger((!sid.IsTagged) ? 1 : 3); this.sid = sid; this.digAlgorithm = digAlgorithm; this.authenticatedAttributes = Asn1Set.GetInstance(authenticatedAttributes); this.digEncryptionAlgorithm = digEncryptionAlgorithm; this.encryptedDigest = encryptedDigest; this.unauthenticatedAttributes = Asn1Set.GetInstance(unauthenticatedAttributes); }
public override bool IsSameAs(SignerIdentifier other) { if (other is PersonalIdentificationNumber) { var otherPersonalIdentificationNumber = (PersonalIdentificationNumber)other; return(IsEqual(Value, otherPersonalIdentificationNumber.Value)); } return(false); }
public static void SignPdf(string certificate, string signature) { byte[] signatureBytes = ConvertToBytes(signature); byte[] certificateBytes = ConvertToBytes(certificate); var acsd = Encoding.Default.GetString(signatureBytes); var chains = GetChains(); var datasplited = chain.Split("="); var a = HttpUtility.UrlDecode(datasplited[1]); var b = a.Split(";"); Console.WriteLine(a); X509Certificate x509Certificate = new X509CertificateParser().ReadCertificate(certificateBytes); SignerIdentifier sid = new SignerIdentifier(new IssuerAndSerialNumber(x509Certificate.IssuerDN, x509Certificate.SerialNumber)); AlgorithmIdentifier digAlgorithm = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256); Attributes authenticatedAttributes = null; AlgorithmIdentifier digEncryptionAlgorithm = new AlgorithmIdentifier(Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Sha256WithRsaEncryption); Asn1OctetString encryptedDigest = new DerOctetString(signatureBytes); Attributes unauthenticatedAttributes = null; SignerInfo signerInfo = new SignerInfo(sid, digAlgorithm, authenticatedAttributes, digEncryptionAlgorithm, encryptedDigest, unauthenticatedAttributes); Asn1EncodableVector digestAlgs = new Asn1EncodableVector(); digestAlgs.Add(signerInfo.DigestAlgorithm); Asn1Set digestAlgorithms = new DerSet(digestAlgs); ContentInfo contentInfo = new ContentInfo(CmsObjectIdentifiers.Data, null); Asn1EncodableVector certs = new Asn1EncodableVector(); certs.Add(x509Certificate.CertificateStructure.ToAsn1Object()); for (int i = 0; i < chains.Length; i++) { certs.Add(chains[i].CertificateStructure.ToAsn1Object()); } Asn1Set certificates = new DerSet(certs); Asn1EncodableVector signerInfs = new Asn1EncodableVector(); signerInfs.Add(signerInfo); Asn1Set signerInfos = new DerSet(signerInfs); SignedData signedData = new SignedData(digestAlgorithms, contentInfo, certificates, null, signerInfos); contentInfo = new ContentInfo(CmsObjectIdentifiers.SignedData, signedData); byte[] Signature = contentInfo.GetDerEncoded(); using (PdfReader reader = new PdfReader(temp)) using (PdfDocument document = new PdfDocument(reader)) using (FileStream fout = new FileStream(dest, FileMode.Create)) { PdfSigner.SignDeferred(document, "Signature", fout, new ExternalPrecalculatedSignatureContainer(Signature)); } }
internal SignerInf(CmsSignedGenerator outer, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr, Org.BouncyCastle.Asn1.Cms.AttributeTable baseSignedTable) { this.outer = outer; this.key = key; this.signerIdentifier = signerIdentifier; this.digestOID = digestOID; this.encOID = encOID; this.sAttr = sAttr; this.unsAttr = unsAttr; this.baseSignedTable = baseSignedTable; }
internal SignerInf(CmsSignedGenerator outer, ISignatureFactory sigCalc, SignerIdentifier signerIdentifier, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr, Org.BouncyCastle.Asn1.Cms.AttributeTable baseSignedTable) { this.outer = outer; this.sigCalc = sigCalc; this.signerIdentifier = signerIdentifier; digestOID = new DefaultDigestAlgorithmIdentifierFinder().find((AlgorithmIdentifier)sigCalc.AlgorithmDetails).Algorithm.Id; encOID = ((AlgorithmIdentifier)sigCalc.AlgorithmDetails).Algorithm.Id; this.sAttr = sAttr; this.unsAttr = unsAttr; this.baseSignedTable = baseSignedTable; }
internal SignerInf(CmsSignedGenerator outer, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr, Asn1.Cms.AttributeTable baseSignedTable) { _outer = outer; _key = key; _signerIdentifier = signerIdentifier; _digestOID = digestOID; _encOID = encOID; _sAttr = sAttr; _unsAttr = unsAttr; _baseSignedTable = baseSignedTable; }
private void doAddSigner( AsymmetricKeyParameter privateKey, SignerIdentifier signerIdentifier, string encryptionOID, string digestOID, CmsAttributeTableGenerator signedAttrGen, CmsAttributeTableGenerator unsignedAttrGen, AttributeTable baseSignedTable) { signerInfs.Add(new SignerInf(this, privateKey, signerIdentifier, digestOID, encryptionOID, signedAttrGen, unsignedAttrGen, baseSignedTable)); }
public static CmsSignedData Generate(IX509Store certificateStore, X509Certificate signingCertificate, AsymmetricKeyEntry privateKey, string digestOID, CmsProcessable content) { string encOID = CmsSignedGenerator.EncryptionRsa; IssuerAndSerialNumber issuerAndSerialNumber = new IssuerAndSerialNumber(signingCertificate.IssuerDN, signingCertificate.SerialNumber); SignerIdentifier signerIdentifier = new SignerIdentifier(issuerAndSerialNumber); AlgorithmIdentifier digestAlgorithmID = new AlgorithmIdentifier(new DerObjectIdentifier(digestOID)); AlgorithmIdentifier encryptionAlgorithmID = new AlgorithmIdentifier(new DerObjectIdentifier(encOID)); SignerInfo signerInfo = new SignerInfo(signerIdentifier, digestAlgorithmID, (Asn1Set)null, encryptionAlgorithmID, null, null); return(Generate(certificateStore, signerInfo, content)); }
internal SignerInf(CmsSignedGenerator outer, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr, Org.BouncyCastle.Asn1.Cms.AttributeTable baseSignedTable) { string digestAlgName = Helper.GetDigestAlgName(digestOID); string algorithm = digestAlgName + "with" + Helper.GetEncryptionAlgName(encOID); this.outer = outer; sigCalc = new Asn1SignatureFactory(algorithm, key); this.signerIdentifier = signerIdentifier; this.digestOID = digestOID; this.encOID = encOID; this.sAttr = sAttr; this.unsAttr = unsAttr; this.baseSignedTable = baseSignedTable; }
internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureCalculator contentSigner, bool isDirectSignature) { this.sigId = sigId; this.contentSigner = contentSigner; this.isDirectSignature = isDirectSignature; if (this.isDirectSignature) { this.signedGen = null; this.unsignedGen = null; } else { this.signedGen = new DefaultSignedAttributeTableGenerator(); this.unsignedGen = null; } }
internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureFactory signerFactory, bool isDirectSignature) { this.sigId = sigId; contentSigner = signerFactory; this.isDirectSignature = isDirectSignature; if (this.isDirectSignature) { signedGen = null; unsignedGen = null; } else { signedGen = new DefaultSignedAttributeTableGenerator(); unsignedGen = null; } }
private SignerInfoGenerator CreateGenerator(ISignatureFactory contentSigner, SignerIdentifier sigId) { if (directSignature) { return(new SignerInfoGenerator(sigId, contentSigner, isDirectSignature: true)); } if (signedGen != null || unsignedGen != null) { if (signedGen == null) { signedGen = new DefaultSignedAttributeTableGenerator(); } return(new SignerInfoGenerator(sigId, contentSigner, signedGen, unsignedGen)); } return(new SignerInfoGenerator(sigId, contentSigner)); }
internal SignerInf( CmsSignedDataStreamGenerator outer, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr) { this.outer = outer; _key = key; _signerIdentifier = signerIdentifier; _digestOID = digestOID; _encOID = encOID; _sAttr = sAttr; _unsAttr = unsAttr; }
internal SignerInformation( Asn1.Cms.SignerInfo info, DerObjectIdentifier contentType, ICmsTypedData content, byte[] digest) { this.info = info; this.contentType = contentType; this.isCounterSignature = contentType == null; try { SignerIdentifier s = info.SignerID; if (s.IsTagged) { Asn1OctetString octs = Asn1OctetString.GetInstance(s.ID); this.sid = new SignerID(octs.GetEncoded()); } else { Asn1.Cms.IssuerAndSerialNumber iAnds = Asn1.Cms.IssuerAndSerialNumber.GetInstance(s.ID); this.sid = new SignerID(iAnds.Name, iAnds.SerialNumber.Value); } } catch (IOException) { throw new ArgumentException("invalid sid in SignerInfo"); } this.digestAlgorithm = info.DigestAlgorithm; this.signedAttributeSet = info.AuthenticatedAttributes; this.unsignedAttributeSet = info.UnauthenticatedAttributes; this.encryptionAlgorithm = info.DigestEncryptionAlgorithm; this.signature = info.EncryptedDigest.GetOctets(); this.content = content; this.resultDigest = digest; }
internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureFactory <AlgorithmIdentifier> contentSigner, IDigestFactoryProvider <AlgorithmIdentifier> digesterProvider, ISignatureEncryptionAlgorithmFinder sigEncAlgFinder, ICmsAttributeTableGenerator signedGen, ICmsAttributeTableGenerator unsignedGen) { this.sigId = sigId; this.signer = contentSigner; this.signerCalculator = contentSigner.CreateCalculator(); if (digesterProvider != null) { this.digester = digesterProvider.CreateDigestFactory(digAlgFinder.Find(signer.AlgorithmDetails)); this.digestCalculator = digester.CreateCalculator(); } else { this.digester = null; } this.sigEncAlgFinder = sigEncAlgFinder; this.signedGen = signedGen; this.unsignedGen = unsignedGen; this.isDirectSignature = false; }
internal SignerInformation( SignerInfo info, DerObjectIdentifier contentType, CmsProcessable content, byte[] digest) { this.info = info; this.sid = new SignerID(); this.contentType = contentType; try { SignerIdentifier s = info.SignerID; if (s.IsTagged) { Asn1OctetString octs = Asn1OctetString.GetInstance(s.ID); sid.SubjectKeyIdentifier = octs.GetOctets(); } else { Asn1.Cms.IssuerAndSerialNumber iAnds = Asn1.Cms.IssuerAndSerialNumber.GetInstance(s.ID); sid.Issuer = iAnds.Name; sid.SerialNumber = iAnds.SerialNumber.Value; } } catch (IOException) { throw new ArgumentException("invalid sid in SignerInfo"); } this.digestAlgorithm = info.DigestAlgorithm; this.signedAttributes = info.AuthenticatedAttributes; this.unsignedAttributes = info.UnauthenticatedAttributes; this.encryptionAlgorithm = info.DigestEncryptionAlgorithm; this.signature = info.EncryptedDigest.GetOctets(); this.content = content; _digest = digest; }
/// <summary> /// Gets the signature from a given signer. /// </summary> /// <exception cref="InvalidOperationException">if the job response doesn't contain a signature for this signer</exception> /// <seealso cref="Signatures" /> public Signature GetSignatureFor(SignerIdentifier signer) { Signature foundSignature = null; if (signer is PersonalIdentificationNumber) { foundSignature = Signatures.SingleOrDefault(s => s.Signer == ((PersonalIdentificationNumber)signer).Value); } if (signer is CustomIdentifier) { foundSignature = Signatures.SingleOrDefault(s => s.Signer == ((CustomIdentifier)signer).Value); } if (foundSignature == null) { throw new InvalidOperationException($"Unable to find signature for Signer '{signer}'"); } return(foundSignature); }
/// <summary> /// Signer is received with crypto provider or pr. key (if the crypto provider == null) /// </summary> /// <param name="krProv">Crypto provider. if null than use key</param> /// <param name="key">Private key</param> internal SignerInf( CmsSignedGenerator outer, NetCrypto.RSACryptoServiceProvider krProv, AsymmetricKeyParameter key, SignerIdentifier signerIdentifier, string digestOID, string encOID, CmsAttributeTableGenerator sAttr, CmsAttributeTableGenerator unsAttr, Asn1.Cms.AttributeTable baseSignedTable) { this.outer = outer; this.key = key; this.krProv = krProv; this.signerIdentifier = signerIdentifier; this.digestOID = digestOID; this.encOID = encOID; this.sAttr = sAttr; this.unsAttr = unsAttr; this.baseSignedTable = baseSignedTable; }
internal Asn1.Cms.SignerInfo ToSignerInfo( DerObjectIdentifier contentType, CmsProcessable content, SecureRandom random, bool isCounterSignature) { AlgorithmIdentifier digAlgId = new AlgorithmIdentifier( new DerObjectIdentifier(this.DigestAlgOid), DerNull.Instance); AlgorithmIdentifier encAlgId = CmsSignedGenerator.GetEncAlgorithmIdentifier(this.EncryptionAlgOid); string digestName = Helper.GetDigestAlgName(digestOID); string signatureName = digestName + "with" + Helper.GetEncryptionAlgName(encOID); ISigner sig = Helper.GetSignatureInstance(signatureName); IDigest dig = Helper.GetDigestInstance(digestName); byte[] hash = null; if (content != null) { content.Write(new DigOutputStream(dig)); hash = DigestUtilities.DoFinal(dig); outer._digests.Add(digestOID, hash.Clone()); } IDictionary parameters = outer.GetBaseParameters(contentType, digAlgId, hash); Asn1.Cms.AttributeTable signed = (sAttr != null) // ? sAttr.GetAttributes(Collections.unmodifiableMap(parameters)) ? sAttr.GetAttributes(parameters) : null; if (isCounterSignature) { Hashtable ats = signed.ToHashtable(); ats.Remove(CmsAttributes.ContentType); signed = new Asn1.Cms.AttributeTable(ats); } Asn1Set signedAttr = outer.GetAttributeSet(signed); // // sig must be composed from the DER encoding. // byte[] tmp; if (signedAttr != null) { tmp = signedAttr.GetEncoded(Asn1Encodable.Der); } else { MemoryStream bOut = new MemoryStream(); content.Write(bOut); tmp = bOut.ToArray(); } sig.Init(true, new ParametersWithRandom(key, random)); sig.BlockUpdate(tmp, 0, tmp.Length); Asn1OctetString encDigest = new DerOctetString(sig.GenerateSignature()); IDictionary baseParameters = outer.GetBaseParameters(contentType, digAlgId, hash); baseParameters[CmsAttributeTableParameter.Signature] = encDigest.GetOctets().Clone(); Asn1.Cms.AttributeTable unsigned = (unsAttr != null) // ? unsAttr.GetAttributes(Collections.unmodifiableMap(baseParameters)) ? unsAttr.GetAttributes(baseParameters) : null; Asn1Set unsignedAttr = outer.GetAttributeSet(unsigned); X509Certificate cert = this.GetCertificate(); SignerIdentifier identifier; if (cert != null) { TbsCertificateStructure tbs = TbsCertificateStructure.GetInstance( Asn1Object.FromByteArray(cert.GetTbsCertificate())); Asn1.Cms.IssuerAndSerialNumber encSid = new Asn1.Cms.IssuerAndSerialNumber( tbs.Issuer, tbs.SerialNumber.Value); identifier = new SignerIdentifier(encSid); } else { identifier = new SignerIdentifier(new DerOctetString(keyIdentifier)); } return(new Asn1.Cms.SignerInfo(identifier, digAlgId, signedAttr, encAlgId, encDigest, unsignedAttr)); }