| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| import Foundation |
| |
| /// Principal houses the basic tools for blessing the principal, which is to say it |
| /// contains the functions needed for authentication between devices/users. |
| public enum Principal { |
| /// Sets the blessing for the principal. This blessing must be VOM encoded, and is typically |
| /// provided by a Vanadium-service over HTTP (for example exchanging an oauth token for a V23 |
| /// blessing). |
| public static func setBlessings(vomEncodedBlessings:NSData) throws { |
| let ctx = V23.instance.context |
| // We can safely force this case because we know that CGO won't actually modify any of the |
| // NSData's bytes. |
| let cgoData = unsafeBitCast(vomEncodedBlessings.bytes, UnsafeMutablePointer<Void>.self) |
| let data = SwiftByteArray(length: UInt64(vomEncodedBlessings.length), data: cgoData) |
| try SwiftVError.catchAndThrowError { errPtr in |
| swift_io_v_v23_security_simple_nativeSetBlessings(ctx.handle.goHandle, data, errPtr) |
| } |
| } |
| |
| /// Returns a string that encapsulates the current blessing of the principal. It will look |
| /// something like dev.v.io:o:6183738471-jsl8jlsaj.apps.googleusercontent.com:frank@gmail.com |
| public static func blessingsDebugString() throws -> String { |
| let ctx = V23.instance.context |
| let cstr = swift_io_v_v23_security_simple_nativeBlessingsDebugString(ctx.handle.goHandle) |
| let str = String.fromCStringNoCopy(cstr, freeWhenDone: true) |
| if str == nil { |
| throw StringErrors.InvalidString |
| } |
| return str! |
| } |
| |
| /// Base64 DER-encoded representation of the auto-generated public-key using Golang's URLEncoding, |
| /// which is not compatible with NSData's base64 encoder/decoder. |
| public static func publicKey() throws -> String { |
| let str:String? = try SwiftVError.catchAndThrowError { errPtr in |
| let ctx = V23.instance.context |
| let cstr = swift_io_v_v23_security_simple_nativePublicKey(ctx.handle.goHandle, errPtr) |
| return String.fromCStringNoCopy(cstr, freeWhenDone: true) |
| } |
| if str == nil { |
| throw StringErrors.InvalidString |
| } |
| return str! |
| } |
| } |