You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
9.2 KiB
Java

package com.xypower.secapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.dowse.devicesdk.DsDeviceSdk;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CertActivity extends AppCompatActivity {
private static String TAG = "CERTTAG";
private final static String ACTION_IMP_PUBKEY = "imp_pubkey";
private final static String ACTION_EXP_PUBKEY = "exp_pubkey";
private final static String ACTION_EXP_PRIKEY = "exp_prikey";
private final static String ACTION_GEN_KEYS = "gen_keys";
private final static String ACTION_CERT_REQ = "cert_req";
private static long AUTO_CLOSE_TIMEOUT = 200;
private Handler mHandler = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cert);
int res = 0;
DsDeviceSdk dsSdk = DsDeviceSdk.getInstance();
dsSdk.init();
res = dsSdk.mcuInit();
res = dsSdk.mcuOpen();
boolean bres = dsSdk.mcuPowerOnCPR();
// String v = dsSdk.nrsecGetVersion();
// res = dsSdk.nrsecInit();
// res = dsSdk.nrsecOpen();
String version = MicroPhotoService.querySecVersion();
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(R.string.nrsec_version + version);
ActionBar actionBar = getSupportActionBar();
String text = getResources().getString(R.string.nrsec_version);
actionBar.setTitle(actionBar.getTitle().toString() + " " + text + " " + version);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt = new Date();
text = format.format(dt);
((TextView) findViewById(R.id.textView)).setText(text);
mHandler = new Handler();
{
Intent intent = getIntent();
if (intent != null) {
handleCommand(intent);
}
}
findViewById(R.id.btnGenKeys).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("index", 1);
intent.putExtra("action", ACTION_GEN_KEYS);
handleCommand(intent);
}
});
findViewById(R.id.btnExpPriKey).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("index", 1);
intent.putExtra("action", ACTION_EXP_PRIKEY);
intent.putExtra("path", "/data/data/com.xypower.secapp/data/pri.key");
handleCommand(intent);
}
});
findViewById(R.id.btnExpPubKey).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("index", 1);
intent.putExtra("action", ACTION_EXP_PUBKEY);
File file = CertActivity.this.getFilesDir();
String absPath = file.getAbsolutePath();
intent.putExtra("path", "/data/data/com.xypower.secapp/data/pub.key");
handleCommand(intent);
}
});
findViewById(R.id.btnGenCertReq).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("index", 1);
intent.putExtra("action", ACTION_CERT_REQ);
intent.putExtra("subject", "C=CN,ST=SH,L=SH,O=SGCC,OU=NC,CN=123456_0006_XY2024ICQ1110006");
File file = CertActivity.this.getFilesDir();
String absPath = file.getAbsolutePath();
intent.putExtra("path", "/data/data/com.xypower.secapp/data/pub.key");
handleCommand(intent);
}
});
//
}
protected static void writeTextFile(String path, String content) {
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(path);
byte[] bytes = content.getBytes();
fileOutputStream.write(bytes);
} catch (Exception ex) {
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (Exception ex) {
}
}
}
}
protected void handleCommand(Intent intent) {
final String action = intent.getStringExtra("action");
if (!TextUtils.isEmpty(action)) {
if (TextUtils.equals(action, ACTION_IMP_PUBKEY)) {
String cert = intent.getStringExtra("cert");
String path = intent.getStringExtra("path");
int index = intent.getIntExtra("index", 1);
if (!TextUtils.isEmpty(cert)) {
// Import
// String cert = intent.getStringExtra("md5");
byte[] content = Base64.decode(cert, Base64.DEFAULT);
if (content != null) {
MicroPhotoService.importPublicKey(index, content);
}
} else if (TextUtils.isEmpty(path)) {
String md5 = intent.getStringExtra("md5");
File file = new File(path);
if (file.exists() && file.isFile()) {
MicroPhotoService.importPublicKeyFile(index, path, md5);
}
}
} else if (TextUtils.equals(action, ACTION_GEN_KEYS)) {
int index = intent.getIntExtra("index", 0);
String path = intent.getStringExtra("path");
ensureDirectoryExisted(path);
boolean res = MicroPhotoService.genKeys(index);
writeTextFile(path, res ? "1" : "0");
} else if (TextUtils.equals(action, ACTION_CERT_REQ)) {
int index = intent.getIntExtra("index", 0);
int type = intent.getIntExtra("type", 0);
String subject = intent.getStringExtra("subject");
String path = intent.getStringExtra("path");
ensureDirectoryExisted(path);
boolean res = MicroPhotoService.genCertRequest(index, type, subject, path);
if (res) {
Log.i(TAG, "Succeeded to generate cert request");
} else {
Log.i(TAG, "Failed to generate cert request");
}
} else if (TextUtils.equals(action, ACTION_EXP_PUBKEY)) {
String path = intent.getStringExtra("path");
File file = new File(path);
File parentPath = file.getParentFile();
if (!parentPath.exists()) {
parentPath.mkdirs();
}
int index = intent.getIntExtra("index", 1);
boolean res = MicroPhotoService.exportPublicKeyFile(index, path);
if (res) {
Log.i(TAG, "Succeeded to export public key");
} else {
Log.i(TAG, "Failed to export public key");
}
} else if (TextUtils.equals(action, ACTION_EXP_PRIKEY)) {
String path = intent.getStringExtra("path");
File file = new File(path);
File parentPath = file.getParentFile();
if (!parentPath.exists()) {
parentPath.mkdirs();
}
int index = intent.getIntExtra("index", 1);
boolean res = MicroPhotoService.exportPrivateFile(index, path);
if (res) {
Log.i(TAG, "Succeeded to export private key");
} else {
Log.i(TAG, "Failed to export private key");
}
}
final Activity activity = this;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// activity.finish();
System.exit(0);
}
}, AUTO_CLOSE_TIMEOUT);
}
}
protected void ensureDirectoryExisted(String fileName) {
File file = new File(fileName);
try {
File parentFile = file.getParentFile();
if (!parentFile.exists()) {
file.getParentFile().mkdirs();
}
} catch (Exception ex) {
}
}
@Override
protected void onDestroy() {
DsDeviceSdk dsSdk = DsDeviceSdk.getInstance();
int res = 0;
boolean bres = dsSdk.mcuPowerOffCPR();
res = dsSdk.mcuClose();
res = dsSdk.mcuUnInit();
dsSdk.release();
super.onDestroy();
}
}