blob: 6e0d17b839f17145354dfd4c9a6180d6e8fed5c6 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.ssh;
using zx;
/// Maximum length of a single SSH key. See sshd(8).
const uint32 MAX_SSH_KEY_LENGTH = 8192;
struct SshAuthorizedKeyEntry {
/// The entry in authorized_keys.
string:MAX_SSH_KEY_LENGTH key;
};
/// Protocol for managing SSH keys on a device.
[Discoverable]
protocol AuthorizedKeys {
/// Add a key to the device's authorized key list.
AddKey(SshAuthorizedKeyEntry key) -> () error zx.status;
/// Watch for keys by sending events to the given KeyWatcher.
WatchKeys(request<KeyWatcher> watcher);
/// Remove the given key. |key| should be a value returned by |KeyIterator|.
RemoveKey(SshAuthorizedKeyEntry key) -> () error zx.status;
};
enum KeyEventType {
/// This key already existed when WatchKeys was called.
EXISTING = 1;
/// This key was added after WatchKeys was called.
ADDED = 2;
/// This key was removed after WatchKeys was called.
REMOVED = 3;
/// This is the end of the EXISTING keys.
FINISHED_EXISTING = 4;
};
/// Event for an SSH key being added or removed.
struct KeyEvent {
/// What is happening to this key?
KeyEventType event;
/// The key. Present for all KeyEventType except FINISHED_EXISTING.
SshAuthorizedKeyEntry? key;
};
/// Used to send updates about the authorized key list from server to client.
protocol KeyWatcher {
/// Blocks until the next event is ready.
Next() -> (KeyEvent event);
};