279 lines
6.7 KiB
C#
279 lines
6.7 KiB
C#
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;
|
|
}
|
|
}
|