import Foundation final class KeychainTable: Table { static func tableSpec(_ id: Int32) -> ValueBoxTable { return ValueBoxTable(id: id, keyType: .binary, compactValuesOnCreation: false) } private func key(_ string: String) -> ValueBoxKey { return ValueBoxKey(string) } func get(_ key: String) -> Data? { if let value = self.valueBox.get(self.table, key: self.key(key)) { return Data(bytes: value.memory.assumingMemoryBound(to: UInt8.self), count: value.length) } return nil } func set(_ key: String, value: Data) { self.valueBox.set(self.table, key: self.key(key), value: MemoryBuffer(data: value)) } func remove(_ key: String) { self.valueBox.remove(self.table, key: self.key(key), secure: false) } }