Protocol: freeze device proof and browser CSRF contracts
This commit is contained in:
@@ -81,6 +81,19 @@ func evaluate(_ version: String, _ kind: String, _ input: String) -> String {
|
||||
}
|
||||
}
|
||||
|
||||
func evaluateDeviceProof(_ input: String) -> String {
|
||||
let values = values(input)
|
||||
let serverID = Data(decodeHex(values["server_id"] ?? "")!)
|
||||
let principalID = Data(decodeHex(values["principal_id"] ?? "")!)
|
||||
let deviceID = Data(decodeHex(values["device_id"] ?? "")!)
|
||||
let challenge = Data(decodeHex(values["challenge"] ?? "")!)
|
||||
let expiry = Int64(values["expiry_unix_ms"] ?? "")!
|
||||
return try! deviceRegistrationProofTranscript(
|
||||
serverID: serverID, principalID: principalID, deviceID: deviceID,
|
||||
challenge: challenge, expiryUnixMilliseconds: expiry
|
||||
).map { String(format: "%02x", $0) }.joined()
|
||||
}
|
||||
|
||||
func decodeHex(_ encoded: String) -> [UInt8]? {
|
||||
let characters = Array(encoded)
|
||||
guard characters.count % 2 == 0 else { return nil }
|
||||
@@ -229,7 +242,9 @@ struct ConformanceMain {
|
||||
for line in lines {
|
||||
let fields = line.split(separator: "\t", omittingEmptySubsequences: false).map(String.init)
|
||||
precondition(fields.count == 5)
|
||||
let actual = evaluate(fields[1], fields[2], fields[3])
|
||||
let actual = fields[2] == "device_proof_transcript"
|
||||
? evaluateDeviceProof(fields[3])
|
||||
: evaluate(fields[1], fields[2], fields[3])
|
||||
precondition(actual == fields[4], fields[0])
|
||||
results.append("\(fields[0])\t\(actual)")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user