session-ios/SessionProtocolKit/Signal/SMKSenderCertificate.swift

54 lines
1.8 KiB
Swift

//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import Foundation
// See:
// https://github.com/signalapp/libsignal-metadata-java/blob/cac0dde9de416a192e64a8940503982820870090/java/src/main/java/org/signal/libsignal/metadata/certificate/SenderCertificate.java
@objc public class SMKSenderCertificate: NSObject {
@objc public let senderDeviceId: UInt32
@objc public let senderRecipientId: String
@objc public init(senderDeviceId: UInt32, senderRecipientId: String) {
self.senderDeviceId = senderDeviceId
self.senderRecipientId = senderRecipientId
}
@objc public class func parse(data: Data) throws -> SMKSenderCertificate {
let proto = try SMKProtoSenderCertificate.parseData(data)
return try parse(proto: proto)
}
@objc public class func parse(proto: SMKProtoSenderCertificate) throws -> SMKSenderCertificate {
let sender = proto.sender
let senderDevice = proto.senderDevice
return SMKSenderCertificate(senderDeviceId: senderDevice, senderRecipientId: sender)
}
@objc public func toProto() throws -> SMKProtoSenderCertificate {
let builder =
SMKProtoSenderCertificate.builder(sender: senderRecipientId, senderDevice: senderDeviceId)
return try builder.build()
}
@objc public func serialized() throws -> Data {
return try toProto().serializedData()
}
open override func isEqual(_ other: Any?) -> Bool {
if let other = other as? SMKSenderCertificate {
return (senderDeviceId == other.senderDeviceId && senderRecipientId == other.senderRecipientId)
} else {
return false
}
}
public override var hash: Int {
return senderDeviceId.hashValue ^ senderRecipientId.hashValue
}
}