mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-27 11:12:15 -05:00
More simplifications to PassphraseCacheService
This commit is contained in:
parent
c3d6637e6a
commit
4a55308741
@ -52,27 +52,26 @@ import java.util.Date;
|
|||||||
* This service runs in its own process, but is available to all other processes as the main
|
* This service runs in its own process, but is available to all other processes as the main
|
||||||
* passphrase cache. Use the static methods addCachedPassphrase and getCachedPassphrase for
|
* passphrase cache. Use the static methods addCachedPassphrase and getCachedPassphrase for
|
||||||
* convenience.
|
* convenience.
|
||||||
*
|
* <p/>
|
||||||
* The passphrase cache service always works with both a master key id and a subkey id. The master
|
* The passphrase cache service always works with both a master key id and a subkey id. The master
|
||||||
* key id is always used to retrieve relevant info from the database, while the subkey id is used
|
* key id is always used to retrieve relevant info from the database, while the subkey id is used
|
||||||
* to determine the type behavior (regular passphrase, empty passphrase, stripped key,
|
* to determine the type behavior (regular passphrase, empty passphrase, stripped key,
|
||||||
* divert-to-card) for the specific key requested.
|
* divert-to-card) for the specific key requested.
|
||||||
*
|
* <p/>
|
||||||
* Caching behavior for subkeys depends on the cacheSubs preference:
|
* Caching behavior for subkeys depends on the cacheSubs preference:
|
||||||
*
|
* <p/>
|
||||||
* - If cacheSubs is NOT set, passphrases will be cached and retrieved by master key id. The
|
* - If cacheSubs is NOT set, passphrases will be cached and retrieved by master key id. The
|
||||||
* checks for special subkeys will still be done, but otherwise it is assumed that all subkeys
|
* checks for special subkeys will still be done, but otherwise it is assumed that all subkeys
|
||||||
* from the same master key will use the same passphrase. This can lead to bad passphrase
|
* from the same master key will use the same passphrase. This can lead to bad passphrase
|
||||||
* errors if two subkeys are encrypted differently. This is the default behavior.
|
* errors if two subkeys are encrypted differently. This is the default behavior.
|
||||||
*
|
* <p/>
|
||||||
* - If cacheSubs IS set, passphrases will be cached per subkey id. This means that if a keyring
|
* - If cacheSubs IS set, passphrases will be cached per subkey id. This means that if a keyring
|
||||||
* has two subkeys for different purposes, passphrases will be cached independently and the
|
* has two subkeys for different purposes, passphrases will be cached independently and the
|
||||||
* user will be asked for a passphrase once per subkey even if it is the same one. This mode
|
* user will be asked for a passphrase once per subkey even if it is the same one. This mode
|
||||||
* of operation is more precise, since we can assume that all passphrases returned from cache
|
* of operation is more precise, since we can assume that all passphrases returned from cache
|
||||||
* will be correct without fail. Since keyrings with differently encrypted subkeys are a very
|
* will be correct without fail. Since keyrings with differently encrypted subkeys are a very
|
||||||
* rare occurrence, and caching by keyring is what the user expects in the vast majority of
|
* rare occurrence, and caching by keyring is what the user expects in the vast majority of
|
||||||
* cases, this is not the default behavior.
|
* cases, this is not the default behavior.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class PassphraseCacheService extends Service {
|
public class PassphraseCacheService extends Service {
|
||||||
|
|
||||||
@ -153,7 +152,7 @@ public class PassphraseCacheService extends Service {
|
|||||||
/**
|
/**
|
||||||
* Gets a cached passphrase from memory by sending an intent to the service. This method is
|
* Gets a cached passphrase from memory by sending an intent to the service. This method is
|
||||||
* designed to wait until the service returns the passphrase.
|
* designed to wait until the service returns the passphrase.
|
||||||
|
*
|
||||||
* @return passphrase or null (if no passphrase is cached for this keyId)
|
* @return passphrase or null (if no passphrase is cached for this keyId)
|
||||||
*/
|
*/
|
||||||
public static Passphrase getCachedPassphrase(Context context, long masterKeyId, long subKeyId) throws KeyNotFoundException {
|
public static Passphrase getCachedPassphrase(Context context, long masterKeyId, long subKeyId) throws KeyNotFoundException {
|
||||||
@ -231,7 +230,7 @@ public class PassphraseCacheService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// on "none" key, just do nothing
|
// on "none" key, just do nothing
|
||||||
if(masterKeyId == Constants.key.none) {
|
if (masterKeyId == Constants.key.none) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,15 +354,10 @@ public class PassphraseCacheService extends Service {
|
|||||||
+ masterKeyId + ", subKeyId: " + subKeyId + ", ttl: " + ttl + ", usrId: " + primaryUserID
|
+ masterKeyId + ", subKeyId: " + subKeyId + ", ttl: " + ttl + ", usrId: " + primaryUserID
|
||||||
);
|
);
|
||||||
|
|
||||||
long referenceKeyId;
|
// if we don't cache by specific subkey id, or the requested subkey is the master key,
|
||||||
if (subKeyId == masterKeyId || !Preferences.getPreferences(mContext).getPassphraseCacheSubs()) {
|
// just add master key id to the cache, otherwise, add this specific subkey to the cache
|
||||||
// if we don't cache by specific subkey id, or the requested subkey is the master key,
|
long referenceKeyId =
|
||||||
// just add master key id to the cache
|
Preferences.getPreferences(mContext).getPassphraseCacheSubs() ? subKeyId : masterKeyId;
|
||||||
referenceKeyId = masterKeyId;
|
|
||||||
} else {
|
|
||||||
// otherwise, add this specific subkey to the cache
|
|
||||||
referenceKeyId = subKeyId;
|
|
||||||
}
|
|
||||||
mPassphraseCache.put(referenceKeyId, new CachedPassphrase(passphrase, primaryUserID));
|
mPassphraseCache.put(referenceKeyId, new CachedPassphrase(passphrase, primaryUserID));
|
||||||
if (ttl > 0) {
|
if (ttl > 0) {
|
||||||
// register new alarm with keyId for this passphrase
|
// register new alarm with keyId for this passphrase
|
||||||
|
Loading…
Reference in New Issue
Block a user