rpc Resolve(ResolveRequest) returns (ResolveResponse)
Spec: 7.2 QUERY OPERATION (OC_RESOLUTION)
A query operation consists of a client sending a query request to the responsible server and the server returning the query result to the client. Query requests are used to retrieve identifier elements assigned to any given identifier.
rpc AddElement(AddElementRequest) returns (AddElementResponse)
Spec: 7.7.1 ADD ELEMENT(S) (OC_ADD_ELEMENT)
Clients add elements to existing identifier records by sending ADD_ELEMENT requests to the
responsible server. The Message Header of the ADD_ELEMENT request must set its
rpc RemoveElement(RemoveElementRequest) returns (RemoveElementResponse)
Spec: 7.7.2 REMOVE ELEMENT(S) (OC_REMOVE_ELEMENT)
Clients remove existing elements by sending REMOVE_ELEMENT requests to the responsible
server. The Message Header of the REMOVE_ELEMENT request must set its
rpc ModifyElement(ModifyElementRequest) returns (ModifyElementResponse)
Spec: 7.7.3 MODIFY ELEMENT(S) (OC_MODIFY_ELEMENT)
Clients can make modifications to an existing element by sending MODIFY_ELEMENT requests to
the responsible server. The Message Header of the MODIFY_ELEMENT request must set its
rpc CreateDoid(CreateDoidRequest) returns (CreateDoidResponse)
Spec: 7.7.4 CREATE IDENTIFIER (OC_CREATE_ID)
Clients can create new identifiers by sending CREATE_ID requests to the responsible server.
rpc DeleteDoid(DeleteDoidRequest) returns (DeleteDoidResponse)
Spec: 7.7.5 DELETE IDENTIFIER (OC_DELETE_ID)
Clients delete existing identifiers by sending DELETE_ID requests to the responsible DO-IRP server.
The Message Header of the DELETE_ID request must set its
rpc ChallengeResponse(ChallengeResponseRequest) returns (ChallengeResponseResponse)
Spec: 7.5 CLIENT AUTHENTICATION
Clients are asked to authenticate themselves as administrators when querying for any element with ADMIN_READ but no PUBLIC_READ permission. Client authentication is also required for any administration requests that require administrator privileges. This includes adding, removing, or modifying identifiers or elements.
Client authentication consists of multiple messages exchanged between the client and server. Such
messages include the challenge from the server to the client to authenticate the client, the
challenge-response from the client in response to the server’s challenge, and the verification
request and response message if secret key authentication takes place. Messages exchanged
during the authentication are correlated via a unique
The authentication starts with a response message from the server that contains a challenge to the
client. The client must respond to the challenge with a challenge-response message. The server
validates the challenge-response, either by verifying the digital signature inside the challenge-
response, or by sending a verification request to another server (herein referred to as the
verification server), that maintains the secret key for the administrator. The purpose of the
challenge and the challenge-response is to prove to the server that the client possesses the private
key (or the secret key) of the administrator. If the authentication fails, an error response will be
sent back with the
Upon successful client authentication, the server must also make sure that the administrator is
authorized for the request. If the administrator has sufficient privileges, the server will process the
request and send back the result. If the administrator does not have sufficient privileges, the
server will return an error message with
Authentication is not about encryption (although encryption may be used in the process) and is accomplished by use of a Message Authentication Code or digital signature verification.
The following sections provide details of each message exchanged during the authentication process.
7.5.1 CHALLENGE FROM SERVER TO CLIENT
The Message Header of the CHALLENGE must keep the same
<Message Body of Server’s Challenge> ::=
where
Note that the server will not sign the challenge if the client did not request the server to do so. If
the client worries about whether it is speaking to the right server, it may ask the server to sign the
7.5.2 CHALLENGE-RESPONSE FROM CLIENT TO SERVER
The Message Header of the CHALLENGE_RESPONSE must set its
Spec: 7.3 ERROR RESPONSE FROM SERVER
A server will return an error message if it encounters an error when processing a request. Any
error response from the server must maintain the same
Spec: 7.4 SERVICE REFERRAL AND PREFIX REFERRAL
A server may receive requests for identifiers that are managed by some other server or service.
When this happens, the server has the option to either return a referral message that directs the
client to the proper DO-IRP service, or simply return an error message with
DO-IRP servers use the HS_SITE.PREFIX and HS_SERV.PREFIX element types in order to determine
whether to send an RC_PREFIX_REFERRAL request. When a DO-IRP server is asked to resolve a
prefix identifier 0.NA/
Since this behavior is purely in the server, server configuration can override this. This specification does not define under what conditions servers will send other prefix referral or service referral responses.
The Message Header of a service referral must maintain the same
Spec: 7.2.1 QUERY REQUEST (OC_RESOLUTION)
The Message Header of any query request must set its
The Message Body for any query request is defined as follows:
Spec: 7.2.2 SUCCESSFUL QUERY RESPONSE
The Message Header of any query response must set its
The message body of the successful query response is defined as follows:
where
7.2.3 UNSUCCESSFUL QUERY RESPONSE
If a server cannot fulfill a client’s request, it must return an error message. The general format for any error message from the server is specified in section 7.3 of this document.
For example, a server must return an error message if the queried identifier does not exist in its
database. The error message will have an empty message body and have its
Note that a server should NOT return an RC_ID_NOT_FOUND message if the server is not
responsible for the identifier being queried. It is possible that the queried identifier exists but is
managed by another DO-IRP server (under some other DO-IRP service). When this happens, the
server should either send a service referral (see section 7.4) or simply return an error message with
If the identifier exists, but there are no elements which match the client’s query, then the server must return an RC_ELEMENT_NOT_FOUND message.
The server may return an error message with
Servers should return an RC_ACCESS_DENIED message if the request does not have its PO flag set and asks for a specific element (via the index) that has neither PUBLIC_READ nor ADMIN_READ permission.
A server may ask its client to authenticate itself as the administrator during the resolution. This happens if the request does not have its PO flag set and any element in the query has ADMIN_READ permission, but no PUBLIC_READ permission. Details of client authentication are described in section 7.5
Spec: 7.7.1 ADD ELEMENT(S) (OC_ADD_ELEMENT)
Clients add elements to existing identifier records by sending ADD_ELEMENT requests to the
responsible server. The Message Header of the ADD_ELEMENT request must set its
The Message Body of the ADD_ELEMENT request is encoded as follows:
Spec: 7.7.2 REMOVE ELEMENT(S) (OC_REMOVE_ELEMENT)
Clients remove existing elements by sending REMOVE_ELEMENT requests to the responsible
server. The Message Header of the REMOVE_ELEMENT request must set its
The Message Body of any REMOVE_ELEMENT request is encoded as follows:
Spec: 7.7.3 MODIFY ELEMENT(S) (OC_MODIFY_ELEMENT)
Clients can make modifications to an existing element by sending MODIFY_ELEMENT requests to
the responsible server. The Message Header of the MODIFY_ELEMENT request must set its
The Message Body of any MODIFY_ELEMENT request is defined as follows:
Spec: 7.7.4 CREATE IDENTIFIER (OC_CREATE_ID)
Clients can create new identifiers by sending CREATE_ID requests to the responsible server. The
Message Header of any CREATE_ID request must set its
Spec: 7.7.4 CREATE IDENTIFIER
The Message Body of a successful Create Identifier Response is defined as follows:
The
Spec: 7.7.5 DELETE IDENTIFIER (OC_DELETE_ID)
Clients delete existing identifiers by sending DELETE_ID requests to the responsible DO-IRP server.
The Message Header of the DELETE_ID request must set its
The Message Body of any DELETE_ID request is defined as follows:
The server that receives the DELETE_ID request must first authenticate the client as the administrator with the DELETE_ID privilege. Upon successful authentication, the server will proceed to delete the identifier along with any elements assigned to the identifier. If successful, the server will return an RC_SUCCESS message to the client.
Each DELETE_ID request must be carried out as a transaction. If any part of the DELETE_ID process
fails, the entire operation must be rolled back. For example, if the server fails to remove any
elements assigned to the identifier (before deleting the identifier), it must return an error message
without deleting the identifier. A DELETE_ID request that asks to delete a non-existing identifier will
also be treated as an error. The server will return an error message with the
DELETE_ID requests can also be used to delete prefix identifiers.
Spec: 7.5.2 CHALLENGE-RESPONSE FROM CLIENT TO SERVER
The Message Header of the CHALLENGE_RESPONSE must set its
The Message Body of the CHALLENGE_RESPONSE request is defines as follows:
Spec: 4 DATA MODEL
Each identifier may have a set of elements assigned to it, which are collectively known as the identifier’s “Identifier Record”. There is no inherent limit to the number of elements in each identifier record. Records can optionally contain an element which is a signature certifying the contents of the record; additionally, if requested by a client, messages used to transmit records shall be signed for security. Each such element has a specified “type” which is represented by a unique identifier of its own. DO-IRP servers maintain these Identifier Records and typically return an instance of each such requested Identifier Record in response to a request for resolution of that designated identifier. More tailored requests can result in specific elements of an identifier record being shown in a given returned identifier record.
4.1 IDENTIFIER RECORD
An identifier record thus consists of one or more elements, each of which contains multiple fields including its type, a value associated with that type, and a unique index number that distinguishes that element from other elements in the record, especially those with the same type. The specific type shown in an element may define the syntax, structure, possible semantics, or any other necessary descriptive characteristics of the element’s value field. Each element also contains a set of administrative information such as a timestamp, Time to Live (“TTL”) and certain associated permissions. Pre-defined types are discussed in section 4.3.
Figure 4.1 below shows the identifier “35.1234/abc” with a sample record with three elements with indexes 1,2 and 3; The element 1 is shown in detail below.
| ————————————————————- |
Figure 4.1: Identifier “35.1234/abc” and its set of three elements
Figure 4.1 shows a single element whose index is set to 1. The type for this element is URL [5],
which is represented in the system by the resolvable identifier 0.TYPE/URL. In general, a type is
represented as a unique identifier and will either be a system type or a user created type. The URL
data as stated in the
Spec: 4.1 IDENTIFIER RECORD
Thus, an element may be thought of as group of fields which are defined below, along with the standard binary encoding of an element used by the DO-IRP protocol.
Spec: 6.2.2 MESSAGE HEADER
The Message Header contains the common data elements among any protocol operation. It has a fixed size of 24 octets and consists of eight fields.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 .—————————————————————.
| OpCode |
|---|
| ResponseCode |
| ————————————————————— |
| OpFlag |
| ————————————————————— |
| SiteInfoSerialNumber |
| ————————————————————— |
| ExpirationTime |
| ————————————————————— |
| BodyLength |
| ‘—————————————————————’ |
Figure 6.2.2: Message Header Fields
Every message that is not truncated must have a Message Header. If a message has to be truncated for its transmission, the Message Header must appear in the first truncated portion of the message.
This is different from the Message Envelope, which appears in each truncated portion of the message.