Skip to content
This repository has been archived by the owner on Feb 1, 2024. It is now read-only.

Commit

Permalink
feat: add prover/recipient revocation for iOS (#17)
Browse files Browse the repository at this point in the history
Signed-off-by: James Ebert <[email protected]>
Co-authored-by: Patrick Kenyon <[email protected]>
  • Loading branch information
JamesKEbert and TheTreek authored Aug 18, 2021
1 parent e32e060 commit ee96631
Show file tree
Hide file tree
Showing 5 changed files with 184 additions and 74 deletions.
97 changes: 49 additions & 48 deletions android/src/main/java/com/reactlibrary/IndySdkModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -564,9 +564,9 @@ public void parseGetCredDefResponse(String getCredDefResponse, Promise promise)
}

@ReactMethod
public void buildGetAttribRequest(String submitterDid, String targetDid, String raw, String hash, String enc, Promise promise) {
public void buildGetRevocRegDefRequest(String submitterDid, String revocRegDefId, Promise promise) {
try {
String request = Ledger.buildGetAttribRequest(submitterDid, targetDid, raw, hash, enc).get();
String request = Ledger.buildGetRevocRegDefRequest(submitterDid, revocRegDefId).get();
promise.resolve(request);
} catch (Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
Expand All @@ -575,42 +575,55 @@ public void buildGetAttribRequest(String submitterDid, String targetDid, String
}

@ReactMethod
public void buildGetNymRequest(String submitterDid, String targetDid, Promise promise) {
try {
String request = Ledger.buildGetNymRequest(submitterDid, targetDid).get();
promise.resolve(request);
} catch (Exception e) {
public void parseGetRevocRegDefResponse(String response, Promise promise) {
try{
LedgerResults.ParseResponseResult ledgerResult = Ledger.parseGetRevocRegDefResponse(response).get();
WritableArray result = new WritableNativeArray();
result.pushString(ledgerResult.getId());
result.pushString(ledgerResult.getObjectJson());
promise.resolve(result);
} catch(Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
promise.reject(rejectResponse.getCode(), rejectResponse.toJson(), e);
}
}

@ReactMethod
public void parseGetNymResponse(String response, Promise promise) {
try {
String parsedResponse = Ledger.parseGetNymResponse(response).get();
promise.resolve(parsedResponse);
} catch (Exception e) {
public void buildGetRevocRegDeltaRequest(
String submitterDid,
String revocRegDefId,
int from,
int to,
Promise promise
){
try{
String request = Ledger.buildGetRevocRegDeltaRequest(submitterDid,revocRegDefId,from,to).get();
promise.resolve(request);
}catch(Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
promise.reject(rejectResponse.getCode(), rejectResponse.toJson(), e);
}
}

@ReactMethod
public void appendTxnAuthorAgreementAcceptanceToRequest(String requestJson, String text, String version, String taaDigest, String mechanism, int time, Promise promise) {
try {
String request = Ledger.appendTxnAuthorAgreementAcceptanceToRequest(requestJson, text, version, taaDigest, mechanism, time).get();
promise.resolve(request);
} catch (Exception e) {
public void parseGetRevocRegDeltaResponse(String getRevocRegDeltaResponse, Promise promise){
try{
LedgerResults.ParseRegistryResponseResult ledgerResult = Ledger.parseGetRevocRegDeltaResponse(getRevocRegDeltaResponse).get();
WritableArray result = new WritableNativeArray();
result.pushString(ledgerResult.getId());
result.pushString(ledgerResult.getObjectJson());
result.pushInt((int) ledgerResult.getTimestamp());
promise.resolve(result);
}catch(Exception e){
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
promise.reject(rejectResponse.getCode(), rejectResponse.toJson(), e);
}
}

@ReactMethod
public void buildGetTxnAuthorAgreementRequest(String submitterDid, String data, Promise promise) {
public void buildGetAttribRequest(String submitterDid, String targetDid, String raw, String hash, String enc, Promise promise) {
try {
String request = Ledger.buildGetTxnAuthorAgreementRequest(submitterDid, data).get();
String request = Ledger.buildGetAttribRequest(submitterDid, targetDid, raw, hash, enc).get();
promise.resolve(request);
} catch (Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
Expand All @@ -619,9 +632,9 @@ public void buildGetTxnAuthorAgreementRequest(String submitterDid, String data,
}

@ReactMethod
public void buildGetRevocRegDefRequest(String submitterDid, String revocRegDefId, Promise promise) {
public void buildGetNymRequest(String submitterDid, String targetDid, Promise promise) {
try {
String request = Ledger.buildGetRevocRegDefRequest(submitterDid, revocRegDefId).get();
String request = Ledger.buildGetNymRequest(submitterDid, targetDid).get();
promise.resolve(request);
} catch (Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
Expand All @@ -630,50 +643,38 @@ public void buildGetRevocRegDefRequest(String submitterDid, String revocRegDefId
}

@ReactMethod
public void parseGetRevocRegDefResponse(String response, Promise promise) {
try{
LedgerResults.ParseResponseResult ledgerResult = Ledger.parseGetRevocRegDefResponse(response).get();
WritableArray result = new WritableNativeArray();
result.pushString(ledgerResult.getId());
result.pushString(ledgerResult.getObjectJson());
promise.resolve(result);
} catch(Exception e) {
public void parseGetNymResponse(String response, Promise promise) {
try {
String parsedResponse = Ledger.parseGetNymResponse(response).get();
promise.resolve(parsedResponse);
} catch (Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
promise.reject(rejectResponse.getCode(), rejectResponse.toJson(), e);
}
}

@ReactMethod
public void buildGetRevocRegDeltaRequest(
String submitterDid,
String revocRegDefId,
int from,
int to,
Promise promise
){
try{
String request = Ledger.buildGetRevocRegDeltaRequest(submitterDid,revocRegDefId,from,to).get();
public void appendTxnAuthorAgreementAcceptanceToRequest(String requestJson, String text, String version, String taaDigest, String mechanism, int time, Promise promise) {
try {
String request = Ledger.appendTxnAuthorAgreementAcceptanceToRequest(requestJson, text, version, taaDigest, mechanism, time).get();
promise.resolve(request);
}catch(Exception e) {
} catch (Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
promise.reject(rejectResponse.getCode(), rejectResponse.toJson(), e);
}
}

@ReactMethod
public void parseGetRevocRegDeltaResponse(String getRevocRegDeltaResponse, Promise promise){
try{
LedgerResults.ParseRegistryResponseResult ledgerResult = Ledger.parseGetRevocRegDeltaResponse(getRevocRegDeltaResponse).get();
WritableArray result = new WritableNativeArray();
result.pushString(ledgerResult.getId());
result.pushString(ledgerResult.getObjectJson());
result.pushInt((int) ledgerResult.getTimestamp());
promise.resolve(result);
}catch(Exception e){
public void buildGetTxnAuthorAgreementRequest(String submitterDid, String data, Promise promise) {
try {
String request = Ledger.buildGetTxnAuthorAgreementRequest(submitterDid, data).get();
promise.resolve(request);
} catch (Exception e) {
IndySdkRejectResponse rejectResponse = new IndySdkRejectResponse(e);
promise.reject(rejectResponse.getCode(), rejectResponse.toJson(), e);
}
}


// anoncreds

Expand Down
31 changes: 31 additions & 0 deletions ios/IndySdk.m
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,22 @@ @interface RCT_EXTERN_MODULE(IndySdk, NSObject)
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(buildGetRevocRegDefRequest: (NSString *)submitterDid id:(NSString *)id
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(parseGetRevocRegDefResponse: (NSString *)getCredDefResponse
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(buildGetRevocRegDeltaRequest: (NSString *)submitterDid id:(NSString *)id from:(nonnull NSNumber *)from to:(nonnull NSNumber *)to
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(parseGetRevocRegDeltaResponse: (NSString *)getRevocRegDeltaResponse
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(buildGetAttribRequest: (nullable NSString *)submitterDid
targetDid:(NSString *)targetDid
raw:(nullable NSString *)raw
Expand Down Expand Up @@ -267,6 +283,14 @@ @interface RCT_EXTERN_MODULE(IndySdk, NSObject)
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(createRevocationState: (nonnull NSNumber *)blobStorageReaderHandle
revRegDef:(NSString *)revRegDef
revRegDelta:(NSString *)revRegDelta
timestamp:(nonnull NSNumber *)timestamp
credRevId:(NSString *)credRevId
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)

// non_secrets
RCT_EXTERN_METHOD(addWalletRecord: (nonnull NSNumber *)wh
type: (NSString *)type
Expand Down Expand Up @@ -344,4 +368,11 @@ @interface RCT_EXTERN_MODULE(IndySdk, NSObject)
rejecter:(RCTPromiseRejectBlock)reject
)

// Blob Storage
RCT_EXTERN_METHOD(openBlobStorageReader: (NSString *)type
config: (NSString *)config
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

@end
83 changes: 83 additions & 0 deletions ios/IndySdk.swift
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,40 @@ class IndySdk : NSObject {
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyLedger.parseGetCredDefResponse(getCredDefResponse, completion: completionWithStringPair(resolve, reject))
}

@objc func buildGetRevocRegDefRequest(_ submitterDid: String, id: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyLedger.buildGetRevocRegDefRequest(
withSubmitterDid: !submitterDid.isEmpty ? submitterDid : nil,
id: id,
completion: completionWithString(resolve, reject)
)
}

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

@objc func buildGetRevocRegDeltaRequest(_ submitterDid: String, id: String, from: NSNumber, to: NSNumber,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyLedger.buildGetRevocRegDeltaRequest(
withSubmitterDid: !submitterDid.isEmpty ? submitterDid : nil,
revocRegDefId: id,
from: from,
to: to,
completion: completionWithString(resolve, reject)
)
}

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

@objc func buildGetAttribRequest(_ submitterDid: String?,
targetDid: String,
Expand Down Expand Up @@ -440,6 +474,19 @@ class IndySdk : NSObject {
)
}

@objc func createRevocationState(_ blobStorageReaderHandle: NSNumber, revRegDef: String, revRegDelta: String, timestamp: NSNumber, credRevId: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyAnoncreds.createRevocationState(
forCredRevID: credRevId,
timestamp: timestamp,
revRegDefJSON: revRegDef,
revRegDeltaJSON: revRegDelta,
blobStorageReaderHandle: blobStorageReaderHandle,
completion: completionWithString(resolve, reject)
)
}

// non_secret

@objc func addWalletRecord(_ wh: NSNumber, type: String, id: String, value: String, tags: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
Expand Down Expand Up @@ -492,6 +539,14 @@ class IndySdk : NSObject {
let shNumber:Int32 = Int32(truncating: sh)
IndyNonSecrets.closeSearch(withHandle: shNumber, completion: completion(resolve, reject))
}


// Blob Storage

@objc func openBlobStorageReader(_ type: String, config: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
IndyBlobStorage.openReader(withType: type, config: config, completion: completionWithNumber(resolve, reject))
}


// completion functions

Expand Down Expand Up @@ -610,6 +665,20 @@ class IndySdk : NSObject {

return completion
}

func completionWithStringPairAndNumber(_ resolve: @escaping RCTPromiseResolveBlock,
_ reject: @escaping RCTPromiseRejectBlock) -> (_ error: Error?, _ string1: String?, _ string2: String?, _ number1: NSNumber?) -> Void {
func completion(error: Error?, string1: String?, string2: String?, number1: NSNumber?) -> Void {
let code = (error! as NSError).code
if code != 0 {
reject("\(code)", createJsonError(error!, code), error)
} else {
resolve([string1, string2, number1])
}
}

return completion
}

func completionWithString(_ resolve: @escaping RCTPromiseResolveBlock,
_ reject: @escaping RCTPromiseRejectBlock) -> (_ error: Error?, _ result: String?) -> Void {
Expand All @@ -625,6 +694,20 @@ class IndySdk : NSObject {
return completion
}

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

return completion
}

func completionWithBool(_ resolve: @escaping RCTPromiseResolveBlock,
_ reject: @escaping RCTPromiseRejectBlock) -> (_ error: Error?, _ result: Bool) -> Void {
func completion(error: Error?, result: Bool) -> Void {
Expand Down
Loading

0 comments on commit ee96631

Please sign in to comment.