- char seed[s->labellen + 64 + 13];
- strcpy(seed, "key expansion");
- if(s->initiator) {
- memcpy(seed + 13, s->mykex + 1, 32);
- memcpy(seed + 45, s->hiskex + 1, 32);
- } else {
- memcpy(seed + 13, s->hiskex + 1, 32);
- memcpy(seed + 45, s->mykex + 1, 32);
- }
- memcpy(seed + 77, s->label, s->labellen);
+ const size_t msglen = sizeof("key expansion") - 1;
+ const size_t seedlen = msglen + s->labellen + ECDH_SIZE * 2;
+ uint8_t *seed = alloca(seedlen);
+
+ uint8_t *ptr = seed;
+ memcpy(ptr, "key expansion", msglen);
+ ptr += msglen;
+
+ memcpy(ptr, (s->initiator ? s->mykex : s->hiskex)->nonce, ECDH_SIZE);
+ ptr += ECDH_SIZE;
+
+ memcpy(ptr, (s->initiator ? s->hiskex : s->mykex)->nonce, ECDH_SIZE);
+ ptr += ECDH_SIZE;
+
+ memcpy(ptr, s->label, s->labellen);