Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uncaught exception thrown by finalizer #13

Open
VictorUrielP opened this issue Jul 6, 2018 · 0 comments
Open

Uncaught exception thrown by finalizer #13

VictorUrielP opened this issue Jul 6, 2018 · 0 comments

Comments

@VictorUrielP
Copy link

VictorUrielP commented Jul 6, 2018

Hi. I am getting this exception and can't reallize where it is comming from.

07-06 12:56:28.426 22855-22918/com.tecnocen.beneficiosandroid.ap E/System: Uncaught exception thrown by finalizer 07-06 12:56:28.445 22855-22918/com.tecnocen.beneficiosandroid.ap E/System: java.lang.IllegalStateException: Binder has been finalized! at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:628) at android.security.IKeystoreService$Stub$Proxy.abort(IKeystoreService.java:1411) at android.security.KeyStore.abort(KeyStore.java:885) at android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize(AndroidKeyStoreCipherSpiBase.java:744) at android.security.keystore.AndroidKeyStoreRSACipherSpi$PKCS1Padding.finalize(AndroidKeyStoreRSACipherSpi.java) at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:222) at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:209) at java.lang.Thread.run(Thread.java:762)

This is my class, and I am providing it as a Singleton with Dagger 2:

public class KeyStoreHelperImpl implements KeyStoreHelper {

    private static final String STORE_NAME = "STORE_NAME";

    private Crypto crypto;
    private KeyPair keyPair;

    @Inject
    public KeyStoreHelperImpl(@ApplicationContext Context context) {


        // Create and save key
        Store store = new Store(context, STORE_NAME, BASE_CYPHER_PASSWORD.toCharArray());
        final int keysize = 512;

        if(!store.hasKey(STORE_NAME)) {
            // Create store with specific name and password
            final String alias = STORE_NAME;

            final Calendar start = Calendar.getInstance();
            final Calendar end = Calendar.getInstance();
            end.add(Calendar.YEAR, 1);

            // Create a key store params, some of them are specific per platform
            // Check KeyProps doc for more info
            KeyProps keyProps = new KeyProps.Builder()
                    .setAlias(alias)
                    .setPassword(BASE_CYPHER_PASSWORD.toCharArray())
                    .setKeySize(keysize)
                    .setKeyType("RSA")
                    .setSerialNumber(BigInteger.ONE)
                    .setSubject(new X500Principal("CN=" + alias + " CA Certificate"))
                    .setStartDate(start.getTime())
                    .setEndDate(end.getTime())
                    .setBlockModes("ECB")
                    .setEncryptionPaddings("PKCS1Padding")
                    .setSignatureAlgorithm("SHA256WithRSAEncryption")
                    .build();

            // Generate KeyPair depending on KeyProps
            keyPair = store.generateAsymmetricKey(keyProps);

        } else {
            keyPair =  store.getAsymmetricKey(STORE_NAME, BASE_CYPHER_PASSWORD.toCharArray());
        }

        // Encrypt/Dencrypt data using buffer with or without Initialisation Vectors
        // This additional level of safety is required on 23 API level for
        // some algorithms. Specify encryption/decryption block size to use buffer for
        // large data when using block based algorithms (such as RSA)

        final int encryptionBlockSize = keysize / 8 - 11; // as specified for RSA/ECB/PKCS1Padding keys
        final int decryptionBlockSize = keysize / 8; // as specified for RSA/ECB/PKCS1Padding keys

        crypto = new Crypto("RSA/ECB/PKCS1Padding", encryptionBlockSize, decryptionBlockSize);
    }

    @Override
    public String encryptString(String string) {
        if(string != null)
        return crypto.encrypt(string, keyPair.getPublic(), false);
        return null;
    }

    @Override
    public String decryptString(String string) {
        if(string != null)
        return crypto.decrypt(string, keyPair.getPrivate(), false);
        return null;
    }
}`
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant