111 lines
3.9 KiB
C#
111 lines
3.9 KiB
C#
using System;
|
|
using Org.BouncyCastle.Asn1;
|
|
using Org.BouncyCastle.Asn1.Crmf;
|
|
using Org.BouncyCastle.Asn1.X509;
|
|
|
|
namespace VipNetExtract
|
|
{
|
|
class VipNetKeyInfo : Asn1Encodable
|
|
{
|
|
public VipNetKeyInfo(Asn1Sequence seq)
|
|
{
|
|
RawData = seq.GetEncoded();
|
|
KeyClass = (DerInteger)seq[0];
|
|
KeyType = (DerInteger)seq[1];
|
|
|
|
for (int i = 2; i < seq.Count; ++i) {
|
|
if (seq[i] is Asn1TaggedObject tag) {
|
|
switch (tag.TagNo) {
|
|
case 0:
|
|
Algorithm = AlgorithmIdentifier.GetInstance(tag.GetObject());
|
|
break;
|
|
case 1:
|
|
SerialNumber = Asn1OctetString.GetInstance(tag.GetObject());
|
|
break;
|
|
case 2:
|
|
AddSerialNumber = Asn1OctetString.GetInstance(tag.GetObject());
|
|
break;
|
|
case 3:
|
|
CertSerialNumber = Asn1OctetString.GetInstance(tag.GetObject());
|
|
break;
|
|
case 4:
|
|
SubjectUID = Asn1OctetString.GetInstance(tag.GetObject());
|
|
break;
|
|
case 5:
|
|
RecipientUID = Asn1OctetString.GetInstance(tag.GetObject());
|
|
break;
|
|
case 6:
|
|
Validity = KeyValidity.GetInstance(tag.GetObject());
|
|
break;
|
|
case 7:
|
|
KeyUID = DerBitString.GetInstance(tag.GetObject());
|
|
break;
|
|
case 10:
|
|
Flags = DerInteger.GetInstance(tag.GetObject());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
internal byte[] RawData { get; }
|
|
|
|
public DerInteger KeyClass { get; }
|
|
public DerInteger KeyType { get; }
|
|
public AlgorithmIdentifier Algorithm { get; }
|
|
public Asn1OctetString SerialNumber { get; }
|
|
public Asn1OctetString AddSerialNumber { get; }
|
|
public Asn1OctetString CertSerialNumber { get; }
|
|
public Asn1OctetString SubjectUID { get; }
|
|
public Asn1OctetString RecipientUID { get; }
|
|
public KeyValidity Validity { get; }
|
|
public DerBitString KeyUID { get; }
|
|
public DerInteger Flags { get; }
|
|
|
|
public override Asn1Object ToAsn1Object()
|
|
{
|
|
var vec = new Asn1EncodableVector(KeyClass, KeyType);
|
|
|
|
if (Algorithm != null)
|
|
vec.Add(new DerTaggedObject(0, Algorithm));
|
|
|
|
if (SerialNumber != null)
|
|
vec.Add(new DerTaggedObject(1, SerialNumber));
|
|
|
|
if (AddSerialNumber != null)
|
|
vec.Add(new DerTaggedObject(2, AddSerialNumber));
|
|
|
|
if (CertSerialNumber != null)
|
|
vec.Add(new DerTaggedObject(3, CertSerialNumber));
|
|
|
|
if (SubjectUID != null)
|
|
vec.Add(new DerTaggedObject(4, SubjectUID));
|
|
|
|
if (RecipientUID != null)
|
|
vec.Add(new DerTaggedObject(5, RecipientUID));
|
|
|
|
if (Validity != null)
|
|
vec.Add(new DerTaggedObject(6, Validity));
|
|
|
|
if (KeyUID != null)
|
|
vec.Add(new DerTaggedObject(7, KeyUID));
|
|
|
|
if (Flags != null)
|
|
vec.Add(new DerTaggedObject(10, Flags));
|
|
|
|
return new DerSequence(vec);
|
|
}
|
|
|
|
public static VipNetKeyInfo GetInstance(object obj)
|
|
{
|
|
if (obj is VipNetKeyInfo keyInfo)
|
|
return keyInfo;
|
|
|
|
return new VipNetKeyInfo(Asn1Sequence.GetInstance(obj));
|
|
}
|
|
|
|
public static VipNetKeyInfo GetInstance(Asn1TaggedObject obj, bool explicitly)
|
|
=> GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
|
|
}
|
|
}
|