X-Git-Url: http://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fsptps.c;h=bdbfb89e61d7de3a64579f67b93c0b4582b5b1d9;hb=d7bf63c63ab397cf3e5ca4a065922364925788e7;hp=2449e7bcbb613b5fc475a14aeec8a76631f1e8b6;hpb=d756bb92ed52d5b1ecdd42af32f11f733db64d91;p=tinc diff --git a/src/sptps.c b/src/sptps.c index 2449e7bc..bdbfb89e 100644 --- a/src/sptps.c +++ b/src/sptps.c @@ -159,13 +159,14 @@ static bool send_sig(sptps_t *s) { size_t keylen = ECDH_SIZE; size_t siglen = ecdsa_size(&s->mykey); - // Concatenate both KEX messages, plus tag indicating if it is from the connection originator - char msg[(1 + 32 + keylen) * 2 + 1]; + // Concatenate both KEX messages, plus tag indicating if it is from the connection originator, plus label + char msg[(1 + 32 + keylen) * 2 + 1 + s->labellen]; char sig[siglen]; msg[0] = s->initiator; memcpy(msg + 1, s->mykex, 1 + 32 + keylen); - memcpy(msg + 2 + 32 + keylen, s->hiskex, 1 + 32 + keylen); + memcpy(msg + 1 + 33 + keylen, s->hiskex, 1 + 32 + keylen); + memcpy(msg + 1 + 2 * (33 + keylen), s->label, s->labellen); // Sign the result. if(!ecdsa_sign(&s->mykey, msg, sizeof msg, sig)) @@ -275,11 +276,12 @@ static bool receive_sig(sptps_t *s, const char *data, uint16_t len) { return error(s, EIO, "Invalid KEX record length"); // Concatenate both KEX messages, plus tag indicating if it is from the connection originator - char msg[(1 + 32 + keylen) * 2 + 1]; + char msg[(1 + 32 + keylen) * 2 + 1 + s->labellen]; msg[0] = !s->initiator; memcpy(msg + 1, s->hiskex, 1 + 32 + keylen); - memcpy(msg + 2 + 32 + keylen, s->mykex, 1 + 32 + keylen); + memcpy(msg + 1 + 33 + keylen, s->mykex, 1 + 32 + keylen); + memcpy(msg + 1 + 2 * (33 + keylen), s->label, s->labellen); // Verify signature. if(!ecdsa_verify(&s->hiskey, msg, sizeof msg, data))