Integration Guide¶
As a Zig Dependency¶
Add zig-ctap2 as a dependency in your build.zig.zon:
.dependencies = .{
.ctap2 = .{
.url = "https://github.com/Jesssullivan/zig-ctap2/archive/refs/heads/main.tar.gz",
},
},
Then in build.zig:
const ctap2_dep = b.dependency("ctap2", .{
.target = target,
.optimize = optimize,
});
exe.linkLibrary(ctap2_dep.artifact("ctap2"));
As a C Static Library¶
Build the library:
Link against zig-out/lib/libctap2.a and include include/ctap2.h:
#include "ctap2.h"
int main() {
int count = ctap2_device_count();
printf("Found %d FIDO2 devices\n", count);
return 0;
}
Compile:
Swift Integration (Xcode)¶
- Add zig-ctap2 as a git submodule or copy
libctap2.a+ctap2.hinto your project - Add
ctap2.hto your bridging header - Link
libctap2.ain your target's build settings - Add
IOKit.frameworkandCoreFoundation.frameworkto linked frameworks - Add USB entitlement to your
.entitlementsfile
import Foundation
let deviceCount = ctap2_device_count()
print("Found \(deviceCount) FIDO2 devices")
Git Submodule¶
Integration with cmux¶
This library powers the FIDO2/WebAuthn support in cmux, integrated as a git submodule at vendor/ctap2. The JS bridge in WKWebView intercepts navigator.credentials.create/get and routes to libctap2 via Swift C FFI.