Merge trunk into apg_service

This commit is contained in:
Markus Doits 2010-12-29 16:43:10 +00:00
parent e8d29c01c2
commit 6634f40bc2
2 changed files with 102 additions and 50 deletions

View File

@ -141,6 +141,7 @@
<string name="expired">scaduto</string> <string name="expired">scaduto</string>
<string name="notValid">non valido</string> <string name="notValid">non valido</string>
<string name="nKeyServers">%s key server(s)</string> <string name="nKeyServers">%s key server(s)</string>
<string name="fingerprint">fingerprint</string>
<!-- choice_lowerCase: capitalized firwst word, no punctuation --> <!-- choice_lowerCase: capitalized firwst word, no punctuation -->
<string name="choice_none">Nessuno</string> <string name="choice_none">Nessuno</string>
@ -154,6 +155,10 @@
<string name="choice_10mins">10 min</string> <string name="choice_10mins">10 min</string>
<string name="choice_20mins">20 min</string> <string name="choice_20mins">20 min</string>
<string name="choice_40mins">40 min</string> <string name="choice_40mins">40 min</string>
<string name="choice_1hour">1 ora</string>
<string name="choice_2hours">2 ore</string>
<string name="choice_4hours">4 ore</string>
<string name="choice_8hours">8 ore</string>
<string name="choice_untilQuit">tutta la sessione</string> <string name="choice_untilQuit">tutta la sessione</string>
<string name="choice_language_system">Default di sistema</string> <string name="choice_language_system">Default di sistema</string>
@ -223,6 +228,7 @@
<string name="error_noKnownEncryptionFound">non è stato trovato nessun tipo di crittazione valido</string> <string name="error_noKnownEncryptionFound">non è stato trovato nessun tipo di crittazione valido</string>
<string name="error_externalStorageNotReady">la scheda di memoria non è pronta o non è utilizzabile</string> <string name="error_externalStorageNotReady">la scheda di memoria non è pronta o non è utilizzabile</string>
<string name="error_accountNotFound">acconto \'%s\' non trovato</string> <string name="error_accountNotFound">acconto \'%s\' non trovato</string>
<string name="error_accountReadingNotAllowed">accesso in lettura all'\account negato</string>
<string name="error_addingAccountFailed">non è stato possibile aggiungere l\'acconto \'%s\'</string> <string name="error_addingAccountFailed">non è stato possibile aggiungere l\'acconto \'%s\'</string>
<string name="error_invalidEmail">mail non valida \'%s\'</string> <string name="error_invalidEmail">mail non valida \'%s\'</string>
<string name="error_keySizeMinimum512bit">la dimensione della chiave deve essere almeno di 512bit</string> <string name="error_keySizeMinimum512bit">la dimensione della chiave deve essere almeno di 512bit</string>

View File

@ -400,6 +400,7 @@ public class Apg {
throws Apg.GeneralException, NoSuchProviderException, PGPException, throws Apg.GeneralException, NoSuchProviderException, PGPException,
NoSuchAlgorithmException, SignatureException, IOException, Database.GeneralException { NoSuchAlgorithmException, SignatureException, IOException, Database.GeneralException {
if( progress != null )
progress.setProgress(R.string.progress_buildingKey, 0, 100); progress.setProgress(R.string.progress_buildingKey, 0, 100);
Security.addProvider(new BouncyCastleProvider()); Security.addProvider(new BouncyCastleProvider());
@ -461,6 +462,7 @@ public class Apg {
keys.add(editor.getValue()); keys.add(editor.getValue());
} }
if( progress != null )
progress.setProgress(R.string.progress_preparingMasterKey, 10, 100); progress.setProgress(R.string.progress_preparingMasterKey, 10, 100);
KeyEditor keyEditor = (KeyEditor) keyEditors.getChildAt(0); KeyEditor keyEditor = (KeyEditor) keyEditors.getChildAt(0);
int usageId = keyEditor.getUsage(); int usageId = keyEditor.getUsage();
@ -481,6 +483,7 @@ public class Apg {
masterKey.extractPrivateKey(oldPassPhrase.toCharArray(), masterKey.extractPrivateKey(oldPassPhrase.toCharArray(),
new BouncyCastleProvider()); new BouncyCastleProvider());
if( progress != null )
progress.setProgress(R.string.progress_certifyingMasterKey, 20, 100); progress.setProgress(R.string.progress_certifyingMasterKey, 20, 100);
for (int i = 0; i < userIds.size(); ++i) { for (int i = 0; i < userIds.size(); ++i) {
String userId = userIds.get(i); String userId = userIds.get(i);
@ -525,6 +528,7 @@ public class Apg {
hashedPacketsGen.setKeyExpirationTime(true, numDays * 86400); hashedPacketsGen.setKeyExpirationTime(true, numDays * 86400);
} }
if( progress != null )
progress.setProgress(R.string.progress_buildingMasterKeyRing, 30, 100); progress.setProgress(R.string.progress_buildingMasterKeyRing, 30, 100);
PGPKeyRingGenerator keyGen = PGPKeyRingGenerator keyGen =
new PGPKeyRingGenerator(PGPSignature.POSITIVE_CERTIFICATION, new PGPKeyRingGenerator(PGPSignature.POSITIVE_CERTIFICATION,
@ -533,8 +537,10 @@ public class Apg {
hashedPacketsGen.generate(), unhashedPacketsGen.generate(), hashedPacketsGen.generate(), unhashedPacketsGen.generate(),
new SecureRandom(), new BouncyCastleProvider().getName()); new SecureRandom(), new BouncyCastleProvider().getName());
if( progress != null )
progress.setProgress(R.string.progress_addingSubKeys, 40, 100); progress.setProgress(R.string.progress_addingSubKeys, 40, 100);
for (int i = 1; i < keys.size(); ++i) { for (int i = 1; i < keys.size(); ++i) {
if( progress != null )
progress.setProgress(40 + 50 * (i - 1)/ (keys.size() - 1), 100); progress.setProgress(40 + 50 * (i - 1)/ (keys.size() - 1), 100);
PGPSecretKey subKey = keys.get(i); PGPSecretKey subKey = keys.get(i);
keyEditor = (KeyEditor) keyEditors.getChildAt(i); keyEditor = (KeyEditor) keyEditors.getChildAt(i);
@ -584,10 +590,12 @@ public class Apg {
PGPSecretKeyRing secretKeyRing = keyGen.generateSecretKeyRing(); PGPSecretKeyRing secretKeyRing = keyGen.generateSecretKeyRing();
PGPPublicKeyRing publicKeyRing = keyGen.generatePublicKeyRing(); PGPPublicKeyRing publicKeyRing = keyGen.generatePublicKeyRing();
if( progress != null )
progress.setProgress(R.string.progress_savingKeyRing, 90, 100); progress.setProgress(R.string.progress_savingKeyRing, 90, 100);
mDatabase.saveKeyRing(secretKeyRing); mDatabase.saveKeyRing(secretKeyRing);
mDatabase.saveKeyRing(publicKeyRing); mDatabase.saveKeyRing(publicKeyRing);
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
} }
@ -598,8 +606,10 @@ public class Apg {
Bundle returnData = new Bundle(); Bundle returnData = new Bundle();
if (type == Id.type.secret_key) { if (type == Id.type.secret_key) {
if( progress != null )
progress.setProgress(R.string.progress_importingSecretKeys, 0, 100); progress.setProgress(R.string.progress_importingSecretKeys, 0, 100);
} else { } else {
if( progress != null )
progress.setProgress(R.string.progress_importingPublicKeys, 0, 100); progress.setProgress(R.string.progress_importingPublicKeys, 0, 100);
} }
@ -671,6 +681,7 @@ public class Apg {
} else if (retValue == Id.return_value.bad) { } else if (retValue == Id.return_value.bad) {
++badKeys; ++badKeys;
} }
if( progress != null )
progress.setProgress((int)(100 * progressIn.position() / data.getSize()), 100); progress.setProgress((int)(100 * progressIn.position() / data.getSize()), 100);
obj = objectFactory.nextObject(); obj = objectFactory.nextObject();
} }
@ -683,6 +694,7 @@ public class Apg {
returnData.putInt("updated", oldKeys); returnData.putInt("updated", oldKeys);
returnData.putInt("bad", badKeys); returnData.putInt("bad", badKeys);
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
return returnData; return returnData;
@ -695,8 +707,10 @@ public class Apg {
Bundle returnData = new Bundle(); Bundle returnData = new Bundle();
if (keyRingIds.size() == 1) { if (keyRingIds.size() == 1) {
if( progress != null )
progress.setProgress(R.string.progress_exportingKey, 0, 100); progress.setProgress(R.string.progress_exportingKey, 0, 100);
} else { } else {
if( progress != null )
progress.setProgress(R.string.progress_exportingKeys, 0, 100); progress.setProgress(R.string.progress_exportingKeys, 0, 100);
} }
@ -707,6 +721,7 @@ public class Apg {
int numKeys = 0; int numKeys = 0;
for (int i = 0; i < keyRingIds.size(); ++i) { for (int i = 0; i < keyRingIds.size(); ++i) {
if( progress != null )
progress.setProgress(i * 100 / keyRingIds.size(), 100); progress.setProgress(i * 100 / keyRingIds.size(), 100);
Object obj = mDatabase.getKeyRing(keyRingIds.get(i)); Object obj = mDatabase.getKeyRing(keyRingIds.get(i));
PGPPublicKeyRing publicKeyRing; PGPPublicKeyRing publicKeyRing;
@ -726,6 +741,7 @@ public class Apg {
out.close(); out.close();
returnData.putInt("exported", numKeys); returnData.putInt("exported", numKeys);
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
return returnData; return returnData;
@ -1236,6 +1252,7 @@ public class Apg {
if (signaturePassPhrase == null) { if (signaturePassPhrase == null) {
throw new GeneralException(context.getString(R.string.error_noSignaturePassPhrase)); throw new GeneralException(context.getString(R.string.error_noSignaturePassPhrase));
} }
if( progress != null )
progress.setProgress(R.string.progress_extractingSignatureKey, 0, 100); progress.setProgress(R.string.progress_extractingSignatureKey, 0, 100);
signaturePrivateKey = signingKey.extractPrivateKey(signaturePassPhrase.toCharArray(), signaturePrivateKey = signingKey.extractPrivateKey(signaturePassPhrase.toCharArray(),
new BouncyCastleProvider()); new BouncyCastleProvider());
@ -1243,7 +1260,7 @@ public class Apg {
throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey)); throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey));
} }
} }
if( progress != null )
progress.setProgress(R.string.progress_preparingStreams, 5, 100); progress.setProgress(R.string.progress_preparingStreams, 5, 100);
// encrypt and compress input file content // encrypt and compress input file content
PGPEncryptedDataGenerator cPk = PGPEncryptedDataGenerator cPk =
@ -1266,6 +1283,7 @@ public class Apg {
PGPV3SignatureGenerator signatureV3Generator = null; PGPV3SignatureGenerator signatureV3Generator = null;
if (signatureKeyId != 0) { if (signatureKeyId != 0) {
if( progress != null )
progress.setProgress(R.string.progress_preparingSignature, 10, 100); progress.setProgress(R.string.progress_preparingSignature, 10, 100);
if (forceV3Signature) { if (forceV3Signature) {
signatureV3Generator = signatureV3Generator =
@ -1307,7 +1325,7 @@ public class Apg {
// file name not needed, so empty string // file name not needed, so empty string
OutputStream pOut = literalGen.open(bcpgOut, PGPLiteralData.BINARY, "", OutputStream pOut = literalGen.open(bcpgOut, PGPLiteralData.BINARY, "",
new Date(), new byte[1 << 16]); new Date(), new byte[1 << 16]);
if( progress != null )
progress.setProgress(R.string.progress_encrypting, 20, 100); progress.setProgress(R.string.progress_encrypting, 20, 100);
long done = 0; long done = 0;
int n = 0; int n = 0;
@ -1324,6 +1342,7 @@ public class Apg {
} }
done += n; done += n;
if (data.getSize() != 0) { if (data.getSize() != 0) {
if( progress != null )
progress.setProgress((int) (20 + (95 - 20) * done / data.getSize()), 100); progress.setProgress((int) (20 + (95 - 20) * done / data.getSize()), 100);
} }
} }
@ -1331,6 +1350,7 @@ public class Apg {
literalGen.close(); literalGen.close();
if (signatureKeyId != 0) { if (signatureKeyId != 0) {
if( progress != null )
progress.setProgress(R.string.progress_generatingSignature, 95, 100); progress.setProgress(R.string.progress_generatingSignature, 95, 100);
if (forceV3Signature) { if (forceV3Signature) {
signatureV3Generator.generate().encode(pOut); signatureV3Generator.generate().encode(pOut);
@ -1346,6 +1366,7 @@ public class Apg {
armorOut.close(); armorOut.close();
} }
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
} }
@ -1385,8 +1406,10 @@ public class Apg {
if (signaturePrivateKey == null) { if (signaturePrivateKey == null) {
throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey)); throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey));
} }
if( progress != null )
progress.setProgress(R.string.progress_preparingStreams, 0, 100); progress.setProgress(R.string.progress_preparingStreams, 0, 100);
if( progress != null )
progress.setProgress(R.string.progress_preparingSignature, 30, 100); progress.setProgress(R.string.progress_preparingSignature, 30, 100);
PGPSignatureGenerator signatureGenerator = null; PGPSignatureGenerator signatureGenerator = null;
@ -1411,6 +1434,7 @@ public class Apg {
signatureGenerator.setHashedSubpackets(spGen.generate()); signatureGenerator.setHashedSubpackets(spGen.generate());
} }
if( progress != null )
progress.setProgress(R.string.progress_signing, 40, 100); progress.setProgress(R.string.progress_signing, 40, 100);
armorOut.beginClearText(hashAlgorithm); armorOut.beginClearText(hashAlgorithm);
@ -1454,6 +1478,7 @@ public class Apg {
} }
armorOut.close(); armorOut.close();
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
} }
@ -1501,8 +1526,10 @@ public class Apg {
if (signaturePrivateKey == null) { if (signaturePrivateKey == null) {
throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey)); throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey));
} }
if( progress != null )
progress.setProgress(R.string.progress_preparingStreams, 0, 100); progress.setProgress(R.string.progress_preparingStreams, 0, 100);
if( progress != null )
progress.setProgress(R.string.progress_preparingSignature, 30, 100); progress.setProgress(R.string.progress_preparingSignature, 30, 100);
PGPSignatureGenerator signatureGenerator = null; PGPSignatureGenerator signatureGenerator = null;
@ -1532,6 +1559,7 @@ public class Apg {
signatureGenerator.setHashedSubpackets(spGen.generate()); signatureGenerator.setHashedSubpackets(spGen.generate());
} }
if( progress != null )
progress.setProgress(R.string.progress_signing, 40, 100); progress.setProgress(R.string.progress_signing, 40, 100);
InputStream inStream = data.getInputStream(); InputStream inStream = data.getInputStream();
@ -1575,6 +1603,7 @@ public class Apg {
out.close(); out.close();
outStream.close(); outStream.close();
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
} }
@ -1669,6 +1698,7 @@ public class Apg {
long signatureKeyId = 0; long signatureKeyId = 0;
int currentProgress = 0; int currentProgress = 0;
if( progress != null )
progress.setProgress(R.string.progress_readingData, currentProgress, 100); progress.setProgress(R.string.progress_readingData, currentProgress, 100);
if (o instanceof PGPEncryptedDataList) { if (o instanceof PGPEncryptedDataList) {
@ -1704,11 +1734,13 @@ public class Apg {
throw new GeneralException(context.getString(R.string.error_noSymmetricEncryptionPacket)); throw new GeneralException(context.getString(R.string.error_noSymmetricEncryptionPacket));
} }
if( progress != null )
progress.setProgress(R.string.progress_preparingStreams, currentProgress, 100); progress.setProgress(R.string.progress_preparingStreams, currentProgress, 100);
clear = pbe.getDataStream(passPhrase.toCharArray(), new BouncyCastleProvider()); clear = pbe.getDataStream(passPhrase.toCharArray(), new BouncyCastleProvider());
encryptedData = pbe; encryptedData = pbe;
currentProgress += 5; currentProgress += 5;
} else { } else {
if( progress != null )
progress.setProgress(R.string.progress_findingKey, currentProgress, 100); progress.setProgress(R.string.progress_findingKey, currentProgress, 100);
PGPPublicKeyEncryptedData pbe = null; PGPPublicKeyEncryptedData pbe = null;
PGPSecretKey secretKey = null; PGPSecretKey secretKey = null;
@ -1731,6 +1763,7 @@ public class Apg {
} }
currentProgress += 5; currentProgress += 5;
if( progress != null )
progress.setProgress(R.string.progress_extractingKey, currentProgress, 100); progress.setProgress(R.string.progress_extractingKey, currentProgress, 100);
PGPPrivateKey privateKey = null; PGPPrivateKey privateKey = null;
try { try {
@ -1743,6 +1776,7 @@ public class Apg {
throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey)); throw new GeneralException(context.getString(R.string.error_couldNotExtractPrivateKey));
} }
currentProgress += 5; currentProgress += 5;
if( progress != null )
progress.setProgress(R.string.progress_preparingStreams, currentProgress, 100); progress.setProgress(R.string.progress_preparingStreams, currentProgress, 100);
clear = pbe.getDataStream(privateKey, new BouncyCastleProvider()); clear = pbe.getDataStream(privateKey, new BouncyCastleProvider());
encryptedData = pbe; encryptedData = pbe;
@ -1756,6 +1790,7 @@ public class Apg {
int signatureIndex = -1; int signatureIndex = -1;
if (dataChunk instanceof PGPCompressedData) { if (dataChunk instanceof PGPCompressedData) {
if( progress != null )
progress.setProgress(R.string.progress_decompressingData, currentProgress, 100); progress.setProgress(R.string.progress_decompressingData, currentProgress, 100);
PGPObjectFactory fact = PGPObjectFactory fact =
new PGPObjectFactory(((PGPCompressedData) dataChunk).getDataStream()); new PGPObjectFactory(((PGPCompressedData) dataChunk).getDataStream());
@ -1765,6 +1800,7 @@ public class Apg {
} }
if (dataChunk instanceof PGPOnePassSignatureList) { if (dataChunk instanceof PGPOnePassSignatureList) {
if( progress != null )
progress.setProgress(R.string.progress_processingSignature, currentProgress, 100); progress.setProgress(R.string.progress_processingSignature, currentProgress, 100);
returnData.putBoolean(EXTRA_SIGNATURE, true); returnData.putBoolean(EXTRA_SIGNATURE, true);
PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk; PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk;
@ -1802,6 +1838,7 @@ public class Apg {
} }
if (dataChunk instanceof PGPLiteralData) { if (dataChunk instanceof PGPLiteralData) {
if( progress != null )
progress.setProgress(R.string.progress_decrypting, currentProgress, 100); progress.setProgress(R.string.progress_decrypting, currentProgress, 100);
PGPLiteralData literalData = (PGPLiteralData) dataChunk; PGPLiteralData literalData = (PGPLiteralData) dataChunk;
OutputStream out = outStream; OutputStream out = outStream;
@ -1838,10 +1875,12 @@ public class Apg {
currentProgress = (int)(startProgress + (endProgress - startProgress) * currentProgress = (int)(startProgress + (endProgress - startProgress) *
(data.getStreamPosition() - startPos) / (data.getSize() - startPos)); (data.getStreamPosition() - startPos) / (data.getSize() - startPos));
} }
if( progress != null )
progress.setProgress(currentProgress, 100); progress.setProgress(currentProgress, 100);
} }
if (signature != null) { if (signature != null) {
if( progress != null )
progress.setProgress(R.string.progress_verifyingSignature, 90, 100); progress.setProgress(R.string.progress_verifyingSignature, 90, 100);
PGPSignatureList signatureList = (PGPSignatureList) plainFact.nextObject(); PGPSignatureList signatureList = (PGPSignatureList) plainFact.nextObject();
PGPSignature messageSignature = (PGPSignature) signatureList.get(signatureIndex); PGPSignature messageSignature = (PGPSignature) signatureList.get(signatureIndex);
@ -1855,6 +1894,7 @@ public class Apg {
// TODO: add integrity somewhere // TODO: add integrity somewhere
if (encryptedData.isIntegrityProtected()) { if (encryptedData.isIntegrityProtected()) {
if( progress != null )
progress.setProgress(R.string.progress_verifyingIntegrity, 95, 100); progress.setProgress(R.string.progress_verifyingIntegrity, 95, 100);
if (encryptedData.verify()) { if (encryptedData.verify()) {
// passed // passed
@ -1865,6 +1905,7 @@ public class Apg {
// no integrity check // no integrity check
} }
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
return returnData; return returnData;
} }
@ -1878,6 +1919,7 @@ public class Apg {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
ArmoredInputStream aIn = new ArmoredInputStream(data.getInputStream()); ArmoredInputStream aIn = new ArmoredInputStream(data.getInputStream());
if( progress != null )
progress.setProgress(R.string.progress_done, 0, 100); progress.setProgress(R.string.progress_done, 0, 100);
// mostly taken from ClearSignedFileProcessor // mostly taken from ClearSignedFileProcessor
@ -1903,6 +1945,7 @@ public class Apg {
returnData.putBoolean(EXTRA_SIGNATURE, true); returnData.putBoolean(EXTRA_SIGNATURE, true);
if( progress != null )
progress.setProgress(R.string.progress_processingSignature, 60, 100); progress.setProgress(R.string.progress_processingSignature, 60, 100);
PGPObjectFactory pgpFact = new PGPObjectFactory(aIn); PGPObjectFactory pgpFact = new PGPObjectFactory(aIn);
@ -1950,6 +1993,7 @@ public class Apg {
if (signature == null) { if (signature == null) {
returnData.putBoolean(EXTRA_SIGNATURE_UNKNOWN, true); returnData.putBoolean(EXTRA_SIGNATURE_UNKNOWN, true);
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
return returnData; return returnData;
} }
@ -1976,6 +2020,7 @@ public class Apg {
returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, signature.verify()); returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, signature.verify());
if( progress != null )
progress.setProgress(R.string.progress_done, 100, 100); progress.setProgress(R.string.progress_done, 100, 100);
return returnData; return returnData;
} }
@ -2234,6 +2279,7 @@ public class Apg {
int pos = 0; int pos = 0;
String msg = context.getString(R.string.progress_deletingSecurely, file.getName()); String msg = context.getString(R.string.progress_deletingSecurely, file.getName());
while (pos < length) { while (pos < length) {
if( progress != null )
progress.setProgress(msg, (int)(100 * pos / length), 100); progress.setProgress(msg, (int)(100 * pos / length), 100);
random.nextBytes(data); random.nextBytes(data);
raf.write(data); raf.write(data);