#ifndef _KEY_CONTROL_H_
#define _KEY_CONTROL_H_

#include <sys/cdefs.h>
#include <sys/types.h>

__BEGIN_DECLS

// ext4enc:TODO - get these keyring standard definitions from proper system file
// keyring serial number type
typedef int32_t key_serial_t;

// special process keyring shortcut IDs
#define KEY_SPEC_THREAD_KEYRING       (-1) // key ID for thread-specific keyring
#define KEY_SPEC_PROCESS_KEYRING      (-2) // key ID for process-specific keyring
#define KEY_SPEC_SESSION_KEYRING      (-3) // key ID for session-specific keyring
#define KEY_SPEC_USER_KEYRING         (-4) // key ID for UID-specific keyring
#define KEY_SPEC_USER_SESSION_KEYRING (-5) // key ID for UID-session keyring
#define KEY_SPEC_GROUP_KEYRING        (-6) // key ID for GID-specific keyring

key_serial_t add_key(const char *type,
                     const char *description,
                     const void *payload,
                     size_t plen,
                     key_serial_t ringid);

long keyctl_revoke(key_serial_t id);

long keyctl_setperm(key_serial_t id, int permissions);

long keyctl_search(key_serial_t ringid, const char *type,
                   const char *description, key_serial_t destringid);

__END_DECLS

#endif // _KEY_CONTROL_H_
