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.
		
		
		
		
		
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			54 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | |
| 
 | |
| import Foundation
 | |
| import Sodium
 | |
| 
 | |
| public struct SessionId {
 | |
|     public static let byteCount: Int = 33
 | |
|     
 | |
|     public enum Prefix: String, CaseIterable {
 | |
|         case standard = "05"    // Used for identified users, open groups, etc.
 | |
|         case blinded15 = "15"   // Used for authentication and participants in open groups with blinding enabled
 | |
|         case blinded25 = "25"   // Used for authentication and participants in open groups with blinding enabled
 | |
|         case unblinded = "00"   // Used for authentication in open groups with blinding disabled
 | |
|         case group = "03"       // Used for update group conversations
 | |
|         
 | |
|         public init?(from stringValue: String?) {
 | |
|             guard let stringValue: String = stringValue else { return nil }
 | |
|             
 | |
|             guard stringValue.count > 2 else {
 | |
|                 guard let targetPrefix: Prefix = Prefix(rawValue: stringValue) else { return nil }
 | |
|                 self = targetPrefix
 | |
|                 return
 | |
|             }
 | |
|             
 | |
|             guard KeyPair.isValidHexEncodedPublicKey(candidate: stringValue) else { return nil }
 | |
|             guard let targetPrefix: Prefix = Prefix(rawValue: String(stringValue.prefix(2))) else { return nil }
 | |
|             
 | |
|             self = targetPrefix
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     public let prefix: Prefix
 | |
|     public let publicKey: String
 | |
|     
 | |
|     public var hexString: String {
 | |
|         return prefix.rawValue + publicKey
 | |
|     }
 | |
|     
 | |
|     // MARK: - Initialization
 | |
|     
 | |
|     public init?(from idString: String?) {
 | |
|         guard let idString: String = idString, idString.count > 2 else { return nil }
 | |
|         guard let targetPrefix: Prefix = Prefix(from: idString) else { return nil }
 | |
|         
 | |
|         self.prefix = targetPrefix
 | |
|         self.publicKey = idString.substring(from: 2)
 | |
|     }
 | |
|     
 | |
|     public init(_ type: Prefix, publicKey: Bytes) {
 | |
|         self.prefix = type
 | |
|         self.publicKey = publicKey.map { String(format: "%02hhx", $0) }.joined()
 | |
|     }
 | |
| }
 |