====== XAdES İmza Özellikleri ======
XAdES formatındaki imzalara standartlarda belirtilen imza özellikleri eklenebilir.
Kodları ''tr.gov.tubitak.uekae.esya.api.xades.example.attributes'' paketinin altında bulabilirsiniz.
===== İmza Zamanı =====
İmzacı tarafından belirtilen imza zamanını imzaya ekler.
''SigningTimeAttribute'' sınıfına göz atabilirsiniz.
// create context with working directory
Context context = createContext();
// create signature according to context,
// with default type (XADES_BES)
XMLSignature signature = new XMLSignature(context);
// add document as reference, but do not embed it
// into the signature (embed=false)
signature.addDocument("./sample.txt", "text/plain", false);
signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256);
// false-true gets non-qualified certificates while true-false gets qualified ones
X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false);
// add certificate to show who signed the document
signature.addKeyInfo(new ECertificate(cert.getEncoded()));
// add signing time
signature.getQualifyingProperties().getSignedSignatureProperties().setSigningTime(getTime());
// now sign it by using smart card
signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert));
signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));
===== İmza Üretim Yeri =====
İmzanın üretildiği yeri belirtmek için kullanılır.
''SignatureProductionPlaceAttribute'' sınıfına göz atabilirsiniz.
// add signature production place
signature.getQualifyingProperties().getSignedSignatureProperties().setSignatureProductionPlace(
new SignatureProductionPlace(context, "Istanbul", "Marmara", "34470", "Turkey"));
===== İmzacı Rolü =====
İmza sahibi hakkında bilgi vermek için kullanılır.
''SignerRoleAttribute'' sınıfına göz atabilirsiniz.
// add signer role
signature.getQualifyingProperties().getSignedSignatureProperties().setSignerRole(
new SignerRole(context, new ClaimedRole[]{new ClaimedRole(context, "Manager")}));
===== Döküman Tipi =====
İmzalanan dökümanın tipi hakkında bilgi vermek için kullanılır.
''CommitmentTypeIndicationAttribute'' sınıfına göz atılabilir.
// create context with working directory
Context context = createContext();
// create signature according to context,
// with default type (XADES_BES)
XMLSignature signature = new XMLSignature(context);
// add document
String ref1 = "#"+signature.addDocument("./sample.txt", "text/plain", true);
String objId2 = signature.addPlainObject("Test data 1.", "text/plain", null);
String ref2 = "#"+signature.addDocument("#"+objId2, null, false);
signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256);
// false-true gets non-qualified certificates while true-false gets qualified ones
X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false);
// add certificate to show who signed the document
signature.addKeyInfo(new ECertificate(cert.getEncoded()));
// add commitment type indication
signature.getQualifyingProperties().getSignedProperties().createOrGetSignedDataObjectProperties().
addCommitmentTypeIndication(createTestCTI(context,ref1,ref2));
// now sign it by using smart card
signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert));
signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));
===== Bütün Dökümanlar İçin Zaman Damgası =====
Bütün dökümanlara için zaman damgası alınması için kullanılır.
''AllDataObjectsTimeStampAttribute'' sınıfına göz atabilirsiniz.
// add all data objects timestamp
signature.getQualifyingProperties().getSignedProperties().createOrGetSignedDataObjectProperties().
addAllDataObjectsTimeStamp(new AllDataObjectsTimeStamp(context,signature));
===== Dökümanlar İçin Ayrı Ayrı Zaman Damgası =====
Dökümanlara ayrı zaman damgaları almak için kullanılır.
''IndividualDataObjectTimeStampAttribute'' sınıfına göz atabilirsiniz.
// create context with working directory
Context context = createContext();
// create signature according to context,
// with default type (XADES_BES)
XMLSignature signature = new XMLSignature(context);
// add document into the signature and get the reference
String ref1 = "#" + signature.addDocument("./sample.txt", "text/plain", true);
// add another object
String objId2 = signature.addPlainObject("Test Data 1", "text/plain", null);
String ref2 = "#" + signature.addDocument("#"+objId2, null, false);
signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256);
// false-true gets non-qualified certificates while true-false gets qualified ones
X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false);
// add certificate to show who signed the document
signature.addKeyInfo(new ECertificate(cert.getEncoded()));
// create new individual data objects timestamp structure
IndividualDataObjectsTimeStamp timestamp = new IndividualDataObjectsTimeStamp(context);
// add objects to timestamp structure
timestamp.addInclude(new Include(context, ref1, Boolean.TRUE));
timestamp.addInclude(new Include(context, ref2, Boolean.TRUE));
// get encapsulated timestamp to individual data objects timestamp
timestamp.addEncapsulatedTimeStamp(signature);
// add individual data objects timestamp to signature
signature.getQualifyingProperties().getSignedProperties().createOrGetSignedDataObjectProperties().
addIndividualDataObjectsTimeStamp(timestamp);
// optional - add timestamp validation data
signature.addTimeStampValidationData(timestamp, Calendar.getInstance());
// now sign it by using smart card
signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert));
signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));