PkiArchiveOptions
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Asn1.Crmf
{
public class PkiArchiveOptions : Asn1Encodable, IAsn1Choice
{
public const int encryptedPrivKey = 0;
public const int keyGenParameters = 1;
public const int archiveRemGenPrivKey = 2;
private readonly Asn1Encodable value;
public virtual int Type {
get {
if (value is EncryptedKey)
return 0;
if (value is Asn1OctetString)
return 1;
return 2;
}
}
public virtual Asn1Encodable Value => value;
public static PkiArchiveOptions GetInstance(object obj)
{
PkiArchiveOptions pkiArchiveOptions = obj as PkiArchiveOptions;
if (pkiArchiveOptions != null)
return pkiArchiveOptions;
Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject;
if (asn1TaggedObject != null)
return new PkiArchiveOptions(Asn1Utilities.CheckContextTagClass(asn1TaggedObject));
throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj");
}
private PkiArchiveOptions(Asn1TaggedObject tagged)
{
switch (tagged.TagNo) {
case 0:
value = EncryptedKey.GetInstance(tagged.GetExplicitBaseObject());
break;
case 1:
value = Asn1OctetString.GetInstance(tagged, false);
break;
case 2:
value = DerBoolean.GetInstance(tagged, false);
break;
default:
throw new ArgumentException("unknown tag number: " + tagged.TagNo.ToString(), "tagged");
}
}
public PkiArchiveOptions(EncryptedKey encKey)
{
value = encKey;
}
public PkiArchiveOptions(Asn1OctetString keyGenParameters)
{
value = keyGenParameters;
}
public PkiArchiveOptions(bool archiveRemGenPrivKey)
{
value = DerBoolean.GetInstance(archiveRemGenPrivKey);
}
public override Asn1Object ToAsn1Object()
{
if (value is EncryptedKey)
return new DerTaggedObject(true, 0, value);
if (value is Asn1OctetString)
return new DerTaggedObject(false, 1, value);
return new DerTaggedObject(false, 2, value);
}
}
}