64 lines
2.0 KiB
C#
64 lines
2.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Org.BouncyCastle.Asn1;
|
|
using Org.BouncyCastle.Asn1.Cms;
|
|
using Org.BouncyCastle.Utilities;
|
|
|
|
namespace Org.BouncyCastle.Cms;
|
|
|
|
public class DefaultSignedAttributeTableGenerator : CmsAttributeTableGenerator
|
|
{
|
|
private readonly IDictionary table;
|
|
|
|
public DefaultSignedAttributeTableGenerator()
|
|
{
|
|
table = Platform.CreateHashtable();
|
|
}
|
|
|
|
public DefaultSignedAttributeTableGenerator(AttributeTable attributeTable)
|
|
{
|
|
if (attributeTable != null)
|
|
{
|
|
table = attributeTable.ToDictionary();
|
|
}
|
|
else
|
|
{
|
|
table = Platform.CreateHashtable();
|
|
}
|
|
}
|
|
|
|
protected virtual Hashtable createStandardAttributeTable(IDictionary parameters)
|
|
{
|
|
Hashtable hashtable = new Hashtable(table);
|
|
DoCreateStandardAttributeTable(parameters, hashtable);
|
|
return hashtable;
|
|
}
|
|
|
|
private void DoCreateStandardAttributeTable(IDictionary parameters, IDictionary std)
|
|
{
|
|
if (parameters.Contains(CmsAttributeTableParameter.ContentType) && !std.Contains(CmsAttributes.ContentType))
|
|
{
|
|
DerObjectIdentifier obj = (DerObjectIdentifier)parameters[CmsAttributeTableParameter.ContentType];
|
|
Org.BouncyCastle.Asn1.Cms.Attribute attribute = new Org.BouncyCastle.Asn1.Cms.Attribute(CmsAttributes.ContentType, new DerSet(obj));
|
|
std[attribute.AttrType] = attribute;
|
|
}
|
|
if (!std.Contains(CmsAttributes.SigningTime))
|
|
{
|
|
Org.BouncyCastle.Asn1.Cms.Attribute attribute2 = new Org.BouncyCastle.Asn1.Cms.Attribute(CmsAttributes.SigningTime, new DerSet(new Time(DateTime.UtcNow)));
|
|
std[attribute2.AttrType] = attribute2;
|
|
}
|
|
if (!std.Contains(CmsAttributes.MessageDigest))
|
|
{
|
|
byte[] str = (byte[])parameters[CmsAttributeTableParameter.Digest];
|
|
Org.BouncyCastle.Asn1.Cms.Attribute attribute3 = new Org.BouncyCastle.Asn1.Cms.Attribute(CmsAttributes.MessageDigest, new DerSet(new DerOctetString(str)));
|
|
std[attribute3.AttrType] = attribute3;
|
|
}
|
|
}
|
|
|
|
public virtual AttributeTable GetAttributes(IDictionary parameters)
|
|
{
|
|
IDictionary attrs = createStandardAttributeTable(parameters);
|
|
return new AttributeTable(attrs);
|
|
}
|
|
}
|