]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Print NTP MAC with 160-bit digest.
authorMiroslav Lichvar <[email protected]>
Mon, 19 Jun 2017 13:46:06 +0000 (15:46 +0200)
committerDenis Ovsienko <[email protected]>
Wed, 30 Aug 2017 11:57:17 +0000 (12:57 +0100)
An NTP packet authenticated with a key using stronger hash function than
MD5 may have a 160-bit digest.

print-ntp.c

index a0b046418ab1d4f2e39f24edec9663eeaf48d9de..5b6771b4ba003c47dbb248ecc3668b022974f204 100644 (file)
@@ -126,7 +126,7 @@ struct ntpdata {
        struct l_fixedpt rec_timestamp;
        struct l_fixedpt xmt_timestamp;
         uint32_t key_id;
-        uint8_t  message_digest[16];
+        uint8_t  message_digest[20];
 };
 /*
  *     Leap Second Codes (high order two bits)
@@ -310,18 +310,28 @@ ntp_print(netdissect_options *ndo,
        ND_PRINT((ndo, "\n\t    Originator - Transmit Timestamp: "));
        p_ntp_delta(ndo, &(bp->org_timestamp), &(bp->xmt_timestamp));
 
-       if ( (sizeof(struct ntpdata) - length) == 16) {         /* Optional: key-id */
+       if ( (sizeof(struct ntpdata) - length) == 20) {         /* Optional: key-id (crypto-NAK) */
                ND_TCHECK(bp->key_id);
                ND_PRINT((ndo, "\n\tKey id: %u", EXTRACT_32BITS(&bp->key_id)));
-       } else if ( (sizeof(struct ntpdata) - length) == 0) {   /* Optional: key-id + authentication */
+       } else if ( (sizeof(struct ntpdata) - length) == 4) {   /* Optional: key-id + 128-bit digest */
                ND_TCHECK(bp->key_id);
                ND_PRINT((ndo, "\n\tKey id: %u", EXTRACT_32BITS(&bp->key_id)));
-               ND_TCHECK2(bp->message_digest, sizeof (bp->message_digest));
+               ND_TCHECK2(bp->message_digest, 16);
                 ND_PRINT((ndo, "\n\tAuthentication: %08x%08x%08x%08x",
                               EXTRACT_32BITS(bp->message_digest),
                               EXTRACT_32BITS(bp->message_digest + 4),
                               EXTRACT_32BITS(bp->message_digest + 8),
                               EXTRACT_32BITS(bp->message_digest + 12)));
+       } else if ( (sizeof(struct ntpdata) - length) == 0) {   /* Optional: key-id + 160-bit digest */
+               ND_TCHECK(bp->key_id);
+               ND_PRINT((ndo, "\n\tKey id: %u", EXTRACT_32BITS(&bp->key_id)));
+               ND_TCHECK2(bp->message_digest, 20);
+               ND_PRINT((ndo, "\n\tAuthentication: %08x%08x%08x%08x%08x",
+                              EXTRACT_32BITS(bp->message_digest),
+                              EXTRACT_32BITS(bp->message_digest + 4),
+                              EXTRACT_32BITS(bp->message_digest + 8),
+                              EXTRACT_32BITS(bp->message_digest + 12),
+                              EXTRACT_32BITS(bp->message_digest + 16)));
         }
        return;