İ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.
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);
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);