Files
libsignal/swift/Sources/LibSignalClient/zkgroup/ServerZkReceiptOperations.swift
Jordan Rose 9e13263581 Switch to swift-format for formatting instead of swiftformat
swift-format is owned by the Swift project and is generally less
opinionated than swiftformat (but better at formatting to a limited
line length).
2025-06-25 11:24:57 -07:00

67 lines
2.4 KiB
Swift

//
// Copyright 2020-2021 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import SignalFfi
public class ServerZkReceiptOperations {
let serverSecretParams: ServerSecretParams
public init(serverSecretParams: ServerSecretParams) {
self.serverSecretParams = serverSecretParams
}
public func issueReceiptCredential(
receiptCredentialRequest: ReceiptCredentialRequest,
receiptExpirationTime: UInt64,
receiptLevel: UInt64
) throws -> ReceiptCredentialResponse {
return try self.issueReceiptCredential(
randomness: Randomness.generate(),
receiptCredentialRequest: receiptCredentialRequest,
receiptExpirationTime: receiptExpirationTime,
receiptLevel: receiptLevel
)
}
public func issueReceiptCredential(
randomness: Randomness,
receiptCredentialRequest: ReceiptCredentialRequest,
receiptExpirationTime: UInt64,
receiptLevel: UInt64
) throws -> ReceiptCredentialResponse {
return try self.serverSecretParams.withNativeHandle { serverSecretParams in
try randomness.withUnsafePointerToBytes { randomness in
try receiptCredentialRequest.withUnsafePointerToSerialized { receiptCredentialRequest in
try invokeFnReturningSerialized {
signal_server_secret_params_issue_receipt_credential_deterministic(
$0,
serverSecretParams.const(),
randomness,
receiptCredentialRequest,
receiptExpirationTime,
receiptLevel
)
}
}
}
}
}
public func verifyReceiptCredentialPresentation(receiptCredentialPresentation: ReceiptCredentialPresentation) throws
{
try self.serverSecretParams.withNativeHandle { serverSecretParams in
try receiptCredentialPresentation.withUnsafePointerToSerialized { receiptCredentialPresentation in
try checkError(
signal_server_secret_params_verify_receipt_credential_presentation(
serverSecretParams.const(),
receiptCredentialPresentation
)
)
}
}
}
}