Read bin file
This commit is contained in:
parent
ef18863c7c
commit
76355d5142
2 changed files with 92 additions and 7 deletions
|
@ -2,8 +2,12 @@ package cy.agorise.crystalwallet.manager;
|
||||||
|
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
|
||||||
|
import org.bitcoinj.core.ECKey;
|
||||||
|
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.DataInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -14,12 +18,15 @@ import cy.agorise.crystalwallet.dao.CrystalDatabase;
|
||||||
import cy.agorise.crystalwallet.enums.CryptoNet;
|
import cy.agorise.crystalwallet.enums.CryptoNet;
|
||||||
import cy.agorise.crystalwallet.models.AccountSeed;
|
import cy.agorise.crystalwallet.models.AccountSeed;
|
||||||
import cy.agorise.crystalwallet.models.CryptoNetAccount;
|
import cy.agorise.crystalwallet.models.CryptoNetAccount;
|
||||||
|
import cy.agorise.crystalwallet.network.CryptoNetManager;
|
||||||
import cy.agorise.crystalwallet.requestmanagers.CreateBackupRequest;
|
import cy.agorise.crystalwallet.requestmanagers.CreateBackupRequest;
|
||||||
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequest;
|
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequest;
|
||||||
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequestsListener;
|
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequestsListener;
|
||||||
|
import cy.agorise.crystalwallet.requestmanagers.ImportBackupRequest;
|
||||||
|
import cy.agorise.graphenej.Address;
|
||||||
import cy.agorise.graphenej.BrainKey;
|
import cy.agorise.graphenej.BrainKey;
|
||||||
import cy.agorise.graphenej.Chains;
|
|
||||||
import cy.agorise.graphenej.FileBin;
|
import cy.agorise.graphenej.FileBin;
|
||||||
|
import cy.agorise.graphenej.api.GetKeyReferences;
|
||||||
import cy.agorise.graphenej.models.backup.LinkedAccount;
|
import cy.agorise.graphenej.models.backup.LinkedAccount;
|
||||||
import cy.agorise.graphenej.models.backup.PrivateKeyBackup;
|
import cy.agorise.graphenej.models.backup.PrivateKeyBackup;
|
||||||
import cy.agorise.graphenej.models.backup.Wallet;
|
import cy.agorise.graphenej.models.backup.Wallet;
|
||||||
|
@ -38,7 +45,7 @@ public class FileBackupManager implements FileServiceRequestsListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createBackupBinFile(CreateBackupRequest request)
|
private void createBackupBinFile(CreateBackupRequest request)
|
||||||
{
|
{
|
||||||
CrystalDatabase db = CrystalDatabase.getAppDatabase(request.getContext());
|
CrystalDatabase db = CrystalDatabase.getAppDatabase(request.getContext());
|
||||||
List<BitsharesSeedName> seedNames = new ArrayList<>();
|
List<BitsharesSeedName> seedNames = new ArrayList<>();
|
||||||
|
@ -55,7 +62,7 @@ public class FileBackupManager implements FileServiceRequestsListener {
|
||||||
getBinBytesFromBrainkey(seedNames,request); //TODO make funcion for non-bitshares accounts
|
getBinBytesFromBrainkey(seedNames,request); //TODO make funcion for non-bitshares accounts
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getBinBytesFromBrainkey(List<BitsharesSeedName> bitsharesSeedNames, CreateBackupRequest request) {
|
private void getBinBytesFromBrainkey(List<BitsharesSeedName> bitsharesSeedNames, CreateBackupRequest request) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ArrayList<Wallet> wallets = new ArrayList<>();
|
ArrayList<Wallet> wallets = new ArrayList<>();
|
||||||
|
@ -68,12 +75,12 @@ public class FileBackupManager implements FileServiceRequestsListener {
|
||||||
}
|
}
|
||||||
BrainKey brainKey = new BrainKey(bitsharesSeedName.accountSeed, 0); //TODO chain to use BIP39
|
BrainKey brainKey = new BrainKey(bitsharesSeedName.accountSeed, 0); //TODO chain to use BIP39
|
||||||
//TODO adapt CHAIN ID
|
//TODO adapt CHAIN ID
|
||||||
Wallet wallet = new Wallet(bitsharesSeedName.accountName, brainKey.getBrainKey(), brainKey.getSequenceNumber(), Chains.BITSHARES.CHAIN_ID, request.getPassword());
|
Wallet wallet = new Wallet(bitsharesSeedName.accountName, brainKey.getBrainKey(), brainKey.getSequenceNumber(), CryptoNetManager.getChaindId(CryptoNet.BITSHARES), request.getPassword());
|
||||||
wallets.add(wallet);
|
wallets.add(wallet);
|
||||||
PrivateKeyBackup keyBackup = new PrivateKeyBackup(brainKey.getPrivateKey().getPrivKeyBytes(),
|
PrivateKeyBackup keyBackup = new PrivateKeyBackup(brainKey.getPrivateKey().getPrivKeyBytes(),
|
||||||
brainKey.getSequenceNumber(), brainKey.getSequenceNumber(), wallet.getEncryptionKey(request.getPassword()));
|
brainKey.getSequenceNumber(), brainKey.getSequenceNumber(), wallet.getEncryptionKey(request.getPassword()));
|
||||||
keys.add(keyBackup);
|
keys.add(keyBackup);
|
||||||
LinkedAccount linkedAccount = new LinkedAccount(bitsharesSeedName.accountName, Chains.BITSHARES.CHAIN_ID);
|
LinkedAccount linkedAccount = new LinkedAccount(bitsharesSeedName.accountName, CryptoNetManager.getChaindId(CryptoNet.BITSHARES));
|
||||||
accounts.add(linkedAccount);
|
accounts.add(linkedAccount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +98,8 @@ public class FileBackupManager implements FileServiceRequestsListener {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void saveBinContentToFile(List<Integer> content, String fileName, CreateBackupRequest request )
|
|
||||||
|
private void saveBinContentToFile(List<Integer> content, String fileName, CreateBackupRequest request )
|
||||||
{
|
{
|
||||||
|
|
||||||
SimpleDateFormat df = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
|
SimpleDateFormat df = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
|
||||||
|
@ -148,6 +156,55 @@ public class FileBackupManager implements FileServiceRequestsListener {
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void readBinFile(ImportBackupRequest request){
|
||||||
|
try {
|
||||||
|
File file = new File(request.getFilePath());
|
||||||
|
DataInputStream dis = new DataInputStream(new FileInputStream(file));
|
||||||
|
|
||||||
|
ArrayList<Integer> readBytes = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
for ( int i = 0 ; i < file.length() ; i++ )
|
||||||
|
{
|
||||||
|
int val = unsignedToBytes(dis.readByte());
|
||||||
|
readBytes.add(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
dis.close();
|
||||||
|
|
||||||
|
byte[] byteArray = new byte[readBytes.size()];
|
||||||
|
for(int i = 0 ; i < readBytes.size();i++){
|
||||||
|
byteArray[i] = readBytes.get(i).byteValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
WalletBackup walletBackup = FileBin.deserializeWalletBackup(byteArray,request.getPassword());
|
||||||
|
if(walletBackup == null){
|
||||||
|
//TODO handle error
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<BitsharesSeedName> seedNames = new ArrayList<>();
|
||||||
|
|
||||||
|
for(int i = 0; i < walletBackup.getKeyCount(); i++){
|
||||||
|
String brainKey = walletBackup.getWallet(i).decryptBrainKey(request.getPassword());
|
||||||
|
int sequence = walletBackup.getWallet(i).getBrainkeySequence();
|
||||||
|
String accountName = walletBackup.getWallet(i).getPrivateName();
|
||||||
|
seedNames.add(new BitsharesSeedName(accountName,brainKey));
|
||||||
|
}
|
||||||
|
//TODO handle the accounts
|
||||||
|
request.setStatus(ImportBackupRequest.StatusCode.SUCCEEDED);
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
request.setStatus(ImportBackupRequest.StatusCode.FAILED);
|
||||||
|
//TODO handle exception
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int unsignedToBytes(byte b) {
|
||||||
|
return b & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
public class BitsharesSeedName{
|
public class BitsharesSeedName{
|
||||||
String accountName;
|
String accountName;
|
||||||
String accountSeed;
|
String accountSeed;
|
||||||
|
@ -158,4 +215,6 @@ public class FileBackupManager implements FileServiceRequestsListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,33 @@ import android.content.Context;
|
||||||
|
|
||||||
public class ImportBackupRequest extends FileServiceRequest {
|
public class ImportBackupRequest extends FileServiceRequest {
|
||||||
|
|
||||||
public ImportBackupRequest(Context context, String password) {
|
public enum StatusCode{
|
||||||
|
NOT_STARTED,
|
||||||
|
SUCCEEDED,
|
||||||
|
FAILED
|
||||||
|
}
|
||||||
|
|
||||||
|
private String filePath;
|
||||||
|
private StatusCode status;
|
||||||
|
|
||||||
|
public ImportBackupRequest(Context context, String password, String filePath) {
|
||||||
super(context, password);
|
super(context, password);
|
||||||
|
this.filePath = filePath;
|
||||||
|
this.status = StatusCode.NOT_STARTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFilePath() {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(StatusCode statusCode){
|
||||||
|
this.status = statusCode;
|
||||||
|
this.validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validate(){
|
||||||
|
if (this.status != StatusCode.NOT_STARTED){
|
||||||
|
this._fireOnCarryOutEvent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue