chiark / gitweb /
@@ -1,10 +1,10 @@
[userv-utils.git] / ipif / mech-pkcs5.c
index 6ff35cd2287ddab8026c84c6bb6403c1af4358b0..f03787b059a7bbbce0bfa878cb29f5ea80a488f7 100644 (file)
@@ -1,11 +1,28 @@
 /*
- * PKCS#5 padding
+ * PKCS#5 padding mechanism for udp tunnel
  *
  * arguments: block size to pad to, must be power of 2
  *
  * encoding: append between 1 and n bytes, all of the same value being
  *           the number of bytes appended
  */
+/*
+ * Copyright (C) 2000 Ian Jackson
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with userv-utils; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
 
 #include "forwarder.h"
 
@@ -58,11 +75,11 @@ static const char *mdec_pkcs5(struct mechdata *md, struct buffer *buf) {
   unsigned padlen;
   int i;
 
-  BUF_UNPREPEND(padp,buf,1);
+  BUF_UNAPPEND(padp,buf,1);
   padlen= *padp;
-  if (!padlen || (padlen & ~md->mask)) return "invalid length";
+  if (!padlen || (padlen > md->mask+1)) return "invalid length";
 
-  BUF_UNPREPEND(padp,buf,padlen-1);
+  BUF_UNAPPEND(padp,buf,padlen-1);
   for (i=0; i<padlen-1; i++)
     if (*++padp != padlen) return "corrupted padding";