/// <summary> /// Used to create the extension from typed model /// </summary> /// <param name="isCompliant"><b>QcCompliant</b>. True is the cert is European Qualified Certificate otherwize false</param> /// <param name="limit"><b>QcLimitValue</b>. Monetary value </param> /// <param name="retentionPeriod"><b>QcRetentionPeriod</b></param> /// <param name="isQSCD"><b>QcSSCD</b></param> /// <param name="pdsLocations"><b>QcPds</b></param> /// <param name="type"><b>QcType</b></param> /// <param name="psd2"><b>PSD2 QcStatement</b></param> /// <param name="critical"></param> public QualifiedCertificateStatementsExtension(bool isCompliant, QcMonetaryValue limit, int retentionPeriod, bool isQSCD, IEnumerable <PdsLocation> pdsLocations, QcTypeIdentifiers type, Psd2Attributes psd2, bool critical) { Oid = new Oid(Oid_QC_Statements, "Qualified Certificate Statements"); Critical = critical; var statements = new List <DerAsnSequence>(); if (isCompliant) { statements.Add(new QcComplianceStatement()); } if (retentionPeriod > 0) { statements.Add(new QcRetentionPeriodStatement(retentionPeriod)); } if (limit != null) { statements.Add(new QcLimitValueStatement(limit)); } if (isQSCD) { statements.Add(new QcSSCDStatement()); } statements.Add(new QcTypeStatement(type)); if (pdsLocations?.Any() == true) { statements.Add(new QcPdsStatement(pdsLocations)); } if (psd2 != null) { statements.Add(new Psd2QcStatement(psd2)); } RawData = DerConvert.Encode(new DerAsnSequence(statements.ToArray())).ToArray(); _Statements = new QualifiedCertificateStatements(isCompliant, limit, retentionPeriod, isQSCD, pdsLocations, type, psd2); _decoded = true; }
private void DecodeExtension() { _Statements = new QualifiedCertificateStatements(); var root = DerConvert.Decode(RawData) as DerAsnSequence; if (root.Value[0] is DerAsnSequence) { foreach (var sequence in root.Value.OfType <DerAsnSequence>()) { if (sequence.Value[0] is DerAsnObjectIdentifier oid) { switch (oid.Value.ToOidString()) { case QcComplianceStatement.Oid_QcCompliance: _Statements.IsCompliant = new QcComplianceStatement(sequence.Value).Extract(); break; case QcLimitValueStatement.Oid_QcLimitValue: _Statements.LimitValue = new QcLimitValueStatement(sequence.Value).Extract(); break; case QcRetentionPeriodStatement.Oid_QcRetentionPeriod: _Statements.RetentionPeriod = new QcRetentionPeriodStatement(sequence.Value).Extract(); break; case QcSSCDStatement.Oid_QcSSCD: _Statements.IsQSCD = new QcSSCDStatement(sequence.Value).Extract(); break; case QcPdsStatement.Oid_QcPds: _Statements.PdsLocations = new QcPdsStatement(sequence.Value).Extract(); break; case QcTypeStatement.Oid_QcType: _Statements.Type = new QcTypeStatement(sequence.Value).Extract(); break; case Psd2QcStatement.Oid_PSD2_QcStatement: _Statements.Psd2Type = new Psd2QcStatement(sequence.Value).Extract(); break; default: break; } } } } else if (root.Value[0] is DerAsnObjectIdentifier oid && Psd2QcStatement.Oid_PSD2_QcStatement.Equals(oid.Value.ToOidString())) { _Statements.Psd2Type = new Psd2QcStatement(root.Value).Extract(); } _decoded = true; }