diff --git a/test/test_onion.c b/test/test_onion.c index f41c8ebcd..21a7e8c6d 100644 --- a/test/test_onion.c +++ b/test/test_onion.c @@ -330,7 +330,6 @@ bool create_onion(const secp256k1_pubkey pubkey[], struct iv *pad_ivs = tal_arr(seckeys, struct iv, num); HMAC_CTX *padding_hmac = tal_arr(seckeys, HMAC_CTX, num); struct hop *padding = tal_arr(seckeys, struct hop, num); - struct hop **hops = tal_arr(seckeys, struct hop *, num); size_t junk_hops; secp256k1_context *ctx; bool ok = false; @@ -390,25 +389,16 @@ bool create_onion(const secp256k1_pubkey pubkey[], /* Unused hops filled with random, so even recipient can't tell * how many were used. */ junk_hops = MAX_HOPS - num; + random_bytes(onion->hop + num, junk_hops * sizeof(struct hop)); for (i = num - 1; i >= 0; i--) { size_t other_hops, len; struct hop *myhop; other_hops = num - i - 1 + junk_hops; - hops[i] = tal_arr(hops, struct hop, other_hops + 1); /* Our entry is at tail of onion. */ - myhop = hops[i] + other_hops; - if (i == num - 1) { - /* Fill with junk. */ - random_bytes(hops[i], - other_hops * sizeof(struct hop)); - } else { - /* Copy from next hop. */ - memcpy(hops[i], hops[i+1], - other_hops * sizeof(struct hop)); - } + myhop = onion->hop + other_hops; /* Now populate our hop. */ myhop->pubkey = pubkeys[i]; @@ -420,7 +410,7 @@ bool create_onion(const secp256k1_pubkey pubkey[], /* Encrypt whole thing, including our message, but we * aware it will be offset by the prepended padding. */ if (!aes_encrypt_offset(i * sizeof(struct hop), - hops[i], hops[i], + onion, onion, other_hops * sizeof(struct hop) + sizeof(myhop->msg), &enckeys[i], &ivs[i])) @@ -429,15 +419,11 @@ bool create_onion(const secp256k1_pubkey pubkey[], /* HMAC covers entire thing except hmac itself. */ len = (other_hops + 1)*sizeof(struct hop) - sizeof(myhop->hmac); HMAC_Update(&padding_hmac[i], - memcheck((unsigned char *)hops[i], len), len); + memcheck((unsigned char *)onion, len), len); HMAC_Final(&padding_hmac[i], myhop->hmac.u.u8, NULL); } - /* Transfer results to onion, for first node. */ - assert(tal_count(hops[0]) == MAX_HOPS); - memcpy(onion->hop, hops[0], sizeof(onion->hop)); ok = true; - fail: tal_free(seckeys); secp256k1_context_destroy(ctx);