80 lines
1.9 KiB
C#
80 lines
1.9 KiB
C#
using System;
|
|
using Org.BouncyCastle.Asn1.X509;
|
|
using Org.BouncyCastle.Utilities;
|
|
|
|
namespace Org.BouncyCastle.Asn1.Crmf;
|
|
|
|
public class PopoSigningKeyInput : Asn1Encodable
|
|
{
|
|
private readonly GeneralName sender;
|
|
|
|
private readonly PKMacValue publicKeyMac;
|
|
|
|
private readonly SubjectPublicKeyInfo publicKey;
|
|
|
|
public virtual GeneralName Sender => sender;
|
|
|
|
public virtual PKMacValue PublicKeyMac => publicKeyMac;
|
|
|
|
public virtual SubjectPublicKeyInfo PublicKey => publicKey;
|
|
|
|
private PopoSigningKeyInput(Asn1Sequence seq)
|
|
{
|
|
Asn1Encodable asn1Encodable = seq[0];
|
|
if (asn1Encodable is Asn1TaggedObject)
|
|
{
|
|
Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)asn1Encodable;
|
|
if (asn1TaggedObject.TagNo != 0)
|
|
{
|
|
throw new ArgumentException("Unknown authInfo tag: " + asn1TaggedObject.TagNo, "seq");
|
|
}
|
|
sender = GeneralName.GetInstance(asn1TaggedObject.GetObject());
|
|
}
|
|
else
|
|
{
|
|
publicKeyMac = PKMacValue.GetInstance(asn1Encodable);
|
|
}
|
|
publicKey = SubjectPublicKeyInfo.GetInstance(seq[1]);
|
|
}
|
|
|
|
public static PopoSigningKeyInput GetInstance(object obj)
|
|
{
|
|
if (obj is PopoSigningKeyInput)
|
|
{
|
|
return (PopoSigningKeyInput)obj;
|
|
}
|
|
if (obj is Asn1Sequence)
|
|
{
|
|
return new PopoSigningKeyInput((Asn1Sequence)obj);
|
|
}
|
|
throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj");
|
|
}
|
|
|
|
public PopoSigningKeyInput(GeneralName sender, SubjectPublicKeyInfo spki)
|
|
{
|
|
this.sender = sender;
|
|
publicKey = spki;
|
|
}
|
|
|
|
public PopoSigningKeyInput(PKMacValue pkmac, SubjectPublicKeyInfo spki)
|
|
{
|
|
publicKeyMac = pkmac;
|
|
publicKey = spki;
|
|
}
|
|
|
|
public override Asn1Object ToAsn1Object()
|
|
{
|
|
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector();
|
|
if (sender != null)
|
|
{
|
|
asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 0, sender));
|
|
}
|
|
else
|
|
{
|
|
asn1EncodableVector.Add(publicKeyMac);
|
|
}
|
|
asn1EncodableVector.Add(publicKey);
|
|
return new DerSequence(asn1EncodableVector);
|
|
}
|
|
}
|