On Thu, Jul 27, 2023 at 03:31:32PM +0200, Claudio Jeker wrote: > Use ibuf_data() instead of direct access to ibuf->buf. > In some cases use ibuf_add_buf(). > > -- > :wq Claudio
ok tobhe@ > > Index: crypto.c > =================================================================== > RCS file: /cvs/src/sbin/iked/crypto.c,v > retrieving revision 1.44 > diff -u -p -r1.44 crypto.c > --- crypto.c 6 Jun 2023 13:27:49 -0000 1.44 > +++ crypto.c 27 Jul 2023 13:28:59 -0000 > @@ -327,7 +327,7 @@ hash_free(struct iked_hash *hash) > void > hash_init(struct iked_hash *hash) > { > - HMAC_Init_ex(hash->hash_ctx, hash->hash_key->buf, > + HMAC_Init_ex(hash->hash_ctx, ibuf_data(hash->hash_key), > ibuf_length(hash->hash_key), hash->hash_priv, NULL); > } > > @@ -572,7 +572,7 @@ cipher_init(struct iked_cipher *encr, in > encr->encr_saltlength), encr->encr_saltlength); > if (nonce == NULL) > return (-1); > - if (ibuf_add(nonce, ibuf_data(encr->encr_iv) , > ibuf_size(encr->encr_iv)) != 0) > + if (ibuf_add_buf(nonce, encr->encr_iv) != 0) > goto done; > if (EVP_CipherInit_ex(encr->encr_ctx, NULL, NULL, > ibuf_data(encr->encr_key), ibuf_data(nonce), enc) != 1) > Index: dh.c > =================================================================== > RCS file: /cvs/src/sbin/iked/dh.c,v > retrieving revision 1.32 > diff -u -p -r1.32 dh.c > --- dh.c 3 Dec 2022 22:34:35 -0000 1.32 > +++ dh.c 27 Jul 2023 08:27:36 -0000 > @@ -401,7 +401,7 @@ dh_create_exchange(struct dh_group *grou > if (buf == NULL) > return -1; > *bufp = buf; > - return (group->exchange(group, buf->buf)); > + return (group->exchange(group, ibuf_data(buf))); > } > > int > @@ -419,7 +419,7 @@ dh_create_shared(struct dh_group *group, > if (buf == NULL) > return -1; > *secretp = buf; > - return (group->shared(group, buf->buf, exchange->buf)); > + return (group->shared(group, ibuf_data(buf), ibuf_data(exchange))); > } > > int > @@ -801,7 +801,7 @@ kemsx_create_exchange2(struct dh_group * > buf = ibuf_new(NULL, need); > if (buf == NULL) > return -1; > - cp = buf->buf; > + cp = ibuf_data(buf); > memcpy(cp, kemsx->public, > crypto_kem_sntrup761_PUBLICKEYBYTES); > cp += crypto_kem_sntrup761_PUBLICKEYBYTES; > @@ -819,8 +819,8 @@ kemsx_create_exchange2(struct dh_group * > buf = ibuf_new(NULL, need); > if (buf == NULL) > return -1; > - cp = buf->buf; > - pk = iexchange->buf; > + cp = ibuf_data(buf); > + pk = ibuf_data(iexchange); > crypto_kem_sntrup761_enc(cp, kemsx->kemkey, pk); > cp += crypto_kem_sntrup761_CIPHERTEXTBYTES; > } > @@ -850,7 +850,7 @@ kemsx_create_shared2(struct dh_group *gr > return (-1); > > have = ibuf_size(exchange); > - cp = exchange->buf; > + cp = ibuf_data(exchange); > if (kemsx->initiator) { > /* input */ > need = crypto_kem_sntrup761_CIPHERTEXTBYTES + > @@ -878,7 +878,7 @@ kemsx_create_shared2(struct dh_group *gr > EVP_DigestInit_ex(ctx, EVP_sha512(), NULL) != 1 || > EVP_DigestUpdate(ctx, kemsx->kemkey, sizeof(kemsx->kemkey)) != 1 || > EVP_DigestUpdate(ctx, shared, sizeof(shared)) != 1 || > - EVP_DigestFinal_ex(ctx, buf->buf, &len) != 1) { > + EVP_DigestFinal_ex(ctx, ibuf_data(buf), &len) != 1) { > EVP_MD_CTX_free(ctx); > ibuf_free(buf); > return (-1); > Index: ikev2.c > =================================================================== > RCS file: /cvs/src/sbin/iked/ikev2.c,v > retrieving revision 1.374 > diff -u -p -r1.374 ikev2.c > --- ikev2.c 18 Jul 2023 15:07:41 -0000 1.374 > +++ ikev2.c 27 Jul 2023 13:28:15 -0000 > @@ -5738,14 +5738,14 @@ ikev2_sa_keys(struct iked *env, struct i > > log_debug("%s: DHSECRET with %zu bytes", SPI_SA(sa, __func__), > ibuf_length(dhsecret)); > - print_hex(dhsecret->buf, 0, ibuf_length(dhsecret)); > + print_hex(ibuf_data(dhsecret), 0, ibuf_length(dhsecret)); > > if (!key) { > /* > * Set PRF key to generate SKEYSEED = prf(Ni | Nr, g^ir) > */ > - if ((ninr = ibuf_new(sa->sa_inonce->buf, ilen)) == NULL || > - ibuf_add(ninr, sa->sa_rnonce->buf, rlen) != 0) { > + if ((ninr = ibuf_new(ibuf_data(sa->sa_inonce), ilen)) == NULL || > + ibuf_add(ninr, ibuf_data(sa->sa_rnonce), rlen) != 0) { > log_info("%s: failed to get nonce key buffer", > SPI_SA(sa, __func__)); > goto done; > @@ -5755,15 +5755,15 @@ ikev2_sa_keys(struct iked *env, struct i > /* > * Set PRF key to generate SKEYSEED = prf(key, g^ir | Ni | Nr) > */ > - if (ibuf_add(dhsecret, sa->sa_inonce->buf, ilen) != 0 || > - ibuf_add(dhsecret, sa->sa_rnonce->buf, rlen) != 0) { > + if (ibuf_add(dhsecret, ibuf_data(sa->sa_inonce), ilen) != 0 || > + ibuf_add(dhsecret, ibuf_data(sa->sa_rnonce), rlen) != 0) { > log_info("%s: failed to get nonce key buffer", > SPI_SA(sa, __func__)); > goto done; > } > } > > - if ((hash_setkey(prf, key->buf, ibuf_length(key))) == NULL) { > + if ((hash_setkey(prf, ibuf_data(key), ibuf_length(key))) == NULL) { > log_info("%s: failed to set prf key", SPI_SA(sa, __func__)); > goto done; > } > @@ -5776,11 +5776,11 @@ ikev2_sa_keys(struct iked *env, struct i > > tmplen = 0; > hash_init(prf); > - hash_update(prf, dhsecret->buf, ibuf_length(dhsecret)); > - hash_final(prf, skeyseed->buf, &tmplen); > + hash_update(prf, ibuf_data(dhsecret), ibuf_length(dhsecret)); > + hash_final(prf, ibuf_data(skeyseed), &tmplen); > > log_debug("%s: SKEYSEED with %zu bytes", __func__, tmplen); > - print_hex(skeyseed->buf, 0, tmplen); > + print_hex(ibuf_data(skeyseed), 0, tmplen); > > if (ibuf_setsize(skeyseed, tmplen) == -1) { > log_info("%s: failed to set keymaterial length", > @@ -5800,8 +5800,8 @@ ikev2_sa_keys(struct iked *env, struct i > ispi = htobe64(sa->sa_hdr.sh_ispi); > rspi = htobe64(sa->sa_hdr.sh_rspi); > > - if ((s = ibuf_new(sa->sa_inonce->buf, ilen)) == NULL || > - ibuf_add(s, sa->sa_rnonce->buf, rlen) != 0 || > + if ((s = ibuf_new(ibuf_data(sa->sa_inonce), ilen)) == NULL || > + ibuf_add(s, ibuf_data(sa->sa_rnonce), rlen) != 0 || > ibuf_add(s, &ispi, sizeof(ispi)) != 0 || > ibuf_add(s, &rspi, sizeof(rspi)) != 0) { > log_info("%s: failed to set S buffer", > @@ -5810,7 +5810,7 @@ ikev2_sa_keys(struct iked *env, struct i > } > > log_debug("%s: S with %zu bytes", SPI_SA(sa, __func__), ibuf_length(s)); > - print_hex(s->buf, 0, ibuf_length(s)); > + print_hex(ibuf_data(s), 0, ibuf_length(s)); > > /* > * Get the size of the key material we need and the number > @@ -5850,29 +5850,31 @@ ikev2_sa_keys(struct iked *env, struct i > > log_debug("%s: SK_d with %zu bytes", __func__, > ibuf_length(sa->sa_key_d)); > - print_hex(sa->sa_key_d->buf, 0, ibuf_length(sa->sa_key_d)); > + print_hex(ibuf_data(sa->sa_key_d), 0, ibuf_length(sa->sa_key_d)); > if (!isaead) { > log_debug("%s: SK_ai with %zu bytes", __func__, > ibuf_length(sa->sa_key_iauth)); > - print_hex(sa->sa_key_iauth->buf, 0, > + print_hex(ibuf_data(sa->sa_key_iauth), 0, > ibuf_length(sa->sa_key_iauth)); > log_debug("%s: SK_ar with %zu bytes", __func__, > ibuf_length(sa->sa_key_rauth)); > - print_hex(sa->sa_key_rauth->buf, 0, > + print_hex(ibuf_data(sa->sa_key_rauth), 0, > ibuf_length(sa->sa_key_rauth)); > } > log_debug("%s: SK_ei with %zu bytes", __func__, > ibuf_length(sa->sa_key_iencr)); > - print_hex(sa->sa_key_iencr->buf, 0, ibuf_length(sa->sa_key_iencr)); > + print_hex(ibuf_data(sa->sa_key_iencr), 0, > + ibuf_length(sa->sa_key_iencr)); > log_debug("%s: SK_er with %zu bytes", __func__, > ibuf_length(sa->sa_key_rencr)); > - print_hex(sa->sa_key_rencr->buf, 0, ibuf_length(sa->sa_key_rencr)); > + print_hex(ibuf_data(sa->sa_key_rencr), 0, > + ibuf_length(sa->sa_key_rencr)); > log_debug("%s: SK_pi with %zu bytes", __func__, > ibuf_length(sa->sa_key_iprf)); > - print_hex(sa->sa_key_iprf->buf, 0, ibuf_length(sa->sa_key_iprf)); > + print_hex(ibuf_data(sa->sa_key_iprf), 0, ibuf_length(sa->sa_key_iprf)); > log_debug("%s: SK_pr with %zu bytes", __func__, > ibuf_length(sa->sa_key_rprf)); > - print_hex(sa->sa_key_rprf->buf, 0, ibuf_length(sa->sa_key_rprf)); > + print_hex(ibuf_data(sa->sa_key_rprf), 0, ibuf_length(sa->sa_key_rprf)); > > ret = 0; > > @@ -5930,33 +5932,33 @@ ikev2_prfplus(struct iked_hash *prf, str > > for (i = 0; i < rlen; i++) { > if (t1 != NULL) { > - t2 = ibuf_new(t1->buf, ibuf_length(t1)); > + t2 = ibuf_new(ibuf_data(t1), ibuf_length(t1)); > ibuf_free(t1); > } else > t2 = ibuf_new(NULL, 0); > t1 = ibuf_new(NULL, hash_keylength(prf)); > > - ibuf_add(t2, seed->buf, ibuf_length(seed)); > + ibuf_add_buf(t2, seed); > pad = i + 1; > ibuf_add(t2, &pad, 1); > > hash_init(prf); > - hash_update(prf, t2->buf, ibuf_length(t2)); > - hash_final(prf, t1->buf, &hashlen); > + hash_update(prf, ibuf_data(t2), ibuf_length(t2)); > + hash_final(prf, ibuf_data(t1), &hashlen); > > if (hashlen != hash_length(prf)) > fatalx("ikev2_prfplus: hash length mismatch"); > > ibuf_free(t2); > - ibuf_add(t, t1->buf, ibuf_length(t1)); > + ibuf_add_buf(t, t1); > > log_debug("%s: T%d with %zu bytes", __func__, > pad, ibuf_length(t1)); > - print_hex(t1->buf, 0, ibuf_length(t1)); > + print_hex(ibuf_data(t1), 0, ibuf_length(t1)); > } > > log_debug("%s: Tn with %zu bytes", __func__, ibuf_length(t)); > - print_hex(t->buf, 0, ibuf_length(t)); > + print_hex(ibuf_data(t), 0, ibuf_length(t)); > > ibuf_free(t1); > > Index: ikev2_msg.c > =================================================================== > RCS file: /cvs/src/sbin/iked/ikev2_msg.c,v > retrieving revision 1.97 > diff -u -p -r1.97 ikev2_msg.c > --- ikev2_msg.c 18 Jul 2023 15:07:41 -0000 1.97 > +++ ikev2_msg.c 27 Jul 2023 08:27:36 -0000 > @@ -448,7 +448,7 @@ ikev2_msg_encrypt(struct iked *env, stru > log_debug("%s: padded length %zu", __func__, ibuf_size(src)); > print_hex(ibuf_data(src), 0, ibuf_size(src)); > > - cipher_setkey(sa->sa_encr, encr->buf, ibuf_length(encr)); > + cipher_setkey(sa->sa_encr, ibuf_data(encr), ibuf_length(encr)); > cipher_setiv(sa->sa_encr, NULL, 0); /* XXX ivlen */ > if (cipher_init_encrypt(sa->sa_encr) == -1) { > log_info("%s: error initiating cipher.", __func__); > @@ -619,22 +619,23 @@ ikev2_msg_decrypt(struct iked *env, stru > if ((tmp = ibuf_new(NULL, hash_keylength(sa->sa_integr))) == > NULL) > goto done; > > - hash_setkey(sa->sa_integr, integr->buf, ibuf_length(integr)); > + hash_setkey(sa->sa_integr, ibuf_data(integr), > + ibuf_length(integr)); > hash_init(sa->sa_integr); > hash_update(sa->sa_integr, ibuf_data(msg), > ibuf_size(msg) - integrlen); > - hash_final(sa->sa_integr, tmp->buf, &tmplen); > + hash_final(sa->sa_integr, ibuf_data(tmp), &tmplen); > > integrdata = ibuf_seek(src, integroff, integrlen); > if (integrdata == NULL) > goto done; > - if (memcmp(tmp->buf, integrdata, integrlen) != 0) { > + if (memcmp(ibuf_data(tmp), integrdata, integrlen) != 0) { > log_debug("%s: integrity check failed", __func__); > goto done; > } > > log_debug("%s: integrity check succeeded", __func__); > - print_hex(tmp->buf, 0, tmplen); > + print_hex(ibuf_data(tmp), 0, tmplen); > > ibuf_free(tmp); > tmp = NULL; > @@ -648,7 +649,7 @@ ikev2_msg_decrypt(struct iked *env, stru > goto done; > } > > - cipher_setkey(sa->sa_encr, encr->buf, ibuf_length(encr)); > + cipher_setkey(sa->sa_encr, ibuf_data(encr), ibuf_length(encr)); > cipher_setiv(sa->sa_encr, ibuf_seek(src, ivoff, ivlen), ivlen); > if (cipher_init_decrypt(sa->sa_encr) == -1) { > log_info("%s: error initiating cipher.", __func__); >