mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.3 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/ServerCertificate.java
 | 
						|
@objc public class SMKServerCertificate: NSObject {
 | 
						|
 | 
						|
    @objc public let keyId: UInt32
 | 
						|
    @objc public let key: ECPublicKey
 | 
						|
    @objc public let signatureData: Data
 | 
						|
 | 
						|
    public init(keyId: UInt32,
 | 
						|
                key: ECPublicKey,
 | 
						|
                signatureData: Data) {
 | 
						|
        self.keyId = keyId
 | 
						|
        self.key = key
 | 
						|
        self.signatureData = signatureData
 | 
						|
    }
 | 
						|
 | 
						|
    @objc public class func parse(data: Data) throws -> SMKServerCertificate {
 | 
						|
        let proto = try SMKProtoServerCertificate.parseData(data)
 | 
						|
        return try parse(proto: proto)
 | 
						|
    }
 | 
						|
 | 
						|
    @objc public class func parse(proto: SMKProtoServerCertificate) throws -> SMKServerCertificate {
 | 
						|
        let signatureData = proto.signature
 | 
						|
        let certificateData = proto.certificate
 | 
						|
        let certificateProto = try SMKProtoServerCertificateCertificate.parseData(certificateData)
 | 
						|
        let keyId = certificateProto.id
 | 
						|
        let keyData = certificateProto.key
 | 
						|
        let key = try ECPublicKey(serializedKeyData: keyData)
 | 
						|
        return SMKServerCertificate(keyId: keyId, key: key, signatureData: signatureData)
 | 
						|
    }
 | 
						|
 | 
						|
    @objc public func toProto() throws -> SMKProtoServerCertificate {
 | 
						|
        let certificateBuilder = SMKProtoServerCertificateCertificate.builder(id: keyId, key: key.serialized)
 | 
						|
 | 
						|
        let builder =
 | 
						|
            SMKProtoServerCertificate.builder(certificate: try certificateBuilder.buildSerializedData(),
 | 
						|
                                              signature: signatureData)
 | 
						|
        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? SMKServerCertificate {
 | 
						|
            return (keyId == other.keyId &&
 | 
						|
                key.isEqual(other.key) &&
 | 
						|
                (signatureData == other.signatureData))
 | 
						|
        } else {
 | 
						|
            return false
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public override var hash: Int {
 | 
						|
        return keyId.hashValue ^ key.hashValue ^ signatureData.hashValue
 | 
						|
    }
 | 
						|
}
 |