public CmsEnvelopedData( ContentInfo contentInfo) { this.contentInfo = contentInfo; EnvelopedData envData = EnvelopedData.GetInstance(contentInfo.Content); // // read the recipients // Asn1Set recipientInfos = envData.RecipientInfos; // // read the encrypted content info // EncryptedContentInfo encInfo = envData.EncryptedContentInfo; this.encAlg = encInfo.ContentEncryptionAlgorithm; CmsReadable readable = new CmsProcessableByteArray(encInfo.EncryptedContent.GetOctets()); CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsEnvelopedSecureReadable( this.encAlg, readable); // // build the RecipientInformationStore // this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( recipientInfos, secureReadable); this.unprotectedAttributes = envData.UnprotectedAttrs; }
public CmsAuthEnvelopedData( ContentInfo contentInfo) { this.contentInfo = contentInfo; AuthEnvelopedData authEnvData = AuthEnvelopedData.GetInstance(contentInfo.Content); this.originator = authEnvData.OriginatorInfo; // // read the recipients // Asn1Set recipientInfos = authEnvData.RecipientInfos; // // read the auth-encrypted content info // EncryptedContentInfo authEncInfo = authEnvData.AuthEncryptedContentInfo; this.authEncAlg = authEncInfo.ContentEncryptionAlgorithm; CmsSecureReadable secureReadable = new AuthEnvelopedSecureReadable(this); // // build the RecipientInformationStore // this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( recipientInfos, secureReadable); // FIXME These need to be passed to the AEAD cipher as AAD (Additional Authenticated Data) this.authAttrs = authEnvData.AuthAttrs; this.mac = authEnvData.Mac.GetOctets(); this.unauthAttrs = authEnvData.UnauthAttrs; }
public OriginatorInfo( Asn1Set certs, Asn1Set crls) { this.certs = certs; this.crls = crls; }
public OriginatorInfo( Asn1Sequence seq) { switch (seq.Count) { case 0: // empty break; case 1: Asn1TaggedObject o = (Asn1TaggedObject) seq[0]; switch (o.TagNo) { case 0 : certs = Asn1Set.GetInstance(o, false); break; case 1 : crls = Asn1Set.GetInstance(o, false); break; default: throw new ArgumentException("Bad tag in OriginatorInfo: " + o.TagNo); } break; case 2: certs = Asn1Set.GetInstance((Asn1TaggedObject) seq[0], false); crls = Asn1Set.GetInstance((Asn1TaggedObject) seq[1], false); break; default: throw new ArgumentException("OriginatorInfo too big"); } }
public CmsAuthenticatedData( ContentInfo contentInfo) { this.contentInfo = contentInfo; AuthenticatedData authData = AuthenticatedData.GetInstance(contentInfo.Content); // // read the recipients // Asn1Set recipientInfos = authData.RecipientInfos; this.macAlg = authData.MacAlgorithm; // // read the authenticated content info // ContentInfo encInfo = authData.EncapsulatedContentInfo; CmsReadable readable = new CmsProcessableByteArray( Asn1OctetString.GetInstance(encInfo.Content).GetOctets()); CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsAuthenticatedSecureReadable( this.macAlg, readable); // // build the RecipientInformationStore // this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( recipientInfos, secureReadable); this.authAttrs = authData.AuthAttrs; this.mac = authData.Mac.GetOctets(); this.unauthAttrs = authData.UnauthAttrs; }
public EnvelopedData( OriginatorInfo originatorInfo, Asn1Set recipientInfos, EncryptedContentInfo encryptedContentInfo, Asn1Set unprotectedAttrs) { if (originatorInfo != null || unprotectedAttrs != null) { version = new DerInteger(2); } else { version = new DerInteger(0); foreach (object o in recipientInfos) { RecipientInfo ri = RecipientInfo.GetInstance(o); if (!ri.Version.Equals(version)) { version = new DerInteger(2); break; } } } this.originatorInfo = originatorInfo; this.recipientInfos = recipientInfos; this.encryptedContentInfo = encryptedContentInfo; this.unprotectedAttrs = unprotectedAttrs; }
public AttributeX509( DerObjectIdentifier attrType, Asn1Set attrValues) { this.attrType = attrType; this.attrValues = attrValues; }
public SafeBag( DerObjectIdentifier oid, Asn1Object obj) { this.bagID = oid; this.bagValue = obj; this.bagAttributes = null; }
private AttributeX509( Asn1Sequence seq) { if (seq.Count != 2) throw new ArgumentException("Bad sequence size: " + seq.Count); attrType = DerObjectIdentifier.GetInstance(seq[0]); attrValues = Asn1Set.GetInstance(seq[1]); }
private AttributePkcs( Asn1Sequence seq) { if (seq.Count != 2) throw new ArgumentException("Wrong number of elements in sequence", "seq"); attrType = DerObjectIdentifier.GetInstance(seq[0]); attrValues = Asn1Set.GetInstance(seq[1]); }
public Pkcs10CertificationRequestDelaySigned( string signatureAlgorithm, X509Name subject, AsymmetricKeyParameter publicKey, Asn1Set attributes, AsymmetricKeyParameter signingKey) : base(signatureAlgorithm, subject, publicKey, attributes, signingKey) { }
public SafeBag( DerObjectIdentifier oid, Asn1Object obj, Asn1Set bagAttributes) { this.bagID = oid; this.bagValue = obj; this.bagAttributes = bagAttributes; }
public SafeBag( Asn1Sequence seq) { this.bagID = (DerObjectIdentifier) seq[0]; this.bagValue = ((DerTaggedObject) seq[1]).GetObject(); if (seq.Count == 3) { this.bagAttributes = (Asn1Set) seq[2]; } }
/** * Generates a certificate object and initializes it with the data * read from the input stream inStream. */ public X509Certificate ReadCertificate( Stream inStream) { if (inStream == null) throw new ArgumentNullException("inStream"); if (!inStream.CanRead) throw new ArgumentException("inStream must be read-able", "inStream"); if (currentStream == null) { currentStream = inStream; sData = null; sDataObjectCount = 0; } else if (currentStream != inStream) // reset if input stream has changed { currentStream = inStream; sData = null; sDataObjectCount = 0; } try { if (sData != null) { if (sDataObjectCount != sData.Count) { return GetCertificate(); } sData = null; sDataObjectCount = 0; return null; } PushbackStream pis = new PushbackStream(inStream); int tag = pis.ReadByte(); if (tag < 0) return null; pis.Unread(tag); if (tag != 0x30) // assume ascii PEM encoded. { return ReadPemCertificate(pis); } return ReadDerCertificate(new Asn1InputStream(pis)); } catch (Exception e) { throw new CertificateException("Failed to read certificate", e); } }
public AttributeTable( Asn1Set s) { this.attributes = Platform.CreateHashtable(s.Count); for (int i = 0; i != s.Count; i++) { AttributeX509 a = AttributeX509.GetInstance(s[i]); attributes.Add(a.AttrType, a); } }
internal static RecipientInformationStore BuildRecipientInformationStore( Asn1Set recipientInfos, CmsSecureReadable secureReadable) { IList infos = Platform.CreateArrayList(); for (int i = 0; i != recipientInfos.Count; i++) { RecipientInfo info = RecipientInfo.GetInstance(recipientInfos[i]); ReadRecipientInfo(infos, info, secureReadable); } return new RecipientInformationStore(infos); }
public AttributeTable( Asn1Set s) { this.attributes = Platform.CreateHashtable(s.Count); for (int i = 0; i != s.Count; i++) { Attribute a = Attribute.GetInstance(s[i]); AddAttribute(a); } }
public EnvelopedData( OriginatorInfo originatorInfo, Asn1Set recipientInfos, EncryptedContentInfo encryptedContentInfo, Attributes unprotectedAttrs) { this.version = new DerInteger(CalculateVersion(originatorInfo, recipientInfos, Asn1Set.GetInstance(unprotectedAttrs))); this.originatorInfo = originatorInfo; this.recipientInfos = recipientInfos; this.encryptedContentInfo = encryptedContentInfo; this.unprotectedAttrs = Asn1Set.GetInstance(unprotectedAttrs); }
static string BuildPartitionedCrlDistributionPoint(string partitionedCrlDistributionPoint, Asn1Set dset) { foreach (DerSequence relativeDn in dset) { var relativeDnOid = ((DerObjectIdentifier)relativeDn[0]).Id; var relativeDnName = (string)X509Name.RFC2253Symbols[new DerObjectIdentifier(relativeDnOid)]; var relativeDnValue = ((DerStringBase)relativeDn[1]).GetString(); var comma = partitionedCrlDistributionPoint.Length > 0 ? "," : ""; partitionedCrlDistributionPoint = relativeDnName + "=" + relativeDnValue + comma + partitionedCrlDistributionPoint; } return partitionedCrlDistributionPoint; }
public SignedData( Asn1Set digestAlgorithms, ContentInfo contentInfo, Asn1Set certificates, Asn1Set crls, Asn1Set signerInfos) { this.version = CalculateVersion(contentInfo.ContentType, certificates, crls, signerInfos); this.digestAlgorithms = digestAlgorithms; this.contentInfo = contentInfo; this.certificates = certificates; this.crls = crls; this.signerInfos = signerInfos; }
public SignedData( DerInteger _version, Asn1Set _digestAlgorithms, ContentInfo _contentInfo, Asn1Set _certificates, Asn1Set _crls, Asn1Set _signerInfos) { version = _version; digestAlgorithms = _digestAlgorithms; contentInfo = _contentInfo; certificates = _certificates; crls = _crls; signerInfos = _signerInfos; }
public SignerInfo( SignerIdentifier sid, AlgorithmIdentifier digAlgorithm, Attributes authenticatedAttributes, AlgorithmIdentifier digEncryptionAlgorithm, Asn1OctetString encryptedDigest, Attributes unauthenticatedAttributes) { this.version = new DerInteger(sid.IsTagged ? 3 : 1); this.sid = sid; this.digAlgorithm = digAlgorithm; this.authenticatedAttributes = Asn1Set.GetInstance(authenticatedAttributes); this.digEncryptionAlgorithm = digEncryptionAlgorithm; this.encryptedDigest = encryptedDigest; this.unauthenticatedAttributes = Asn1Set.GetInstance(unauthenticatedAttributes); }
private SignedData( Asn1Sequence seq) { IEnumerator e = seq.GetEnumerator(); e.MoveNext(); version = (DerInteger)e.Current; e.MoveNext(); digestAlgorithms = ((Asn1Set)e.Current); e.MoveNext(); contentInfo = ContentInfo.GetInstance(e.Current); while (e.MoveNext()) { Asn1Object o = (Asn1Object)e.Current; // // an interesting feature of SignedData is that there appear // to be varying implementations... // for the moment we ignore anything which doesn't fit. // if (o is Asn1TaggedObject) { Asn1TaggedObject tagged = (Asn1TaggedObject)o; switch (tagged.TagNo) { case 0: certBer = tagged is BerTaggedObject; certificates = Asn1Set.GetInstance(tagged, false); break; case 1: crlsBer = tagged is BerTaggedObject; crls = Asn1Set.GetInstance(tagged, false); break; default: throw new ArgumentException("unknown tag value " + tagged.TagNo); } } else { signerInfos = (Asn1Set) o; } } }
public SignerInfo( DerInteger version, IssuerAndSerialNumber issuerAndSerialNumber, AlgorithmIdentifier digAlgorithm, Asn1Set authenticatedAttributes, AlgorithmIdentifier digEncryptionAlgorithm, Asn1OctetString encryptedDigest, Asn1Set unauthenticatedAttributes) { this.version = version; this.issuerAndSerialNumber = issuerAndSerialNumber; this.digAlgorithm = digAlgorithm; this.authenticatedAttributes = authenticatedAttributes; this.digEncryptionAlgorithm = digEncryptionAlgorithm; this.encryptedDigest = encryptedDigest; this.unauthenticatedAttributes = unauthenticatedAttributes; }
private X509Crl ReadDerCrl( Asn1InputStream dIn) { Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject(); if (seq.Count > 1 && seq[0] is DerObjectIdentifier) { if (seq[0].Equals(PkcsObjectIdentifiers.SignedData)) { sCrlData = SignedData.GetInstance( Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Crls; return GetCrl(); } } return CreateX509Crl(CertificateList.GetInstance(seq)); }
internal SignerInformation( SignerInfo info, DerObjectIdentifier contentType, CmsProcessable content, IDigestCalculator digestCalculator) { this.info = info; this.sid = new SignerID(); this.contentType = contentType; this.isCounterSignature = contentType == null; try { SignerIdentifier s = info.SignerID; if (s.IsTagged) { Asn1OctetString octs = Asn1OctetString.GetInstance(s.ID); sid.SubjectKeyIdentifier = octs.GetEncoded(); } 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.signedAttributeSet = info.AuthenticatedAttributes; this.unsignedAttributeSet = info.UnauthenticatedAttributes; this.encryptionAlgorithm = info.DigestEncryptionAlgorithm; this.signature = info.EncryptedDigest.GetOctets(); this.content = content; this.digestCalculator = digestCalculator; }
internal IX509Store CreateAttributeStore( string type, Asn1Set certSet) { IList certs = new ArrayList(); if (certSet != null) { foreach (Asn1Encodable ae in certSet) { try { Asn1Object obj = ae.ToAsn1Object(); if (obj is Asn1TaggedObject) { Asn1TaggedObject tagged = (Asn1TaggedObject)obj; if (tagged.TagNo == 2) { certs.Add( new X509V2AttributeCertificate( Asn1Sequence.GetInstance(tagged, false).GetEncoded())); } } } catch (Exception ex) { throw new CmsException("can't re-encode attribute certificate!", ex); } } } try { return X509StoreFactory.Create( "AttributeCertificate/" + type, new X509CollectionStoreParameters(certs)); } catch (ArgumentException e) { throw new CmsException("can't setup the X509Store", e); } }
private IX509AttributeCertificate ReadDerCertificate( Asn1InputStream dIn) { Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject(); if (seq.Count > 1 && seq[0] is DerObjectIdentifier) { if (seq[0].Equals(PkcsObjectIdentifiers.SignedData)) { sData = SignedData.GetInstance( Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Certificates; return GetCertificate(); } } // return new X509V2AttributeCertificate(seq.getEncoded()); return new X509V2AttributeCertificate(AttributeCertificate.GetInstance(seq)); }
public SignerInfo( Asn1Sequence seq) { IEnumerator e = seq.GetEnumerator(); e.MoveNext(); version = (DerInteger) e.Current; e.MoveNext(); sid = SignerIdentifier.GetInstance(e.Current); e.MoveNext(); digAlgorithm = AlgorithmIdentifier.GetInstance(e.Current); e.MoveNext(); object obj = e.Current; if (obj is Asn1TaggedObject) { authenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) obj, false); e.MoveNext(); digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(e.Current); } else { authenticatedAttributes = null; digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(obj); } e.MoveNext(); encryptedDigest = DerOctetString.GetInstance(e.Current); if (e.MoveNext()) { unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) e.Current, false); } else { unauthenticatedAttributes = null; } }
public EnvelopedData( Asn1Sequence seq) { int index = 0; version = (DerInteger) seq[index++]; object tmp = seq[index++]; if (tmp is Asn1TaggedObject) { originatorInfo = OriginatorInfo.GetInstance((Asn1TaggedObject) tmp, false); tmp = seq[index++]; } recipientInfos = Asn1Set.GetInstance(tmp); encryptedContentInfo = EncryptedContentInfo.GetInstance(seq[index++]); if (seq.Count > index) { unprotectedAttrs = Asn1Set.GetInstance((Asn1TaggedObject) seq[index], false); } }
public Asn1SetParserImpl( Asn1Set outer) { this.outer = outer; this.max = outer.Count; }
/// <summary> /// Questo metodo verifica se l'associazione fra marca e file è valida, verifica inoltre la /// validità del certificato firmatario della marca e la data di scadenza della marca; infine /// restituisce (se le verifiche vanno a buon fine) tutti i dati contenuti nella marca. /// </summary> /// <param name="tsRes"></param> /// <param name="tsReq"></param> /// <returns></returns> protected OutputResponseMarca checkMarca(TimeStampResponse tsRes, TimeStampRequest tsReq) { OutputResponseMarca outTSR = new OutputResponseMarca(); try { tsRes.Validate(tsReq); outTSR.esito = "OK"; outTSR.descrizioneErrore = string.Empty; } catch (TspException e) { outTSR.esito = "KO"; outTSR.descrizioneErrore = "verifica della marca fallita: " + e.Message; logger.Debug("verifica della marca fallita: " + e.Message); //return outTSR; } TimeStampToken tsToken = tsRes.TimeStampToken; //Verifica data scadenza marca secondo l'ora locale Org.BouncyCastle.X509.Store.IX509Store store = tsToken.GetCertificates("Collection"); Org.BouncyCastle.X509.X509Certificate cert = (Org.BouncyCastle.X509.X509Certificate) new ArrayList(store.GetMatches(tsToken.SignerID))[0]; //se la data attuale è maggiore di quella di scadenza del certificato che ha firmato la marca //allora la marca è scaduta!!! if (DateTime.Now.CompareTo(cert.NotAfter.ToLocalTime()) > 0) { //outTSR.esito = "KO"; outTSR.descrizioneErrore = "marca temporale scaduta"; logger.Debug("marca temporale scaduta"); //return outTSR; } try { //estrazione delle informazioni dalla marca outTSR.dsm = cert.NotAfter.ToLocalTime().ToString(); outTSR.sernum = tsToken.TimeStampInfo.SerialNumber.ToString(); outTSR.fhash = byteArrayToHexa(tsToken.TimeStampInfo.TstInfo.MessageImprint.GetHashedMessage()); outTSR.docm = tsToken.TimeStampInfo.TstInfo.GenTime.TimeString; outTSR.docm_date = tsToken.TimeStampInfo.GenTime.ToLocalTime().ToString(); outTSR.marca = Convert.ToBase64String(tsRes.GetEncoded()); outTSR.algCertificato = cert.SigAlgName; outTSR.fromDate = cert.NotBefore.ToLocalTime().ToString(); outTSR.snCertificato = cert.SerialNumber.ToString(); //Algoritmo hash utilizzato per l'impronta string algHashOid = tsToken.TimeStampInfo.MessageImprintAlgOid; if (!string.IsNullOrEmpty(algHashOid)) { System.Security.Cryptography.Oid oidHash = new System.Security.Cryptography.Oid(algHashOid); outTSR.algHash = oidHash.FriendlyName; } outTSR.TSA = new TSARFC2253(); //Con le TSA di test potrebbe non essere valorizzato l'oggetto TSA logger.Debug("Controllo TSA : " + tsToken.TimeStampInfo.Tsa); try { if (tsToken.TimeStampInfo.Tsa != null) { string oid = string.Empty; string oidValue = string.Empty; logger.Debug("TagNo: " + tsToken.TimeStampInfo.Tsa.TagNo); for (int n = 0; n < tsToken.TimeStampInfo.Tsa.TagNo; n++) { logger.Debug("Tag: " + n); Org.BouncyCastle.Asn1.Asn1Sequence seq = (Org.BouncyCastle.Asn1.Asn1Sequence)tsToken.TimeStampInfo.Tsa.Name.ToAsn1Object(); //Obsoleto //Org.BouncyCastle.Asn1.Asn1Object obj = (Org.BouncyCastle.Asn1.Asn1Object)seq.GetObjectAt(n); Org.BouncyCastle.Asn1.Asn1Object obj = (Org.BouncyCastle.Asn1.Asn1Object)seq[n]; Org.BouncyCastle.Asn1.Asn1Set set1 = (Org.BouncyCastle.Asn1.Asn1Set)obj.ToAsn1Object(); //Obsoleto //seq = (Org.BouncyCastle.Asn1.Asn1Sequence)set1.GetObjectAt(0); //obj = (Org.BouncyCastle.Asn1.Asn1Object)seq.GetObjectAt(0); seq = (Org.BouncyCastle.Asn1.Asn1Sequence)set1[0]; obj = (Org.BouncyCastle.Asn1.Asn1Object)seq[0]; oid = obj.ToString(); //Obsoleto //obj = (Org.BouncyCastle.Asn1.Asn1Object)seq.GetObjectAt(1); obj = (Org.BouncyCastle.Asn1.Asn1Object)seq[1]; oidValue = obj.ToString(); System.Security.Cryptography.Oid oid_obj = new System.Security.Cryptography.Oid(oid); string friendly = oid_obj.FriendlyName; logger.Debug("oid: " + oid + " friendly: " + friendly); switch (friendly) { case "CN": outTSR.TSA.CN = oidValue; break; case "OU": outTSR.TSA.OU = oidValue; break; case "O": outTSR.TSA.O = oidValue; break; case "C": outTSR.TSA.C = oidValue; break; } } outTSR.TSA.TSARFC2253Name = "CN=" + outTSR.TSA.CN + ",OU=" + outTSR.TSA.OU + ",O=" + outTSR.TSA.O + ",C=" + outTSR.TSA.C; } } catch (Exception e) { logger.Debug("Eccezione controllo TSA : " + e.Message); } logger.Debug("Fine Controllo TSA"); } catch (Exception eTsp) { outTSR.esito = "KO"; outTSR.descrizioneErrore = "estrazione delle informazioni dalla marca fallita: " + eTsp.Message; logger.Debug("estrazione delle informazioni dalla marca fallita: " + eTsp.Message); //return outTSR; } //verifico l'esistenza del documento al quale è associata la marca temporale //Commentata perchè l'impronta del documento è ancora calcolata con SHA1 invece che SHA256 //DocsPaDB.Query_DocsPAWS.Documenti documento = new DocsPaDB.Query_DocsPAWS.Documenti(); //outTSR.timestampedDoc = documento.GetDocNumberByImpronta(outTSR.fhash); //if (string.IsNullOrEmpty(outTSR.timestampedDoc)) //{ // outTSR.timestampedDoc = "Non esiste alcun documento associato alla marca temporale."; //} //costruisco l'oggetto rappresentante il contenuto in chiaro della marca outTSR.DecryptedTSR = new Marca(); outTSR.DecryptedTSR.content = contentMarca(outTSR); outTSR.DecryptedTSR.contentType = "text/html"; //"application/x-html"; outTSR.DecryptedTSR.length = outTSR.DecryptedTSR.content.Length; return(outTSR); }