İçindekiler

PAdES E-İmza Kütüphanesi

PAdES (Pdf Advanced Electronic Signatures) PDS ISO 32000-1 standardında nasıl imza atılması gerektiğini açıklayan ve ETSI tarafından TS 102 778 teknik spesifikasyonu döküman seti ile açıklanmış imza standardıdır.

Bu dökümanlar ilk kısmı genel bakış olmak üzere 6 parçadan oluşmaktadır. ESYA PAdES kütüphanesi 3. kısım (BES ve EPES imza), 4. kısım (LTV- uzun dönemde doğrulanabilir imza) bölümlerini desteklemektedir.

Bu kütüphane ortak imza kütüphanesi arayüzleri ile kullanılmakta ve Elektronik imza ortak kütüphanesi tanımları ile

tipinde imza oluşturulabilmektedir.

PAdES kütüphanesi altyapısında IText pdf işleme kütüphanesi kullanmaktadır. Proje bağımlılıklarında IText kütüphanesi ayrıca temin edilmelidir.

ES_BES imza atma

PDF dosyası imza konteyneri olarak okunur. Daha sonra createSignature metodu ile imza yapısı PDF içerinde yaratılır.

// pdf dökümanı oku
SignatureContainer pc = SignatureFactory.readContainer(
                            SignatureFormat.PAdES,
                            new FileInputStream("hello.pdf"), new Context());

// imza ekle
Signature signature = pc.createSignature(SIGNER_CERTIFICATE);
signature.setSigningTime(Calendar.getInstance());
signature.sign(SIGNER);

// dosyaya yaz
pc.write()

İmza Doğrulama

// imzalı dosyayı oku
SignatureContainer pc = SignatureFactory.readContainer(
                            SignatureFormat.PAdES,
                            new FileInputStream("signed-est.pdf"), new Context());

// dogrula
ContainerValidationResult cvr = pc.verifyAll();

System.out.println(cvr);
assert cvr.getResultType() == ContainerValidationResultType.ALL_VALID;

ES_T imza atma

PAdESContext context = new PAdESContext();
context.setSignWithTimestamp(true);

// pdf'i oku
SignatureContainer pc = SignatureFactory.readContainer(
        SignatureFormat.PAdES,
        new FileInputStream("hello.pdf"), context);

// add signature
Signature signature = pc.createSignature(SIGNER.getSignersCertificate());
signature.setSigningTime(Calendar.getInstance());
signature.sign(SIGNER);

// dosyaya yaz
pc.write(new FileOutputStream("signed-est.pdf"));

LTV (ES_A) imza atma

PAdESContext context = new PAdESContext();
// ilk imzayı ES_T olarak at
context.setSignWithTimestamp(true);

SignatureContainer pc = SignatureFactory.readContainer(SignatureFormat.PAdES,
        new FileInputStream("hello.pdf"), context);

// imza ekle
Signature signature = pc.createSignature(SIGNER.getSignersCertificate());
signature.setSigningTime(Calendar.getInstance());
signature.sign(SIGNER);

// imzayı LTV tipine upgrade et
signature.upgrade(SignatureType.ES_A);
// dosyaya yaz
pc.write(new FileOutputStream("signed-lta.pdf"));