Hello, I downloaded the 30 days test license of iText for Android and want to test it with a prototype for digital signing pdfs with a *.p12 certificate.
Then I installed the *.p12 certificate correctly in the Android Keychain, but when I want to sign a pdf I get a Nullpointer Exception from the Spongy Castle API (enclosed the source code and the exception). Exist any example code for Android because I didn´t find any? regards, Florian Gruber Siemens AG Infrastructure & Cities Sector Rail Systems Division Information Technology IC RL IT PLM WEB Sieboldstr. 16 91052 Erlangen, Deutschland Tel: +49 9131 7-22942 mailto:floriangru...@siemens.com Siemens Aktiengesellschaft: Vorsitzender des Aufsichtsrats: Gerhard Cromme; Vorstand: Peter Löscher, Vorsitzender; Roland Busch, Brigitte Ederer, Klaus Helmrich, Joe Kaeser, Barbara Kux, Hermann Requardt, Siegfried Russwurm, Peter Y. Solmssen, Michael Süß; Sitz der Gesellschaft: Berlin und München, Deutschland; Registergericht: Berlin Charlottenburg, HRB 12300, München, HRB 6684; WEEE-Reg.-Nr. DE 23691322
<<inline: Exception.png>>
public class MainActivity extends Activity implements KeyChainAliasCallback { // Log tag for this class private static final String TAG = "ESignaturMobile"; // Alias for certificate private static final String DEFAULT_ALIAS = "My Key Chain"; // Name of the application preference private static final String KEYCHAIN_PREF = "keychain"; // Name of preference name that saves the alias private static final String KEYCHAIN_PREF_ALIAS = "alias"; private BouncyCastleProvider provider = new BouncyCastleProvider(); private Button b; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b = (Button) findViewById(R.id.button1); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Security.addProvider(provider); LicenseKey.loadLicenseFile(android.os.Environment .getExternalStorageDirectory() + java.io.File.separator + "temp/itextkey.xml"); signPdf(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private Context getContext() { return this; } /** * This method returns the alias of the key chain from the application * preference * * @return The alias of the key chain */ private String getAlias() { SharedPreferences pref = getSharedPreferences(KEYCHAIN_PREF, MODE_PRIVATE); return pref.getString(KEYCHAIN_PREF_ALIAS, DEFAULT_ALIAS); } /** * This method sets the alias of the key chain to the application preference */ private void setAlias(String alias) { SharedPreferences pref = getSharedPreferences(KEYCHAIN_PREF, MODE_PRIVATE); Editor editor = pref.edit(); editor.putString(KEYCHAIN_PREF_ALIAS, alias); editor.commit(); } private void signPdf() { KeyChain.choosePrivateKeyAlias(this, this, new String[] {}, null, "localhost", -1, DEFAULT_ALIAS); } @Override public void alias(String alias) { if (alias != null) { setAlias(alias); // Set the alias in the application preference } else { Log.d(TAG, "User hit Disallow"); } Log.d(TAG, "Thread: " + Thread.currentThread().getName()); Log.d(TAG, "selected alias: " + alias); new AsyncTask<Void, Void, Boolean>() { private Exception error; @Override protected Boolean doInBackground(Void... arg) { try { // Generate Document with signature PrivateKey pk; pk = KeyChain.getPrivateKey(getContext(), getAlias()); X509Certificate[] chain; chain = KeyChain.getCertificateChain(getContext(), getAlias()); String FileName = android.os.Environment .getExternalStorageDirectory() + java.io.File.separator + "temp" // "/storage/sdcard0" + java.io.File.separator + // "temp" + java.io.File.separator + "signature_signed.pdf"; // Creating the reader and the stamper PdfReader reader = new PdfReader( android.os.Environment .getExternalStorageDirectory() + java.io.File.separator // "/storage/sdcard0" + // java.io.File.separator + "temp" + java.io.File.separator + "signature.pdf"); FileOutputStream os = new FileOutputStream(FileName); PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0'); // Creating the appearance PdfSignatureAppearance appearance = stamper .getSignatureAppearance(); appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig"); // Creating the signature Log.d(TAG, "Provider: " + provider.getName()); ExternalSignature es = new PrivateKeySignature(pk, DigestAlgorithms.SHA256, provider.getName()); ExternalDigest digest = new BouncyCastleDigest(); MakeSignature.signDetached(appearance, digest, es, chain, null, null, null, 0, CryptoStandard.CMS); Log.d(TAG, "signed"); return true; } catch (Exception e) { e.printStackTrace(); return false; } } @Override protected void onPostExecute(Boolean valid) { if (error != null) { Toast.makeText(getContext(), "Error: " + error.getMessage(), Toast.LENGTH_LONG) .show(); return; } Toast.makeText(getContext(), "Signiert: " + valid, Toast.LENGTH_LONG).show(); } }.execute(); } }
------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev
_______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net 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