don't depend on APK signing
removes authentication and secure data transfer between ACardEmulator and TCardEmulator
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
@@ -89,7 +89,6 @@
|
|||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.2.1/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.2.1/jars" />
|
||||||
@@ -100,18 +99,11 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.2.1/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.journeyapps/zxing-android-embedded/3.2.0/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.journeyapps/zxing-android-embedded/3.2.0/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||||
@@ -134,6 +126,5 @@
|
|||||||
<orderEntry type="library" exported="" name="animated-vector-drawable-23.2.1" level="project" />
|
<orderEntry type="library" exported="" name="animated-vector-drawable-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="support-vector-drawable-23.2.1" level="project" />
|
<orderEntry type="library" exported="" name="support-vector-drawable-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="appcompat-v7-23.2.1" level="project" />
|
<orderEntry type="library" exported="" name="appcompat-v7-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="android-android-23" level="project" />
|
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
@@ -1,18 +1,6 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
def keystorePropertiesFile = rootProject.file("keystore.properties")
|
|
||||||
def keystoreProperties = new Properties()
|
|
||||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
signingConfigs {
|
|
||||||
config {
|
|
||||||
keyAlias keystoreProperties['keyAlias']
|
|
||||||
keyPassword keystoreProperties['keyPassword']
|
|
||||||
storeFile file(keystoreProperties['storeFile'])
|
|
||||||
storePassword keystoreProperties['storePassword']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
compileSdkVersion 23
|
compileSdkVersion 23
|
||||||
buildToolsVersion "23.0.1"
|
buildToolsVersion "23.0.1"
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
@@ -26,10 +14,6 @@ android {
|
|||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
signingConfig signingConfigs.config
|
|
||||||
}
|
|
||||||
debug {
|
|
||||||
signingConfig signingConfigs.config
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
|||||||
@@ -23,11 +23,7 @@
|
|||||||
|
|
||||||
package com.vsmartcard.acardemulator;
|
package com.vsmartcard.acardemulator;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.content.pm.Signature;
|
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
@@ -43,12 +39,7 @@ import com.samsung.android.sdk.accessory.SAPeerAgent;
|
|||||||
import com.samsung.android.sdk.accessory.SASocket;
|
import com.samsung.android.sdk.accessory.SASocket;
|
||||||
import com.vsmartcard.acardemulator.emulators.EmulatorSingleton;
|
import com.vsmartcard.acardemulator.emulators.EmulatorSingleton;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import javax.security.cert.CertificateException;
|
|
||||||
import javax.security.cert.X509Certificate;
|
|
||||||
|
|
||||||
public class SmartcardProviderService extends SAAgent {
|
public class SmartcardProviderService extends SAAgent {
|
||||||
private static final String TAG = "ACardEmulator";
|
private static final String TAG = "ACardEmulator";
|
||||||
@@ -110,7 +101,8 @@ public class SmartcardProviderService extends SAAgent {
|
|||||||
@Override
|
@Override
|
||||||
protected void onServiceConnectionRequested(SAPeerAgent peerAgent) {
|
protected void onServiceConnectionRequested(SAPeerAgent peerAgent) {
|
||||||
if (peerAgent != null) {
|
if (peerAgent != null) {
|
||||||
authenticatePeerAgent(peerAgent);
|
//TODO: Check for keys and everything
|
||||||
|
acceptServiceConnectionRequest(peerAgent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,36 +118,12 @@ public class SmartcardProviderService extends SAAgent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static byte[] getApplicationCertificate(Context context) {
|
|
||||||
byte[] cert = new byte[0];
|
|
||||||
String packageName = context.getPackageName();
|
|
||||||
try {
|
|
||||||
PackageInfo pkgInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
|
|
||||||
if (pkgInfo != null) {
|
|
||||||
Signature[] sigs = pkgInfo.signatures;
|
|
||||||
if (sigs != null) {
|
|
||||||
ByteArrayInputStream stream = new ByteArrayInputStream(sigs[0].toByteArray());
|
|
||||||
X509Certificate x509cert = X509Certificate.getInstance(stream);
|
|
||||||
cert = x509cert.getPublicKey().getEncoded();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (PackageManager.NameNotFoundException | CertificateException e) {
|
|
||||||
Log.e(TAG, e.getMessage());
|
|
||||||
}
|
|
||||||
return cert;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onAuthenticationResponse(SAPeerAgent peerAgent, SAAuthenticationToken authToken, int error) {
|
protected void onAuthenticationResponse(SAPeerAgent peerAgent, SAAuthenticationToken authToken, int error) {
|
||||||
if (authToken.getAuthenticationType() == SAAuthenticationToken.AUTHENTICATION_TYPE_CERTIFICATE_X509) {
|
/*
|
||||||
byte[] myAppKey = getApplicationCertificate(getApplicationContext());
|
* The authenticatePeerAgent(peerAgent) API may not be working properly depending on the firmware
|
||||||
if (authToken.getKey().length == myAppKey.length) {
|
* version of accessory device. Please refer to another sample application for Security.
|
||||||
if (Arrays.equals(authToken.getKey(), myAppKey)) {
|
*/
|
||||||
acceptServiceConnectionRequest(peerAgent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rejectServiceConnectionRequest(peerAgent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -229,7 +197,7 @@ public class SmartcardProviderService extends SAAgent {
|
|||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
mConnectionHandler.secureSend(ACCESSORY_CHANNEL_ID, sendResponse);
|
mConnectionHandler.send(ACCESSORY_CHANNEL_ID, sendResponse);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,8 +106,8 @@ gboolean send_data(nfc_se_h nfc_handle, char* prefix, unsigned int prefix_len, v
|
|||||||
void *final_message = malloc(prefix_len + message_len);
|
void *final_message = malloc(prefix_len + message_len);
|
||||||
memcpy(final_message, prefix, prefix_len);
|
memcpy(final_message, prefix, prefix_len);
|
||||||
memcpy(final_message + prefix_len * sizeof(char), message, message_len);
|
memcpy(final_message + prefix_len * sizeof(char), message, message_len);
|
||||||
result = sap_socket_send_secure_data(priv_data.socket,
|
result = sap_socket_send_data(priv_data.socket,
|
||||||
ACCESSORY_CHANNELID, prefix_len + message_len, final_message);
|
ACCESSORY_CHANNELID, prefix_len + message_len, final_message);
|
||||||
|
|
||||||
if (result != SAP_RESULT_SUCCESS) {
|
if (result != SAP_RESULT_SUCCESS) {
|
||||||
dlog_print(DLOG_INFO, LOG_TAG, "couldn't send sap message: %d", result);
|
dlog_print(DLOG_INFO, LOG_TAG, "couldn't send sap message: %d", result);
|
||||||
|
|||||||
Reference in New Issue
Block a user