import PromiseKit import Sodium extension Storage { @discardableResult public func write(with block: @escaping (Any) -> Void) -> Promise { Storage.write(with: { block($0) }) } @discardableResult public func write(with block: @escaping (Any) -> Void, completion: @escaping () -> Void) -> Promise { Storage.write(with: { block($0) }, completion: completion) } public func writeSync(with block: @escaping (Any) -> Void) { Storage.writeSync { block($0) } } @objc public func getUserPublicKey() -> String? { return OWSIdentityManager.shared().identityKeyPair()?.hexEncodedPublicKey } public func getUserKeyPair() -> ECKeyPair? { return OWSIdentityManager.shared().identityKeyPair() } public func getUserED25519KeyPair() -> Box.KeyPair? { let dbConnection = OWSIdentityManager.shared().dbConnection let collection = OWSPrimaryStorageIdentityKeyStoreCollection guard let hexEncodedPublicKey = dbConnection.object(forKey: LKED25519PublicKey, inCollection: collection) as? String, let hexEncodedSecretKey = dbConnection.object(forKey: LKED25519SecretKey, inCollection: collection) as? String else { return nil } let publicKey = Box.KeyPair.PublicKey(hex: hexEncodedPublicKey) let secretKey = Box.KeyPair.SecretKey(hex: hexEncodedSecretKey) return Box.KeyPair(publicKey: publicKey, secretKey: secretKey) } @objc public func getUser() -> Contact? { guard let userPublicKey = getUserPublicKey() else { return nil } var result: Contact? Storage.read { transaction in result = Storage.shared.getContact(with: userPublicKey) } return result } }