← Back to packages

Package doirp_v3.v1

Service DoIrpService

Message DoidRecord

Message Ttl

Message Element

Message MessageHeader

Message Error

Message ResolveResult

Message ServiceReferral

Message ResolveRequest

Message ResolveResponse

Message AddElementRequest

Message AddElementResponse

Message RemoveElementRequest

Message RemoveElementResponse

Message ModifyElementRequest

Message ModifyElementResponse

Message CreateDoidRequest

Message CreateDoidResponse

Message DeleteDoidRequest

Message DeleteDoidResponse

Message ChallengeResponseRequest

Message ChallengeResponseResponse

Enum OpCode

Enum ResponseCode

Enum TtlType

Enum Permission

Enum Type

Enum AuthType

Services

service DoIrpService doirp_v3/v1/service.proto

规范:7.2 查询操作 (OC_RESOLUTION) 客户端向负责的服务器发送查询请求,服务器返回查询结果。用于获取指定标识符上的元素。

规范:7.7.1 添加元素 (OC_ADD_ELEMENT) 客户端向负责服务器发送 ADD_ELEMENT 请求,消息头 设为 OC_ADD_ELEMENT。

规范:7.7.2 删除元素 (OC_REMOVE_ELEMENT) 客户端发送 REMOVE_ELEMENT 请求,消息头 设为 OC_REMOVE_ELEMENT。

规范:7.7.3 修改元素 (OC_MODIFY_ELEMENT) 客户端发送 MODIFY_ELEMENT 请求修改已有元素,消息头 设为 OC_MODIFY_ELEMENT。

规范:7.7.4 创建标识符 (OC_CREATE_ID) 客户端发送 CREATE_ID 请求创建新标识符。

规范:7.7.5 删除标识符 (OC_DELETE_ID) 客户端发送 DELETE_ID 请求删除已有标识符,消息头 设为 OC_DELETE_ID。

规范:7.5 客户端认证 当查询含 ADMIN_READ 且无 PUBLIC_READ 权限的元素时,需认证客户端为管理员;所有需要管理员权限的 管理请求亦需认证。

认证包含多次消息交互:服务器向客户端发送挑战,客户端返回挑战响应,若为秘密密钥认证,还包括 验证请求与响应。会话通过唯一 关联;服务器需维护挑战、响应及原始请求等状态。

认证起于服务器带挑战的响应;客户端以挑战响应回复。服务器验证响应,可直接校验签名,或向持有 管理员密钥的验证服务器发送验证请求。挑战/响应旨在证明客户端持有管理员私钥或密钥。失败则返回 RC_AUTHEN_FAILED。

认证成功后还需检查权限;不足则返回 RC_INVALID_ADMIN。认证侧重身份校验(MAC 或数字签名),而非 加密。

7.5.1 服务器向客户端的 CHALLENGE:保留原 设为 RC_AUTH_NEEDED;如无 既有会话,分配非零 ,并设置 的 RD 位(见 6.2.2.3)。消息体: (见 6.2.3) :4 字节长度 + 随机串(不少于 16 字节)。 客户端可请求服务器为挑战签名;若签名验证失败,应丢弃响应并重发请求。

7.5.2 客户端到服务器的 CHALLENGE_RESPONSE: 设为 OC_CHALLENGE_RESPONSE, 设为 0。

Messages

message DoidRecord doirp_v3/v1/core.proto

规范:4 数据模型 每个标识符有一组元素(Identifier Record),数量不限。记录可包含签名元素;消息也可签名。 每个元素有唯一类型标识符。服务器维护记录并在解析请求时返回。可按需只返回特定元素。

4.1 Identifier Record 记录由一个或多个元素组成,每个包含类型、值、唯一索引、TTL、权限等。预定义类型见 4.3。 示例(略):标识符包含多个元素,索引区分,同类型也唯一;TTL 表示缓存时间,权限控制读写。

Field Type Description
1 doid string

2 elements repeated doirp_v3.v1.Element

3 created_at uint32

The following two timestamp fields are not in the spec, added for convenience. Both are 4-byte unsigned integers representing the elapsed time since 00:00:00 UTC, January 1970 in seconds. the created time of the identifier

4 updated_at uint32

last time the identifier was updated at the server

message Ttl (Nested in doirp_v3.v1.Element ) doirp_v3/v1/core.proto

规范: TTL:1 字节类型 + 4 字节值。0 表示仅本次事务使用不缓存;非 0 需结合类型解释: 相对 TTL(0x00):自客户端获取后可缓存的秒数(若为负则不缓存); 绝对 TTL(0x01):自 1970-01-01 起的过期时间(秒)。

Field Type Description
1 type doirp_v3.v1.Element.Ttl.TtlType
2 seconds uint32

interpreted as int32 when type is 1

message Element doirp_v3/v1/core.proto

规范:4.1 Identifier Record 元素可视为一组字段,下面定义并给出 DO-IRP 的标准二进制编码。

Field Type Description
1 index uint32

规范: 32 位无符号整数,唯一区分记录内的元素。索引 0 预留;兼容性考虑,避免使用 >=2^31 的索引。

2 type string

规范: UTF8 字符串,指定值字段的类型标识符。推荐使用可经 DO-IRP 解析的类型标识符,详见第 9 章。 不应以 “.” 结尾;但在查询前缀时可用以 “.” 结尾的前缀表示类型层级(如查询 "a.b." 匹配 a.b.x 等),见 7.2。

3 permission uint32

8 位权限位掩码,详见 Permission

4 ttl doirp_v3.v1.Element.Ttl

元素 TTL,见 Ttl

5 created_at uint32

4 字节无符号整数,记录创建时间(秒,自 1970-01-01);非规范字段,便于使用。

6 updated_at uint32

规范: 4 字节无符号整数,记录元素在服务器的最后更新时间(秒,自 1970-01-01)。

7 value bytes

规范:字节序列(前置 4 字节长度),其语法/格式/语义由 决定。 用于 IRS 用户自定义类型;标准类型使用下方专用字段。

8 hs_admin doirp_v3.v1.element.HsAdmin

规范:4.3.1 HS_ADMIN(管理员),详见 element/hs_admin.proto

9 hs_site doirp_v3.v1.element.HsSite

规范:4.3.2 HS_SITE、4.3.3 HS_SITE.PREFIX,详见 element/hs_site.proto

10 hs_serv doirp_v3.v1.element.HsServ

规范:4.3.4 HS_SERV、4.3.5 HS_SERV.PREFIX,详见 element/hs_serv.proto

11 hs_pubkey doirp_v3.v1.element.HsPubkey

规范:4.3.6 HS_PUBKEY,详见 element/hs_pubkey.proto

12 hs_seckey bytes

出于安全至少 16 字节

13 hs_vlist repeated doirp_v3.v1.common.ElementRef

规范:4.3.8 HS_VLIST 列表引用其他标识符中的元素,可在不改引用记录的情况下更新被引用元素。 :4 字节数量 + 多个引用(UTF8 标识符 + 4 字节索引,可指向同一或其他标识符)。 可用于定义管理员组;引用格式 :,可嵌套组,需避免循环或指向不存在的元素。

14 hs_alias string

被引用的 DOID

message MessageHeader doirp_v3/v1/core.proto

规范:6.2.2 MESSAGE HEADER 消息头包含各操作通用字段,固定 24 字节,含 8 个字段(图 6.2.2)。非截断消息必须带消息头;若消息被截断,消息头出现在首块(不同于每块都带的 Message Envelope)。

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 | RecursionCount| | |---------------------------------------------------------------| | ExpirationTime | |---------------------------------------------------------------| | BodyLength | '---------------------------------------------------------------'

Figure 6.2.2: Message Header Fields

OpCode op_code = 1;

Field Type Description
2 response_code doirp_v3.v1.ResponseCode
3 op_flag uint32

规范:6.2.2.3 32 位位掩码,定义控制选项:

1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .---------------------------------------------------------------. |AT |CT |ENC|REC|CA |CN |KC |PO |RD |OWE|MNS|DNR| Reserved | |---------------------------------------------------------------| | Reserved | '---------------------------------------------------------------'

Figure 6.2.2.3: Option flags in the field

AT:主站点位,请求/响应来自主站点。 CT:签名位,请求要求服务器签名(6.2.4);响应置位表示已签名,验证失败应丢弃。 ENC:加密位,请求要求用会话密钥加密响应。 REC:递归位,请求可由服务器转发;可转发或返回 RC_SERVER_NOT_RESP。 CA:保留。 CN:连续位,表示同一请求/响应还有后续消息(区别于传输截断)。 KC:保持连接位,请求对端保持 TCP 连接。 PO:仅公共读取位(查询用)。置位则仅要 PUBLIC_READ 元素,未置位则可返回需 ADMIN_READ 的元素,需认证。 RD:请求摘要位,置位则响应携带请求摘要用于完整性校验(见 6.2.3)。 OWE:存在则覆盖,用于 CREATE_ID/ADD_ELEMENT。 MNS:生成新后缀,创建标识符时将请求中的 identifier 视为前缀并追加新后缀。 DNR:不转介,原本应转介时改为本机处理。

4 site_info_serial_number uint32

规范:6.2.2.4 2 字节无符号整数,指向客户端使用的 HS_SITE 序列号。服务器可据此判断客户端信息是否过期; 若可行应尽量处理并在响应中给出最新序列号;因过期无法处理时返回 RC_EXPIRED_SITE_INFO。

5 recursion_count uint32

规范:6.2.2.5 1 字节无符号整数,表示服务递归次数。客户端请求为 0;服务器代转时递增 1,响应保持相同。 应配置上限避免无限递归。

6 expiration_time uint32

规范:6.2.2.6 4 字节无符号整数,消息过期时间(秒,自 1970-01-01),0 表示无过期。

message Error doirp_v3/v1/service.proto

规范:7.3 服务器错误响应 处理请求出错时,服务器返回错误消息,消息头保留原 ,并用 6.2.2.2 定义的 标识错误。消息体可为空,否则包含(除非另有说明): [] []

Field Type Description
1 message string

规范: UTF8 字符串,描述错误。

2 element_indexes repeated uint32

规范: 可选。列表中的每个索引为 4 字节无符号整数,指向导致错误的元素。 示例:请求添加索引 1/2/3 的元素,但 1、2 已存在,服务器可返回 RC_ELEMENT_ALREADY_EXIST, 并在 IndexList 中列出 1、2。服务器无需返回完整索引列表。

message ResolveResult doirp_v3/v1/service.proto

Field Type Description
1 record doirp_v3.v1.DoidRecord

message ServiceReferral doirp_v3/v1/service.proto

规范:7.4 服务转介与前缀转介 当请求的标识符由其他服务管理时,服务器可返回转介(指向合适的 DO-IRP 服务)或返回 RC_SERVER_NOT_RESP。 当标识符归属迁移时亦可用转介;前缀转介用于指示某前缀可在另一服务解析/管理。

服务器依据 HS_SITE.PREFIX/HS_SERV.PREFIX 判断是否返回 RC_PREFIX_REFERRAL。例如解析 0.NA/. 时若缺少相关信息但拥有 0.NA/,且该记录包含 HS_SITE.PREFIX/HS_SERV.PREFIX,则返回这些元素。

具体策略由服务器配置决定,规范未限定何时发送何种转介。

转介消息头保留原 设为 RC_SERVICE_REFERRAL 或 RC_PREFIX_REFERRAL; 消息体: [] []

Field Type Description
1 referral_doid string

规范: 维护转介信息的标识符(如服务标识符)。

2 elements repeated doirp_v3.v1.Element

规范: 可选;若给出 则必须为空。否则包含 HS_SITE/HS_SERV(或前缀转介时 HS_SITE.PREFIX/HS_SERV.PREFIX)。

message ResolveRequest doirp_v3/v1/service.proto

规范:7.2.1 查询请求 (OC_RESOLUTION) 消息头 =OC_RESOLUTION,=0。 消息体:

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 doid string

规范: 需解析的标识符(6.1.4)

3 indexes repeated uint32

规范: 列出要检索的索引;空数组表示获取全部索引。

4 types repeated string

规范: 中每个 UTF8 字符串指定一种类型。服务器返回类型匹配的元素;若以 "." 结尾,则返回该类型层级下所有元素。 为空表示不按类型过滤。

message ResolveResponse doirp_v3/v1/service.proto

规范: 7.2.2 查询成功响应:消息头 =OC_RESOLUTION,=RC_SUCCESS。 消息体:[] 为查询的标识符; 为元素列表(4 字节数量+元素编码,见 4.1),无匹配元素则为 0。

7.2.3 查询失败响应:服务器无法满足请求时返回错误(格式见 7.3)。 例如标识符不存在则返回 RC_ID_NOT_FOUND(空消息体)。 若服务器不负责该标识符,不应返回 RC_ID_NOT_FOUND;应转介(7.4)或返回 RC_SERVER_NOT_RESP。 标识符存在但无匹配元素 -> RC_ELEMENT_NOT_FOUND。 过载 -> RC_SERVER_BUSY(空体)。 未置 PO 且请求特定元素、该元素无 PUBLIC_READ/ADMIN_READ -> RC_ACCESS_DENIED。 未置 PO 且查询含 ADMIN_READ、无 PUBLIC_READ 的元素时,服务器可要求管理员认证(见 7.5)。

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 error doirp_v3.v1.Error
3 result doirp_v3.v1.ResolveResult

contains and

4 service_referral doirp_v3.v1.ServiceReferral

a service referral (see section 7.4)

message AddElementRequest doirp_v3/v1/service.proto

规范:7.7.1 添加元素 (OC_ADD_ELEMENT) 消息头 =OC_ADD_ELEMENT;消息体:

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 doid string

规范: 标识符。

3 elements repeated doirp_v3.v1.Element

规范: 4 字节数量 + 元素列表。

message AddElementResponse doirp_v3/v1/service.proto

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 error doirp_v3.v1.Error

message RemoveElementRequest doirp_v3/v1/service.proto

规范:7.7.2 删除元素 (OC_REMOVE_ELEMENT) 消息头 =OC_REMOVE_ELEMENT;消息体:

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 doid string

规范: 需删除元素的标识符。

3 indexes repeated uint32

规范: 4 字节数量 + 待删除元素索引列表(每个索引 4 字节无符号整数)。

message RemoveElementResponse doirp_v3/v1/service.proto

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 error doirp_v3.v1.Error

message ModifyElementRequest doirp_v3/v1/service.proto

规范:7.7.3 修改元素 (OC_MODIFY_ELEMENT) 消息头 =OC_MODIFY_ELEMENT;消息体:

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 doid string

规范: 需修改元素的标识符。

3 elements repeated doirp_v3.v1.Element

规范: 4 字节数量 + 元素列表;每个元素替换同索引的现有元素。

message ModifyElementResponse doirp_v3/v1/service.proto

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 error doirp_v3.v1.Error

message CreateDoidRequest doirp_v3/v1/service.proto

规范:7.7.4 创建标识符 (OC_CREATE_ID) 消息头 =OC_CREATE_ID;消息体:

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 record doirp_v3.v1.DoidRecord

包含

message CreateDoidResponse doirp_v3/v1/service.proto

规范:7.7.4 创建标识符响应 消息体:[] 为实际创建的标识符(便于 MNS 时获知结果)。

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 error doirp_v3.v1.Error
3 doid string

规范:

message DeleteDoidRequest doirp_v3/v1/service.proto

规范:7.7.5 删除标识符 (OC_DELETE_ID) 消息头 =OC_DELETE_ID;消息体:。 需认证具备 DELETE_ID 权限;成功则删除标识符及其元素并返回 RC_SUCCESS。 事务性:任一步失败则回滚;删除不存在的标识符 -> RC_ID_NOT_EXIST。 可用于删除前缀标识符。

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 doid string

规范: 待删除的标识符。

message DeleteDoidResponse doirp_v3/v1/service.proto

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 error doirp_v3.v1.Error

message ChallengeResponseRequest doirp_v3/v1/service.proto

规范:7.5.2 客户端到服务器的 CHALLENGE-RESPONSE 消息头 =OC_CHALLENGE_RESPONSE,=0,且保留挑战中的 。 消息体:

Field Type Description
1 header doirp_v3.v1.MessageHeader
2 auth_type doirp_v3.v1.ChallengeResponseRequest.AuthType

规范: 客户端使用的认证密钥类型:"HS_SECKEY"(秘密密钥)或 "HS_PUBKEY"(公钥)。

3 key_ref doirp_v3.v1.common.ElementRef

规范: 含管理员公钥/密钥的标识符; 对应元素索引(4 字节无符号整数)。

5 challenge_response bytes

规范: 4 字节长度 + 字节数组,包含基于服务器挑战的 MAC 或数字签名。 为 CHALLENGE 中的 (除去长度前缀)与 (除去标识字节)拼接。

message ChallengeResponseResponse doirp_v3/v1/service.proto

Field Type Description
1 header doirp_v3.v1.MessageHeader

Enums

enum OpCode doirp_v3/v1/core.proto

规范:6.2.2.1 4 字节无符号整数,指示要执行的操作。具体含义见第 7 章。请求用 告知服务器要做什么, 响应需保持与请求相同的 ,并通过 表示结果。

Name Number Description
OP_CODE_RESERVED 0

Reserved

OP_CODE_RESOLUTION 1

Identifier query

OP_CODE_GET_SITEINFO 2

Get HS_SITE element

OP_CODE_CREATE_ID 100

Create new identifier

OP_CODE_DELETE_ID 101

Delete existing identifier

OP_CODE_ADD_ELEMENT 102

Add element(s)

OP_CODE_REMOVE_ELEMENT 103

Remove element(s)

OP_CODE_MODIFY_ELEMENT 104

Modify element(s)

OP_CODE_LIST_IDS 105

List identifiers

OP_CODE_LIST_DERIVED_PREFIXES 106

List derived prefixes

OP_CODE_CHALLENGE_RESPONSE 200

Response to challenge

OP_CODE_VERIFY_RESPONSE 201

Verify challenge response

OP_CODE_HOME_PREFIX 300

Home prefix (instruct server to consider itself responsible for the prefix)

OP_CODE_UNHOME_PREFIX 301

Unhome prefix

OP_CODE_LIST_HOMED_PREFIXES 302

List homed prefixes

OP_CODE_SESSION_SETUP 400

Session setup request

OP_CODE_SESSION_TERMINATE 401

Session termination request

enum ResponseCode doirp_v3/v1/core.proto

规范:6.2.2.2 4 字节无符号整数,服务器用来表明请求结果。详见第 7 章。 请求时 =0,响应时为非零表示结果,如 RC_SUCCESS 表示成功。

Name Number Description
RESPONSE_CODE_RESERVED 0

Reserved for request

RESPONSE_CODE_SUCCESS 1

Success response

RESPONSE_CODE_ERROR 2

General error

RESPONSE_CODE_SERVER_BUSY 3

Server too busy to respond

RESPONSE_CODE_PROTOCOL_ERROR 4

Corrupted or unrecognizable message

RESPONSE_CODE_OPERATION_DENIED 5

Unsupported operation

RESPONSE_CODE_RECUR_LIMIT_EXCEEDED 6

Too many recursions for the request

RESPONSE_CODE_SERVER_BACKUP 7

Server storage is temporarily read-only as for backup

RESPONSE_CODE_ID_NOT_FOUND 100

Identifier not found

RESPONSE_CODE_ID_ALREADY_EXIST 101

Identifier already exists

RESPONSE_CODE_INVALID_ID 102

Encoding (or syntax) error

RESPONSE_CODE_ELEMENT_NOT_FOUND 200

Element not found

RESPONSE_CODE_ELEMENT 201

ALREADY_EXIST Element already exists

RESPONSE_CODE_ELEMENT_INVALID 202

Invalid Element

RESPONSE_CODE_EXPIRED_SITE_INFO 300

SITE_INFO out of date

RESPONSE_CODE_SERVER_NOT_RESP 301

Server not responsible

RESPONSE_CODE_SERVICE_REFERRAL 302

Server referral

RESPONSE_CODE_PREFIX_REFERRAL 303

Prefix referral

RESPONSE_CODE_INVALID_ADMIN 400

Not an admin for operation

RESPONSE_CODE_ACCESS_DENIED 401

Insufficient permissions

RESPONSE_CODE_AUTHEN_NEEDED 402

Authentication required

RESPONSE_CODE_AUTHEN_FAILED 403

Failed to authenticate

RESPONSE_CODE_INVALID_CREDENTIAL 404

Invalid message credential

RESPONSE_CODE_AUTHEN_TIMEOUT 405

Authentication timed out

RESPONSE_CODE_UNABLE_TO_AUTHEN 406

Unexpected error authenticating

RESPONSE_CODE_SESSION_TIMEOUT 500

Session expired

RESPONSE_CODE_SESSION_FAILED 501

Unable to establish session

RESPONSE_CODE_SESSION_KEY_INVALID 502

Invalid session key or session authentication failure

RESPONSE_CODE_SESSION_MSG_REJECTED 505

Potential session replay attack

enum TtlType doirp_v3/v1/core.proto

Name Number Description
TTL_TYPE_RELATIVE 0
TTL_TYPE_ABSOLUTE 1

enum Permission doirp_v3/v1/core.proto

元素权限位

Name Number Description
PERMISSION_UNSPECIFIED 0
PERMISSION_PUBLIC_WRITE 1

规范:PUBLIC_WRITE (0x01) 允许任何人修改/删除。

PERMISSION_PUBLIC_READ 2

规范:PUBLIC_READ (0x02) 允许任何人读取。

PERMISSION_ADMIN_WRITE 4

规范:ADMIN_WRITE (0x04) 具备 Modify/Delete 权限的已认证管理员可写,见 4.3.1。

PERMISSION_ADMIN_READ 8

规范:ADMIN_READ (0x08) 具备 Authorized_Read 的已认证管理员可读。

enum Type doirp_v3/v1/core.proto

用于生成常量,不直接用于 .proto

Name Number Description
TYPE_UNSPECIFIED 0
TYPE_HS_ADMIN 1

0.TYPE/HS_ADMIN

TYPE_HS_SITE 2

0.TYPE/HS_SITE

TYPE_HS_SITE_PREFIX 3

0.TYPE/HS_SITE.PREFIX

TYPE_HS_SERV 4

0.TYPE/HS_SERV

TYPE_HS_SERV_PREFIX 5

0.TYPE/HS_SERV.PREFIX

TYPE_HS_PUBKEY 6

0.TYPE/HS_PUBKEY

TYPE_HS_SECKEY 7

0.TYPE/HS_SECKEY

TYPE_HS_VLIST 8

0.TYPE/HS_VLIST

TYPE_HS_ALIAS 9

0.TYPE/HS_ALIAS

TYPE_HS_CERT 10

0.TYPE/HS_CERT

TYPE_HS_SIGNATURE 11

0.TYPE/HS_SIGNATURE

enum AuthType doirp_v3/v1/service.proto

Name Number Description
AUTH_TYPE_HS_SECKEY 0
AUTH_TYPE_HS_PUBKEY 1