public GeneralSubtree(GeneralName baseName, BigInteger minimum, BigInteger maximum) { this.baseName = baseName; if (minimum != null) { this.minimum = new DerInteger(minimum); } if (maximum != null) { this.maximum = new DerInteger(maximum); } }
/// <summary> /// Encode AuthorityInformationAccessUri to a form required by the extension. /// </summary> /// <returns>DER encoded sequence or null.</returns> protected DerSequence GetAuthorityInfoAccessEncoded() { if (AuthorityInformationAccessUri == null || !AuthorityInformationAccessUri.IsAbsoluteUri) { return(null); } var location = new GeneralName(GeneralName.UniformResourceIdentifier, new DerIA5String(AuthorityInformationAccessUri.AbsoluteUri)); var issuers = new AccessDescription(AccessDescription.IdADCAIssuers, location); return(new DerSequence(new Asn1EncodableVector(issuers))); }
private void checkValues( ProcurationSyntax procuration, string country, DirectoryString typeOfSubstitution, GeneralName thirdPerson, IssuerSerial certRef) { checkOptionalField("country", country, procuration.Country); checkOptionalField("typeOfSubstitution", typeOfSubstitution, procuration.TypeOfSubstitution); checkOptionalField("thirdPerson", thirdPerson, procuration.ThirdPerson); checkOptionalField("certRef", certRef, procuration.CertRef); }
private PkiHeader(Asn1Sequence seq) { pvno = DerInteger.GetInstance(seq[0]); sender = GeneralName.GetInstance(seq[1]); recipient = GeneralName.GetInstance(seq[2]); for (int pos = 3; pos < seq.Count; ++pos) { Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos]; switch (tObj.TagNo) { case 0: messageTime = DerGeneralizedTime.GetInstance(tObj, true); break; case 1: protectionAlg = AlgorithmIdentifier.GetInstance(tObj, true); break; case 2: senderKID = Asn1OctetString.GetInstance(tObj, true); break; case 3: recipKID = Asn1OctetString.GetInstance(tObj, true); break; case 4: transactionID = Asn1OctetString.GetInstance(tObj, true); break; case 5: senderNonce = Asn1OctetString.GetInstance(tObj, true); break; case 6: recipNonce = Asn1OctetString.GetInstance(tObj, true); break; case 7: freeText = PkiFreeText.GetInstance(tObj, true); break; case 8: generalInfo = Asn1Sequence.GetInstance(tObj, true); break; default: throw new ArgumentException("unknown tag number: " + tObj.TagNo, "seq"); } } }
/** * Set the requestor name to the passed in X509Principal * * @param requestorName a X509Principal representing the requestor name. */ public void SetRequestorName( X509Name requestorName) { try { this.requestorName = new GeneralName(GeneralName.DirectoryName, requestorName); } catch (Exception e) { throw new ArgumentException("cannot encode principal", e); } }
public X509CertBuilder(string[] validWithDomainNames, string issuer, CertStrength certStrength) { _random = new SecureRandom(_randomGenerator); _issuer = new X509Name(issuer); _strength = (int)certStrength; _generalNames = new GeneralName[validWithDomainNames.Length]; for (int t = 0; t < validWithDomainNames.Length; t++) { _generalNames[t] = new GeneralName(new X509Name(validWithDomainNames[t])); } }
private bool IsValidParameters(GeneralName name, GeneralName homeArena) { if (name == null) { throw new ArgumentNullException($"{nameof(name)} cannot be null"); } if (homeArena == null) { throw new ArgumentNullException($"{nameof(homeArena)} cannot be null"); } return(true); }
private AuthorityKeyIdentifier CreateAuthorityKeyId( SubjectPublicKeyInfo info, X509Name name, int sNumber) { GeneralName genName = new GeneralName(name); return(new AuthorityKeyIdentifier( info, GeneralNames.GetInstance(new DerSequence(genName)), BigInteger.ValueOf(sNumber))); }
public void SetRequestorName(X509Name requestorName) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) try { this.requestorName = new GeneralName(4, requestorName); } catch (global::System.Exception ex) { throw new ArgumentException("cannot encode principal", ex); } }
private PkiHeader(Asn1Sequence seq) { //IL_012d: Unknown result type (might be due to invalid IL or missing references) pvno = DerInteger.GetInstance(seq[0]); sender = GeneralName.GetInstance(seq[1]); recipient = GeneralName.GetInstance(seq[2]); for (int i = 3; i < seq.Count; i++) { Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)seq[i]; switch (asn1TaggedObject.TagNo) { case 0: messageTime = DerGeneralizedTime.GetInstance(asn1TaggedObject, isExplicit: true); break; case 1: protectionAlg = AlgorithmIdentifier.GetInstance(asn1TaggedObject, explicitly: true); break; case 2: senderKID = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true); break; case 3: recipKID = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true); break; case 4: transactionID = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true); break; case 5: senderNonce = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true); break; case 6: recipNonce = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true); break; case 7: freeText = PkiFreeText.GetInstance(asn1TaggedObject, isExplicit: true); break; case 8: generalInfo = Asn1Sequence.GetInstance(asn1TaggedObject, explicitly: true); break; default: throw new ArgumentException(string.Concat((object)"unknown tag number: ", (object)asn1TaggedObject.TagNo), "seq"); } } }
public override ValidationResult Validate(object value, CultureInfo cultureInfo) { GeneralName generalName; if (GeneralName.TryParse(value.ToString(), out generalName) && !ServiceLocator.Instance.TeamService.NameExist(generalName.Value)) { return(new ValidationResult(true, "")); } else { return(new ValidationResult(false, "Not a valid Name")); } }
public override ValidationResult Validate(object value, CultureInfo cultureInfo) { GeneralName generalName; if (GeneralName.TryParse(value.ToString(), out generalName)) { return(new ValidationResult(true, "")); } else { return(new ValidationResult(false, "Not a valid Name")); } }
public TstInfo(DerObjectIdentifier tsaPolicyId, MessageImprint messageImprint, DerInteger serialNumber, DerGeneralizedTime genTime, Accuracy accuracy, DerBoolean ordering, DerInteger nonce, GeneralName tsa, X509Extensions extensions) { version = new DerInteger(1); this.tsaPolicyId = tsaPolicyId; this.messageImprint = messageImprint; this.serialNumber = serialNumber; this.genTime = genTime; this.accuracy = accuracy; this.ordering = ordering; this.nonce = nonce; this.tsa = tsa; this.extensions = extensions; }
public X509Certificate2 MakeCertificate(string password, string issuedToDomainName, int validYears) { _certificateGenerator.Reset(); _certificateGenerator.SetSignatureAlgorithm(SignatureAlgorithm); var serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), _random); _certificateGenerator.SetSerialNumber(serialNumber); _certificateGenerator.SetSubjectDN(new X509Name(issuedToDomainName)); _certificateGenerator.SetIssuerDN(_issuer); var subjectAlternativeNames = new Asn1Encodable[_generalNames.Length + 1]; // first subject alternative name is the same as the subject subjectAlternativeNames[0] = new GeneralName(new X509Name(issuedToDomainName)); for (int t = 1; t <= _generalNames.Length; t++) { subjectAlternativeNames[t] = _generalNames[t - 1]; } var subjectAlternativeNamesExtension = new DerSequence(subjectAlternativeNames); _certificateGenerator.AddExtension(X509Extensions.SubjectAlternativeName.Id, false, subjectAlternativeNamesExtension); _certificateGenerator.SetNotBefore(DateTime.UtcNow.Date); _certificateGenerator.SetNotAfter(DateTime.UtcNow.Date.AddYears(validYears)); var keyGenerationParameters = new KeyGenerationParameters(_random, _strength); var keyPairGenerator = new RsaKeyPairGenerator(); keyPairGenerator.Init(keyGenerationParameters); var subjectKeyPair = keyPairGenerator.GenerateKeyPair(); _certificateGenerator.SetPublicKey(subjectKeyPair.Public); var issuerKeyPair = subjectKeyPair; var certificate = _certificateGenerator.Generate(issuerKeyPair.Private, _random); var store = new Pkcs12Store(); string friendlyName = certificate.SubjectDN.ToString(); var certificateEntry = new X509CertificateEntry(certificate); store.SetCertificateEntry(friendlyName, certificateEntry); store.SetKeyEntry(friendlyName, new AsymmetricKeyEntry(subjectKeyPair.Private), new[] { certificateEntry }); using (var stream = new MemoryStream()) { store.Save(stream, password.ToCharArray(), _random); return(new X509Certificate2(stream.ToArray(), password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable)); } }
/** * Constructor from Asn1Sequence. * <p/> * The sequence is of type ProcurationSyntax: * <p/> * <pre> * Admissions ::= SEQUENCE * { * admissionAuthority [0] EXPLICIT GeneralName OPTIONAL * namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL * professionInfos SEQUENCE OF ProfessionInfo * } * </pre> * * @param seq The ASN.1 sequence. */ private Admissions( Asn1Sequence seq) { if (seq.Count > 3) { throw new ArgumentException("Bad sequence size: " + seq.Count); } IEnumerator e = seq.GetEnumerator(); e.MoveNext(); Asn1Encodable o = (Asn1Encodable)e.Current; if (o is Asn1TaggedObject) { switch (((Asn1TaggedObject)o).TagNo) { case 0: admissionAuthority = GeneralName.GetInstance((Asn1TaggedObject)o, true); break; case 1: namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)o, true); break; default: throw new ArgumentException("Bad tag number: " + ((Asn1TaggedObject)o).TagNo); } e.MoveNext(); o = (Asn1Encodable)e.Current; } if (o is Asn1TaggedObject) { switch (((Asn1TaggedObject)o).TagNo) { case 1: namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)o, true); break; default: throw new ArgumentException("Bad tag number: " + ((Asn1TaggedObject)o).TagNo); } e.MoveNext(); o = (Asn1Encodable)e.Current; } professionInfos = Asn1Sequence.GetInstance(o); if (e.MoveNext()) { throw new ArgumentException("Bad object encountered: " + e.Current.GetType().Name); } }
private PkiHeader(Asn1Sequence seq) { this.pvno = DerInteger.GetInstance(seq[0]); this.sender = GeneralName.GetInstance(seq[1]); this.recipient = GeneralName.GetInstance(seq[2]); for (int i = 3; i < seq.Count; i++) { Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)seq[i]; switch (asn1TaggedObject.TagNo) { case 0: this.messageTime = DerGeneralizedTime.GetInstance(asn1TaggedObject, true); break; case 1: this.protectionAlg = AlgorithmIdentifier.GetInstance(asn1TaggedObject, true); break; case 2: this.senderKID = Asn1OctetString.GetInstance(asn1TaggedObject, true); break; case 3: this.recipKID = Asn1OctetString.GetInstance(asn1TaggedObject, true); break; case 4: this.transactionID = Asn1OctetString.GetInstance(asn1TaggedObject, true); break; case 5: this.senderNonce = Asn1OctetString.GetInstance(asn1TaggedObject, true); break; case 6: this.recipNonce = Asn1OctetString.GetInstance(asn1TaggedObject, true); break; case 7: this.freeText = PkiFreeText.GetInstance(asn1TaggedObject, true); break; case 8: this.generalInfo = Asn1Sequence.GetInstance(asn1TaggedObject, true); break; default: throw new ArgumentException("unknown tag number: " + asn1TaggedObject.TagNo, "seq"); } } }
/// <summary> /// Encodes this instance. /// </summary> protected void encode() { // DER encoded names GeneralName[] genName = new GeneralName[genNames.Count()]; int i = 0; foreach (OSCAGeneralName altName in genNames) { genName[i] = generalNames.createGeneralName(altName.Type.ToString(), altName.Name); i++; } base.encValue = generalNames.createGeneralNames(genName); }
private void checkValues( AdmissionSyntax syntax, GeneralName authority, Asn1Sequence admissions) { checkMandatoryField("admissionAuthority", authority, syntax.AdmissionAuthority); Admissions[] adm = syntax.GetContentsOfAdmissions(); if (adm.Length != 1 || !adm[0].Equals(admissions[0])) { Fail("admissions check failed"); } }
/// <summary> /// Encodes this instance. /// </summary> /// <returns></returns> protected Asn1Sequence encode() { // DER encoded names AccessDescription[] accDesc = new AccessDescription[accessDesc.Count()]; for (int i = 0; i < accessDesc.Count; i++) { GeneralName gn = generalNames.createGeneralName( accessDesc[i].Location.Type.ToString(), accessDesc[i].Location.Name); accDesc[i] = new AccessDescription(toOID(accessDesc[i].Method), gn); } return(new DerSequence(accDesc)); }
private TstInfo(Asn1Sequence seq) { IEnumerator enumerator = seq.GetEnumerator(); enumerator.MoveNext(); version = DerInteger.GetInstance(enumerator.Current); enumerator.MoveNext(); tsaPolicyId = DerObjectIdentifier.GetInstance(enumerator.Current); enumerator.MoveNext(); messageImprint = MessageImprint.GetInstance(enumerator.Current); enumerator.MoveNext(); serialNumber = DerInteger.GetInstance(enumerator.Current); enumerator.MoveNext(); genTime = DerGeneralizedTime.GetInstance(enumerator.Current); ordering = DerBoolean.False; while (enumerator.MoveNext()) { Asn1Object asn1Object = (Asn1Object)enumerator.Current; if (asn1Object is Asn1TaggedObject) { DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Object; switch (derTaggedObject.TagNo) { case 0: tsa = GeneralName.GetInstance(derTaggedObject, explicitly: true); break; case 1: extensions = X509Extensions.GetInstance(derTaggedObject, explicitly: false); break; default: throw new ArgumentException("Unknown tag value " + derTaggedObject.TagNo); } } if (asn1Object is DerSequence) { accuracy = Accuracy.GetInstance(asn1Object); } if (asn1Object is DerBoolean) { ordering = DerBoolean.GetInstance(asn1Object); } if (asn1Object is DerInteger) { nonce = DerInteger.GetInstance(asn1Object); } } }
public override void PerformTest() { DerObjectIdentifier statementId = new DerObjectIdentifier("1.1"); SemanticsInformation mv = new SemanticsInformation(statementId); CheckConstruction(mv, statementId, null); GeneralName[] names = new GeneralName[2]; names[0] = new GeneralName(GeneralName.Rfc822Name, "*****@*****.**"); names[1] = new GeneralName(new X509Name("cn=test")); mv = new SemanticsInformation(statementId, names); CheckConstruction(mv, statementId, names); mv = new SemanticsInformation(names); CheckConstruction(mv, null, names); mv = SemanticsInformation.GetInstance(null); if (mv != null) { Fail("null GetInstance() failed."); } try { SemanticsInformation.GetInstance(new object()); Fail("GetInstance() failed to detect bad object."); } catch (ArgumentException) { // expected } try { new SemanticsInformation(DerSequence.Empty); Fail("constructor failed to detect empty sequence."); } catch (ArgumentException) { // expected } }
private TstInfo(Asn1Sequence seq) { //IL_00fa: Unknown result type (might be due to invalid IL or missing references) global::System.Collections.IEnumerator enumerator = seq.GetEnumerator(); enumerator.MoveNext(); version = DerInteger.GetInstance(enumerator.get_Current()); enumerator.MoveNext(); tsaPolicyId = DerObjectIdentifier.GetInstance(enumerator.get_Current()); enumerator.MoveNext(); messageImprint = MessageImprint.GetInstance(enumerator.get_Current()); enumerator.MoveNext(); serialNumber = DerInteger.GetInstance(enumerator.get_Current()); enumerator.MoveNext(); genTime = DerGeneralizedTime.GetInstance(enumerator.get_Current()); ordering = DerBoolean.False; while (enumerator.MoveNext()) { Asn1Object asn1Object = (Asn1Object)enumerator.get_Current(); if (asn1Object is Asn1TaggedObject) { DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Object; switch (derTaggedObject.TagNo) { case 0: tsa = GeneralName.GetInstance(derTaggedObject, explicitly: true); break; case 1: extensions = X509Extensions.GetInstance(derTaggedObject, explicitly: false); break; default: throw new ArgumentException(string.Concat((object)"Unknown tag value ", (object)derTaggedObject.TagNo)); } } if (asn1Object is DerSequence) { accuracy = Accuracy.GetInstance(asn1Object); } if (asn1Object is DerBoolean) { ordering = DerBoolean.GetInstance(asn1Object); } if (asn1Object is DerInteger) { nonce = DerInteger.GetInstance(asn1Object); } } }
private string GetAccessLocation(X509Certificate certificate, DerObjectIdentifier accessMethod) { try { //byte[] authInfoAccessExtensionValue = certificate.GetExtensionValue(X509Extensions // .AuthorityInfoAccess); Asn1OctetString authInfoAccessExtensionValue = certificate.GetExtensionValue(X509Extensions .AuthorityInfoAccess); if (null == authInfoAccessExtensionValue) { return(null); } AuthorityInformationAccess authorityInformationAccess; //DerOctetString oct = (DerOctetString)(new Asn1InputStream(new MemoryStream // (authInfoAccessExtensionValue)).ReadObject()); DerOctetString oct = (DerOctetString)authInfoAccessExtensionValue; //authorityInformationAccess = new AuthorityInformationAccess((Asn1Sequence)new Asn1InputStream // (oct.GetOctets()).ReadObject()); authorityInformationAccess = AuthorityInformationAccess.GetInstance(oct); AccessDescription[] accessDescriptions = authorityInformationAccess.GetAccessDescriptions (); foreach (AccessDescription accessDescription in accessDescriptions) { LOG.Info("access method: " + accessDescription.AccessMethod); bool correctAccessMethod = accessDescription.AccessMethod.Equals(accessMethod ); if (!correctAccessMethod) { continue; } GeneralName gn = accessDescription.AccessLocation; if (gn.TagNo != GeneralName.UniformResourceIdentifier) { LOG.Info("not a uniform resource identifier"); continue; } DerIA5String str = (DerIA5String)((DerTaggedObject)gn.ToAsn1Object()).GetObject(); string accessLocation = str.GetString(); LOG.Info("access location: " + accessLocation); return(accessLocation); } return(null); } catch (IOException e) { throw new RuntimeException("IO error: " + e.Message, e); } }
private Admissions(Asn1Sequence seq) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) if (seq.Count > 3) { throw new ArgumentException(string.Concat((object)"Bad sequence size: ", (object)seq.Count)); } global::System.Collections.IEnumerator enumerator = seq.GetEnumerator(); enumerator.MoveNext(); Asn1Encodable asn1Encodable = (Asn1Encodable)enumerator.get_Current(); if (asn1Encodable is Asn1TaggedObject) { switch (((Asn1TaggedObject)asn1Encodable).TagNo) { case 0: admissionAuthority = GeneralName.GetInstance((Asn1TaggedObject)asn1Encodable, explicitly: true); break; case 1: namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)asn1Encodable, isExplicit: true); break; default: throw new ArgumentException(string.Concat((object)"Bad tag number: ", (object)((Asn1TaggedObject)asn1Encodable).TagNo)); } enumerator.MoveNext(); asn1Encodable = (Asn1Encodable)enumerator.get_Current(); } if (asn1Encodable is Asn1TaggedObject) { int tagNo = ((Asn1TaggedObject)asn1Encodable).TagNo; if (tagNo != 1) { throw new ArgumentException(string.Concat((object)"Bad tag number: ", (object)((Asn1TaggedObject)asn1Encodable).TagNo)); } namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)asn1Encodable, isExplicit: true); enumerator.MoveNext(); asn1Encodable = (Asn1Encodable)enumerator.get_Current(); } professionInfos = Asn1Sequence.GetInstance(asn1Encodable); if (enumerator.MoveNext()) { throw new ArgumentException("Bad object encountered: " + Platform.GetTypeName(enumerator.get_Current())); } }
/// <summary> ///Basic constructor - specify the contents of the PKIArchiveControl structure. /// </summary> /// <param name="privateKeyInfo">the private key to be archived.</param> /// <param name="generalName">the general name to be associated with the private key.</param> /// public PkiArchiveControlBuilder(PrivateKeyInfo privateKeyInfo, GeneralName generalName) { EncKeyWithID encKeyWithID = new EncKeyWithID(privateKeyInfo, generalName); try { this.keyContent = new CmsProcessableByteArray(CrmfObjectIdentifiers.id_ct_encKeyWithID, encKeyWithID.GetEncoded()); } catch (IOException e) { throw new InvalidOperationException("unable to encode key and general name info", e); } this.envGen = new CmsEnvelopedDataGenerator(); }
public void AddOcspPoints() { var accessDescriptions = new List <Asn1Encodable>(); foreach (var endpoint in OcspEndpoints) { GeneralName generalName = new GeneralName(GeneralName.UniformResourceIdentifier, new DerIA5String(endpoint)); var accessDescription = new AccessDescription(X509ObjectIdentifiers.OcspAccessMethod, generalName); accessDescriptions.Add(accessDescription); } var seq = new DerSequence(accessDescriptions.ToArray()); certificateGenerator.AddExtension(X509Extensions.AuthorityInfoAccess, false, seq); }
private EncKeyWithID(Asn1Sequence seq) { this.privKeyInfo = PrivateKeyInfo.GetInstance(seq[0]); if (seq.Count <= 1) { this.identifier = null; return; } if (!(seq[1] is DerUtf8String)) { this.identifier = GeneralName.GetInstance(seq[1]); return; } this.identifier = seq[1]; }
private static List <String> GetCrlDistribtionPoints(CrlDistPoint crldp) { List <String> certDpUrlLst = new List <string>(); DistributionPoint[] dpLst = crldp.GetDistributionPoints(); foreach (DistributionPoint p in dpLst) { GeneralName[] names = GeneralNames.GetInstance(p.DistributionPointName.Name).GetNames(); foreach (GeneralName n in names) { certDpUrlLst.Add(GeneralName.GetInstance(n).Name.ToString()); } } return(certDpUrlLst); }
private GeneralSubtree(Asn1Sequence seq) { baseName = GeneralName.GetInstance(seq[0]); switch (seq.Count) { case 1: break; case 2: { Asn1TaggedObject instance3 = Asn1TaggedObject.GetInstance(seq[1]); switch (instance3.TagNo) { case 0: minimum = DerInteger.GetInstance(instance3, isExplicit: false); break; case 1: maximum = DerInteger.GetInstance(instance3, isExplicit: false); break; default: throw new ArgumentException("Bad tag number: " + instance3.TagNo); } break; } case 3: { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[1]); if (instance.TagNo != 0) { throw new ArgumentException("Bad tag number for 'minimum': " + instance.TagNo); } minimum = DerInteger.GetInstance(instance, isExplicit: false); Asn1TaggedObject instance2 = Asn1TaggedObject.GetInstance(seq[2]); if (instance2.TagNo != 1) { throw new ArgumentException("Bad tag number for 'maximum': " + instance2.TagNo); } maximum = DerInteger.GetInstance(instance2, isExplicit: false); break; } default: throw new ArgumentException("Bad sequence size: " + seq.Count); } }
private Target(Asn1TaggedObject tagObj) { switch (tagObj.TagNo) { case 0: targetName = GeneralName.GetInstance(tagObj, explicitly: true); break; case 1: targetGroup = GeneralName.GetInstance(tagObj, explicitly: true); break; default: throw new ArgumentException("unknown tag: " + tagObj.TagNo); } }