init commit
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using Org.BouncyCastle.Utilities;
|
||||
|
||||
namespace Org.BouncyCastle.Asn1.Cms;
|
||||
|
||||
public class RecipientInfo : Asn1Encodable, IAsn1Choice
|
||||
{
|
||||
internal Asn1Encodable info;
|
||||
|
||||
public DerInteger Version
|
||||
{
|
||||
get
|
||||
{
|
||||
if (info is Asn1TaggedObject)
|
||||
{
|
||||
Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)info;
|
||||
return asn1TaggedObject.TagNo switch
|
||||
{
|
||||
1 => KeyAgreeRecipientInfo.GetInstance(asn1TaggedObject, explicitly: false).Version,
|
||||
2 => GetKekInfo(asn1TaggedObject).Version,
|
||||
3 => PasswordRecipientInfo.GetInstance(asn1TaggedObject, explicitly: false).Version,
|
||||
4 => new DerInteger(0),
|
||||
_ => throw new InvalidOperationException("unknown tag"),
|
||||
};
|
||||
}
|
||||
return KeyTransRecipientInfo.GetInstance(info).Version;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsTagged => info is Asn1TaggedObject;
|
||||
|
||||
public Asn1Encodable Info
|
||||
{
|
||||
get
|
||||
{
|
||||
if (info is Asn1TaggedObject)
|
||||
{
|
||||
Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)info;
|
||||
return asn1TaggedObject.TagNo switch
|
||||
{
|
||||
1 => KeyAgreeRecipientInfo.GetInstance(asn1TaggedObject, explicitly: false),
|
||||
2 => GetKekInfo(asn1TaggedObject),
|
||||
3 => PasswordRecipientInfo.GetInstance(asn1TaggedObject, explicitly: false),
|
||||
4 => OtherRecipientInfo.GetInstance(asn1TaggedObject, explicitly: false),
|
||||
_ => throw new InvalidOperationException("unknown tag"),
|
||||
};
|
||||
}
|
||||
return KeyTransRecipientInfo.GetInstance(info);
|
||||
}
|
||||
}
|
||||
|
||||
public RecipientInfo(KeyTransRecipientInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public RecipientInfo(KeyAgreeRecipientInfo info)
|
||||
{
|
||||
this.info = new DerTaggedObject(explicitly: false, 1, info);
|
||||
}
|
||||
|
||||
public RecipientInfo(KekRecipientInfo info)
|
||||
{
|
||||
this.info = new DerTaggedObject(explicitly: false, 2, info);
|
||||
}
|
||||
|
||||
public RecipientInfo(PasswordRecipientInfo info)
|
||||
{
|
||||
this.info = new DerTaggedObject(explicitly: false, 3, info);
|
||||
}
|
||||
|
||||
public RecipientInfo(OtherRecipientInfo info)
|
||||
{
|
||||
this.info = new DerTaggedObject(explicitly: false, 4, info);
|
||||
}
|
||||
|
||||
public RecipientInfo(Asn1Object info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public static RecipientInfo GetInstance(object o)
|
||||
{
|
||||
if (o == null || o is RecipientInfo)
|
||||
{
|
||||
return (RecipientInfo)o;
|
||||
}
|
||||
if (o is Asn1Sequence)
|
||||
{
|
||||
return new RecipientInfo((Asn1Sequence)o);
|
||||
}
|
||||
if (o is Asn1TaggedObject)
|
||||
{
|
||||
return new RecipientInfo((Asn1TaggedObject)o);
|
||||
}
|
||||
throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(o));
|
||||
}
|
||||
|
||||
private KekRecipientInfo GetKekInfo(Asn1TaggedObject o)
|
||||
{
|
||||
return KekRecipientInfo.GetInstance(o, o.IsExplicit());
|
||||
}
|
||||
|
||||
public override Asn1Object ToAsn1Object()
|
||||
{
|
||||
return info.ToAsn1Object();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user