Primary objects are implemented by code in the kernel. Keys to these objects are called (_primary) keys. Keys that are not gate keys are primary. Key holders need not and may not generally distinguish between primary and gate keys.

Jumping to a primary key causes the kernel to provide the primary function and return to the key provided as the last key parameter in the above jump.

If the jump is a call, a return key to the jumper is implicitly provided as the last key parameter. For other kinds of jumps, a resume key must be explicitly passed, or there will be no return.

The return is immediate unless otherwise specified; if the return is delayed the effect is as though the kernel held the return key. {Page, meter and segment keys have other appearances as well.}

The Gnosis kernel is purposely designed so that one may be unable to discriminate between gates and primary keys; indeed some implementations of Gnosis are likely to replace some of the function described in this section with gates to domains that provide the same function. It will be hard to convict them of not conforming to the definition {but see (p2,iokeys)}.

Some primary keys are associated with a particular node or page. These are said to designate {(p1,designate)} that node or page. Different keys designating a given node or page provide different authority to influence the node or page. Gates are said to designate nodes despite the fact that they are not primary keys. They designate the node which is the root of the associated domain.

Other primary functions are gotten by calling any of a class of keys known collectively as (_miscellaneous) keys. These keys do not designate a page or node. Each of these primary functions is associated with the particular key that is called.

Certain miscellaneous keys are restricted to special programs. Other miscellaneous keys are generally available.

This chapter enumerates the primary functions. Each order code is given for each kind of primary key.

If a primary key is offered a byte string which is shorter than that specified the string is padded on the right with zero bytes. If the offered string is longer and the additional bytes are zero the function is the same as specified in this section. {If the additional bytes are not zero there may be as yet undefined function.}

In this section "kt" stands for "X'80000000'". It is the order code for the alleged key type query {(p3,alleged)}.

Primary entries return kt+2 for invalid order codes. We have chosen valid order codes for the primary entries other than kt to be positive. Some implementations might otherwise find it awkward to do the right thing when a primary key is implicitly jumped to.