diff options
| author | Dominik Schürmann <dominik@dominikschuermann.de> | 2013-06-17 15:52:09 +0200 | 
|---|---|---|
| committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2013-06-17 15:52:09 +0200 | 
| commit | 41338e115cb015c492dc44f224bc4b4cffe15cd2 (patch) | |
| tree | 1fff22de4e4c13e1f79c9217287f5f719c5d1378 /OpenPGP-Keychain-API-Demo/src/org/openintents/crypto | |
| parent | f6fc6caa1c112ae79ec2fc436a7db2f81a12c6bf (diff) | |
| download | open-keychain-41338e115cb015c492dc44f224bc4b4cffe15cd2.tar.gz open-keychain-41338e115cb015c492dc44f224bc4b4cffe15cd2.tar.bz2 open-keychain-41338e115cb015c492dc44f224bc4b4cffe15cd2.zip | |
Better API demo, open activity from service, discover crypto provider with packagemanager instead of register intent
Diffstat (limited to 'OpenPGP-Keychain-API-Demo/src/org/openintents/crypto')
7 files changed, 389 insertions, 0 deletions
| diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoError.aidl b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoError.aidl new file mode 100644 index 000000000..7b67c8995 --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoError.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +  +package org.openintents.crypto; + +// Declare CryptoError so AIDL can find it and knows that it implements the parcelable protocol. +parcelable CryptoError;
\ No newline at end of file diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoError.java b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoError.java new file mode 100644 index 000000000..265fe2633 --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoError.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openintents.crypto; + +import android.os.Parcel; +import android.os.Parcelable; + +public class CryptoError implements Parcelable { +    int errorId; +    String message; + +    public CryptoError() { +    } + +    public CryptoError(int errorId, String message) { +        this.errorId = errorId; +        this.message = message; +    } + +    public CryptoError(CryptoError b) { +        this.errorId = b.errorId; +        this.message = b.message; +    } + +    public int getErrorId() { +        return errorId; +    } + +    public void setErrorId(int errorId) { +        this.errorId = errorId; +    } + +    public String getMessage() { +        return message; +    } + +    public void setMessage(String message) { +        this.message = message; +    } + +    public int describeContents() { +        return 0; +    } + +    public void writeToParcel(Parcel dest, int flags) { +        dest.writeInt(errorId); +        dest.writeString(message); +    } + +    public static final Creator<CryptoError> CREATOR = new Creator<CryptoError>() { +        public CryptoError createFromParcel(final Parcel source) { +            CryptoError error = new CryptoError(); +            error.errorId = source.readInt(); +            error.message = source.readString(); +            return error; +        } + +        public CryptoError[] newArray(final int size) { +            return new CryptoError[size]; +        } +    }; +} diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoServiceConnection.java b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoServiceConnection.java new file mode 100644 index 000000000..5df32dcf9 --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoServiceConnection.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openintents.crypto; + +import org.openintents.crypto.ICryptoService; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; +import android.util.Log; + +public class CryptoServiceConnection { +    private Context mApplicationContext; + +    private ICryptoService mService; +    private boolean bound; +    private String cryptoProviderPackageName; + +    private static final String TAG = "CryptoConnection"; + +    public CryptoServiceConnection(Context context, String cryptoProviderPackageName) { +        mApplicationContext = context.getApplicationContext(); +        this.cryptoProviderPackageName = cryptoProviderPackageName; +    } + +    public ICryptoService getService() { +        return mService; +    } + +    private ServiceConnection mCryptoServiceConnection = new ServiceConnection() { +        public void onServiceConnected(ComponentName name, IBinder service) { +            mService = ICryptoService.Stub.asInterface(service); +            Log.d(TAG, "connected to service"); +            bound = true; +        } + +        public void onServiceDisconnected(ComponentName name) { +            mService = null; +            Log.d(TAG, "disconnected from service"); +            bound = false; +        } +    }; + +    /** +     * If not already bound, bind! +     *  +     * @return +     */ +    public boolean bindToService() { +        if (mService == null && !bound) { // if not already connected +            try { +                Log.d(TAG, "not bound yet"); + +                Intent serviceIntent = new Intent(); +                serviceIntent.setAction("org.openintents.crypto.ICryptoService"); +                serviceIntent.setPackage(cryptoProviderPackageName); // TODO: test +                mApplicationContext.bindService(serviceIntent, mCryptoServiceConnection, +                        Context.BIND_AUTO_CREATE); + +                return true; +            } catch (Exception e) { +                Log.d(TAG, "Exception", e); +                return false; +            } +        } else { // already connected +            Log.d(TAG, "already bound... "); +            return true; +        } +    } + +    public void unbindFromService() { +        mApplicationContext.unbindService(mCryptoServiceConnection); +    } + +} diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoSignatureResult.aidl b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoSignatureResult.aidl new file mode 100644 index 000000000..1d39bac70 --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoSignatureResult.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +  +package org.openintents.crypto; + +// Declare CryptoSignatureResult so AIDL can find it and knows that it implements the parcelable protocol. +parcelable CryptoSignatureResult;
\ No newline at end of file diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoSignatureResult.java b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoSignatureResult.java new file mode 100644 index 000000000..e193b73b3 --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/CryptoSignatureResult.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openintents.crypto; + +import android.os.Parcel; +import android.os.Parcelable; + +public class CryptoSignatureResult implements Parcelable { +    String signatureUserId; + +    boolean signature; +    boolean signatureSuccess; +    boolean signatureUnknown; + +    public CryptoSignatureResult() { + +    } + +    public CryptoSignatureResult(String signatureUserId, boolean signature, +            boolean signatureSuccess, boolean signatureUnknown) { +        this.signatureUserId = signatureUserId; + +        this.signature = signature; +        this.signatureSuccess = signatureSuccess; +        this.signatureUnknown = signatureUnknown; +    } + +    public CryptoSignatureResult(CryptoSignatureResult b) { +        this.signatureUserId = b.signatureUserId; + +        this.signature = b.signature; +        this.signatureSuccess = b.signatureSuccess; +        this.signatureUnknown = b.signatureUnknown; +    } + +    public int describeContents() { +        return 0; +    } + +    public void writeToParcel(Parcel dest, int flags) { +        dest.writeString(signatureUserId); + +        dest.writeByte((byte) (signature ? 1 : 0)); +        dest.writeByte((byte) (signatureSuccess ? 1 : 0)); +        dest.writeByte((byte) (signatureUnknown ? 1 : 0)); +    } + +    public static final Creator<CryptoSignatureResult> CREATOR = new Creator<CryptoSignatureResult>() { +        public CryptoSignatureResult createFromParcel(final Parcel source) { +            CryptoSignatureResult vr = new CryptoSignatureResult(); +            vr.signatureUserId = source.readString(); +            vr.signature = source.readByte() == 1; +            vr.signatureSuccess = source.readByte() == 1; +            vr.signatureUnknown = source.readByte() == 1; +            return vr; +        } + +        public CryptoSignatureResult[] newArray(final int size) { +            return new CryptoSignatureResult[size]; +        } +    }; +} diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/ICryptoCallback.aidl b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/ICryptoCallback.aidl new file mode 100644 index 000000000..80c741a9e --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/ICryptoCallback.aidl @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openintents.crypto; + +import org.openintents.crypto.CryptoSignatureResult; +import org.openintents.crypto.CryptoError; + +interface ICryptoCallback { + +    oneway void onEncryptSignSuccess(in byte[] outputBytes); +     +    oneway void onDecryptVerifySuccess(in byte[] outputBytes, in CryptoSignatureResult signatureResult); + + +    oneway void onError(in CryptoError error); +}
\ No newline at end of file diff --git a/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/ICryptoService.aidl b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/ICryptoService.aidl new file mode 100644 index 000000000..04c8eb30e --- /dev/null +++ b/OpenPGP-Keychain-API-Demo/src/org/openintents/crypto/ICryptoService.aidl @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +  +package org.openintents.crypto; + +import org.openintents.crypto.ICryptoCallback; + +/** + * All methods are oneway, which means they are asynchronous and non-blocking. + * Results are returned to the callback, which has to be implemented on client side. + */ +interface ICryptoService { +        +    /** +     * Encrypt +     *  +     * @param inputBytes +     *            Byte array you want to encrypt +     * @param encryptionUserIds +     *            User Ids (emails) of recipients +     * @param callback +     *            Callback where to return results +     */ +    oneway void encrypt(in byte[] inputBytes, in String[] encryptionUserIds, in ICryptoCallback callback); +     +    /** +     * Encrypt and sign +     * +     * @param inputBytes +     *            Byte array you want to encrypt +     * @param encryptionUserIds +     *            User Ids (emails) of recipients +     * @param signatureUserId +     *            User Ids (email) of sender +     * @param callback +     *            Callback where to return results +     */ +    oneway void encryptAndSign(in byte[] inputBytes, in String[] encryptionUserIds, String signatureUserId, in ICryptoCallback callback); +     +    /** +     * Sign +     * +     * @param inputBytes +     *            Byte array you want to encrypt +     * @param signatureUserId +     *            User Ids (email) of sender +     * @param callback +     *            Callback where to return results +     */ +    oneway void sign(in byte[] inputBytes, String signatureUserId, in ICryptoCallback callback); +     +    /** +     * Decrypts and verifies given input bytes. If no signature is present this method +     * will only decrypt. +     *  +     * @param inputBytes +     *            Byte array you want to decrypt and verify +     * @param callback +     *            Callback where to return results +     */ +    oneway void decryptAndVerify(in byte[] inputBytes, in ICryptoCallback callback);     +     +}
\ No newline at end of file | 
