Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring bindings #234

Merged
merged 24 commits into from
Jul 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c21f137
chore: Refactoring bindings
maciejhirsz Apr 2, 2019
1f9956a
fix: Rust errors for iOS builds
maciejhirsz Apr 2, 2019
2fc039e
chore: Cleanup
maciejhirsz Apr 2, 2019
f8e76c6
feat: QR codes generated in Rust :)
maciejhirsz Apr 11, 2019
874a38b
Merge branch 'master' into mh-clean-up-bindings
maciejhirsz May 8, 2019
558c85f
chore: Make FFI between iOS and Android equivalent
maciejhirsz May 8, 2019
d383ca7
feat: Error handling in iOS
maciejhirsz May 8, 2019
fd75c0e
feat: Add bip39 boolean when recovering from a phrase
maciejhirsz May 29, 2019
0e41776
fix(): valid if bip39 and show seed type
Tbaut May 30, 2019
97d403f
fix(): phrasing
Tbaut May 30, 2019
2f6413a
question mark
Tbaut Jun 2, 2019
46bf9d4
remove "seed"
Tbaut Jun 4, 2019
3f5ac8f
remove quotes
Tbaut Jun 4, 2019
3069957
Merge pull request #239 from paritytech/tbaut-seed-type-and-validation
Tbaut Jun 5, 2019
0ae6982
chore: Merge branch 'master' of github.com:paritytech/parity-signer i…
maciejhirsz Jun 17, 2019
8d11f04
chore: Restore EthkeyBridge changes
maciejhirsz Jun 17, 2019
e6fc2ab
chore: Remove added code to String.swift
maciejhirsz Jun 18, 2019
e8554a5
fix: Update blockies, fix tests
maciejhirsz Jun 18, 2019
6cd6063
chore: Handle rust errors for blockies
maciejhirsz Jun 18, 2019
5892187
chore: use c_uint, update deps
maciejhirsz Jun 18, 2019
5e5fd7f
fix: Attempt to fix the error on randomPhrase in iOS
maciejhirsz Jun 25, 2019
366c814
fix: Hopefully fix the String allocation issues
maciejhirsz Jun 25, 2019
75d9174
fix: Expose EthkeyBridge.qrCode to the iOS build
maciejhirsz Jun 28, 2019
b2ba0cf
fix: Propagate errors properly
maciejhirsz Jul 5, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions android/app/src/main/java/io/parity/signer/EthkeyBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ public void brainWalletAddress(String seed, Promise promise) {
promise.resolve(ethkeyBrainwalletAddress(seed));
}

@ReactMethod
public void brainWalletBIP39Address(String seed, Promise promise) {
try {
promise.resolve(ethkeyBrainwalletBIP39Address(seed));
} catch (Exception e) {
promise.reject("invalid phrase", null, null);
}
}

@ReactMethod
public void brainWalletSign(String seed, String message, Promise promise) {
promise.resolve(ethkeyBrainwalletSign(seed, message));
Expand Down Expand Up @@ -93,7 +102,17 @@ public void decryptData(String data, String password, Promise promise) {
}
}

@ReactMethod
public void qrCode(String data, Promise promise) {
try {
promise.resolve(ethkeyQrCode(data));
} catch (Exception e) {
promise.reject("failed to create QR code", null, null);
}
}

private static native String ethkeyBrainwalletAddress(String seed);
private static native String ethkeyBrainwalletBIP39Address(String seed);
private static native String ethkeyBrainwalletSign(String seed, String message);
private static native String ethkeyRlpItem(String data, int position);
private static native String ethkeyKeccak(String data);
Expand All @@ -102,4 +121,5 @@ public void decryptData(String data, String password, Promise promise) {
private static native String ethkeyRandomPhrase();
private static native String ethkeyEncryptData(String data, String password);
private static native String ethkeyDecryptData(String data, String password);
private static native String ethkeyQrCode(String data);
}
133 changes: 0 additions & 133 deletions ios/EthkeyBridge.1.swift

This file was deleted.

3 changes: 2 additions & 1 deletion ios/NativeSigner/EthkeyBridge.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ @interface RCT_EXTERN_MODULE(EthkeyBridge, NSObject)
RCT_EXTERN_METHOD(keccak:(NSString*)data resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(ethSign:(NSString*)data resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(blockiesIcon:(NSString*)seed resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(randomPhrase:(NSUInteger)words resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(randomPhrase:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(encryptData:(NSString*)data password:(NSString*)password resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(decryptData:(NSString*)data password:(NSString*)password resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(qrCode:(NSString*)data resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)

@end
60 changes: 40 additions & 20 deletions ios/NativeSigner/EthkeyBridge.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,38 @@ import Foundation
@objc(EthkeyBridge)
class EthkeyBridge: NSObject {

open static func requiresMainQueueSetup() -> Bool {
public static func requiresMainQueueSetup() -> Bool {
return true;
}

@objc func brainWalletAddress(_ seed: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var seed_ptr = seed.asPtr()
let keypair_ptr = ethkey_keypair_brainwallet(&seed_ptr)
let address_rust_str = ethkey_keypair_address(keypair_ptr)
let address_rust_str = ethkey_brainwallet_address(&error, &seed_ptr)
let address_rust_str_ptr = rust_string_ptr(address_rust_str)
let address = String.fromStringPtr(ptr: address_rust_str_ptr!.pointee)
rust_string_ptr_destroy(address_rust_str_ptr)
rust_string_destroy(address_rust_str)
ethkey_keypair_destroy(keypair_ptr)
resolve(address)
}

@objc func brainWalletSign(_ seed: String, message: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
print(seed, " + ", message)
var seed_ptr = seed.asPtr()
var message_ptr = message.asPtr()
let keypair_ptr = ethkey_keypair_brainwallet(&seed_ptr)
let signature_rust_str = ethkey_keypair_sign(keypair_ptr, &message_ptr)
let signature_rust_str = ethkey_brainwallet_sign(&error, &seed_ptr, &message_ptr)
let signature_rust_str_ptr = rust_string_ptr(signature_rust_str)
let signature = String.fromStringPtr(ptr: signature_rust_str_ptr!.pointee)
rust_string_ptr_destroy(signature_rust_str_ptr)
rust_string_destroy(signature_rust_str)
ethkey_keypair_destroy(keypair_ptr)
resolve(signature)
}

@objc func rlpItem(_ rlp: String, position: UInt32, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var rlp_ptr = rlp.asPtr()
var error: UInt32 = 0
let item_rust_str = rlp_item(&rlp_ptr, position, &error)
var rlp_ptr = rlp.asPtr()
let item_rust_str = rlp_item(&error, &rlp_ptr, position)
let item_rust_str_ptr = rust_string_ptr(item_rust_str)
let item = String.fromStringPtr(ptr: item_rust_str_ptr!.pointee)
rust_string_ptr_destroy(item_rust_str_ptr)
Expand All @@ -57,8 +55,9 @@ class EthkeyBridge: NSObject {
}

@objc func keccak(_ data: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var data_ptr = data.asPtr()
let hash_rust_str = keccak256(&data_ptr)
let hash_rust_str = keccak256(&error, &data_ptr)
let hash_rust_str_ptr = rust_string_ptr(hash_rust_str)
let hash = String.fromStringPtr(ptr: hash_rust_str_ptr!.pointee)
rust_string_ptr_destroy(hash_rust_str_ptr)
Expand All @@ -67,8 +66,9 @@ class EthkeyBridge: NSObject {
}

@objc func ethSign(_ data: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var data_ptr = data.asPtr()
let hash_rust_str = eth_sign(&data_ptr)
let hash_rust_str = eth_sign(&error, &data_ptr)
let hash_rust_str_ptr = rust_string_ptr(hash_rust_str)
let hash = String.fromStringPtr(ptr: hash_rust_str_ptr!.pointee)
rust_string_ptr_destroy(hash_rust_str_ptr)
Expand All @@ -77,17 +77,23 @@ class EthkeyBridge: NSObject {
}

@objc func blockiesIcon(_ seed: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var seed_ptr = seed.asPtr()
let icon_rust_str = blockies_icon(&seed_ptr)
let icon_rust_str = blockies_icon(&error, &seed_ptr)
let icon_rust_str_ptr = rust_string_ptr(icon_rust_str)
let icon = String.fromStringPtr(ptr: icon_rust_str_ptr!.pointee)
rust_string_ptr_destroy(icon_rust_str_ptr)
rust_string_destroy(icon_rust_str)
resolve(icon)
if error == 0 {
resolve(icon)
} else {
reject("Failed to generate blockies", nil, nil)
}
}

@objc func randomPhrase(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
let words_rust_str = random_phrase()
@objc func randomPhrase(_ resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
let words_rust_str = random_phrase(&error)
let words_rust_str_ptr = rust_string_ptr(words_rust_str)
let words = String.fromStringPtr(ptr: words_rust_str_ptr!.pointee)
rust_string_ptr_destroy(words_rust_str_ptr)
Expand All @@ -96,9 +102,10 @@ class EthkeyBridge: NSObject {
}

@objc func encryptData(_ data: String, password: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var data_ptr = data.asPtr()
var password_ptr = password.asPtr()
let encrypted_data_rust_str = encrypt_data(&data_ptr, &password_ptr)
let encrypted_data_rust_str = encrypt_data(&error, &data_ptr, &password_ptr)
let encrypted_data_rust_str_ptr = rust_string_ptr(encrypted_data_rust_str)
let encrypted_data = String.fromStringPtr(ptr: encrypted_data_rust_str_ptr!.pointee)
rust_string_ptr_destroy(encrypted_data_rust_str_ptr)
Expand All @@ -107,20 +114,33 @@ class EthkeyBridge: NSObject {
}

@objc func decryptData(_ data: String, password: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var data_ptr = data.asPtr()
var password_ptr = password.asPtr()
var error: UInt32 = 0
let decrypted_data_rust_str = decrypt_data(&data_ptr, &password_ptr, &error)
let decrypted_data_rust_str = decrypt_data(&error, &data_ptr, &password_ptr)
let decrypted_data_rust_str_ptr = rust_string_ptr(decrypted_data_rust_str)
let decrypted_data = String.fromStringPtr(ptr: decrypted_data_rust_str_ptr!.pointee)
rust_string_ptr_destroy(decrypted_data_rust_str_ptr)
rust_string_destroy(decrypted_data_rust_str)
if error == 0 {
resolve(decrypted_data)
} else if error == 1{
reject("invalid data", nil, nil)
} else {
reject("invalid password", nil, nil)
}
}

@objc func qrCode(_ data: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
var error: UInt32 = 0
var data_ptr = data.asPtr()
let icon_rust_str = qrcode(&error, &data_ptr)
let icon_rust_str_ptr = rust_string_ptr(icon_rust_str)
let icon = String.fromStringPtr(ptr: icon_rust_str_ptr!.pointee)
rust_string_ptr_destroy(icon_rust_str_ptr)
rust_string_destroy(icon_rust_str)
if error == 0 {
resolve(icon)
} else {
reject("Failed to generate blockies", nil, nil)
}
}
}
2 changes: 1 addition & 1 deletion ios/NativeSigner/String.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ extension String {
let data = NSData(bytes: UnsafeRawPointer(ptr.ptr), length: ptr.len)
return String(data: data as Data, encoding: String.Encoding.utf8)!
}

func asPtr() -> rust_string_ptr {
let data = self.data(using: String.Encoding.utf8, allowLossyConversion: false)!
return rust_string_ptr(ptr: (data as NSData).bytes.bindMemory(to: UInt8.self, capacity: data.count), len: data.count)
Expand Down
Loading