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
 | |
|     }
 | |
| }
 |