aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-service-transport_validation.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-03-05 13:40:12 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-03-05 13:40:12 +0000
commite5cc8dcd9c82d1736b6c4cfd0a52fc1dcf9ea154 (patch)
tree6f8e1c8b0c5b7ddc79776f2a5f2c569ae680a1ed /src/transport/gnunet-service-transport_validation.c
parent0e62c9501710428cc6e27dded5262e2999b7fe56 (diff)
downloadgnunet-e5cc8dcd9c82d1736b6c4cfd0a52fc1dcf9ea154.tar.gz
gnunet-e5cc8dcd9c82d1736b6c4cfd0a52fc1dcf9ea154.zip
changes
Diffstat (limited to 'src/transport/gnunet-service-transport_validation.c')
-rw-r--r--src/transport/gnunet-service-transport_validation.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c
index a8996b1cc..f7a12085a 100644
--- a/src/transport/gnunet-service-transport_validation.c
+++ b/src/transport/gnunet-service-transport_validation.c
@@ -1149,6 +1149,7 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender,
1149 struct GNUNET_HELLO_Message *hello; 1149 struct GNUNET_HELLO_Message *hello;
1150 struct GNUNET_HELLO_Address address; 1150 struct GNUNET_HELLO_Address address;
1151 int sig_res; 1151 int sig_res;
1152 int do_verify;
1152 1153
1153 if (ntohs (hdr->size) < sizeof (struct TransportPongMessage)) 1154 if (ntohs (hdr->size) < sizeof (struct TransportPongMessage))
1154 { 1155 {
@@ -1204,28 +1205,38 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender,
1204 } 1205 }
1205 1206
1206 sig_res = GNUNET_SYSERR; 1207 sig_res = GNUNET_SYSERR;
1208 do_verify = GNUNET_YES;
1207 if (0 != GNUNET_TIME_absolute_get_remaining(ve->pong_sig_valid_until).rel_value) 1209 if (0 != GNUNET_TIME_absolute_get_remaining(ve->pong_sig_valid_until).rel_value)
1208 { 1210 {
1209 if (0 == memcmp (&ve->pong_sig_cache, &pong->signature, sizeof (struct GNUNET_CRYPTO_EccSignature))) 1211 if (0 == memcmp (&ve->pong_sig_cache, &pong->signature, sizeof (struct GNUNET_CRYPTO_EccSignature)))
1212 {
1210 sig_res = GNUNET_OK; 1213 sig_res = GNUNET_OK;
1214 do_verify = GNUNET_NO;
1215 }
1211 else 1216 else
1217 {
1212 sig_res = GNUNET_SYSERR; 1218 sig_res = GNUNET_SYSERR;
1219 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1220 "Failed to check with cached signature: different signature on address %s:%s from peer `%s'\n",
1221 tname, GST_plugins_a2s (ve->address),
1222 GNUNET_i2s (sender));
1223 }
1213 } 1224 }
1214 else 1225
1226 if (GNUNET_YES == do_verify)
1215 { 1227 {
1216 sig_res = GNUNET_CRYPTO_ecc_verify (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN, 1228 sig_res = GNUNET_CRYPTO_ecc_verify (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN,
1217 &pong->purpose, &pong->signature, 1229 &pong->purpose, &pong->signature,
1218 &ve->public_key); 1230 &ve->public_key);
1231 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1232 "Failed to verify: invalid signature on address %s:%s from peer `%s'\n",
1233 tname, GST_plugins_a2s (ve->address),
1234 GNUNET_i2s (sender));
1219 } 1235 }
1220 1236
1221 if (sig_res == GNUNET_SYSERR) 1237 if (sig_res == GNUNET_SYSERR)
1222 {
1223 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1224 "Invalid signature on address %s:%s from peer `%s'\n",
1225 tname, GST_plugins_a2s (ve->address),
1226 GNUNET_i2s (sender));
1227 return; 1238 return;
1228 } 1239
1229 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1240 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1230 "Address validated for peer `%s' with plugin `%s': `%s'\n", 1241 "Address validated for peer `%s' with plugin `%s': `%s'\n",
1231 GNUNET_i2s (sender), tname, GST_plugins_a2s (ve->address)); 1242 GNUNET_i2s (sender), tname, GST_plugins_a2s (ve->address));