swift-nio-oblivious-http

一个使用 Swift NIO 处理 Oblivious HTTP 的库。

概述

Oblivious HTTP 是一种协议,允许客户端向服务器发出请求,而服务器无法识别这些请求的来源。来自同一客户端的多个请求也不能被识别为来自同一节点。

使用受信任的中继来防止元数据被用于跟踪目的,同时有效负载被加密以确保只有目标服务器可以访问它。

此库提供了实现 Oblivious HTTP 所需的所有组件。我们计划扩展此项目以提供与 swift-nio 兼容的开箱即用解决方案。

支持的 Swift 版本

此库引入时支持 Swift 5.8 或更高版本。此库将支持最新的稳定 Swift 版本以及之前的两个版本。

开始使用

包的引入

要使用 swift-nio-oblivious-http,请将以下依赖项添加到您的 Package.swift 中

dependencies: [
    .package(url: "https://github.com/apple/swift-nio-oblivious-http.git", .upToNextMinor(from: "0.2.1"))
]

然后,您可以将特定的产品依赖项添加到您的目标中

dependencies: [
    .product(name: "ObliviousHTTP", package: "swift-nio-oblivious-http"),
]

二进制 HTTP 编码

要序列化二进制 HTTP 消息,请使用 BHTTPSerializer.serialize(message, buffer)

要反序列化二进制 HTTP 消息,请使用 BHTTPParser,使用 append() 添加接收到的数据,然后调用 completeBodyRecieved()。要读取收到的消息部分,请调用 nextMessage()

Oblivious 封装

要封装请求,请从 OHTTPEncapsulation.encapsulateRequest() 开始。类似地,对于响应,请参阅 OHTTPEncapsulation.encapsulateResponse()

要解封装接收到的请求,首先可以使用 OHTTPEncapsulation.parseRequestHeader() 读取标头。使用这些标头来启用 OHTTPEncapsulation.RequestDecapsulator 的使用。对于响应,请参阅 OHTTPEncapsulation.decapsulateResponse()

还存在其他功能来支持流操作。

包结构

该包分为 2 个库。 主要库 OblivousHTTP 提供了实现 Oblivious HTTP 所需的二进制 HTTP 编码。第二个库 ObliviousX 提供了 Oblivious 封装,可以将其应用于二进制 HTTP 或您选择的其他编码。