Add exception for 'plugins/openpgp-api-lib' and revert changes
This commit is contained in:
parent
0bf2b31d85
commit
43213136be
3 changed files with 68 additions and 84 deletions
|
@ -101,13 +101,14 @@ spotless {
|
|||
ktlint(libs.versions.ktlint.get())
|
||||
.setEditorConfigPath("$projectDir/.editorconfig")
|
||||
target("**/*.kt")
|
||||
targetExclude("**/build/", "**/resources/")
|
||||
targetExclude("**/build/", "**/resources/", "plugins/openpgp-api-lib/")
|
||||
trimTrailingWhitespace()
|
||||
endWithNewline()
|
||||
}
|
||||
format("markdown") {
|
||||
prettier()
|
||||
target("**/*.md")
|
||||
targetExclude("plugins/openpgp-api-lib/")
|
||||
trimTrailingWhitespace()
|
||||
endWithNewline()
|
||||
}
|
||||
|
|
|
@ -1,56 +1,48 @@
|
|||
# Version history
|
||||
|
||||
## Version 10
|
||||
|
||||
- Retrieve whole public key via ACTION_GET_KEY
|
||||
* Retrieve whole public key via ACTION_GET_KEY
|
||||
|
||||
## Version 9
|
||||
|
||||
- AIDL Service has been changed from IOpenPgpService.aidl to IOpenPgpService2.aidl
|
||||
This fixes truncated data streams (thanks to 'mgeier63').
|
||||
- Fix for OpenPgpKeyPreference: Properly execute pending user interactions
|
||||
- Charset moved to OpenPgpMetadata
|
||||
* AIDL Service has been changed from IOpenPgpService.aidl to IOpenPgpService2.aidl
|
||||
This fixes truncated data streams (thanks to 'mgeier63').
|
||||
* Fix for OpenPgpKeyPreference: Properly execute pending user interactions
|
||||
* Charset moved to OpenPgpMetadata
|
||||
|
||||
## Version 8
|
||||
|
||||
- OpenPgpSignatureResult:
|
||||
method getStatus() renamed to getResult()
|
||||
constants have been renamed for clarity
|
||||
new constants: RESULT_NO_SIGNATURE, RESULT_INVALID_INSECURE
|
||||
isSignatureOnly() has been deprecated
|
||||
- RESULT_TYPES have been removed
|
||||
- new OpenPgpDecryptionResult returned via RESULT_DECRYPTION
|
||||
- OpenPgpSignatureResult and OpenPgpDecryptionResult are never null, they are always returned.
|
||||
* OpenPgpSignatureResult:
|
||||
method getStatus() renamed to getResult()
|
||||
constants have been renamed for clarity
|
||||
new constants: RESULT_NO_SIGNATURE, RESULT_INVALID_INSECURE
|
||||
isSignatureOnly() has been deprecated
|
||||
* RESULT_TYPES have been removed
|
||||
* new OpenPgpDecryptionResult returned via RESULT_DECRYPTION
|
||||
* OpenPgpSignatureResult and OpenPgpDecryptionResult are never null, they are always returned.
|
||||
|
||||
## Version 7
|
||||
|
||||
- Deprecation of ACCOUNT_NAME, please use ACTION_GET_SIGN_KEY_ID to get key id
|
||||
- Introduce EXTRA_SIGN_KEY_ID
|
||||
- New extra for ACTION_ENCRYPT and ACTION_SIGN_AND_ENCRYPT: EXTRA_ENABLE_COMPRESSION (default to true)
|
||||
- Return PendingIntent to view key for signatures
|
||||
- New result for ACTION_DECRYPT_VERIFY: RESULT_TYPE
|
||||
- New ACTION_GET_SIGN_KEY_ID
|
||||
- EXTRA_PASSPHRASE changed from String to char[]
|
||||
* Deprecation of ACCOUNT_NAME, please use ACTION_GET_SIGN_KEY_ID to get key id
|
||||
* Introduce EXTRA_SIGN_KEY_ID
|
||||
* New extra for ACTION_ENCRYPT and ACTION_SIGN_AND_ENCRYPT: EXTRA_ENABLE_COMPRESSION (default to true)
|
||||
* Return PendingIntent to view key for signatures
|
||||
* New result for ACTION_DECRYPT_VERIFY: RESULT_TYPE
|
||||
* New ACTION_GET_SIGN_KEY_ID
|
||||
* EXTRA_PASSPHRASE changed from String to char[]
|
||||
|
||||
## Version 6
|
||||
|
||||
- Deprecate ACTION_SIGN
|
||||
- Introduce ACTION_CLEARTEXT_SIGN and ACTION_DETACHED_SIGN
|
||||
- New extra for ACTION_DETACHED_SIGN: EXTRA_DETACHED_SIGNATURE
|
||||
- New result for ACTION_DECRYPT_VERIFY: RESULT_DETACHED_SIGNATURE
|
||||
- New result for ACTION_DECRYPT_VERIFY: RESULT_CHARSET
|
||||
* Deprecate ACTION_SIGN
|
||||
* Introduce ACTION_CLEARTEXT_SIGN and ACTION_DETACHED_SIGN
|
||||
* New extra for ACTION_DETACHED_SIGN: EXTRA_DETACHED_SIGNATURE
|
||||
* New result for ACTION_DECRYPT_VERIFY: RESULT_DETACHED_SIGNATURE
|
||||
* New result for ACTION_DECRYPT_VERIFY: RESULT_CHARSET
|
||||
|
||||
## Version 5
|
||||
|
||||
- OpenPgpSignatureResult: new consts RESULT_INVALID_KEY_REVOKED and RESULT_INVALID_KEY_EXPIRED
|
||||
- OpenPgpSignatureResult: ArrayList<String> userIds
|
||||
* OpenPgpSignatureResult: new consts RESULT_INVALID_KEY_REVOKED and RESULT_INVALID_KEY_EXPIRED
|
||||
* OpenPgpSignatureResult: ArrayList<String> userIds
|
||||
|
||||
## Version 4
|
||||
|
||||
- No changes to existing methods -> backward compatible
|
||||
- Introduction of ACTION_DECRYPT_METADATA, RESULT_METADATA, EXTRA_ORIGINAL_FILENAME, and OpenPgpMetadata parcel
|
||||
- Introduction of internal NFC extras: EXTRA_NFC_SIGNED_HASH, EXTRA_NFC_SIG_CREATION_TIMESTAMP
|
||||
* No changes to existing methods -> backward compatible
|
||||
* Introduction of ACTION_DECRYPT_METADATA, RESULT_METADATA, EXTRA_ORIGINAL_FILENAME, and OpenPgpMetadata parcel
|
||||
* Introduction of internal NFC extras: EXTRA_NFC_SIGNED_HASH, EXTRA_NFC_SIG_CREATION_TIMESTAMP
|
||||
|
||||
## Version 3
|
||||
|
||||
- First public stable version
|
||||
* First public stable version
|
|
@ -5,13 +5,11 @@ The OpenPGP API provides methods to execute OpenPGP operations, such as sign, en
|
|||
### News
|
||||
|
||||
#### Version 10
|
||||
|
||||
- Retrieve whole public key via ACTION_GET_KEY
|
||||
* Retrieve whole public key via ACTION_GET_KEY
|
||||
|
||||
[Full changelog here…](https://github.com/open-keychain/openpgp-api/blob/master/CHANGELOG.md)
|
||||
|
||||
### License
|
||||
|
||||
While OpenKeychain itself is GPLv3+, the API library is licensed under Apache License v2.
|
||||
Thus, you are allowed to also use it in closed source applications as long as you respect the [Apache License v2](https://github.com/open-keychain/openpgp-api/blob/master/LICENSE).
|
||||
|
||||
|
@ -30,8 +28,7 @@ dependencies {
|
|||
```
|
||||
|
||||
### Full example
|
||||
|
||||
A full working example is available in the [example project](https://github.com/open-keychain/openpgp-api/blob/master/example). The [`OpenPgpApiActivity.java`](https://github.com/open-keychain/openpgp-api/blob/master/example/src/main/java/org/openintents/openpgp/example/OpenPgpApiActivity.java) contains most relevant sourcecode.
|
||||
A full working example is available in the [example project](https://github.com/open-keychain/openpgp-api/blob/master/example). The [``OpenPgpApiActivity.java``](https://github.com/open-keychain/openpgp-api/blob/master/example/src/main/java/org/openintents/openpgp/example/OpenPgpApiActivity.java) contains most relevant sourcecode.
|
||||
|
||||
### API
|
||||
|
||||
|
@ -41,24 +38,21 @@ A full working example is available in the [example project](https://github.com/
|
|||
|
||||
**This tutorial only covers the basics, please consult the full example for a complete overview over all methods**
|
||||
|
||||
The API is **not** designed around `Intents` which are started via `startActivityForResult`. These Intent actions typically start an activity for user interaction, so they are not suitable for background tasks. Most API design decisions are explained at [the bottom of this wiki page](https://github.com/open-keychain/open-keychain/wiki/OpenPGP-API#internal-design-decisions).
|
||||
The API is **not** designed around ``Intents`` which are started via ``startActivityForResult``. These Intent actions typically start an activity for user interaction, so they are not suitable for background tasks. Most API design decisions are explained at [the bottom of this wiki page](https://github.com/open-keychain/open-keychain/wiki/OpenPGP-API#internal-design-decisions).
|
||||
|
||||
We will go through the basic steps to understand how this API works, following this (greatly simplified) sequence diagram:
|
||||
![](https://github.com/open-keychain/open-keychain/raw/master/Resources/docs/openpgp_api_1.jpg)
|
||||
|
||||
In this diagram the client app is depicted on the left side, the OpenPGP provider (in this case OpenKeychain) is depicted on the right.
|
||||
The remote service is defined via the [AIDL](http://developer.android.com/guide/components/aidl.html) file [`IOpenPgpService`](https://github.com/open-keychain/openpgp-api/blob/master/openpgp-api/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl).
|
||||
The remote service is defined via the [AIDL](http://developer.android.com/guide/components/aidl.html) file [``IOpenPgpService``](https://github.com/open-keychain/openpgp-api/blob/master/openpgp-api/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl).
|
||||
It contains only one exposed method which can be invoked remotely:
|
||||
|
||||
```java
|
||||
interface IOpenPgpService {
|
||||
Intent execute(in Intent data, in ParcelFileDescriptor input, in ParcelFileDescriptor output);
|
||||
}
|
||||
```
|
||||
|
||||
The interaction between the apps is done by binding from your client app to the remote service of OpenKeychain.
|
||||
`OpenPgpServiceConnection` is a helper class from the library to ease this step:
|
||||
|
||||
``OpenPgpServiceConnection`` is a helper class from the library to ease this step:
|
||||
```java
|
||||
OpenPgpServiceConnection mServiceConnection;
|
||||
|
||||
|
@ -78,38 +72,36 @@ public void onDestroy() {
|
|||
|
||||
Following the sequence diagram, these steps are executed:
|
||||
|
||||
1. Define an `Intent` containing the actual PGP instructions which should be done, e.g.
|
||||
`java
|
||||
1. Define an ``Intent`` containing the actual PGP instructions which should be done, e.g.
|
||||
```java
|
||||
Intent data = new Intent();
|
||||
data.setAction(OpenPgpApi.ACTION_ENCRYPT);
|
||||
data.putExtra(OpenPgpApi.EXTRA_USER_IDS, new String[]{"dominik@dominikschuermann.de"});
|
||||
data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
|
||||
`
|
||||
Define an `InputStream` currently holding the plaintext, and an `OutputStream` where you want the ciphertext to be written by OpenKeychain's remote service:
|
||||
`java
|
||||
```
|
||||
Define an ``InputStream`` currently holding the plaintext, and an ``OutputStream`` where you want the ciphertext to be written by OpenKeychain's remote service:
|
||||
```java
|
||||
InputStream is = new ByteArrayInputStream("Hello world!".getBytes("UTF-8"));
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
`
|
||||
Using a helper class from the library, `is` and `os` are passed via `ParcelFileDescriptors` as `input` and `output` together with `Intent data`, as depicted in the sequence diagram, from the client to the remote service.
|
||||
```
|
||||
Using a helper class from the library, ``is`` and ``os`` are passed via ``ParcelFileDescriptors`` as ``input`` and ``output`` together with ``Intent data``, as depicted in the sequence diagram, from the client to the remote service.
|
||||
Programmatically, this can be done with:
|
||||
`java
|
||||
```java
|
||||
OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
|
||||
Intent result = api.executeApi(data, is, os);
|
||||
`
|
||||
```
|
||||
|
||||
2. The PGP operation is executed by OpenKeychain and the produced ciphertext is written into `os` which can then be accessed by the client app.
|
||||
2. The PGP operation is executed by OpenKeychain and the produced ciphertext is written into ``os`` which can then be accessed by the client app.
|
||||
|
||||
3. A result Intent is returned containing one of these result codes:
|
||||
* ``OpenPgpApi.RESULT_CODE_ERROR``
|
||||
* ``OpenPgpApi.RESULT_CODE_SUCCESS``
|
||||
* ``OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED``
|
||||
|
||||
- `OpenPgpApi.RESULT_CODE_ERROR`
|
||||
- `OpenPgpApi.RESULT_CODE_SUCCESS`
|
||||
- `OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED`
|
||||
|
||||
If `RESULT_CODE_USER_INTERACTION_REQUIRED` is returned, an additional `PendingIntent` is returned to the client, which must be used to get user input required to process the request.
|
||||
A `PendingIntent` is executed with `startIntentSenderForResult`, which starts an activity, originally belonging to OpenKeychain, on the [task stack](http://developer.android.com/guide/components/tasks-and-back-stack.html) of the client.
|
||||
Only if `RESULT_CODE_SUCCESS` is returned, `os` actually contains data.
|
||||
If ``RESULT_CODE_USER_INTERACTION_REQUIRED`` is returned, an additional ``PendingIntent`` is returned to the client, which must be used to get user input required to process the request.
|
||||
A ``PendingIntent`` is executed with ``startIntentSenderForResult``, which starts an activity, originally belonging to OpenKeychain, on the [task stack](http://developer.android.com/guide/components/tasks-and-back-stack.html) of the client.
|
||||
Only if ``RESULT_CODE_SUCCESS`` is returned, ``os`` actually contains data.
|
||||
A nearly complete example looks like this:
|
||||
|
||||
```java
|
||||
switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
|
||||
case OpenPgpApi.RESULT_CODE_SUCCESS: {
|
||||
|
@ -143,10 +135,10 @@ Intent result = api.executeApi(data, is, os);
|
|||
}
|
||||
```
|
||||
|
||||
4. Results from a `PendingIntent` are returned in `onActivityResult` of the activity, which executed `startIntentSenderForResult`.
|
||||
The returned `Intent data` in `onActivityResult` contains the original PGP operation definition and new values acquired from the user interaction.
|
||||
Thus, you can now execute the `Intent` again, like done in step 1.
|
||||
This time it should return with `RESULT_CODE_SUCCESS` because all required information has been obtained by the previous user interaction stored in this `Intent`.
|
||||
4. Results from a ``PendingIntent`` are returned in ``onActivityResult`` of the activity, which executed ``startIntentSenderForResult``.
|
||||
The returned ``Intent data`` in ``onActivityResult`` contains the original PGP operation definition and new values acquired from the user interaction.
|
||||
Thus, you can now execute the ``Intent`` again, like done in step 1.
|
||||
This time it should return with ``RESULT_CODE_SUCCESS`` because all required information has been obtained by the previous user interaction stored in this ``Intent``.
|
||||
```java
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
[...]
|
||||
|
@ -162,17 +154,16 @@ Intent result = api.executeApi(data, is, os);
|
|||
}
|
||||
```
|
||||
|
||||
|
||||
### Tipps
|
||||
* ``api.executeApi(data, is, os);`` is a blocking call. If you want a convenient asynchronous call, use ``api.executeApiAsync(data, is, os, new MyCallback([... ]));``, where ``MyCallback`` is an private class implementing ``OpenPgpApi.IOpenPgpCallback``.
|
||||
See [``OpenPgpApiActivity.java``](https://github.com/open-keychain/openpgp-api/blob/master/example/src/main/java/org/openintents/openpgp/example/OpenPgpApiActivity.java) for an example.
|
||||
* Using
|
||||
|
||||
- `api.executeApi(data, is, os);` is a blocking call. If you want a convenient asynchronous call, use `api.executeApiAsync(data, is, os, new MyCallback([... ]));`, where `MyCallback` is an private class implementing `OpenPgpApi.IOpenPgpCallback`.
|
||||
See [`OpenPgpApiActivity.java`](https://github.com/open-keychain/openpgp-api/blob/master/example/src/main/java/org/openintents/openpgp/example/OpenPgpApiActivity.java) for an example.
|
||||
- Using
|
||||
```java
|
||||
mServiceConnection = new OpenPgpServiceConnection(this, "org.sufficientlysecure.keychain");
|
||||
```
|
||||
connects to OpenKeychain directly.
|
||||
If you want to let the user choose between OpenPGP providers, you can implement the [``OpenPgpAppPreference.java``](https://github.com/open-keychain/openpgp-api/tree/master/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpAppPreference.java) like done in the example app.
|
||||
|
||||
```java
|
||||
mServiceConnection = new OpenPgpServiceConnection(this, "org.sufficientlysecure.keychain");
|
||||
```
|
||||
|
||||
connects to OpenKeychain directly.
|
||||
If you want to let the user choose between OpenPGP providers, you can implement the [`OpenPgpAppPreference.java`](https://github.com/open-keychain/openpgp-api/tree/master/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpAppPreference.java) like done in the example app.
|
||||
|
||||
- To enable installing a debug and release version at the same time, the `debug` build of OpenKeychain uses `org.sufficientlysecure.keychain.debug` as a package name. Make sure you connect to the right one during development!
|
||||
* To enable installing a debug and release version at the same time, the `debug` build of OpenKeychain uses `org.sufficientlysecure.keychain.debug` as a package name. Make sure you connect to the right one during development!
|
||||
|
|
Loading…
Reference in a new issue