mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 22:58:50 +01:00
hs: Remove hs_intro_auth_key_type_t enum
Like the previous commit about the INTRODUCE_ACK status code, change all auth key type to use the one defined in the trunnel file. Standardize the use of these auth type to a common ABI. Part of #30454 Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
dcc1d8d15b
commit
79cfe2ddd7
8 changed files with 29 additions and 24 deletions
|
@ -441,7 +441,8 @@ introduce1_set_auth_key(trn_cell_introduce1_t *cell,
|
|||
tor_assert(cell);
|
||||
tor_assert(data);
|
||||
/* There is only one possible type for a non legacy cell. */
|
||||
trn_cell_introduce1_set_auth_key_type(cell, HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
trn_cell_introduce1_set_auth_key_type(cell,
|
||||
TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
trn_cell_introduce1_set_auth_key_len(cell, ED25519_PUBKEY_LEN);
|
||||
trn_cell_introduce1_setlen_auth_key(cell, ED25519_PUBKEY_LEN);
|
||||
memcpy(trn_cell_introduce1_getarray_auth_key(cell),
|
||||
|
@ -514,7 +515,7 @@ hs_cell_build_establish_intro(const char *circ_nonce,
|
|||
|
||||
/* Set AUTH_KEY_TYPE: 2 means ed25519 */
|
||||
trn_cell_establish_intro_set_auth_key_type(cell,
|
||||
HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
|
||||
/* Set AUTH_KEY and AUTH_KEY_LEN field. Must also set byte-length of
|
||||
* AUTH_KEY to match */
|
||||
|
|
|
@ -75,7 +75,7 @@ verify_establish_intro_cell(const trn_cell_establish_intro_t *cell,
|
|||
/* We only reach this function if the first byte of the cell is 0x02 which
|
||||
* means that auth_key_type is of ed25519 type, hence this check should
|
||||
* always pass. See hs_intro_received_establish_intro(). */
|
||||
if (BUG(cell->auth_key_type != HS_INTRO_AUTH_KEY_TYPE_ED25519)) {
|
||||
if (BUG(cell->auth_key_type != TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -315,10 +315,10 @@ hs_intro_received_establish_intro(or_circuit_t *circ, const uint8_t *request,
|
|||
* ESTABLISH_INTRO and pass it to the appropriate cell handler */
|
||||
const uint8_t first_byte = request[0];
|
||||
switch (first_byte) {
|
||||
case HS_INTRO_AUTH_KEY_TYPE_LEGACY0:
|
||||
case HS_INTRO_AUTH_KEY_TYPE_LEGACY1:
|
||||
case TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0:
|
||||
case TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1:
|
||||
return rend_mid_establish_intro_legacy(circ, request, request_len);
|
||||
case HS_INTRO_AUTH_KEY_TYPE_ED25519:
|
||||
case TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519:
|
||||
return handle_establish_intro(circ, request, request_len);
|
||||
default:
|
||||
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
||||
|
@ -396,7 +396,7 @@ validate_introduce1_parsed_cell(const trn_cell_introduce1_t *cell)
|
|||
/* The auth key of an INTRODUCE1 should be of type ed25519 thus leading to a
|
||||
* known fixed length as well. */
|
||||
if (trn_cell_introduce1_get_auth_key_type(cell) !=
|
||||
HS_INTRO_AUTH_KEY_TYPE_ED25519) {
|
||||
TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519) {
|
||||
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
||||
"Rejecting invalid INTRODUCE1 cell auth key type. "
|
||||
"Responding with NACK.");
|
||||
|
|
|
@ -12,13 +12,6 @@
|
|||
#include "crypto_curve25519.h"
|
||||
#include "torcert.h"
|
||||
|
||||
/* Authentication key type in an ESTABLISH_INTRO cell. */
|
||||
typedef enum {
|
||||
HS_INTRO_AUTH_KEY_TYPE_LEGACY0 = 0x00,
|
||||
HS_INTRO_AUTH_KEY_TYPE_LEGACY1 = 0x01,
|
||||
HS_INTRO_AUTH_KEY_TYPE_ED25519 = 0x02,
|
||||
} hs_intro_auth_key_type_t;
|
||||
|
||||
/* Object containing introduction point common data between the service and
|
||||
* the client side. */
|
||||
typedef struct hs_intropoint_t {
|
||||
|
|
|
@ -50,7 +50,7 @@ test_gen_establish_intro_cell(void *arg)
|
|||
/* Check the contents of the cell */
|
||||
{
|
||||
/* First byte is the auth key type: make sure its correct */
|
||||
tt_int_op(buf[0], OP_EQ, HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
tt_int_op(buf[0], OP_EQ, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
/* Next two bytes is auth key len */
|
||||
tt_int_op(ntohs(get_uint16(buf+1)), OP_EQ, ED25519_PUBKEY_LEN);
|
||||
/* Skip to the number of extensions: no extensions */
|
||||
|
|
|
@ -138,7 +138,7 @@ helper_create_introduce1_cell(void)
|
|||
{
|
||||
size_t auth_key_len = sizeof(auth_key_kp.pubkey);
|
||||
trn_cell_introduce1_set_auth_key_type(cell,
|
||||
HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519);
|
||||
trn_cell_introduce1_set_auth_key_len(cell, auth_key_len);
|
||||
trn_cell_introduce1_setlen_auth_key(cell, auth_key_len);
|
||||
uint8_t *auth_key_ptr = trn_cell_introduce1_getarray_auth_key(cell);
|
||||
|
@ -749,7 +749,7 @@ test_introduce1_validation(void *arg)
|
|||
ret = validate_introduce1_parsed_cell(cell);
|
||||
tt_int_op(ret, OP_EQ, -1);
|
||||
/* Reset is to correct value and make sure it's correct. */
|
||||
cell->auth_key_type = HS_INTRO_AUTH_KEY_TYPE_ED25519;
|
||||
cell->auth_key_type = TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519;
|
||||
ret = validate_introduce1_parsed_cell(cell);
|
||||
tt_int_op(ret, OP_EQ, 0);
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ trn_cell_introduce1_new(void)
|
|||
trn_cell_introduce1_t *val = trunnel_calloc(1, sizeof(trn_cell_introduce1_t));
|
||||
if (NULL == val)
|
||||
return NULL;
|
||||
val->auth_key_type = TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519;
|
||||
return val;
|
||||
}
|
||||
|
||||
|
@ -121,7 +122,7 @@ trn_cell_introduce1_get_auth_key_type(const trn_cell_introduce1_t *inp)
|
|||
int
|
||||
trn_cell_introduce1_set_auth_key_type(trn_cell_introduce1_t *inp, uint8_t val)
|
||||
{
|
||||
if (! ((val == 0 || val == 1 || val == 2))) {
|
||||
if (! ((val == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519 || val == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0 || val == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1))) {
|
||||
TRUNNEL_SET_ERROR_CODE(inp);
|
||||
return -1;
|
||||
}
|
||||
|
@ -295,7 +296,7 @@ trn_cell_introduce1_check(const trn_cell_introduce1_t *obj)
|
|||
return "Object was NULL";
|
||||
if (obj->trunnel_error_code_)
|
||||
return "A set function failed on this object";
|
||||
if (! (obj->auth_key_type == 0 || obj->auth_key_type == 1 || obj->auth_key_type == 2))
|
||||
if (! (obj->auth_key_type == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519 || obj->auth_key_type == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0 || obj->auth_key_type == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1))
|
||||
return "Integer out of bounds";
|
||||
if (TRUNNEL_DYNARRAY_LEN(&obj->auth_key) != obj->auth_key_len)
|
||||
return "Length mismatch for auth_key";
|
||||
|
@ -319,7 +320,7 @@ trn_cell_introduce1_encoded_len(const trn_cell_introduce1_t *obj)
|
|||
/* Length of u8 legacy_key_id[TRUNNEL_SHA1_LEN] */
|
||||
result += TRUNNEL_SHA1_LEN;
|
||||
|
||||
/* Length of u8 auth_key_type IN [0, 1, 2] */
|
||||
/* Length of u8 auth_key_type IN [TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1] */
|
||||
result += 1;
|
||||
|
||||
/* Length of u16 auth_key_len */
|
||||
|
@ -367,7 +368,7 @@ trn_cell_introduce1_encode(uint8_t *output, const size_t avail, const trn_cell_i
|
|||
memcpy(ptr, obj->legacy_key_id, TRUNNEL_SHA1_LEN);
|
||||
written += TRUNNEL_SHA1_LEN; ptr += TRUNNEL_SHA1_LEN;
|
||||
|
||||
/* Encode u8 auth_key_type IN [0, 1, 2] */
|
||||
/* Encode u8 auth_key_type IN [TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1] */
|
||||
trunnel_assert(written <= avail);
|
||||
if (avail - written < 1)
|
||||
goto truncated;
|
||||
|
@ -451,11 +452,11 @@ trn_cell_introduce1_parse_into(trn_cell_introduce1_t *obj, const uint8_t *input,
|
|||
memcpy(obj->legacy_key_id, ptr, TRUNNEL_SHA1_LEN);
|
||||
remaining -= TRUNNEL_SHA1_LEN; ptr += TRUNNEL_SHA1_LEN;
|
||||
|
||||
/* Parse u8 auth_key_type IN [0, 1, 2] */
|
||||
/* Parse u8 auth_key_type IN [TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0, TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1] */
|
||||
CHECK_REMAINING(1, truncated);
|
||||
obj->auth_key_type = (trunnel_get_uint8(ptr));
|
||||
remaining -= 1; ptr += 1;
|
||||
if (! (obj->auth_key_type == 0 || obj->auth_key_type == 1 || obj->auth_key_type == 2))
|
||||
if (! (obj->auth_key_type == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519 || obj->auth_key_type == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0 || obj->auth_key_type == TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1))
|
||||
goto fail;
|
||||
|
||||
/* Parse u16 auth_key_len */
|
||||
|
|
|
@ -15,6 +15,9 @@ struct link_specifier_st;
|
|||
#define TRUNNEL_HS_INTRO_ACK_STATUS_SUCCESS 0
|
||||
#define TRUNNEL_HS_INTRO_ACK_STATUS_UNKNOWN_ID 1
|
||||
#define TRUNNEL_HS_INTRO_ACK_STATUS_BAD_FORMAT 2
|
||||
#define TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0 0
|
||||
#define TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1 1
|
||||
#define TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519 2
|
||||
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_INTRODUCE1)
|
||||
struct trn_cell_introduce1_st {
|
||||
uint8_t legacy_key_id[TRUNNEL_SHA1_LEN];
|
||||
|
|
|
@ -17,13 +17,20 @@ const TRUNNEL_HS_INTRO_ACK_STATUS_SUCCESS = 0x0000;
|
|||
const TRUNNEL_HS_INTRO_ACK_STATUS_UNKNOWN_ID = 0x0001;
|
||||
const TRUNNEL_HS_INTRO_ACK_STATUS_BAD_FORMAT = 0x0002;
|
||||
|
||||
/* Authentication key type. */
|
||||
const TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0 = 0x00;
|
||||
const TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1 = 0x01;
|
||||
const TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519 = 0x02;
|
||||
|
||||
/* INTRODUCE1 payload. See details in section 3.2.1. */
|
||||
struct trn_cell_introduce1 {
|
||||
/* Always zeroed. MUST be checked explicitly by the caller. */
|
||||
u8 legacy_key_id[TRUNNEL_SHA1_LEN];
|
||||
|
||||
/* Authentication key material. */
|
||||
u8 auth_key_type IN [0x00, 0x01, 0x02];
|
||||
u8 auth_key_type IN [TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY0,
|
||||
TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_LEGACY1,
|
||||
TRUNNEL_HS_INTRO_AUTH_KEY_TYPE_ED25519];
|
||||
u16 auth_key_len;
|
||||
u8 auth_key[auth_key_len];
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue