AndroidKeyStore KeyStoreException: неинициализированное хранилище ключей - PullRequest
0 голосов
/ 10 июля 2020
java.security.KeyStoreException: Uninitialized keystore
    at java.security.KeyStore.entryInstanceOf(KeyStore.java:1690)
    at com.my.package.MyKeyManager.getSecretKey(MyKeyManager.java:137)

Почему я получаю указанное выше исключение неинициализированного хранилища ключей при выполнении следующего кода (Samsung S9 работает Android 9):

import java.security.KeyStore;

...

SecretKey getSecretKey(String alias) {
    mKeyStore = KeyStore.getInstance("AndroidKeyStore");
    mKeyStore.load(null);
    if (mKeyStore.containsAlias(alias) 
        && mKeyStore.entryInstanceOf(alias, KeyStore.SecretKeyEntry.class)) {
    }
}

Вот действительно странная часть - если вы посмотрите на Android исходный код для containsAlias ​​, который я называю прямо перед entryInstanceOf , он также имеет такую ​​же проверку для !initialized. Тем не менее, каким-то образом проверка в containsAlias проходит, а проверка в entryInstanceOf не удается.

Также обратите внимание, что исключение создается в строке 1690 файла java.security.KeyStore, но эта строка никогда не вызывала это исключение за всю историю AOSP (я проверил историю файла фиксации для этого файла). Это заставляет меня думать, что Samsung, должно быть, изменяет этот файл для своего вкуса Android.

Кто-нибудь знает, что здесь происходит, или есть ли способ просмотреть Samsung Android java исходных файлов? Я нашел opensource.samsung.com , но ни одна из исходных загрузок не содержит файлов java (только c файлов).

...