Skip to content

Commit 395976a

Browse files
feat(pollux): zkp verification
1 parent 32bdfbd commit 395976a

File tree

20 files changed

+150
-84
lines changed

20 files changed

+150
-84
lines changed

AtalaPrismSDK/Domain/Sources/BBs/Pluto.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ public protocol Pluto {
8181
credential: StorableCredential
8282
) -> AnyPublisher<Void, Error>
8383

84+
/// Stores a link secret in the data store.
85+
/// - Parameter secret: The storable key link secret.
86+
/// - Returns: A publisher that completes when the operation finishes.
8487
func storeLinkSecret(secret: StorableKey) -> AnyPublisher<Void, Error>
8588

8689
/// Returns all stored PRISM DIDs, along with their associated key pair indices and aliases (if any).
@@ -217,5 +220,7 @@ public protocol Pluto {
217220
/// - Returns: A publisher that emits an array of stored verifiable credentials.
218221
func getAllCredentials() -> AnyPublisher<[StorableCredential], Error>
219222

220-
func getLinkSecret() -> AnyPublisher<[StorableKey], Error>
223+
/// Returns the stored link secret.
224+
/// - Returns: A publisher that emits an optonal `StorableKey` that represents the link secret.
225+
func getLinkSecret() -> AnyPublisher<StorableKey?, Error>
221226
}

AtalaPrismSDK/Pluto/Sources/Domain/Providers/LinkSecretProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ import Domain
33
import Foundation
44

55
protocol LinkSecretProvider {
6-
func getAll() -> AnyPublisher<[StorableKey], Error>
6+
func getLinkSecret() -> AnyPublisher<StorableKey?, Error>
77
}

AtalaPrismSDK/Pluto/Sources/PersistentStorage/DAO/CDDIDPrivateKeyDAO+DIDPrivateKeyProvider.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ extension CDDIDPrivateKeyDAO: DIDPrivateKeyProvider {
1010
try $0.map {
1111
(
1212
DID(from: $0),
13-
try $0.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychain) },
13+
try $0.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychainDao.keychain) },
1414
$0.alias
1515
)
1616
}
@@ -24,7 +24,7 @@ extension CDDIDPrivateKeyDAO: DIDPrivateKeyProvider {
2424
try $0.map {
2525
(
2626
DID(from: $0),
27-
try $0.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychain) },
27+
try $0.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychainDao.keychain) },
2828
$0.alias
2929
)
3030
}
@@ -41,7 +41,7 @@ extension CDDIDPrivateKeyDAO: DIDPrivateKeyProvider {
4141
try $0.map {
4242
(
4343
DID(from: $0),
44-
try $0.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychain) },
44+
try $0.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychainDao.keychain) },
4545
$0.alias
4646
)
4747
}
@@ -52,7 +52,7 @@ extension CDDIDPrivateKeyDAO: DIDPrivateKeyProvider {
5252
func getPrivateKeys(did: DID) -> AnyPublisher<[StorableKey]?, Error> {
5353
fetchByIDsPublisher(did.string, context: readContext)
5454
.tryMap {
55-
try $0?.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychain) }
55+
try $0?.keys.map { try $0.parseToStorableKey(keychain: self.keyDao.keychainDao.keychain) }
5656
}
5757
.eraseToAnyPublisher()
5858
}

AtalaPrismSDK/Pluto/Sources/PersistentStorage/DAO/CDDIDPrivateKeyDAO+DIDPrivateKeyStore.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ extension CDDIDPrivateKeyDAO: DIDPrivateKeyStore {
1414
try storeKeychainKey(
1515
did: did,
1616
keychainKey: keychainKey,
17-
service: self.keyDao.keychainService,
17+
service: self.keyDao.keychainDao.keychainService,
1818
account: identifier,
19-
keychain: self.keyDao.keychain
19+
keychain: self.keyDao.keychainDao.keychain
2020
)
2121
let cdkey = CDKeychainKey(entity: CDKeychainKey.entity(), insertInto: context)
2222
cdkey.parseFromStorableKey(
2323
keychainKey,
2424
did: cdobj,
2525
identifier: identifier,
26-
service: self.keyDao.keychainService
26+
service: self.keyDao.keychainDao.keychainService
2727
)
2828
return cdkey as CDKey
2929
default:
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Combine
2+
import CoreData
3+
import Domain
4+
5+
struct CDDatabaseKeyDAO: CoreDataDAO {
6+
typealias CoreDataObject = CDDatabaseKey
7+
let readContext: NSManagedObjectContext
8+
let writeContext: NSManagedObjectContext
9+
let identifierKey: String? = "identifier"
10+
}

AtalaPrismSDK/Pluto/Sources/PersistentStorage/DAO/CDKeyDAO+LinkSecretProvider.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import Foundation
33
import Domain
44

55
extension CDKeyDAO: LinkSecretProvider {
6-
func getAll() -> AnyPublisher<[StorableKey], Error> {
7-
fetchController(context: readContext)
8-
.tryMap { try $0.map { try $0.parseToStorableKey(keychain: self.keychain) } }
6+
func getLinkSecret() -> AnyPublisher<StorableKey?, Error> {
7+
fetchByIDsPublisher("linkSecret", context: readContext)
8+
.tryMap {
9+
try $0?.parseToStorableKey(keychain: self.keychainDao.keychain)
10+
}
911
.eraseToAnyPublisher()
1012
}
1113
}

AtalaPrismSDK/Pluto/Sources/PersistentStorage/DAO/CDKeyDAO+LinkSecretStore.swift

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,33 @@ import Domain
44

55
extension CDKeyDAO: LinkSecretStore {
66
func addLinkSecret(_ linkSecret: StorableKey) -> AnyPublisher<Void, Error> {
7-
updateOrCreate("linkSecret", context: writeContext) { cdobj, context in
8-
switch linkSecret {
9-
case let keychainKey as KeychainStorableKey:
7+
switch linkSecret {
8+
case let keychainKey as KeychainStorableKey:
9+
return keychainDao.updateOrCreate("linkSecret", context: writeContext) { cdobj, context in
1010
try storeKeychainKey(
1111
keychainKey: keychainKey,
12-
service: self.keychainService,
12+
service: self.keychainDao.keychainService,
1313
account: "linkSecret",
14-
keychain: self.keychain
14+
keychain: self.keychainDao.keychain
1515
)
16-
let cdkey = CDKeychainKey(entity: CDKeychainKey.entity(), insertInto: context)
17-
cdkey.parseFromStorableKey(
16+
cdobj.parseFromStorableKey(
1817
keychainKey,
1918
identifier: "linkSecret",
20-
service: self.keychainService
19+
service: self.keychainDao.keychainService
2120
)
22-
default:
23-
let cdkey = CDDatabaseKey(entity: CDDatabaseKey.entity(), insertInto: context)
24-
cdkey.parseFromStorableKey(
21+
}
22+
.map { _ in }
23+
.eraseToAnyPublisher()
24+
default:
25+
return databaseDAO.updateOrCreate("linkSecret", context: writeContext) { cdobj, context in
26+
cdobj.parseFromStorableKey(
2527
linkSecret,
2628
identifier: "linkSecret"
2729
)
2830
}
31+
.map { _ in }
32+
.eraseToAnyPublisher()
2933
}
30-
.map { _ in }
31-
.eraseToAnyPublisher()
3234
}
3335
}
3436

AtalaPrismSDK/Pluto/Sources/PersistentStorage/DAO/CDKeyDAO.swift

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,31 @@ import Domain
44

55
struct CDKeyDAO: CoreDataDAO {
66
typealias CoreDataObject = CDKey
7-
let keychain: KeychainStore & KeychainProvider
8-
let keychainService: String
7+
let keychainDao: CDKeychainKeyDAO
8+
let databaseDAO: CDDatabaseKeyDAO
99
let readContext: NSManagedObjectContext
1010
let writeContext: NSManagedObjectContext
1111
let identifierKey: String? = "identifier"
12+
13+
init(
14+
keychain: KeychainStore & KeychainProvider,
15+
keychainService: String,
16+
readContext: NSManagedObjectContext,
17+
writeContext: NSManagedObjectContext
18+
) {
19+
self.keychainDao = CDKeychainKeyDAO(
20+
keychain: keychain,
21+
keychainService: keychainService,
22+
readContext: readContext,
23+
writeContext: writeContext
24+
)
25+
self.databaseDAO = CDDatabaseKeyDAO(
26+
readContext: readContext,
27+
writeContext: writeContext
28+
)
29+
self.readContext = readContext
30+
self.writeContext = writeContext
31+
}
1232
}
1333

1434
extension CDKey {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import Combine
2+
import CoreData
3+
import Domain
4+
5+
struct CDKeychainKeyDAO: CoreDataDAO {
6+
typealias CoreDataObject = CDKeychainKey
7+
let keychain: KeychainStore & KeychainProvider
8+
let keychainService: String
9+
let readContext: NSManagedObjectContext
10+
let writeContext: NSManagedObjectContext
11+
let identifierKey: String? = "identifier"
12+
}

AtalaPrismSDK/Pluto/Sources/PlutoImpl+Public.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ extension PlutoImpl: Pluto {
171171
keyDao.addLinkSecret(secret)
172172
}
173173

174-
public func getLinkSecret() -> AnyPublisher<[StorableKey], Error> {
175-
keyDao.getAll()
174+
public func getLinkSecret() -> AnyPublisher<StorableKey?, Error> {
175+
keyDao.getLinkSecret()
176176
}
177177
}

0 commit comments

Comments
 (0)