Merge branch 'development' into v/crypto-input-parcel

Conflicts:
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncryptOperation.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java
This commit is contained in:
Dominik Schürmann 2015-03-24 13:19:43 +01:00
commit 040cf42cb0
235 changed files with 10182 additions and 8382 deletions

View File

@ -4,14 +4,14 @@ before_install:
# Install base Android SDK # Install base Android SDK
- sudo apt-get update -qq - sudo apt-get update -qq
- if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq --force-yes libgd2-xpm lib32z1 lib32stdc++6; fi - if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq --force-yes libgd2-xpm lib32z1 lib32stdc++6; fi
- wget http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz - wget http://dl.google.com/android/android-sdk_r24.1.2-linux.tgz
- tar xzf android-sdk_r23.0.2-linux.tgz - tar xzf android-sdk_r24.1.2-linux.tgz
- export ANDROID_HOME=$PWD/android-sdk-linux - export ANDROID_HOME=$PWD/android-sdk-linux
- export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools - export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
# Install required Android components. # Install required Android components.
#- echo "y" | android update sdk -a --filter build-tools-19.1.0,android-19,platform-tools,extra-android-support,extra-android-m2repository --no-ui --force #- echo "y" | android update sdk -a --filter build-tools-19.1.0,android-19,platform-tools,extra-android-support,extra-android-m2repository --no-ui --force
- ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --all --force --filter build-tools-21.1.2,build-tools-21.1.1,build-tools-19.1.0,android-21,android-19,platform-tools,extra-android-support,extra-android-m2repository - ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --all --force --filter build-tools-22.0.1,build-tools-21.1.2,build-tools-21.1.1,build-tools-19.1.0,android-22,android-21,android-19,platform-tools,extra-android-support,extra-android-m2repository
install: echo "Installation done" install: echo "Installation done"
script: script:
- ./gradlew assemble -S -q - ./gradlew assemble -S -q

View File

@ -8,22 +8,22 @@ source_file = OpenKeychain/src/main/res/values/strings.xml
source_lang = en source_lang = en
[open-keychain.help-about] [open-keychain.help-about]
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_about.html file_filter = OpenKeychain/src/main/res/raw-<lang>/help_about.md
source_file = OpenKeychain/src/main/res/raw/help_about.html source_file = OpenKeychain/src/main/res/raw/help_about.md
source_lang = en source_lang = en
[open-keychain.help-changelog] [open-keychain.help-changelog]
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_changelog.html file_filter = OpenKeychain/src/main/res/raw-<lang>/help_changelog.md
source_file = OpenKeychain/src/main/res/raw/help_changelog.html source_file = OpenKeychain/src/main/res/raw/help_changelog.md
source_lang = en source_lang = en
[open-keychain.help-certification] [open-keychain.help-certification]
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_certification.html file_filter = OpenKeychain/src/main/res/raw-<lang>/help_certification.md
source_file = OpenKeychain/src/main/res/raw/help_certification.html source_file = OpenKeychain/src/main/res/raw/help_certification.md
source_lang = en source_lang = en
[open-keychain.help-start] [open-keychain.help-start]
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_start.html file_filter = OpenKeychain/src/main/res/raw-<lang>/help_start.md
source_file = OpenKeychain/src/main/res/raw/help_start.html source_file = OpenKeychain/src/main/res/raw/help_start.md
source_lang = en source_lang = en

266
CHANGELOG
View File

@ -1,265 +1 @@
## 3.2beta2 Please go to https://github.com/open-keychain/open-keychain/blob/development/OpenKeychain/src/main/res/raw/help_changelog.md
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric pgp messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support (HKP, please report bugs :))
* App2sd (untested, let me know if there are problems)
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Clear sign problem with lacking trailing newline fixed
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter preselection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for k9, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes
## 0.9.7
* 0.9.5 must have introduced a bug that prevented symmetric encryption, this release fixes it
## 0.9.6
* Finally fixed that bug that prevents the import of keys exported with Enigmail (and others), since this likely affects many users... it gets its own quick release
## 0.9.5
* K-9 Mail integration: using "More -> Forward (alternate)"
* Passphrase cache
* Compression preferences added
* Accurate decryption progress bar
* Internationalization prepared, hopefully translations will follow
## 0.9.4
* Android 1.5 support, I *hope*, please report problems with layout and graphics
* Yet another interface change, hopefully this will be it :)
* Symmetric encryption for messages
* Encrypt and decrypt processes all wrapped into ONE activity respectively in preparation for defined Intents to use APG in other apps
## 0.9.3
* Handle large files correctly
* Better progress bars (especially for file encryption/decryption)
* Option to delete files after en-/decryption
* Bug fixes, layout tweaks
## 0.9.2
* Settings for default encryption/hash algorithm
* Hushmail key support
* GUI improvements (encrypt file layout rewritten)
* Bug fixes
## 0.9.1
* ElGamal support for subkeys
* Fixes of some silly 0.9.0 bugs
## 0.9.0
* OI File Manager support
* File encryption/decryption
## 0.8.1
* Display/verify signed-only mails
* Bug fixes, layout fixes
## 0.8.0
* Create/edit keys
* Export keys
* GUI more Android-like
* A lot of code review, rewriting things
* Tidy up strings and error handling
## 0.7.1
* Minor fixes, some code review
* Recognize ElGamal encryption keys as suitable for encryption
* Allow signing only
## 0.7.0
* Initial public release

View File

@ -5,7 +5,7 @@ buildscript {
dependencies { dependencies {
// NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information
classpath 'com.novoda:gradle-android-test-plugin:0.10.0' classpath 'com.novoda:gradle-android-test-plugin:0.10.1'
} }
} }

View File

@ -6,20 +6,21 @@ dependencies {
// NOTE: libraries are pinned to a specific build, see below // NOTE: libraries are pinned to a specific build, see below
// from local Android SDK // from local Android SDK
compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:recyclerview-v7:21.0.3' compile 'com.android.support:recyclerview-v7:22.0.0'
compile 'com.android.support:cardview-v7:21.0.3' compile 'com.android.support:cardview-v7:22.0.0'
// JCenter etc. // JCenter etc.
compile 'com.eftimoff:android-patternview:1.0.1@aar' compile 'com.eftimoff:android-patternview:1.0.1@aar'
compile 'com.journeyapps:zxing-android-embedded:2.0.1@aar' compile 'com.journeyapps:zxing-android-embedded:2.1.0@aar'
compile 'com.journeyapps:zxing-android-integration:2.0.1@aar' compile 'com.journeyapps:zxing-android-integration:2.1.0@aar'
compile 'com.google.zxing:core:3.0.1' compile 'com.google.zxing:core:3.2.0'
compile 'com.jpardogo.materialtabstrip:library:1.0.9' compile 'com.jpardogo.materialtabstrip:library:1.0.9'
compile 'it.neokree:MaterialNavigationDrawer:1.3.1' compile 'it.neokree:MaterialNavigationDrawer:1.3.2'
compile 'com.getbase:floatingactionbutton:1.8.0' compile 'com.getbase:floatingactionbutton:1.9.0'
compile 'org.commonjava.googlecode.markdown4j:markdown4j:2.2-cj-1.0'
// libs as submodules // libs as submodules
compile project(':extern:openpgp-api-lib') compile project(':extern:openpgp-api-lib')
compile project(':extern:openkeychain-api-lib') compile project(':extern:openkeychain-api-lib')
@ -40,32 +41,33 @@ dependencies {
// Comment out the libs referenced as git submodules! // Comment out the libs referenced as git submodules!
dependencyVerification { dependencyVerification {
verify = [ verify = [
'com.android.support:support-v4:703572d3015a088cc5604b7e38885af3d307c829d0c5ceaf8654ff41c71cd160', 'com.android.support:support-v4:355a11466727e8ba00e239416aec55ac3cd3fb4ffc9d20c4a33373085c050bd1',
'com.android.support:appcompat-v7:5dbeb5316d0a6027d646ae552804c3baa5e3bd53f7f33db50904d51505c8a0e5', 'com.android.support:appcompat-v7:40114cb756fecffa4a51c5645593cf64509c576594f77e41e801368051115c7b',
'com.android.support:recyclerview-v7:e525ad3f33c84bb12b73d2dc975b55364a53f0f2d0697e043efba59ba73e22d2', 'com.android.support:recyclerview-v7:859ed80e3761f8fc3126901260b208505120b5678bcf36ad2cfe9c453958b9c7',
'com.android.support:cardview-v7:45c48c2ab056bc7a8573970b10f8902742c5d443f180dae43c56557397ac39af', 'com.android.support:cardview-v7:4c03f2acce9925aa4f8845cb8cb37b3772c712b2438ff15f76c9e3d3bc63ead7',
'com.eftimoff:android-patternview:cec80e7265b8d8278b3c55b5fcdf551e4600ac2c8bf60d8dd76adca538af0b1e', 'com.eftimoff:android-patternview:cec80e7265b8d8278b3c55b5fcdf551e4600ac2c8bf60d8dd76adca538af0b1e',
'com.journeyapps:zxing-android-embedded:5d6ba3931bd0b999695e363b571e95bd6bc9956340c1e6ce740cd0bff3d89a50', 'com.journeyapps:zxing-android-embedded:57fdf8a262135976201fd89f1bd8016ed16510be92e7ea721b999daeeeab8f7e',
'com.journeyapps:zxing-android-integration:6f50bb07c057ac94319777ddfbb66f5d4f6190393418b2fc861e0e60d06f3c0d', 'com.journeyapps:zxing-android-integration:12caeb2608f11b6df77d27edc505ac8580abfc97a09a814b638cb9df0ba06906',
'com.google.zxing:core:38c49045765281e4c170062fa3f48e4e988629bf985cab850c7497be5eaa72a1', 'com.google.zxing:core:7fe5a8ff437635a540e56317649937b768b454795ce999ed5f244f83373dee7b',
'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa', 'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa',
'it.neokree:MaterialNavigationDrawer:1174d751a54689fccf53c1fbcdf439745926ae19024f4f1017afb6b29643c57d', 'it.neokree:MaterialNavigationDrawer:a1221a410c5f71bf078c5c4768fdf06b402d6006c74f8e7b61199e4edc2aea57',
// 'com.nispok:snackbar:59dc092a44c877e9ce5f9040c632d99e62d8932b0a4d67ba0ec9e35467d9047c', 'com.getbase:floatingactionbutton:052aa2a94e49e5dccc97cb99f2add87e8698b84859f0e3ac181100c0bc7640ca',
'com.getbase:floatingactionbutton:e63966148212e9685afad2370780ea239b6dbd2a06f6a3f919b98882318e6a32', 'org.commonjava.googlecode.markdown4j:markdown4j:e952e825d29e1317d96f79f346bfb6786c7c5eef50bd26e54a80823704b62e13',
'com.android.support:support-annotations:fdee2354787ef66b268e75958de3f7f6c4f8f325510a6dac9f49c929f83a63de', // 'OpenKeychain.extern:openpgp-api-lib:f05a9215cdad3a6597e4c5ece6fcec92b178d218195a3e88d2c0937c48dd9580',
'com.balysv:material-ripple:587f19c1e27f16c7dc67ff9ac73838aa1451086ef05a15cee38bee3e4e1454ae', // 'OpenKeychain.extern:openkeychain-api-lib:50f6ebb5452d3fdc7be137ccf857a0ff44d55539fcb7b91baef495766ed7f429',
//'OpenKeychain.extern:openpgp-api-lib:b17bb282321351e4b00b4cd6422a57aadc13decae264019a88707bcb556439ea', // 'OpenKeychain.extern:html-textview:536822e8fdcd3e4628d0a1cd6c252285ba5f8e5bfb20d71ff80fdbdb6cc8be8c',
//'OpenKeychain.extern:openkeychain-api-lib:5f95f01c066069d4bde68992fd8da5faac21510d009b1fdae7a2e28e43e82cf4', // 'OpenKeychain.extern.StickyListHeaders:library:d9937cf9d9992863e32cee1f18ffec12df7b97dd83939bb75ee6cf747c54bed1',
//'OpenKeychain.extern:html-textview:b58e343cf4c145e91f888806d06a2a7770a9e9331a72f08cfcf1128db30dcff3', // 'com.madgag.spongycastle:core:df8fcc028a95ac5ffab3b78c9163f5cfa672e41cd50128ca55d458b6cfbacf4b',
//'OpenKeychain.extern.StickyListHeaders:library:24e25da422efc08e4e7a06efbe927fdf17f7a9aa722db2b983385e2bf0004da5', // 'com.madgag.spongycastle:pg:160b345b10a2c92dc731453eec87037377f66a8e14a0648d404d7b193c4e380d',
//'com.madgag.spongycastle:core:a9e4f60afe6b2661e0713190ade92c099b3f74ebbc67c1bc3e3fced0144307f4', // 'com.madgag.spongycastle:pkix:0b4f3301ea12dd9f25d71770e6ea9f75e0611bf53062543e47be5bc15340a7e4',
//'com.madgag.spongycastle:pg:29d544ff289fcaafcf6c3904185f5a6fbdb623cf1a1e377fcb239edc31ee9c17', // 'com.madgag.spongycastle:prov:7325942e0b39f5fb35d6380818eed4b826e7dfc7570ad35b696d778049d8c36a',
//'com.madgag.spongycastle:pkix:950d6eac8205c6a24aa87066fbf9cd0af50b95858b8d2b18d53e2fada2dbb2e3', // 'OpenKeychain.extern:minidns:77b1786d29469e3b21f9404827cab811edc857cd68bc732cd57f11307c332eae',
//'com.madgag.spongycastle:prov:0b78ffd7a59b1b690a05ebe9bb31d43405046a44a18e0529d7c826acb56350b7', // 'OpenKeychain.extern.KeybaseLib:Lib:c91cda4a75692d8664644cd17d8ac962ce5bc0e266ea26673a639805f1eccbdf',
//'OpenKeychain.extern:minidns:cf332e993d7fcdc0a3821f5b997944df40582dc6c9f0ea36b5e20c1e289cb19f', // 'OpenKeychain.extern.TokenAutoComplete:library:9333f1c269996812baa18c0494e42f931309ab00a3cdb65a6e4d70f82d4c7107',
//'OpenKeychain.extern.KeybaseLib:Lib:af9bff087148e0859430d0b99ece096c41b315c5dc1ed500a68580b9b0e5ab11', // 'OpenKeychain.extern:safeslinger-exchange:d222721bb35408daaab9f46449364b2657112705ee571d7532f81cbeb9c4a73f',
//'OpenKeychain.extern.TokenAutoComplete:library:40d4212a95e947efdb02f2ca66c95a27d49fba848471a6317eca2b9cc18e8780', // 'OpenKeychain.extern.snackbar:lib:52357426e5275412e2063bdf6f0e6b957a3ea74da45e0aef35d22d9afc542e23',
//'OpenKeychain.extern:safeslinger-exchange:94a1ce68217af7499579a042758283b1530912c53241bdfa06d1a079a5ae3faf', 'com.android.support:support-annotations:ab6b131ab0e1edd165d21fb4c3edadeacbee9539aa166f7f7cbae05b60dc207a',
'com.balysv:material-ripple:b2580520bcb5e5d77bd8c42b030317accaf8f88e7e57c46a29c47c8a62d4ff45',
] ]
} }
@ -75,7 +77,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 21 targetSdkVersion 22
} }
compileOptions { compileOptions {
@ -96,7 +98,7 @@ android {
project.hasProperty('signingKeyAlias') && project.hasProperty('signingKeyAlias') &&
project.hasProperty('signingKeyPassword')) { project.hasProperty('signingKeyPassword')) {
println "Found sign properties in gradle.properties! Signing build…" println "Found sign properties in gradle.properties! Signing build…"
signingConfigs { signingConfigs {
release { release {
storeFile file(signingStoreLocation) storeFile file(signingStoreLocation)
@ -110,7 +112,7 @@ android {
} else { } else {
buildTypes.release.signingConfig = null buildTypes.release.signingConfig = null
} }
// NOTE: Lint is disabled because it slows down builds, // NOTE: Lint is disabled because it slows down builds,
// to enable it comment out the code at the bottom of this build.gradle // to enable it comment out the code at the bottom of this build.gradle
lintOptions { lintOptions {
@ -121,7 +123,7 @@ android {
htmlReport true htmlReport true
htmlOutput file('lint-report.html') htmlOutput file('lint-report.html')
} }
// Disable preDexing, causes com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) on some systems // Disable preDexing, causes com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) on some systems
dexOptions { dexOptions {
preDexLibraries = false preDexLibraries = false

View File

@ -3,8 +3,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="org.sufficientlysecure.keychain" package="org.sufficientlysecure.keychain"
android:installLocation="auto" android:installLocation="auto"
android:versionCode="31202" android:versionCode="31203"
android:versionName="3.2beta2"> android:versionName="3.2beta3">
<!-- <!--
General remarks General remarks
@ -705,6 +705,9 @@
<service <service
android:name=".service.KeychainIntentService" android:name=".service.KeychainIntentService"
android:exported="false" /> android:exported="false" />
<service
android:name=".service.CloudImportService"
android:exported="false" />
<provider <provider
android:name=".provider.KeychainProvider" android:name=".provider.KeychainProvider"

View File

@ -168,7 +168,7 @@ public class ImportExportOperation extends BaseOperation {
return new ImportKeyResult(ImportKeyResult.RESULT_FAIL_NOTHING, log); return new ImportKeyResult(ImportKeyResult.RESULT_FAIL_NOTHING, log);
} }
int newKeys = 0, oldKeys = 0, badKeys = 0, secret = 0; int newKeys = 0, updatedKeys = 0, badKeys = 0, secret = 0;
ArrayList<Long> importedMasterKeyIds = new ArrayList<>(); ArrayList<Long> importedMasterKeyIds = new ArrayList<>();
boolean cancelled = false; boolean cancelled = false;
@ -302,7 +302,7 @@ public class ImportExportOperation extends BaseOperation {
if (!result.success()) { if (!result.success()) {
badKeys += 1; badKeys += 1;
} else if (result.updated()) { } else if (result.updated()) {
oldKeys += 1; updatedKeys += 1;
importedMasterKeyIds.add(key.getMasterKeyId()); importedMasterKeyIds.add(key.getMasterKeyId());
} else { } else {
newKeys += 1; newKeys += 1;
@ -333,7 +333,9 @@ public class ImportExportOperation extends BaseOperation {
} }
// Special: make sure new data is synced into contacts // Special: make sure new data is synced into contacts
ContactSyncAdapterService.requestSync(); // disabling sync right now since it reduces speed while multi-threading
// so, we expect calling functions to take care of it. KeychainIntentService handles this
//ContactSyncAdapterService.requestSync();
// convert to long array // convert to long array
long[] importedMasterKeyIdsArray = new long[importedMasterKeyIds.size()]; long[] importedMasterKeyIdsArray = new long[importedMasterKeyIds.size()];
@ -348,18 +350,18 @@ public class ImportExportOperation extends BaseOperation {
} }
// special return case: no new keys at all // special return case: no new keys at all
if (badKeys == 0 && newKeys == 0 && oldKeys == 0) { if (badKeys == 0 && newKeys == 0 && updatedKeys == 0) {
resultType = ImportKeyResult.RESULT_FAIL_NOTHING; resultType = ImportKeyResult.RESULT_FAIL_NOTHING;
} else { } else {
if (newKeys > 0) { if (newKeys > 0) {
resultType |= ImportKeyResult.RESULT_OK_NEWKEYS; resultType |= ImportKeyResult.RESULT_OK_NEWKEYS;
} }
if (oldKeys > 0) { if (updatedKeys > 0) {
resultType |= ImportKeyResult.RESULT_OK_UPDATED; resultType |= ImportKeyResult.RESULT_OK_UPDATED;
} }
if (badKeys > 0) { if (badKeys > 0) {
resultType |= ImportKeyResult.RESULT_WITH_ERRORS; resultType |= ImportKeyResult.RESULT_WITH_ERRORS;
if (newKeys == 0 && oldKeys == 0) { if (newKeys == 0 && updatedKeys == 0) {
resultType |= ImportKeyResult.RESULT_ERROR; resultType |= ImportKeyResult.RESULT_ERROR;
} }
} }
@ -369,15 +371,15 @@ public class ImportExportOperation extends BaseOperation {
} }
// Final log entry, it's easier to do this individually // Final log entry, it's easier to do this individually
if ( (newKeys > 0 || oldKeys > 0) && badKeys > 0) { if ( (newKeys > 0 || updatedKeys > 0) && badKeys > 0) {
log.add(LogType.MSG_IMPORT_PARTIAL, 1); log.add(LogType.MSG_IMPORT_PARTIAL, 1);
} else if (newKeys > 0 || oldKeys > 0) { } else if (newKeys > 0 || updatedKeys > 0) {
log.add(LogType.MSG_IMPORT_SUCCESS, 1); log.add(LogType.MSG_IMPORT_SUCCESS, 1);
} else { } else {
log.add(LogType.MSG_IMPORT_ERROR, 1); log.add(LogType.MSG_IMPORT_ERROR, 1);
} }
return new ImportKeyResult(resultType, log, newKeys, oldKeys, badKeys, secret, return new ImportKeyResult(resultType, log, newKeys, updatedKeys, badKeys, secret,
importedMasterKeyIdsArray); importedMasterKeyIdsArray);
} }

View File

@ -62,19 +62,19 @@ import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
/** This class supports a single, low-level, sign/encrypt operation. /**
* * This class supports a single, low-level, sign/encrypt operation.
* <p/>
* The operation of this class takes an Input- and OutputStream plus a * The operation of this class takes an Input- and OutputStream plus a
* PgpSignEncryptInput, and signs and/or encrypts the stream as * PgpSignEncryptInput, and signs and/or encrypts the stream as
* parametrized in the PgpSignEncryptInput object. It returns its status * parametrized in the PgpSignEncryptInput object. It returns its status
* and a possible detached signature as a SignEncryptResult. * and a possible detached signature as a SignEncryptResult.
* * <p/>
* For a high-level operation based on URIs, see SignEncryptOperation. * For a high-level operation based on URIs, see SignEncryptOperation.
* *
* @see PgpSignEncryptInputParcel * @see PgpSignEncryptInputParcel
* @see org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult * @see org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult
* @see org.sufficientlysecure.keychain.operations.SignEncryptOperation * @see org.sufficientlysecure.keychain.operations.SignEncryptOperation
*
*/ */
public class PgpSignEncryptOperation extends BaseOperation { public class PgpSignEncryptOperation extends BaseOperation {
@ -488,6 +488,12 @@ public class PgpSignEncryptOperation extends BaseOperation {
log.add(LogType.MSG_PSE_PENDING_NFC, indent); log.add(LogType.MSG_PSE_PENDING_NFC, indent);
PgpSignEncryptResult result = PgpSignEncryptResult result =
new PgpSignEncryptResult(PgpSignEncryptResult.RESULT_PENDING_NFC, log); new PgpSignEncryptResult(PgpSignEncryptResult.RESULT_PENDING_NFC, log);
// SignatureSubKeyId can be null.
if (input.getSignatureSubKeyId() == null) {
return new PgpSignEncryptResult(PgpSignEncryptResult.RESULT_ERROR, log);
}
// Note that the checked key here is the master key, not the signing key // Note that the checked key here is the master key, not the signing key
// (although these are always the same on Yubikeys) // (although these are always the same on Yubikeys)
result.setNfcData(signingKey.getKeyId(), e.hashToSign, e.hashAlgo, result.setNfcData(signingKey.getKeyId(), e.hashToSign, e.hashAlgo,

View File

@ -0,0 +1,387 @@
/*
* Copyright (C) 2012-2013 Dominik Schürmann <dominik@dominikschuermann.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sufficientlysecure.keychain.service;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.operations.ImportExportOperation;
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.Progressable;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* When this service is started it will initiate a multi-threaded key import and when done it will
* shut itself down.
*/
public class CloudImportService extends Service implements Progressable {
//required as extras from intent
public static final String EXTRA_MESSENGER = "messenger";
public static final String EXTRA_DATA = "data";
//required by data bundle
public static final String IMPORT_KEY_LIST = "import_key_list";
public static final String IMPORT_KEY_SERVER = "import_key_server";
// indicates a request to cancel the import
public static final String ACTION_CANCEL = Constants.INTENT_PREFIX + "CANCEL";
//tells the spawned threads whether the user has requested a cancel
private static AtomicBoolean mActionCancelled = new AtomicBoolean(false);
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* Used to accumulate the results of individual key imports
*/
private class KeyImportAccumulator {
private OperationResult.OperationLog mImportLog = new OperationResult.OperationLog();
private int mTotalKeys;
private int mImportedKeys = 0;
private Progressable mImportProgressable;
ArrayList<Long> mImportedMasterKeyIds = new ArrayList<Long>();
private int mBadKeys = 0;
private int mNewKeys = 0;
private int mUpdatedKeys = 0;
private int mSecret = 0;
private int mResultType = 0;
public KeyImportAccumulator(int totalKeys) {
mTotalKeys = totalKeys;
//ignore updates from ImportExportOperation for now
mImportProgressable = new Progressable() {
@Override
public void setProgress(String message, int current, int total) {
}
@Override
public void setProgress(int resourceId, int current, int total) {
}
@Override
public void setProgress(int current, int total) {
}
@Override
public void setPreventCancel() {
}
};
}
public Progressable getImportProgressable() {
return mImportProgressable;
}
public int getTotalKeys() {
return mTotalKeys;
}
public int getImportedKeys() {
return mImportedKeys;
}
public synchronized void accumulateKeyImport(ImportKeyResult result) {
mImportedKeys++;
mImportLog.addAll(result.getLog().toList());//accumulates log
mBadKeys += result.mBadKeys;
mNewKeys += result.mNewKeys;
mUpdatedKeys += result.mUpdatedKeys;
mSecret += result.mSecret;
long[] masterKeyIds = result.getImportedMasterKeyIds();
for (int i = 0; i < masterKeyIds.length; i++) {
mImportedMasterKeyIds.add(masterKeyIds[i]);
}
// if any key import has been cancelled, set result type to cancelled
// resultType is added to in getConsolidatedKayImport to account for remaining factors
mResultType |= result.getResult() & ImportKeyResult.RESULT_CANCELLED;
}
/**
* returns accumulated result of all imports so far
*
* @return
*/
public ImportKeyResult getConsolidatedImportKeyResult() {
// adding required information to mResultType
// special case,no keys requested for import
if (mBadKeys == 0 && mNewKeys == 0 && mUpdatedKeys == 0) {
mResultType = ImportKeyResult.RESULT_FAIL_NOTHING;
} else {
if (mNewKeys > 0) {
mResultType |= ImportKeyResult.RESULT_OK_NEWKEYS;
}
if (mUpdatedKeys > 0) {
mResultType |= ImportKeyResult.RESULT_OK_UPDATED;
}
if (mBadKeys > 0) {
mResultType |= ImportKeyResult.RESULT_WITH_ERRORS;
if (mNewKeys == 0 && mUpdatedKeys == 0) {
mResultType |= ImportKeyResult.RESULT_ERROR;
}
}
if (mImportLog.containsWarnings()) {
mResultType |= ImportKeyResult.RESULT_WARNINGS;
}
}
long masterKeyIds[] = new long[mImportedMasterKeyIds.size()];
for (int i = 0; i < masterKeyIds.length; i++) {
masterKeyIds[i] = mImportedMasterKeyIds.get(i);
}
return new ImportKeyResult(mResultType, mImportLog, mNewKeys, mUpdatedKeys, mBadKeys,
mSecret, masterKeyIds);
}
public boolean isImportFinished() {
return mTotalKeys == mImportedKeys;
}
}
private KeyImportAccumulator mKeyImportAccumulator;
Messenger mMessenger;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (ACTION_CANCEL.equals(intent.getAction())) {
mActionCancelled.set(true);
return Service.START_NOT_STICKY;
}
mActionCancelled.set(false);//we haven't been cancelled, yet
Bundle extras = intent.getExtras();
mMessenger = (Messenger) extras.get(EXTRA_MESSENGER);
Bundle data = extras.getBundle(EXTRA_DATA);
final String keyServer = data.getString(IMPORT_KEY_SERVER);
//keyList being null (in case key list to be reaad from cache) is checked by importKeys
final ArrayList<ParcelableKeyRing> keyList = data.getParcelableArrayList(IMPORT_KEY_LIST);
// Adding keys to the ThreadPoolExecutor takes time, we don't want to block the main thread
Thread baseImportThread = new Thread(new Runnable() {
@Override
public void run() {
importKeys(keyList, keyServer);
}
});
baseImportThread.start();
return Service.START_NOT_STICKY;
}
public void importKeys(ArrayList<ParcelableKeyRing> keyList, final String keyServer) {
ParcelableFileCache<ParcelableKeyRing> cache =
new ParcelableFileCache<>(this, "key_import.pcl");
int totKeys = 0;
Iterator<ParcelableKeyRing> keyListIterator = null;
//either keyList or cache must be null, no guarantees otherwise
if (keyList == null) {//export from cache, copied from ImportExportOperation.importKeyRings
try {
ParcelableFileCache.IteratorWithSize<ParcelableKeyRing> it = cache.readCache();
keyListIterator = it;
totKeys = it.getSize();
} catch (IOException e) {
// Special treatment here, we need a lot
OperationResult.OperationLog log = new OperationResult.OperationLog();
log.add(OperationResult.LogType.MSG_IMPORT, 0, 0);
log.add(OperationResult.LogType.MSG_IMPORT_ERROR_IO, 0, 0);
keyImportFailed(new ImportKeyResult(ImportKeyResult.RESULT_ERROR, log));
}
} else {
keyListIterator = keyList.iterator();
totKeys = keyList.size();
}
if (keyListIterator != null) {
mKeyImportAccumulator = new KeyImportAccumulator(totKeys);
setProgress(0, totKeys);
final int maxThreads = 200;
ExecutorService importExecutor = new ThreadPoolExecutor(0, maxThreads,
30L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
while (keyListIterator.hasNext()) {
final ParcelableKeyRing pkRing = keyListIterator.next();
Runnable importOperationRunnable = new Runnable() {
@Override
public void run() {
ImportKeyResult result = null;
try {
ImportExportOperation importExportOperation = new ImportExportOperation(
CloudImportService.this,
new ProviderHelper(CloudImportService.this),
mKeyImportAccumulator.getImportProgressable(),
mActionCancelled);
ArrayList<ParcelableKeyRing> list = new ArrayList<>();
list.add(pkRing);
result = importExportOperation.importKeyRings(list,
keyServer);
} finally {
// in the off-chance that importKeyRings does something to crash the
// thread before it can call singleKeyRingImportCompleted, our imported
// key count will go wrong. This will cause the service to never die,
// and the progress dialog to stay displayed. The finally block was
// originally meant to ensure singleKeyRingImportCompleted was called,
// and checks for null were to be introduced, but in such a scenario,
// knowing an uncaught error exists in importKeyRings is more important.
// if a null gets passed, something wrong is happening. We want a crash.
singleKeyRingImportCompleted(result);
}
}
};
importExecutor.execute(importOperationRunnable);
}
}
}
private synchronized void singleKeyRingImportCompleted(ImportKeyResult result) {
// increase imported key count and accumulate log and bad, new etc. key counts from result
mKeyImportAccumulator.accumulateKeyImport(result);
setProgress(mKeyImportAccumulator.getImportedKeys(), mKeyImportAccumulator.getTotalKeys());
if (mKeyImportAccumulator.isImportFinished()) {
ContactSyncAdapterService.requestSync();
sendMessageToHandler(ServiceProgressHandler.MessageStatus.OKAY,
mKeyImportAccumulator.getConsolidatedImportKeyResult());
stopSelf();//we're done here
}
}
private void keyImportFailed(ImportKeyResult result) {
sendMessageToHandler(ServiceProgressHandler.MessageStatus.OKAY, result);
}
private void sendMessageToHandler(ServiceProgressHandler.MessageStatus status, Integer arg2, Bundle data) {
Message msg = Message.obtain();
assert msg != null;
msg.arg1 = status.ordinal();
if (arg2 != null) {
msg.arg2 = arg2;
}
if (data != null) {
msg.setData(data);
}
try {
mMessenger.send(msg);
} catch (RemoteException e) {
Log.w(Constants.TAG, "Exception sending message, Is handler present?", e);
} catch (NullPointerException e) {
Log.w(Constants.TAG, "Messenger is null!", e);
}
}
private void sendMessageToHandler(ServiceProgressHandler.MessageStatus status, OperationResult data) {
Bundle bundle = new Bundle();
bundle.putParcelable(OperationResult.EXTRA_RESULT, data);
sendMessageToHandler(status, null, bundle);
}
private void sendMessageToHandler(ServiceProgressHandler.MessageStatus status, Bundle data) {
sendMessageToHandler(status, null, data);
}
private void sendMessageToHandler(ServiceProgressHandler.MessageStatus status) {
sendMessageToHandler(status, null, null);
}
/**
* Set progress of ProgressDialog by sending message to handler on UI thread
*/
@Override
public synchronized void setProgress(String message, int progress, int max) {
Log.d(Constants.TAG, "Send message by setProgress with progress=" + progress + ", max="
+ max);
Bundle data = new Bundle();
if (message != null) {
data.putString(ServiceProgressHandler.DATA_MESSAGE, message);
}
data.putInt(ServiceProgressHandler.DATA_PROGRESS, progress);
data.putInt(ServiceProgressHandler.DATA_PROGRESS_MAX, max);
sendMessageToHandler(ServiceProgressHandler.MessageStatus.UPDATE_PROGRESS, null, data);
}
@Override
public synchronized void setProgress(int resourceId, int progress, int max) {
setProgress(getString(resourceId), progress, max);
}
@Override
public synchronized void setProgress(int progress, int max) {
setProgress(null, progress, max);
}
@Override
public synchronized void setPreventCancel() {
sendMessageToHandler(ServiceProgressHandler.MessageStatus.PREVENT_CANCEL);
}
}

View File

@ -60,8 +60,8 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralMsgIdException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralMsgIdException;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler.MessageStatus;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler.MessageStatus;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
@ -137,7 +137,7 @@ public class KeychainIntentService extends IntentService implements Progressable
private static final IOType[] values = values(); private static final IOType[] values = values();
public static IOType fromInt(int n) { public static IOType fromInt(int n) {
if(n < 0 || n >= values.length) { if (n < 0 || n >= values.length) {
return UNKNOWN; return UNKNOWN;
} else { } else {
return values[n]; return values[n];
@ -398,12 +398,12 @@ public class KeychainIntentService extends IntentService implements Progressable
} }
Bundle resultData = new Bundle(); Bundle resultData = new Bundle();
resultData.putString(KeychainIntentServiceHandler.DATA_MESSAGE, "OK"); resultData.putString(ServiceProgressHandler.DATA_MESSAGE, "OK");
// these help the handler construct a useful human-readable message // these help the handler construct a useful human-readable message
resultData.putString(KeychainIntentServiceHandler.KEYBASE_PROOF_URL, prover.getProofUrl()); resultData.putString(ServiceProgressHandler.KEYBASE_PROOF_URL, prover.getProofUrl());
resultData.putString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_URL, prover.getPresenceUrl()); resultData.putString(ServiceProgressHandler.KEYBASE_PRESENCE_URL, prover.getPresenceUrl());
resultData.putString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_LABEL, prover.getPresenceLabel()); resultData.putString(ServiceProgressHandler.KEYBASE_PRESENCE_LABEL, prover.getPresenceLabel());
sendMessageToHandler(MessageStatus.OKAY, resultData); sendMessageToHandler(MessageStatus.OKAY, resultData);
} catch (Exception e) { } catch (Exception e) {
sendErrorToHandler(e); sendErrorToHandler(e);
@ -600,7 +600,7 @@ public class KeychainIntentService extends IntentService implements Progressable
private void sendProofError(String msg) { private void sendProofError(String msg) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(KeychainIntentServiceHandler.DATA_ERROR, msg); bundle.putString(ServiceProgressHandler.DATA_ERROR, msg);
sendMessageToHandler(MessageStatus.OKAY, bundle); sendMessageToHandler(MessageStatus.OKAY, bundle);
} }
@ -617,7 +617,7 @@ public class KeychainIntentService extends IntentService implements Progressable
Log.d(Constants.TAG, "KeychainIntentService Exception: ", e); Log.d(Constants.TAG, "KeychainIntentService Exception: ", e);
Bundle data = new Bundle(); Bundle data = new Bundle();
data.putString(KeychainIntentServiceHandler.DATA_ERROR, message); data.putString(ServiceProgressHandler.DATA_ERROR, message);
sendMessageToHandler(MessageStatus.EXCEPTION, null, data); sendMessageToHandler(MessageStatus.EXCEPTION, null, data);
} }
@ -665,10 +665,10 @@ public class KeychainIntentService extends IntentService implements Progressable
Bundle data = new Bundle(); Bundle data = new Bundle();
if (message != null) { if (message != null) {
data.putString(KeychainIntentServiceHandler.DATA_MESSAGE, message); data.putString(ServiceProgressHandler.DATA_MESSAGE, message);
} }
data.putInt(KeychainIntentServiceHandler.DATA_PROGRESS, progress); data.putInt(ServiceProgressHandler.DATA_PROGRESS, progress);
data.putInt(KeychainIntentServiceHandler.DATA_PROGRESS_MAX, max); data.putInt(ServiceProgressHandler.DATA_PROGRESS_MAX, max);
sendMessageToHandler(MessageStatus.UPDATE_PROGRESS, null, data); sendMessageToHandler(MessageStatus.UPDATE_PROGRESS, null, data);
} }

View File

@ -93,7 +93,6 @@ public class PassphraseCacheService extends Service {
public static final String EXTRA_MESSENGER = "messenger"; public static final String EXTRA_MESSENGER = "messenger";
public static final String EXTRA_USER_ID = "user_id"; public static final String EXTRA_USER_ID = "user_id";
private static final int REQUEST_ID = 0;
private static final long DEFAULT_TTL = 15; private static final long DEFAULT_TTL = 15;
private static final int NOTIFICATION_ID = 1; private static final int NOTIFICATION_ID = 1;
@ -327,7 +326,8 @@ public class PassphraseCacheService extends Service {
private static PendingIntent buildIntent(Context context, long keyId) { private static PendingIntent buildIntent(Context context, long keyId) {
Intent intent = new Intent(BROADCAST_ACTION_PASSPHRASE_CACHE_SERVICE); Intent intent = new Intent(BROADCAST_ACTION_PASSPHRASE_CACHE_SERVICE);
intent.putExtra(EXTRA_KEY_ID, keyId); intent.putExtra(EXTRA_KEY_ID, keyId);
return PendingIntent.getBroadcast(context, REQUEST_ID, intent, // request code should be unique for each PendingIntent, thus keyId is used
return PendingIntent.getBroadcast(context, (int) keyId, intent,
PendingIntent.FLAG_CANCEL_CURRENT); PendingIntent.FLAG_CANCEL_CURRENT);
} }

View File

@ -32,7 +32,7 @@ import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
public class KeychainIntentServiceHandler extends Handler { public class ServiceProgressHandler extends Handler {
// possible messages sent from this service to handler on ui // possible messages sent from this service to handler on ui
public static enum MessageStatus{ public static enum MessageStatus{
@ -69,28 +69,34 @@ public class KeychainIntentServiceHandler extends Handler {
Activity mActivity; Activity mActivity;
ProgressDialogFragment mProgressDialogFragment; ProgressDialogFragment mProgressDialogFragment;
public KeychainIntentServiceHandler(Activity activity) { public ServiceProgressHandler(Activity activity) {
this.mActivity = activity; this.mActivity = activity;
} }
public KeychainIntentServiceHandler(Activity activity, public ServiceProgressHandler(Activity activity,
ProgressDialogFragment progressDialogFragment) { ProgressDialogFragment progressDialogFragment) {
this.mActivity = activity; this.mActivity = activity;
this.mProgressDialogFragment = progressDialogFragment; this.mProgressDialogFragment = progressDialogFragment;
} }
public KeychainIntentServiceHandler(Activity activity, String progressDialogMessage, public ServiceProgressHandler(Activity activity,
int progressDialogStyle) { String progressDialogMessage,
this(activity, progressDialogMessage, progressDialogStyle, false); int progressDialogStyle,
ProgressDialogFragment.ServiceType serviceType) {
this(activity, progressDialogMessage, progressDialogStyle, false, serviceType);
} }
public KeychainIntentServiceHandler(Activity activity, String progressDialogMessage, public ServiceProgressHandler(Activity activity,
int progressDialogStyle, boolean cancelable) { String progressDialogMessage,
int progressDialogStyle,
boolean cancelable,
ProgressDialogFragment.ServiceType serviceType) {
this.mActivity = activity; this.mActivity = activity;
this.mProgressDialogFragment = ProgressDialogFragment.newInstance( this.mProgressDialogFragment = ProgressDialogFragment.newInstance(
progressDialogMessage, progressDialogMessage,
progressDialogStyle, progressDialogStyle,
cancelable); cancelable,
serviceType);
} }
public void showProgressDialog(FragmentActivity activity) { public void showProgressDialog(FragmentActivity activity) {

View File

@ -55,9 +55,11 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel; import org.sufficientlysecure.keychain.service.CertifyActionsParcel;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction; import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner; import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
import org.sufficientlysecure.keychain.ui.widget.KeySpinner; import org.sufficientlysecure.keychain.ui.widget.KeySpinner;
@ -342,9 +344,12 @@ public class CertifyKeyFragment extends CryptoOperationFragment
} else { } else {
// Message is received after signing is done in KeychainIntentService // Message is received after signing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getActivity(), getString(R.string.progress_certifying), getActivity(),
ProgressDialog.STYLE_SPINNER, true) { getString(R.string.progress_certifying),
ProgressDialog.STYLE_SPINNER,
true,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by KeychainIntentCryptoServiceHandler first // handle messages by KeychainIntentCryptoServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -26,7 +26,8 @@ import android.support.v4.app.FragmentActivity;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
/** /**
* We can not directly create a dialog on the application context. * We can not directly create a dialog on the application context.
@ -49,10 +50,11 @@ public class ConsolidateDialogActivity extends FragmentActivity {
private void consolidateRecovery(boolean recovery) { private void consolidateRecovery(boolean recovery) {
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
this, this,
getString(R.string.progress_importing), getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL) { ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -39,16 +39,15 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
public class CreateKeyFinalFragment extends Fragment { public class CreateKeyFinalFragment extends Fragment {
@ -195,10 +194,11 @@ public class CreateKeyFinalFragment extends Fragment {
Intent intent = new Intent(getActivity(), KeychainIntentService.class); Intent intent = new Intent(getActivity(), KeychainIntentService.class);
intent.setAction(KeychainIntentService.ACTION_EDIT_KEYRING); intent.setAction(KeychainIntentService.ACTION_EDIT_KEYRING);
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getActivity(), getActivity(),
getString(R.string.progress_building_key), getString(R.string.progress_building_key),
ProgressDialog.STYLE_HORIZONTAL) { ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
@ -267,8 +267,11 @@ public class CreateKeyFinalFragment extends Fragment {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(), ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getString(R.string.progress_uploading), ProgressDialog.STYLE_HORIZONTAL) { getActivity(),
getString(R.string.progress_uploading),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -40,9 +40,10 @@ import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.NfcListenerFragment; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.NfcListenerFragment;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
@ -174,8 +175,12 @@ public class CreateKeyYubiImportFragment extends Fragment implements NfcListener
public void importKey() { public void importKey() {
// Message is received after decrypting is done in KeychainIntentService // Message is received after decrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(), ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getString(R.string.progress_importing), ProgressDialog.STYLE_HORIZONTAL) { getActivity(),
getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT
) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -17,45 +17,15 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ViewAnimator;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.NfcListenerFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.ui.widget.NameEditText;
import org.sufficientlysecure.keychain.util.Preferences;
public class CreateKeyYubiWaitFragment extends Fragment { public class CreateKeyYubiWaitFragment extends Fragment {

View File

@ -10,7 +10,7 @@ import android.support.v4.app.Fragment;
import org.sufficientlysecure.keychain.operations.results.CertifyResult; import org.sufficientlysecure.keychain.operations.results.CertifyResult;
import org.sufficientlysecure.keychain.operations.results.InputPendingResult; import org.sufficientlysecure.keychain.operations.results.InputPendingResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler.MessageStatus; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
@ -73,7 +73,7 @@ public abstract class CryptoOperationFragment extends Fragment {
public boolean handlePendingMessage(Message message) { public boolean handlePendingMessage(Message message) {
if (message.arg1 == MessageStatus.OKAY.ordinal()) { if (message.arg1 == ServiceProgressHandler.MessageStatus.OKAY.ordinal()) {
Bundle data = message.getData(); Bundle data = message.getData();
OperationResult result = data.getParcelable(CertifyResult.EXTRA_RESULT); OperationResult result = data.getParcelable(CertifyResult.EXTRA_RESULT);

View File

@ -38,8 +38,9 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType; import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
@ -197,8 +198,11 @@ public class DecryptFilesFragment extends DecryptFragment {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after decrypting is done in KeychainIntentService // Message is received after decrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(), ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { getActivity(),
getString(R.string.progress_decrypting),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
@ -271,8 +275,11 @@ public class DecryptFilesFragment extends DecryptFragment {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after decrypting is done in KeychainIntentService // Message is received after decrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(), ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { getActivity(),
getString(R.string.progress_decrypting),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -37,7 +37,8 @@ import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType; import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ShareHelper; import org.sufficientlysecure.keychain.util.ShareHelper;
@ -167,8 +168,11 @@ public class DecryptTextFragment extends DecryptFragment {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after encrypting is done in KeychainIntentService // Message is received after encrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(), ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { getActivity(),
getString(R.string.progress_decrypting),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -52,7 +52,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException; import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyChange; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyChange;
@ -61,12 +62,7 @@ import org.sufficientlysecure.keychain.ui.adapter.SubkeysAdapter;
import org.sufficientlysecure.keychain.ui.adapter.SubkeysAddedAdapter; import org.sufficientlysecure.keychain.ui.adapter.SubkeysAddedAdapter;
import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter;
import org.sufficientlysecure.keychain.ui.adapter.UserIdsAddedAdapter; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAddedAdapter;
import org.sufficientlysecure.keychain.ui.dialog.AddSubkeyDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.*;
import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyExpiryDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
@ -552,11 +548,12 @@ public class EditKeyFragment extends CryptoOperationFragment implements
Log.d(Constants.TAG, "cryptoInput:\n" + cryptoInput); Log.d(Constants.TAG, "cryptoInput:\n" + cryptoInput);
Log.d(Constants.TAG, "mSaveKeyringParcel:\n" + mSaveKeyringParcel); Log.d(Constants.TAG, "mSaveKeyringParcel:\n" + mSaveKeyringParcel);
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getActivity(), getActivity(),
getString(R.string.progress_saving), getString(R.string.progress_saving),
ProgressDialog.STYLE_HORIZONTAL, ProgressDialog.STYLE_HORIZONTAL,
true) { true,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -30,10 +30,11 @@ import org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult;
import org.sufficientlysecure.keychain.operations.results.SignEncryptResult; import org.sufficientlysecure.keychain.operations.results.SignEncryptResult;
import org.sufficientlysecure.keychain.pgp.SignEncryptParcel; import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
@ -126,8 +127,11 @@ public abstract class EncryptActivity extends BaseActivity {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after encrypting is done in KeychainIntentService // Message is received after encrypting is done in KeychainIntentService
KeychainIntentServiceHandler serviceHandler = new KeychainIntentServiceHandler(this, ServiceProgressHandler serviceHandler = new ServiceProgressHandler(
getString(R.string.progress_encrypting), ProgressDialog.STYLE_HORIZONTAL) { this,
getString(R.string.progress_encrypting),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -136,7 +136,9 @@ public class EncryptTextActivity extends EncryptActivity implements EncryptActiv
@Override @Override
public void setPassphrase(Passphrase passphrase) { public void setPassphrase(Passphrase passphrase) {
mPassphrase.removeFromMemory(); if (mPassphrase != null) {
mPassphrase.removeFromMemory();
}
mPassphrase = passphrase; mPassphrase = passphrase;
} }

View File

@ -27,11 +27,14 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import org.markdown4j.Markdown4jProcessor;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException;
public class HelpAboutFragment extends Fragment { public class HelpAboutFragment extends Fragment {
@ -44,8 +47,14 @@ public class HelpAboutFragment extends Fragment {
HtmlTextView aboutTextView = (HtmlTextView) view.findViewById(R.id.help_about_text); HtmlTextView aboutTextView = (HtmlTextView) view.findViewById(R.id.help_about_text);
// load html from raw resource (Parsing handled by HtmlTextView library) // load markdown from raw resource
aboutTextView.setHtmlFromRawResource(getActivity(), R.raw.help_about, true); try {
String html = new Markdown4jProcessor().process(
getActivity().getResources().openRawResource(R.raw.help_about));
aboutTextView.setHtmlFromString(html, true);
} catch (IOException e) {
Log.e(Constants.TAG, "IOException", e);
}
// no flickering when clicking textview for Android < 4 // no flickering when clicking textview for Android < 4
aboutTextView.setTextColor(getResources().getColor(android.R.color.black)); aboutTextView.setTextColor(getResources().getColor(android.R.color.black));

View File

@ -66,18 +66,23 @@ public class HelpActivity extends BaseActivity {
} }
Bundle startBundle = new Bundle(); Bundle startBundle = new Bundle();
startBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_start); startBundle.putInt(HelpMarkdownFragment.ARG_MARKDOWN_RES, R.raw.help_start);
mTabsAdapter.addTab(HelpHtmlFragment.class, startBundle, mTabsAdapter.addTab(HelpMarkdownFragment.class, startBundle,
getString(R.string.help_tab_start)); getString(R.string.help_tab_start));
Bundle wotBundle = new Bundle(); Bundle certificationBundle = new Bundle();
wotBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_certification); certificationBundle.putInt(HelpMarkdownFragment.ARG_MARKDOWN_RES, R.raw.help_certification);
mTabsAdapter.addTab(HelpHtmlFragment.class, wotBundle, mTabsAdapter.addTab(HelpMarkdownFragment.class, certificationBundle,
getString(R.string.help_tab_wot)); getString(R.string.help_tab_wot));
Bundle faqBundle = new Bundle();
faqBundle.putInt(HelpMarkdownFragment.ARG_MARKDOWN_RES, R.raw.help_faq);
mTabsAdapter.addTab(HelpMarkdownFragment.class, faqBundle,
getString(R.string.help_tab_faq));
Bundle changelogBundle = new Bundle(); Bundle changelogBundle = new Bundle();
changelogBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_changelog); changelogBundle.putInt(HelpMarkdownFragment.ARG_MARKDOWN_RES, R.raw.help_changelog);
mTabsAdapter.addTab(HelpHtmlFragment.class, changelogBundle, mTabsAdapter.addTab(HelpMarkdownFragment.class, changelogBundle,
getString(R.string.help_tab_changelog)); getString(R.string.help_tab_changelog));
mTabsAdapter.addTab(HelpAboutFragment.class, null, mTabsAdapter.addTab(HelpAboutFragment.class, null,

View File

@ -26,24 +26,29 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ScrollView; import android.widget.ScrollView;
import org.markdown4j.Markdown4jProcessor;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
public class HelpHtmlFragment extends Fragment { import java.io.IOException;
public class HelpMarkdownFragment extends Fragment {
private Activity mActivity; private Activity mActivity;
private int mHtmlFile; private int mHtmlFile;
public static final String ARG_HTML_FILE = "htmlFile"; public static final String ARG_MARKDOWN_RES = "htmlFile";
/** /**
* Create a new instance of HelpHtmlFragment, providing "htmlFile" as an argument. * Create a new instance of HelpHtmlFragment, providing "htmlFile" as an argument.
*/ */
static HelpHtmlFragment newInstance(int htmlFile) { static HelpMarkdownFragment newInstance(int markdownRes) {
HelpHtmlFragment f = new HelpHtmlFragment(); HelpMarkdownFragment f = new HelpMarkdownFragment();
// Supply html raw file input as an argument. // Supply html raw file input as an argument.
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_HTML_FILE, htmlFile); args.putInt(ARG_MARKDOWN_RES, markdownRes);
f.setArguments(args); f.setArguments(args);
return f; return f;
@ -53,7 +58,7 @@ public class HelpHtmlFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mActivity = getActivity(); mActivity = getActivity();
mHtmlFile = getArguments().getInt(ARG_HTML_FILE); mHtmlFile = getArguments().getInt(ARG_MARKDOWN_RES);
ScrollView scroller = new ScrollView(mActivity); ScrollView scroller = new ScrollView(mActivity);
HtmlTextView text = new HtmlTextView(mActivity); HtmlTextView text = new HtmlTextView(mActivity);
@ -65,8 +70,13 @@ public class HelpHtmlFragment extends Fragment {
scroller.addView(text); scroller.addView(text);
// load html from raw resource (Parsing handled by HtmlTextView library) // load markdown from raw resource
text.setHtmlFromRawResource(getActivity(), mHtmlFile, true); try {
String html = new Markdown4jProcessor().process(getActivity().getResources().openRawResource(mHtmlFile));
text.setHtmlFromString(html, true);
} catch (IOException e) {
Log.e(Constants.TAG, "IOException", e);
}
// no flickering when clicking textview for Android < 4 // no flickering when clicking textview for Android < 4
text.setTextColor(getResources().getColor(android.R.color.black)); text.setTextColor(getResources().getColor(android.R.color.black));

View File

@ -35,10 +35,10 @@ import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.base.BaseNfcActivity; import org.sufficientlysecure.keychain.ui.base.BaseNfcActivity;
import org.sufficientlysecure.keychain.service.CloudImportService;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
@ -297,12 +297,13 @@ public class ImportKeysActivity extends BaseNfcActivity {
* Import keys with mImportData * Import keys with mImportData
*/ */
public void importKeys() { public void importKeys() {
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in CloudImportService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
this, this,
getString(R.string.progress_importing), getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL, ProgressDialog.STYLE_HORIZONTAL,
true) { true,
ProgressDialogFragment.ServiceType.CLOUD_IMPORT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
@ -345,9 +346,7 @@ public class ImportKeysActivity extends BaseNfcActivity {
Log.d(Constants.TAG, "importKeys started"); Log.d(Constants.TAG, "importKeys started");
// Send all information needed to service to import key in other thread // Send all information needed to service to import key in other thread
Intent intent = new Intent(this, KeychainIntentService.class); Intent intent = new Intent(this, CloudImportService.class);
intent.setAction(KeychainIntentService.ACTION_IMPORT_KEYRING);
// fill values for this action // fill values for this action
Bundle data = new Bundle(); Bundle data = new Bundle();
@ -365,11 +364,11 @@ public class ImportKeysActivity extends BaseNfcActivity {
new ParcelableFileCache<>(this, "key_import.pcl"); new ParcelableFileCache<>(this, "key_import.pcl");
cache.writeCache(selectedEntries); cache.writeCache(selectedEntries);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(CloudImportService.EXTRA_DATA, data);
// Create a new Messenger for the communication back // Create a new Messenger for the communication back
Messenger messenger = new Messenger(saveHandler); Messenger messenger = new Messenger(saveHandler);
intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger); intent.putExtra(CloudImportService.EXTRA_MESSENGER, messenger);
// show progress dialog // show progress dialog
saveHandler.showProgressDialog(this); saveHandler.showProgressDialog(this);
@ -385,14 +384,12 @@ public class ImportKeysActivity extends BaseNfcActivity {
ImportKeysListFragment.CloudLoaderState sls = (ImportKeysListFragment.CloudLoaderState) ls; ImportKeysListFragment.CloudLoaderState sls = (ImportKeysListFragment.CloudLoaderState) ls;
// Send all information needed to service to query keys in other thread // Send all information needed to service to query keys in other thread
Intent intent = new Intent(this, KeychainIntentService.class); Intent intent = new Intent(this, CloudImportService.class);
intent.setAction(KeychainIntentService.ACTION_IMPORT_KEYRING);
// fill values for this action // fill values for this action
Bundle data = new Bundle(); Bundle data = new Bundle();
data.putString(KeychainIntentService.IMPORT_KEY_SERVER, sls.mCloudPrefs.keyserver); data.putString(CloudImportService.IMPORT_KEY_SERVER, sls.mCloudPrefs.keyserver);
// get selected key entries // get selected key entries
ArrayList<ParcelableKeyRing> keys = new ArrayList<>(); ArrayList<ParcelableKeyRing> keys = new ArrayList<>();
@ -405,13 +402,13 @@ public class ImportKeysActivity extends BaseNfcActivity {
); );
} }
} }
data.putParcelableArrayList(KeychainIntentService.IMPORT_KEY_LIST, keys); data.putParcelableArrayList(CloudImportService.IMPORT_KEY_LIST, keys);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(CloudImportService.EXTRA_DATA, data);
// Create a new Messenger for the communication back // Create a new Messenger for the communication back
Messenger messenger = new Messenger(saveHandler); Messenger messenger = new Messenger(saveHandler);
intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger); intent.putExtra(CloudImportService.EXTRA_MESSENGER, messenger);
// show progress dialog // show progress dialog
saveHandler.showProgressDialog(this); saveHandler.showProgressDialog(this);

View File

@ -42,7 +42,8 @@ import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.operations.results.SingletonResult; import org.sufficientlysecure.keychain.operations.results.SingletonResult;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4; import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
@ -213,11 +214,12 @@ public class ImportKeysProxyActivity extends FragmentActivity {
private void startImportService (ArrayList<ParcelableKeyRing> keyRings) { private void startImportService (ArrayList<ParcelableKeyRing> keyRings) {
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler serviceHandler = new KeychainIntentServiceHandler( ServiceProgressHandler serviceHandler = new ServiceProgressHandler(
this, this,
getString(R.string.progress_importing), getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL, ProgressDialog.STYLE_HORIZONTAL,
true) { true,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -58,16 +58,21 @@ import com.getbase.floatingactionbutton.FloatingActionsMenu;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.operations.results.ConsolidateResult; import org.sufficientlysecure.keychain.operations.results.ConsolidateResult;
import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.operations.results.DeleteResult;
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainDatabase; import org.sufficientlysecure.keychain.provider.KeychainDatabase;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.CloudImportService;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Highlighter; import org.sufficientlysecure.keychain.ui.util.Highlighter;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
@ -78,6 +83,7 @@ import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
@ -477,6 +483,10 @@ public class KeyListFragment extends LoaderFragment
mExportHelper.showExportKeysDialog(null, Constants.Path.APP_DIR_FILE, true); mExportHelper.showExportKeysDialog(null, Constants.Path.APP_DIR_FILE, true);
return true; return true;
case R.id.menu_key_list_update_all_keys:
updateAllKeys();
return true;
case R.id.menu_key_list_debug_cons: case R.id.menu_key_list_debug_cons:
consolidate(); consolidate();
return true; return true;
@ -561,12 +571,90 @@ public class KeyListFragment extends LoaderFragment
startActivityForResult(intent, 0); startActivityForResult(intent, 0);
} }
private void updateAllKeys() {
Context context = getActivity();
ProviderHelper providerHelper = new ProviderHelper(context);
Cursor cursor = providerHelper.getContentResolver().query(
KeyRings.buildUnifiedKeyRingsUri(), new String[]{
KeyRings.FINGERPRINT
}, null, null, null
);
ArrayList<ParcelableKeyRing> keyList = new ArrayList<>();
while (cursor.moveToNext()) {
byte[] blob = cursor.getBlob(0);//fingerprint column is 0
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(blob);
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null);
keyList.add(keyEntry);
}
ServiceProgressHandler serviceHandler = new ServiceProgressHandler(
getActivity(),
getString(R.string.progress_updating),
ProgressDialog.STYLE_HORIZONTAL,
true,
ProgressDialogFragment.ServiceType.CLOUD_IMPORT) {
public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message);
if (message.arg1 == MessageStatus.OKAY.ordinal()) {
// get returned data bundle
Bundle returnData = message.getData();
if (returnData == null) {
return;
}
final ImportKeyResult result =
returnData.getParcelable(OperationResult.EXTRA_RESULT);
if (result == null) {
Log.e(Constants.TAG, "result == null");
return;
}
result.createNotify(getActivity()).show();
}
}
};
// Send all information needed to service to query keys in other thread
Intent intent = new Intent(getActivity(), CloudImportService.class);
// fill values for this action
Bundle data = new Bundle();
// search config
{
Preferences prefs = Preferences.getPreferences(getActivity());
Preferences.CloudSearchPrefs cloudPrefs =
new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
data.putString(CloudImportService.IMPORT_KEY_SERVER, cloudPrefs.keyserver);
}
data.putParcelableArrayList(CloudImportService.IMPORT_KEY_LIST, keyList);
intent.putExtra(CloudImportService.EXTRA_DATA, data);
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(serviceHandler);
intent.putExtra(CloudImportService.EXTRA_MESSENGER, messenger);
// show progress dialog
serviceHandler.showProgressDialog(getActivity());
// start service with intent
getActivity().startService(intent);
}
private void consolidate() { private void consolidate() {
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getActivity(), getActivity(),
getString(R.string.progress_importing), getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL) { ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -39,8 +39,9 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache; import org.sufficientlysecure.keychain.util.ParcelableFileCache;
@ -124,11 +125,12 @@ public class SafeSlingerActivity extends BaseActivity {
final FragmentActivity activity = SafeSlingerActivity.this; final FragmentActivity activity = SafeSlingerActivity.this;
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
activity, activity,
getString(R.string.progress_importing), getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL, ProgressDialog.STYLE_HORIZONTAL,
true) { true,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -36,8 +36,9 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
@ -108,8 +109,11 @@ public class UploadKeyActivity extends BaseActivity {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after uploading is done in KeychainIntentService // Message is received after uploading is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getString(R.string.progress_uploading), ProgressDialog.STYLE_HORIZONTAL) { this,
getString(R.string.progress_uploading),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -66,8 +66,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler.MessageStatus; import org.sufficientlysecure.keychain.service.ServiceProgressHandler.MessageStatus;
import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.ui.base.BaseNfcActivity; import org.sufficientlysecure.keychain.ui.base.BaseNfcActivity;
import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
@ -415,7 +415,7 @@ public class ViewKeyActivity extends BaseNfcActivity implements
private void startCertifyIntent(Intent intent) { private void startCertifyIntent(Intent intent) {
// Message is received after signing is done in KeychainIntentService // Message is received after signing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this) { ServiceProgressHandler saveHandler = new ServiceProgressHandler(this) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
@ -656,7 +656,7 @@ public class ViewKeyActivity extends BaseNfcActivity implements
entries.add(keyEntry); entries.add(keyEntry);
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler serviceHandler = new KeychainIntentServiceHandler(this) { ServiceProgressHandler serviceHandler = new ServiceProgressHandler(this) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -50,12 +50,12 @@ import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.List; import java.util.List;
@ -362,23 +362,26 @@ public class ViewKeyTrustFragment extends LoaderFragment implements
// Create a new Messenger for the communication back after proof work is done // Create a new Messenger for the communication back after proof work is done
// //
KeychainIntentServiceHandler handler = new KeychainIntentServiceHandler(getActivity(), ServiceProgressHandler handler = new ServiceProgressHandler(
getString(R.string.progress_verifying_signature), ProgressDialog.STYLE_HORIZONTAL) { getActivity(),
getString(R.string.progress_verifying_signature),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == MessageStatus.OKAY.ordinal()) { if (message.arg1 == MessageStatus.OKAY.ordinal()) {
Bundle returnData = message.getData(); Bundle returnData = message.getData();
String msg = returnData.getString(KeychainIntentServiceHandler.DATA_MESSAGE); String msg = returnData.getString(ServiceProgressHandler.DATA_MESSAGE);
SpannableStringBuilder ssb = new SpannableStringBuilder(); SpannableStringBuilder ssb = new SpannableStringBuilder();
if ((msg != null) && msg.equals("OK")) { if ((msg != null) && msg.equals("OK")) {
//yay //yay
String proofUrl = returnData.getString(KeychainIntentServiceHandler.KEYBASE_PROOF_URL); String proofUrl = returnData.getString(ServiceProgressHandler.KEYBASE_PROOF_URL);
String presenceUrl = returnData.getString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_URL); String presenceUrl = returnData.getString(ServiceProgressHandler.KEYBASE_PRESENCE_URL);
String presenceLabel = returnData.getString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_LABEL); String presenceLabel = returnData.getString(ServiceProgressHandler.KEYBASE_PRESENCE_LABEL);
String proofLabel; String proofLabel;
switch (proof.getType()) { switch (proof.getType()) {
@ -429,7 +432,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements
ssb.append(" ").append(getString(R.string.keybase_contained_signature)); ssb.append(" ").append(getString(R.string.keybase_contained_signature));
} else { } else {
// verification failed! // verification failed!
msg = returnData.getString(KeychainIntentServiceHandler.DATA_ERROR); msg = returnData.getString(ServiceProgressHandler.DATA_ERROR);
ssb.append(getString(R.string.keybase_proof_failure)); ssb.append(getString(R.string.keybase_proof_failure));
if (msg == null) { if (msg == null) {
msg = getString(R.string.keybase_unknown_proof_failure); msg = getString(R.string.keybase_unknown_proof_failure);

View File

@ -4,6 +4,7 @@ package org.sufficientlysecure.keychain.ui;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays; import java.util.Arrays;
import android.app.ProgressDialog;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.os.Bundle; import android.os.Bundle;
@ -27,7 +28,8 @@ import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.provider.KeychainContract.Keys; import org.sufficientlysecure.keychain.provider.KeychainContract.Keys;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
@ -109,8 +111,7 @@ public class ViewKeyYubikeyFragment extends Fragment
public void promoteToSecretKey() { public void promoteToSecretKey() {
// Message is received after decrypting is done in KeychainIntentService ServiceProgressHandler saveHandler = new ServiceProgressHandler(getActivity()) {
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity()) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -37,7 +37,7 @@ import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import java.util.HashMap; import java.util.HashMap;
@ -135,9 +135,12 @@ public class DeleteKeyDialogFragment extends DialogFragment {
intent.setAction(KeychainIntentService.ACTION_DELETE); intent.setAction(KeychainIntentService.ACTION_DELETE);
// Message is received after importing is done in KeychainIntentService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( ServiceProgressHandler saveHandler = new ServiceProgressHandler(
getActivity(), getString(R.string.progress_deleting), getActivity(),
ProgressDialog.STYLE_HORIZONTAL, true) { getString(R.string.progress_deleting),
ProgressDialog.STYLE_HORIZONTAL,
true,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
@Override @Override
public void handleMessage(Message message) { public void handleMessage(Message message) {
super.handleMessage(message); super.handleMessage(message);

View File

@ -32,23 +32,43 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.widget.Button; import android.widget.Button;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.CloudImportService;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.util.Log;
public class ProgressDialogFragment extends DialogFragment { public class ProgressDialogFragment extends DialogFragment {
private static final String ARG_MESSAGE = "message"; private static final String ARG_MESSAGE = "message";
private static final String ARG_STYLE = "style"; private static final String ARG_STYLE = "style";
private static final String ARG_CANCELABLE = "cancelable"; private static final String ARG_CANCELABLE = "cancelable";
private static final String ARG_SERVICE_TYPE = "service_class";
public static enum ServiceType {
KEYCHAIN_INTENT,
CLOUD_IMPORT
}
ServiceType mServiceType;
boolean mCanCancel = false, mPreventCancel = false, mIsCancelled = false; boolean mCanCancel = false, mPreventCancel = false, mIsCancelled = false;
/** Creates new instance of this fragment */ /**
public static ProgressDialogFragment newInstance(String message, int style, boolean cancelable) { * creates a new instance of this fragment
* @param message the message to be displayed initially above the progress bar
* @param style the progress bar style, as defined in ProgressDialog (horizontal or spinner)
* @param cancelable should we let the user cancel this operation
* @param serviceType which Service this progress dialog is meant for
* @return
*/
public static ProgressDialogFragment newInstance(String message, int style, boolean cancelable,
ServiceType serviceType) {
ProgressDialogFragment frag = new ProgressDialogFragment(); ProgressDialogFragment frag = new ProgressDialogFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString(ARG_MESSAGE, message); args.putString(ARG_MESSAGE, message);
args.putInt(ARG_STYLE, style); args.putInt(ARG_STYLE, style);
args.putBoolean(ARG_CANCELABLE, cancelable); args.putBoolean(ARG_CANCELABLE, cancelable);
args.putSerializable(ARG_SERVICE_TYPE, serviceType);
frag.setArguments(args); frag.setArguments(args);
@ -106,6 +126,7 @@ public class ProgressDialogFragment extends DialogFragment {
String message = getArguments().getString(ARG_MESSAGE); String message = getArguments().getString(ARG_MESSAGE);
int style = getArguments().getInt(ARG_STYLE); int style = getArguments().getInt(ARG_STYLE);
mCanCancel = getArguments().getBoolean(ARG_CANCELABLE); mCanCancel = getArguments().getBoolean(ARG_CANCELABLE);
mServiceType = (ServiceType) getArguments().getSerializable(ARG_SERVICE_TYPE);
dialog.setMessage(message); dialog.setMessage(message);
dialog.setProgressStyle(style); dialog.setProgressStyle(style);
@ -175,9 +196,22 @@ public class ProgressDialogFragment extends DialogFragment {
// send a cancel message. note that this message will be handled by // send a cancel message. note that this message will be handled by
// KeychainIntentService.onStartCommand, which runs in this thread, // KeychainIntentService.onStartCommand, which runs in this thread,
// not the service one, and will not queue up a command. // not the service one, and will not queue up a command.
Intent intent = new Intent(getActivity(), KeychainIntentService.class); Intent serviceIntent = null;
intent.setAction(KeychainIntentService.ACTION_CANCEL);
getActivity().startService(intent); switch (mServiceType) {
case CLOUD_IMPORT:
serviceIntent = new Intent(getActivity(), CloudImportService.class);
break;
case KEYCHAIN_INTENT:
serviceIntent = new Intent(getActivity(), KeychainIntentService.class);
break;
default:
//should never happen, unless we forget to include a ServiceType enum case
Log.e(Constants.TAG, "Unrecognized ServiceType at ProgressDialogFragment");
}
serviceIntent.setAction(KeychainIntentService.ACTION_CANCEL);
getActivity().startService(serviceIntent);
} }
}); });

View File

@ -19,9 +19,7 @@ package org.sufficientlysecure.keychain.util;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
@ -29,11 +27,9 @@ import android.support.v4.app.FragmentActivity;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.ExportResult; import org.sufficientlysecure.keychain.operations.results.ExportResult;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import java.io.File; import java.io.File;
@ -102,9 +98,10 @@ public class ExportHelper {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after exporting is done in KeychainIntentService // Message is received after exporting is done in KeychainIntentService
KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(mActivity, ServiceProgressHandler exportHandler = new ServiceProgressHandler(mActivity,
mActivity.getString(R.string.progress_exporting), mActivity.getString(R.string.progress_exporting),
ProgressDialog.STYLE_HORIZONTAL) { ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);

View File

@ -83,10 +83,22 @@ public class ParcelableFileCache<E extends Parcelable> {
} }
/**
* Reads from cache file and deletes it afterward. Convenience function for readCache(boolean).
* @return an IteratorWithSize object containing entries read from the cache file
* @throws IOException
*/
public IteratorWithSize<E> readCache() throws IOException { public IteratorWithSize<E> readCache() throws IOException {
return readCache(true); return readCache(true);
} }
/**
* Reads entries from a cache file and returns an IteratorWithSize object containing the entries
* @param deleteAfterRead if true, the cache file will be deleted after being read
* @return an IteratorWithSize object containing entries read from the cache file
* @throws IOException if cache directory/parcel import file does not exist, or a read error
* occurs
*/
public IteratorWithSize<E> readCache(final boolean deleteAfterRead) throws IOException { public IteratorWithSize<E> readCache(final boolean deleteAfterRead) throws IOException {
File cacheDir = mContext.getCacheDir(); File cacheDir = mContext.getCacheDir();

View File

@ -19,6 +19,11 @@
android:title="@string/menu_manage_keys" android:title="@string/menu_manage_keys"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu_key_list_update_all_keys"
android:title="@string/menu_update_all_keys"
app:showAsAction="never" />
<item <item
android:id="@+id/menu_key_list_debug_cons" android:id="@+id/menu_key_list_debug_cons"
android:title="Debug / Consolidate" android:title="Debug / Consolidate"

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers</h2>
<ul>
<li>Dominik Schürmann (Maintainer)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Libraries</a> (Apache License v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache License v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache License v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material Design)</a> (Apache License v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache License v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT License)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>New certify screen</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Better handling of large key imports</li>
<li>Improved subkey selection</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Full support for Yubikey signature generation and decryption!</li>
<li>Propose installable compatible apps in apps list</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Improved passphrase handling</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimental ECC support</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Keys are connected to Android's contacts</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric OpenPGP messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Colorized key fingerprint</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certify user ids</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Sign keys</li>
<li>Upload keys to server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Basic keyserver support</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li>
<li>Optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Secure file deletion</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>How do I activate OpenKeychain in K-9 Mail?</h2>
<p>To use OpenKeychain with K-9 Mail, you want to follow these steps:</p>
<ol>
<li>Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.</li>
<li>Select "Account settings" and scroll to the very bottom and click "Cryptography".</li>
<li>Click on "OpenPGP Provider" and select OpenKeychain from the list.</li>
</ol>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## How do I activate OpenKeychain in K-9 Mail?
To use OpenKeychain with K-9 Mail, you want to follow these steps:
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
2. Select "Account settings" and scroll to the very bottom and click "Cryptography".
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
## I found a bug in OpenKeychain!
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribute
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Translations
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> je OpenPGP implementace pro Android.</p>
<p>Licence: GPLv3+</p>
<h2>Vývojáři</h2>
<ul>
<li>Dominik Schürmann (Hlavní vývojář)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Knihovny</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Libraries</a> (Apache License v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache License v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache License v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material Design)</a> (Apache License v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache License v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT License)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>Nová obrazovka certifikace</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Lepší fungování importu většího množství klíčů</li>
<li>Vylepšený výběr podklíčů</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Full support for Yubikey signature generation and decryption!</li>
<li>Propose installable compatible apps in apps list</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Vylepšené zacházení s hesly</li>
<li>Sdílení klíčů přes SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimentální podpora ECC</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>Nová úvodní obrazovka</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Klíče jsou připojeny ke kontaktům v Androidu</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric OpenPGP messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Obarvit otisk klíče</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certifikovat uživatelská ID</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Podepsat klíče</li>
<li>Nahrát klíče na server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Základní podpora keyserverů</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Opravy chyb</li>
<li>Optimalizace</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Bezpečné mazání souborů</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Opravy chyb</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>Německý a Italský překlad</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Opravy chyb</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>How do I activate OpenKeychain in K-9 Mail?</h2>
<p>To use OpenKeychain with K-9 Mail, you want to follow these steps:</p>
<ol>
<li>Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.</li>
<li>Select "Account settings" and scroll to the very bottom and click "Cryptography".</li>
<li>Click on "OpenPGP Provider" and select OpenKeychain from the list.</li>
</ol>
<h2>Našel jsem chybu v OpenKeychain!</h2>
<p>Nahlašte prosím chybu na <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">bug trackeru OpenKeychain</a>.</p>
<h2>Přispět</h2>
<p>Pokud chcete pomoci vyvíjet OpenKeychain tak, že přispějete svými kodérskými schopnostmi <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">přečtěte si naší malou příručku na Githubu</a>.</p>
<h2>Překlady</h2>
<p>Pomozte s překladem OpenKeychain! Každý se může zapojit na <a href="https://www.transifex.com/projects/p/openpgp-keychain/">Transifexu</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## How do I activate OpenKeychain in K-9 Mail?
To use OpenKeychain with K-9 Mail, you want to follow these steps:
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
2. Select "Account settings" and scroll to the very bottom and click "Cryptography".
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
## I found a bug in OpenKeychain!
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribute
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Translations
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> ist eine OpenPGP-Implementierung für Android.</p>
<p>Lizenz: GPLv3+</p>
<h2>Entwickler</h2>
<ul>
<li>Dominik Schürmann (Leitender Entwickler)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Bibliotheken</h2>
<ul>
<li>
<a href="https://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11-Lizenz)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT-Lizenz)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support-Bibliotheken</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material-Design)</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache-Lizenz v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT-Lizenz)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache-Lizenz v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Behoben: Schlüsselexport in Datei (jetzt wirklich)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Behoben: Schlüsselexport in Datei (wurde nur teilweise geschrieben)</li>
<li>Behoben: Absturz auf Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Behoben: Absturz auf Android 5</li>
<li>Neuer Beglaubigungsbildschirm</li>
<li>Sicherer Austausch direkt aus der Schlüsselliste (SafeSlinger-Bibliothek)</li>
<li>Neuer Programmablauf für QR-Codes</li>
<li>Neugestaltung des Entschlüsselungsbildschirms</li>
<li>Verwendung neuer Icons und neuer Farben</li>
<li>Behoben: Import geheimer Schlüssel von Symantec Encryption Desktop</li>
<li>Unterschlüssel-IDs auf Yubikeys werden nun richtig geprüft</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Bessere Verarbeitung von großen Schlüsselimporten</li>
<li>Verbesserte Unterschlüsselauswahl</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Volle Unterstützung für Yubikey-Signaturerzeugung und Entschlüsselung!</li>
<li>Kompatible, installierbare Apps in der App-Liste anzeigen</li>
<li>Neues Design für den Entschlüsselungsbildschirm</li>
<li>Viele Fehlerbehebungen für den Schlüsselimport, auch bei gekürzten Schlüsseln</li>
<li>Schlüsselauthentifizierungs-Flags berücksichtigen und anzeigen</li>
<li>Benutzeroberfläche zum Erzeugen benutzerdefinierter Schlüssel</li>
<li>Behoben: Benutzer-ID-Widerrufszertifikate</li>
<li>Neue Cloudsuche (sucht über traditionelle Schlüsselserver und über keybase.io)</li>
<li>Unterstützung für das Kürzen von Schlüsseln innerhalb von OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Behoben: Beschädigung von Schlüsseln in 2.9.1</li>
<li>Yubikey-Entschlüsselung funktioniert nun über die API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Verschlüsselungsbildschirm auf zwei aufgeteilt</li>
<li>Behoben: Handhabung von Schlüsselflags (Unterstützt nun Mailvelope 0.7 Schlüssel)</li>
<li>Handhabung von Passwörtern verbessert</li>
<li>Schlüsselaustausch mit SafeSlinger</li>
<li>Yubikey: neue Einstellung zur PIN-Änderung, zur Zeit funktioniert das Signieren nur mit der OpenPGP-API, nicht innerhalb von OpenKeychain</li>
<li>Behoben: Verwendung von gekürzten Schlüsseln</li>
<li>Standardmäßige Nutzung von SHA256 aus Kompatibilitätsgründen</li>
<li>Änderungen an der Intent-API, siehe https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP-API kann nun mit widerrufenen/abgelaufenen Schlüsseln umgehen und liefert alle Benutzer-IDs zurück</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Behoben: Mit v2.8 eingeführte Abstürze</li>
<li>Experimentelle ECC-Unterstützung</li>
<li>Experimentelle Yubikey-Unterstützung (nur Signieren mit importierten Schlüsseln)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>Es wurden in dieser Version so viele Fehler behoben, dass wir uns besser auf die neuen Funktionen konzentrieren</li>
<li>Schlüsselbearbeitung: tolles neues Design und Schlüsselrückruf</li>
<li>Schlüsselimport: tolles neues Design, gesicherte Verbindungen zum Schlüsselserver über HKPS, Namensauflösung der Schlüsselserver über DNS SRV-Einträge</li>
<li>Neuer Bildschirm für ersten Start der App</li>
<li>Neuer Schlüsselerzeugungsbildschirm: Automatische Vorschläge für Name und E-Mail basierend auf deinen persönlichen Android-Konten</li>
<li>Dateiverschlüsselung: tolles neues Design, Unterstützung für Verschlüsselung mehrerer Dateien</li>
<li>Neue Symbole zum Anzeigen des Schlüsselstatus (von Brennan Novak)</li>
<li>Wichtige Fehlerbehebung: Importieren größerer Schlüsselsammlungen aus einer Datei ist nun möglich</li>
<li>Benachrichtigung, die zwischengespeicherte Passwörter anzeigt</li>
<li>Schlüssel sind mit den Android-Kontakten verbunden</li>
</ul>
<p>Diese Version wäre ohne die Arbeit von Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray und Thialfihar nicht möglich</p>
<h2>2.7</h2>
<ul>
<li>Lila! (Dominik, Vincent)</li>
<li>Neues Schlüsselansicht-Design (Dominik, Vincent)</li>
<li>Neue flache Android-Schaltflächen (Dominik, Vincent)</li>
<li>API-Fehlerbehebungen (Dominik)</li>
<li>Import aus keybase.io (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Einige Korrekturen für Regressionsfehler</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Schlüsselbeglaubigungen (danke an Vincent Breitmoser)</li>
<li>Unterstützung für GnuPG-Teilschlüssel (Dank an Vincent Breitmoser)</li>
<li>Neues Design für Signaturprüfung</li>
<li>Benutzerdefinierte Schlüssellänge (Dank an Greg Witczak)</li>
<li>Fehler bei der Teilen-Funktion von anderen Apps behoben</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Behoben: Entschlüsselung von symmetrischen OpenPGP-Nachrichten/-Dateien</li>
<li>Umgestaltung des Schlüsselbearbeitungsbildschirms (Dank an Ash Hughes)</li>
<li>Neues modernes Design für Verschlüsselungs-/Entschlüsselungsbildschirme</li>
<li>OpenPGP-API Version 3 (mehrerer API-Konten, interne Fehlerbehebungen, Schlüsselsuche)</li>
</ul>
<h2>2.4</h2>
<p>Danke an alle Bewerber des Google Summer of Code 2014, die diese Version funktionsreich und fehlerfrei gemacht haben.
Neben mehreren kleinen Updates sind eine beachtliche Anzahl von Updates von den folgenden Personen gemacht worden (in alphabetischer Reihenfolge):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>Neue einheitliche Schlüsselliste</li>
<li>Eingefärbter Schlüsselfingerabdruck</li>
<li>Unterstützung für Schlüsselserverports</li>
<li>Möglichkeit zum Erzeugen von schwachen Schlüsseln deaktiviert</li>
<li>Viel mehr interne Arbeit an der API</li>
<li>Benutzerkennungen beglaubigen</li>
<li>Schlüsselserver-Suchanfrage basierend auf maschinenlesbarer Ausgabe</li>
<li>"Navigation Drawer" auf Tablets sperren</li>
<li>Vorschläge für E-Mails bei Schlüsselerzeugung</li>
<li>Suche in öffentlichen Schlüssellisten</li>
<li>Und viele weitere Verbesserungen und Fehlerbehebungen...</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix für Absturz beim Aktualisieren von alten Versionen</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Kein unnötiger Export öffentlicher Schlüssel beim Export der geheimen Schlüssel (Dank an Ash Hughes)</li>
<li>Behoben: Setzen des Schlüsselablaufdatums (Dank an Ash Hughes)</li>
<li>Weitere interne Fehlerbehebungen für das Editieren von Schlüsseln (Dank an Ash Hughes)</li>
<li>Schlüsselserverabfrage direkt aus dem Importbildschirm</li>
<li>Behoben: Layout und Dialogstil auf Android 2.2-3.0</li>
<li>Behoben: Absturz bei leeren Benutzer-IDs</li>
<li>Behoben: Absturz nach Rückkehr vom Signierenbildschirm, außerdem wurden die Listen nicht geleert</li>
<li>Bouncy Castle (Kryptographie-Bibliothek) von 1.47 auf 1.50 aktualisiert und aus Quellcode kompiliert.</li>
<li>Behoben: Hochladen des Schlüssels aus dem Signierenbildschirm</li>
</ul>
<h2>2.2</h2>
<ul>
<li>Neues Design mit "Navigation Drawer"</li>
<li>Neues Design der Liste öffentlicher Schlüssel</li>
<li>Neue Ansicht für öffentliche Schlüssel</li>
<li>Behoben: Fehler beim Schlüsselimport</li>
<li>Schlüsselbeglaubigungen über Kreuz, "Key cross-certification" (Dank an Ash Hughes)</li>
<li>Korrekte Verarbeitung von UTF-8-Passwörtern (Dank an Ash Hughes)</li>
<li>Erste Version mit neuen Sprachen (Dank an die Unterstützer auf Transifex)</li>
<li>Behoben und verbessert: Teilen von Schlüsseln über QR-Codes</li>
<li>Paket-Signaturprüfung für API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API-Aktualisierungen, Vorbereitung für die "K-9 Mail"-Integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Viele Fehlerbehebungen</li>
<li>Neue API für Entwickler</li>
<li>PRNG-Fehlerbehebung von Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Komplette Neugestaltung</li>
<li>Öffentliche Schlüssel über QR-Codes oder NFC-Beam teilen</li>
<li>Schlüssel signieren</li>
<li>Schlüssel auf Server hochladen</li>
<li>Behoben: Importprobleme</li>
<li>Neue AIDL-API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Grundlegende Schlüsselserverunterstützung</li>
<li>App2sd</li>
<li>Mehr Auswahlmöglichkeiten für den Passwortzwischenspeicher: 1, 2, 4, 8, Stunden</li>
<li>Übersetzungen: Norwegisch (Dank an Sander Danielsen), Chinesisch (Dank an Zhang Fredrick)</li>
<li>Fehlerbehebungen</li>
<li>Optimierungen</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Behoben: Problem mit Signaturprüfung von Texten mit angehängtem Zeilenvorschub</li>
<li>Mehr Optionen für die Länge der Passwortzwischenspeicherung (20, 40, 60 Minuten)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Behoben: Absturz bei Kontenerstellung unter Froyo</li>
<li>Sichere Dateilöschung</li>
<li>Option zum Löschen der Schlüsseldatei nach dem Import</li>
<li>Streamverschlüsselung/-entschlüsselung (Galerie, usw.)</li>
<li>Neue Optionen (Sprache, v3-Signaturen erzwingen)</li>
<li>Schnittstellenänderungen</li>
<li>Fehlerbehebungen</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>Deutsche und Italienische Übersetzung</li>
<li>Viel kleineres Paket durch reduzierte BC-Quellen</li>
<li>Neue Einstellungsoberfläche</li>
<li>Layoutanpassungen für Übersetzungen</li>
<li>Behoben: Signaturfehler</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Behoben: Absturz durch einen SDK-Fehler mit "query builder"</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Behoben: Abstürze während Verschlüsselung/Beglaubigung und möglicherweise Schlüsselexport</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterbare Schlüsselliste</li>
<li>Intelligentere Vorauswahl von Verschlüsselungsschlüsseln</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fehlerbehebungen und zusätzliche Funktionen für K-9-Mail (Schlüsselvorauswahl), neuer Beta-Build verfügbar</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>Behoben: GMail-Konto-Auflistung in 1.0.0 fehlerhaft</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>"K-9 Mail"-Integration, APG-unterstützendes Beta-Build von K-9 Mail</li>
<li>Unterstützung weiterer Dateimanager (inklusive ASTRO)</li>
<li>Slowenische Übersetzung</li>
<li>Neue Datenbank, viel schneller, geringere Speichernutzung</li>
<li>"Intents" und Inhaltsprovider für andere Apps definiert</li>
<li>Fehlerbehebungen</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Wie kann ich OpenKeychain in K-9 Mail nutzen?</h2>
<p>Um OpenKeychain in K-9 Mail nutzen zu können, sind folgende Schritte nötig:</p>
<ol>
<li>Öffne K-9 Mail und drücke lange auf den Account, mit dem du OpenKeychain nutzen willst.</li>
<li>Wähle "Kontoeinstellungen", blättere ganz nach unten und klicke auf "Kryptographie".</li>
<li>Klicke auf "OpenPGP-Provider" und wähle OpenKeychain aus der Liste.</li>
</ol>
<h2>Ich habe einen Fehler in OpenKeychain gefunden!</h2>
<p>Bitte sende uns einen Fehlerbericht mithilfe des <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">Problem-Trackers von OpenKeychain</a>.</p>
<h2>Unterstützen</h2>
<p>Wenn du uns bei der Entwicklung von OpenKeychain, z.B. durch das Beisteuern von Code, helfen willst, <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">schau dir unsere kurze Anleitung auf GitHub an</a>.</p>
<h2>Übersetzungen</h2>
<p>Hilf mit OpenKeychain zu übersetzten! Jeder kann mitmachen, besuche<a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain auf Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## How do I activate OpenKeychain in K-9 Mail?
To use OpenKeychain with K-9 Mail, you want to follow these steps:
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
2. Select "Account settings" and scroll to the very bottom and click "Cryptography".
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
## I found a bug in OpenKeychain!
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribute
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Translations
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> es una implementación de OpenPGP para Android.</p>
<p>Licencia: GPLv3+</p>
<h2>Desarrolladores</h2>
<ul>
<li>Dominik Schürmann (Mantenedor)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Librerías</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licencia MIT X11)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">Librería SafeSlinger Exchange</a> (Licencia MIT)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Suppor Libraries</a> (Licencia Apache v2) [librerías de soporte de Android]</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip</a> (Licencia Apache v2) [indicador deslizante para paso de página estilo Material]</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Licencia Apache v2) [panel de navegación estilo Material]</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (Licencia MIT)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Licencia Apache v2) [botón de acción flotante]</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) es una implementación de OpenPGP para Android.
Licencia: GPLv3+
## Desarrolladores
* Dominik Schürmann (Mantenedor)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Librerías
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (Licencia MIT X11)
* [Librería SafeSlinger Exchange](https://github.com/SafeSlingerProject/exchange-android) (Licencia MIT)
* [Librerías de Soporte Android](http://developer.android.com/tools/support-library/index.html) (Licencia Apache v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Licencia Apache v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Licencia Apache v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Licencia Apache v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Licencia Apache v2)
* [ZXing](https://github.com/zxing/zxing) (Licencia Apache v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Licencia Apache v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Diseño estilo Material)</a> (Licencia Apache v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Licencia Apache v2)
* [Snackbar](https://github.com/nispok/snackbar) (Licencia MIT)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Licencia Apache v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Licencia Apache v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Licencia Apache v2)

View File

@ -0,0 +1,27 @@
## Confirmación de clave
Sin confirmación, no puede estar seguro de si una clave corresponde realmente a una persona específica.
La forma más simple de confirmar una clave es escanear el código QR o intercambiarlo vía NFC.
Para confirmar claves entre más de dos personas, sugerimos usar el método de intercambio de claves disponible para sus claves.
## Estado de la clave
<img src="status_signature_verified_cutout_24dp"/>
Confirmada: Ya ha confirmado esta clave, ej. al escanear el código QR.
<img src="status_signature_unverified_cutout_24dp"/>
No confirmada: Esta clave no ha sido confirmada aún. No puede estar seguro de si la clave corresponde realmente a una persona específica.
<img src="status_signature_expired_cutout_24dp"/>
Caducada: Esta clave ya no es válida. Sólo el propietario puede extender su validez.
<img src="status_signature_revoked_cutout_24dp"/>
Revocada: Esta clave ya no es válida. Ha sido revocada por su propietario.
## Información avanzada
Una "confirmación de clave" en OpenKeychain se implementa al crear una certificación de acuerdo al estándar OpenPGP.
Esta certificación es una ["certificación genérica (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) descrita en el estándar por:
"El emisor de esta certificación no hace ninguna afirmación particular acerca de lo bien o mal que el certificador ha comprobado que el propietario de la clave sea de hecho la persona descrita por la identificación del usuario."
Tradicionalmente, las certificaciones (también con niveles más altos de certificación, tales como "certificaciones positivas" (0x13)) se organizan en la Web of Trust (web de confianza) de OpenPGP.
Nuestro modelo de confirmación de clave es un concepto mucho más simple para evitar problemas comunes de usabilidad relacionados con esta Web of Trust.
Asumimos que las claves están verificadas sólo hasta cierto grado, que no obstante es suficientemente usable para ejecutarse "sobre la marcha".
Tampoco implementamos firmas de confianza (potencialmente transitivas) o una base de datos ownertrust (de valores de confianza subjetivos del propietario) como en GnuPG.
Más aún, las claves que contengan al menos una identificación de usuario certificada por una clave de confianza se marcarán como "confirmadas" en los listados de claves.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Repara la exportación de claves hacia ficheros (ahora de verdad)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Repara la exportación de clave hacia ficheros (se guardaban parcialmente)</li>
<li>Repara caída en Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Repara una caída en Android 5</li>
<li>Nueva pantalla de certificación</li>
<li>Intercambio seguro directamente desde de la lista de claves (librería SafeSlinger)</li>
<li>Nuevo flujo de programa de Código QR</li>
<li>Pantalla de descifrado rediseñada</li>
<li>Nuevo uso del icono y colores</li>
<li>Repara la importación de claves secretas (privadas) desde Symantec Encryption Desktop</li>
<li>Las identificaciones de subclaves en Yubikeys ahora se comprueban correctamente</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Tratamiento mejorado para importación de claves grandes</li>
<li>Selección de subclave mejorada</li>
</ul>
<h2>3.0</h2>
<ul>
<li>¡Soporte completo para generación y descifrado de firma de Yubikey!</li>
<li>Proposición de aplicaciones compatibles instalables desde la lista de aplicaciones</li>
<li>Nuevo diseño para pantallas de descifrado</li>
<li>Muchas reparaciones para la importación de claves, también reparaciones para claves desnudas</li>
<li>Muestra y acata los indicativos de autentificación de clave</li>
<li>Interfaz de usuario para generar claves personalizadas</li>
<li>Reacondicionado de los certifcados de revocación de identificación de usuario</li>
<li>Nueva búsqueda en la nube (búsquedas sobre servidores de claves tradicionales y keybase.io)</li>
<li>Soporte para claves desnudas dentro de OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Repara claves dañadas en 2.9.1</li>
<li>El descifrado de Yubikey funcionando ahora vía API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Dividir pantalla de cifrado en dos</li>
<li>Reparación del manejado de indicadores de clave (ahora soportando claves de Mailvelope 0.7)</li>
<li>Manejado mejorado de frase-contraseña</li>
<li>Compartición de clave mediante SafeSlinger</li>
<li>Yubikey: opción para permitir otros PINs, actualmente sólo funciona firmando a través de la API OpenPGP, no dentro de OpenKeychain</li>
<li>Reparación del uso de claves desnudas</li>
<li>SHA256 se usa como predeterminado para compatibilidad</li>
<li>La API de Intent ha cambiado, vea https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>La API de OpenPGP ahora maneja claves revocadas/expiradas y devuelve todas las identificación de usario</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Repara caídas introducidas en la v2.8</li>
<li>Soporte ECC experimental</li>
<li>Soporte experimental para Yubikey (firma-sólo con claves importadas)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>Tantos fallos se han reparado en esta versión que nos centramos en las principales características nuevas</li>
<li>Edición de clave: Tremendo diseño nuevo, revocación de clave</li>
<li>Importación de clave: Tremendo diseño nuevo, conexiones seguras a servidor de claves vía hkps, resolución de servidor de claves vía registros SRV de DNS</li>
<li>Nueva pantalla de primera vez</li>
<li>Nueva pantalla de creación de clave: Autocompletado de un nombre o correo electrónico basado en sus cuentas personales de Android</li>
<li>Cifrado de fichero: Tremendo diseño nuevo, soporte para cifrado de múltiples ficheros</li>
<li>Nuevos iconos para mostrar estado de clave (por Brennan Novak)</li>
<li>Reparación importante de fallo: La importación de grandes colecciones de claves desde un fichero ahora es posible</li>
<li>Notificación mostrando frases-contraseña en caché</li>
<li>Las claves están conectadas a los contactos de Android</li>
</ul>
<p>Esta versión no sería posible sin el trabajo de Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>Nuevo diseño de vista de clave (Dominik, Vincent)</li>
<li>Nuevos botones de Android planos (Dominik, Vincent)</li>
<li>Reparaciones de la API (Dominik)</li>
<li>Importación de keybase.io (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Algunas reparaciones para fallos regresivos</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Certificaciones de clave (gracias a Vincent Breitmoser)</li>
<li>Soporte para claves secretas (privadas) parciales de GnuPG (gracias a Vincent Breitmoser)</li>
<li>Nuevo diseño para verificación de firma</li>
<li>Tamaño de clave personalizado (gracias a Greg Witczak)</li>
<li>Repara funcionalidad-compartida desde otras aplicaciones</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Repara el descifrado de ficheros/mensajes OpenPGP simétricos</li>
<li>Pantalla de edición de clave refactorizada (gracias a Ash Hughes)</li>
<li>Nuevo diseño moderno para pantallas de cifrado/descifrado</li>
<li>API de OpenPGP version 3 (múltiples cuentas api, reparaciones internas, búsqueda de clave)</li>
</ul>
<h2>2.4</h2>
<p>¡Gracias a todos los aspirantes del Google Summer of Code 2014 que hicieron que esta versión sea rica en características y libre de fallos!
Además de varios pequeños parches, un número notable de parches están hechos por las siguientes personas (en orden alfabético):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>Nueva lista de claves unificada</li>
<li>Huella de validación de clave (fingerprint) coloreada</li>
<li>Soporte para puertos de servidor de claves</li>
<li>Desactivar la posibilidad de generar claves débiles</li>
<li>Mucho más trabajo interno en la API</li>
<li>Certificar identificaciones de usuario</li>
<li>Consulta al servidor de claves basada en salida legible-por-máquina</li>
<li>Bloquear panel deslizante de navegación en tabletas</li>
<li>Sugerencias para correos electrónicos en la creación de claves</li>
<li>Buscar en listas de claves públicas</li>
<li>Y muchas más mejoras y reparaciones...</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Reparación crucial para caídas al actualizar desde versiones antiguas</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Eliminar exportación innecesaria de claves públicas al exportar clave secreta (gracias a Ash Hughes)</li>
<li>Repara el establecimiento de fechas de expiración en las claves (gracias a Ash Hughes)</li>
<li>Más reparaciones internas al editar claves (gracias a Ash Hughes)</li>
<li>Consultando servidores de claves directamente desde la pantalla de importación</li>
<li>Repara la composición y el estilo de diálogo de Android 2.2-3.0</li>
<li>Repara caídas en claves con identificaciones de usuario vacías</li>
<li>Repara caídas y listas vacías al volver desde la pantalla de firmado</li>
<li>Bouncy Castle (librería de criptografía) actualizada desde 1,47 a 1.50 y and compilada desde la fuente</li>
<li>Repara la clave de subida desde la pantalla de firmado</li>
</ul>
<h2>2.2</h2>
<ul>
<li>Nuevo diseño con panel deslizante de navegación</li>
<li>Nuevo disño de lista de clave pública</li>
<li>Nueva vista de clave pública</li>
<li>Reparación de fallos para la importación de claves</li>
<li>Certificación-cruzada de clave (gracias a Ash Hughes)</li>
<li>Manejo adecuado de contraseñas UTF-8 (gracias a Ash Hughes)</li>
<li>Primera versiónm con nuevos idiomas (gracias a los contribuidores en Transifex)</li>
<li>Reparado y mejorado el compartido de claves mediante códigos QR </li>
<li>Firma de verificación de paquete para la API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>Actualizaciones de API, preparación para integrar K-9 Mail</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Muchas reparaciones de fallos</li>
<li>Nueva API para desarrolladores</li>
<li>Reparación de fallo PRNG por Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Rediseño completo</li>
<li>Compartido de claves públicas mediante códigos QR y transmisión NFC beam</li>
<li>Firmar claves</li>
<li>Subir claves al servidor</li>
<li>Repara problemas con la importación</li>
<li>New API AIDL</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Soporte básico de servidor de claves</li>
<li>App2sd</li>
<li>Más opciones para frase-contraseña en caché: 1, 2, 4, 8, horas</li>
<li>Traducciones: Noruego (graciasa, Sander Danielsen), Chino (gracias a Zhang Fredrick)</li>
<li>Reparaciones de fallos</li>
<li>Optimizaciones</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Problema reparado con la verificación de firma de textos que finalizan con caracter nueva-línea </li>
<li>Más opciones para tiempo de vida en caché de frase-contraseña (20, 40, 60 min)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Reparada la caída al añadir cuenta en Froyo</li>
<li>Borrado seguro de fichero</li>
<li>Opción para borrar fichero de clave después de importar</li>
<li>Cifrado/descifrado de stream (galería, etc.)</li>
<li>Nuevas opciones (idioma, forzar firmas v3)</li>
<li>Cambios de interfaz</li>
<li>Reparaciones de fallos</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>Traducción al alemán e italiano</li>
<li>Paquete mucho más pequeño, debido a fuentes BC reducidas</li>
<li>Nuevas preferencias de GUI</li>
<li>Ajuste de composición para localización</li>
<li>Reparación de fallo de firma</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Reparado otro fallo causado por algún fallo SDK con constructor de consultas</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Reparadas caídas durante el cifrado/firmado y posiblemente exportación de claves</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Listas de claves filtrables</li>
<li>Pre-selección más inteligente de claves de cifrado</li>
<li>Nuevo objeto Intent que maneja VIEW y SEND (ver y enviar), permite que los ficheros sean cifrados/descifrados fuera de los administradores de ficheros</li>
<li>Reparaciones y características adicionales (preselección de claves) para K-9 Mail, nueva compilación beta disponible</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>El listado de cuentas de GMail estaba roto en la 1.0.0, reparado de nuevo</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>Integración de K-9 Mail, compilación beta soportando APG de K-9 Mail</li>
<li>Soporte para más administradores de ficheros (incluyendo ASTRO)</li>
<li>Traducción al esloveno</li>
<li>Nueva base de datos, mucho más rápidas, con menor uso de memoria</li>
<li>Definidos objetos Intent, y proveedores de contenidos para otras aplicaciones</li>
<li>Reparaciones de fallos</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Diseño estilo Material
* Integración de QR Scanner (se requieren nuevos permisos)
* Asistente de creación de clave mejorado
* Repara contactos perdidos después de la sincronización
* Requiere Android 4
* Pantalla de clave rediseñada
* Simplifica las preferencias de criptografía, mejor selección de algoritmos de cifrado seguro
* API: Firmas desacopladas, selección libre de clave de firmado...
* Reparación: Algunas claves válidas se mostraron revocadas o caducadas
* No acepte algo firmado por subclaves caducadas o revocadas
* Soporte Keybase.io en la vista avanzada
## 3.1.2
* Repara la exportación de claves a ficheros (ahora de verdad)
## 3.1.1
* Repara la exportación de claves a ficheros (se escribían parcialmente)
* Repara un fallo con caída en Android 2.3
## 3.1
* Repara un fallo con caída en Android 5
* Nueva pantalla de certificación
* Intercambio seguro directamente desde la lista de claves (librería SafeSlinger)
* Nuevo control de flujo del programa QR Code
* Pantalla de descifrado rediseñada
* Nuevo uso del icono y colores
* Repara la importación de clave secretas (privadas) desde Symantec Encryption Desktop
* Las identificaciones de subclaves sobre Yubikeys ahora están comprobadas correctamente
## 3.0.1
* Mejor manejo de importaciones de claves largas
* Selección de subclaves mejorada
## 3.0
* ¡Soporte completo para generación de firma y descifrado de Yubikey!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>¿Cómo activo OpenKeychain in K-9 Mail?</h2>
<p>Para utilizar OpenKeychain con K-9 Mail, querrá seguir estos pasos:</p>
<ol>
<li>Abra K-9 Mail y realice una pulsación larga en la cuenta con la que quiera utilizar OpenKeychain.</li>
<li>Seleccione "Configuración de cuenta", deplácese al fondo del todo y haga clic en "Criptografía".</li>
<li>Haga clic en "Proveedor OpenPGP" y de la lista seleccione OpenKeychain.</li>
</ol>
<h2>¡He encontrado un bug en OpenKeychain!</h2>
<p>Por favor, informa de errores usando el <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">seguimiento de incidencias de OpenKeychain</a>.</p>
<h2>Aportar</h2>
<p>Si quieres ayudarnos con el desarrollo de OpenKeychain aportando código <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">sigue nuestra pequeña guía en Github</a>.</p>
<h2>Traducciones</h2>
<p>¡Ayúdanos a traducir OpenKeychain! Todo el mundo es bienvenido en <a href="https://www.transifex.com/projects/p/openpgp-keychain/">Transifex - OpenKeychain</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## ¿Cómo activo OpenKeychain en K-9 Mail?
Para usar OpenKeychain con K-9 Mail, deberá seguir estos pasos:
1. Abra K-9 Mail y realice una pulsación larga sobre la cuenta con la que quiera usar OpenKeychain.
2. Seleccione "Configuración de cuenta", desplácese hasta el fondo y pulse "Criptografía".
3. Haga clic sobre "Proveedor OpenPGP" y seleccione OpenKeychain de la lista.
## ¡Encontré un fallo en OpenKeychain!
Por favor informe del fallo usando el [rastreador de fallos de OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribuir
Si quiere ayudarnos a desarrollar OpenKeychain contribuyendo con código [siga nuestra pequeña guía en GitHub](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Traducciones
¡Ayude a traducir OpenKeychain! Todos pueden participar en [OpenKeychain en Transifex] (https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers</h2>
<ul>
<li>Dominik Schürmann (Maintainer)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Libraries</a> (Apache License v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache License v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache License v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material Design)</a> (Apache License v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache License v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT License)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>New certify screen</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Better handling of large key imports</li>
<li>Improved subkey selection</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Full support for Yubikey signature generation and decryption!</li>
<li>Propose installable compatible apps in apps list</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Improved passphrase handling</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimental ECC support</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Keys are connected to Android's contacts</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric OpenPGP messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Colorized key fingerprint</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certify user ids</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Sign keys</li>
<li>Upload keys to server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Basic keyserver support</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li>
<li>Optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Secure file deletion</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>How do I activate OpenKeychain in K-9 Mail?</h2>
<p>To use OpenKeychain with K-9 Mail, you want to follow these steps:</p>
<ol>
<li>Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.</li>
<li>Select "Account settings" and scroll to the very bottom and click "Cryptography".</li>
<li>Click on "OpenPGP Provider" and select OpenKeychain from the list.</li>
</ol>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## How do I activate OpenKeychain in K-9 Mail?
To use OpenKeychain with K-9 Mail, you want to follow these steps:
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
2. Select "Account settings" and scroll to the very bottom and click "Cryptography".
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
## I found a bug in OpenKeychain!
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribute
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Translations
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> Android-rako OpenPGP inplemetazio bat da.</p>
<p>Baimena: GPLv3+</p>
<h2>Garatzaileak</h2>
<ul>
<li>Dominik Schürmann (Mantentzailea)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Liburutegiak</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 Baimena)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT Baimena)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Libraries</a> (Apache License v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache Baimena v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache Baimena v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache Baimena v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache Baimena v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache License v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache License v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material Design)</a> (Apache License v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache License v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT License)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>New certify screen</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Better handling of large key imports</li>
<li>Improved subkey selection</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Full support for Yubikey signature generation and decryption!</li>
<li>Propose installable compatible apps in apps list</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Improved passphrase handling</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimental ECC support</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Keys are connected to Android's contacts</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric OpenPGP messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Colorized key fingerprint</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certify user ids</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Sign keys</li>
<li>Upload keys to server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Basic keyserver support</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li>
<li>Optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Secure file deletion</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>How do I activate OpenKeychain in K-9 Mail?</h2>
<p>To use OpenKeychain with K-9 Mail, you want to follow these steps:</p>
<ol>
<li>Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.</li>
<li>Select "Account settings" and scroll to the very bottom and click "Cryptography".</li>
<li>Click on "OpenPGP Provider" and select OpenKeychain from the list.</li>
</ol>
<h2>Akats bat aurkitu dut OpenKeychain-en!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Lagundu</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Itzulpenak</h2>
<p>Lagundu OpenKeychain itzultzen! Edonork eskuhartu dezake hemen <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychainTransifex-en</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## How do I activate OpenKeychain in K-9 Mail?
To use OpenKeychain with K-9 Mail, you want to follow these steps:
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
2. Select "Account settings" and scroll to the very bottom and click "Cryptography".
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
## I found a bug in OpenKeychain!
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribute
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Translations
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers</h2>
<ul>
<li>Dominik Schürmann (Maintainer)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Libraries</a> (Apache License v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache License v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache License v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material Design)</a> (Apache License v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache License v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT License)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>New certify screen</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Better handling of large key imports</li>
<li>Improved subkey selection</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Full support for Yubikey signature generation and decryption!</li>
<li>Propose installable compatible apps in apps list</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Improved passphrase handling</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimental ECC support</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Keys are connected to Android's contacts</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric OpenPGP messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Colorized key fingerprint</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certify user ids</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Sign keys</li>
<li>Upload keys to server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Basic keyserver support</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li>
<li>Optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Secure file deletion</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>How do I activate OpenKeychain in K-9 Mail?</h2>
<p>To use OpenKeychain with K-9 Mail, you want to follow these steps:</p>
<ol>
<li>Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.</li>
<li>Select "Account settings" and scroll to the very bottom and click "Cryptography".</li>
<li>Click on "OpenPGP Provider" and select OpenKeychain from the list.</li>
</ol>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## How do I activate OpenKeychain in K-9 Mail?
To use OpenKeychain with K-9 Mail, you want to follow these steps:
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
2. Select "Account settings" and scroll to the very bottom and click "Cryptography".
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
## I found a bug in OpenKeychain!
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribute
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Translations
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/openpgp-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> est une implémentation d'OpenPGP pour Android.</p>
<p>Licence : GPLv3+</p>
<h2>Développeurs</h2>
<ul>
<li>Dominik Schürmann (mainteneur)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar « kalkin » Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>« mar-v-in »</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>« 'Senecaso »</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Bibliothèques</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licence MIT X11)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">Bibliothèque d'échange SafeSlinger</a> (Licence MIT)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Bibliothèques de soutien Android</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (License Apache v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (License Apache v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (conception matérielle )</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (Licence MIT)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Licence Apache v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) est une mise en œuvre d'OpenPGP pour Android.
Licence : GPLv3+
## Développeurs
* Dominik Schürmann (mainteneur)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar « kalkin » Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* « mar-v-in »
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* « Senecaso »
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Bibliothèques
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (Licence MIT X11)
* [Bibliothèque d'échange SafeSlinger](https://github.com/SafeSlingerProject/exchange-android) (Licence MIT)
* [Bibliothèques de soutien Android](http://developer.android.com/tools/support-library/index.html) (Licence Apache v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Licence Apache v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Licence Apache v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Licence Apache v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Licence Apache v2)
* [ZXing](https://github.com/zxing/zxing) (Licence Apache v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Licence Apache v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Conception matérielle)</a> (Licence Apache v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Licence Apache v2)
* [Snackbar](https://github.com/nispok/snackbar) (Licence MIT)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Licence Apache v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Licence Apache v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Licence Apache v2)

View File

@ -0,0 +1,27 @@
## Confirmation de clef
Sans confirmation, vous ne pouvez pas être certain que la clef appartient à une personne déterminée.
La façon la plus simple de confirmer une clef est en balayant le code QR ou en l'échangeant par NFC.
Pour confirmer des clefs entre plus de deux personnes, nous suggérons d'utiliser la méthode d'échange de clef proposée pour vos clefs.
## État de la clef
<img src="status_signature_verified_cutout_24dp"/>
Confirmée : vous avez déjà confirmé cette clef, p. ex. en balayant le code QR.
<img src="status_signature_unverified_cutout_24dp"/>
Non confirmée : cette clef n'a pas encore été confirmée. Vous ne pouvez pas être certain que la clef appartient à une personne déterminée.
<img src="status_signature_expired_cutout_24dp"/>
Expirée : cette clef n'est plus valide. Seul le propriétaire peut prolonger sa validité.
<img src="status_signature_revoked_cutout_24dp"/>
Révoquée : cette n'est plus valide. Elle a été révoquée par son propriétaire.
## Informations avancées
Avec OpenKeychain une « confirmation de clef » est effectuée en créant une certification d'après la norme OpenPGP.
Cette certification est une [« certification générique » (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) décrite ainsi dans la norme :
« L'émetteur de cette certification n'affirme aucunement que le certificateur a bien vérifié que le propriétaire de la clef est bel et bien la personne décrite par l'ID utilisateur »
Habituellement, les certifications (il en est de même avec les niveaux supérieurs de certification, tels que le « certifications positives » (0x13)) sont organisées dans la toile de confiance d'OpenPGP.
Notre modèle de confirmation de clef est un concept bien plus simple pour éviter les problèmes habituels de convivialité associés à cette toile de confiance.
Nous assumons que les clefs sont vérifiées seulement jusqu'à un certain degré qui est quand même assez utilisable pour être exécuté « à la volée ».
Nous ne mettons pas non plus en place des signatures de confiance (potentiellement transitives) ou une base de données « ownertrust » comme dans GnuPG.
De plus, les clefs contenant au moins un ID utilisateur certifié par une clef de confiance seront marquées « confirmée » dans les listages de clefs.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Correctif - Exportation des clefs vers des fichiers (vraiment, maintenant)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Correctif - Exportation des clefs vers des fichiers (elles n'étaient écrites que partiellement)</li>
<li>Correctif - Plantage sur Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Plantage corrigé sur Android 5</li>
<li>Nouvel écran de certification</li>
<li>Échange sécurisé directement depuis la liste des clefs (bibliothèque SafeSlinger)</li>
<li>Nouveau flux de programme pour les codes QR</li>
<li>Écran de déchiffrement redessiné</li>
<li>Nouveaux agencement et couleurs d'icônes</li>
<li>Importation des clefs secrètes corrigée depuis le bureau de chiffrement Symantec</li>
<li>Les ID de sous-clefs des Yubikeys sont maintenant vérifiés correctement</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Meilleure gestion de l'importation de nombreuses clefs</li>
<li>Sélection des sous-clefs améliorée</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Prise en charge complète de la génération de signature par Yubikey et de leur déchiffrement !</li>
<li>Des applis compatibles installables sont proposées dans la liste des applis</li>
<li>Nouvelle conception pour les écrans de déchiffrement</li>
<li>Nombreux correctifs d'importation des clefs, corrigent aussi les clefs dépouillées</li>
<li>Accepter et afficher les drapeaux d'authentification des clefs</li>
<li>Interface utilisateur pour générer des clefs personnalisées</li>
<li>Corrigé - certificats de révocation des ID utilisateurs</li>
<li>Nouvelle recherche nuagique (dans les serveurs traditionnels et dans keybase.io)</li>
<li>Prise en charge du dépouillement des clefs dans OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Correctif - Clefs brisées dans 2.9.1</li>
<li>Le déchiffrement des Yukukeys par l'API fonctionne maintenant</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Partage de l'écran de chiffrement en deux</li>
<li>Correctif - Gestion des drapeaux de clefs (prend maintenant en charge les clefs Mailvelope 0.7)</li>
<li>Gestion des phrases de passe améliorée</li>
<li>Partage de clefs par SafeSlinger</li>
<li>Yubikey : préférence pour permette d'autre NIP, seule la signature par l'API OpenPGP fonctionne présentement, mais pas à l'intérieur d'OpenKeychain</li>
<li>Correctif - Utilisation de clefs dépouillées</li>
<li>SHA256 par défaut pour la compatibilité</li>
<li>L'API des intentions a changé, voir https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>L'API d'OpenPGP gère maintenant les clefs révoquées/expirées et retourne tous les ID utilisateurs</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Correction des plantages présents dans v2.8</li>
<li>Prise en charge expérimentale CCE</li>
<li>Prise en charge expérimentale de Yubikey (signature seulement avec les clefs importées)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>Tellement de bogues ont été réglés dans cette version que nous nous concentrons sur les nouvelles caractéristiques principales.</li>
<li>Modification des clefs : nouvelle et superbe conception, révocations des clefs</li>
<li>Importation des clefs : nouvelle et superbe conception, connexion sécurisé aux serveurs de clefs par hkps, résolution des serveurs de clefs par transactions DNS SRV</li>
<li>Nouvel écran de premier lancement</li>
<li>Nouvel écran de création de clef : auto-remplissage du nom et du courriel d'après vos coordonnées Android</li>
<li>Chiffrement des fichiers : nouvelle et superbe conception, prise en charge du chiffrement de fichiers multiples</li>
<li>Nouvelles icônes d'état des clefs (par Brennan Novak)</li>
<li>Correctif important de bogue : l'importation de grandes collections de clefs à partir d'un fichier est maintenant possible</li>
<li>Notification montrant les phrases de passe en cache</li>
<li>Les clefs sont connectées aux contacts d'Android</li>
</ul>
<p>Cette version ne serait pas possible sans le travail de Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Violet ! (Dominik, Vincent)</li>
<li>Nouvelle présentation de la visualisation des clefs (Dominik, Vincent)</li>
<li>Nouveaux boutons Android plats (Dominik, Vincent)</li>
<li>Correctifs de l'API (Dominik)</li>
<li>Importation de Keybase.io (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Quelques correctifs de bogues de régression</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Certifications des clefs (merci à Vincent Breitmoser)</li>
<li>Prise en charge clefs secrètes partielles de GnuPG (merci à Vincent Breitmoser)</li>
<li>Nouvelle conception de la vérification de signatures</li>
<li>Longueur de clef personnalisée (merci à Greg Witczak)</li>
<li>Correctif - Fonctionnalités partagées d'autres applis</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Correctif - Déchiffrement des messages/fichiers symétriques OpenPGP</li>
<li>Écran de modification des clefs remanié (merci à Ash Hughes)</li>
<li>Nouvelle conception moderne pour les écrans de chiffrement/déchiffrement</li>
<li>API OpenPGP version 3 (comptes multiples d'api, correctifs internes, recherche de clefs)</li>
</ul>
<h2>2.4</h2>
<p>Merci à tous les participants de « Google Summer of Code 2014 » qui ont rendu cette version riche en fonctions et sans bogue !
À part plusieurs petits correctifs, un nombre notable de correctifs ont été apportés par les personnes suivantes (par ordre alphabétique) :
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>Nouvelle liste de clefs unifiée</li>
<li>Empreintes de clefs colorées</li>
<li>Prise en charge des ports des serveurs de clefs</li>
<li>Désactiver la possibilité de générer des clefs faibles</li>
<li>Encore plus de travail interne dans l'API</li>
<li>Certifier les ID utilisateurs</li>
<li>Requêtes des serveurs de clefs basées sur des sorties assimilables par la machine</li>
<li>Verrouiller les tiroirs de navigation sur les tablettes</li>
<li>Suggestion de courriels à la création de clefs</li>
<li>Rechercher dans les listes de clefs publiques</li>
<li>Et bien plus d'améliorations et de correctifs</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Correctif d'urgence pour le plantage lors de la mise à niveau à partir d'anciennes versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Suppressions de l'exportation non nécessaire des clefs publiques lors de l'exportation de clefs secrètes (merci à Ash Hughes)</li>
<li>Correctif - Définition de la date de péremption des clefs (merci à Ash Hughes)</li>
<li>Plus de correctifs internes affectant la modifications des clefs (merci à Ash hughes)</li>
<li>Interrogation des serveurs de clefs directement depuis l'écran d'importation</li>
<li>Correctif - Mise en page et du style des fenêtres de dialogue sur Android 2.2-3.0</li>
<li>Correctif - Plantage pour les clefs avec des ID utilisateur vides</li>
<li>Correctif - Plantage et listes vides en revenant de l'écran de signature</li>
<li>Bouncy Castle (bibliothèque cryptographique) mise à jour de 1.47 à 1.50 et compilée depuis la source</li>
<li>Correctif - Téléversement d'une clef depuis l'écran de signature</li>
</ul>
<h2>2.2</h2>
<ul>
<li>Nouvelle conception avec tiroir de navigation</li>
<li>Nouvelle conception de la liste des clefs publics</li>
<li>Nouvelle vue des clefs publics</li>
<li>Correctif de bogues d'importation de clefs</li>
<li>Certification croisée des clefs (merci à Ash Hughes)</li>
<li>Bonne gestion des mots de passe UTF-8 (merci à Ash Hughes)</li>
<li>Première version avec de nouvelles langues (merci aux contributeurs sur Transifex)</li>
<li>Correctif et amélioration du partage de clefs par codes QR</li>
<li>Vérification de la signature des paquets pour l'API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>mise à jour de l'API, préparation à l'intégration à K-9 Mail</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Beaucoup de bogues corrigés</li>
<li>Nouvelle API pour les développeurs</li>
<li>Correctif du blogue PRNG par Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Conception complètement repensée</li>
<li>Partage de clefs publiques par codes QR, faisceau NFC</li>
<li>Signer les clefs</li>
<li>Téléverser les clefs vers le serveur</li>
<li>Corrige des problèmes d'importation</li>
<li>Nouvelle API AIDL</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Prise en charge de base du serveur de clefs</li>
<li>App2sd</li>
<li>Plus de choix pour le cache de la phrase de passe : 1, 2, 4, 8 heures</li>
<li>Traductions : norvégien (merci Sander Danielsen), chinois (merci Zhang Fredrick)</li>
<li>Correctifs de bogues</li>
<li>Optimisations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Problème corrigé avec la vérification de la signature des textes se terminant par un retour à la ligne</li>
<li>Plus de choix pour la durée de vie de la phrase de passe (20, 40, 60 min)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Correctif - Plantage lors de l'ajout de compte sur Froyo</li>
<li>Suppression sécurisée de fichiers</li>
<li>Option de suppression du fichier de clef après l'importation</li>
<li>Chiffrement/déchiffrement de flux (galerie, etc.)</li>
<li>Nouvelles options (langue, forcer les signatures v3)</li>
<li>Changements dans l'interface</li>
<li>Correctifs de bogues</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>Traduction allemande et italienne</li>
<li>Paquet beaucoup plus petit grâce à des sources BC réduites</li>
<li>Nouvelle IUG pour les préférences</li>
<li>Ajustement de la mise en page pour les localisations</li>
<li>Correctif de bogue de signature</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Correction d'un autre plantage causé par quelque bogue SDK avec le constructeur de requêtes</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Corrections de plantages durant le chiffrement/la signature et possiblement l'exportation de clefs</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Listes de clefs filtrables</li>
<li>Présélection plus intelligente des clefs de chiffrement</li>
<li>Nouvelle gestion des intentions pour VIEW et SEND, permet le chiffrement/déchiffrement des fichiers depuis les gestionnaires de fichiers</li>
<li>Correctifs et fonctions additionnelles (présélection des clefs) pour K-9-Mail, nouvelle version bêta proposée</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>Le listage des comptes Gmail ne fonctionnait pas dans 1.0.0, corrigé de nouveau</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>Intégration à K-9 Mail, APG prenant en charge la version bêta de K-9 Mail</li>
<li>Prise en charge de plus de gestionnaires de fichiers (incluant ASTRO)</li>
<li>Traduction slovène</li>
<li>Nouvelle base de données, bien plus rapide, utilisation de la mémoire moindre</li>
<li>Intentions définies et fournisseur de contenu pour d'autres applis</li>
<li>Correctifs de bogues</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Comment puis-je activer OpenKeychain dans K-9 Mail ?</h2>
<p>Pour utiliser OpenKeychain avec K-9 Mail, vous devez suivre ces étapes :</p>
<ol>
<li>Ouvrez K-9 Mail et toquez longuement sur le compte avec lequel vous voulez utiliser OpenKeychain. </li>
<li>Sélectionnez « Paramètres du compte », faite défiler vers le bas et cliquez sur « Cryptographie».</li>
<li>Cliquez sur « Fournisseur OpenPGP » et sélectionnez OpenKeychain dans la liste.</li>
</ol>
<h2>J'ai trouvé un bogue dans OpenKeychain !</h2>
<p>Veuillez rapporter le bogue en utilisant le <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">gestionnaire de bogue d'OpenKeychain</a>.</p>
<h2>Contribuer</h2>
<p>Si vous voulez nous aider à développer OpenKeychain en y contribuant par du code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">veuillez suivre notre petit guide sur Github</a>.</p>
<h2>Traductions</h2>
<p>Aidez-nous à traduire le OpenKeychain ! Tout le monde peut y participer sur la <a href="https://www.transifex.com/projects/p/openpgp-keychain/">page d'OpenKeychain sur Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
## Comment puis-je activer OpenKeychain dans K-9 Mail ?
Pour utiliser OpenKeychain avec K-9 Mail, vous devez suivre ces étapes :
1. Ouvrez K-9 Mail et appuyez longuement sur le compte avec lequel vous voulez utiliser OpenKeychain.
2. Sélectionnez « Paramètres du compte », faite défiler vers le bas et cliquez sur « Cryptographie ».
3. Cliquez sur « Fournisseur OpenPGP » et sélectionnez OpenKeychain dans la liste.
## J'ai trouvé un bogue dans OpenKeychain !
Veuillez signaler le bogue en utilisant le [gestionnaire de bogue d'OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
## Contribuer
Si vous voulez nous aider à développer OpenKeychain en y contribuant par du code [veuillez suivre notre petit guide sur Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
## Traductions
Aidez à traduire OpenKeychain ! Tout le monde peut y participer sur la [page d'OpenKeychain sur Transifex](https://www.transifex.com/projects/p/open-keychain/).

View File

@ -1,61 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers</h2>
<ul>
<li>Dominik Schürmann (Maintainer)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Signe Rüsch</li>
<li>Sreeram Boyapati</li>
<li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li>
<li>Vincent Breitmoser</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Libraries</a> (Apache License v2)</li>
<li>
<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/zxing/zxing">ZXing</a> (Apache License v2)</li>
<li>
<a href="https://github.com/journeyapps/zxing-android-embedded">ZXing Android Minimal</a> (Apache License v2)</li>
<li>
<a href="https://github.com/jpardogo/PagerSlidingTabStrip">PagerSlidingTabStrip (Material Design)</a> (Apache License v2)</li>
<li>
<a href="https://github.com/neokree/MaterialNavigationDrawer">MaterialNavigationDrawer</a> (Apache License v2)</li>
<li>
<a href="https://github.com/nispok/snackbar">Snackbar</a> (MIT License)</li>
<li>
<a href="https://github.com/futuresimple/android-floating-action-button">FloatingActionButton</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,45 @@
[http://www.openkeychain.org](http://www.openkeychain.org)
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
License: GPLv3+
## Developers
* Dominik Schürmann (Maintainer)
* Art O Cathain
* Ash Hughes
* Brian C. Barnes
* Bahtiar 'kalkin' Gadimov
* Daniel Albert
* Daniel Hammann
* Daniel Haß
* Greg Witczak
* 'mar-v-in'
* Markus Doits
* Miroojin Bakshi
* Nikhil Peter Raj
* Paul Sarbinowski
* 'Senecaso'
* Signe Rüsch
* Sreeram Boyapati
* Thialfihar (APG 1.x)
* Tim Bray
* Vincent Breitmoser
## Libraries
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)

View File

@ -0,0 +1,27 @@
## Key Confirmation
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
The most simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
## Key Status
<img src="status_signature_verified_cutout_24dp"/>
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
<img src="status_signature_unverified_cutout_24dp"/>
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
<img src="status_signature_expired_cutout_24dp"/>
Expired: This key is no longer valid. Only the owner can extend its validity.
<img src="status_signature_revoked_cutout_24dp"/>
Revoked: This key is no longer valid. It has been revoked by its owner.
## Advanced Information
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.

View File

@ -1,232 +0,0 @@
<html>
<head></head>
<body>
<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>New certify screen</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Better handling of large key imports</li>
<li>Improved subkey selection</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Full support for Yubikey signature generation and decryption!</li>
<li>Propose installable compatible apps in apps list</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Improved passphrase handling</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimental ECC support</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Keys are connected to Android's contacts</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric OpenPGP messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Colorized key fingerprint</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certify user ids</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Sign keys</li>
<li>Upload keys to server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Basic keyserver support</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li>
<li>Optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Secure file deletion</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,268 @@
## 3.2beta2
* Material design
* Integration of QR Scanner (New permissions required)
* Improved key creation wizard
* Fix missing contacts after sync
* Requires Android 4
* Redesigned key screen
* Simplify crypto preferences, better selection of secure ciphers
* API: Detached signatures, free selection of signing key,...
* Fix: Some valid keys were shown revoked or expired
* Don't accept signatures by expired or revoked subkeys
* Keybase.io support in advanced view
## 3.1.2
* Fix key export to files (now for real)
## 3.1.1
* Fix key export to files (they were written partially)
* Fix crash on Android 2.3
## 3.1
* Fix crash on Android 5
* New certify screen
* Secure Exchange directly from key list (SafeSlinger library)
* New QR Code program flow
* Redesigned decrypt screen
* New icon usage and colors
* Fix import of secret keys from Symantec Encryption Desktop
* Subkey IDs on Yubikeys are now checked correctly
## 3.0.1
* Better handling of large key imports
* Improved subkey selection
## 3.0
* Full support for Yubikey signature generation and decryption!
* Propose installable compatible apps in apps list
* New design for decryption screens
* Many fixes for key import, also fixes stripped keys
* Honor and display key authenticate flags
* User interface to generate custom keys
* Fixing user id revocation certificates
* New cloud search (searches over traditional keyservers and keybase.io)
* Support for stripping keys inside OpenKeychain
## 2.9.2
* Fix keys broken in 2.9.1
* Yubikey decryption now working via API
## 2.9.1
* Split encrypt screen into two
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
* Improved passphrase handling
* Key sharing via SafeSlinger
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
* Fix usage of stripped keys
* SHA256 as default for compatibility
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
* OpenPGP API now handles revoked/expired keys and returns all user ids
## 2.9
* Fixing crashes introduced in v2.8
* Experimental ECC support
* Experimental Yubikey support (signing-only with imported keys)
## 2.8
* So many bugs have been fixed in this release that we focus on the main new features
* Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen
* New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible
* Notification showing cached passphrases
* Keys are connected to Android's contacts
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
## 2.7
* Purple! (Dominik, Vincent)
* New key view design (Dominik, Vincent)
* New flat Android buttons (Dominik, Vincent)
* API fixes (Dominik)
* Keybase.io import (Tim Bray)
## 2.6.1
* Some fixes for regression bugs
## 2.6
* Key certifications (thanks to Vincent Breitmoser)
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
* New design for signature verification
* Custom key length (thanks to Greg Witczak)
* Fix share-functionality from other apps
## 2.5
* Fix decryption of symmetric OpenPGP messages/files
* Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
## 2.4
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
* New unified key list
* Colorized key fingerprint
* Support for keyserver ports
* Deactivate possibility to generate weak keys
* Much more internal work on the API
* Certify user ids
* Keyserver query based on machine-readable output
* Lock navigation drawer on tablets
* Suggestions for emails on creation of keys
* Search in public key lists
* And much more improvements and fixes…
## 2.3.1
* Hotfix for crash when upgrading from old versions
## 2.3
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
* Fix setting expiry dates on keys (thanks to Ash Hughes)
* More internal fixes when editing keys (thanks to Ash Hughes)
* Querying keyservers directly from the import screen
* Fix layout and dialog style on Android 2.2-3.0
* Fix crash on keys with empty user ids
* Fix crash and empty lists when coming back from signing screen
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
* Fix upload of key from signing screen
## 2.2
* New design with navigation drawer
* New public key list design
* New public key view
* Bug fixes for importing of keys
* Key cross-certification (thanks to Ash Hughes)
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
* First version with new languages (thanks to the contributors on Transifex)
* Sharing of keys via QR Codes fixed and improved
* Package signature verification for API
## 2.1.1
* API Updates, preparation for K-9 Mail integration
## 2.1
* Lots of bug fixes
* New API for developers
* PRNG bug fix by Google
## 2.0
* Complete redesign
* Share public keys via QR codes, NFC beam
* Sign keys
* Upload keys to server
* Fixes import issues
* New AIDL API
## 1.0.8
* Basic keyserver support
* App2sd
* More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes
* Optimizations
## 1.0.7
* Fixed problem with signature verification of texts with trailing newline
* More options for passphrase cache time to live (20, 40, 60 mins)
## 1.0.6
* Account adding crash on Froyo fixed
* Secure file deletion
* Option to delete key file after import
* Stream encryption/decryption (gallery, etc.)
* New options (language, force v3 signatures)
* Interface changes
* Bugfixes
## 1.0.5
* German and Italian translation
* Much smaller package, due to reduced BC sources
* New preferences GUI
* Layout adjustment for localization
* Signature bugfix
## 1.0.4
* Fixed another crash caused by some SDK bug with query builder
## 1.0.3
* Fixed crashes during encryption/signing and possibly key export
## 1.0.2
* Filterable key lists
* Smarter pre-selection of encryption keys
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
## 1.0.1
* GMail account listing was broken in 1.0.0, fixed again
## 1.0.0
* K-9 Mail integration, APG supporting beta build of K-9 Mail
* Support of more file managers (including ASTRO)
* Slovenian translation
* New database, much faster, less memory usage
* Defined Intents and content provider for other apps
* Bugfixes

Some files were not shown because too many files have changed in this diff Show More