Skip to content
This repository has been archived by the owner on Aug 3, 2021. It is now read-only.

Implement iOS methods #19

Merged
merged 1 commit into from
Oct 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions ios/IndySdk-Bridging-Header.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#import <React/RCTBridgeModule.h>
#import <Indy/Indy.h>
130 changes: 129 additions & 1 deletion ios/IndySdk.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
// limitations under the License.
//


#import <Indy/Indy.h>

#if __has_include(<React/RCTViewManager.h>)
#import <React/RCTViewManager.h>
#elif __has_include("RCTViewManager.h")
Expand All @@ -31,6 +34,7 @@
#import "React/RCTEventDispatcher.h" // Required when used as a Pod in a Swift project
#endif


@interface RCT_EXTERN_MODULE(IndySdk, NSObject)

RCT_EXTERN_METHOD(sampleMethod: (NSString *)stringArgument numberArgument:(nonnull NSNumber *)numberArgument
Expand Down Expand Up @@ -105,12 +109,40 @@ @interface RCT_EXTERN_MODULE(IndySdk, NSObject)
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(cryptoSign: (nonnull NSNumber *)wh
signerVk: (NSString *)signerVk
message: (NSArray *)message
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(cryptoVerify: (NSString *)signerVk
message: (NSArray *)message
signature: (NSArray *)signature
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(packMessage: (nonnull NSNumber *)wh
message: (NSArray *)message
receiverKeys: (NSString *)receiverKeys
senderVk: (NSString *)senderVk
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(unpackMessage: (nonnull NSNumber *)wh
jwe: (NSArray *)jwe
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

// pool
RCT_EXTERN_METHOD(createPoolLedgerConfig: (NSString *)name poolConfig:(NSString *)poolConfig
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(openLedger: (NSString *)name poolConfig:(NSString *)poolConfig
RCT_EXTERN_METHOD(openLedger: (NSString *)name poolConfig:(nullable NSString *)poolConfig
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

Expand Down Expand Up @@ -144,6 +176,25 @@ @interface RCT_EXTERN_MODULE(IndySdk, NSObject)
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(buildGetAttribRequest: (NSString *)submitterDid
targetDid:(NSString *)targetDid
raw:(NSString *)raw
hash:(NSString *)hash
enc:(NSString *)enc
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(buildGetNymRequest: (nullable NSString *)submitterDid
targetDid:(NSString *)targetDid
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(parseGetNymResponse: (NSString *)response
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

// anoncreds

RCT_EXTERN_METHOD(proverCreateMasterSecret: (NSString *)masterSecretId walletHandle:(nonnull NSNumber *)walletHandle
Expand Down Expand Up @@ -188,4 +239,81 @@ @interface RCT_EXTERN_MODULE(IndySdk, NSObject)
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

// non_secrets
RCT_EXTERN_METHOD(addWalletRecord: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
value: (NSString *)value
tags: (NSString *)tags
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(updateWalletRecordValue: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
value: (NSString *)value
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(updateWalletRecordTags: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
tags: (NSString *)tags
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(addWalletRecordTags: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
tags: (NSString *)tags
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(deleteWalletRecordTags: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
tags: (NSString *)tags
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(deleteWalletRecord: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(getWalletRecord: (nonnull NSNumber *)wh
type: (NSString *)type
id: (NSString *)id
options: (NSString *)options
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(openWalletSearch: (nonnull NSNumber *)wh
type: (NSString *)type
query: (NSString *)query
options: (NSString *)options
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(fetchWalletSearchNextRecords: (nonnull NSNumber *)wh
sh: (nonnull NSNumber *)sh
count: (nonnull NSNumber *)count
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(closeWalletSearch: (nonnull NSNumber *)sh
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

@end
128 changes: 124 additions & 4 deletions ios/IndySdk.swift
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
//
// Copyright 2019 ABSA Group Limited
//
//
// 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.
Expand All @@ -15,6 +15,7 @@
//

import Foundation
import Indy

@objc(IndySdk)
class IndySdk : NSObject {
Expand Down Expand Up @@ -165,6 +166,31 @@ class IndySdk : NSObject {
IndyCrypto.authDecrypt(Data(bytes: encryptedMessage), myKey: myKey, walletHandle: whNumber, completion: completionWithTheirKeyAndData(resolve, reject))
}

@objc func cryptoSign(_ wh: NSNumber, signerVk: String, message: Array<UInt8>, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber = Int32(truncating: wh)
let messageData = Data(message)
IndyCrypto.signMessage(messageData, key: signerVk, walletHandle: whNumber, completion: completionWithData(resolve, reject))
}

@objc func cryptoVerify(_ signerVk: String, message: Array<UInt8>, signature: Array<UInt8>, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let messageData = Data(message)
let signatureData = Data(signature)
IndyCrypto.verifySignature(signatureData, forMessage: messageData, key: signerVk, completion: completionWithBool(resolve, reject))
}

@objc func packMessage(_ wh: NSNumber, message: Array<UInt8>, receiverKeys: String, senderVk: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber = Int32(truncating: wh)
let messageData = Data(message)
IndyCrypto.packMessage(messageData, receivers: receiverKeys, sender: senderVk, walletHandle: whNumber, completion: completionWithData(resolve, reject))
}

@objc func unpackMessage(_ wh: NSNumber, jwe: Array<UInt8>, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber = Int32(truncating: wh)
let jweData = Data(jwe)
IndyCrypto.unpackMessage(jweData, walletHandle: whNumber, completion: completionWithData(resolve, reject))
}


// pool

@objc func setProtocolVersion(_ protocolVersion: NSNumber,
Expand All @@ -179,9 +205,10 @@ class IndySdk : NSObject {
IndyPool.createPoolLedgerConfig(withPoolName: name, poolConfig: poolConfig, completion: completion(resolve, reject))
}

@objc func openLedger(_ name: String, poolConfig: String,
@objc func openLedger(_ name: String, poolConfig: String?,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {

IndyPool.openLedger(withName: name, poolConfig: poolConfig, completion: completionWithIndyHandle(resolve, reject))
}

Expand Down Expand Up @@ -233,6 +260,31 @@ class IndySdk : NSObject {
IndyLedger.parseGetCredDefResponse(getCredDefResponse, completion: completionWithStringPair(resolve, reject))
}

@objc func builGetAttribRequest(_ submitterDid: String,
targetDid: String,
raw: String,
hash: String,
enc: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyLedger.buildGetAttribRequest(withSubmitterDid: submitterDid, targetDID: targetDid, raw: raw, hash: hash, enc: enc, completion: completionWithString(resolve, reject))
}

@objc func buildGetNymRequest(_ submitterDid: String?,
targetDid: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyLedger.buildGetNymRequest(withSubmitterDid: submitterDid, targetDID: targetDid, completion: completionWithString(resolve, reject))
}

@objc func parseGetNymResponse(_ response: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyLedger.parseGetNymResponse(response, completion: completionWithString(resolve, reject))
}



// anoncreds

@objc func proverCreateMasterSecret(_ masterSecretId: String, walletHandle: NSNumber,
Expand Down Expand Up @@ -311,6 +363,59 @@ class IndySdk : NSObject {
)
}

// non_secret

@objc func addWalletRecord(_ wh: NSNumber, type: String, id: String, value: String, tags: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.addRecord(inWallet: whNumber, type: type, id: id, value: value, tagsJson: tags, completion: completion(resolve, reject))
}

@objc func updateWalletRecordValue(_ wh: NSNumber, type: String, id: String, value: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.updateRecordValue(inWallet: whNumber, type: type, id: id, value: value, completion: completion(resolve, reject))
}

@objc func updateWalletRecordTags(_ wh: NSNumber, type: String, id: String, tags: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.updateRecordTags(inWallet: whNumber, type: type, id: id, tagsJson: tags, completion: completion(resolve, reject))
}

@objc func addWalletRecordTags(_ wh: NSNumber, type: String, id: String, tags: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.addRecordTags(inWallet: whNumber, type: type, id: id, tagsJson: tags, completion: completion(resolve, reject))
}

@objc func deleteWalletRecordTags(_ wh: NSNumber, type: String, id: String, tags: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.deleteRecordTags(inWallet: whNumber, type: type, id: id, tagsNames: tags, completion: completion(resolve, reject))
}

@objc func deleteWalletRecord(_ wh: NSNumber, type: String, id: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.deleteRecord(inWallet: whNumber, type: type, id: id, completion: completion(resolve, reject))
}

@objc func getWalletRecord(_ wh: NSNumber, type: String, id: String, options: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.getRecordFromWallet(whNumber, type: type, id: id, optionsJson: options, completion: completionWithString(resolve, reject))
}

@objc func openWalletSearch(_ wh: NSNumber, type: String, query: String, options: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
IndyNonSecrets.openSearch(inWallet: whNumber, type: type, queryJson: query, optionsJson: options, completion: completionWithIndyHandle(resolve, reject))
}

@objc func fetchWalletSearchNextRecords(_ wh: NSNumber, sh: NSNumber, count: NSNumber, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let whNumber:Int32 = Int32(truncating: wh)
let shNumber:Int32 = Int32(truncating: sh)
IndyNonSecrets.fetchNextRecords(fromSearch: shNumber, walletHandle: whNumber, count: count, completion: completionWithString(resolve, reject))
}

@objc func closeWalletSearch(_ sh: NSNumber, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
let shNumber:Int32 = Int32(truncating: sh)
IndyNonSecrets.closeSearch(withHandle: shNumber, completion: completion(resolve, reject))
}

// completion functions

func completion(_ resolve: @escaping RCTPromiseResolveBlock,
Expand Down Expand Up @@ -411,6 +516,20 @@ class IndySdk : NSObject {
return completion
}

func completionWithBool(_ resolve: @escaping RCTPromiseResolveBlock,
_ reject: @escaping RCTPromiseRejectBlock) -> (_ error: Error?, _ result: Bool) -> Void {
func completion(error: Error?, result: Bool) -> Void {
let code = (error! as NSError).code
if code != 0 {
reject("\(code)", createJsonError(error!, code), error)
} else {
resolve(result)
}
}

return completion
}

func completionWithStringPair(_ resolve: @escaping RCTPromiseResolveBlock,
_ reject: @escaping RCTPromiseRejectBlock) -> (_ error: Error?, _ string1: String?, _ string2: String?) -> Void {
func completion(error: Error?, string1: String?, string2: String?) -> Void {
Expand Down Expand Up @@ -447,3 +566,4 @@ class IndySdk : NSObject {
}

}

8 changes: 8 additions & 0 deletions ios/IndySdk.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,10 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
Expand All @@ -243,6 +247,10 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
Expand Down
2 changes: 1 addition & 1 deletion rn-indy-sdk.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Pod::Spec.new do |s|
s.license = "Apache-2.0"
# s.license = { :type => "Apache-2.0", :file => "LICENSE.md" }
s.authors = { "Your Name" => "yourname@email.com" }
s.platforms = { :ios => "9.0" }
s.platforms = { :ios => "10.0" }
s.source = { :git => "https://github.com/AbsaOSS/rn-indy-sdk.git", :tag => "#{s.version}" }

s.source_files = "ios/**/*.{h,m,swift}"
Expand Down
Loading