|
|
|
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import GRDB
|
|
|
|
import SessionUtilitiesKit
|
|
|
|
|
|
|
|
public extension SnodeAPI {
|
|
|
|
enum AuthenticationInfo: Equatable {
|
|
|
|
/// Used for when interacting as the current user
|
|
|
|
case standard(sessionId: SessionId, ed25519KeyPair: KeyPair)
|
|
|
|
|
|
|
|
/// Used for when interacting as a group admin
|
|
|
|
case groupAdmin(groupSessionId: SessionId, ed25519SecretKey: [UInt8])
|
|
|
|
|
|
|
|
/// Used for when interacting as a group member
|
|
|
|
case groupMember(groupSessionId: SessionId, authData: Data)
|
|
|
|
|
|
|
|
// MARK: - Variables
|
|
|
|
|
|
|
|
public var sessionId: SessionId {
|
|
|
|
switch self {
|
|
|
|
case .standard(let sessionId, _), .groupAdmin(let sessionId, _), .groupMember(let sessionId, _):
|
|
|
|
return sessionId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - Functions
|
|
|
|
|
|
|
|
public func generateSignature(
|
|
|
|
with verificationBytes: [UInt8],
|
|
|
|
using dependencies: Dependencies
|
|
|
|
) throws -> [UInt8] {
|
|
|
|
switch self {
|
|
|
|
case .standard(_, let ed25519KeyPair):
|
|
|
|
return try dependencies[singleton: .crypto].perform(
|
|
|
|
.signature(message: verificationBytes, secretKey: ed25519KeyPair.secretKey)
|
|
|
|
)
|
|
|
|
|
|
|
|
case .groupAdmin(_, let ed25519SecretKey):
|
|
|
|
return try dependencies[singleton: .crypto].perform(
|
|
|
|
.signature(message: verificationBytes, secretKey: ed25519SecretKey)
|
|
|
|
)
|
|
|
|
|
|
|
|
case .groupMember(_, let authData):
|
|
|
|
preconditionFailure()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|