123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- package epson.print.storage;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import java.util.HashMap;
- import java.util.Map;
- import javax.crypto.Cipher;
- import javax.crypto.spec.SecretKeySpec;
- /**
- * 存储类
- */
- public class StorageSecureStore {
- static StorageSecureStore mInstance;
- final String COLUMN_KEY = "key";
- final String COLUMN_VALUE = BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE;
- final String CREATE_KEYVALUE = "CREATE TABLE IF NOT EXISTS keyvalue_tbl (key TEXT PRIMARY KEY, value BLOB);";
- final String DELETE_KEYVALUE = "key=?";
- final String DROP_KEYVALUE = "DROP TABLE IF EXISTS keyvalue_tbl;";
- final String ENCRYPT_ALGORITHM = "AES";
- final int ENCRYPT_KEY_BYTES = 16;
- final int INDEX_KEY = 0;
- final int INDEX_VALUE = 1;
- final String KEYVALUE_DBNAME = "storage.data";
- final String KEYVALUE_TBLNAME = "keyvalue_tbl";
- final int KEYVALUE_VERSION = 1;
- final String SELECT_KEYVALUE = "SELECT * FROM keyvalue_tbl;";
- Context mContext = null;
- Map<String, String> mKeyValueMap = null;
- public enum EXEC_MODE {
- NONE,
- OVERWRITE_IF_EXIST
- }
- public static StorageSecureStore getSharedSecureStore() {
- return mInstance;
- }
- public boolean put(String str, String str2) {
- KeyValueDatabase keyValueDatabase = new KeyValueDatabase(mContext);
- boolean insert = keyValueDatabase.insert(str, str2);
- keyValueDatabase.close();
- reloadCache();
- return insert;
- }
- public boolean put(String str, String str2, EXEC_MODE exec_mode) {
- if (exec_mode == EXEC_MODE.OVERWRITE_IF_EXIST && fetch(str) != null) {
- revoke(str);
- }
- return put(str, str2);
- }
- public String fetch(String str) {
- return mKeyValueMap.get(str);
- }
- public boolean revoke(String str) {
- KeyValueDatabase keyValueDatabase = new KeyValueDatabase(mContext);
- boolean delete = keyValueDatabase.delete(str);
- keyValueDatabase.close();
- reloadCache();
- return delete;
- }
- public static void initSharedSecureStore(Context context) {
- if (mInstance == null) {
- mInstance = new StorageSecureStore(context);
- }
- }
- private byte[] encodeAes(byte[] bArr, String str) {
- if (bArr == null || str == null) {
- return null;
- }
- try {
- byte[] makeKeyBytes = makeKeyBytes(16, str.getBytes());
- Cipher instance = Cipher.getInstance("AES");
- instance.init(1, new SecretKeySpec(makeKeyBytes, "AES"));
- return instance.doFinal(bArr);
- } catch (Exception unused) {
- return null;
- }
- }
- private byte[] decodeAes(byte[] bArr, String str) {
- if (bArr == null || str == null) {
- return null;
- }
- try {
- byte[] makeKeyBytes = makeKeyBytes(16, str.getBytes());
- Cipher instance = Cipher.getInstance("AES");
- instance.init(2, new SecretKeySpec(makeKeyBytes, "AES"));
- return instance.doFinal(bArr);
- } catch (Exception unused) {
- return null;
- }
- }
- private byte[] makeKeyBytes(int i, byte[] bArr) {
- byte[] bArr2 = new byte[i];
- for (int i2 = 0; i2 < bArr2.length; i2++) {
- if (i2 < bArr.length) {
- bArr2[i2] = bArr[i2];
- } else {
- bArr2[i2] = 0;
- }
- }
- return bArr2;
- }
- StorageSecureStore(Context context) {
- mContext = context;
- reloadCache();
- }
- StorageSecureStore() {
- reloadCache();
- }
- private void reloadCache() {
- KeyValueDatabase keyValueDatabase = new KeyValueDatabase(mContext);
- mKeyValueMap = keyValueDatabase.select();
- keyValueDatabase.close();
- }
- public static void invalidateCache() {
- mInstance = null;
- }
- class KeyValueDatabase {
- String mSecretText;
- SQLiteDatabase mSqlDB = null;
- DatabaseHelper mSqlHelper = null;
- KeyValueDatabase(Context context) {
- mSqlHelper = new DatabaseHelper(context, "storage.data", (SQLiteDatabase.CursorFactory) null, 1);
- mSqlDB = mSqlHelper.getWritableDatabase();
- mSecretText = getClass().getName();
- }
- /* access modifiers changed from: package-private */
- /* JADX WARNING: Exception block dominator not found, dom blocks: [] */
- /* Code decompiled incorrectly, please refer to instructions dump. */
- public synchronized boolean insert(String r5, String r6) {
- /*
- r4 = this;
- monitor-enter(r4)
- r0 = -1
- com.epson.iprint.storage.StorageSecureStore r2 = com.epson.iprint.storage.StorageSecureStore.this // Catch:{ Exception -> 0x0031, all -> 0x002c }
- byte[] r6 = r6.getBytes() // Catch:{ Exception -> 0x0031, all -> 0x002c }
- java.lang.String r3 = r4.mSecretText // Catch:{ Exception -> 0x0031, all -> 0x002c }
- byte[] r6 = r2.encodeAes(r6, r3) // Catch:{ Exception -> 0x0031, all -> 0x002c }
- if (r6 == 0) goto L_0x0031
- android.content.ContentValues r2 = new android.content.ContentValues // Catch:{ Exception -> 0x0031, all -> 0x002c }
- r2.<init>() // Catch:{ Exception -> 0x0031, all -> 0x002c }
- java.lang.String r3 = "key"
- r2.put(r3, r5) // Catch:{ Exception -> 0x0031, all -> 0x002c }
- java.lang.String r5 = "value"
- r2.put(r5, r6) // Catch:{ Exception -> 0x0031, all -> 0x002c }
- android.database.sqlite.SQLiteDatabase r5 = r4.mSqlDB // Catch:{ Exception -> 0x0031, all -> 0x002c }
- java.lang.String r6 = "keyvalue_tbl"
- java.lang.String r3 = ""
- long r5 = r5.insert(r6, r3, r2) // Catch:{ Exception -> 0x0031, all -> 0x002c }
- r0 = r5
- goto L_0x0031
- L_0x002c:
- r5 = move-exception
- throw r5 // Catch:{ all -> 0x002e }
- L_0x002e:
- r5 = move-exception
- monitor-exit(r4)
- throw r5
- L_0x0031:
- r5 = 0
- int r2 = (r0 > r5 ? 1 : (r0 == r5 ? 0 : -1))
- if (r2 < 0) goto L_0x0039
- r5 = 1
- goto L_0x003a
- L_0x0039:
- r5 = 0
- L_0x003a:
- monitor-exit(r4)
- return r5
- */
- throw new UnsupportedOperationException("Method not decompiled: com.epson.iprint.storage.StorageSecureStore.KeyValueDatabase.insert(java.lang.String, java.lang.String):boolean");
- }
- /* access modifiers changed from: package-private */
- /* JADX WARNING: Exception block dominator not found, dom blocks: [] */
- /* Code decompiled incorrectly, please refer to instructions dump. */
- public synchronized boolean delete(String r7) {
- /*
- r6 = this;
- monitor-enter(r6)
- r0 = 0
- android.database.sqlite.SQLiteDatabase r1 = r6.mSqlDB // Catch:{ Exception -> 0x0018, all -> 0x0015 }
- java.lang.String r2 = "keyvalue_tbl"
- java.lang.String r3 = "key=?"
- r4 = 1
- java.lang.String[] r5 = new java.lang.String[r4] // Catch:{ Exception -> 0x0018, all -> 0x0015 }
- r5[r0] = r7 // Catch:{ Exception -> 0x0018, all -> 0x0015 }
- int r7 = r1.delete(r2, r3, r5) // Catch:{ Exception -> 0x0018, all -> 0x0015 }
- if (r7 <= 0) goto L_0x0018
- r0 = 1
- goto L_0x0018
- L_0x0015:
- r7 = move-exception
- monitor-exit(r6)
- throw r7
- L_0x0018:
- monitor-exit(r6)
- return r0
- */
- throw new UnsupportedOperationException("Method not decompiled: com.epson.iprint.storage.StorageSecureStore.KeyValueDatabase.delete(java.lang.String):boolean");
- }
- /* JADX WARNING: type inference failed for: r1v0, types: [java.lang.String[], android.database.Cursor] */
- private synchronized Map<String, String> select() {
- HashMap hashMap;
- hashMap = new HashMap();
- Cursor cursor = 0;
- try {
- cursor = mSqlDB.rawQuery("SELECT * FROM keyvalue_tbl;", cursor);
- for (int i = 0; i < cursor.getCount(); i++) {
- cursor.moveToPosition(i);
- String string = cursor.getString(0);
- byte[] decodeAes = decodeAes(cursor.getBlob(1), mSecretText);
- if (decodeAes != null) {
- hashMap.put(string, new String(decodeAes));
- }
- }
- } finally {
- if (cursor != 0) {
- cursor.close();
- }
- }
- return hashMap;
- }
- /* access modifiers changed from: package-private */
- /* JADX WARNING: Exception block dominator not found, dom blocks: [] */
- /* Code decompiled incorrectly, please refer to instructions dump. */
- public synchronized void close() {
- /*
- r1 = this;
- monitor-enter(r1)
- android.database.sqlite.SQLiteDatabase r0 = r1.mSqlDB // Catch:{ Exception -> 0x000f, all -> 0x000c }
- r0.close() // Catch:{ Exception -> 0x000f, all -> 0x000c }
- com.epson.iprint.storage.StorageSecureStore$KeyValueDatabase$DatabaseHelper r0 = r1.mSqlHelper // Catch:{ Exception -> 0x000f, all -> 0x000c }
- r0.close() // Catch:{ Exception -> 0x000f, all -> 0x000c }
- goto L_0x000f
- L_0x000c:
- r0 = move-exception
- monitor-exit(r1)
- throw r0
- L_0x000f:
- monitor-exit(r1)
- return
- */
- throw new UnsupportedOperationException("Method not decompiled: com.epson.iprint.storage.StorageSecureStore.KeyValueDatabase.close():void");
- }
- class DatabaseHelper extends SQLiteOpenHelper {
- DatabaseHelper(Context context, String str, SQLiteDatabase.CursorFactory cursorFactory, int i) {
- super(context, str, cursorFactory, i);
- }
- public void onCreate(SQLiteDatabase sQLiteDatabase) {
- try {
- sQLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS keyvalue_tbl (key TEXT PRIMARY KEY, value BLOB);");
- } catch (Exception unused) {
- }
- }
- public void onUpgrade(SQLiteDatabase sQLiteDatabase, int i, int i2) {
- try {
- sQLiteDatabase.execSQL("DROP TABLE IF EXISTS keyvalue_tbl;");
- } catch (Exception unused) {
- }
- onCreate(sQLiteDatabase);
- }
- }
- }
- }
|