İmzaya adres bilgisi, imza zamanı bilgisi gibi opsiyonel bilgileri özellik olarak ekleyebilirsiniz. API'de tanımlı olan, kullanabileceğiniz özellikler;
 
	
		|  SigningTimeAttr  |  Beyan edilen imza zamanını içerir. Ancak beyan edilen bu tarih güvenilir bir tarih olmadığından, imzanın bu tarihte atıldığını garanti etmez, bilgi amaçlı kullanılabilir.   | 
	
	
		|  SignerLocationAttr  |  İmzacının adresi hakkında bilgiler içerir. İmzacının ülkesi, şehri ve posta adresi belirtilebilir. Bilgi amaçlı olduğundan bu bilgilerden bazılarının değeri null olabilir.   | 
	
	
		|  CommitmentTypeIndicationAttr  |  İmza amacını belirtmek için kullanılabilir. İmzalanan verinin tarafınızdan oluşturulmuş olduğunu, sadece imzanın içeriğini onayladığınızı vs. belirtebilirsiniz. CommitmentType sınıfında tanımlanmış aşağıdaki değerler verilebilir.   | 
	
	
		|  RECEIPT  |  İmza sahibinin imzalı belgeyi aldığını (bir yerden geliyor ise) belirtmek için kullanılır.   |  | 
	
	
		|  SENDER  |  İmzalı veriyi gönderenin (imzalı veri bir yere gönderiliyor ise) veriyi gönderen kişi olduğunu belirtmek için kullanılır. Yani imza sahibinin gönderilen verinin içeriğini onayladığı anlamına gelmez sadece bunu ben gönderdim demektir.   |  | 
	
	
		|  APPROVAL  |  İmza sahibinin belgenin içeriğini onayladığını belirtmek için kullanılır.   |  | 
	
	
		|  APPROVAL, DELIVERY  |  Bir mesaj gönderildiğinde, bu mesajın karşı tarafa iletildiğini belirtmek için kullanılır. Bu tür imzalar genelde güvenilir servis sağlayıcılar (TSP - Trusted Service Provider) tarafından kullanılır.   |  | 
	
	
		|  CREATION  |  İmza sahibinin belgeyi oluşturan kişi olduğunu belirtmek için kullanılır. Belge içeriğini onayladığı veya gönderdiği anlamına gelmez.   |  | 
	
	
		|  ORIGIN  |  İmza sahibinin belgeyi oluşturduğunu, içeriğini onayladığını ve gönderenin de kendisi olduğunu belirtmek için kullanılır.   |  | 
	
	
		|  ContentIdentifierAttr  |  İmzalanan içeriği tanımlamak için kullanılır. Özellikle ayrık imzada, imzalanan dökümanı imza ile eşleştrimek için kullanılabilir. byte array olacak şekilde herhangi bir değer olabilir.   | 
	
	
		|  ContentHintsAttr  |  İmzalanan içerik hakkında alıcıya fikir vermek amacıyla kullanılır.   | 
	
	
		|  SignerAttributesAttr  |  İmzalayan kişi hakkında bilgiler içerir. İmzalayanın iddia ettiği özellikleri veya  imzalayanın yetki sertifikasını barındırabilir.   | 
	
 
 
İmza atma sırasında imzaya eklenmek istenen özellikler bir listeye konularak kütüphaneye verilir. Eklenecek alanın değeri, alanın yaratılması sırasında kurucu fonksiyona verilir. Aşağıdaki örnekteki gibi imzaya eklenirler ve imzadan okunurlar.
<sxh java;title:Java>
List<IAttribute> optionalAttributes = new ArrayList<IAttribute>();
optionalAttributes.add(new SigningTimeAttr(Calendar.getInstance()));
optionalAttributes.add(new SignerLocationAttr("TURKEY", "KOCAELİ", new String[]{"TUBITAK UEKAE","GEBZE"}));
optionalAttributes.add(new CommitmentTypeIndicationAttr(CommitmentType.CREATION));
optionalAttributes.add(new ContentIdentifierAttr("PL123456789".getBytes("ASCII")));
bs.addSigner(ESignatureType.TYPE_BES, cert , signer, optionalAttributes, params);
SmartCardManager.getInstance().logout();
reading Attributes
BaseSignedData bs2 = new BaseSignedData(bs.getEncoded());
List<EAttribute> attrs ;
Signer aSigner = bs2.getSignerList().get(0);
attrs = aSigner.getAttribute(SigningTimeAttr.OID);
Calendar st = SigningTimeAttr.toTime(attrs.get(0));
System.out.println("Signing time: " + st.getTime());
attrs = aSigner.getAttribute(SignerLocationAttr.OID);
ESignerLocation sl = SignerLocationAttr.toSignerLocation(attrs.get(0));
StringBuilder sb = new StringBuilder();
for (String address : sl.getPostalAddress()) 
sb.append(" " + address);
System.out.println("\nCountry: " + sl.getCountry() +
		"\nCity: " + sl.getLocalityName() +"\nAdress: "	+ sb);
attrs = aSigner.getAttribute(ContentIdentifierAttr.OID);
byte [] ci = ContentIdentifierAttr.toIdentifier(attrs.get(0));
System.out.println("\n" + Arrays.toString(ci));
attrs = aSigner.getAttribute(CommitmentTypeIndicationAttr.OID);
CommitmentType ct = CommitmentTypeIndicationAttr.toCommitmentType(attrs.get(0));
System.out.println("\n" + ct);
</sxh>
<sxh csharp;title:C#>
List<IAttribute> optionalAttributes = new List<IAttribute>();
optionalAttributes.Add(new SigningTimeAttr(DateTime.UtcNow));
optionalAttributes.Add(new SignerLocationAttr("TURKEY", "KOCAELI", 
new String[] { "TUBITAK UEKAE", "GEBZE" }));
optionalAttributes.Add(new CommitmentTypeIndicationAttr(CommitmentType.CREATION));
optionalAttributes.Add(new ContentIdentifierAttr(
ASCIIEncoding.ASCII.GetBytes("PL123456789")));
bs.addSigner(ESignatureType.TYPE_BES, cert, signer, optionalAttributes, params_);
		
SmartCardManager.getInstance().logout();
		 
reading Attributes
BaseSignedData bs2 = new BaseSignedData(bs.getEncoded());
List<EAttribute> attrs;
Signer aSigner = bs2.getSignerList()[0];
attrs = aSigner.getAttribute(SigningTimeAttr.OID);
DateTime? st = SigningTimeAttr.toTime(attrs[0]);
Console.WriteLine("Signing time: " + st.Value.ToLocalTime().ToString());
attrs = aSigner.getAttribute(SignerLocationAttr.OID);
ESignerLocation sl = SignerLocationAttr.toSignerLocation(attrs[0]);
StringBuilder sb = new StringBuilder();
foreach (String address in sl.getPostalAddress())
   sb.Append(" " + address);
 
Console.WriteLine("\nCountry: " + sl.getCountry() +
"\nCity: " + sl.getLocalityName() + "\nAdress: " + sb);
attrs = aSigner.getAttribute(ContentIdentifierAttr.OID);
byte[] ci = ContentIdentifierAttr.toIdentifier(attrs[0]);
Console.WriteLine("\n" + BitConverter.ToString(ci));
attrs = aSigner.getAttribute(CommitmentTypeIndicationAttr.OID);
CommitmentType ct = CommitmentTypeIndicationAttr.toCommitmentType(attrs[0]);
Console.WriteLine("\n" + ct);
</sxh>