using System; using System.Security.Cryptography; namespace Mono.Security.X509 { // Token: 0x02000046 RID: 70 public class X509CertificateBuilder : X509Builder { // Token: 0x0600031A RID: 794 RVA: 0x000164A0 File Offset: 0x000146A0 public X509CertificateBuilder() : this(3) { } // Token: 0x0600031B RID: 795 RVA: 0x000164AC File Offset: 0x000146AC public X509CertificateBuilder(byte version) { if (version > 3) { throw new ArgumentException("Invalid certificate version"); } this.version = version; this.extensions = new X509ExtensionCollection(); } // Token: 0x170000A1 RID: 161 // (get) Token: 0x0600031C RID: 796 RVA: 0x000164E4 File Offset: 0x000146E4 // (set) Token: 0x0600031D RID: 797 RVA: 0x000164EC File Offset: 0x000146EC public byte Version { get { return this.version; } set { this.version = value; } } // Token: 0x170000A2 RID: 162 // (get) Token: 0x0600031E RID: 798 RVA: 0x000164F8 File Offset: 0x000146F8 // (set) Token: 0x0600031F RID: 799 RVA: 0x00016500 File Offset: 0x00014700 public byte[] SerialNumber { get { return this.sn; } set { this.sn = value; } } // Token: 0x170000A3 RID: 163 // (get) Token: 0x06000320 RID: 800 RVA: 0x0001650C File Offset: 0x0001470C // (set) Token: 0x06000321 RID: 801 RVA: 0x00016514 File Offset: 0x00014714 public string IssuerName { get { return this.issuer; } set { this.issuer = value; } } // Token: 0x170000A4 RID: 164 // (get) Token: 0x06000322 RID: 802 RVA: 0x00016520 File Offset: 0x00014720 // (set) Token: 0x06000323 RID: 803 RVA: 0x00016528 File Offset: 0x00014728 public DateTime NotBefore { get { return this.notBefore; } set { this.notBefore = value; } } // Token: 0x170000A5 RID: 165 // (get) Token: 0x06000324 RID: 804 RVA: 0x00016534 File Offset: 0x00014734 // (set) Token: 0x06000325 RID: 805 RVA: 0x0001653C File Offset: 0x0001473C public DateTime NotAfter { get { return this.notAfter; } set { this.notAfter = value; } } // Token: 0x170000A6 RID: 166 // (get) Token: 0x06000326 RID: 806 RVA: 0x00016548 File Offset: 0x00014748 // (set) Token: 0x06000327 RID: 807 RVA: 0x00016550 File Offset: 0x00014750 public string SubjectName { get { return this.subject; } set { this.subject = value; } } // Token: 0x170000A7 RID: 167 // (get) Token: 0x06000328 RID: 808 RVA: 0x0001655C File Offset: 0x0001475C // (set) Token: 0x06000329 RID: 809 RVA: 0x00016564 File Offset: 0x00014764 public AsymmetricAlgorithm SubjectPublicKey { get { return this.aa; } set { this.aa = value; } } // Token: 0x170000A8 RID: 168 // (get) Token: 0x0600032A RID: 810 RVA: 0x00016570 File Offset: 0x00014770 // (set) Token: 0x0600032B RID: 811 RVA: 0x00016578 File Offset: 0x00014778 public byte[] IssuerUniqueId { get { return this.issuerUniqueID; } set { this.issuerUniqueID = value; } } // Token: 0x170000A9 RID: 169 // (get) Token: 0x0600032C RID: 812 RVA: 0x00016584 File Offset: 0x00014784 // (set) Token: 0x0600032D RID: 813 RVA: 0x0001658C File Offset: 0x0001478C public byte[] SubjectUniqueId { get { return this.subjectUniqueID; } set { this.subjectUniqueID = value; } } // Token: 0x170000AA RID: 170 // (get) Token: 0x0600032E RID: 814 RVA: 0x00016598 File Offset: 0x00014798 public X509ExtensionCollection Extensions { get { return this.extensions; } } // Token: 0x0600032F RID: 815 RVA: 0x000165A0 File Offset: 0x000147A0 private ASN1 SubjectPublicKeyInfo() { ASN1 asn = new ASN1(48); if (this.aa is RSA) { asn.Add(PKCS7.AlgorithmIdentifier("1.2.840.113549.1.1.1")); RSAParameters rsaparameters = (this.aa as RSA).ExportParameters(false); ASN1 asn2 = new ASN1(48); asn2.Add(ASN1Convert.FromUnsignedBigInteger(rsaparameters.Modulus)); asn2.Add(ASN1Convert.FromUnsignedBigInteger(rsaparameters.Exponent)); asn.Add(new ASN1(this.UniqueIdentifier(asn2.GetBytes()))); } else { if (!(this.aa is DSA)) { throw new NotSupportedException("Unknown Asymmetric Algorithm " + this.aa.ToString()); } DSAParameters dsaparameters = (this.aa as DSA).ExportParameters(false); ASN1 asn3 = new ASN1(48); asn3.Add(ASN1Convert.FromUnsignedBigInteger(dsaparameters.P)); asn3.Add(ASN1Convert.FromUnsignedBigInteger(dsaparameters.Q)); asn3.Add(ASN1Convert.FromUnsignedBigInteger(dsaparameters.G)); asn.Add(PKCS7.AlgorithmIdentifier("1.2.840.10040.4.1", asn3)); ASN1 asn4 = asn.Add(new ASN1(3)); asn4.Add(ASN1Convert.FromUnsignedBigInteger(dsaparameters.Y)); } return asn; } // Token: 0x06000330 RID: 816 RVA: 0x000166F0 File Offset: 0x000148F0 private byte[] UniqueIdentifier(byte[] id) { ASN1 asn = new ASN1(3); byte[] array = new byte[id.Length + 1]; Buffer.BlockCopy(id, 0, array, 1, id.Length); asn.Value = array; return asn.GetBytes(); } // Token: 0x06000331 RID: 817 RVA: 0x00016728 File Offset: 0x00014928 protected override ASN1 ToBeSigned(string oid) { ASN1 asn = new ASN1(48); if (this.version > 1) { byte[] array = new byte[] { this.version - 1 }; ASN1 asn2 = asn.Add(new ASN1(160)); asn2.Add(new ASN1(2, array)); } asn.Add(new ASN1(2, this.sn)); asn.Add(PKCS7.AlgorithmIdentifier(oid)); asn.Add(X501.FromString(this.issuer)); ASN1 asn3 = asn.Add(new ASN1(48)); asn3.Add(ASN1Convert.FromDateTime(this.notBefore)); asn3.Add(ASN1Convert.FromDateTime(this.notAfter)); asn.Add(X501.FromString(this.subject)); asn.Add(this.SubjectPublicKeyInfo()); if (this.version > 1) { if (this.issuerUniqueID != null) { asn.Add(new ASN1(161, this.UniqueIdentifier(this.issuerUniqueID))); } if (this.subjectUniqueID != null) { asn.Add(new ASN1(161, this.UniqueIdentifier(this.subjectUniqueID))); } if (this.version > 2 && this.extensions.Count > 0) { asn.Add(new ASN1(163, this.extensions.GetBytes())); } } return asn; } // Token: 0x04000179 RID: 377 private byte version; // Token: 0x0400017A RID: 378 private byte[] sn; // Token: 0x0400017B RID: 379 private string issuer; // Token: 0x0400017C RID: 380 private DateTime notBefore; // Token: 0x0400017D RID: 381 private DateTime notAfter; // Token: 0x0400017E RID: 382 private string subject; // Token: 0x0400017F RID: 383 private AsymmetricAlgorithm aa; // Token: 0x04000180 RID: 384 private byte[] issuerUniqueID; // Token: 0x04000181 RID: 385 private byte[] subjectUniqueID; // Token: 0x04000182 RID: 386 private X509ExtensionCollection extensions; } }