20
mud.c
20
mud.c
@@ -179,9 +179,10 @@ mud_encrypt_opt(const struct mud_crypto_key *k,
|
|||||||
const struct mud_crypto_opt *c)
|
const struct mud_crypto_opt *c)
|
||||||
{
|
{
|
||||||
if (k->aes) {
|
if (k->aes) {
|
||||||
unsigned char npub[crypto_aead_aes256gcm_NPUBBYTES] = {0};
|
unsigned char npub[crypto_aead_aes256gcm_NPUBBYTES];
|
||||||
|
|
||||||
memcpy(npub, c->dst, MUD_U48_SIZE);
|
memcpy(npub, c->dst, MUD_U48_SIZE);
|
||||||
|
memset(npub + MUD_U48_SIZE, 0, sizeof(npub) - MUD_U48_SIZE);
|
||||||
|
|
||||||
return crypto_aead_aes256gcm_encrypt_afternm(
|
return crypto_aead_aes256gcm_encrypt_afternm(
|
||||||
c->dst + MUD_U48_SIZE,
|
c->dst + MUD_U48_SIZE,
|
||||||
@@ -195,9 +196,10 @@ mud_encrypt_opt(const struct mud_crypto_key *k,
|
|||||||
(const crypto_aead_aes256gcm_state *)&k->encrypt.state
|
(const crypto_aead_aes256gcm_state *)&k->encrypt.state
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
unsigned char npub[crypto_aead_chacha20poly1305_NPUBBYTES] = {0};
|
unsigned char npub[crypto_aead_chacha20poly1305_NPUBBYTES];
|
||||||
|
|
||||||
memcpy(npub, c->dst, MUD_U48_SIZE);
|
memcpy(npub, c->dst, MUD_U48_SIZE);
|
||||||
|
memset(npub + MUD_U48_SIZE, 0, sizeof(npub) - MUD_U48_SIZE);
|
||||||
|
|
||||||
return crypto_aead_chacha20poly1305_encrypt(
|
return crypto_aead_chacha20poly1305_encrypt(
|
||||||
c->dst + MUD_U48_SIZE,
|
c->dst + MUD_U48_SIZE,
|
||||||
@@ -218,9 +220,10 @@ mud_decrypt_opt(const struct mud_crypto_key *k,
|
|||||||
const struct mud_crypto_opt *c)
|
const struct mud_crypto_opt *c)
|
||||||
{
|
{
|
||||||
if (k->aes) {
|
if (k->aes) {
|
||||||
unsigned char npub[crypto_aead_aes256gcm_NPUBBYTES] = {0};
|
unsigned char npub[crypto_aead_aes256gcm_NPUBBYTES];
|
||||||
|
|
||||||
memcpy(npub, c->src, MUD_U48_SIZE);
|
memcpy(npub, c->src, MUD_U48_SIZE);
|
||||||
|
memset(npub + MUD_U48_SIZE, 0, sizeof(npub) - MUD_U48_SIZE);
|
||||||
|
|
||||||
return crypto_aead_aes256gcm_decrypt_afternm(
|
return crypto_aead_aes256gcm_decrypt_afternm(
|
||||||
c->dst,
|
c->dst,
|
||||||
@@ -233,9 +236,10 @@ mud_decrypt_opt(const struct mud_crypto_key *k,
|
|||||||
(const crypto_aead_aes256gcm_state *)&k->decrypt.state
|
(const crypto_aead_aes256gcm_state *)&k->decrypt.state
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
unsigned char npub[crypto_aead_chacha20poly1305_NPUBBYTES] = {0};
|
unsigned char npub[crypto_aead_chacha20poly1305_NPUBBYTES];
|
||||||
|
|
||||||
memcpy(npub, c->src, MUD_U48_SIZE);
|
memcpy(npub, c->src, MUD_U48_SIZE);
|
||||||
|
memset(npub + MUD_U48_SIZE, 0, sizeof(npub) - MUD_U48_SIZE);
|
||||||
|
|
||||||
return crypto_aead_chacha20poly1305_decrypt(
|
return crypto_aead_chacha20poly1305_decrypt(
|
||||||
c->dst,
|
c->dst,
|
||||||
@@ -368,7 +372,7 @@ mud_send_path(struct mud *mud, struct mud_path *path, uint64_t now,
|
|||||||
if (!size || !path)
|
if (!size || !path)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unsigned char ctrl[MUD_CTRL_SIZE] = {0};
|
unsigned char ctrl[MUD_CTRL_SIZE];
|
||||||
|
|
||||||
struct iovec iov = {
|
struct iovec iov = {
|
||||||
.iov_base = data,
|
.iov_base = data,
|
||||||
@@ -382,6 +386,8 @@ mud_send_path(struct mud *mud, struct mud_path *path, uint64_t now,
|
|||||||
.msg_control = ctrl,
|
.msg_control = ctrl,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
memset(ctrl, 0, sizeof(ctrl));
|
||||||
|
|
||||||
if (path->addr.ss_family == AF_INET) {
|
if (path->addr.ss_family == AF_INET) {
|
||||||
msg.msg_namelen = sizeof(struct sockaddr_in);
|
msg.msg_namelen = sizeof(struct sockaddr_in);
|
||||||
msg.msg_controllen = CMSG_SPACE(MUD_PKTINFO_SIZE) +
|
msg.msg_controllen = CMSG_SPACE(MUD_PKTINFO_SIZE) +
|
||||||
@@ -1113,9 +1119,11 @@ mud_send_msg(struct mud *mud, struct mud_path *path, uint64_t now,
|
|||||||
uint64_t sent, uint64_t fwd_send, uint64_t fwd_dt, size_t size)
|
uint64_t sent, uint64_t fwd_send, uint64_t fwd_dt, size_t size)
|
||||||
{
|
{
|
||||||
unsigned char dst[MUD_PKT_MAX_SIZE];
|
unsigned char dst[MUD_PKT_MAX_SIZE];
|
||||||
unsigned char src[MUD_PKT_MAX_SIZE] = {0};
|
unsigned char src[MUD_PKT_MAX_SIZE];
|
||||||
struct mud_msg *msg = (struct mud_msg *)src;
|
struct mud_msg *msg = (struct mud_msg *)src;
|
||||||
|
|
||||||
|
memset(src, 0, sizeof(src));
|
||||||
|
|
||||||
if (size < MUD_PKT_MIN_SIZE + sizeof(struct mud_msg))
|
if (size < MUD_PKT_MIN_SIZE + sizeof(struct mud_msg))
|
||||||
size = MUD_PKT_MIN_SIZE + sizeof(struct mud_msg);
|
size = MUD_PKT_MIN_SIZE + sizeof(struct mud_msg);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user