Files
libsignal/swift/Sources/LibSignalClient/zkgroup/CallLinkAuthCredentialResponse.swift
Jordan Rose e588fa5450 zkgroup: Add CallLinkAuthCredential
This is very similar to the AuthCredential used by the group server,
but using CallLinkParams to encrypt the user ID rather than
GroupParams (and using GenericServerParams to issue the credential
rather than the group server's ServerParams).
2023-04-25 17:18:05 -07:00

46 lines
1.8 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import SignalFfi
public class CallLinkAuthCredentialResponse: ByteArray {
public required init(contents: [UInt8]) throws {
try super.init(contents, checkValid: signal_call_link_auth_credential_response_check_valid_contents)
}
public static func issueCredential(userId: UUID, redemptionTime: Date, params: GenericServerSecretParams) -> CallLinkAuthCredentialResponse {
return failOnError {
issueCredential(userId: userId, redemptionTime: redemptionTime, params: params, randomness: try .generate())
}
}
public static func issueCredential(userId: UUID, redemptionTime: Date, params: GenericServerSecretParams, randomness: Randomness) -> CallLinkAuthCredentialResponse {
return failOnError {
try withUnsafePointer(to: userId.uuid) { userId in
try params.withUnsafeBorrowedBuffer { params in
try randomness.withUnsafePointerToBytes { randomness in
try invokeFnReturningVariableLengthSerialized {
signal_call_link_auth_credential_response_issue_deterministic($0, userId, UInt64(redemptionTime.timeIntervalSince1970), params, randomness)
}
}
}
}
}
}
public func receive(userId: UUID, redemptionTime: Date, params: GenericServerPublicParams) throws -> CallLinkAuthCredential {
return try withUnsafeBorrowedBuffer { contents in
try withUnsafePointer(to: userId.uuid) { userId in
try params.withUnsafeBorrowedBuffer { params in
try invokeFnReturningVariableLengthSerialized {
signal_call_link_auth_credential_response_receive($0, contents, userId, UInt64(redemptionTime.timeIntervalSince1970), params)
}
}
}
}
}
}