diff --git a/Package.swift b/Package.swift index edc8f97..8d2d493 100644 --- a/Package.swift +++ b/Package.swift @@ -27,8 +27,8 @@ let package = Package( swiftSettings: [.unsafeFlags(["-suppress-warnings"])]), .binaryTarget( name: "BitwardenFFI", - url: "https://bwlivefronttest.blob.core.windows.net/sdk/59cee6e-BitwardenFFI.xcframework.zip", - checksum: "6539debb4d746c5fda9cd4ff36828d6ff65d84ca15dcb71746ef6420ce3775a2"), + url: "https://bwlivefronttest.blob.core.windows.net/sdk/7641717-BitwardenFFI.xcframework.zip", + checksum: "f802265346d49cb39c4284e2ffe68c4b4aa579b5792e5e137627eeec6d9872aa"), .testTarget( name: "BitwardenSdkTests", dependencies: ["BitwardenSdk"]) diff --git a/Sources/BitwardenSdk/BitwardenFido.swift b/Sources/BitwardenSdk/BitwardenFido.swift index b09b024..c7f3362 100644 --- a/Sources/BitwardenSdk/BitwardenFido.swift +++ b/Sources/BitwardenSdk/BitwardenFido.swift @@ -1753,6 +1753,108 @@ public func FfiConverterTypeSelectedCredential_lower(_ value: SelectedCredential return FfiConverterTypeSelectedCredential.lower(value) } + +/** + * An Unverified asset link. + */ +public struct UnverifiedAssetLink { + /** + * Application package name. + */ + public let packageName: String + /** + * Fingerprint to compare. + */ + public let sha256CertFingerprint: String + /** + * Host to lookup the well known asset link. + */ + public let host: String + /** + * When sourced from the application statement list or parsed from host for passkeys. + * Will be generated from `host` if not provided. + */ + public let assetLinkUrl: String? + + // Default memberwise initializers are never public by default, so we + // declare one manually. + public init( + /** + * Application package name. + */packageName: String, + /** + * Fingerprint to compare. + */sha256CertFingerprint: String, + /** + * Host to lookup the well known asset link. + */host: String, + /** + * When sourced from the application statement list or parsed from host for passkeys. + * Will be generated from `host` if not provided. + */assetLinkUrl: String?) { + self.packageName = packageName + self.sha256CertFingerprint = sha256CertFingerprint + self.host = host + self.assetLinkUrl = assetLinkUrl + } +} + + + +extension UnverifiedAssetLink: Equatable, Hashable { + public static func ==(lhs: UnverifiedAssetLink, rhs: UnverifiedAssetLink) -> Bool { + if lhs.packageName != rhs.packageName { + return false + } + if lhs.sha256CertFingerprint != rhs.sha256CertFingerprint { + return false + } + if lhs.host != rhs.host { + return false + } + if lhs.assetLinkUrl != rhs.assetLinkUrl { + return false + } + return true + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(packageName) + hasher.combine(sha256CertFingerprint) + hasher.combine(host) + hasher.combine(assetLinkUrl) + } +} + + +public struct FfiConverterTypeUnverifiedAssetLink: FfiConverterRustBuffer { + public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> UnverifiedAssetLink { + return + try UnverifiedAssetLink( + packageName: FfiConverterString.read(from: &buf), + sha256CertFingerprint: FfiConverterString.read(from: &buf), + host: FfiConverterString.read(from: &buf), + assetLinkUrl: FfiConverterOptionString.read(from: &buf) + ) + } + + public static func write(_ value: UnverifiedAssetLink, into buf: inout [UInt8]) { + FfiConverterString.write(value.packageName, into: &buf) + FfiConverterString.write(value.sha256CertFingerprint, into: &buf) + FfiConverterString.write(value.host, into: &buf) + FfiConverterOptionString.write(value.assetLinkUrl, into: &buf) + } +} + + +public func FfiConverterTypeUnverifiedAssetLink_lift(_ buf: RustBuffer) throws -> UnverifiedAssetLink { + return try FfiConverterTypeUnverifiedAssetLink.lift(buf) +} + +public func FfiConverterTypeUnverifiedAssetLink_lower(_ value: UnverifiedAssetLink) -> RustBuffer { + return FfiConverterTypeUnverifiedAssetLink.lower(value) +} + // Note that we don't yet support `indirect` for enums. // See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion. @@ -1814,6 +1916,77 @@ extension ClientData: Equatable, Hashable {} +// Note that we don't yet support `indirect` for enums. +// See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion. +/** + * The origin of a WebAuthn request. + */ + +public enum Origin { + + /** + * A Url, meant for a request in the web browser. + */ + case web(String + ) + /** + * An android digital asset fingerprint. + * Meant for a request coming from an android application. + */ + case android(UnverifiedAssetLink + ) +} + + +public struct FfiConverterTypeOrigin: FfiConverterRustBuffer { + typealias SwiftType = Origin + + public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Origin { + let variant: Int32 = try readInt(&buf) + switch variant { + + case 1: return .web(try FfiConverterString.read(from: &buf) + ) + + case 2: return .android(try FfiConverterTypeUnverifiedAssetLink.read(from: &buf) + ) + + default: throw UniffiInternalError.unexpectedEnumCase + } + } + + public static func write(_ value: Origin, into buf: inout [UInt8]) { + switch value { + + + case let .web(v1): + writeInt(&buf, Int32(1)) + FfiConverterString.write(v1, into: &buf) + + + case let .android(v1): + writeInt(&buf, Int32(2)) + FfiConverterTypeUnverifiedAssetLink.write(v1, into: &buf) + + } + } +} + + +public func FfiConverterTypeOrigin_lift(_ buf: RustBuffer) throws -> Origin { + return try FfiConverterTypeOrigin.lift(buf) +} + +public func FfiConverterTypeOrigin_lower(_ value: Origin) -> RustBuffer { + return FfiConverterTypeOrigin.lower(value) +} + + + +extension Origin: Equatable, Hashable {} + + + // Note that we don't yet support `indirect` for enums. // See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion. diff --git a/Sources/BitwardenSdk/BitwardenSDK.swift b/Sources/BitwardenSdk/BitwardenSDK.swift index 48dfdae..dfc06e6 100644 --- a/Sources/BitwardenSdk/BitwardenSDK.swift +++ b/Sources/BitwardenSdk/BitwardenSDK.swift @@ -2166,9 +2166,9 @@ public func FfiConverterTypeClientFido2Authenticator_lower(_ value: ClientFido2A public protocol ClientFido2ClientProtocol : AnyObject { - func authenticate(origin: String, request: String, clientData: ClientData) async throws -> PublicKeyCredentialAuthenticatorAssertionResponse + func authenticate(origin: Origin, request: String, clientData: ClientData) async throws -> PublicKeyCredentialAuthenticatorAssertionResponse - func register(origin: String, request: String, clientData: ClientData) async throws -> PublicKeyCredentialAuthenticatorAttestationResponse + func register(origin: Origin, request: String, clientData: ClientData) async throws -> PublicKeyCredentialAuthenticatorAttestationResponse } @@ -2213,13 +2213,13 @@ open class ClientFido2Client: -open func authenticate(origin: String, request: String, clientData: ClientData)async throws -> PublicKeyCredentialAuthenticatorAssertionResponse { +open func authenticate(origin: Origin, request: String, clientData: ClientData)async throws -> PublicKeyCredentialAuthenticatorAssertionResponse { return try await uniffiRustCallAsync( rustFutureFunc: { uniffi_bitwarden_uniffi_fn_method_clientfido2client_authenticate( self.uniffiClonePointer(), - FfiConverterString.lower(origin),FfiConverterString.lower(request),FfiConverterTypeClientData_lower(clientData) + FfiConverterTypeOrigin_lower(origin),FfiConverterString.lower(request),FfiConverterTypeClientData_lower(clientData) ) }, pollFunc: ffi_bitwarden_uniffi_rust_future_poll_rust_buffer, @@ -2230,13 +2230,13 @@ open func authenticate(origin: String, request: String, clientData: ClientData)a ) } -open func register(origin: String, request: String, clientData: ClientData)async throws -> PublicKeyCredentialAuthenticatorAttestationResponse { +open func register(origin: Origin, request: String, clientData: ClientData)async throws -> PublicKeyCredentialAuthenticatorAttestationResponse { return try await uniffiRustCallAsync( rustFutureFunc: { uniffi_bitwarden_uniffi_fn_method_clientfido2client_register( self.uniffiClonePointer(), - FfiConverterString.lower(origin),FfiConverterString.lower(request),FfiConverterTypeClientData_lower(clientData) + FfiConverterTypeOrigin_lower(origin),FfiConverterString.lower(request),FfiConverterTypeClientData_lower(clientData) ) }, pollFunc: ffi_bitwarden_uniffi_rust_future_poll_rust_buffer, @@ -4832,6 +4832,8 @@ fileprivate struct FfiConverterDictionaryStringBool: FfiConverterRustBuffer { + + @@ -5107,10 +5109,10 @@ private var initializationResult: InitializationResult = { if (uniffi_bitwarden_uniffi_checksum_method_clientfido2authenticator_silently_discover_credentials() != 47262) { return InitializationResult.apiChecksumMismatch } - if (uniffi_bitwarden_uniffi_checksum_method_clientfido2client_authenticate() != 55420) { + if (uniffi_bitwarden_uniffi_checksum_method_clientfido2client_authenticate() != 36920) { return InitializationResult.apiChecksumMismatch } - if (uniffi_bitwarden_uniffi_checksum_method_clientfido2client_register() != 51611) { + if (uniffi_bitwarden_uniffi_checksum_method_clientfido2client_register() != 29872) { return InitializationResult.apiChecksumMismatch } if (uniffi_bitwarden_uniffi_checksum_method_clientfolders_decrypt() != 1331) {