Rename tincctl to tinc.
[tinc] / src / sptps.c
index 386b6fd..8242cad 100644 (file)
@@ -1,6 +1,6 @@
 /*
     sptps.c -- Simple Peer-to-Peer Security
-    Copyright (C) 2011-2012 Guus Sliepen <guus@tinc-vpn.org>,
+    Copyright (C) 2011-2013 Guus Sliepen <guus@tinc-vpn.org>,
                   2010      Brandon L. Black <blblack@gmail.com>
 
     This program is free software; you can redistribute it and/or modify
@@ -447,8 +447,6 @@ static bool sptps_receive_data_datagram(sptps_t *s, const char *data, size_t len
        memcpy(buffer, &netlen, 2);
        memcpy(buffer + 2, data, len);
 
-       memcpy(&seqno, buffer + 2, 4);
-
        if(!digest_verify(&s->indigest, buffer, len - 14, buffer + len - 14))
                return error(s, EIO, "Invalid HMAC");
 
@@ -486,8 +484,13 @@ static bool sptps_receive_data_datagram(sptps_t *s, const char *data, size_t len
        if(seqno > s->inseqno)
                s->inseqno = seqno + 1;
 
+       if(!s->inseqno)
+               s->received = 0;
+       else
+               s->received++;
 
        // Decrypt.
+       memcpy(&seqno, buffer + 2, 4);
        cipher_set_counter(&s->incipher, &seqno, sizeof seqno);
        if(!cipher_counter_xor(&s->incipher, buffer + 6, len - 4, buffer + 6))
                return false;