summaryrefslogtreecommitdiffstats
path: root/lib/libssl
diff options
context:
space:
mode:
authormiod <miod@openbsd.org>2014-05-12 19:14:14 +0000
committermiod <miod@openbsd.org>2014-05-12 19:14:14 +0000
commit4c60c45e934fe98c717601eab1e70d0dddf0989b (patch)
treee4c7aa0f2a72eecb831efde321923bb912020b62 /lib/libssl
parentno md5crypt (diff)
downloadwireguard-openbsd-4c60c45e934fe98c717601eab1e70d0dddf0989b.tar.xz
wireguard-openbsd-4c60c45e934fe98c717601eab1e70d0dddf0989b.zip
Move the `pqueue' part of libcrypto, which is a glorified sorted linked list
of 64-bit data, and only used by DTLS, to libssl where it belongs. Remove pqueue_print() which is a debugging interface and serves no useful purpose, except for the regress test, which grows its own pqueue_print() routine. Bump libcrypto major and libssl minor. WARNING: do not update your tree right now, more changes are coming, which will ride the libcrypto major bump.
Diffstat (limited to 'lib/libssl')
-rw-r--r--lib/libssl/pqueue.c (renamed from lib/libssl/src/crypto/pqueue/pqueue.c)21
-rw-r--r--lib/libssl/pqueue.h (renamed from lib/libssl/src/crypto/pqueue/pqueue.h)1
-rw-r--r--lib/libssl/shlib_version2
-rw-r--r--lib/libssl/src/ssl/pqueue.c222
-rw-r--r--lib/libssl/src/ssl/pqueue.h92
-rw-r--r--lib/libssl/ssl/Makefile7
-rw-r--r--lib/libssl/ssl/shlib_version2
7 files changed, 323 insertions, 24 deletions
diff --git a/lib/libssl/src/crypto/pqueue/pqueue.c b/lib/libssl/pqueue.c
index fc68ae19c3d..99c118c3b6f 100644
--- a/lib/libssl/src/crypto/pqueue/pqueue.c
+++ b/lib/libssl/pqueue.c
@@ -57,8 +57,7 @@
*
*/
-#include "cryptlib.h"
-#include <openssl/bn.h>
+#include <string.h>
#include "pqueue.h"
typedef struct _pqueue {
@@ -175,7 +174,8 @@ pqueue_find(pqueue_s *pq, unsigned char *prio64be)
return NULL;
for (next = pq->items; next != NULL; next = next->next) {
- if (memcmp(next->priority, prio64be, 8) == 0) {
+ if (memcmp(next->priority, prio64be,
+ sizeof(next->priority)) == 0) {
found = next;
break;
}
@@ -187,21 +187,6 @@ pqueue_find(pqueue_s *pq, unsigned char *prio64be)
return found;
}
-void
-pqueue_print(pqueue_s *pq)
-{
- pitem *item = pq->items;
-
- while (item != NULL) {
- printf("item\t%02x%02x%02x%02x%02x%02x%02x%02x\n",
- item->priority[0], item->priority[1],
- item->priority[2], item->priority[3],
- item->priority[4], item->priority[5],
- item->priority[6], item->priority[7]);
- item = item->next;
- }
-}
-
pitem *
pqueue_iterator(pqueue_s *pq)
{
diff --git a/lib/libssl/src/crypto/pqueue/pqueue.h b/lib/libssl/pqueue.h
index 729e9abaf25..6e7df8f35b7 100644
--- a/lib/libssl/src/crypto/pqueue/pqueue.h
+++ b/lib/libssl/pqueue.h
@@ -87,7 +87,6 @@ pitem *pqueue_find(pqueue pq, unsigned char *prio64be);
pitem *pqueue_iterator(pqueue pq);
pitem *pqueue_next(piterator *iter);
-void pqueue_print(pqueue pq);
int pqueue_size(pqueue pq);
#endif /* ! HEADER_PQUEUE_H */
diff --git a/lib/libssl/shlib_version b/lib/libssl/shlib_version
index 906022aa66d..aa54cbb404e 100644
--- a/lib/libssl/shlib_version
+++ b/lib/libssl/shlib_version
@@ -1,2 +1,2 @@
major=24
-minor=0
+minor=1
diff --git a/lib/libssl/src/ssl/pqueue.c b/lib/libssl/src/ssl/pqueue.c
new file mode 100644
index 00000000000..99c118c3b6f
--- /dev/null
+++ b/lib/libssl/src/ssl/pqueue.c
@@ -0,0 +1,222 @@
+/* crypto/pqueue/pqueue.c */
+/*
+ * DTLS implementation written by Nagendra Modadugu
+ * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
+ */
+/* ====================================================================
+ * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <string.h>
+#include "pqueue.h"
+
+typedef struct _pqueue {
+ pitem *items;
+ int count;
+} pqueue_s;
+
+pitem *
+pitem_new(unsigned char *prio64be, void *data)
+{
+ pitem *item = (pitem *)malloc(sizeof(pitem));
+
+ if (item == NULL)
+ return NULL;
+
+ memcpy(item->priority, prio64be, sizeof(item->priority));
+
+ item->data = data;
+ item->next = NULL;
+
+ return item;
+}
+
+void
+pitem_free(pitem *item)
+{
+ if (item == NULL)
+ return;
+
+ free(item);
+}
+
+pqueue_s *
+pqueue_new(void)
+{
+ pqueue_s *pq = (pqueue_s *)malloc(sizeof(pqueue_s));
+
+ if (pq == NULL)
+ return NULL;
+
+ memset(pq, 0x00, sizeof(pqueue_s));
+ return pq;
+}
+
+void
+pqueue_free(pqueue_s *pq)
+{
+ if (pq == NULL)
+ return;
+
+ free(pq);
+}
+
+pitem *
+pqueue_insert(pqueue_s *pq, pitem *item)
+{
+ pitem *curr, *next;
+
+ if (pq->items == NULL) {
+ pq->items = item;
+ return item;
+ }
+
+ for (curr = NULL, next = pq->items; next != NULL;
+ curr = next, next = next->next) {
+ /* we can compare 64-bit value in big-endian encoding
+ * with memcmp:-) */
+ int cmp = memcmp(next->priority, item->priority,
+ sizeof(item->priority));
+ if (cmp > 0) /* next > item */
+ {
+ item->next = next;
+
+ if (curr == NULL)
+ pq->items = item;
+ else
+ curr->next = item;
+
+ return item;
+ } else if (cmp == 0) /* duplicates not allowed */
+ return NULL;
+ }
+
+ item->next = NULL;
+ curr->next = item;
+
+ return item;
+}
+
+pitem *
+pqueue_peek(pqueue_s *pq)
+{
+ return pq->items;
+}
+
+pitem *
+pqueue_pop(pqueue_s *pq)
+{
+ pitem *item = pq->items;
+
+ if (pq->items != NULL)
+ pq->items = pq->items->next;
+
+ return item;
+}
+
+pitem *
+pqueue_find(pqueue_s *pq, unsigned char *prio64be)
+{
+ pitem *next;
+ pitem *found = NULL;
+
+ if (pq->items == NULL)
+ return NULL;
+
+ for (next = pq->items; next != NULL; next = next->next) {
+ if (memcmp(next->priority, prio64be,
+ sizeof(next->priority)) == 0) {
+ found = next;
+ break;
+ }
+ }
+
+ if (!found)
+ return NULL;
+
+ return found;
+}
+
+pitem *
+pqueue_iterator(pqueue_s *pq)
+{
+ return pqueue_peek(pq);
+}
+
+pitem *
+pqueue_next(pitem **item)
+{
+ pitem *ret;
+
+ if (item == NULL || *item == NULL)
+ return NULL;
+
+ /* *item != NULL */
+ ret = *item;
+ *item = (*item)->next;
+
+ return ret;
+}
+
+int
+pqueue_size(pqueue_s *pq)
+{
+ pitem *item = pq->items;
+ int count = 0;
+
+ while (item != NULL) {
+ count++;
+ item = item->next;
+ }
+ return count;
+}
diff --git a/lib/libssl/src/ssl/pqueue.h b/lib/libssl/src/ssl/pqueue.h
new file mode 100644
index 00000000000..6e7df8f35b7
--- /dev/null
+++ b/lib/libssl/src/ssl/pqueue.h
@@ -0,0 +1,92 @@
+/* crypto/pqueue/pqueue.h */
+/*
+ * DTLS implementation written by Nagendra Modadugu
+ * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
+ */
+/* ====================================================================
+ * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#ifndef HEADER_PQUEUE_H
+#define HEADER_PQUEUE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct _pqueue *pqueue;
+
+typedef struct _pitem {
+ unsigned char priority[8]; /* 64-bit value in big-endian encoding */
+ void *data;
+ struct _pitem *next;
+} pitem;
+
+typedef struct _pitem *piterator;
+
+pitem *pitem_new(unsigned char *prio64be, void *data);
+void pitem_free(pitem *item);
+
+pqueue pqueue_new(void);
+void pqueue_free(pqueue pq);
+
+pitem *pqueue_insert(pqueue pq, pitem *item);
+pitem *pqueue_peek(pqueue pq);
+pitem *pqueue_pop(pqueue pq);
+pitem *pqueue_find(pqueue pq, unsigned char *prio64be);
+pitem *pqueue_iterator(pqueue pq);
+pitem *pqueue_next(piterator *iter);
+
+int pqueue_size(pqueue pq);
+
+#endif /* ! HEADER_PQUEUE_H */
diff --git a/lib/libssl/ssl/Makefile b/lib/libssl/ssl/Makefile
index 737121fce4b..8975572be86 100644
--- a/lib/libssl/ssl/Makefile
+++ b/lib/libssl/ssl/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.41 2014/05/05 15:03:22 tedu Exp $
+# $OpenBSD: Makefile,v 1.42 2014/05/12 19:14:14 miod Exp $
LIB= ssl
@@ -19,10 +19,11 @@ SRCS=\
ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c \
ssl_ciph.c ssl_stat.c ssl_rsa.c \
ssl_asn1.c ssl_txt.c ssl_algs.c \
- bio_ssl.c ssl_err.c t1_reneg.c
+ bio_ssl.c ssl_err.c t1_reneg.c \
+ pqueue.c
SRCS+= s3_cbc.c
-HDRS= srtp.h ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h kssl.h
+HDRS= srtp.h ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h kssl.h pqueue.h
.PATH: ${LSSL_SRC}
diff --git a/lib/libssl/ssl/shlib_version b/lib/libssl/ssl/shlib_version
index 906022aa66d..aa54cbb404e 100644
--- a/lib/libssl/ssl/shlib_version
+++ b/lib/libssl/ssl/shlib_version
@@ -1,2 +1,2 @@
major=24
-minor=0
+minor=1