blob: 9c58834801e7adac99767c3dc0a137cc84896112 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module vanadium;
// Represents the name of an application. |url| is the url of the
// application. |qualifier| is a string that allows to tie a specific
// instance of an application to another.
struct AppInstanceName {
string url;
string? qualifier;
};
// Certificate represents a human-readable name and public-key (DER encoded) pair.
// The private-key for a certificate is only available for signing operations
// within the principal service application.
struct Certificate {
string extension;
array<uint8>? publickey;
};
// Blessing is a credential binding a user identity to a public key. The corresponding
// private key is only available for signing within the PrincipalService application.
struct Blessing {
array<Certificate> chain;
};
// ChainSeparator is the separator used to join name extensions in a certificate chain.
const string ChainSeparator = "/";
// A service that binds user identities to an application instance running in Mojo
interface PrincipalService {
// Login is called by an application instance (requestor_url/qualifier) that
// wants to get a user blessing. The service may obtain the user blessing
// through a third-party authentication flow (eg:oauth2). The user blessing
// is bound to a public/private key-pair that this service generates and
// persists for this application instance. Returns null if login fails.
Login() => (Blessing? user_blessing);
// Removes the user blessing for the application instance that invokes the
// Logout method.
Logout();
// GetUserBlessing returns the user blessing for a given application instance.
// It returns an error if the application instance has not invoked Login().
GetUserBlessing(AppInstanceName app) => (Blessing? user_blessing);
};