Protocol: freeze device proof and browser CSRF contracts
This commit is contained in:
@@ -2583,6 +2583,21 @@ public struct VersionNegotiation: Codable, Equatable {
|
||||
public func encodeJSON() throws -> Data { try validate(); return try JSONEncoder().encode(self) }
|
||||
}
|
||||
|
||||
public func deviceRegistrationProofTranscript(serverID: Data, principalID: Data, deviceID: Data, challenge: Data, expiryUnixMilliseconds: Int64) throws -> Data {
|
||||
for (field, value, length) in [("server_id", serverID, 16), ("principal_id", principalID, 16), ("device_id", deviceID, 16), ("challenge", challenge, 32)] {
|
||||
if value.count != length { throw ContractValidationError(field: field, code: "invalid_length") }
|
||||
}
|
||||
if expiryUnixMilliseconds < 0 { throw ContractValidationError(field: "expiry_unix_milliseconds", code: "minimum") }
|
||||
var transcript = Data("versevdi-device-proof-v1".utf8)
|
||||
transcript.append(serverID)
|
||||
transcript.append(principalID)
|
||||
transcript.append(deviceID)
|
||||
transcript.append(challenge)
|
||||
var expiry = UInt64(expiryUnixMilliseconds).bigEndian
|
||||
Swift.withUnsafeBytes(of: &expiry) { transcript.append(contentsOf: $0) }
|
||||
return transcript
|
||||
}
|
||||
|
||||
public extension TunnelAdmissionRequest {
|
||||
func deviceAdmissionTranscript() -> Data {
|
||||
var fields = [sessionId, gatewayId, audience, grant, String(reconnectSequence), clientNonce, capabilities.transport, capabilities.framing, capabilities.media, capabilities.audio, capabilities.sourceRateControl, String(capabilities.clientDecode.count)]
|
||||
|
||||
Reference in New Issue
Block a user