Files
libsignal/swift/Sources/LibSignalClient/zkgroup/ServerZkAuthOperations.swift
Jordan Rose 231aa16510 Give AuthCredentialWithPni "PniAsServiceId" and "PniAsAci" variants
The former is what we want going forward; the latter is equivalent to
the old format for compatibility with previous client builds.
2023-07-20 12:28:19 -07:00

80 lines
3.6 KiB
Swift

//
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import SignalFfi
public class ServerZkAuthOperations {
let serverSecretParams: ServerSecretParams
public init(serverSecretParams: ServerSecretParams) {
self.serverSecretParams = serverSecretParams
}
public func issueAuthCredential(aci: Aci, redemptionTime: UInt32) throws -> AuthCredentialResponse {
return try issueAuthCredential(randomness: Randomness.generate(), aci: aci, redemptionTime: redemptionTime)
}
public func issueAuthCredential(randomness: Randomness, aci: Aci, redemptionTime: UInt32) throws -> AuthCredentialResponse {
return try serverSecretParams.withUnsafePointerToSerialized { serverSecretParams in
try randomness.withUnsafePointerToBytes { randomness in
try aci.withPointerToFixedWidthBinary { aci in
try invokeFnReturningSerialized {
signal_server_secret_params_issue_auth_credential_deterministic($0, serverSecretParams, randomness, aci, redemptionTime)
}
}
}
}
}
public func issueAuthCredentialWithPniAsServiceId(aci: Aci, pni: Pni, redemptionTime: UInt64) throws -> AuthCredentialWithPniResponse {
return try issueAuthCredentialWithPniAsServiceId(randomness: Randomness.generate(), aci: aci, pni: pni, redemptionTime: redemptionTime)
}
public func issueAuthCredentialWithPniAsServiceId(randomness: Randomness, aci: Aci, pni: Pni, redemptionTime: UInt64) throws -> AuthCredentialWithPniResponse {
return try serverSecretParams.withUnsafePointerToSerialized { serverSecretParams in
try randomness.withUnsafePointerToBytes { randomness in
try aci.withPointerToFixedWidthBinary { aci in
try pni.withPointerToFixedWidthBinary { pni in
try invokeFnReturningSerialized {
signal_server_secret_params_issue_auth_credential_with_pni_as_service_id_deterministic($0, serverSecretParams, randomness, aci, pni, redemptionTime)
}
}
}
}
}
}
public func issueAuthCredentialWithPniAsAci(aci: Aci, pni: Pni, redemptionTime: UInt64) throws -> AuthCredentialWithPniResponse {
return try issueAuthCredentialWithPniAsAci(randomness: Randomness.generate(), aci: aci, pni: pni, redemptionTime: redemptionTime)
}
public func issueAuthCredentialWithPniAsAci(randomness: Randomness, aci: Aci, pni: Pni, redemptionTime: UInt64) throws -> AuthCredentialWithPniResponse {
return try serverSecretParams.withUnsafePointerToSerialized { serverSecretParams in
try randomness.withUnsafePointerToBytes { randomness in
try aci.withPointerToFixedWidthBinary { aci in
try pni.withPointerToFixedWidthBinary { pni in
try invokeFnReturningSerialized {
signal_server_secret_params_issue_auth_credential_with_pni_as_aci_deterministic($0, serverSecretParams, randomness, aci, pni, redemptionTime)
}
}
}
}
}
}
public func verifyAuthCredentialPresentation(groupPublicParams: GroupPublicParams, authCredentialPresentation: AuthCredentialPresentation, now: Date = Date()) throws {
try serverSecretParams.withUnsafePointerToSerialized { serverSecretParams in
try groupPublicParams.withUnsafePointerToSerialized { groupPublicParams in
try authCredentialPresentation.withUnsafeBorrowedBuffer { authCredentialPresentation in
try checkError(signal_server_secret_params_verify_auth_credential_presentation(serverSecretParams, groupPublicParams, authCredentialPresentation, UInt64(now.timeIntervalSince1970)))
}
}
}
}
}