using System; using System.Collections; using System.Runtime.InteropServices; using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms.Ecc; using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms { // Token: 0x0200177C RID: 6012 [Token(Token = "0x200177C")] [StructLayout(3)] internal class KeyAgreeRecipientInfoGenerator : RecipientInfoGenerator { // Token: 0x0600A274 RID: 41588 RVA: 0x0025D430 File Offset: 0x0025B630 [Token(Token = "0x600A274")] [Address(RVA = "0x3C1670", Offset = "0x3C0070", VA = "0x1803C1670")] internal KeyAgreeRecipientInfoGenerator() { } // Token: 0x17001974 RID: 6516 // (set) Token: 0x0600A275 RID: 41589 RVA: 0x0025D444 File Offset: 0x0025B644 [Token(Token = "0x17001974")] internal DerObjectIdentifier KeyAgreementOID { [Token(Token = "0x600A275")] [Address(RVA = "0x3C39B0", Offset = "0x3C23B0", VA = "0x1803C39B0")] set { this.keyAgreementOID = value; } } // Token: 0x17001975 RID: 6517 // (set) Token: 0x0600A276 RID: 41590 RVA: 0x0025D458 File Offset: 0x0025B658 [Token(Token = "0x17001975")] internal DerObjectIdentifier KeyEncryptionOID { [Token(Token = "0x600A276")] [Address(RVA = "0x3C1280", Offset = "0x3BFC80", VA = "0x1803C1280")] set { this.keyEncryptionOID = value; } } // Token: 0x17001976 RID: 6518 // (set) Token: 0x0600A277 RID: 41591 RVA: 0x0025D46C File Offset: 0x0025B66C [Token(Token = "0x17001976")] internal ICollection RecipientCerts { [Token(Token = "0x600A277")] [Address(RVA = "0x65F590", Offset = "0x65DF90", VA = "0x18065F590")] set { IList list = Platform.CreateArrayList(value); this.recipientCerts = list; } } // Token: 0x17001977 RID: 6519 // (set) Token: 0x0600A278 RID: 41592 RVA: 0x0025D488 File Offset: 0x0025B688 [Token(Token = "0x17001977")] internal AsymmetricCipherKeyPair SenderKeyPair { [Token(Token = "0x600A278")] [Address(RVA = "0x3C1270", Offset = "0x3BFC70", VA = "0x1803C1270")] set { this.senderKeyPair = value; } } // Token: 0x0600A279 RID: 41593 RVA: 0x0025D49C File Offset: 0x0025B69C [Token(Token = "0x600A279")] [Address(RVA = "0x65E7C0", Offset = "0x65D1C0", VA = "0x18065E7C0", Slot = "4")] public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random) { for (;;) { int num = 0; byte[] key = contentEncryptionKey.GetKey(); AsymmetricCipherKeyPair asymmetricCipherKeyPair = this.senderKeyPair; AsymmetricKeyParameter publicParameter = asymmetricCipherKeyPair.publicParameter; AsymmetricKeyParameter privateParameter = asymmetricCipherKeyPair.privateParameter; OriginatorIdentifierOrKey originatorIdentifierOrKey = new OriginatorIdentifierOrKey(KeyAgreeRecipientInfoGenerator.CreateOriginatorPublicKey(publicParameter)); string identifier = this.keyAgreementOID.identifier; string ecmqvSha1Kdf = CmsEnvelopedGenerator.ECMqvSha1Kdf; if (identifier.Equals(ecmqvSha1Kdf)) { IAsymmetricCipherKeyPairGenerator keyPairGenerator = GeneratorUtilities.GetKeyPairGenerator(this.keyAgreementOID); if (publicParameter == 0 || publicParameter == 0) { goto IL_260; } int num2 = 0; if (num < num2) { num += num; num++; } int num3 = 0; if (num < num3) { num += num; num++; } OriginatorPublicKey originatorPublicKey; int num4; MQVuserKeyingMaterial mqvuserKeyingMaterial = new MQVuserKeyingMaterial(originatorPublicKey, num4); num4 = 0; DerOctetString derOctetString = new DerOctetString(mqvuserKeyingMaterial); if (num == 0) { } if (num == 0) { goto IL_254; } if (mqvuserKeyingMaterial == 0) { } if (mqvuserKeyingMaterial == 0) { goto IL_254; } if (privateParameter == 0) { } if (privateParameter == 0) { goto IL_254; } } Asn1Encodable[] array = new Asn1Encodable[2]; DerObjectIdentifier derObjectIdentifier = this.keyEncryptionOID; if (derObjectIdentifier != 0) { } array[0] = derObjectIdentifier; DerNull instance = DerNull.Instance; if (instance != 0) { } array[1] = instance; DerSequence derSequence = new DerSequence(array); AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(this.keyAgreementOID, derSequence); IList list = this.recipientCerts; Asn1EncodableVector asn1EncodableVector; if (asn1EncodableVector != 0) { if (asn1EncodableVector == 0) { } if (asn1EncodableVector != 0) { break; } } else { ArrayTypeMismatchException ex; if (ex != 0) { } if (num != -1) { } if (num == 0) { goto Block_9; } } } Asn1Object asn1Object; TbsCertificateStructure instance2 = TbsCertificateStructure.GetInstance(asn1Object); X509Name issuer = instance2.issuer; BigInteger value = instance2.serialNumber.Value; KeyAgreeRecipientIdentifier keyAgreeRecipientIdentifier = new KeyAgreeRecipientIdentifier(new IssuerAndSerialNumber(issuer, value)); string identifier2 = this.keyAgreementOID.identifier; string ecmqvSha1Kdf2 = CmsEnvelopedGenerator.ECMqvSha1Kdf; if (identifier2.Equals(ecmqvSha1Kdf2)) { } DerObjectIdentifier derObjectIdentifier2 = this.keyAgreementOID; string identifier3 = this.keyEncryptionOID.identifier; IBasicAgreement basicAgreementWithKdf = AgreementUtilities.GetBasicAgreementWithKdf(derObjectIdentifier2, identifier3); DerObjectIdentifier derObjectIdentifier3 = this.keyEncryptionOID; int num5 = 0; int defaultKeySize = GeneratorUtilities.GetDefaultKeySize(derObjectIdentifier3); num5 += defaultKeySize; byte[] array2; KeyParameter keyParameter = ParameterUtilities.CreateKeyParameter(this.keyEncryptionOID, array2); CmsEnvelopedHelper helper = KeyAgreeRecipientInfoGenerator.Helper; DerObjectIdentifier derObjectIdentifier4 = this.keyEncryptionOID; int num6 = 0; string identifier4 = derObjectIdentifier4.identifier; IWrapper wrapper = helper.CreateWrapper(identifier4); ParametersWithRandom parametersWithRandom = new ParametersWithRandom(keyParameter, num6); Asn1Encodable[] array3 = new Asn1Encodable[1]; DerOctetString derOctetString2; RecipientEncryptedKey recipientEncryptedKey = new RecipientEncryptedKey(keyAgreeRecipientIdentifier, derOctetString2); throw new ArrayTypeMismatchException(); Block_9: KeyAgreeRecipientInfo keyAgreeRecipientInfo; return new RecipientInfo(keyAgreeRecipientInfo); IL_254: throw new NullReferenceException(); IL_260: throw new NullReferenceException(); } // Token: 0x0600A27A RID: 41594 RVA: 0x0025D724 File Offset: 0x0025B924 [Token(Token = "0x600A27A")] [Address(RVA = "0x65E6A0", Offset = "0x65D0A0", VA = "0x18065E6A0")] private static OriginatorPublicKey CreateOriginatorPublicKey(AsymmetricKeyParameter publicKey) { SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey); Asn1Object asn1Object = subjectPublicKeyInfo.algID.ToAsn1Object(); byte[] octets = subjectPublicKeyInfo.keyData.GetOctets(); AlgorithmIdentifier algorithmIdentifier; return new OriginatorPublicKey(algorithmIdentifier, octets); } // Token: 0x04006AD9 RID: 27353 [Token(Token = "0x4006AD9")] private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance; // Token: 0x04006ADA RID: 27354 [global::Cpp2IlInjected.FieldOffset(Offset = "0x10")] [Token(Token = "0x4006ADA")] private DerObjectIdentifier keyAgreementOID; // Token: 0x04006ADB RID: 27355 [global::Cpp2IlInjected.FieldOffset(Offset = "0x18")] [Token(Token = "0x4006ADB")] private DerObjectIdentifier keyEncryptionOID; // Token: 0x04006ADC RID: 27356 [global::Cpp2IlInjected.FieldOffset(Offset = "0x20")] [Token(Token = "0x4006ADC")] private IList recipientCerts; // Token: 0x04006ADD RID: 27357 [global::Cpp2IlInjected.FieldOffset(Offset = "0x28")] [Token(Token = "0x4006ADD")] private AsymmetricCipherKeyPair senderKeyPair; } }