Hi,
I Have problem to sign pdf document using certificate with sha256RSA algorithm.
If I use sha1RSA algotithm is signed succesfully, and Adobe Reader validate it 
properly.
This is the code (sha256RSA):

           java.security.KeyStore keystore = 
java.security.KeyStore.getInstance("Windows-MY", "SunMSCAPI");
            // Loading the keystore
            //keystore.load(null);
            keystore.load(null, null);
            String sAlias = "";
            int i=0;
            for (Enumeration oEnum = keystore.aliases();
                oEnum.hasMoreElements();)
            {
            sAlias = (String) oEnum.nextElement();               
            
            X509Certificate certxx;
            PdfReader reader;
            FileOutputStream fout;
            PrivateKey key;
            java.security.cert.Certificate[] chain;
            try
            {
                chain = keystore.getCertificateChain(sAlias);
             certxx = (X509Certificate) keystore.getCertificate(sAlias); //get 
public cert
            key = (PrivateKey) keystore.getKey(sAlias, null); //get private cert
           reader = new PdfReader("C:\\Documents and 
Settings\\master\\Pulpit\\FAKOR.pdf");
           fout = new FileOutputStream("c:\\Documents and 
Settings\\master\\Pulpi  \\FAKORsigned.pdf");
                        try
                       {

java.security.Security.addProvider ( new 
org.bouncycastle.jce.provider.BouncyCastleProvider (  )  ) ;
PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0');
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.setReason("Filip");
sap.setLocation("Berlin");
sap.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, null);
sap.setExternalDigest(new byte[256], new byte[32], "RSA");
sap.preClose();
MessageDigest messageDigest = MessageDigest.getInstance("SHA256");
byte buf[] = new byte[8192];
int n;
InputStream inp = sap.getRangeStream();
while ((n = inp.read(buf)) > 0) {
    messageDigest.update(buf, 0, n);
}
byte hash[] = messageDigest.digest();
PdfSigGenericPKCS sg = sap.getSigStandard();
PdfLiteral slit = (PdfLiteral)sg.get(PdfName.CONTENTS);
byte[] outc = new byte[5434];
PdfPKCS7 sig = sg.getSigner();
Signature sign = Signature.getInstance("SHA256withRSA");
sign.initSign(key);
sign.update(hash);
byte[] signature = sign.sign();
sig.setExternalDigest(signature, hash, "RSA");
PdfDictionary dic = new PdfDictionary();
byte[] ssig = sig.getEncodedPKCS7();
System.arraycopy(ssig, 0, outc, 0, ssig.length);
dic.put(PdfName.CONTENTS, new PdfString(outc).setHexWriting(true));
sap.close(dic);
         }
     catch(Exception ex)
     {
       fout.close();
       continue;
       }
fout.close();

If use above code I create pdf file. But Adobe Reader said that there is failed 
while veryfing signature. The Algotithm is not recognized.

What can I change to sign pdf with sha256RSA.
I propably see all post that i need to use PdfName.ADBE_PKCS7_DETACHED  against 
WINCER_SIGNED.
But I do not know how I need to use it.
Please help.

Regards Filip

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference 
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples: 
http://itextpdf.com/themes/keywords.php

Reply via email to