From a9b96074084460bbe523249a0c13de07b4d13c77 Mon Sep 17 00:00:00 2001 From: fengweihao Date: Tue, 19 Jun 2018 11:32:16 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6]=201.?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0CertStore=E6=BA=90=E4=BB=A3=E7=A0=81=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E6=96=87=E4=BB=B6=20[=E7=9B=AE=E5=BD=95=E5=B1=82?= =?UTF-8?q?=E6=AC=A1=E4=BB=8B=E7=BB=8D]=201.conf=E4=B8=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=202.make=E4=B8=BAMakefile=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=203.release=E4=B8=BA=E6=89=A7?= =?UTF-8?q?=E8=A1=8Cmake=20tarball=E5=90=8E=E7=94=9F=E6=88=90=E7=9A=84?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=8C=85=E6=96=87=E4=BB=B6=204.src=E6=BA=90?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20src/components=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E9=9D=99=E6=80=81=E5=BA=93=E6=89=80=E9=9C=80=E7=9A=84?= =?UTF-8?q?=E5=A4=B4=E6=96=87=E4=BB=B6=EF=BC=88libevent=E3=80=81openssl?= =?UTF-8?q?=E3=80=81hiredis=EF=BC=89=20src/inc=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=89=80=E9=9C=80=E5=A4=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=20src/lib=20=20=20=20=20=20=20=20=E9=9D=99=E6=80=81=E5=BA=93?= =?UTF-8?q?=20src/package=20=20=20=20=E5=AE=89=E8=A3=85=E5=8C=85=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E7=9B=AE=E5=BD=95=20src/rt=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=87=BD=E6=95=B0=E4=BB=A3=E7=A0=81=20[?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E8=BF=90=E8=A1=8C]=201.cd=20src=20&&=20make?= =?UTF-8?q?=202../cert=5Fstore=20--debug[release/deamon]=20[=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=8C=85=E4=BD=BF=E7=94=A8]=201.cd=20src=20&&=20make?= =?UTF-8?q?=20tarball=202.cd=20release=20(=E8=8E=B7=E5=8F=96=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=8C=85)=202.1.tar=20-zxvf=20xxxx.tar.gz=202.2=20cd?= =?UTF-8?q?=20xxx.tar.gz=20&&=20make=20install=20[=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=97=AE=E9=A2=98]=201.=E8=AF=81=E4=B9=A6=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=B1=8F=E8=94=BD=EF=BC=88=E6=9C=AA=E8=B0=83?= =?UTF-8?q?=E9=80=9A=EF=BC=89=202.Redis=E8=B6=85=E6=97=B6=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9C=AA=E5=AE=8C=E6=88=90=203.=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=96=AD=E5=BC=80=E5=90=8E=EF=BC=8C=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=9C=AA=E9=87=8A=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/cert_store.ini | 18 + make/application.mk | 32 + make/common.mk | 51 + make/config.mk | 9 + src/Makefile | 84 + src/cert_daemon.c | 120 + src/cert_daemon.h | 13 + src/cert_init.c | 100 + src/cert_init.h | 73 + src/cert_session.c | 935 ++++ src/cert_session.h | 48 + src/cert_store.c | 102 + src/components/libevent/TFX3C1D.tmp | 0 src/components/libevent/buffer.h | 1076 +++++ src/components/libevent/buffer_compat.h | 115 + src/components/libevent/bufferevent.h | 1021 +++++ src/components/libevent/bufferevent_compat.h | 100 + src/components/libevent/bufferevent_ssl.h | 134 + src/components/libevent/bufferevent_struct.h | 116 + src/components/libevent/dns.h | 717 +++ src/components/libevent/dns_compat.h | 336 ++ src/components/libevent/dns_struct.h | 80 + src/components/libevent/evconfig-private.h | 49 + src/components/libevent/event-config.h | 545 +++ src/components/libevent/event.h | 1675 +++++++ src/components/libevent/event_compat.h | 230 + src/components/libevent/event_struct.h | 180 + src/components/libevent/http.h | 1192 +++++ src/components/libevent/http_compat.h | 90 + src/components/libevent/http_struct.h | 152 + src/components/libevent/ipv6-internal.h | 83 + src/components/libevent/keyvalq_struct.h | 80 + src/components/libevent/listener.h | 180 + src/components/libevent/log-internal.h | 83 + src/components/libevent/rpc.h | 596 +++ src/components/libevent/rpc_compat.h | 61 + src/components/libevent/rpc_struct.h | 100 + src/components/libevent/tag.h | 146 + src/components/libevent/tag_compat.h | 49 + src/components/libevent/thread.h | 253 ++ src/components/libevent/time-internal.h | 98 + src/components/libevent/util-internal.h | 483 ++ src/components/libevent/util.h | 866 ++++ src/components/libevent/visibility.h | 50 + src/components/openssl/aes.h | 149 + src/components/openssl/asn1.h | 1419 ++++++ src/components/openssl/asn1_mac.h | 579 +++ src/components/openssl/asn1t.h | 973 ++++ src/components/openssl/bio.h | 883 ++++ src/components/openssl/blowfish.h | 130 + src/components/openssl/bn.h | 951 ++++ src/components/openssl/buffer.h | 125 + src/components/openssl/camellia.h | 132 + src/components/openssl/cast.h | 107 + src/components/openssl/cmac.h | 82 + src/components/openssl/cms.h | 555 +++ src/components/openssl/comp.h | 83 + src/components/openssl/conf.h | 267 ++ src/components/openssl/conf_api.h | 89 + src/components/openssl/crypto.h | 661 +++ src/components/openssl/des.h | 257 ++ src/components/openssl/des_old.h | 497 +++ src/components/openssl/dh.h | 393 ++ src/components/openssl/dsa.h | 332 ++ src/components/openssl/dso.h | 451 ++ src/components/openssl/dtls1.h | 272 ++ src/components/openssl/e_os2.h | 328 ++ src/components/openssl/ebcdic.h | 26 + src/components/openssl/ec.h | 1282 ++++++ src/components/openssl/ecdh.h | 134 + src/components/openssl/ecdsa.h | 335 ++ src/components/openssl/engine.h | 960 ++++ src/components/openssl/err.h | 389 ++ src/components/openssl/evp.h | 1536 +++++++ src/components/openssl/hmac.h | 109 + src/components/openssl/idea.h | 105 + src/components/openssl/krb5_asn.h | 240 + src/components/openssl/kssl.h | 197 + src/components/openssl/lhash.h | 240 + src/components/openssl/md4.h | 119 + src/components/openssl/md5.h | 119 + src/components/openssl/mdc2.h | 94 + src/components/openssl/modes.h | 163 + src/components/openssl/obj_mac.h | 4194 ++++++++++++++++++ src/components/openssl/objects.h | 1143 +++++ src/components/openssl/ocsp.h | 637 +++ src/components/openssl/opensslconf.h | 270 ++ src/components/openssl/opensslv.h | 97 + src/components/openssl/ossl_typ.h | 213 + src/components/openssl/pem.h | 617 +++ src/components/openssl/pem2.h | 70 + src/components/openssl/pkcs12.h | 342 ++ src/components/openssl/pkcs7.h | 481 ++ src/components/openssl/pqueue.h | 99 + src/components/openssl/rand.h | 150 + src/components/openssl/rc2.h | 103 + src/components/openssl/rc4.h | 88 + src/components/openssl/ripemd.h | 105 + src/components/openssl/rsa.h | 664 +++ src/components/openssl/safestack.h | 2672 +++++++++++ src/components/openssl/seed.h | 149 + src/components/openssl/sha.h | 214 + src/components/openssl/srp.h | 179 + src/components/openssl/srtp.h | 147 + src/components/openssl/ssl.h | 3163 +++++++++++++ src/components/openssl/ssl2.h | 265 ++ src/components/openssl/ssl23.h | 84 + src/components/openssl/ssl3.h | 774 ++++ src/components/openssl/stack.h | 107 + src/components/openssl/symhacks.h | 516 +++ src/components/openssl/tls1.h | 810 ++++ src/components/openssl/ts.h | 865 ++++ src/components/openssl/txt_db.h | 112 + src/components/openssl/ui.h | 415 ++ src/components/openssl/ui_compat.h | 88 + src/components/openssl/whrlpool.h | 41 + src/components/openssl/x509.h | 1330 ++++++ src/components/openssl/x509_vfy.h | 652 +++ src/components/openssl/x509v3.h | 1055 +++++ src/components/redis/async.h | 130 + src/components/redis/hiredis.h | 199 + src/components/redis/libevent.h | 108 + src/components/redis/read.h | 111 + src/components/redis/sds.h | 273 ++ src/components/syslogd/logging.c | 73 + src/components/syslogd/logging.h | 51 + src/components/syslogd/syslog.mk | 40 + src/inc/MESA_atomic.h | 38 + src/inc/MESA_handle_logger.h | 63 + src/inc/MESA_htable.h | 419 ++ src/inc/MESA_list.h | 34 + src/inc/MESA_list_count.h | 31 + src/inc/MESA_list_queue.h | 115 + src/inc/MESA_prof_load.h | 189 + src/inc/MESA_ring_queue.h | 107 + src/lib/libMESA_handle_logger.a | Bin 0 -> 60466 bytes src/lib/libMESA_htable.a | Bin 0 -> 138390 bytes src/lib/libMESA_prof_load.a | Bin 0 -> 30360 bytes src/lib/libapps.a | Bin 0 -> 187380 bytes src/lib/libcrypto.a | Bin 0 -> 4515104 bytes src/lib/libevent.a | Bin 0 -> 2335416 bytes src/lib/libhiredis.a | Bin 0 -> 507652 bytes src/lib/libssl.a | Bin 0 -> 768048 bytes src/package/Makefile | 21 + src/rt/rt.mk | 43 + src/rt/rt_common.h | 29 + src/rt/rt_file.c | 32 + src/rt/rt_file.h | 7 + src/rt/rt_stdlib.c | 29 + src/rt/rt_stdlib.h | 15 + src/rt/rt_string.c | 35 + src/rt/rt_string.h | 66 + src/rt/rt_sync.h | 29 + src/rt/rt_time.c | 58 + src/rt/rt_time.h | 12 + src/rt/rt_util.c | 53 + src/rt/rt_util.h | 7 + 157 files changed, 53612 insertions(+) create mode 100644 conf/cert_store.ini create mode 100644 make/application.mk create mode 100644 make/common.mk create mode 100644 make/config.mk create mode 100644 src/Makefile create mode 100644 src/cert_daemon.c create mode 100644 src/cert_daemon.h create mode 100644 src/cert_init.c create mode 100644 src/cert_init.h create mode 100644 src/cert_session.c create mode 100644 src/cert_session.h create mode 100644 src/cert_store.c create mode 100644 src/components/libevent/TFX3C1D.tmp create mode 100644 src/components/libevent/buffer.h create mode 100644 src/components/libevent/buffer_compat.h create mode 100644 src/components/libevent/bufferevent.h create mode 100644 src/components/libevent/bufferevent_compat.h create mode 100644 src/components/libevent/bufferevent_ssl.h create mode 100644 src/components/libevent/bufferevent_struct.h create mode 100644 src/components/libevent/dns.h create mode 100644 src/components/libevent/dns_compat.h create mode 100644 src/components/libevent/dns_struct.h create mode 100644 src/components/libevent/evconfig-private.h create mode 100644 src/components/libevent/event-config.h create mode 100644 src/components/libevent/event.h create mode 100644 src/components/libevent/event_compat.h create mode 100644 src/components/libevent/event_struct.h create mode 100644 src/components/libevent/http.h create mode 100644 src/components/libevent/http_compat.h create mode 100644 src/components/libevent/http_struct.h create mode 100644 src/components/libevent/ipv6-internal.h create mode 100644 src/components/libevent/keyvalq_struct.h create mode 100644 src/components/libevent/listener.h create mode 100644 src/components/libevent/log-internal.h create mode 100644 src/components/libevent/rpc.h create mode 100644 src/components/libevent/rpc_compat.h create mode 100644 src/components/libevent/rpc_struct.h create mode 100644 src/components/libevent/tag.h create mode 100644 src/components/libevent/tag_compat.h create mode 100644 src/components/libevent/thread.h create mode 100644 src/components/libevent/time-internal.h create mode 100644 src/components/libevent/util-internal.h create mode 100644 src/components/libevent/util.h create mode 100644 src/components/libevent/visibility.h create mode 100644 src/components/openssl/aes.h create mode 100644 src/components/openssl/asn1.h create mode 100644 src/components/openssl/asn1_mac.h create mode 100644 src/components/openssl/asn1t.h create mode 100644 src/components/openssl/bio.h create mode 100644 src/components/openssl/blowfish.h create mode 100644 src/components/openssl/bn.h create mode 100644 src/components/openssl/buffer.h create mode 100644 src/components/openssl/camellia.h create mode 100644 src/components/openssl/cast.h create mode 100644 src/components/openssl/cmac.h create mode 100644 src/components/openssl/cms.h create mode 100644 src/components/openssl/comp.h create mode 100644 src/components/openssl/conf.h create mode 100644 src/components/openssl/conf_api.h create mode 100644 src/components/openssl/crypto.h create mode 100644 src/components/openssl/des.h create mode 100644 src/components/openssl/des_old.h create mode 100644 src/components/openssl/dh.h create mode 100644 src/components/openssl/dsa.h create mode 100644 src/components/openssl/dso.h create mode 100644 src/components/openssl/dtls1.h create mode 100644 src/components/openssl/e_os2.h create mode 100644 src/components/openssl/ebcdic.h create mode 100644 src/components/openssl/ec.h create mode 100644 src/components/openssl/ecdh.h create mode 100644 src/components/openssl/ecdsa.h create mode 100644 src/components/openssl/engine.h create mode 100644 src/components/openssl/err.h create mode 100644 src/components/openssl/evp.h create mode 100644 src/components/openssl/hmac.h create mode 100644 src/components/openssl/idea.h create mode 100644 src/components/openssl/krb5_asn.h create mode 100644 src/components/openssl/kssl.h create mode 100644 src/components/openssl/lhash.h create mode 100644 src/components/openssl/md4.h create mode 100644 src/components/openssl/md5.h create mode 100644 src/components/openssl/mdc2.h create mode 100644 src/components/openssl/modes.h create mode 100644 src/components/openssl/obj_mac.h create mode 100644 src/components/openssl/objects.h create mode 100644 src/components/openssl/ocsp.h create mode 100644 src/components/openssl/opensslconf.h create mode 100644 src/components/openssl/opensslv.h create mode 100644 src/components/openssl/ossl_typ.h create mode 100644 src/components/openssl/pem.h create mode 100644 src/components/openssl/pem2.h create mode 100644 src/components/openssl/pkcs12.h create mode 100644 src/components/openssl/pkcs7.h create mode 100644 src/components/openssl/pqueue.h create mode 100644 src/components/openssl/rand.h create mode 100644 src/components/openssl/rc2.h create mode 100644 src/components/openssl/rc4.h create mode 100644 src/components/openssl/ripemd.h create mode 100644 src/components/openssl/rsa.h create mode 100644 src/components/openssl/safestack.h create mode 100644 src/components/openssl/seed.h create mode 100644 src/components/openssl/sha.h create mode 100644 src/components/openssl/srp.h create mode 100644 src/components/openssl/srtp.h create mode 100644 src/components/openssl/ssl.h create mode 100644 src/components/openssl/ssl2.h create mode 100644 src/components/openssl/ssl23.h create mode 100644 src/components/openssl/ssl3.h create mode 100644 src/components/openssl/stack.h create mode 100644 src/components/openssl/symhacks.h create mode 100644 src/components/openssl/tls1.h create mode 100644 src/components/openssl/ts.h create mode 100644 src/components/openssl/txt_db.h create mode 100644 src/components/openssl/ui.h create mode 100644 src/components/openssl/ui_compat.h create mode 100644 src/components/openssl/whrlpool.h create mode 100644 src/components/openssl/x509.h create mode 100644 src/components/openssl/x509_vfy.h create mode 100644 src/components/openssl/x509v3.h create mode 100644 src/components/redis/async.h create mode 100644 src/components/redis/hiredis.h create mode 100644 src/components/redis/libevent.h create mode 100644 src/components/redis/read.h create mode 100644 src/components/redis/sds.h create mode 100644 src/components/syslogd/logging.c create mode 100644 src/components/syslogd/logging.h create mode 100644 src/components/syslogd/syslog.mk create mode 100644 src/inc/MESA_atomic.h create mode 100644 src/inc/MESA_handle_logger.h create mode 100644 src/inc/MESA_htable.h create mode 100644 src/inc/MESA_list.h create mode 100644 src/inc/MESA_list_count.h create mode 100644 src/inc/MESA_list_queue.h create mode 100644 src/inc/MESA_prof_load.h create mode 100644 src/inc/MESA_ring_queue.h create mode 100644 src/lib/libMESA_handle_logger.a create mode 100644 src/lib/libMESA_htable.a create mode 100644 src/lib/libMESA_prof_load.a create mode 100644 src/lib/libapps.a create mode 100644 src/lib/libcrypto.a create mode 100644 src/lib/libevent.a create mode 100644 src/lib/libhiredis.a create mode 100644 src/lib/libssl.a create mode 100644 src/package/Makefile create mode 100644 src/rt/rt.mk create mode 100644 src/rt/rt_common.h create mode 100644 src/rt/rt_file.c create mode 100644 src/rt/rt_file.h create mode 100644 src/rt/rt_stdlib.c create mode 100644 src/rt/rt_stdlib.h create mode 100644 src/rt/rt_string.c create mode 100644 src/rt/rt_string.h create mode 100644 src/rt/rt_sync.h create mode 100644 src/rt/rt_time.c create mode 100644 src/rt/rt_time.h create mode 100644 src/rt/rt_util.c create mode 100644 src/rt/rt_util.h diff --git a/conf/cert_store.ini b/conf/cert_store.ini new file mode 100644 index 0000000..33ae179 --- /dev/null +++ b/conf/cert_store.ini @@ -0,0 +1,18 @@ +[SYSTEM] +#1:print on screen, 0:don't +DEBUG_SWITCH = 1 + +#10:DEBUG, 20:INFO, 30:FATAL +RUN_LOG_LEVEL = 10 +RUN_LOG_PATH = ./logs/ +[CONFIG] +thread-nu = 2 +#ca-path: /usr/local/etc +ca-path = /home/fengweihao/openssl/test +[LIBEVENT] +port = 9995 +[REDIS] +ip = 127.0.0.1 +port = 6379 + + diff --git a/make/application.mk b/make/application.mk new file mode 100644 index 0000000..57f6aa4 --- /dev/null +++ b/make/application.mk @@ -0,0 +1,32 @@ +# target to create object directory + +$(OBJ_DIR): + mkdir $(OBJ_DIR) + #mkdir $(OBJ_DIR_CPP) + +# applications object suffix rule + +$(OBJ_DIR)/%.o: %.c + $(COMPILE) + +$(OBJ_DIR)/%.o: %.S + $(ASSEMBLE) + +#$(OBJ_DIR_CPP)/%.o: %.cpp +# $(CPPCOMPILE) + +# application config check and rules + +-include $(OBJS:.o=.d) +#-include $(OBJS_CPP:.o=.d) + +application-target: $(TARGET) + +#$(TARGET): $(OBJ_DIR) $(OBJS) $(LIBS_LIST) $(OBJ_DIR_CPP) $(OBJS_CPP) +# $(CC) -o $@ $(OBJS) $(OBJS_CPP) $(LDFLAGS_PATH) $(LIBS_LIST) $(LDFLAGS_GLOBAL) + +$(TARGET): $(OBJ_DIR) $(OBJS) $(LIBS_LIST) + $(CC) -o $@ $(OBJS) $(LDFLAGS_PATH) $(LIBS_LIST) $(LDFLAGS_GLOBAL) + +$(TARGET).stp: $(TARGET) + $(STRIP) -o $(TARGET).stp $(TARGET) diff --git a/make/common.mk b/make/common.mk new file mode 100644 index 0000000..1c5c22d --- /dev/null +++ b/make/common.mk @@ -0,0 +1,51 @@ +include $(CERT_ROOT)/make/config.mk + +#never change this +CERT_ARCH_TARGET:=linux_64 +RELEASED:=TRUE +# Add flags set by config.mk +CFLAGS_GLOBAL += $(CFLAGS_COMMON_CONFIG) +ASFLAGS_GLOBAL += $(CFLAGS_COMMON_CONFIG) + +CPPFLAGS_GLOBAL = -I$(CERT_ROOT) + +CFLAGS_GLOBAL = $(CPPFLAGS_GLOBAL) + +CFLAGS_GLOBAL += -DCERT_BRANCH_TARGET=${BRANCH_TARGET} -DSEMP_PLATFORM=${SEMP_PLATFORM} -DRELEASED=${RELEASED} +CFLAGS_GLOBAL += -Wall + +ASFLAGS_GLOBAL = $(CPPFLAGS_GLOBAL) -g + +LDFLAGS_GLOBAL = + +LDFLAGS_PATH = -L$(CERT_ROOT)/target/lib + +PREFIX=-linux_64 +CFLAGS_GLOBAL += -DCERT_ARCH_TARGET=${CERT_ARCH_TARGET} +ASFLAGS_GLOBAL += -DCERT_ARCH_TARGET=${CERT_ARCH_TARGET} +LDFLAGS_GLOBAL += -lrt + +CC = gcc +AR = ar +LD = ld +STRIP = strip +OBJDUMP = objdump +NM = nm + +#CPP = g++ + +# build object directory + +OBJ_DIR = obj$(PREFIX) + +#OBJ_DIR_CPP = obj$(PREFIX)/cpp + +# standard compile line + +COMPILE = $(CC) $(CFLAGS_GLOBAL) $(CFLAGS_LOCAL) -MD -c -o $@ $< + +ASSEMBLE = $(CC) $(ASFLAGS_GLOBAL) $(ASFLAGS_LOCAL) -MD -c -o $@ $< + +MYARCHIVE = $(AR) -cr $@ $< + +#CPPCOMPILE = $(CPP) $(CFLAGS_GLOBAL) $(CFLAGS_LOCAL) -MD -c -o $@ $< diff --git a/make/config.mk b/make/config.mk new file mode 100644 index 0000000..e56fa2b --- /dev/null +++ b/make/config.mk @@ -0,0 +1,9 @@ +#Compile normal version +BRANCH_TARGET:=BRANCH_CERT + +#Comlile bound kernel version +#BRANCH_TARGET:=BRANCH_KERNEL + +#never change this +CERT_ARCH_TARGET:=linux_64 + diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..fbeab46 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,84 @@ + +ifndef CERT_ROOT +CERT_ROOT = .. +endif + +MAJOR="1.0" +BUILD="1.0" +BUILD_FINGERPRINT=$(MAJOR).$(BUILD) +BUILD_FINGERPRINT2=$(strip $(BUILD_FINGERPRINT)) + +# Default simulation parameters +NUM_PROCESSORS=1 + +#SPASR_ARCH_TARGET:=linux_64 + +TARGET = cert_store + +all: ${TARGET} + +# standard common Makefile fragment +include $(CERT_ROOT)/make/common.mk + +# 3RD library path +LIB_PATH := $(CERT_ROOT)/libs + +# application specification + +dir := . +OBJS := \ + $(OBJ_DIR)/cert_store.o \ + $(OBJ_DIR)/cert_init.o \ + $(OBJ_DIR)/cert_daemon.o\ + $(OBJ_DIR)/cert_session.o\ + +dir := ./components/syslogd +include $(dir)/syslog.mk +OBJS += $(OBJS_$(dir)) + +dir := ./rt +include $(dir)/rt.mk +OBJS += $(OBJS_$(dir)) + +LDFLAGS_GLOBAL += -L ./lib -lapps -lcrypto -lssl -levent -lhiredis -lMESA_htable +LDFLAGS_GLOBAL += -L ./lib -lMESA_htable -lMESA_handle_logger -lMESA_prof_load +LDFLAGS_GLOBAL += \ + -lpthread -lcrypt -lm -lz -ldl -lstdc++ + +CFLAGS_LOCAL = -std=gnu99 -g -O3 -W -Wall \ + -I.\ + -I./components/syslogd\ + -I./components/libevent\ + -I./components/redis\ + -I./components/openssl\ + -I./rt \ + -I./inc \ + +DEPS := $(objs:.o=.d) + +CLEAN_LIST := $(CLEAN_LIST) $(OBJS) $(DEPS) $(TARGET_LIB) $(OBJ_DIR) + +$(OBJ_DIR)/%.o: $(d)/%.c + $(COMPILE) + +include $(CERT_ROOT)/make/application.mk + +tarball: cert_store + if [ ! -d "package/bin" ]; then mkdir -p "package/bin"; fi + if [ ! -d "package/lib" ]; then mkdir -p "package/lib"; fi + if [ ! -d "package/etc" ]; then mkdir -p "package/etc"; fi + cp cert_store package/bin/cert_store + #cp ../lib/*.a package/lib/ + cp ../conf/cert_store.yaml package/etc/ + cd package && tar cpfz cert_store-$(BUILD_FINGERPRINT2).tar.gz bin etc lib Makefile + cd .. + mv package/cert_store-$(BUILD_FINGERPRINT2).tar.gz ../release/ + +clean: + rm -rf $(CLEAN_LIST) + rm -f $(TARGET) + rm -rf package/bin package/lib package/etc + +clobber: clean + rm -rf $(OBJ_DIR) + diff --git a/src/cert_daemon.c b/src/cert_daemon.c new file mode 100644 index 0000000..68fa263 --- /dev/null +++ b/src/cert_daemon.c @@ -0,0 +1,120 @@ +/************************************************************************* + > File Name: cert_daemon.c + > Author: fengweihao + > Mail: + > Created Time: Tue 29 May 2018 11:12:46 PM PDT + ************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "logging.h" + +static volatile sig_atomic_t sigflag = 0; + +static void SignalHandlerSigusr1 (__attribute__((unused))int signo) { + sigflag = 1; +} + +/** + * \brief Tell the parent process the child is ready + * + * \param pid pid of the parent process to signal + */ +static void TellWaitingParent (pid_t pid) { + kill(pid, SIGUSR1); +} + +/** + * \brief Set the parent on stand-by until the child is ready + * + * \param pid pid of the child process to wait + */ +static void WaitForChild (pid_t pid) { + int status; + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Daemon: Parent waiting for child to be ready...\n"); + /* Wait until child signals is ready */ + while (sigflag == 0) { + if (waitpid(pid, &status, WNOHANG)) { + /* Check if the child is still there, otherwise the parent should exit */ + if (WIFEXITED(status) || WIFSIGNALED(status)) { + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Child died unexpectedly\n"); + exit(EXIT_FAILURE); + } + } + /* sigsuspend(); */ + sleep(1); + } +} +/** + * \brief Close stdin, stdout, stderr.Redirect logging info to syslog + * + */ +static void SetupLogging (void) { + /* Redirect stdin, stdout, stderr to /dev/null */ + int fd = open("/dev/null", O_RDWR); + if (fd < 0) + return; + if (dup2(fd, 0) < 0) + return; + if (dup2(fd, 1) < 0) + return; + if (dup2(fd, 2) < 0) + return; + close(fd); +} + +/** + * \brief Daemonize the process + * + */ +void daemonize (void) { + pid_t pid, sid; + + signal(SIGUSR1, SignalHandlerSigusr1); + /** \todo We should check if wie allow more than 1 instance + to run simultaneously. Maybe change the behaviour + through conf file */ + + /* Creates a new process */ + pid = fork(); + + if (pid < 0) { + /* Fork error */ + exit(EXIT_FAILURE); + } else if (pid == 0) { + /* Child continues here */ + umask(027); + + sid = setsid(); + if (sid < 0) { + exit(EXIT_FAILURE); + } + + if (chdir("/") < 0) { + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Error changing to working directory '/'"); + } + + SetupLogging(); + + /* Child is ready, tell its parent */ + TellWaitingParent(getppid()); + + /* Daemon is up and running */ + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Daemon is running\n"); + return; + } + /* Parent continues here, waiting for child to be ready */ + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Parent is waiting for child to be ready\n"); + WaitForChild(pid); + + /* Parent exits */ + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Child is ready, parent exiting\n"); + exit(EXIT_SUCCESS); +} diff --git a/src/cert_daemon.h b/src/cert_daemon.h new file mode 100644 index 0000000..efe38e3 --- /dev/null +++ b/src/cert_daemon.h @@ -0,0 +1,13 @@ +/************************************************************************* + > File Name: cert_daemon.h + > Author: + > Mail: + > Created Time: Tue 29 May 2018 11:12:46 PM PDT + ************************************************************************/ + +#ifndef _NDPI_DAEMON_H +#define _NDPI_DAEMON_H + +extern void daemonize (void); + +#endif diff --git a/src/cert_init.c b/src/cert_init.c new file mode 100644 index 0000000..8727f0a --- /dev/null +++ b/src/cert_init.c @@ -0,0 +1,100 @@ +/************************************************************************* + > File Name: cert_init.c + > Author: fengweihao + > Mail: + > Created Time: Fri 01 Jun 2018 12:06:01 AM PDT + ************************************************************************/ + +#include +#include +#include + +#include "rt_string.h" +#include "rt_common.h" +#include "rt_util.h" +#include "rt_file.h" +#include "cert_init.h" +#include "logging.h" +#include "MESA_prof_load.h" + +struct config_bucket_t certConfig = { + .thread_nu = 1, + .ca_path = "/usr/local/bin/", + .e_port = 9995, + .r_ip = "0.0.0.0", + .r_port = 3366, +}; + +struct config_bucket_t *cert_default_config() +{ + return &certConfig; +} + +static int load_system_config(char *config) +{ + int xret = -1; + + struct config_bucket_t *rte = cert_default_config(); + + xret = MESA_load_profile_uint_nodef(config, "CONFIG", "thread-nu", &(rte->thread_nu)); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Reading the number of running threads failed"); + } + + xret = MESA_load_profile_string_nodef(config, "CONFIG", "ca-path", rte->ca_path, 128); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Reading the CA path failure"); + goto finish; + } + + if(!rt_dir_exsit(rte->ca_path)) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "The signature certificate(%s) does not exist", rte->ca_path); + goto finish; + } + +finish: + printf("rte->thread_nu = %d\n", rte->thread_nu); + printf("ca path (%s)\n", rte->ca_path); + + return xret; +} + +static int load_module_config(char *config) +{ + int xret = -1; + + struct config_bucket_t *rte = cert_default_config(); + + xret = MESA_load_profile_short_nodef(config, "LIBEVENT", "port", (short *)&(rte->e_port)); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Libevent Port invalid\n"); + goto finish; + } + + xret = MESA_load_profile_string_nodef(config, "REDIS", "ip", rte->r_ip, 16); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Ip invalid\n"); + goto finish; + } + + xret = MESA_load_profile_short_nodef(config, "REDIS", "port", (short *)&(rte->r_port)); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Redis Port invalid\n"); + goto finish; + } + + printf("libevent port (%d)\n", rte->e_port); + printf("redis ip (%s)\n", rte->r_ip); + printf("redis port (%d)\n", rte->r_port); + +finish: + return xret; +} + +void cert_init_config(char *config) +{ + load_system_config(config); + + load_module_config(config); +} + diff --git a/src/cert_init.h b/src/cert_init.h new file mode 100644 index 0000000..1c9fd04 --- /dev/null +++ b/src/cert_init.h @@ -0,0 +1,73 @@ +/************************************************************************* + > File Name: cert_init.h + > Author: + > Mail: + > Created Time: Fri 01 Jun 2018 12:06:26 AM PDT + ************************************************************************/ + +#ifndef _CERT_INIT_H +#define _CERT_INIT_H + +#include +#include +#include +#include +#include +#include + +enum rt_command_type{ + RT_COMMAND_UKNOWN, + + RT_COMMAND_INSERT, + RT_COMMAND_DELETE, + RT_COMMAND_CHANGE, + RT_COMMAND_SELECT, + RT_COMMAND_SET_TIME +}; + +struct redis_t{ + enum rt_command_type type; + struct redisAsyncContext *cl_ctx; +}; + +struct request_t{ +#define DATALEN 64 + char host[DATALEN]; + + int flag; + + int valid; + + struct evhttp_request *evh_req; +}; + +struct cert_trapper_t{ + + int thread_id; + + EVP_PKEY *key; + X509 *root; + char *cert; + + struct request_t *req; + + struct redis_t *redis; +}; + +struct config_bucket_t{ + unsigned int thread_nu; + + char ca_path[128]; + + uint16_t e_port; /* libevent prot*/ + + char r_ip[16]; /* redis ip */ + + uint16_t r_port; /* redis port*/ +}; + +extern struct config_bucket_t *cert_default_config(); + +extern void cert_init_config(char *config); + +#endif diff --git a/src/cert_session.c b/src/cert_session.c new file mode 100644 index 0000000..5ecce16 --- /dev/null +++ b/src/cert_session.c @@ -0,0 +1,935 @@ +/************************************************************************* + > File Name: cert_session.c + > Author: + > Mail: + > Created Time: Fri 01 Jun 2018 02:00:56 AM PDT + ************************************************************************/ + +#include +#include +#include +#include +#include + +/* openssl**/ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "rt_string.h" +#include "rt_common.h" +#include "rt_stdlib.h" +#include "rt_util.h" +#include "rt_file.h" +#include "cert_init.h" +#include "async.h" +#include "read.h" +#include "bufferevent.h" +#include "listener.h" +#include "libevent.h" +#include "cert_session.h" +#include "event_compat.h" +#include "http.h" +#include "buffer.h" +#include "util-internal.h" +#include "logging.h" + +#define SG_DATA_SIZE 2048 + +//#define DEFAULT_PRIVATEKEY_NAME "private.key" +//#define DEFAULT_CA_CERTIFICATE "ca.cer" + +#define DEFAULT_PRIVATEKEY_NAME "file.key" +#define DEFAULT_CA_CERTIFICATE "file.cer" + +void connectCallback(const struct redisAsyncContext *c, int status) { + if (status != REDIS_OK) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Redis connect error : %s\n", c->errstr); + return; + } + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Redis server connected...\n"); +} + +static libevent_thread *threads; + +#define MAX_NUM_READER_THREADS 16 + +void disconnectCallback(const struct redisAsyncContext *c, int status) { + if (status != REDIS_OK) { + printf("Redis disconnect error: %s\n", c->errstr); + return; + } + printf("Redis server disconnected...\n"); +} + +int +ssl_rand(void *p, size_t sz) +{ + int rv; + +#if OPENSSL_VERSION_NUMBER < 0x10100000L + rv = RAND_pseudo_bytes((unsigned char*)p, sz); + if (rv == 1) + return 0; +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + rv = RAND_bytes((unsigned char*)p, sz); + if (rv == 1) + return 0; + return -1; +} + +int +ssl_x509_serial_copyrand(X509 *dstcrt, X509 *srccrt) +{ + ASN1_INTEGER *srcptr, *dstptr; + BIGNUM *bnserial; + unsigned int rand; + int rv; + +#ifndef PURIFY + rv = ssl_rand(&rand, sizeof(rand)); +#else /* PURIFY */ + rand = 0xF001; + rv = 0; +#endif /* PURIFY */ + dstptr = X509_get_serialNumber(dstcrt); + srcptr = X509_get_serialNumber(srccrt); + if ((rv == -1) || !dstptr || !srcptr) + return -1; + bnserial = ASN1_INTEGER_to_BN(srcptr, NULL); + if (!bnserial) { + /* random 32-bit serial */ + ASN1_INTEGER_set(dstptr, rand); + } else { + /* original serial plus random 32-bit offset */ + BN_add_word(bnserial, rand); + BN_to_ASN1_INTEGER(bnserial, dstptr); + BN_free(bnserial); + } + return 0; +} + +int +ssl_x509_v3ext_add(X509V3_CTX *ctx, X509 *crt, char *k, char *v) +{ + X509_EXTENSION *ext; + + if (!(ext = X509V3_EXT_conf(NULL, ctx, k, v))) { + return -1; + } + if (X509_add_ext(crt, ext, -1) != 1) { + X509_EXTENSION_free(ext); + return -1; + } + X509_EXTENSION_free(ext); + return 0; +} + +int +ssl_x509_v3ext_copy_by_nid(X509 *crt, X509 *origcrt, int nid) +{ + X509_EXTENSION *ext; + int pos; + + pos = X509_get_ext_by_NID(origcrt, nid, -1); + if (pos == -1) + return 0; + ext = X509_get_ext(origcrt, pos); + if (!ext) + return -1; + if (X509_add_ext(crt, ext, -1) != 1) + return -1; + return 1; +} + +X509 * +openssl_x509_modify_by_cert(X509 *cacrt, EVP_PKEY *cakey, X509 *origcrt, EVP_PKEY *key, + const char *extraname, const char *crlurl) +{ + X509_NAME *subject, *issuer; + GENERAL_NAMES *names; + GENERAL_NAME *gn; + X509 *crt; + int rv; +//subjectname,issuername + subject = X509_get_subject_name(origcrt); + issuer = X509_get_subject_name(cacrt); + if (!subject || !issuer) + return NULL; + + crt = X509_new(); + if (!crt) + return NULL; +//version,subjectname,issuername,serialnum,time,pubkey + if (!X509_set_version(crt, 0x02) || + !X509_set_subject_name(crt, subject) || + !X509_set_issuer_name(crt, issuer) || + ssl_x509_serial_copyrand(crt, origcrt) == -1 || + !X509_gmtime_adj(X509_get_notBefore(crt), (long)-60*60*24) || + !X509_gmtime_adj(X509_get_notAfter(crt), (long)60*60*24*364) || + !X509_set_pubkey(crt, key)) + goto errout; + + /* add standard v3 extensions; cf. RFC 2459 */ +//extensions + X509V3_CTX ctx; + X509V3_set_ctx(&ctx, cacrt, crt, NULL, NULL, 0); + + if (ssl_x509_v3ext_add(&ctx, crt, "subjectKeyIdentifier", + "hash") == -1 || + ssl_x509_v3ext_add(&ctx, crt, "authorityKeyIdentifier", + "keyid,issuer:always") == -1) + goto errout; + + rv = ssl_x509_v3ext_copy_by_nid(crt, origcrt, + NID_basic_constraints); + if (rv == 0) + rv = ssl_x509_v3ext_add(&ctx, crt, "basicConstraints", + "CA:FALSE"); + if (rv == -1) + goto errout; + + rv = ssl_x509_v3ext_copy_by_nid(crt, origcrt, + NID_key_usage); + if (rv == 0) + rv = ssl_x509_v3ext_add(&ctx, crt, "keyUsage", + "digitalSignature," + "keyEncipherment"); + if (rv == -1) + goto errout; + + rv = ssl_x509_v3ext_copy_by_nid(crt, origcrt, + NID_ext_key_usage); + if (rv == 0) + rv = ssl_x509_v3ext_add(&ctx, crt, "extendedKeyUsage", + "serverAuth"); + if (rv == -1) + goto errout; + + char *crlurlval; + if (crlurl) { + crlurlval = (char *)malloc(strlen(crlurl) + 1); + if (sprintf(crlurlval, "URI:%s", crlurl) < 0) + goto errout; + if (ssl_x509_v3ext_add(&ctx, crt, "crlDistributionPoints", + crlurlval) == -1) { + free(crlurlval); + goto errout; + } + free(crlurlval); + } + + char *cfval; + if (!extraname) { + /* no extraname provided: copy original subjectAltName ext */ + if (ssl_x509_v3ext_copy_by_nid(crt, origcrt, + NID_subject_alt_name) == -1) + goto errout; + } else { + names = (GENERAL_NAMES *)X509_get_ext_d2i(origcrt, NID_subject_alt_name, 0, 0); + if (!names) { + /* no subjectAltName present: add new one */ + cfval = (char *)malloc(strlen(extraname) + 1); + if (sprintf(cfval, "DNS:%s", extraname) < 0) + goto errout; + if (ssl_x509_v3ext_add(&ctx, crt, "subjectAltName", + cfval) == -1) { + free(cfval); + goto errout; + } + free(cfval); + } else { + /* add extraname to original subjectAltName + * and add it to the new certificate */ + gn = GENERAL_NAME_new(); + if (!gn) + goto errout2; + gn->type = GEN_DNS; + gn->d.dNSName = ASN1_IA5STRING_new(); + if (!gn->d.dNSName) + goto errout3; + ASN1_STRING_set(gn->d.dNSName, + (unsigned char *)extraname, + strlen(extraname)); + sk_GENERAL_NAME_push(names, gn); + X509_EXTENSION *ext = X509V3_EXT_i2d( + NID_subject_alt_name, 0, names); + if (!X509_add_ext(crt, ext, -1)) { + if (ext) { + X509_EXTENSION_free(ext); + } + goto errout3; + } + X509_EXTENSION_free(ext); + sk_GENERAL_NAME_pop_free(names, GENERAL_NAME_free); + } + } +#ifdef DEBUG_CERTIFICATE + ssl_x509_v3ext_add(&ctx, crt, "nsComment", "Generated by " PKGLABEL); +#endif /* DEBUG_CERTIFICATE */ + + const EVP_MD *md; + switch (EVP_PKEY_type(EVP_PKEY_base_id(cakey))) { +#ifndef OPENSSL_NO_RSA + case EVP_PKEY_RSA: + switch (X509_get_signature_nid(origcrt)) { + case NID_md5WithRSAEncryption: + md = EVP_md5(); + break; + case NID_ripemd160WithRSA: + md = EVP_ripemd160(); + break; + case NID_sha1WithRSAEncryption: + md = EVP_sha1(); + break; + case NID_sha224WithRSAEncryption: + md = EVP_sha224(); + break; + case NID_sha256WithRSAEncryption: + md = EVP_sha256(); + break; + case NID_sha384WithRSAEncryption: + md = EVP_sha384(); + break; + case NID_sha512WithRSAEncryption: + md = EVP_sha512(); + break; +#ifndef OPENSSL_NO_SHA0 + case NID_shaWithRSAEncryption: + md = EVP_sha(); + break; +#endif /* !OPENSSL_NO_SHA0 */ + default: + md = EVP_sha256(); + break; + } + break; +#endif /* !OPENSSL_NO_RSA */ +#ifndef OPENSSL_NO_DSA + case EVP_PKEY_DSA: + switch (X509_get_signature_nid(origcrt)) { + case NID_dsaWithSHA1: + case NID_dsaWithSHA1_2: + md = EVP_sha1(); + break; + case NID_dsa_with_SHA224: + md = EVP_sha224(); + break; + case NID_dsa_with_SHA256: + md = EVP_sha256(); + break; +#ifndef OPENSSL_NO_SHA0 + case NID_dsaWithSHA: + md = EVP_sha(); + break; +#endif /* !OPENSSL_NO_SHA0 */ + default: + md = EVP_sha256(); + break; + } + break; +#endif /* !OPENSSL_NO_DSA */ +#ifndef OPENSSL_NO_ECDSA + case EVP_PKEY_EC: + switch (X509_get_signature_nid(origcrt)) { + case NID_ecdsa_with_SHA1: + md = EVP_sha1(); + break; + case NID_ecdsa_with_SHA224: + md = EVP_sha224(); + break; + case NID_ecdsa_with_SHA256: + md = EVP_sha256(); + break; + case NID_ecdsa_with_SHA384: + md = EVP_sha384(); + break; + case NID_ecdsa_with_SHA512: + md = EVP_sha512(); + break; + default: + md = EVP_sha256(); + break; + } + break; +#endif /* !OPENSSL_NO_ECDSA */ + default: + goto errout; + } + if (!X509_sign(crt, cakey, md)) + goto errout; + + return crt; + +errout3: + GENERAL_NAME_free(gn); +errout2: + sk_GENERAL_NAME_pop_free(names, GENERAL_NAME_free); +errout: + X509_free(crt); + return NULL; +} + +X509 *X509_load_cert_by_file(char *cert) +{ + BIO *bp = NULL; + char *data = NULL; + X509* sk = NULL; + + int len = strlen(cert); + + data = (char *)malloc(len + 1); + if (data == NULL){ + goto finish; + } + strncpy(data, cert, len + 1); + + if ( (bp=BIO_new(BIO_s_mem())) == NULL){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "unable to create BIO for output\n"); + free(data); + goto finish; + } + BIO_printf(bp, "%s", data); + + /* This loads from a file, a stack of x509/crl/pkey sets */ + sk = PEM_read_bio_X509(bp, NULL, NULL, NULL); + if (sk == NULL) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "error reading the file"); + goto err; + } +err: + BIO_free(bp); + free(data); +finish: + return sk; +} + +char *openssl_x509_to_str(X509 *crt) +{ + BIO *bp=NULL; + char *buf = NULL; + int len = 0; + + buf = (char *)malloc(SG_DATA_SIZE * 2); + if (!buf) + return NULL; + + if ( (bp=BIO_new(BIO_s_mem())) == NULL){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "unable to create BIO for output\n"); + free(buf); + goto finish; + } + PEM_write_bio_X509(bp, crt); + len = BIO_read(bp, buf, SG_DATA_SIZE * 2); + if(len <= 0) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Error reading signature file"); + goto err; + } + buf[len]='\0'; +err: + BIO_free(bp); +finish: + return buf; +} + +int cert_redis_init(struct event_base *base, struct redis_t *redisCtx) +{ + int xret = -1; + struct redisAsyncContext *cl_ctx = NULL; + struct config_bucket_t *redis = cert_default_config(); + + cl_ctx = redisAsyncConnect(redis->r_ip, redis->r_port); + if(cl_ctx->err) + { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Redis Connect error : %s", cl_ctx->errstr); + goto finish; + } + redisCtx->cl_ctx = cl_ctx; + xret = 0; + + redisLibeventAttach(cl_ctx, base); + redisAsyncSetConnectCallback(cl_ctx, connectCallback); + redisAsyncSetDisconnectCallback(cl_ctx, disconnectCallback); + +finish: + return xret; +} + +static void +redis_async_set_callback(redisAsyncContext __attribute__((__unused__))*c, void *r, + void *privdata) +{ + redisReply *reply = (redisReply*)r; + + char *host = (char *)privdata; + if(reply->type == REDIS_REPLY_ERROR){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Writing data(key = %s) to redis failed", host); + } + return; +} + +/* Callback used for the /dump URI, and for every non-GET request: + * dumps all information to stdout and gives back a trivial 200 ok */ +static int +evhttp_socket_send(struct evhttp_request *req, char *cert) +{ + struct evbuffer *evb = NULL; + + /* This holds the content we're sending. */ + evb = evbuffer_new(); + + if (cert == NULL){ + goto err; + } + + evhttp_add_header(evhttp_request_get_output_headers(req), + "Content-Type", "test"); + evbuffer_add_printf(evb, "Certificate information: %s. ", cert); + evhttp_send_reply(req, 200, "OK", evb); + goto done; + +err: + evhttp_send_error(req, 404, "Document was not found"); +done: + evbuffer_free(evb); + return 0; +} + +void redis_async_get_callback(redisAsyncContext *c, void *r, void *privdata) +{ + int xret = -1; + redisReply *reply = (redisReply*)r; + + struct cert_trapper_t *certCtx = (struct cert_trapper_t *)privdata; + + /* Obtain certificate judgment from redis **/ + if(reply->type == REDIS_REPLY_STRING){ + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "The Key already exists and sends the certificate information to the requestor"); + if (reply->str != NULL){ + certCtx->cert = reply->str; + } + } + if(reply->type == REDIS_REPLY_NIL){ + /* Certificate information modification and Strategy to judge**/ + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Key does not exist, generating certificate information"); +#if 1 + char *cert = malloc(17); + memcpy(cert, "Test Ca to Send\n", 17); + certCtx->cert = cert; +#else + X509* ca = X509_load_cert_by_file(certCtx->cert); + if (!ca){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to load certificate"); + goto finish; + } + X509* now_ca = openssl_x509_modify_by_cert(certCtx->root, certCtx->key, ca, + X509_get_pubkey(certCtx->root), NULL, NULL); + if (now_ca){ + certCtx->cert = openssl_x509_to_str(now_ca); + } +#endif + xret = redisAsyncCommand(c, redis_async_set_callback, certCtx->req->host, "SET %s %s", certCtx->req->host, certCtx->cert); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to set information to redis server"); + } + } + + evhttp_socket_send(certCtx->req->evh_req, certCtx->cert); + +finish: + return; +} + +int x509_privatekey_init(struct cert_trapper_t *certCtx) +{ + int xret = -1, len = 0; + FILE *fp; RSA *rsa = NULL; + char key_path[128] = {0}, cert_path[128] = {0}; + struct config_bucket_t *rte = cert_default_config(); + + snprintf(key_path, sizeof(key_path), "%s/%s", rte->ca_path, DEFAULT_PRIVATEKEY_NAME); + snprintf(cert_path, sizeof(cert_path), "%s/%s", rte->ca_path, DEFAULT_CA_CERTIFICATE); + + certCtx->key = EVP_PKEY_new(); + printf("rte key = %p\n", certCtx->key); + if (NULL == certCtx->key){ + goto finish; + } + rsa = RSA_new(); + printf("rsa = %p\n", rsa); + if (NULL == rsa){ + goto pkey_free; + } + + unsigned char buf[SG_DATA_SIZE * 2],*p; + fp = fopen(key_path, "r"); + if (NULL == fp){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to open file(%s)", key_path); + goto finish; + } + printf("fp = %p, certCtx->key = %p, rsa = %p\n", fp, certCtx->key, rsa); + + if ( !PEM_read_RSAPrivateKey(fp, &rsa, NULL, NULL) || !EVP_PKEY_assign_RSA(certCtx->key,rsa)) + { + printf("error\n"); + goto rsa_free; + } + fclose(fp); + + fp = fopen(cert_path, "rb"); + if (NULL == fp){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to open file(%s)", cert_path); + goto rsa_free; + } + len = fread(buf, 1, SG_DATA_SIZE * 2, fp); + fclose(fp); + + p = buf; + certCtx->root = X509_new(); + if ( d2i_X509(&certCtx->root, (const unsigned char**)&p, len) == NULL ) + { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Application for x509 failed"); + goto finish; + } + xret = 0; + +rsa_free: + RSA_free(rsa); +pkey_free: + EVP_PKEY_free(certCtx->key); + +finish: + return xret; +} + +#if 0 +int cert_session_finish() +{ + struct cert_trapper_t *rte = cert_default_trapper(); + struct libevent_t *event = rte->libevent; + struct redis_t *redis = rte->redis; + + redisAsyncDisconnect(redis->cl_ctx); + evconnlistener_free(event->listener); + event_base_free(event->base); + X509_free(rte->root); + EVP_PKEY_free(rte->key); + + return 0; +} +#endif + +static struct cert_trapper_t * __engine_init_contex () +{ + struct cert_trapper_t *certCtx = NULL; + + certCtx = (struct cert_trapper_t *)malloc(sizeof(struct cert_trapper_t)); + if (certCtx != NULL){ + certCtx->redis = (struct redis_t *)malloc(sizeof(struct redis_t)); + if (certCtx->redis == NULL){ + free(certCtx); + certCtx = NULL; + goto finish; + } + certCtx->req = (struct request_t *)malloc(sizeof(struct request_t)); + if (certCtx->req == NULL){ + free(certCtx); + certCtx = NULL; + goto finish; + } + } +finish: + return certCtx; +} + +static void __engine_fini_contex(struct cert_trapper_t *certCtx) +{ + if (certCtx){ + if (certCtx->redis){ + free(certCtx->redis); + certCtx->redis = NULL; + } + if (certCtx->req){ + free(certCtx->req); + certCtx->req = NULL; + } + free(certCtx); + certCtx = NULL; + } +} + +///ca?host=www.baidu.com&flag=1&valid=1 +static int get_url_data(const char *uri, char *host, + int *flag, int *valid) +{ + char *str = NULL; + char seps[] = " \t\r\n=&"; + + char *uri_tp = (char *)malloc(strlen(uri) + 1); + if (uri_tp == NULL){ + goto finish; + } + memcpy(uri_tp, uri, strlen(uri)); + + str = strtok(uri_tp + 4, seps); + if (!STRCMP(str, "host")){ + str = strtok(NULL, seps); + memcpy(host, str, strlen(str)); + } + while(str != NULL){ + str = strtok(NULL, seps); + if (str && !STRCMP(str, "flag")){ + str = strtok(NULL, seps); + if (str) + *flag = atoi(str); + } + if (str && !STRCMP(str, "valid")){ + str = strtok(NULL, seps); + if (str) + *valid = atoi(str); + } + } + + free(uri_tp); +finish: + return 0; +} + +void +pthread_work_proc(struct evhttp_request *evh_req, void *arg) +{ + int xret = -1; + struct evhttp_uri *decoded = NULL; + const char *uri = evhttp_request_get_uri(evh_req); + struct cert_trapper_t *certCtx = (struct cert_trapper_t *)arg; + struct request_t *req = certCtx->req; + + const char *cmdtype; + switch (evhttp_request_get_command(evh_req)) { + case EVHTTP_REQ_GET: cmdtype = "GET"; break; + case EVHTTP_REQ_POST: cmdtype = "POST"; break; + case EVHTTP_REQ_HEAD: cmdtype = "HEAD"; break; + case EVHTTP_REQ_PUT: cmdtype = "PUT"; break; + case EVHTTP_REQ_DELETE: cmdtype = "DELETE"; break; + case EVHTTP_REQ_OPTIONS: cmdtype = "OPTIONS"; break; + case EVHTTP_REQ_TRACE: cmdtype = "TRACE"; break; + case EVHTTP_REQ_CONNECT: cmdtype = "CONNECT"; break; + case EVHTTP_REQ_PATCH: cmdtype = "PATCH"; break; + default: cmdtype = "unknown"; break; + } + /* Decode the URI */ + decoded = evhttp_uri_parse(uri); + if (!decoded) { + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "It's not a good URI. Sending BADREQUEST\n"); + evhttp_send_error(evh_req, HTTP_BADREQUEST, 0); + goto finish; + } + + get_url_data(uri, req->host, &req->flag, &req->valid); + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "[Thread %d]Received a %s request for %s, host:%s, flag:%d, valid:%d\nHeaders:", + certCtx->thread_id, cmdtype, uri, req->host, + req->flag, req->valid); + + if (req->host[0] != '\0'){ + req->evh_req = evh_req; + xret = redisAsyncCommand(certCtx->redis->cl_ctx, redis_async_get_callback, certCtx, "GET %s", req->host); + if (xret < 0){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to get information from redis server"); + } + } + evhttp_uri_free(decoded); +finish: + return; +} + +static struct cert_trapper_t * +cert_trapper_task_int(struct event_base *base, int id) +{ + int xret = -1; + + struct cert_trapper_t *certCtx = __engine_init_contex(); + if (!certCtx){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to initialize context data"); + goto finish; + } + certCtx->thread_id = id; + memset(certCtx->req->host, 0, 64); + + /* Initialize the redis connection*/ + xret = cert_redis_init(base, certCtx->redis); + if (xret < 0){ + __engine_fini_contex(certCtx); + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Initialize the redis connection is failure\n"); + //goto finish; + } +#if 0 + /* Initialize the X509 CA*/ + xret = x509_privatekey_init(certCtx); + if (xret < 0){ + __engine_fini_contex(certCtx); + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to initialize the x509 certificate"); + //goto finish; + } +#endif + +finish: + return certCtx; +} + +static void *pthread_worker_libevent(void *arg) +{ + libevent_thread *me = (libevent_thread *)arg; + + struct cert_trapper_t *certCtx = NULL; + evutil_socket_t accetp_fd = me->accept_fd; + + struct evhttp *http = NULL; + struct event_base *base = NULL; + struct evhttp_bound_socket *bound = NULL; + + struct config_bucket_t *rte = cert_default_config(); + + base = event_base_new(); + if (! base) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Can't allocate event base\n"); + goto finish; + } + + http = evhttp_new(base); + if (!http) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "couldn't create evhttp. Exiting.\n"); + goto error; + } + + /* Context initialization */ + certCtx = cert_trapper_task_int(base, me->id); + if (!certCtx){ + goto error; + } + evhttp_set_cb(http, "/ca", pthread_work_proc, certCtx); + + bound = evhttp_accept_socket_with_handle(http, accetp_fd); + if (bound != NULL) { + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Bound to port %d - Awaiting connections ... ", rte->e_port); + } + + event_base_dispatch(base); + +error: + event_base_free(base); +finish: + return NULL; +} + +static evutil_socket_t +evhttp_listen_socket_byuser(const struct sockaddr *sa, int socklen, + unsigned flags, int backlog) +{ + evutil_socket_t fd; + int on = 1; + int family = sa ? sa->sa_family : AF_UNSPEC; + int socktype = SOCK_STREAM | EVUTIL_SOCK_NONBLOCK; + + if (flags & LEV_OPT_CLOSE_ON_EXEC) + socktype |= EVUTIL_SOCK_CLOEXEC; + + fd = evutil_socket_(family, socktype, 0); + if (fd == -1) + return fd; + + if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on))<0) + goto err; + + if (flags & LEV_OPT_REUSEABLE) { + if (evutil_make_listen_socket_reuseable(fd) < 0) + goto err; + } + + if (flags & LEV_OPT_REUSEABLE_PORT) { + if (evutil_make_listen_socket_reuseable_port(fd) < 0) + goto err; + } + + if (sa) { + if (bind(fd, sa, socklen)<0) + goto err; + } + + if (listen(fd, backlog) == -1) { + goto err; + } + return fd; +err: + evutil_closesocket(fd); + return fd; +} + +int libevent_socket_init() +{ + struct sockaddr_in sin; + evutil_socket_t accept_fd = -1; + int xret = -1; + unsigned int tid = 0; + libevent_thread *thread = NULL; + + struct config_bucket_t *rte = cert_default_config(); + unsigned int thread_nu = rte->thread_nu; + + /* Create a new evhttp object to handle requests. */ + memset(&sin, 0, sizeof(struct sockaddr_in)); + sin.sin_family = AF_INET; + sin.sin_port = htons(rte->e_port); + accept_fd = evhttp_listen_socket_byuser((struct sockaddr*)&sin, sizeof(struct sockaddr_in), + LEV_OPT_REUSEABLE_PORT|LEV_OPT_CLOSE_ON_FREE, -1); + if (accept_fd < 0) { + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Could not create a listen!\n"); + goto finish; + } + + threads = calloc(thread_nu, sizeof(libevent_thread)); + if (! threads) { + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Can't allocate thread descriptors"); + goto finish; + } + + /* Create threads after we've done all the libevent setup. */ + for (tid = 0; tid < thread_nu; tid++) { + thread = threads + tid; + + thread->id = tid; + thread->accept_fd = accept_fd; + thread->routine = pthread_worker_libevent; + + if (pthread_create(&thread->pid, thread->attr, thread->routine, &threads[tid])){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "%s", strerror(errno)); + goto finish; + } + + if (pthread_detach(thread->pid)){ + mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "%s", strerror(errno)); + goto finish; + } + } + + FOREVER{ + sleep(1); + } + +finish: + return xret; +} + +int cert_session_init() +{ + int xret = 0; + + libevent_socket_init(); + + return xret; +} + diff --git a/src/cert_session.h b/src/cert_session.h new file mode 100644 index 0000000..1ed2b4c --- /dev/null +++ b/src/cert_session.h @@ -0,0 +1,48 @@ +/************************************************************************* + > File Name: cert_session.h + > Author: + > Mail: + > Created Time: Fri 01 Jun 2018 02:01:08 AM PDT + ************************************************************************/ + +#ifndef _CERT_SESSION_H +#define _CERT_SESSION_H + +#include "event_struct.h" +#include "MESA_list_queue.h" +#include "rt_sync.h" + +enum conn_states { + conn_listening, /**< the socket which listens for connections */ + conn_new_cmd, /**< Prepare connection for next command */ + conn_waiting, /**< waiting for a readable socket */ + conn_read, /**< reading in a command line */ + conn_parse_cmd, /**< try to parse a command from the input buffer */ + conn_write, /**< writing out a simple response */ + conn_nread, /**< reading in a fixed number of bytes */ + conn_swallow, /**< swallowing unnecessary bytes w/o storing */ + conn_closing, /**< closing this connection */ + conn_mwrite, /**< writing out many items sequentially */ + conn_closed, /**< connection is closed */ + conn_watch, /**< held by the logger thread as a watcher */ + conn_max_state /**< Max state value (used for assertion) */ +}; + +typedef struct { + int id; + + rt_pthread pid; /* unique ID of this thread */ + + evutil_socket_t accept_fd; + + rt_pthread_attr *attr; + + void * (*routine)(void *); /** Executive entry */ +} libevent_thread; + +extern int cert_session_init(); + +extern int cert_session_finish(); + +#endif + diff --git a/src/cert_store.c b/src/cert_store.c new file mode 100644 index 0000000..9dca3c4 --- /dev/null +++ b/src/cert_store.c @@ -0,0 +1,102 @@ +/************************************************************************* + > File Name: cert_server.c + > Author: fengweihao + > Mail: fengweihao158@163.com + > Created Time: Tue 29 May 2018 06:45:23 PM PDT + ************************************************************************/ + +#include +#include +#include + +#include "rt_string.h" +#include "rt_common.h" +#include "cert_daemon.h" +#include "cert_init.h" +#include "cert_session.h" +#include "logging.h" +#include "MESA_prof_load.h" + +/* GIT Release */ +#define CERT_GIT_RELEASE "1.1.0" + +/* Configure Path */ +#if 0 +#define CERT_BASIC_CFG "/usr/local/etc/cert_store.yaml" +#else +#define CERT_BASIC_CFG "../conf/cert_store.ini" +#endif + +static char* cert_revision() { return (CERT_GIT_RELEASE); } + +enum syslog_display_format{ + FORMAT_CONSOLE, + FORMAT_FILE, + FORMAT_SYSLOG +}; + +static void help() +{ + printf("Welcome to cert server %s\n", cert_revision()); + printf("cert_server <--debug|--release|--daemon>\n" + "Usage:\n" + " --debug | Run the program in debug mode and display\n" + " | the print message on the interface\n" + " --release | Run the program in release mode, the interface\n" + " | will not display print message\n" + " --daemon | Run in daemon mode\n"); +} + +static void +cert_argv_parser(int argc, char **argv) +{ + int i; + + if (argc != 2){ + help(); + exit(0); + } + + for (i = 0; argv[i] != NULL; i++){ + /** run version parser */ + if (!STRCMP (argv[i], "--release")){ + run_mode = 0x00; + goto finish; + } + + /** decoder configuration parser */ + if (!STRCMP(argv[i], "--debug")){ + run_mode = 0x10; + goto finish; + } + + /** daemonize */ + if (!STRCMP(argv[i], "--daemon")){ + run_mode = 0x20; + goto finish; + } + } + +finish: + return; +} + +int main(int argc, char **argv) +{ + cert_argv_parser(argc, argv); + + cert_syslog_init(CERT_BASIC_CFG); + + if (MODE_TYPE(0x20)){ + daemonize(); + } + + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Cert server init success\n"); + + cert_init_config(CERT_BASIC_CFG); + + cert_session_init(); + + return 0; +} + diff --git a/src/components/libevent/TFX3C1D.tmp b/src/components/libevent/TFX3C1D.tmp new file mode 100644 index 0000000..e69de29 diff --git a/src/components/libevent/buffer.h b/src/components/libevent/buffer.h new file mode 100644 index 0000000..67df9ef --- /dev/null +++ b/src/components/libevent/buffer.h @@ -0,0 +1,1076 @@ +/* + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_BUFFER_H_INCLUDED_ +#define EVENT2_BUFFER_H_INCLUDED_ + +/** @file event2/buffer.h + + Functions for buffering data for network sending or receiving. + + An evbuffer can be used for preparing data before sending it to + the network or conversely for reading data from the network. + Evbuffers try to avoid memory copies as much as possible. As a + result, evbuffers can be used to pass data around without actually + incurring the overhead of copying the data. + + A new evbuffer can be allocated with evbuffer_new(), and can be + freed with evbuffer_free(). Most users will be using evbuffers via + the bufferevent interface. To access a bufferevent's evbuffers, use + bufferevent_get_input() and bufferevent_get_output(). + + There are several guidelines for using evbuffers. + + - if you already know how much data you are going to add as a result + of calling evbuffer_add() multiple times, it makes sense to use + evbuffer_expand() first to make sure that enough memory is allocated + before hand. + + - evbuffer_add_buffer() adds the contents of one buffer to the other + without incurring any unnecessary memory copies. + + - evbuffer_add() and evbuffer_add_buffer() do not mix very well: + if you use them, you will wind up with fragmented memory in your + buffer. + + - For high-performance code, you may want to avoid copying data into and out + of buffers. You can skip the copy step by using + evbuffer_reserve_space()/evbuffer_commit_space() when writing into a + buffer, and evbuffer_peek() when reading. + + In Libevent 2.0 and later, evbuffers are represented using a linked + list of memory chunks, with pointers to the first and last chunk in + the chain. + + As the contents of an evbuffer can be stored in multiple different + memory blocks, it cannot be accessed directly. Instead, evbuffer_pullup() + can be used to force a specified number of bytes to be contiguous. This + will cause memory reallocation and memory copies if the data is split + across multiple blocks. It is more efficient, however, to use + evbuffer_peek() if you don't require that the memory to be contiguous. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_UIO_H +#include +#endif +#include + +/** + An evbuffer is an opaque data type for efficiently buffering data to be + sent or received on the network. + + @see event2/event.h for more information +*/ +struct evbuffer +#ifdef EVENT_IN_DOXYGEN_ +{} +#endif +; + +/** + Pointer to a position within an evbuffer. + + Used when repeatedly searching through a buffer. Calling any function + that modifies or re-packs the buffer contents may invalidate all + evbuffer_ptrs for that buffer. Do not modify or contruct these values + except with evbuffer_ptr_set. + + An evbuffer_ptr can represent any position from the start of a buffer up + to a position immediately after the end of a buffer. + + @see evbuffer_ptr_set() + */ +struct evbuffer_ptr { + ev_ssize_t pos; + + /* Do not alter or rely on the values of fields: they are for internal + * use */ + struct { + void *chain; + size_t pos_in_chain; + } internal_; +}; + +/** Describes a single extent of memory inside an evbuffer. Used for + direct-access functions. + + @see evbuffer_reserve_space, evbuffer_commit_space, evbuffer_peek + */ +#ifdef EVENT__HAVE_SYS_UIO_H +#define evbuffer_iovec iovec +/* Internal use -- defined only if we are using the native struct iovec */ +#define EVBUFFER_IOVEC_IS_NATIVE_ +#else +struct evbuffer_iovec { + /** The start of the extent of memory. */ + void *iov_base; + /** The length of the extent of memory. */ + size_t iov_len; +}; +#endif + +/** + Allocate storage for a new evbuffer. + + @return a pointer to a newly allocated evbuffer struct, or NULL if an error + occurred + */ +EVENT2_EXPORT_SYMBOL +struct evbuffer *evbuffer_new(void); +/** + Deallocate storage for an evbuffer. + + @param buf pointer to the evbuffer to be freed + */ +EVENT2_EXPORT_SYMBOL +void evbuffer_free(struct evbuffer *buf); + +/** + Enable locking on an evbuffer so that it can safely be used by multiple + threads at the same time. + + NOTE: when locking is enabled, the lock will be held when callbacks are + invoked. This could result in deadlock if you aren't careful. Plan + accordingly! + + @param buf An evbuffer to make lockable. + @param lock A lock object, or NULL if we should allocate our own. + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_enable_locking(struct evbuffer *buf, void *lock); + +/** + Acquire the lock on an evbuffer. Has no effect if locking was not enabled + with evbuffer_enable_locking. +*/ +EVENT2_EXPORT_SYMBOL +void evbuffer_lock(struct evbuffer *buf); + +/** + Release the lock on an evbuffer. Has no effect if locking was not enabled + with evbuffer_enable_locking. +*/ +EVENT2_EXPORT_SYMBOL +void evbuffer_unlock(struct evbuffer *buf); + + +/** If this flag is set, then we will not use evbuffer_peek(), + * evbuffer_remove(), evbuffer_remove_buffer(), and so on to read bytes + * from this buffer: we'll only take bytes out of this buffer by + * writing them to the network (as with evbuffer_write_atmost), by + * removing them without observing them (as with evbuffer_drain), + * or by copying them all out at once (as with evbuffer_add_buffer). + * + * Using this option allows the implementation to use sendfile-based + * operations for evbuffer_add_file(); see that function for more + * information. + * + * This flag is on by default for bufferevents that can take advantage + * of it; you should never actually need to set it on a bufferevent's + * output buffer. + */ +#define EVBUFFER_FLAG_DRAINS_TO_FD 1 + +/** Change the flags that are set for an evbuffer by adding more. + * + * @param buffer the evbuffer that the callback is watching. + * @param cb the callback whose status we want to change. + * @param flags One or more EVBUFFER_FLAG_* options + * @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_set_flags(struct evbuffer *buf, ev_uint64_t flags); +/** Change the flags that are set for an evbuffer by removing some. + * + * @param buffer the evbuffer that the callback is watching. + * @param cb the callback whose status we want to change. + * @param flags One or more EVBUFFER_FLAG_* options + * @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_clear_flags(struct evbuffer *buf, ev_uint64_t flags); + +/** + Returns the total number of bytes stored in the evbuffer + + @param buf pointer to the evbuffer + @return the number of bytes stored in the evbuffer +*/ +EVENT2_EXPORT_SYMBOL +size_t evbuffer_get_length(const struct evbuffer *buf); + +/** + Returns the number of contiguous available bytes in the first buffer chain. + + This is useful when processing data that might be split into multiple + chains, or that might all be in the first chain. Calls to + evbuffer_pullup() that cause reallocation and copying of data can thus be + avoided. + + @param buf pointer to the evbuffer + @return 0 if no data is available, otherwise the number of available bytes + in the first buffer chain. +*/ +EVENT2_EXPORT_SYMBOL +size_t evbuffer_get_contiguous_space(const struct evbuffer *buf); + +/** + Expands the available space in an evbuffer. + + Expands the available space in the evbuffer to at least datlen, so that + appending datlen additional bytes will not require any new allocations. + + @param buf the evbuffer to be expanded + @param datlen the new minimum length requirement + @return 0 if successful, or -1 if an error occurred +*/ +EVENT2_EXPORT_SYMBOL +int evbuffer_expand(struct evbuffer *buf, size_t datlen); + +/** + Reserves space in the last chain or chains of an evbuffer. + + Makes space available in the last chain or chains of an evbuffer that can + be arbitrarily written to by a user. The space does not become + available for reading until it has been committed with + evbuffer_commit_space(). + + The space is made available as one or more extents, represented by + an initial pointer and a length. You can force the memory to be + available as only one extent. Allowing more extents, however, makes the + function more efficient. + + Multiple subsequent calls to this function will make the same space + available until evbuffer_commit_space() has been called. + + It is an error to do anything that moves around the buffer's internal + memory structures before committing the space. + + NOTE: The code currently does not ever use more than two extents. + This may change in future versions. + + @param buf the evbuffer in which to reserve space. + @param size how much space to make available, at minimum. The + total length of the extents may be greater than the requested + length. + @param vec an array of one or more evbuffer_iovec structures to + hold pointers to the reserved extents of memory. + @param n_vec The length of the vec array. Must be at least 1; + 2 is more efficient. + @return the number of provided extents, or -1 on error. + @see evbuffer_commit_space() +*/ +EVENT2_EXPORT_SYMBOL +int +evbuffer_reserve_space(struct evbuffer *buf, ev_ssize_t size, + struct evbuffer_iovec *vec, int n_vec); + +/** + Commits previously reserved space. + + Commits some of the space previously reserved with + evbuffer_reserve_space(). It then becomes available for reading. + + This function may return an error if the pointer in the extents do + not match those returned from evbuffer_reserve_space, or if data + has been added to the buffer since the space was reserved. + + If you want to commit less data than you got reserved space for, + modify the iov_len pointer of the appropriate extent to a smaller + value. Note that you may have received more space than you + requested if it was available! + + @param buf the evbuffer in which to reserve space. + @param vec one or two extents returned by evbuffer_reserve_space. + @param n_vecs the number of extents. + @return 0 on success, -1 on error + @see evbuffer_reserve_space() +*/ +EVENT2_EXPORT_SYMBOL +int evbuffer_commit_space(struct evbuffer *buf, + struct evbuffer_iovec *vec, int n_vecs); + +/** + Append data to the end of an evbuffer. + + @param buf the evbuffer to be appended to + @param data pointer to the beginning of the data buffer + @param datlen the number of bytes to be copied from the data buffer + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen); + + +/** + Read data from an evbuffer and drain the bytes read. + + If more bytes are requested than are available in the evbuffer, we + only extract as many bytes as were available. + + @param buf the evbuffer to be read from + @param data the destination buffer to store the result + @param datlen the maximum size of the destination buffer + @return the number of bytes read, or -1 if we can't drain the buffer. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_remove(struct evbuffer *buf, void *data, size_t datlen); + +/** + Read data from an evbuffer, and leave the buffer unchanged. + + If more bytes are requested than are available in the evbuffer, we + only extract as many bytes as were available. + + @param buf the evbuffer to be read from + @param data_out the destination buffer to store the result + @param datlen the maximum size of the destination buffer + @return the number of bytes read, or -1 if we can't drain the buffer. + */ +EVENT2_EXPORT_SYMBOL +ev_ssize_t evbuffer_copyout(struct evbuffer *buf, void *data_out, size_t datlen); + +/** + Read data from the middle of an evbuffer, and leave the buffer unchanged. + + If more bytes are requested than are available in the evbuffer, we + only extract as many bytes as were available. + + @param buf the evbuffer to be read from + @param pos the position to start reading from + @param data_out the destination buffer to store the result + @param datlen the maximum size of the destination buffer + @return the number of bytes read, or -1 if we can't drain the buffer. + */ +EVENT2_EXPORT_SYMBOL +ev_ssize_t evbuffer_copyout_from(struct evbuffer *buf, const struct evbuffer_ptr *pos, void *data_out, size_t datlen); + +/** + Read data from an evbuffer into another evbuffer, draining + the bytes from the source buffer. This function avoids copy + operations to the extent possible. + + If more bytes are requested than are available in src, the src + buffer is drained completely. + + @param src the evbuffer to be read from + @param dst the destination evbuffer to store the result into + @param datlen the maximum numbers of bytes to transfer + @return the number of bytes read + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_remove_buffer(struct evbuffer *src, struct evbuffer *dst, + size_t datlen); + +/** Used to tell evbuffer_readln what kind of line-ending to look for. + */ +enum evbuffer_eol_style { + /** Any sequence of CR and LF characters is acceptable as an + * EOL. + * + * Note that this style can produce ambiguous results: the + * sequence "CRLF" will be treated as a single EOL if it is + * all in the buffer at once, but if you first read a CR from + * the network and later read an LF from the network, it will + * be treated as two EOLs. + */ + EVBUFFER_EOL_ANY, + /** An EOL is an LF, optionally preceded by a CR. This style is + * most useful for implementing text-based internet protocols. */ + EVBUFFER_EOL_CRLF, + /** An EOL is a CR followed by an LF. */ + EVBUFFER_EOL_CRLF_STRICT, + /** An EOL is a LF. */ + EVBUFFER_EOL_LF, + /** An EOL is a NUL character (that is, a single byte with value 0) */ + EVBUFFER_EOL_NUL +}; + +/** + * Read a single line from an evbuffer. + * + * Reads a line terminated by an EOL as determined by the evbuffer_eol_style + * argument. Returns a newly allocated nul-terminated string; the caller must + * free the returned value. The EOL is not included in the returned string. + * + * @param buffer the evbuffer to read from + * @param n_read_out if non-NULL, points to a size_t that is set to the + * number of characters in the returned string. This is useful for + * strings that can contain NUL characters. + * @param eol_style the style of line-ending to use. + * @return pointer to a single line, or NULL if an error occurred + */ +EVENT2_EXPORT_SYMBOL +char *evbuffer_readln(struct evbuffer *buffer, size_t *n_read_out, + enum evbuffer_eol_style eol_style); + +/** + Move all data from one evbuffer into another evbuffer. + + This is a destructive add. The data from one buffer moves into + the other buffer. However, no unnecessary memory copies occur. + + @param outbuf the output buffer + @param inbuf the input buffer + @return 0 if successful, or -1 if an error occurred + + @see evbuffer_remove_buffer() + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf); + +/** + Copy data from one evbuffer into another evbuffer. + + This is a non-destructive add. The data from one buffer is copied + into the other buffer. However, no unnecessary memory copies occur. + + Note that buffers already containing buffer references can't be added + to other buffers. + + @param outbuf the output buffer + @param inbuf the input buffer + @return 0 if successful, or -1 if an error occurred + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add_buffer_reference(struct evbuffer *outbuf, + struct evbuffer *inbuf); + +/** + A cleanup function for a piece of memory added to an evbuffer by + reference. + + @see evbuffer_add_reference() + */ +typedef void (*evbuffer_ref_cleanup_cb)(const void *data, + size_t datalen, void *extra); + +/** + Reference memory into an evbuffer without copying. + + The memory needs to remain valid until all the added data has been + read. This function keeps just a reference to the memory without + actually incurring the overhead of a copy. + + @param outbuf the output buffer + @param data the memory to reference + @param datlen how memory to reference + @param cleanupfn callback to be invoked when the memory is no longer + referenced by this evbuffer. + @param cleanupfn_arg optional argument to the cleanup callback + @return 0 if successful, or -1 if an error occurred + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add_reference(struct evbuffer *outbuf, + const void *data, size_t datlen, + evbuffer_ref_cleanup_cb cleanupfn, void *cleanupfn_arg); + +/** + Copy data from a file into the evbuffer for writing to a socket. + + This function avoids unnecessary data copies between userland and + kernel. If sendfile is available and the EVBUFFER_FLAG_DRAINS_TO_FD + flag is set, it uses those functions. Otherwise, it tries to use + mmap (or CreateFileMapping on Windows). + + The function owns the resulting file descriptor and will close it + when finished transferring data. + + The results of using evbuffer_remove() or evbuffer_pullup() on + evbuffers whose data was added using this function are undefined. + + For more fine-grained control, use evbuffer_add_file_segment. + + @param outbuf the output buffer + @param fd the file descriptor + @param offset the offset from which to read data + @param length how much data to read, or -1 to read as much as possible. + (-1 requires that 'fd' support fstat.) + @return 0 if successful, or -1 if an error occurred +*/ + +EVENT2_EXPORT_SYMBOL +int evbuffer_add_file(struct evbuffer *outbuf, int fd, ev_off_t offset, + ev_off_t length); + +/** + An evbuffer_file_segment holds a reference to a range of a file -- + possibly the whole file! -- for use in writing from an evbuffer to a + socket. It could be implemented with mmap, sendfile, splice, or (if all + else fails) by just pulling all the data into RAM. A single + evbuffer_file_segment can be added more than once, and to more than one + evbuffer. + */ +struct evbuffer_file_segment; + +/** + Flag for creating evbuffer_file_segment: If this flag is set, then when + the evbuffer_file_segment is freed and no longer in use by any + evbuffer, the underlying fd is closed. + */ +#define EVBUF_FS_CLOSE_ON_FREE 0x01 +/** + Flag for creating evbuffer_file_segment: Disable memory-map based + implementations. + */ +#define EVBUF_FS_DISABLE_MMAP 0x02 +/** + Flag for creating evbuffer_file_segment: Disable direct fd-to-fd + implementations (including sendfile and splice). + + You might want to use this option if data needs to be taken from the + evbuffer by any means other than writing it to the network: the sendfile + backend is fast, but it only works for sending files directly to the + network. + */ +#define EVBUF_FS_DISABLE_SENDFILE 0x04 +/** + Flag for creating evbuffer_file_segment: Do not allocate a lock for this + segment. If this option is set, then neither the segment nor any + evbuffer it is added to may ever be accessed from more than one thread + at a time. + */ +#define EVBUF_FS_DISABLE_LOCKING 0x08 + +/** + A cleanup function for a evbuffer_file_segment added to an evbuffer + for reference. + */ +typedef void (*evbuffer_file_segment_cleanup_cb)( + struct evbuffer_file_segment const* seg, int flags, void* arg); + +/** + Create and return a new evbuffer_file_segment for reading data from a + file and sending it out via an evbuffer. + + This function avoids unnecessary data copies between userland and + kernel. Where available, it uses sendfile or splice. + + The file descriptor must not be closed so long as any evbuffer is using + this segment. + + The results of using evbuffer_remove() or evbuffer_pullup() or any other + function that reads bytes from an evbuffer on any evbuffer containing + the newly returned segment are undefined, unless you pass the + EVBUF_FS_DISABLE_SENDFILE flag to this function. + + @param fd an open file to read from. + @param offset an index within the file at which to start reading + @param length how much data to read, or -1 to read as much as possible. + (-1 requires that 'fd' support fstat.) + @param flags any number of the EVBUF_FS_* flags + @return a new evbuffer_file_segment, or NULL on failure. + **/ +EVENT2_EXPORT_SYMBOL +struct evbuffer_file_segment *evbuffer_file_segment_new( + int fd, ev_off_t offset, ev_off_t length, unsigned flags); + +/** + Free an evbuffer_file_segment + + It is safe to call this function even if the segment has been added to + one or more evbuffers. The evbuffer_file_segment will not be freed + until no more references to it exist. + */ +EVENT2_EXPORT_SYMBOL +void evbuffer_file_segment_free(struct evbuffer_file_segment *seg); + +/** + Add cleanup callback and argument for the callback to an + evbuffer_file_segment. + + The cleanup callback will be invoked when no more references to the + evbuffer_file_segment exist. + **/ +EVENT2_EXPORT_SYMBOL +void evbuffer_file_segment_add_cleanup_cb(struct evbuffer_file_segment *seg, + evbuffer_file_segment_cleanup_cb cb, void* arg); + +/** + Insert some or all of an evbuffer_file_segment at the end of an evbuffer + + Note that the offset and length parameters of this function have a + different meaning from those provided to evbuffer_file_segment_new: When + you create the segment, the offset is the offset _within the file_, and + the length is the length _of the segment_, whereas when you add a + segment to an evbuffer, the offset is _within the segment_ and the + length is the length of the _part of the segment you want to use. + + In other words, if you have a 10 KiB file, and you create an + evbuffer_file_segment for it with offset 20 and length 1000, it will + refer to bytes 20..1019 inclusive. If you then pass this segment to + evbuffer_add_file_segment and specify an offset of 20 and a length of + 50, you will be adding bytes 40..99 inclusive. + + @param buf the evbuffer to append to + @param seg the segment to add + @param offset the offset within the segment to start from + @param length the amount of data to add, or -1 to add it all. + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add_file_segment(struct evbuffer *buf, + struct evbuffer_file_segment *seg, ev_off_t offset, ev_off_t length); + +/** + Append a formatted string to the end of an evbuffer. + + The string is formated as printf. + + @param buf the evbuffer that will be appended to + @param fmt a format string + @param ... arguments that will be passed to printf(3) + @return The number of bytes added if successful, or -1 if an error occurred. + + @see evutil_printf(), evbuffer_add_vprintf() + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add_printf(struct evbuffer *buf, const char *fmt, ...) +#ifdef __GNUC__ + __attribute__((format(printf, 2, 3))) +#endif +; + +/** + Append a va_list formatted string to the end of an evbuffer. + + @param buf the evbuffer that will be appended to + @param fmt a format string + @param ap a varargs va_list argument array that will be passed to vprintf(3) + @return The number of bytes added if successful, or -1 if an error occurred. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap) +#ifdef __GNUC__ + __attribute__((format(printf, 2, 0))) +#endif +; + + +/** + Remove a specified number of bytes data from the beginning of an evbuffer. + + @param buf the evbuffer to be drained + @param len the number of bytes to drain from the beginning of the buffer + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_drain(struct evbuffer *buf, size_t len); + + +/** + Write the contents of an evbuffer to a file descriptor. + + The evbuffer will be drained after the bytes have been successfully written. + + @param buffer the evbuffer to be written and drained + @param fd the file descriptor to be written to + @return the number of bytes written, or -1 if an error occurred + @see evbuffer_read() + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_write(struct evbuffer *buffer, evutil_socket_t fd); + +/** + Write some of the contents of an evbuffer to a file descriptor. + + The evbuffer will be drained after the bytes have been successfully written. + + @param buffer the evbuffer to be written and drained + @param fd the file descriptor to be written to + @param howmuch the largest allowable number of bytes to write, or -1 + to write as many bytes as we can. + @return the number of bytes written, or -1 if an error occurred + @see evbuffer_read() + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_write_atmost(struct evbuffer *buffer, evutil_socket_t fd, + ev_ssize_t howmuch); + +/** + Read from a file descriptor and store the result in an evbuffer. + + @param buffer the evbuffer to store the result + @param fd the file descriptor to read from + @param howmuch the number of bytes to be read + @return the number of bytes read, or -1 if an error occurred + @see evbuffer_write() + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_read(struct evbuffer *buffer, evutil_socket_t fd, int howmuch); + +/** + Search for a string within an evbuffer. + + @param buffer the evbuffer to be searched + @param what the string to be searched for + @param len the length of the search string + @param start NULL or a pointer to a valid struct evbuffer_ptr. + @return a struct evbuffer_ptr whose 'pos' field has the offset of the + first occurrence of the string in the buffer after 'start'. The 'pos' + field of the result is -1 if the string was not found. + */ +EVENT2_EXPORT_SYMBOL +struct evbuffer_ptr evbuffer_search(struct evbuffer *buffer, const char *what, size_t len, const struct evbuffer_ptr *start); + +/** + Search for a string within part of an evbuffer. + + @param buffer the evbuffer to be searched + @param what the string to be searched for + @param len the length of the search string + @param start NULL or a pointer to a valid struct evbuffer_ptr that + indicates where we should start searching. + @param end NULL or a pointer to a valid struct evbuffer_ptr that + indicates where we should stop searching. + @return a struct evbuffer_ptr whose 'pos' field has the offset of the + first occurrence of the string in the buffer after 'start'. The 'pos' + field of the result is -1 if the string was not found. + */ +EVENT2_EXPORT_SYMBOL +struct evbuffer_ptr evbuffer_search_range(struct evbuffer *buffer, const char *what, size_t len, const struct evbuffer_ptr *start, const struct evbuffer_ptr *end); + +/** + Defines how to adjust an evbuffer_ptr by evbuffer_ptr_set() + + @see evbuffer_ptr_set() */ +enum evbuffer_ptr_how { + /** Sets the pointer to the position; can be called on with an + uninitialized evbuffer_ptr. */ + EVBUFFER_PTR_SET, + /** Advances the pointer by adding to the current position. */ + EVBUFFER_PTR_ADD +}; + +/** + Sets the search pointer in the buffer to position. + + There are two ways to use this function: you can call + evbuffer_ptr_set(buf, &pos, N, EVBUFFER_PTR_SET) + to move 'pos' to a position 'N' bytes after the start of the buffer, or + evbuffer_ptr_set(buf, &pos, N, EVBUFFER_PTR_ADD) + to move 'pos' forward by 'N' bytes. + + If evbuffer_ptr is not initialized, this function can only be called + with EVBUFFER_PTR_SET. + + An evbuffer_ptr can represent any position from the start of the buffer to + a position immediately after the end of the buffer. + + @param buffer the evbuffer to be search + @param ptr a pointer to a struct evbuffer_ptr + @param position the position at which to start the next search + @param how determines how the pointer should be manipulated. + @returns 0 on success or -1 otherwise +*/ +EVENT2_EXPORT_SYMBOL +int +evbuffer_ptr_set(struct evbuffer *buffer, struct evbuffer_ptr *ptr, + size_t position, enum evbuffer_ptr_how how); + +/** + Search for an end-of-line string within an evbuffer. + + @param buffer the evbuffer to be searched + @param start NULL or a pointer to a valid struct evbuffer_ptr to start + searching at. + @param eol_len_out If non-NULL, the pointed-to value will be set to + the length of the end-of-line string. + @param eol_style The kind of EOL to look for; see evbuffer_readln() for + more information + @return a struct evbuffer_ptr whose 'pos' field has the offset of the + first occurrence EOL in the buffer after 'start'. The 'pos' + field of the result is -1 if the string was not found. + */ +EVENT2_EXPORT_SYMBOL +struct evbuffer_ptr evbuffer_search_eol(struct evbuffer *buffer, + struct evbuffer_ptr *start, size_t *eol_len_out, + enum evbuffer_eol_style eol_style); + +/** Function to peek at data inside an evbuffer without removing it or + copying it out. + + Pointers to the data are returned by filling the 'vec_out' array + with pointers to one or more extents of data inside the buffer. + + The total data in the extents that you get back may be more than + you requested (if there is more data last extent than you asked + for), or less (if you do not provide enough evbuffer_iovecs, or if + the buffer does not have as much data as you asked to see). + + @param buffer the evbuffer to peek into, + @param len the number of bytes to try to peek. If len is negative, we + will try to fill as much of vec_out as we can. If len is negative + and vec_out is not provided, we return the number of evbuffer_iovecs + that would be needed to get all the data in the buffer. + @param start_at an evbuffer_ptr indicating the point at which we + should start looking for data. NULL means, "At the start of the + buffer." + @param vec_out an array of evbuffer_iovec + @param n_vec the length of vec_out. If 0, we only count how many + extents would be necessary to point to the requested amount of + data. + @return The number of extents needed. This may be less than n_vec + if we didn't need all the evbuffer_iovecs we were given, or more + than n_vec if we would need more to return all the data that was + requested. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_peek(struct evbuffer *buffer, ev_ssize_t len, + struct evbuffer_ptr *start_at, + struct evbuffer_iovec *vec_out, int n_vec); + + +/** Structure passed to an evbuffer_cb_func evbuffer callback + + @see evbuffer_cb_func, evbuffer_add_cb() + */ +struct evbuffer_cb_info { + /** The number of bytes in this evbuffer when callbacks were last + * invoked. */ + size_t orig_size; + /** The number of bytes added since callbacks were last invoked. */ + size_t n_added; + /** The number of bytes removed since callbacks were last invoked. */ + size_t n_deleted; +}; + +/** Type definition for a callback that is invoked whenever data is added or + removed from an evbuffer. + + An evbuffer may have one or more callbacks set at a time. The order + in which they are executed is undefined. + + A callback function may add more callbacks, or remove itself from the + list of callbacks, or add or remove data from the buffer. It may not + remove another callback from the list. + + If a callback adds or removes data from the buffer or from another + buffer, this can cause a recursive invocation of your callback or + other callbacks. If you ask for an infinite loop, you might just get + one: watch out! + + @param buffer the buffer whose size has changed + @param info a structure describing how the buffer changed. + @param arg a pointer to user data +*/ +typedef void (*evbuffer_cb_func)(struct evbuffer *buffer, const struct evbuffer_cb_info *info, void *arg); + +struct evbuffer_cb_entry; +/** Add a new callback to an evbuffer. + + Subsequent calls to evbuffer_add_cb() add new callbacks. To remove this + callback, call evbuffer_remove_cb or evbuffer_remove_cb_entry. + + @param buffer the evbuffer to be monitored + @param cb the callback function to invoke when the evbuffer is modified, + or NULL to remove all callbacks. + @param cbarg an argument to be provided to the callback function + @return a handle to the callback on success, or NULL on failure. + */ +EVENT2_EXPORT_SYMBOL +struct evbuffer_cb_entry *evbuffer_add_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg); + +/** Remove a callback from an evbuffer, given a handle returned from + evbuffer_add_cb. + + Calling this function invalidates the handle. + + @return 0 if a callback was removed, or -1 if no matching callback was + found. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_remove_cb_entry(struct evbuffer *buffer, + struct evbuffer_cb_entry *ent); + +/** Remove a callback from an evbuffer, given the function and argument + used to add it. + + @return 0 if a callback was removed, or -1 if no matching callback was + found. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_remove_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg); + +/** If this flag is not set, then a callback is temporarily disabled, and + * should not be invoked. + * + * @see evbuffer_cb_set_flags(), evbuffer_cb_clear_flags() + */ +#define EVBUFFER_CB_ENABLED 1 + +/** Change the flags that are set for a callback on a buffer by adding more. + + @param buffer the evbuffer that the callback is watching. + @param cb the callback whose status we want to change. + @param flags EVBUFFER_CB_ENABLED to re-enable the callback. + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_cb_set_flags(struct evbuffer *buffer, + struct evbuffer_cb_entry *cb, ev_uint32_t flags); + +/** Change the flags that are set for a callback on a buffer by removing some + + @param buffer the evbuffer that the callback is watching. + @param cb the callback whose status we want to change. + @param flags EVBUFFER_CB_ENABLED to disable the callback. + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_cb_clear_flags(struct evbuffer *buffer, + struct evbuffer_cb_entry *cb, ev_uint32_t flags); + +#if 0 +/** Postpone calling a given callback until unsuspend is called later. + + This is different from disabling the callback, since the callback will get + invoked later if the buffer size changes between now and when we unsuspend + it. + + @param the buffer that the callback is watching. + @param cb the callback we want to suspend. + */ +EVENT2_EXPORT_SYMBOL +void evbuffer_cb_suspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb); +/** Stop postponing a callback that we postponed with evbuffer_cb_suspend. + + If data was added to or removed from the buffer while the callback was + suspended, the callback will get called once now. + + @param the buffer that the callback is watching. + @param cb the callback we want to stop suspending. + */ +EVENT2_EXPORT_SYMBOL +void evbuffer_cb_unsuspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb); +#endif + +/** + Makes the data at the beginning of an evbuffer contiguous. + + @param buf the evbuffer to make contiguous + @param size the number of bytes to make contiguous, or -1 to make the + entire buffer contiguous. + @return a pointer to the contiguous memory array, or NULL if param size + requested more data than is present in the buffer. +*/ + +EVENT2_EXPORT_SYMBOL +unsigned char *evbuffer_pullup(struct evbuffer *buf, ev_ssize_t size); + +/** + Prepends data to the beginning of the evbuffer + + @param buf the evbuffer to which to prepend data + @param data a pointer to the memory to prepend + @param size the number of bytes to prepend + @return 0 if successful, or -1 otherwise +*/ + +EVENT2_EXPORT_SYMBOL +int evbuffer_prepend(struct evbuffer *buf, const void *data, size_t size); + +/** + Prepends all data from the src evbuffer to the beginning of the dst + evbuffer. + + @param dst the evbuffer to which to prepend data + @param src the evbuffer to prepend; it will be emptied as a result + @return 0 if successful, or -1 otherwise +*/ +EVENT2_EXPORT_SYMBOL +int evbuffer_prepend_buffer(struct evbuffer *dst, struct evbuffer* src); + +/** + Prevent calls that modify an evbuffer from succeeding. A buffer may + frozen at the front, at the back, or at both the front and the back. + + If the front of a buffer is frozen, operations that drain data from + the front of the buffer, or that prepend data to the buffer, will + fail until it is unfrozen. If the back a buffer is frozen, operations + that append data from the buffer will fail until it is unfrozen. + + @param buf The buffer to freeze + @param at_front If true, we freeze the front of the buffer. If false, + we freeze the back. + @return 0 on success, -1 on failure. +*/ +EVENT2_EXPORT_SYMBOL +int evbuffer_freeze(struct evbuffer *buf, int at_front); +/** + Re-enable calls that modify an evbuffer. + + @param buf The buffer to un-freeze + @param at_front If true, we unfreeze the front of the buffer. If false, + we unfreeze the back. + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_unfreeze(struct evbuffer *buf, int at_front); + +struct event_base; +/** + Force all the callbacks on an evbuffer to be run, not immediately after + the evbuffer is altered, but instead from inside the event loop. + + This can be used to serialize all the callbacks to a single thread + of execution. + */ +EVENT2_EXPORT_SYMBOL +int evbuffer_defer_callbacks(struct evbuffer *buffer, struct event_base *base); + +/** + Append data from 1 or more iovec's to an evbuffer + + Calculates the number of bytes needed for an iovec structure and guarantees + all data will fit into a single chain. Can be used in lieu of functionality + which calls evbuffer_add() constantly before being used to increase + performance. + + @param buffer the destination buffer + @param vec the source iovec + @param n_vec the number of iovec structures. + @return the number of bytes successfully written to the output buffer. +*/ +EVENT2_EXPORT_SYMBOL +size_t evbuffer_add_iovec(struct evbuffer * buffer, struct evbuffer_iovec * vec, int n_vec); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_BUFFER_H_INCLUDED_ */ diff --git a/src/components/libevent/buffer_compat.h b/src/components/libevent/buffer_compat.h new file mode 100644 index 0000000..c94ad10 --- /dev/null +++ b/src/components/libevent/buffer_compat.h @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ + +#ifndef EVENT2_BUFFER_COMPAT_H_INCLUDED_ +#define EVENT2_BUFFER_COMPAT_H_INCLUDED_ + +#include + +/** @file event2/buffer_compat.h + + Obsolete and deprecated versions of the functions in buffer.h: provided + only for backward compatibility. + */ + + +/** + Obsolete alias for evbuffer_readln(buffer, NULL, EVBUFFER_EOL_ANY). + + @deprecated This function is deprecated because its behavior is not correct + for almost any protocol, and also because it's wholly subsumed by + evbuffer_readln(). + + @param buffer the evbuffer to read from + @return pointer to a single line, or NULL if an error occurred + +*/ +EVENT2_EXPORT_SYMBOL +char *evbuffer_readline(struct evbuffer *buffer); + +/** Type definition for a callback that is invoked whenever data is added or + removed from an evbuffer. + + An evbuffer may have one or more callbacks set at a time. The order + in which they are executed is undefined. + + A callback function may add more callbacks, or remove itself from the + list of callbacks, or add or remove data from the buffer. It may not + remove another callback from the list. + + If a callback adds or removes data from the buffer or from another + buffer, this can cause a recursive invocation of your callback or + other callbacks. If you ask for an infinite loop, you might just get + one: watch out! + + @param buffer the buffer whose size has changed + @param old_len the previous length of the buffer + @param new_len the current length of the buffer + @param arg a pointer to user data +*/ +typedef void (*evbuffer_cb)(struct evbuffer *buffer, size_t old_len, size_t new_len, void *arg); + +/** + Replace all callbacks on an evbuffer with a single new callback, or + remove them. + + Subsequent calls to evbuffer_setcb() replace callbacks set by previous + calls. Setting the callback to NULL removes any previously set callback. + + @deprecated This function is deprecated because it clears all previous + callbacks set on the evbuffer, which can cause confusing behavior if + multiple parts of the code all want to add their own callbacks on a + buffer. Instead, use evbuffer_add(), evbuffer_del(), and + evbuffer_setflags() to manage your own evbuffer callbacks without + interfering with callbacks set by others. + + @param buffer the evbuffer to be monitored + @param cb the callback function to invoke when the evbuffer is modified, + or NULL to remove all callbacks. + @param cbarg an argument to be provided to the callback function + */ +EVENT2_EXPORT_SYMBOL +void evbuffer_setcb(struct evbuffer *buffer, evbuffer_cb cb, void *cbarg); + + +/** + Find a string within an evbuffer. + + @param buffer the evbuffer to be searched + @param what the string to be searched for + @param len the length of the search string + @return a pointer to the beginning of the search string, or NULL if the search failed. + */ +EVENT2_EXPORT_SYMBOL +unsigned char *evbuffer_find(struct evbuffer *buffer, const unsigned char *what, size_t len); + +/** deprecated in favor of calling the functions directly */ +#define EVBUFFER_LENGTH(x) evbuffer_get_length(x) +/** deprecated in favor of calling the functions directly */ +#define EVBUFFER_DATA(x) evbuffer_pullup((x), -1) + +#endif + diff --git a/src/components/libevent/bufferevent.h b/src/components/libevent/bufferevent.h new file mode 100644 index 0000000..42e461f --- /dev/null +++ b/src/components/libevent/bufferevent.h @@ -0,0 +1,1021 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_BUFFEREVENT_H_INCLUDED_ +#define EVENT2_BUFFEREVENT_H_INCLUDED_ + +/** + @file event2/bufferevent.h + + Functions for buffering data for network sending or receiving. Bufferevents + are higher level than evbuffers: each has an underlying evbuffer for reading + and one for writing, and callbacks that are invoked under certain + circumstances. + + A bufferevent provides input and output buffers that get filled and + drained automatically. The user of a bufferevent no longer deals + directly with the I/O, but instead is reading from input and writing + to output buffers. + + Once initialized, the bufferevent structure can be used repeatedly + with bufferevent_enable() and bufferevent_disable(). + + When reading is enabled, the bufferevent will try to read from the + file descriptor onto its input buffer, and call the read callback. + When writing is enabled, the bufferevent will try to write data onto its + file descriptor when the output buffer has enough data, and call the write + callback when the output buffer is sufficiently drained. + + Bufferevents come in several flavors, including: + +
+
Socket-based bufferevents
+
A bufferevent that reads and writes data onto a network + socket. Created with bufferevent_socket_new().
+ +
Paired bufferevents
+
A pair of bufferevents that send and receive data to one + another without touching the network. Created with + bufferevent_pair_new().
+ +
Filtering bufferevents
+
A bufferevent that transforms data, and sends or receives it + over another underlying bufferevent. Created with + bufferevent_filter_new().
+ +
SSL-backed bufferevents
+
A bufferevent that uses the openssl library to send and + receive data over an encrypted connection. Created with + bufferevent_openssl_socket_new() or + bufferevent_openssl_filter_new().
+
+ */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/** @name Bufferevent event codes + + These flags are passed as arguments to a bufferevent's event callback. + + @{ +*/ +#define BEV_EVENT_READING 0x01 /**< error encountered while reading */ +#define BEV_EVENT_WRITING 0x02 /**< error encountered while writing */ +#define BEV_EVENT_EOF 0x10 /**< eof file reached */ +#define BEV_EVENT_ERROR 0x20 /**< unrecoverable error encountered */ +#define BEV_EVENT_TIMEOUT 0x40 /**< user-specified timeout reached */ +#define BEV_EVENT_CONNECTED 0x80 /**< connect operation finished. */ +/**@}*/ + +/** + An opaque type for handling buffered IO + + @see event2/bufferevent.h + */ +struct bufferevent +#ifdef EVENT_IN_DOXYGEN_ +{} +#endif +; +struct event_base; +struct evbuffer; +struct sockaddr; + +/** + A read or write callback for a bufferevent. + + The read callback is triggered when new data arrives in the input + buffer and the amount of readable data exceed the low watermark + which is 0 by default. + + The write callback is triggered if the write buffer has been + exhausted or fell below its low watermark. + + @param bev the bufferevent that triggered the callback + @param ctx the user-specified context for this bufferevent + */ +typedef void (*bufferevent_data_cb)(struct bufferevent *bev, void *ctx); + +/** + An event/error callback for a bufferevent. + + The event callback is triggered if either an EOF condition or another + unrecoverable error was encountered. + + For bufferevents with deferred callbacks, this is a bitwise OR of all errors + that have happened on the bufferevent since the last callback invocation. + + @param bev the bufferevent for which the error condition was reached + @param what a conjunction of flags: BEV_EVENT_READING or BEV_EVENT_WRITING + to indicate if the error was encountered on the read or write path, + and one of the following flags: BEV_EVENT_EOF, BEV_EVENT_ERROR, + BEV_EVENT_TIMEOUT, BEV_EVENT_CONNECTED. + + @param ctx the user-specified context for this bufferevent +*/ +typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx); + +/** Options that can be specified when creating a bufferevent */ +enum bufferevent_options { + /** If set, we close the underlying file + * descriptor/bufferevent/whatever when this bufferevent is freed. */ + BEV_OPT_CLOSE_ON_FREE = (1<<0), + + /** If set, and threading is enabled, operations on this bufferevent + * are protected by a lock */ + BEV_OPT_THREADSAFE = (1<<1), + + /** If set, callbacks are run deferred in the event loop. */ + BEV_OPT_DEFER_CALLBACKS = (1<<2), + + /** If set, callbacks are executed without locks being held on the + * bufferevent. This option currently requires that + * BEV_OPT_DEFER_CALLBACKS also be set; a future version of Libevent + * might remove the requirement.*/ + BEV_OPT_UNLOCK_CALLBACKS = (1<<3) +}; + +/** + Create a new socket bufferevent over an existing socket. + + @param base the event base to associate with the new bufferevent. + @param fd the file descriptor from which data is read and written to. + This file descriptor is not allowed to be a pipe(2). + It is safe to set the fd to -1, so long as you later + set it with bufferevent_setfd or bufferevent_socket_connect(). + @param options Zero or more BEV_OPT_* flags + @return a pointer to a newly allocated bufferevent struct, or NULL if an + error occurred + @see bufferevent_free() + */ +EVENT2_EXPORT_SYMBOL +struct bufferevent *bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options); + +/** + Launch a connect() attempt with a socket-based bufferevent. + + When the connect succeeds, the eventcb will be invoked with + BEV_EVENT_CONNECTED set. + + If the bufferevent does not already have a socket set, we allocate a new + socket here and make it nonblocking before we begin. + + If no address is provided, we assume that the socket is already connecting, + and configure the bufferevent so that a BEV_EVENT_CONNECTED event will be + yielded when it is done connecting. + + @param bufev an existing bufferevent allocated with + bufferevent_socket_new(). + @param addr the address we should connect to + @param socklen The length of the address + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_socket_connect(struct bufferevent *, const struct sockaddr *, int); + +struct evdns_base; +/** + Resolve the hostname 'hostname' and connect to it as with + bufferevent_socket_connect(). + + @param bufev An existing bufferevent allocated with bufferevent_socket_new() + @param evdns_base Optionally, an evdns_base to use for resolving hostnames + asynchronously. May be set to NULL for a blocking resolve. + @param family A preferred address family to resolve addresses to, or + AF_UNSPEC for no preference. Only AF_INET, AF_INET6, and AF_UNSPEC are + supported. + @param hostname The hostname to resolve; see below for notes on recognized + formats + @param port The port to connect to on the resolved address. + @return 0 if successful, -1 on failure. + + Recognized hostname formats are: + + www.example.com (hostname) + 1.2.3.4 (ipv4address) + ::1 (ipv6address) + [::1] ([ipv6address]) + + Performance note: If you do not provide an evdns_base, this function + may block while it waits for a DNS response. This is probably not + what you want. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_socket_connect_hostname(struct bufferevent *, + struct evdns_base *, int, const char *, int); + +/** + Return the error code for the last failed DNS lookup attempt made by + bufferevent_socket_connect_hostname(). + + @param bev The bufferevent object. + @return DNS error code. + @see evutil_gai_strerror() +*/ +EVENT2_EXPORT_SYMBOL +int bufferevent_socket_get_dns_error(struct bufferevent *bev); + +/** + Assign a bufferevent to a specific event_base. + + NOTE that only socket bufferevents support this function. + + @param base an event_base returned by event_init() + @param bufev a bufferevent struct returned by bufferevent_new() + or bufferevent_socket_new() + @return 0 if successful, or -1 if an error occurred + @see bufferevent_new() + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_base_set(struct event_base *base, struct bufferevent *bufev); + +/** + Return the event_base used by a bufferevent +*/ +EVENT2_EXPORT_SYMBOL +struct event_base *bufferevent_get_base(struct bufferevent *bev); + +/** + Assign a priority to a bufferevent. + + Only supported for socket bufferevents. + + @param bufev a bufferevent struct + @param pri the priority to be assigned + @return 0 if successful, or -1 if an error occurred + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_priority_set(struct bufferevent *bufev, int pri); + +/** + Return the priority of a bufferevent. + + Only supported for socket bufferevents + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_get_priority(const struct bufferevent *bufev); + +/** + Deallocate the storage associated with a bufferevent structure. + + If there is pending data to write on the bufferevent, it probably won't be + flushed before the bufferevent is freed. + + @param bufev the bufferevent structure to be freed. + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_free(struct bufferevent *bufev); + + +/** + Changes the callbacks for a bufferevent. + + @param bufev the bufferevent object for which to change callbacks + @param readcb callback to invoke when there is data to be read, or NULL if + no callback is desired + @param writecb callback to invoke when the file descriptor is ready for + writing, or NULL if no callback is desired + @param eventcb callback to invoke when there is an event on the file + descriptor + @param cbarg an argument that will be supplied to each of the callbacks + (readcb, writecb, and errorcb) + @see bufferevent_new() + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_setcb(struct bufferevent *bufev, + bufferevent_data_cb readcb, bufferevent_data_cb writecb, + bufferevent_event_cb eventcb, void *cbarg); + +/** + Retrieves the callbacks for a bufferevent. + + @param bufev the bufferevent to examine. + @param readcb_ptr if readcb_ptr is nonnull, *readcb_ptr is set to the current + read callback for the bufferevent. + @param writecb_ptr if writecb_ptr is nonnull, *writecb_ptr is set to the + current write callback for the bufferevent. + @param eventcb_ptr if eventcb_ptr is nonnull, *eventcb_ptr is set to the + current event callback for the bufferevent. + @param cbarg_ptr if cbarg_ptr is nonnull, *cbarg_ptr is set to the current + callback argument for the bufferevent. + @see buffervent_setcb() +*/ +EVENT2_EXPORT_SYMBOL +void bufferevent_getcb(struct bufferevent *bufev, + bufferevent_data_cb *readcb_ptr, + bufferevent_data_cb *writecb_ptr, + bufferevent_event_cb *eventcb_ptr, + void **cbarg_ptr); + +/** + Changes the file descriptor on which the bufferevent operates. + Not supported for all bufferevent types. + + @param bufev the bufferevent object for which to change the file descriptor + @param fd the file descriptor to operate on +*/ +EVENT2_EXPORT_SYMBOL +int bufferevent_setfd(struct bufferevent *bufev, evutil_socket_t fd); + +/** + Returns the file descriptor associated with a bufferevent, or -1 if + no file descriptor is associated with the bufferevent. + */ +EVENT2_EXPORT_SYMBOL +evutil_socket_t bufferevent_getfd(struct bufferevent *bufev); + +/** + Returns the underlying bufferevent associated with a bufferevent (if + the bufferevent is a wrapper), or NULL if there is no underlying bufferevent. + */ +EVENT2_EXPORT_SYMBOL +struct bufferevent *bufferevent_get_underlying(struct bufferevent *bufev); + +/** + Write data to a bufferevent buffer. + + The bufferevent_write() function can be used to write data to the file + descriptor. The data is appended to the output buffer and written to the + descriptor automatically as it becomes available for writing. + + @param bufev the bufferevent to be written to + @param data a pointer to the data to be written + @param size the length of the data, in bytes + @return 0 if successful, or -1 if an error occurred + @see bufferevent_write_buffer() + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_write(struct bufferevent *bufev, + const void *data, size_t size); + + +/** + Write data from an evbuffer to a bufferevent buffer. The evbuffer is + being drained as a result. + + @param bufev the bufferevent to be written to + @param buf the evbuffer to be written + @return 0 if successful, or -1 if an error occurred + @see bufferevent_write() + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf); + + +/** + Read data from a bufferevent buffer. + + The bufferevent_read() function is used to read data from the input buffer. + + @param bufev the bufferevent to be read from + @param data pointer to a buffer that will store the data + @param size the size of the data buffer, in bytes + @return the amount of data read, in bytes. + */ +EVENT2_EXPORT_SYMBOL +size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size); + +/** + Read data from a bufferevent buffer into an evbuffer. This avoids + memory copies. + + @param bufev the bufferevent to be read from + @param buf the evbuffer to which to add data + @return 0 if successful, or -1 if an error occurred. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf); + +/** + Returns the input buffer. + + The user MUST NOT set the callback on this buffer. + + @param bufev the bufferevent from which to get the evbuffer + @return the evbuffer object for the input buffer + */ + +EVENT2_EXPORT_SYMBOL +struct evbuffer *bufferevent_get_input(struct bufferevent *bufev); + +/** + Returns the output buffer. + + The user MUST NOT set the callback on this buffer. + + When filters are being used, the filters need to be manually + triggered if the output buffer was manipulated. + + @param bufev the bufferevent from which to get the evbuffer + @return the evbuffer object for the output buffer + */ + +EVENT2_EXPORT_SYMBOL +struct evbuffer *bufferevent_get_output(struct bufferevent *bufev); + +/** + Enable a bufferevent. + + @param bufev the bufferevent to be enabled + @param event any combination of EV_READ | EV_WRITE. + @return 0 if successful, or -1 if an error occurred + @see bufferevent_disable() + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_enable(struct bufferevent *bufev, short event); + +/** + Disable a bufferevent. + + @param bufev the bufferevent to be disabled + @param event any combination of EV_READ | EV_WRITE. + @return 0 if successful, or -1 if an error occurred + @see bufferevent_enable() + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_disable(struct bufferevent *bufev, short event); + +/** + Return the events that are enabled on a given bufferevent. + + @param bufev the bufferevent to inspect + @return A combination of EV_READ | EV_WRITE + */ +EVENT2_EXPORT_SYMBOL +short bufferevent_get_enabled(struct bufferevent *bufev); + +/** + Set the read and write timeout for a bufferevent. + + A bufferevent's timeout will fire the first time that the indicated + amount of time has elapsed since a successful read or write operation, + during which the bufferevent was trying to read or write. + + (In other words, if reading or writing is disabled, or if the + bufferevent's read or write operation has been suspended because + there's no data to write, or not enough banwidth, or so on, the + timeout isn't active. The timeout only becomes active when we we're + willing to actually read or write.) + + Calling bufferevent_enable or setting a timeout for a bufferevent + whose timeout is already pending resets its timeout. + + If the timeout elapses, the corresponding operation (EV_READ or + EV_WRITE) becomes disabled until you re-enable it again. The + bufferevent's event callback is called with the + BEV_EVENT_TIMEOUT|BEV_EVENT_READING or + BEV_EVENT_TIMEOUT|BEV_EVENT_WRITING. + + @param bufev the bufferevent to be modified + @param timeout_read the read timeout, or NULL + @param timeout_write the write timeout, or NULL + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_set_timeouts(struct bufferevent *bufev, + const struct timeval *timeout_read, const struct timeval *timeout_write); + +/** + Sets the watermarks for read and write events. + + On input, a bufferevent does not invoke the user read callback unless + there is at least low watermark data in the buffer. If the read buffer + is beyond the high watermark, the bufferevent stops reading from the network. + + On output, the user write callback is invoked whenever the buffered data + falls below the low watermark. Filters that write to this bufev will try + not to write more bytes to this buffer than the high watermark would allow, + except when flushing. + + @param bufev the bufferevent to be modified + @param events EV_READ, EV_WRITE or both + @param lowmark the lower watermark to set + @param highmark the high watermark to set +*/ + +EVENT2_EXPORT_SYMBOL +void bufferevent_setwatermark(struct bufferevent *bufev, short events, + size_t lowmark, size_t highmark); + +/** + Retrieves the watermarks for read or write events. + Returns non-zero if events contains not only EV_READ or EV_WRITE. + Returns zero if events equal EV_READ or EV_WRITE + + @param bufev the bufferevent to be examined + @param events EV_READ or EV_WRITE + @param lowmark receives the lower watermark if not NULL + @param highmark receives the high watermark if not NULL +*/ +EVENT2_EXPORT_SYMBOL +int bufferevent_getwatermark(struct bufferevent *bufev, short events, + size_t *lowmark, size_t *highmark); + +/** + Acquire the lock on a bufferevent. Has no effect if locking was not + enabled with BEV_OPT_THREADSAFE. + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_lock(struct bufferevent *bufev); + +/** + Release the lock on a bufferevent. Has no effect if locking was not + enabled with BEV_OPT_THREADSAFE. + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_unlock(struct bufferevent *bufev); + + +/** + * Public interface to manually increase the reference count of a bufferevent + * this is useful in situations where a user may reference the bufferevent + * somewhere eles (unknown to libevent) + * + * @param bufev the bufferevent to increase the refcount on + * + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_incref(struct bufferevent *bufev); + +/** + * Public interface to manually decrement the reference count of a bufferevent + * + * Warning: make sure you know what you're doing. This is mainly used in + * conjunction with bufferevent_incref(). This will free up all data associated + * with a bufferevent if the reference count hits 0. + * + * @param bufev the bufferevent to decrement the refcount on + * + * @return 1 if the bufferevent was freed, otherwise 0 (still referenced) + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_decref(struct bufferevent *bufev); + +/** + Flags that can be passed into filters to let them know how to + deal with the incoming data. +*/ +enum bufferevent_flush_mode { + /** usually set when processing data */ + BEV_NORMAL = 0, + + /** want to checkpoint all data sent. */ + BEV_FLUSH = 1, + + /** encountered EOF on read or done sending data */ + BEV_FINISHED = 2 +}; + +/** + Triggers the bufferevent to produce more data if possible. + + @param bufev the bufferevent object + @param iotype either EV_READ or EV_WRITE or both. + @param mode either BEV_NORMAL or BEV_FLUSH or BEV_FINISHED + @return -1 on failure, 0 if no data was produces, 1 if data was produced + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_flush(struct bufferevent *bufev, + short iotype, + enum bufferevent_flush_mode mode); + +/** + Flags for bufferevent_trigger(_event) that modify when and how to trigger + the callback. +*/ +enum bufferevent_trigger_options { + /** trigger the callback regardless of the watermarks */ + BEV_TRIG_IGNORE_WATERMARKS = (1<<16), + + /** defer even if the callbacks are not */ + BEV_TRIG_DEFER_CALLBACKS = BEV_OPT_DEFER_CALLBACKS + + /* (Note: for internal reasons, these need to be disjoint from + * bufferevent_options, except when they mean the same thing. */ +}; + +/** + Triggers bufferevent data callbacks. + + The function will honor watermarks unless options contain + BEV_TRIG_IGNORE_WATERMARKS. If the options contain BEV_OPT_DEFER_CALLBACKS, + the callbacks are deferred. + + @param bufev the bufferevent object + @param iotype either EV_READ or EV_WRITE or both. + @param options + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_trigger(struct bufferevent *bufev, short iotype, + int options); + +/** + Triggers the bufferevent event callback. + + If the options contain BEV_OPT_DEFER_CALLBACKS, the callbacks are deferred. + + @param bufev the bufferevent object + @param what the flags to pass onto the event callback + @param options + */ +EVENT2_EXPORT_SYMBOL +void bufferevent_trigger_event(struct bufferevent *bufev, short what, + int options); + +/** + @name Filtering support + + @{ +*/ +/** + Values that filters can return. + */ +enum bufferevent_filter_result { + /** everything is okay */ + BEV_OK = 0, + + /** the filter needs to read more data before output */ + BEV_NEED_MORE = 1, + + /** the filter encountered a critical error, no further data + can be processed. */ + BEV_ERROR = 2 +}; + +/** A callback function to implement a filter for a bufferevent. + + @param src An evbuffer to drain data from. + @param dst An evbuffer to add data to. + @param limit A suggested upper bound of bytes to write to dst. + The filter may ignore this value, but doing so means that + it will overflow the high-water mark associated with dst. + -1 means "no limit". + @param mode Whether we should write data as may be convenient + (BEV_NORMAL), or flush as much data as we can (BEV_FLUSH), + or flush as much as we can, possibly including an end-of-stream + marker (BEV_FINISH). + @param ctx A user-supplied pointer. + + @return BEV_OK if we wrote some data; BEV_NEED_MORE if we can't + produce any more output until we get some input; and BEV_ERROR + on an error. + */ +typedef enum bufferevent_filter_result (*bufferevent_filter_cb)( + struct evbuffer *src, struct evbuffer *dst, ev_ssize_t dst_limit, + enum bufferevent_flush_mode mode, void *ctx); + +/** + Allocate a new filtering bufferevent on top of an existing bufferevent. + + @param underlying the underlying bufferevent. + @param input_filter The filter to apply to data we read from the underlying + bufferevent + @param output_filter The filer to apply to data we write to the underlying + bufferevent + @param options A bitfield of bufferevent options. + @param free_context A function to use to free the filter context when + this bufferevent is freed. + @param ctx A context pointer to pass to the filter functions. + */ +EVENT2_EXPORT_SYMBOL +struct bufferevent * +bufferevent_filter_new(struct bufferevent *underlying, + bufferevent_filter_cb input_filter, + bufferevent_filter_cb output_filter, + int options, + void (*free_context)(void *), + void *ctx); +/**@}*/ + +/** + Allocate a pair of linked bufferevents. The bufferevents behave as would + two bufferevent_sock instances connected to opposite ends of a + socketpair(), except that no internal socketpair is allocated. + + @param base The event base to associate with the socketpair. + @param options A set of options for this bufferevent + @param pair A pointer to an array to hold the two new bufferevent objects. + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_pair_new(struct event_base *base, int options, + struct bufferevent *pair[2]); + +/** + Given one bufferevent returned by bufferevent_pair_new(), returns the + other one if it still exists. Otherwise returns NULL. + */ +EVENT2_EXPORT_SYMBOL +struct bufferevent *bufferevent_pair_get_partner(struct bufferevent *bev); + +/** + Abstract type used to configure rate-limiting on a bufferevent or a group + of bufferevents. + */ +struct ev_token_bucket_cfg; + +/** + A group of bufferevents which are configured to respect the same rate + limit. +*/ +struct bufferevent_rate_limit_group; + +/** Maximum configurable rate- or burst-limit. */ +#define EV_RATE_LIMIT_MAX EV_SSIZE_MAX + +/** + Initialize and return a new object to configure the rate-limiting behavior + of bufferevents. + + @param read_rate The maximum number of bytes to read per tick on + average. + @param read_burst The maximum number of bytes to read in any single tick. + @param write_rate The maximum number of bytes to write per tick on + average. + @param write_burst The maximum number of bytes to write in any single tick. + @param tick_len The length of a single tick. Defaults to one second. + Any fractions of a millisecond are ignored. + + Note that all rate-limits hare are currently best-effort: future versions + of Libevent may implement them more tightly. + */ +EVENT2_EXPORT_SYMBOL +struct ev_token_bucket_cfg *ev_token_bucket_cfg_new( + size_t read_rate, size_t read_burst, + size_t write_rate, size_t write_burst, + const struct timeval *tick_len); + +/** Free all storage held in 'cfg'. + + Note: 'cfg' is not currently reference-counted; it is not safe to free it + until no bufferevent is using it. + */ +EVENT2_EXPORT_SYMBOL +void ev_token_bucket_cfg_free(struct ev_token_bucket_cfg *cfg); + +/** + Set the rate-limit of a the bufferevent 'bev' to the one specified in + 'cfg'. If 'cfg' is NULL, disable any per-bufferevent rate-limiting on + 'bev'. + + Note that only some bufferevent types currently respect rate-limiting. + They are: socket-based bufferevents (normal and IOCP-based), and SSL-based + bufferevents. + + Return 0 on sucess, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_set_rate_limit(struct bufferevent *bev, + struct ev_token_bucket_cfg *cfg); + +/** + Create a new rate-limit group for bufferevents. A rate-limit group + constrains the maximum number of bytes sent and received, in toto, + by all of its bufferevents. + + @param base An event_base to run any necessary timeouts for the group. + Note that all bufferevents in the group do not necessarily need to share + this event_base. + @param cfg The rate-limit for this group. + + Note that all rate-limits hare are currently best-effort: future versions + of Libevent may implement them more tightly. + + Note also that only some bufferevent types currently respect rate-limiting. + They are: socket-based bufferevents (normal and IOCP-based), and SSL-based + bufferevents. + */ +EVENT2_EXPORT_SYMBOL +struct bufferevent_rate_limit_group *bufferevent_rate_limit_group_new( + struct event_base *base, + const struct ev_token_bucket_cfg *cfg); +/** + Change the rate-limiting settings for a given rate-limiting group. + + Return 0 on success, -1 on failure. +*/ +EVENT2_EXPORT_SYMBOL +int bufferevent_rate_limit_group_set_cfg( + struct bufferevent_rate_limit_group *, + const struct ev_token_bucket_cfg *); + +/** + Change the smallest quantum we're willing to allocate to any single + bufferevent in a group for reading or writing at a time. + + The rationale is that, because of TCP/IP protocol overheads and kernel + behavior, if a rate-limiting group is so tight on bandwidth that you're + only willing to send 1 byte per tick per bufferevent, you might instead + want to batch up the reads and writes so that you send N bytes per + 1/N of the bufferevents (chosen at random) each tick, so you still wind + up send 1 byte per tick per bufferevent on average, but you don't send + so many tiny packets. + + The default min-share is currently 64 bytes. + + Returns 0 on success, -1 on faulre. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_rate_limit_group_set_min_share( + struct bufferevent_rate_limit_group *, size_t); + +/** + Free a rate-limiting group. The group must have no members when + this function is called. +*/ +EVENT2_EXPORT_SYMBOL +void bufferevent_rate_limit_group_free(struct bufferevent_rate_limit_group *); + +/** + Add 'bev' to the list of bufferevents whose aggregate reading and writing + is restricted by 'g'. If 'g' is NULL, remove 'bev' from its current group. + + A bufferevent may belong to no more than one rate-limit group at a time. + If 'bev' is already a member of a group, it will be removed from its old + group before being added to 'g'. + + Return 0 on success and -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_add_to_rate_limit_group(struct bufferevent *bev, + struct bufferevent_rate_limit_group *g); + +/** Remove 'bev' from its current rate-limit group (if any). */ +EVENT2_EXPORT_SYMBOL +int bufferevent_remove_from_rate_limit_group(struct bufferevent *bev); + +/** + Set the size limit for single read operation. + + Set to 0 for a reasonable default. + + Return 0 on success and -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_set_max_single_read(struct bufferevent *bev, size_t size); + +/** + Set the size limit for single write operation. + + Set to 0 for a reasonable default. + + Return 0 on success and -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_set_max_single_write(struct bufferevent *bev, size_t size); + +/** Get the current size limit for single read operation. */ +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_get_max_single_read(struct bufferevent *bev); + +/** Get the current size limit for single write operation. */ +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_get_max_single_write(struct bufferevent *bev); + +/** + @name Rate limit inspection + + Return the current read or write bucket size for a bufferevent. + If it is not configured with a per-bufferevent ratelimit, return + EV_SSIZE_MAX. This function does not inspect the group limit, if any. + Note that it can return a negative value if the bufferevent has been + made to read or write more than its limit. + + @{ + */ +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_get_read_limit(struct bufferevent *bev); +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_get_write_limit(struct bufferevent *bev); +/*@}*/ + +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_get_max_to_read(struct bufferevent *bev); +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_get_max_to_write(struct bufferevent *bev); + +EVENT2_EXPORT_SYMBOL +const struct ev_token_bucket_cfg *bufferevent_get_token_bucket_cfg(const struct bufferevent * bev); + +/** + @name Group Rate limit inspection + + Return the read or write bucket size for a bufferevent rate limit + group. Note that it can return a negative value if bufferevents in + the group have been made to read or write more than their limits. + + @{ + */ +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_rate_limit_group_get_read_limit( + struct bufferevent_rate_limit_group *); +EVENT2_EXPORT_SYMBOL +ev_ssize_t bufferevent_rate_limit_group_get_write_limit( + struct bufferevent_rate_limit_group *); +/*@}*/ + +/** + @name Rate limit manipulation + + Subtract a number of bytes from a bufferevent's read or write bucket. + The decrement value can be negative, if you want to manually refill + the bucket. If the change puts the bucket above or below zero, the + bufferevent will resume or suspend reading writing as appropriate. + These functions make no change in the buckets for the bufferevent's + group, if any. + + Returns 0 on success, -1 on internal error. + + @{ + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_decrement_read_limit(struct bufferevent *bev, ev_ssize_t decr); +EVENT2_EXPORT_SYMBOL +int bufferevent_decrement_write_limit(struct bufferevent *bev, ev_ssize_t decr); +/*@}*/ + +/** + @name Group rate limit manipulation + + Subtract a number of bytes from a bufferevent rate-limiting group's + read or write bucket. The decrement value can be negative, if you + want to manually refill the bucket. If the change puts the bucket + above or below zero, the bufferevents in the group will resume or + suspend reading writing as appropriate. + + Returns 0 on success, -1 on internal error. + + @{ + */ +EVENT2_EXPORT_SYMBOL +int bufferevent_rate_limit_group_decrement_read( + struct bufferevent_rate_limit_group *, ev_ssize_t); +EVENT2_EXPORT_SYMBOL +int bufferevent_rate_limit_group_decrement_write( + struct bufferevent_rate_limit_group *, ev_ssize_t); +/*@}*/ + + +/** + * Inspect the total bytes read/written on a group. + * + * Set the variable pointed to by total_read_out to the total number of bytes + * ever read on grp, and the variable pointed to by total_written_out to the + * total number of bytes ever written on grp. */ +EVENT2_EXPORT_SYMBOL +void bufferevent_rate_limit_group_get_totals( + struct bufferevent_rate_limit_group *grp, + ev_uint64_t *total_read_out, ev_uint64_t *total_written_out); + +/** + * Reset the total bytes read/written on a group. + * + * Reset the number of bytes read or written on grp as given by + * bufferevent_rate_limit_group_reset_totals(). */ +EVENT2_EXPORT_SYMBOL +void +bufferevent_rate_limit_group_reset_totals( + struct bufferevent_rate_limit_group *grp); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_BUFFEREVENT_H_INCLUDED_ */ diff --git a/src/components/libevent/bufferevent_compat.h b/src/components/libevent/bufferevent_compat.h new file mode 100644 index 0000000..6548204 --- /dev/null +++ b/src/components/libevent/bufferevent_compat.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2007-2012 Niels Provos, Nick Mathewson + * Copyright (c) 2000-2007 Niels Provos + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_BUFFEREVENT_COMPAT_H_INCLUDED_ +#define EVENT2_BUFFEREVENT_COMPAT_H_INCLUDED_ + +#define evbuffercb bufferevent_data_cb +#define everrorcb bufferevent_event_cb + +/** + Create a new bufferevent for an fd. + + This function is deprecated. Use bufferevent_socket_new and + bufferevent_set_callbacks instead. + + Libevent provides an abstraction on top of the regular event callbacks. + This abstraction is called a buffered event. A buffered event provides + input and output buffers that get filled and drained automatically. The + user of a buffered event no longer deals directly with the I/O, but + instead is reading from input and writing to output buffers. + + Once initialized, the bufferevent structure can be used repeatedly with + bufferevent_enable() and bufferevent_disable(). + + When read enabled the bufferevent will try to read from the file descriptor + and call the read callback. The write callback is executed whenever the + output buffer is drained below the write low watermark, which is 0 by + default. + + If multiple bases are in use, bufferevent_base_set() must be called before + enabling the bufferevent for the first time. + + @deprecated This function is deprecated because it uses the current + event base, and as such can be error prone for multithreaded programs. + Use bufferevent_socket_new() instead. + + @param fd the file descriptor from which data is read and written to. + This file descriptor is not allowed to be a pipe(2). + @param readcb callback to invoke when there is data to be read, or NULL if + no callback is desired + @param writecb callback to invoke when the file descriptor is ready for + writing, or NULL if no callback is desired + @param errorcb callback to invoke when there is an error on the file + descriptor + @param cbarg an argument that will be supplied to each of the callbacks + (readcb, writecb, and errorcb) + @return a pointer to a newly allocated bufferevent struct, or NULL if an + error occurred + @see bufferevent_base_set(), bufferevent_free() + */ +struct bufferevent *bufferevent_new(evutil_socket_t fd, + evbuffercb readcb, evbuffercb writecb, everrorcb errorcb, void *cbarg); + + +/** + Set the read and write timeout for a buffered event. + + @param bufev the bufferevent to be modified + @param timeout_read the read timeout + @param timeout_write the write timeout + */ +void bufferevent_settimeout(struct bufferevent *bufev, + int timeout_read, int timeout_write); + +#define EVBUFFER_READ BEV_EVENT_READING +#define EVBUFFER_WRITE BEV_EVENT_WRITING +#define EVBUFFER_EOF BEV_EVENT_EOF +#define EVBUFFER_ERROR BEV_EVENT_ERROR +#define EVBUFFER_TIMEOUT BEV_EVENT_TIMEOUT + +/** macro for getting access to the input buffer of a bufferevent */ +#define EVBUFFER_INPUT(x) bufferevent_get_input(x) +/** macro for getting access to the output buffer of a bufferevent */ +#define EVBUFFER_OUTPUT(x) bufferevent_get_output(x) + +#endif diff --git a/src/components/libevent/bufferevent_ssl.h b/src/components/libevent/bufferevent_ssl.h new file mode 100644 index 0000000..4e9dabb --- /dev/null +++ b/src/components/libevent/bufferevent_ssl.h @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_BUFFEREVENT_SSL_H_INCLUDED_ +#define EVENT2_BUFFEREVENT_SSL_H_INCLUDED_ + +/** @file event2/bufferevent_ssl.h + + OpenSSL support for bufferevents. + */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is what openssl's SSL objects are underneath. */ +struct ssl_st; + +/** + The state of an SSL object to be used when creating a new + SSL bufferevent. + */ +enum bufferevent_ssl_state { + BUFFEREVENT_SSL_OPEN = 0, + BUFFEREVENT_SSL_CONNECTING = 1, + BUFFEREVENT_SSL_ACCEPTING = 2 +}; + +#if defined(EVENT__HAVE_OPENSSL) || defined(EVENT_IN_DOXYGEN_) +/** + Create a new SSL bufferevent to send its data over another bufferevent. + + @param base An event_base to use to detect reading and writing. It + must also be the base for the underlying bufferevent. + @param underlying A socket to use for this SSL + @param ssl A SSL* object from openssl. + @param state The current state of the SSL connection + @param options One or more bufferevent_options + @return A new bufferevent on success, or NULL on failure +*/ +EVENT2_EXPORT_SYMBOL +struct bufferevent * +bufferevent_openssl_filter_new(struct event_base *base, + struct bufferevent *underlying, + struct ssl_st *ssl, + enum bufferevent_ssl_state state, + int options); + +/** + Create a new SSL bufferevent to send its data over an SSL * on a socket. + + @param base An event_base to use to detect reading and writing + @param fd A socket to use for this SSL + @param ssl A SSL* object from openssl. + @param state The current state of the SSL connection + @param options One or more bufferevent_options + @return A new bufferevent on success, or NULL on failure. +*/ +EVENT2_EXPORT_SYMBOL +struct bufferevent * +bufferevent_openssl_socket_new(struct event_base *base, + evutil_socket_t fd, + struct ssl_st *ssl, + enum bufferevent_ssl_state state, + int options); + +/** Control how to report dirty SSL shutdowns. + + If the peer (or the network, or an attacker) closes the TCP + connection before closing the SSL channel, and the protocol is SSL >= v3, + this is a "dirty" shutdown. If allow_dirty_shutdown is 0 (default), + this is reported as BEV_EVENT_ERROR. + + If instead allow_dirty_shutdown=1, a dirty shutdown is reported as + BEV_EVENT_EOF. + + (Note that if the protocol is < SSLv3, you will always receive + BEV_EVENT_EOF, since SSL 2 and earlier cannot distinguish a secure + connection close from a dirty one. This is one reason (among many) + not to use SSL 2.) +*/ + +EVENT2_EXPORT_SYMBOL +int bufferevent_openssl_get_allow_dirty_shutdown(struct bufferevent *bev); +EVENT2_EXPORT_SYMBOL +void bufferevent_openssl_set_allow_dirty_shutdown(struct bufferevent *bev, + int allow_dirty_shutdown); + +/** Return the underlying openssl SSL * object for an SSL bufferevent. */ +EVENT2_EXPORT_SYMBOL +struct ssl_st * +bufferevent_openssl_get_ssl(struct bufferevent *bufev); + +/** Tells a bufferevent to begin SSL renegotiation. */ +EVENT2_EXPORT_SYMBOL +int bufferevent_ssl_renegotiate(struct bufferevent *bev); + +/** Return the most recent OpenSSL error reported on an SSL bufferevent. */ +EVENT2_EXPORT_SYMBOL +unsigned long bufferevent_get_openssl_error(struct bufferevent *bev); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_BUFFEREVENT_SSL_H_INCLUDED_ */ diff --git a/src/components/libevent/bufferevent_struct.h b/src/components/libevent/bufferevent_struct.h new file mode 100644 index 0000000..a4c5ee4 --- /dev/null +++ b/src/components/libevent/bufferevent_struct.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_BUFFEREVENT_STRUCT_H_INCLUDED_ +#define EVENT2_BUFFEREVENT_STRUCT_H_INCLUDED_ + +/** @file event2/bufferevent_struct.h + + Data structures for bufferevents. Using these structures may hurt forward + compatibility with later versions of Libevent: be careful! + + @deprecated Use of bufferevent_struct.h is completely deprecated; these + structures are only exposed for backward compatibility with programs + written before Libevent 2.0 that used them. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include +/* For struct event */ +#include + +struct event_watermark { + size_t low; + size_t high; +}; + +/** + Shared implementation of a bufferevent. + + This type is exposed only because it was exposed in previous versions, + and some people's code may rely on manipulating it. Otherwise, you + should really not rely on the layout, size, or contents of this structure: + it is fairly volatile, and WILL change in future versions of the code. +**/ +struct bufferevent { + /** Event base for which this bufferevent was created. */ + struct event_base *ev_base; + /** Pointer to a table of function pointers to set up how this + bufferevent behaves. */ + const struct bufferevent_ops *be_ops; + + /** A read event that triggers when a timeout has happened or a socket + is ready to read data. Only used by some subtypes of + bufferevent. */ + struct event ev_read; + /** A write event that triggers when a timeout has happened or a socket + is ready to write data. Only used by some subtypes of + bufferevent. */ + struct event ev_write; + + /** An input buffer. Only the bufferevent is allowed to add data to + this buffer, though the user is allowed to drain it. */ + struct evbuffer *input; + + /** An input buffer. Only the bufferevent is allowed to drain data + from this buffer, though the user is allowed to add it. */ + struct evbuffer *output; + + struct event_watermark wm_read; + struct event_watermark wm_write; + + bufferevent_data_cb readcb; + bufferevent_data_cb writecb; + /* This should be called 'eventcb', but renaming it would break + * backward compatibility */ + bufferevent_event_cb errorcb; + void *cbarg; + + struct timeval timeout_read; + struct timeval timeout_write; + + /** Events that are currently enabled: currently EV_READ and EV_WRITE + are supported. */ + short enabled; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_BUFFEREVENT_STRUCT_H_INCLUDED_ */ diff --git a/src/components/libevent/dns.h b/src/components/libevent/dns.h new file mode 100644 index 0000000..d8bcf15 --- /dev/null +++ b/src/components/libevent/dns.h @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2006-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ + +/* + * The original DNS code is due to Adam Langley with heavy + * modifications by Nick Mathewson. Adam put his DNS software in the + * public domain. You can find his original copyright below. Please, + * aware that the code as part of Libevent is governed by the 3-clause + * BSD license above. + * + * This software is Public Domain. To view a copy of the public domain dedication, + * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to + * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. + * + * I ask and expect, but do not require, that all derivative works contain an + * attribution similar to: + * Parts developed by Adam Langley + * + * You may wish to replace the word "Parts" with something else depending on + * the amount of original code. + * + * (Derivative works does not include programs which link against, run or include + * the source verbatim in their source distributions) + */ + +/** @file event2/dns.h + * + * Welcome, gentle reader + * + * Async DNS lookups are really a whole lot harder than they should be, + * mostly stemming from the fact that the libc resolver has never been + * very good at them. Before you use this library you should see if libc + * can do the job for you with the modern async call getaddrinfo_a + * (see http://www.imperialviolet.org/page25.html#e498). Otherwise, + * please continue. + * + * The library keeps track of the state of nameservers and will avoid + * them when they go down. Otherwise it will round robin between them. + * + * Quick start guide: + * #include "evdns.h" + * void callback(int result, char type, int count, int ttl, + * void *addresses, void *arg); + * evdns_resolv_conf_parse(DNS_OPTIONS_ALL, "/etc/resolv.conf"); + * evdns_resolve("www.hostname.com", 0, callback, NULL); + * + * When the lookup is complete the callback function is called. The + * first argument will be one of the DNS_ERR_* defines in evdns.h. + * Hopefully it will be DNS_ERR_NONE, in which case type will be + * DNS_IPv4_A, count will be the number of IP addresses, ttl is the time + * which the data can be cached for (in seconds), addresses will point + * to an array of uint32_t's and arg will be whatever you passed to + * evdns_resolve. + * + * Searching: + * + * In order for this library to be a good replacement for glibc's resolver it + * supports searching. This involves setting a list of default domains, in + * which names will be queried for. The number of dots in the query name + * determines the order in which this list is used. + * + * Searching appears to be a single lookup from the point of view of the API, + * although many DNS queries may be generated from a single call to + * evdns_resolve. Searching can also drastically slow down the resolution + * of names. + * + * To disable searching: + * 1. Never set it up. If you never call evdns_resolv_conf_parse or + * evdns_search_add then no searching will occur. + * + * 2. If you do call evdns_resolv_conf_parse then don't pass + * DNS_OPTION_SEARCH (or DNS_OPTIONS_ALL, which implies it). + * + * 3. When calling evdns_resolve, pass the DNS_QUERY_NO_SEARCH flag. + * + * The order of searches depends on the number of dots in the name. If the + * number is greater than the ndots setting then the names is first tried + * globally. Otherwise each search domain is appended in turn. + * + * The ndots setting can either be set from a resolv.conf, or by calling + * evdns_search_ndots_set. + * + * For example, with ndots set to 1 (the default) and a search domain list of + * ["myhome.net"]: + * Query: www + * Order: www.myhome.net, www. + * + * Query: www.abc + * Order: www.abc., www.abc.myhome.net + * + * Internals: + * + * Requests are kept in two queues. The first is the inflight queue. In + * this queue requests have an allocated transaction id and nameserver. + * They will soon be transmitted if they haven't already been. + * + * The second is the waiting queue. The size of the inflight ring is + * limited and all other requests wait in waiting queue for space. This + * bounds the number of concurrent requests so that we don't flood the + * nameserver. Several algorithms require a full walk of the inflight + * queue and so bounding its size keeps thing going nicely under huge + * (many thousands of requests) loads. + * + * If a nameserver loses too many requests it is considered down and we + * try not to use it. After a while we send a probe to that nameserver + * (a lookup for google.com) and, if it replies, we consider it working + * again. If the nameserver fails a probe we wait longer to try again + * with the next probe. + */ + +#ifndef EVENT2_DNS_H_INCLUDED_ +#define EVENT2_DNS_H_INCLUDED_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* For integer types. */ +#include + +/** Error codes 0-5 are as described in RFC 1035. */ +#define DNS_ERR_NONE 0 +/** The name server was unable to interpret the query */ +#define DNS_ERR_FORMAT 1 +/** The name server was unable to process this query due to a problem with the + * name server */ +#define DNS_ERR_SERVERFAILED 2 +/** The domain name does not exist */ +#define DNS_ERR_NOTEXIST 3 +/** The name server does not support the requested kind of query */ +#define DNS_ERR_NOTIMPL 4 +/** The name server refuses to reform the specified operation for policy + * reasons */ +#define DNS_ERR_REFUSED 5 +/** The reply was truncated or ill-formatted */ +#define DNS_ERR_TRUNCATED 65 +/** An unknown error occurred */ +#define DNS_ERR_UNKNOWN 66 +/** Communication with the server timed out */ +#define DNS_ERR_TIMEOUT 67 +/** The request was canceled because the DNS subsystem was shut down. */ +#define DNS_ERR_SHUTDOWN 68 +/** The request was canceled via a call to evdns_cancel_request */ +#define DNS_ERR_CANCEL 69 +/** There were no answers and no error condition in the DNS packet. + * This can happen when you ask for an address that exists, but a record + * type that doesn't. */ +#define DNS_ERR_NODATA 70 + +#define DNS_IPv4_A 1 +#define DNS_PTR 2 +#define DNS_IPv6_AAAA 3 + +#define DNS_QUERY_NO_SEARCH 1 + +#define DNS_OPTION_SEARCH 1 +#define DNS_OPTION_NAMESERVERS 2 +#define DNS_OPTION_MISC 4 +#define DNS_OPTION_HOSTSFILE 8 +#define DNS_OPTIONS_ALL 15 + +/* Obsolete name for DNS_QUERY_NO_SEARCH */ +#define DNS_NO_SEARCH DNS_QUERY_NO_SEARCH + +/** + * The callback that contains the results from a lookup. + * - result is one of the DNS_ERR_* values (DNS_ERR_NONE for success) + * - type is either DNS_IPv4_A or DNS_PTR or DNS_IPv6_AAAA + * - count contains the number of addresses of form type + * - ttl is the number of seconds the resolution may be cached for. + * - addresses needs to be cast according to type. It will be an array of + * 4-byte sequences for ipv4, or an array of 16-byte sequences for ipv6, + * or a nul-terminated string for PTR. + */ +typedef void (*evdns_callback_type) (int result, char type, int count, int ttl, void *addresses, void *arg); + +struct evdns_base; +struct event_base; + +/** Flag for evdns_base_new: process resolv.conf. */ +#define EVDNS_BASE_INITIALIZE_NAMESERVERS 1 +/** Flag for evdns_base_new: Do not prevent the libevent event loop from + * exiting when we have no active dns requests. */ +#define EVDNS_BASE_DISABLE_WHEN_INACTIVE 0x8000 + +/** + Initialize the asynchronous DNS library. + + This function initializes support for non-blocking name resolution by + calling evdns_resolv_conf_parse() on UNIX and + evdns_config_windows_nameservers() on Windows. + + @param event_base the event base to associate the dns client with + @param flags any of EVDNS_BASE_INITIALIZE_NAMESERVERS| + EVDNS_BASE_DISABLE_WHEN_INACTIVE + @return evdns_base object if successful, or NULL if an error occurred. + @see evdns_base_free() + */ +EVENT2_EXPORT_SYMBOL +struct evdns_base * evdns_base_new(struct event_base *event_base, int initialize_nameservers); + + +/** + Shut down the asynchronous DNS resolver and terminate all active requests. + + If the 'fail_requests' option is enabled, all active requests will return + an empty result with the error flag set to DNS_ERR_SHUTDOWN. Otherwise, + the requests will be silently discarded. + + @param evdns_base the evdns base to free + @param fail_requests if zero, active requests will be aborted; if non-zero, + active requests will return DNS_ERR_SHUTDOWN. + @see evdns_base_new() + */ +EVENT2_EXPORT_SYMBOL +void evdns_base_free(struct evdns_base *base, int fail_requests); + +/** + Remove all hosts entries that have been loaded into the event_base via + evdns_base_load_hosts or via event_base_resolv_conf_parse. + + @param evdns_base the evdns base to remove outdated host addresses from + */ +EVENT2_EXPORT_SYMBOL +void evdns_base_clear_host_addresses(struct evdns_base *base); + +/** + Convert a DNS error code to a string. + + @param err the DNS error code + @return a string containing an explanation of the error code +*/ +EVENT2_EXPORT_SYMBOL +const char *evdns_err_to_string(int err); + + +/** + Add a nameserver. + + The address should be an IPv4 address in network byte order. + The type of address is chosen so that it matches in_addr.s_addr. + + @param base the evdns_base to which to add the name server + @param address an IP address in network byte order + @return 0 if successful, or -1 if an error occurred + @see evdns_base_nameserver_ip_add() + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_nameserver_add(struct evdns_base *base, + unsigned long int address); + +/** + Get the number of configured nameservers. + + This returns the number of configured nameservers (not necessarily the + number of running nameservers). This is useful for double-checking + whether our calls to the various nameserver configuration functions + have been successful. + + @param base the evdns_base to which to apply this operation + @return the number of configured nameservers + @see evdns_base_nameserver_add() + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_count_nameservers(struct evdns_base *base); + +/** + Remove all configured nameservers, and suspend all pending resolves. + + Resolves will not necessarily be re-attempted until evdns_base_resume() is called. + + @param base the evdns_base to which to apply this operation + @return 0 if successful, or -1 if an error occurred + @see evdns_base_resume() + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_clear_nameservers_and_suspend(struct evdns_base *base); + + +/** + Resume normal operation and continue any suspended resolve requests. + + Re-attempt resolves left in limbo after an earlier call to + evdns_base_clear_nameservers_and_suspend(). + + @param base the evdns_base to which to apply this operation + @return 0 if successful, or -1 if an error occurred + @see evdns_base_clear_nameservers_and_suspend() + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_resume(struct evdns_base *base); + +/** + Add a nameserver by string address. + + This function parses a n IPv4 or IPv6 address from a string and adds it as a + nameserver. It supports the following formats: + - [IPv6Address]:port + - [IPv6Address] + - IPv6Address + - IPv4Address:port + - IPv4Address + + If no port is specified, it defaults to 53. + + @param base the evdns_base to which to apply this operation + @return 0 if successful, or -1 if an error occurred + @see evdns_base_nameserver_add() + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_nameserver_ip_add(struct evdns_base *base, + const char *ip_as_string); + +/** + Add a nameserver by sockaddr. + **/ +EVENT2_EXPORT_SYMBOL +int +evdns_base_nameserver_sockaddr_add(struct evdns_base *base, + const struct sockaddr *sa, ev_socklen_t len, unsigned flags); + +struct evdns_request; + +/** + Lookup an A record for a given name. + + @param base the evdns_base to which to apply this operation + @param name a DNS hostname + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return an evdns_request object if successful, or NULL if an error occurred. + @see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6(), evdns_cancel_request() + */ +EVENT2_EXPORT_SYMBOL +struct evdns_request *evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr); + +/** + Lookup an AAAA record for a given name. + + @param base the evdns_base to which to apply this operation + @param name a DNS hostname + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return an evdns_request object if successful, or NULL if an error occurred. + @see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6(), evdns_cancel_request() + */ +EVENT2_EXPORT_SYMBOL +struct evdns_request *evdns_base_resolve_ipv6(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr); + +struct in_addr; +struct in6_addr; + +/** + Lookup a PTR record for a given IP address. + + @param base the evdns_base to which to apply this operation + @param in an IPv4 address + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return an evdns_request object if successful, or NULL if an error occurred. + @see evdns_resolve_reverse_ipv6(), evdns_cancel_request() + */ +EVENT2_EXPORT_SYMBOL +struct evdns_request *evdns_base_resolve_reverse(struct evdns_base *base, const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr); + + +/** + Lookup a PTR record for a given IPv6 address. + + @param base the evdns_base to which to apply this operation + @param in an IPv6 address + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return an evdns_request object if successful, or NULL if an error occurred. + @see evdns_resolve_reverse_ipv6(), evdns_cancel_request() + */ +EVENT2_EXPORT_SYMBOL +struct evdns_request *evdns_base_resolve_reverse_ipv6(struct evdns_base *base, const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr); + +/** + Cancels a pending DNS resolution request. + + @param base the evdns_base that was used to make the request + @param req the evdns_request that was returned by calling a resolve function + @see evdns_base_resolve_ipv4(), evdns_base_resolve_ipv6, evdns_base_resolve_reverse +*/ +EVENT2_EXPORT_SYMBOL +void evdns_cancel_request(struct evdns_base *base, struct evdns_request *req); + +/** + Set the value of a configuration option. + + The currently available configuration options are: + + ndots, timeout, max-timeouts, max-inflight, attempts, randomize-case, + bind-to, initial-probe-timeout, getaddrinfo-allow-skew. + + In versions before Libevent 2.0.3-alpha, the option name needed to end with + a colon. + + @param base the evdns_base to which to apply this operation + @param option the name of the configuration option to be modified + @param val the value to be set + @return 0 if successful, or -1 if an error occurred + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_set_option(struct evdns_base *base, const char *option, const char *val); + + +/** + Parse a resolv.conf file. + + The 'flags' parameter determines what information is parsed from the + resolv.conf file. See the man page for resolv.conf for the format of this + file. + + The following directives are not parsed from the file: sortlist, rotate, + no-check-names, inet6, debug. + + If this function encounters an error, the possible return values are: 1 = + failed to open file, 2 = failed to stat file, 3 = file too large, 4 = out of + memory, 5 = short read from file, 6 = no nameservers listed in the file + + @param base the evdns_base to which to apply this operation + @param flags any of DNS_OPTION_NAMESERVERS|DNS_OPTION_SEARCH|DNS_OPTION_MISC| + DNS_OPTION_HOSTSFILE|DNS_OPTIONS_ALL + @param filename the path to the resolv.conf file + @return 0 if successful, or various positive error codes if an error + occurred (see above) + @see resolv.conf(3), evdns_config_windows_nameservers() + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_resolv_conf_parse(struct evdns_base *base, int flags, const char *const filename); + +/** + Load an /etc/hosts-style file from 'hosts_fname' into 'base'. + + If hosts_fname is NULL, add minimal entries for localhost, and nothing + else. + + Note that only evdns_getaddrinfo uses the /etc/hosts entries. + + This function does not replace previously loaded hosts entries; to do that, + call evdns_base_clear_host_addresses first. + + Return 0 on success, negative on failure. +*/ +EVENT2_EXPORT_SYMBOL +int evdns_base_load_hosts(struct evdns_base *base, const char *hosts_fname); + +/** + Obtain nameserver information using the Windows API. + + Attempt to configure a set of nameservers based on platform settings on + a win32 host. Preferentially tries to use GetNetworkParams; if that fails, + looks in the registry. + + @return 0 if successful, or -1 if an error occurred + @see evdns_resolv_conf_parse() + */ +#ifdef _WIN32 +EVENT2_EXPORT_SYMBOL +int evdns_base_config_windows_nameservers(struct evdns_base *); +#define EVDNS_BASE_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED +#endif + + +/** + Clear the list of search domains. + */ +EVENT2_EXPORT_SYMBOL +void evdns_base_search_clear(struct evdns_base *base); + + +/** + Add a domain to the list of search domains + + @param domain the domain to be added to the search list + */ +EVENT2_EXPORT_SYMBOL +void evdns_base_search_add(struct evdns_base *base, const char *domain); + + +/** + Set the 'ndots' parameter for searches. + + Sets the number of dots which, when found in a name, causes + the first query to be without any search domain. + + @param ndots the new ndots parameter + */ +EVENT2_EXPORT_SYMBOL +void evdns_base_search_ndots_set(struct evdns_base *base, const int ndots); + +/** + A callback that is invoked when a log message is generated + + @param is_warning indicates if the log message is a 'warning' + @param msg the content of the log message + */ +typedef void (*evdns_debug_log_fn_type)(int is_warning, const char *msg); + + +/** + Set the callback function to handle DNS log messages. If this + callback is not set, evdns log messages are handled with the regular + Libevent logging system. + + @param fn the callback to be invoked when a log message is generated + */ +EVENT2_EXPORT_SYMBOL +void evdns_set_log_fn(evdns_debug_log_fn_type fn); + +/** + Set a callback that will be invoked to generate transaction IDs. By + default, we pick transaction IDs based on the current clock time, which + is bad for security. + + @param fn the new callback, or NULL to use the default. + + NOTE: This function has no effect in Libevent 2.0.4-alpha and later, + since Libevent now provides its own secure RNG. + */ +EVENT2_EXPORT_SYMBOL +void evdns_set_transaction_id_fn(ev_uint16_t (*fn)(void)); + +/** + Set a callback used to generate random bytes. By default, we use + the same function as passed to evdns_set_transaction_id_fn to generate + bytes two at a time. If a function is provided here, it's also used + to generate transaction IDs. + + NOTE: This function has no effect in Libevent 2.0.4-alpha and later, + since Libevent now provides its own secure RNG. +*/ +EVENT2_EXPORT_SYMBOL +void evdns_set_random_bytes_fn(void (*fn)(char *, size_t)); + +/* + * Functions used to implement a DNS server. + */ + +struct evdns_server_request; +struct evdns_server_question; + +/** + A callback to implement a DNS server. The callback function receives a DNS + request. It should then optionally add a number of answers to the reply + using the evdns_server_request_add_*_reply functions, before calling either + evdns_server_request_respond to send the reply back, or + evdns_server_request_drop to decline to answer the request. + + @param req A newly received request + @param user_data A pointer that was passed to + evdns_add_server_port_with_base(). + */ +typedef void (*evdns_request_callback_fn_type)(struct evdns_server_request *, void *); +#define EVDNS_ANSWER_SECTION 0 +#define EVDNS_AUTHORITY_SECTION 1 +#define EVDNS_ADDITIONAL_SECTION 2 + +#define EVDNS_TYPE_A 1 +#define EVDNS_TYPE_NS 2 +#define EVDNS_TYPE_CNAME 5 +#define EVDNS_TYPE_SOA 6 +#define EVDNS_TYPE_PTR 12 +#define EVDNS_TYPE_MX 15 +#define EVDNS_TYPE_TXT 16 +#define EVDNS_TYPE_AAAA 28 + +#define EVDNS_QTYPE_AXFR 252 +#define EVDNS_QTYPE_ALL 255 + +#define EVDNS_CLASS_INET 1 + +/* flags that can be set in answers; as part of the err parameter */ +#define EVDNS_FLAGS_AA 0x400 +#define EVDNS_FLAGS_RD 0x080 + +/** Create a new DNS server port. + + @param base The event base to handle events for the server port. + @param socket A UDP socket to accept DNS requests. + @param flags Always 0 for now. + @param callback A function to invoke whenever we get a DNS request + on the socket. + @param user_data Data to pass to the callback. + @return an evdns_server_port structure for this server port. + */ +EVENT2_EXPORT_SYMBOL +struct evdns_server_port *evdns_add_server_port_with_base(struct event_base *base, evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data); +/** Close down a DNS server port, and free associated structures. */ +EVENT2_EXPORT_SYMBOL +void evdns_close_server_port(struct evdns_server_port *port); + +/** Sets some flags in a reply we're building. + Allows setting of the AA or RD flags + */ +EVENT2_EXPORT_SYMBOL +void evdns_server_request_set_flags(struct evdns_server_request *req, int flags); + +/* Functions to add an answer to an in-progress DNS reply. + */ +EVENT2_EXPORT_SYMBOL +int evdns_server_request_add_reply(struct evdns_server_request *req, int section, const char *name, int type, int dns_class, int ttl, int datalen, int is_name, const char *data); +EVENT2_EXPORT_SYMBOL +int evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl); +EVENT2_EXPORT_SYMBOL +int evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl); +EVENT2_EXPORT_SYMBOL +int evdns_server_request_add_ptr_reply(struct evdns_server_request *req, struct in_addr *in, const char *inaddr_name, const char *hostname, int ttl); +EVENT2_EXPORT_SYMBOL +int evdns_server_request_add_cname_reply(struct evdns_server_request *req, const char *name, const char *cname, int ttl); + +/** + Send back a response to a DNS request, and free the request structure. +*/ +EVENT2_EXPORT_SYMBOL +int evdns_server_request_respond(struct evdns_server_request *req, int err); +/** + Free a DNS request without sending back a reply. +*/ +EVENT2_EXPORT_SYMBOL +int evdns_server_request_drop(struct evdns_server_request *req); +struct sockaddr; +/** + Get the address that made a DNS request. + */ +EVENT2_EXPORT_SYMBOL +int evdns_server_request_get_requesting_addr(struct evdns_server_request *req, struct sockaddr *sa, int addr_len); + +/** Callback for evdns_getaddrinfo. */ +typedef void (*evdns_getaddrinfo_cb)(int result, struct evutil_addrinfo *res, void *arg); + +struct evdns_base; +struct evdns_getaddrinfo_request; +/** Make a non-blocking getaddrinfo request using the dns_base in 'dns_base'. + * + * If we can answer the request immediately (with an error or not!), then we + * invoke cb immediately and return NULL. Otherwise we return + * an evdns_getaddrinfo_request and invoke cb later. + * + * When the callback is invoked, we pass as its first argument the error code + * that getaddrinfo would return (or 0 for no error). As its second argument, + * we pass the evutil_addrinfo structures we found (or NULL on error). We + * pass 'arg' as the third argument. + * + * Limitations: + * + * - The AI_V4MAPPED and AI_ALL flags are not currently implemented. + * - For ai_socktype, we only handle SOCKTYPE_STREAM, SOCKTYPE_UDP, and 0. + * - For ai_protocol, we only handle IPPROTO_TCP, IPPROTO_UDP, and 0. + */ +EVENT2_EXPORT_SYMBOL +struct evdns_getaddrinfo_request *evdns_getaddrinfo( + struct evdns_base *dns_base, + const char *nodename, const char *servname, + const struct evutil_addrinfo *hints_in, + evdns_getaddrinfo_cb cb, void *arg); + +/* Cancel an in-progress evdns_getaddrinfo. This MUST NOT be called after the + * getaddrinfo's callback has been invoked. The resolves will be canceled, + * and the callback will be invoked with the error EVUTIL_EAI_CANCEL. */ +EVENT2_EXPORT_SYMBOL +void evdns_getaddrinfo_cancel(struct evdns_getaddrinfo_request *req); + +/** + Retrieve the address of the 'idx'th configured nameserver. + + @param base The evdns_base to examine. + @param idx The index of the nameserver to get the address of. + @param sa A location to receive the server's address. + @param len The number of bytes available at sa. + + @return the number of bytes written into sa on success. On failure, returns + -1 if idx is greater than the number of configured nameservers, or a + value greater than 'len' if len was not high enough. + */ +EVENT2_EXPORT_SYMBOL +int evdns_base_get_nameserver_addr(struct evdns_base *base, int idx, + struct sockaddr *sa, ev_socklen_t len); + +#ifdef __cplusplus +} +#endif + +#endif /* !EVENT2_DNS_H_INCLUDED_ */ diff --git a/src/components/libevent/dns_compat.h b/src/components/libevent/dns_compat.h new file mode 100644 index 0000000..aa9382f --- /dev/null +++ b/src/components/libevent/dns_compat.h @@ -0,0 +1,336 @@ +/* + * Copyright (c) 2006-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_DNS_COMPAT_H_INCLUDED_ +#define EVENT2_DNS_COMPAT_H_INCLUDED_ + +/** @file event2/dns_compat.h + + Potentially non-threadsafe versions of the functions in dns.h: provided + only for backwards compatibility. + + + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/** + Initialize the asynchronous DNS library. + + This function initializes support for non-blocking name resolution by + calling evdns_resolv_conf_parse() on UNIX and + evdns_config_windows_nameservers() on Windows. + + @deprecated This function is deprecated because it always uses the current + event base, and is easily confused by multiple calls to event_init(), and + so is not safe for multithreaded use. Additionally, it allocates a global + structure that only one thread can use. The replacement is + evdns_base_new(). + + @return 0 if successful, or -1 if an error occurred + @see evdns_shutdown() + */ +int evdns_init(void); + +struct evdns_base; +/** + Return the global evdns_base created by event_init() and used by the other + deprecated functions. + + @deprecated This function is deprecated because use of the global + evdns_base is error-prone. + */ +struct evdns_base *evdns_get_global_base(void); + +/** + Shut down the asynchronous DNS resolver and terminate all active requests. + + If the 'fail_requests' option is enabled, all active requests will return + an empty result with the error flag set to DNS_ERR_SHUTDOWN. Otherwise, + the requests will be silently discarded. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_shutdown(). + + @param fail_requests if zero, active requests will be aborted; if non-zero, + active requests will return DNS_ERR_SHUTDOWN. + @see evdns_init() + */ +void evdns_shutdown(int fail_requests); + +/** + Add a nameserver. + + The address should be an IPv4 address in network byte order. + The type of address is chosen so that it matches in_addr.s_addr. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_nameserver_add(). + + @param address an IP address in network byte order + @return 0 if successful, or -1 if an error occurred + @see evdns_nameserver_ip_add() + */ +int evdns_nameserver_add(unsigned long int address); + +/** + Get the number of configured nameservers. + + This returns the number of configured nameservers (not necessarily the + number of running nameservers). This is useful for double-checking + whether our calls to the various nameserver configuration functions + have been successful. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_count_nameservers(). + + @return the number of configured nameservers + @see evdns_nameserver_add() + */ +int evdns_count_nameservers(void); + +/** + Remove all configured nameservers, and suspend all pending resolves. + + Resolves will not necessarily be re-attempted until evdns_resume() is called. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_clear_nameservers_and_suspend(). + + @return 0 if successful, or -1 if an error occurred + @see evdns_resume() + */ +int evdns_clear_nameservers_and_suspend(void); + +/** + Resume normal operation and continue any suspended resolve requests. + + Re-attempt resolves left in limbo after an earlier call to + evdns_clear_nameservers_and_suspend(). + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_resume(). + + @return 0 if successful, or -1 if an error occurred + @see evdns_clear_nameservers_and_suspend() + */ +int evdns_resume(void); + +/** + Add a nameserver. + + This wraps the evdns_nameserver_add() function by parsing a string as an IP + address and adds it as a nameserver. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_nameserver_ip_add(). + + @return 0 if successful, or -1 if an error occurred + @see evdns_nameserver_add() + */ +int evdns_nameserver_ip_add(const char *ip_as_string); + +/** + Lookup an A record for a given name. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_resolve_ipv4(). + + @param name a DNS hostname + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return 0 if successful, or -1 if an error occurred + @see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6() + */ +int evdns_resolve_ipv4(const char *name, int flags, evdns_callback_type callback, void *ptr); + +/** + Lookup an AAAA record for a given name. + + @param name a DNS hostname + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return 0 if successful, or -1 if an error occurred + @see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6() + */ +int evdns_resolve_ipv6(const char *name, int flags, evdns_callback_type callback, void *ptr); + +struct in_addr; +struct in6_addr; + +/** + Lookup a PTR record for a given IP address. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_resolve_reverse(). + + @param in an IPv4 address + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return 0 if successful, or -1 if an error occurred + @see evdns_resolve_reverse_ipv6() + */ +int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr); + +/** + Lookup a PTR record for a given IPv6 address. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_resolve_reverse_ipv6(). + + @param in an IPv6 address + @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. + @param callback a callback function to invoke when the request is completed + @param ptr an argument to pass to the callback function + @return 0 if successful, or -1 if an error occurred + @see evdns_resolve_reverse_ipv6() + */ +int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr); + +/** + Set the value of a configuration option. + + The currently available configuration options are: + + ndots, timeout, max-timeouts, max-inflight, and attempts + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_set_option(). + + @param option the name of the configuration option to be modified + @param val the value to be set + @param flags Ignored. + @return 0 if successful, or -1 if an error occurred + */ +int evdns_set_option(const char *option, const char *val, int flags); + +/** + Parse a resolv.conf file. + + The 'flags' parameter determines what information is parsed from the + resolv.conf file. See the man page for resolv.conf for the format of this + file. + + The following directives are not parsed from the file: sortlist, rotate, + no-check-names, inet6, debug. + + If this function encounters an error, the possible return values are: 1 = + failed to open file, 2 = failed to stat file, 3 = file too large, 4 = out of + memory, 5 = short read from file, 6 = no nameservers listed in the file + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_resolv_conf_parse(). + + @param flags any of DNS_OPTION_NAMESERVERS|DNS_OPTION_SEARCH|DNS_OPTION_MISC| + DNS_OPTIONS_ALL + @param filename the path to the resolv.conf file + @return 0 if successful, or various positive error codes if an error + occurred (see above) + @see resolv.conf(3), evdns_config_windows_nameservers() + */ +int evdns_resolv_conf_parse(int flags, const char *const filename); + +/** + Clear the list of search domains. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_search_clear(). + */ +void evdns_search_clear(void); + +/** + Add a domain to the list of search domains + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_search_add(). + + @param domain the domain to be added to the search list + */ +void evdns_search_add(const char *domain); + +/** + Set the 'ndots' parameter for searches. + + Sets the number of dots which, when found in a name, causes + the first query to be without any search domain. + + @deprecated This function is deprecated because it does not allow the + caller to specify which evdns_base it applies to. The recommended + function is evdns_base_search_ndots_set(). + + @param ndots the new ndots parameter + */ +void evdns_search_ndots_set(const int ndots); + +/** + As evdns_server_new_with_base. + + @deprecated This function is deprecated because it does not allow the + caller to specify which even_base it uses. The recommended + function is evdns_add_server_port_with_base(). + +*/ +struct evdns_server_port *evdns_add_server_port(evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data); + +#ifdef _WIN32 +int evdns_config_windows_nameservers(void); +#define EVDNS_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_EVENT_COMPAT_H_INCLUDED_ */ diff --git a/src/components/libevent/dns_struct.h b/src/components/libevent/dns_struct.h new file mode 100644 index 0000000..5293488 --- /dev/null +++ b/src/components/libevent/dns_struct.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_DNS_STRUCT_H_INCLUDED_ +#define EVENT2_DNS_STRUCT_H_INCLUDED_ + +/** @file event2/dns_struct.h + + Data structures for dns. Using these structures may hurt forward + compatibility with later versions of Libevent: be careful! + + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/* + * Structures used to implement a DNS server. + */ + +struct evdns_server_request { + int flags; + int nquestions; + struct evdns_server_question **questions; +}; +struct evdns_server_question { + int type; +#ifdef __cplusplus + int dns_question_class; +#else + /* You should refer to this field as "dns_question_class". The + * name "class" works in C for backward compatibility, and will be + * removed in a future version. (1.5 or later). */ + int class; +#define dns_question_class class +#endif + char name[1]; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_DNS_STRUCT_H_INCLUDED_ */ + diff --git a/src/components/libevent/evconfig-private.h b/src/components/libevent/evconfig-private.h new file mode 100644 index 0000000..f6b08e3 --- /dev/null +++ b/src/components/libevent/evconfig-private.h @@ -0,0 +1,49 @@ +/* evconfig-private.h. Generated from evconfig-private.h.in by configure. */ +/* evconfig-private.h template - see "Configuration Header Templates" */ +/* in AC manual. Kevin Bowling header file. */ +#define EVENT__HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the `clock_gettime' function. */ +#define EVENT__HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the declaration of `CTL_KERN', and to 0 if you + don't. */ +#define EVENT__HAVE_DECL_CTL_KERN 1 + +/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if you + don't. */ +#define EVENT__HAVE_DECL_KERN_ARND 0 + +/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if you + don't. */ +#define EVENT__HAVE_DECL_KERN_RANDOM 1 + +/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if you + don't. */ +#define EVENT__HAVE_DECL_RANDOM_UUID 1 + +/* Define if /dev/poll is available */ +/* #undef EVENT__HAVE_DEVPOLL */ + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_DLFCN_H 1 + +/* Define if your system supports the epoll system calls */ +#define EVENT__HAVE_EPOLL 1 + +/* Define to 1 if you have the `epoll_create1' function. */ +#define EVENT__HAVE_EPOLL_CREATE1 1 + +/* Define to 1 if you have the `epoll_ctl' function. */ +#define EVENT__HAVE_EPOLL_CTL 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_ERRNO_H 1 + +/* Define to 1 if you have ERR_remove_thread_stat(). */ +#define EVENT__HAVE_ERR_REMOVE_THREAD_STATE 1 + +/* Define to 1 if you have the `eventfd' function. */ +#define EVENT__HAVE_EVENTFD 1 + +/* Define if your system supports event ports */ +/* #undef EVENT__HAVE_EVENT_PORTS */ + +/* Define to 1 if you have the `fcntl' function. */ +#define EVENT__HAVE_FCNTL 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_FCNTL_H 1 + +/* Define to 1 if the system has the type `fd_mask'. */ +#define EVENT__HAVE_FD_MASK 1 + +/* Do we have getaddrinfo()? */ +#define EVENT__HAVE_GETADDRINFO 1 + +/* Define to 1 if you have the `getegid' function. */ +#define EVENT__HAVE_GETEGID 1 + +/* Define to 1 if you have the `geteuid' function. */ +#define EVENT__HAVE_GETEUID 1 + +/* Define this if you have any gethostbyname_r() */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R */ + +/* Define this if gethostbyname_r takes 3 arguments */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R_3_ARG */ + +/* Define this if gethostbyname_r takes 5 arguments */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R_5_ARG */ + +/* Define this if gethostbyname_r takes 6 arguments */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R_6_ARG */ + +/* Define to 1 if you have the `getifaddrs' function. */ +#define EVENT__HAVE_GETIFADDRS 1 + +/* Define to 1 if you have the `getnameinfo' function. */ +#define EVENT__HAVE_GETNAMEINFO 1 + +/* Define to 1 if you have the `getprotobynumber' function. */ +#define EVENT__HAVE_GETPROTOBYNUMBER 1 + +/* Define to 1 if you have the `getservbyname' function. */ +#define EVENT__HAVE_GETSERVBYNAME 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define EVENT__HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_IFADDRS_H 1 + +/* Define to 1 if you have the `inet_ntop' function. */ +#define EVENT__HAVE_INET_NTOP 1 + +/* Define to 1 if you have the `inet_pton' function. */ +#define EVENT__HAVE_INET_PTON 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `issetugid' function. */ +/* #undef EVENT__HAVE_ISSETUGID */ + +/* Define to 1 if you have the `kqueue' function. */ +/* #undef EVENT__HAVE_KQUEUE */ + +/* Define if the system has zlib */ +#define EVENT__HAVE_LIBZ 1 + +/* Define to 1 if you have the `mach_absolute_time' function. */ +/* #undef EVENT__HAVE_MACH_ABSOLUTE_TIME */ + +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_MACH_MACH_TIME_H */ + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mmap' function. */ +#define EVENT__HAVE_MMAP 1 + +/* Define to 1 if you have the `nanosleep' function. */ +#define EVENT__HAVE_NANOSLEEP 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_NETDB_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_NETINET_IN6_H */ + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_NETINET_TCP_H 1 + +/* Define if the system has openssl */ +#define EVENT__HAVE_OPENSSL 1 + +/* Define to 1 if you have the `pipe' function. */ +#define EVENT__HAVE_PIPE 1 + +/* Define to 1 if you have the `pipe2' function. */ +#define EVENT__HAVE_PIPE2 1 + +/* Define to 1 if you have the `poll' function. */ +#define EVENT__HAVE_POLL 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_POLL_H 1 + +/* Define to 1 if you have the `port_create' function. */ +/* #undef EVENT__HAVE_PORT_CREATE */ + +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_PORT_H */ + +/* Define if you have POSIX threads libraries and header files. */ +/* #undef EVENT__HAVE_PTHREAD */ + +/* Define if we have pthreads on this system */ +#define EVENT__HAVE_PTHREADS 1 + +/* Define to 1 if you have the `putenv' function. */ +#define EVENT__HAVE_PUTENV 1 + +/* Define to 1 if the system has the type `sa_family_t'. */ +#define EVENT__HAVE_SA_FAMILY_T 1 + +/* Define to 1 if you have the `select' function. */ +#define EVENT__HAVE_SELECT 1 + +/* Define to 1 if you have the `sendfile' function. */ +#define EVENT__HAVE_SENDFILE 1 + +/* Define to 1 if you have the `setenv' function. */ +#define EVENT__HAVE_SETENV 1 + +/* Define if F_SETFD is defined in */ +#define EVENT__HAVE_SETFD 1 + +/* Define to 1 if you have the `setrlimit' function. */ +#define EVENT__HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define EVENT__HAVE_SIGACTION 1 + +/* Define to 1 if you have the `signal' function. */ +#define EVENT__HAVE_SIGNAL 1 + +/* Define to 1 if you have the `splice' function. */ +#define EVENT__HAVE_SPLICE 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDDEF_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STRING_H 1 + +/* Define to 1 if you have the `strlcpy' function. */ +/* #undef EVENT__HAVE_STRLCPY */ + +/* Define to 1 if you have the `strsep' function. */ +#define EVENT__HAVE_STRSEP 1 + +/* Define to 1 if you have the `strtok_r' function. */ +#define EVENT__HAVE_STRTOK_R 1 + +/* Define to 1 if you have the `strtoll' function. */ +#define EVENT__HAVE_STRTOLL 1 + +/* Define to 1 if the system has the type `struct addrinfo'. */ +#define EVENT__HAVE_STRUCT_ADDRINFO 1 + +/* Define to 1 if the system has the type `struct in6_addr'. */ +#define EVENT__HAVE_STRUCT_IN6_ADDR 1 + +/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */ +#define EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR16 1 + +/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */ +#define EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR32 1 + +/* Define to 1 if the system has the type `struct sockaddr_in6'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_IN6 1 + +/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */ +/* #undef EVENT__HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN */ + +/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */ +/* #undef EVENT__HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ + +/* Define to 1 if the system has the type `struct sockaddr_storage'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_STORAGE 1 + +/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 + +/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */ +/* #undef EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */ + +/* Define to 1 if the system has the type `struct so_linger'. */ +/* #undef EVENT__HAVE_STRUCT_SO_LINGER */ + +/* Define to 1 if you have the `sysctl' function. */ +#define EVENT__HAVE_SYSCTL 1 + +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_SYS_DEVPOLL_H */ + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_EPOLL_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_EVENTFD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_SYS_EVENT_H */ + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_QUEUE_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SENDFILE_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SYSCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_TIMERFD_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_WAIT_H 1 + +/* Define if TAILQ_FOREACH is defined in */ +#define EVENT__HAVE_TAILQFOREACH 1 + +/* Define if timeradd is defined in */ +#define EVENT__HAVE_TIMERADD 1 + +/* Define if timerclear is defined in */ +#define EVENT__HAVE_TIMERCLEAR 1 + +/* Define if timercmp is defined in */ +#define EVENT__HAVE_TIMERCMP 1 + +/* Define to 1 if you have the `timerfd_create' function. */ +#define EVENT__HAVE_TIMERFD_CREATE 1 + +/* Define if timerisset is defined in */ +#define EVENT__HAVE_TIMERISSET 1 + +/* Define to 1 if the system has the type `uint16_t'. */ +#define EVENT__HAVE_UINT16_T 1 + +/* Define to 1 if the system has the type `uint32_t'. */ +#define EVENT__HAVE_UINT32_T 1 + +/* Define to 1 if the system has the type `uint64_t'. */ +#define EVENT__HAVE_UINT64_T 1 + +/* Define to 1 if the system has the type `uint8_t'. */ +#define EVENT__HAVE_UINT8_T 1 + +/* Define to 1 if the system has the type `uintptr_t'. */ +#define EVENT__HAVE_UINTPTR_T 1 + +/* Define to 1 if you have the `umask' function. */ +#define EVENT__HAVE_UMASK 1 + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `unsetenv' function. */ +#define EVENT__HAVE_UNSETENV 1 + +/* Define to 1 if you have the `usleep' function. */ +#define EVENT__HAVE_USLEEP 1 + +/* Define to 1 if you have the `vasprintf' function. */ +#define EVENT__HAVE_VASPRINTF 1 + +/* Define if waitpid() supports WNOWAIT */ +/* #undef EVENT__HAVE_WAITPID_WITH_WNOWAIT */ + +/* Define if kqueue works correctly with pipes */ +/* #undef EVENT__HAVE_WORKING_KQUEUE */ + +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_ZLIB_H 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define EVENT__LT_OBJDIR ".libs/" + +/* Numeric representation of the version */ +#define EVENT__NUMERIC_VERSION 0x02010800 + +/* Name of package */ +#define EVENT__PACKAGE "libevent" + +/* Define to the address where bug reports for this package should be sent. */ +#define EVENT__PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define EVENT__PACKAGE_NAME "libevent" + +/* Define to the full name and version of this package. */ +#define EVENT__PACKAGE_STRING "libevent 2.1.8-stable" + +/* Define to the one symbol short name of this package. */ +#define EVENT__PACKAGE_TARNAME "libevent" + +/* Define to the home page for this package. */ +#define EVENT__PACKAGE_URL "" + +/* Define to the version of this package. */ +#define EVENT__PACKAGE_VERSION "2.1.8-stable" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef EVENT__PTHREAD_CREATE_JOINABLE */ + +/* The size of `int', as computed by sizeof. */ +#define EVENT__SIZEOF_INT 4 + +/* The size of `long', as computed by sizeof. */ +#define EVENT__SIZEOF_LONG 8 + +/* The size of `long long', as computed by sizeof. */ +#define EVENT__SIZEOF_LONG_LONG 8 + +/* The size of `off_t', as computed by sizeof. */ +#define EVENT__SIZEOF_OFF_T 8 + +/* The size of `pthread_t', as computed by sizeof. */ +#define EVENT__SIZEOF_PTHREAD_T 8 + +/* The size of `short', as computed by sizeof. */ +#define EVENT__SIZEOF_SHORT 2 + +/* The size of `size_t', as computed by sizeof. */ +#define EVENT__SIZEOF_SIZE_T 8 + +/* The size of `void *', as computed by sizeof. */ +#define EVENT__SIZEOF_VOID_P 8 + +/* Define to 1 if you have the ANSI C header files. */ +#define EVENT__STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +#define EVENT__TIME_WITH_SYS_TIME 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef EVENT___ALL_SOURCE +# define EVENT___ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef EVENT___GNU_SOURCE +# define EVENT___GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef EVENT___POSIX_PTHREAD_SEMANTICS +# define EVENT___POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef EVENT___TANDEM_SOURCE +# define EVENT___TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef EVENT____EXTENSIONS__ +# define EVENT____EXTENSIONS__ 1 +#endif + + +/* Version number of package */ +#define EVENT__VERSION "2.1.8-stable" + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef EVENT___DARWIN_USE_64_BIT_INODE +# define EVENT___DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef EVENT___FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef EVENT___LARGE_FILES */ + +/* Define to 1 if on MINIX. */ +/* #undef EVENT___MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +/* #undef EVENT___POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef EVENT___POSIX_SOURCE */ + +/* Define to appropriate substitue if compiler doesnt have __func__ */ +/* #undef EVENT____func__ */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef EVENT__const */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef EVENT____cplusplus +/* #undef EVENT__inline */ +#endif + +/* Define to `int' if does not define. */ +/* #undef EVENT__pid_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef EVENT__size_t */ + +/* Define to unsigned int if you dont have it */ +/* #undef EVENT__socklen_t */ + +/* Define to `int' if does not define. */ +/* #undef EVENT__ssize_t */ + +#endif /* event2/event-config.h */ diff --git a/src/components/libevent/event.h b/src/components/libevent/event.h new file mode 100644 index 0000000..0bcb534 --- /dev/null +++ b/src/components/libevent/event.h @@ -0,0 +1,1675 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_EVENT_H_INCLUDED_ +#define EVENT2_EVENT_H_INCLUDED_ + +/** + @mainpage + + @section intro Introduction + + Libevent is an event notification library for developing scalable network + servers. The Libevent API provides a mechanism to execute a callback + function when a specific event occurs on a file descriptor or after a + timeout has been reached. Furthermore, Libevent also support callbacks due + to signals or regular timeouts. + + Libevent is meant to replace the event loop found in event driven network + servers. An application just needs to call event_base_dispatch() and then add or + remove events dynamically without having to change the event loop. + + + Currently, Libevent supports /dev/poll, kqueue(2), select(2), poll(2), + epoll(4), and evports. The internal event mechanism is completely + independent of the exposed event API, and a simple update of Libevent can + provide new functionality without having to redesign the applications. As a + result, Libevent allows for portable application development and provides + the most scalable event notification mechanism available on an operating + system. Libevent can also be used for multithreaded programs. Libevent + should compile on Linux, *BSD, Mac OS X, Solaris and, Windows. + + @section usage Standard usage + + Every program that uses Libevent must include the + header, and pass the -levent flag to the linker. (You can instead link + -levent_core if you only want the main event and buffered IO-based code, + and don't want to link any protocol code.) + + @section setup Library setup + + Before you call any other Libevent functions, you need to set up the + library. If you're going to use Libevent from multiple threads in a + multithreaded application, you need to initialize thread support -- + typically by using evthread_use_pthreads() or + evthread_use_windows_threads(). See for more + information. + + This is also the point where you can replace Libevent's memory + management functions with event_set_mem_functions, and enable debug mode + with event_enable_debug_mode(). + + @section base Creating an event base + + Next, you need to create an event_base structure, using event_base_new() + or event_base_new_with_config(). The event_base is responsible for + keeping track of which events are "pending" (that is to say, being + watched to see if they become active) and which events are "active". + Every event is associated with a single event_base. + + @section event Event notification + + For each file descriptor that you wish to monitor, you must create an + event structure with event_new(). (You may also declare an event + structure and call event_assign() to initialize the members of the + structure.) To enable notification, you add the structure to the list + of monitored events by calling event_add(). The event structure must + remain allocated as long as it is active, so it should generally be + allocated on the heap. + + @section loop Dispatching events. + + Finally, you call event_base_dispatch() to loop and dispatch events. + You can also use event_base_loop() for more fine-grained control. + + Currently, only one thread can be dispatching a given event_base at a + time. If you want to run events in multiple threads at once, you can + either have a single event_base whose events add work to a work queue, + or you can create multiple event_base objects. + + @section bufferevent I/O Buffers + + Libevent provides a buffered I/O abstraction on top of the regular event + callbacks. This abstraction is called a bufferevent. A bufferevent + provides input and output buffers that get filled and drained + automatically. The user of a buffered event no longer deals directly + with the I/O, but instead is reading from input and writing to output + buffers. + + Once initialized via bufferevent_socket_new(), the bufferevent structure + can be used repeatedly with bufferevent_enable() and + bufferevent_disable(). Instead of reading and writing directly to a + socket, you would call bufferevent_read() and bufferevent_write(). + + When read enabled the bufferevent will try to read from the file descriptor + and call the read callback. The write callback is executed whenever the + output buffer is drained below the write low watermark, which is 0 by + default. + + See for more information. + + @section timers Timers + + Libevent can also be used to create timers that invoke a callback after a + certain amount of time has expired. The evtimer_new() macro returns + an event struct to use as a timer. To activate the timer, call + evtimer_add(). Timers can be deactivated by calling evtimer_del(). + (These macros are thin wrappers around event_new(), event_add(), + and event_del(); you can also use those instead.) + + @section evdns Asynchronous DNS resolution + + Libevent provides an asynchronous DNS resolver that should be used instead + of the standard DNS resolver functions. See the + functions for more detail. + + @section evhttp Event-driven HTTP servers + + Libevent provides a very simple event-driven HTTP server that can be + embedded in your program and used to service HTTP requests. + + To use this capability, you need to include the header in your + program. See that header for more information. + + @section evrpc A framework for RPC servers and clients + + Libevent provides a framework for creating RPC servers and clients. It + takes care of marshaling and unmarshaling all data structures. + + @section api API Reference + + To browse the complete documentation of the libevent API, click on any of + the following links. + + event2/event.h + The primary libevent header + + event2/thread.h + Functions for use by multithreaded programs + + event2/buffer.h and event2/bufferevent.h + Buffer management for network reading and writing + + event2/util.h + Utility functions for portable nonblocking network code + + event2/dns.h + Asynchronous DNS resolution + + event2/http.h + An embedded libevent-based HTTP server + + event2/rpc.h + A framework for creating RPC servers and clients + + */ + +/** @file event2/event.h + + Core functions for waiting for and receiving events, and using event bases. +*/ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +#include + +/* For int types. */ +#include + +/** + * Structure to hold information and state for a Libevent dispatch loop. + * + * The event_base lies at the center of Libevent; every application will + * have one. It keeps track of all pending and active events, and + * notifies your application of the active ones. + * + * This is an opaque structure; you can allocate one using + * event_base_new() or event_base_new_with_config(). + * + * @see event_base_new(), event_base_free(), event_base_loop(), + * event_base_new_with_config() + */ +struct event_base +#ifdef EVENT_IN_DOXYGEN_ +{/*Empty body so that doxygen will generate documentation here.*/} +#endif +; + +/** + * @struct event + * + * Structure to represent a single event. + * + * An event can have some underlying condition it represents: a socket + * becoming readable or writeable (or both), or a signal becoming raised. + * (An event that represents no underlying condition is still useful: you + * can use one to implement a timer, or to communicate between threads.) + * + * Generally, you can create events with event_new(), then make them + * pending with event_add(). As your event_base runs, it will run the + * callbacks of an events whose conditions are triggered. When you + * longer want the event, free it with event_free(). + * + * In more depth: + * + * An event may be "pending" (one whose condition we are watching), + * "active" (one whose condition has triggered and whose callback is about + * to run), neither, or both. Events come into existence via + * event_assign() or event_new(), and are then neither active nor pending. + * + * To make an event pending, pass it to event_add(). When doing so, you + * can also set a timeout for the event. + * + * Events become active during an event_base_loop() call when either their + * condition has triggered, or when their timeout has elapsed. You can + * also activate an event manually using event_active(). The even_base + * loop will run the callbacks of active events; after it has done so, it + * marks them as no longer active. + * + * You can make an event non-pending by passing it to event_del(). This + * also makes the event non-active. + * + * Events can be "persistent" or "non-persistent". A non-persistent event + * becomes non-pending as soon as it is triggered: thus, it only runs at + * most once per call to event_add(). A persistent event remains pending + * even when it becomes active: you'll need to event_del() it manually in + * order to make it non-pending. When a persistent event with a timeout + * becomes active, its timeout is reset: this means you can use persistent + * events to implement periodic timeouts. + * + * This should be treated as an opaque structure; you should never read or + * write any of its fields directly. For backward compatibility with old + * code, it is defined in the event2/event_struct.h header; including this + * header may make your code incompatible with other versions of Libevent. + * + * @see event_new(), event_free(), event_assign(), event_get_assignment(), + * event_add(), event_del(), event_active(), event_pending(), + * event_get_fd(), event_get_base(), event_get_events(), + * event_get_callback(), event_get_callback_arg(), + * event_priority_set() + */ +struct event +#ifdef EVENT_IN_DOXYGEN_ +{/*Empty body so that doxygen will generate documentation here.*/} +#endif +; + +/** + * Configuration for an event_base. + * + * There are many options that can be used to alter the behavior and + * implementation of an event_base. To avoid having to pass them all in a + * complex many-argument constructor, we provide an abstract data type + * wrhere you set up configation information before passing it to + * event_base_new_with_config(). + * + * @see event_config_new(), event_config_free(), event_base_new_with_config(), + * event_config_avoid_method(), event_config_require_features(), + * event_config_set_flag(), event_config_set_num_cpus_hint() + */ +struct event_config +#ifdef EVENT_IN_DOXYGEN_ +{/*Empty body so that doxygen will generate documentation here.*/} +#endif +; + +/** + * Enable some relatively expensive debugging checks in Libevent that + * would normally be turned off. Generally, these checks cause code that + * would otherwise crash mysteriously to fail earlier with an assertion + * failure. Note that this method MUST be called before any events or + * event_bases have been created. + * + * Debug mode can currently catch the following errors: + * An event is re-assigned while it is added + * Any function is called on a non-assigned event + * + * Note that debugging mode uses memory to track every event that has been + * initialized (via event_assign, event_set, or event_new) but not yet + * released (via event_free or event_debug_unassign). If you want to use + * debug mode, and you find yourself running out of memory, you will need + * to use event_debug_unassign to explicitly stop tracking events that + * are no longer considered set-up. + * + * @see event_debug_unassign() + */ +EVENT2_EXPORT_SYMBOL +void event_enable_debug_mode(void); + +/** + * When debugging mode is enabled, informs Libevent that an event should no + * longer be considered as assigned. When debugging mode is not enabled, does + * nothing. + * + * This function must only be called on a non-added event. + * + * @see event_enable_debug_mode() + */ +EVENT2_EXPORT_SYMBOL +void event_debug_unassign(struct event *); + +/** + * Create and return a new event_base to use with the rest of Libevent. + * + * @return a new event_base on success, or NULL on failure. + * + * @see event_base_free(), event_base_new_with_config() + */ +EVENT2_EXPORT_SYMBOL +struct event_base *event_base_new(void); + +/** + Reinitialize the event base after a fork + + Some event mechanisms do not survive across fork. The event base needs + to be reinitialized with the event_reinit() function. + + @param base the event base that needs to be re-initialized + @return 0 if successful, or -1 if some events could not be re-added. + @see event_base_new() +*/ +EVENT2_EXPORT_SYMBOL +int event_reinit(struct event_base *base); + +/** + Event dispatching loop + + This loop will run the event base until either there are no more pending or + active, or until something calls event_base_loopbreak() or + event_base_loopexit(). + + @param base the event_base structure returned by event_base_new() or + event_base_new_with_config() + @return 0 if successful, -1 if an error occurred, or 1 if we exited because + no events were pending or active. + @see event_base_loop() + */ +EVENT2_EXPORT_SYMBOL +int event_base_dispatch(struct event_base *); + +/** + Get the kernel event notification mechanism used by Libevent. + + @param eb the event_base structure returned by event_base_new() + @return a string identifying the kernel event mechanism (kqueue, epoll, etc.) + */ +EVENT2_EXPORT_SYMBOL +const char *event_base_get_method(const struct event_base *); + +/** + Gets all event notification mechanisms supported by Libevent. + + This functions returns the event mechanism in order preferred by + Libevent. Note that this list will include all backends that + Libevent has compiled-in support for, and will not necessarily check + your OS to see whether it has the required resources. + + @return an array with pointers to the names of support methods. + The end of the array is indicated by a NULL pointer. If an + error is encountered NULL is returned. +*/ +EVENT2_EXPORT_SYMBOL +const char **event_get_supported_methods(void); + +/** Query the current monotonic time from a the timer for a struct + * event_base. + */ +EVENT2_EXPORT_SYMBOL +int event_gettime_monotonic(struct event_base *base, struct timeval *tp); + +/** + @name event type flag + + Flags to pass to event_base_get_num_events() to specify the kinds of events + we want to aggregate counts for +*/ +/**@{*/ +/** count the number of active events, which have been triggered.*/ +#define EVENT_BASE_COUNT_ACTIVE 1U +/** count the number of virtual events, which is used to represent an internal + * condition, other than a pending event, that keeps the loop from exiting. */ +#define EVENT_BASE_COUNT_VIRTUAL 2U +/** count the number of events which have been added to event base, including + * internal events. */ +#define EVENT_BASE_COUNT_ADDED 4U +/**@}*/ + +/** + Gets the number of events in event_base, as specified in the flags. + + Since event base has some internal events added to make some of its + functionalities work, EVENT_BASE_COUNT_ADDED may return more than the + number of events you added using event_add(). + + If you pass EVENT_BASE_COUNT_ACTIVE and EVENT_BASE_COUNT_ADDED together, an + active event will be counted twice. However, this might not be the case in + future libevent versions. The return value is an indication of the work + load, but the user shouldn't rely on the exact value as this may change in + the future. + + @param eb the event_base structure returned by event_base_new() + @param flags a bitwise combination of the kinds of events to aggregate + counts for + @return the number of events specified in the flags +*/ +EVENT2_EXPORT_SYMBOL +int event_base_get_num_events(struct event_base *, unsigned int); + +/** + Get the maximum number of events in a given event_base as specified in the + flags. + + @param eb the event_base structure returned by event_base_new() + @param flags a bitwise combination of the kinds of events to aggregate + counts for + @param clear option used to reset the maximum count. + @return the number of events specified in the flags + */ +EVENT2_EXPORT_SYMBOL +int event_base_get_max_events(struct event_base *, unsigned int, int); + +/** + Allocates a new event configuration object. + + The event configuration object can be used to change the behavior of + an event base. + + @return an event_config object that can be used to store configuration, or + NULL if an error is encountered. + @see event_base_new_with_config(), event_config_free(), event_config +*/ +EVENT2_EXPORT_SYMBOL +struct event_config *event_config_new(void); + +/** + Deallocates all memory associated with an event configuration object + + @param cfg the event configuration object to be freed. +*/ +EVENT2_EXPORT_SYMBOL +void event_config_free(struct event_config *cfg); + +/** + Enters an event method that should be avoided into the configuration. + + This can be used to avoid event mechanisms that do not support certain + file descriptor types, or for debugging to avoid certain event + mechanisms. An application can make use of multiple event bases to + accommodate incompatible file descriptor types. + + @param cfg the event configuration object + @param method the name of the event method to avoid + @return 0 on success, -1 on failure. +*/ +EVENT2_EXPORT_SYMBOL +int event_config_avoid_method(struct event_config *cfg, const char *method); + +/** + A flag used to describe which features an event_base (must) provide. + + Because of OS limitations, not every Libevent backend supports every + possible feature. You can use this type with + event_config_require_features() to tell Libevent to only proceed if your + event_base implements a given feature, and you can receive this type from + event_base_get_features() to see which features are available. +*/ +enum event_method_feature { + /** Require an event method that allows edge-triggered events with EV_ET. */ + EV_FEATURE_ET = 0x01, + /** Require an event method where having one event triggered among + * many is [approximately] an O(1) operation. This excludes (for + * example) select and poll, which are approximately O(N) for N + * equal to the total number of possible events. */ + EV_FEATURE_O1 = 0x02, + /** Require an event method that allows file descriptors as well as + * sockets. */ + EV_FEATURE_FDS = 0x04, + /** Require an event method that allows you to use EV_CLOSED to detect + * connection close without the necessity of reading all the pending data. + * + * Methods that do support EV_CLOSED may not be able to provide support on + * all kernel versions. + **/ + EV_FEATURE_EARLY_CLOSE = 0x08 +}; + +/** + A flag passed to event_config_set_flag(). + + These flags change the behavior of an allocated event_base. + + @see event_config_set_flag(), event_base_new_with_config(), + event_method_feature + */ +enum event_base_config_flag { + /** Do not allocate a lock for the event base, even if we have + locking set up. + + Setting this option will make it unsafe and nonfunctional to call + functions on the base concurrently from multiple threads. + */ + EVENT_BASE_FLAG_NOLOCK = 0x01, + /** Do not check the EVENT_* environment variables when configuring + an event_base */ + EVENT_BASE_FLAG_IGNORE_ENV = 0x02, + /** Windows only: enable the IOCP dispatcher at startup + + If this flag is set then bufferevent_socket_new() and + evconn_listener_new() will use IOCP-backed implementations + instead of the usual select-based one on Windows. + */ + EVENT_BASE_FLAG_STARTUP_IOCP = 0x04, + /** Instead of checking the current time every time the event loop is + ready to run timeout callbacks, check after each timeout callback. + */ + EVENT_BASE_FLAG_NO_CACHE_TIME = 0x08, + + /** If we are using the epoll backend, this flag says that it is + safe to use Libevent's internal change-list code to batch up + adds and deletes in order to try to do as few syscalls as + possible. Setting this flag can make your code run faster, but + it may trigger a Linux bug: it is not safe to use this flag + if you have any fds cloned by dup() or its variants. Doing so + will produce strange and hard-to-diagnose bugs. + + This flag can also be activated by setting the + EVENT_EPOLL_USE_CHANGELIST environment variable. + + This flag has no effect if you wind up using a backend other than + epoll. + */ + EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST = 0x10, + + /** Ordinarily, Libevent implements its time and timeout code using + the fastest monotonic timer that we have. If this flag is set, + however, we use less efficient more precise timer, assuming one is + present. + */ + EVENT_BASE_FLAG_PRECISE_TIMER = 0x20 +}; + +/** + Return a bitmask of the features implemented by an event base. This + will be a bitwise OR of one or more of the values of + event_method_feature + + @see event_method_feature + */ +EVENT2_EXPORT_SYMBOL +int event_base_get_features(const struct event_base *base); + +/** + Enters a required event method feature that the application demands. + + Note that not every feature or combination of features is supported + on every platform. Code that requests features should be prepared + to handle the case where event_base_new_with_config() returns NULL, as in: +
+     event_config_require_features(cfg, EV_FEATURE_ET);
+     base = event_base_new_with_config(cfg);
+     if (base == NULL) {
+       // We can't get edge-triggered behavior here.
+       event_config_require_features(cfg, 0);
+       base = event_base_new_with_config(cfg);
+     }
+   
+ + @param cfg the event configuration object + @param feature a bitfield of one or more event_method_feature values. + Replaces values from previous calls to this function. + @return 0 on success, -1 on failure. + @see event_method_feature, event_base_new_with_config() +*/ +EVENT2_EXPORT_SYMBOL +int event_config_require_features(struct event_config *cfg, int feature); + +/** + * Sets one or more flags to configure what parts of the eventual event_base + * will be initialized, and how they'll work. + * + * @see event_base_config_flags, event_base_new_with_config() + **/ +EVENT2_EXPORT_SYMBOL +int event_config_set_flag(struct event_config *cfg, int flag); + +/** + * Records a hint for the number of CPUs in the system. This is used for + * tuning thread pools, etc, for optimal performance. In Libevent 2.0, + * it is only on Windows, and only when IOCP is in use. + * + * @param cfg the event configuration object + * @param cpus the number of cpus + * @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int event_config_set_num_cpus_hint(struct event_config *cfg, int cpus); + +/** + * Record an interval and/or a number of callbacks after which the event base + * should check for new events. By default, the event base will run as many + * events are as activated at the higest activated priority before checking + * for new events. If you configure it by setting max_interval, it will check + * the time after each callback, and not allow more than max_interval to + * elapse before checking for new events. If you configure it by setting + * max_callbacks to a value >= 0, it will run no more than max_callbacks + * callbacks before checking for new events. + * + * This option can decrease the latency of high-priority events, and + * avoid priority inversions where multiple low-priority events keep us from + * polling for high-priority events, but at the expense of slightly decreasing + * the throughput. Use it with caution! + * + * @param cfg The event_base configuration object. + * @param max_interval An interval after which Libevent should stop running + * callbacks and check for more events, or NULL if there should be + * no such interval. + * @param max_callbacks A number of callbacks after which Libevent should + * stop running callbacks and check for more events, or -1 if there + * should be no such limit. + * @param min_priority A priority below which max_interval and max_callbacks + * should not be enforced. If this is set to 0, they are enforced + * for events of every priority; if it's set to 1, they're enforced + * for events of priority 1 and above, and so on. + * @return 0 on success, -1 on failure. + **/ +EVENT2_EXPORT_SYMBOL +int event_config_set_max_dispatch_interval(struct event_config *cfg, + const struct timeval *max_interval, int max_callbacks, + int min_priority); + +/** + Initialize the event API. + + Use event_base_new_with_config() to initialize a new event base, taking + the specified configuration under consideration. The configuration object + can currently be used to avoid certain event notification mechanisms. + + @param cfg the event configuration object + @return an initialized event_base that can be used to registering events, + or NULL if no event base can be created with the requested event_config. + @see event_base_new(), event_base_free(), event_init(), event_assign() +*/ +EVENT2_EXPORT_SYMBOL +struct event_base *event_base_new_with_config(const struct event_config *); + +/** + Deallocate all memory associated with an event_base, and free the base. + + Note that this function will not close any fds or free any memory passed + to event_new as the argument to callback. + + If there are any pending finalizer callbacks, this function will invoke + them. + + @param eb an event_base to be freed + */ +EVENT2_EXPORT_SYMBOL +void event_base_free(struct event_base *); + +/** + As event_free, but do not run finalizers. + + THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES + BECOMES STABLE. + */ +EVENT2_EXPORT_SYMBOL +void event_base_free_nofinalize(struct event_base *); + +/** @name Log severities + */ +/**@{*/ +#define EVENT_LOG_DEBUG 0 +#define EVENT_LOG_MSG 1 +#define EVENT_LOG_WARN 2 +#define EVENT_LOG_ERR 3 +/**@}*/ + +/* Obsolete names: these are deprecated, but older programs might use them. + * They violate the reserved-identifier namespace. */ +#define _EVENT_LOG_DEBUG EVENT_LOG_DEBUG +#define _EVENT_LOG_MSG EVENT_LOG_MSG +#define _EVENT_LOG_WARN EVENT_LOG_WARN +#define _EVENT_LOG_ERR EVENT_LOG_ERR + +/** + A callback function used to intercept Libevent's log messages. + + @see event_set_log_callback + */ +typedef void (*event_log_cb)(int severity, const char *msg); +/** + Redirect Libevent's log messages. + + @param cb a function taking two arguments: an integer severity between + EVENT_LOG_DEBUG and EVENT_LOG_ERR, and a string. If cb is NULL, + then the default log is used. + + NOTE: The function you provide *must not* call any other libevent + functionality. Doing so can produce undefined behavior. + */ +EVENT2_EXPORT_SYMBOL +void event_set_log_callback(event_log_cb cb); + +/** + A function to be called if Libevent encounters a fatal internal error. + + @see event_set_fatal_callback + */ +typedef void (*event_fatal_cb)(int err); + +/** + Override Libevent's behavior in the event of a fatal internal error. + + By default, Libevent will call exit(1) if a programming error makes it + impossible to continue correct operation. This function allows you to supply + another callback instead. Note that if the function is ever invoked, + something is wrong with your program, or with Libevent: any subsequent calls + to Libevent may result in undefined behavior. + + Libevent will (almost) always log an EVENT_LOG_ERR message before calling + this function; look at the last log message to see why Libevent has died. + */ +EVENT2_EXPORT_SYMBOL +void event_set_fatal_callback(event_fatal_cb cb); + +#define EVENT_DBG_ALL 0xffffffffu +#define EVENT_DBG_NONE 0 + +/** + Turn on debugging logs and have them sent to the default log handler. + + This is a global setting; if you are going to call it, you must call this + before any calls that create an event-base. You must call it before any + multithreaded use of Libevent. + + Debug logs are verbose. + + @param which Controls which debug messages are turned on. This option is + unused for now; for forward compatibility, you must pass in the constant + "EVENT_DBG_ALL" to turn debugging logs on, or "EVENT_DBG_NONE" to turn + debugging logs off. + */ +EVENT2_EXPORT_SYMBOL +void event_enable_debug_logging(ev_uint32_t which); + +/** + Associate a different event base with an event. + + The event to be associated must not be currently active or pending. + + @param eb the event base + @param ev the event + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int event_base_set(struct event_base *, struct event *); + +/** @name Loop flags + + These flags control the behavior of event_base_loop(). + */ +/**@{*/ +/** Block until we have an active event, then exit once all active events + * have had their callbacks run. */ +#define EVLOOP_ONCE 0x01 +/** Do not block: see which events are ready now, run the callbacks + * of the highest-priority ones, then exit. */ +#define EVLOOP_NONBLOCK 0x02 +/** Do not exit the loop because we have no pending events. Instead, keep + * running until event_base_loopexit() or event_base_loopbreak() makes us + * stop. + */ +#define EVLOOP_NO_EXIT_ON_EMPTY 0x04 +/**@}*/ + +/** + Wait for events to become active, and run their callbacks. + + This is a more flexible version of event_base_dispatch(). + + By default, this loop will run the event base until either there are no more + pending or active events, or until something calls event_base_loopbreak() or + event_base_loopexit(). You can override this behavior with the 'flags' + argument. + + @param eb the event_base structure returned by event_base_new() or + event_base_new_with_config() + @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK + @return 0 if successful, -1 if an error occurred, or 1 if we exited because + no events were pending or active. + @see event_base_loopexit(), event_base_dispatch(), EVLOOP_ONCE, + EVLOOP_NONBLOCK + */ +EVENT2_EXPORT_SYMBOL +int event_base_loop(struct event_base *, int); + +/** + Exit the event loop after the specified time + + The next event_base_loop() iteration after the given timer expires will + complete normally (handling all queued events) then exit without + blocking for events again. + + Subsequent invocations of event_base_loop() will proceed normally. + + @param eb the event_base structure returned by event_init() + @param tv the amount of time after which the loop should terminate, + or NULL to exit after running all currently active events. + @return 0 if successful, or -1 if an error occurred + @see event_base_loopbreak() + */ +EVENT2_EXPORT_SYMBOL +int event_base_loopexit(struct event_base *, const struct timeval *); + +/** + Abort the active event_base_loop() immediately. + + event_base_loop() will abort the loop after the next event is completed; + event_base_loopbreak() is typically invoked from this event's callback. + This behavior is analogous to the "break;" statement. + + Subsequent invocations of event_base_loop() will proceed normally. + + @param eb the event_base structure returned by event_init() + @return 0 if successful, or -1 if an error occurred + @see event_base_loopexit() + */ +EVENT2_EXPORT_SYMBOL +int event_base_loopbreak(struct event_base *); + +/** + Tell the active event_base_loop() to scan for new events immediately. + + Calling this function makes the currently active event_base_loop() + start the loop over again (scanning for new events) after the current + event callback finishes. If the event loop is not running, this + function has no effect. + + event_base_loopbreak() is typically invoked from this event's callback. + This behavior is analogous to the "continue;" statement. + + Subsequent invocations of event loop will proceed normally. + + @param eb the event_base structure returned by event_init() + @return 0 if successful, or -1 if an error occurred + @see event_base_loopbreak() + */ +EVENT2_EXPORT_SYMBOL +int event_base_loopcontinue(struct event_base *); + +/** + Checks if the event loop was told to exit by event_base_loopexit(). + + This function will return true for an event_base at every point after + event_loopexit() is called, until the event loop is next entered. + + @param eb the event_base structure returned by event_init() + @return true if event_base_loopexit() was called on this event base, + or 0 otherwise + @see event_base_loopexit() + @see event_base_got_break() + */ +EVENT2_EXPORT_SYMBOL +int event_base_got_exit(struct event_base *); + +/** + Checks if the event loop was told to abort immediately by event_base_loopbreak(). + + This function will return true for an event_base at every point after + event_base_loopbreak() is called, until the event loop is next entered. + + @param eb the event_base structure returned by event_init() + @return true if event_base_loopbreak() was called on this event base, + or 0 otherwise + @see event_base_loopbreak() + @see event_base_got_exit() + */ +EVENT2_EXPORT_SYMBOL +int event_base_got_break(struct event_base *); + +/** + * @name event flags + * + * Flags to pass to event_new(), event_assign(), event_pending(), and + * anything else with an argument of the form "short events" + */ +/**@{*/ +/** Indicates that a timeout has occurred. It's not necessary to pass + * this flag to event_for new()/event_assign() to get a timeout. */ +#define EV_TIMEOUT 0x01 +/** Wait for a socket or FD to become readable */ +#define EV_READ 0x02 +/** Wait for a socket or FD to become writeable */ +#define EV_WRITE 0x04 +/** Wait for a POSIX signal to be raised*/ +#define EV_SIGNAL 0x08 +/** + * Persistent event: won't get removed automatically when activated. + * + * When a persistent event with a timeout becomes activated, its timeout + * is reset to 0. + */ +#define EV_PERSIST 0x10 +/** Select edge-triggered behavior, if supported by the backend. */ +#define EV_ET 0x20 +/** + * If this option is provided, then event_del() will not block in one thread + * while waiting for the event callback to complete in another thread. + * + * To use this option safely, you may need to use event_finalize() or + * event_free_finalize() in order to safely tear down an event in a + * multithreaded application. See those functions for more information. + * + * THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES + * BECOMES STABLE. + **/ +#define EV_FINALIZE 0x40 +/** + * Detects connection close events. You can use this to detect when a + * connection has been closed, without having to read all the pending data + * from a connection. + * + * Not all backends support EV_CLOSED. To detect or require it, use the + * feature flag EV_FEATURE_EARLY_CLOSE. + **/ +#define EV_CLOSED 0x80 +/**@}*/ + +/** + @name evtimer_* macros + + Aliases for working with one-shot timer events */ +/**@{*/ +#define evtimer_assign(ev, b, cb, arg) \ + event_assign((ev), (b), -1, 0, (cb), (arg)) +#define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg)) +#define evtimer_add(ev, tv) event_add((ev), (tv)) +#define evtimer_del(ev) event_del(ev) +#define evtimer_pending(ev, tv) event_pending((ev), EV_TIMEOUT, (tv)) +#define evtimer_initialized(ev) event_initialized(ev) +/**@}*/ + +/** + @name evsignal_* macros + + Aliases for working with signal events + */ +/**@{*/ +#define evsignal_add(ev, tv) event_add((ev), (tv)) +#define evsignal_assign(ev, b, x, cb, arg) \ + event_assign((ev), (b), (x), EV_SIGNAL|EV_PERSIST, cb, (arg)) +#define evsignal_new(b, x, cb, arg) \ + event_new((b), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) +#define evsignal_del(ev) event_del(ev) +#define evsignal_pending(ev, tv) event_pending((ev), EV_SIGNAL, (tv)) +#define evsignal_initialized(ev) event_initialized(ev) +/**@}*/ + +/** + A callback function for an event. + + It receives three arguments: + + @param fd An fd or signal + @param events One or more EV_* flags + @param arg A user-supplied argument. + + @see event_new() + */ +typedef void (*event_callback_fn)(evutil_socket_t, short, void *); + +/** + Return a value used to specify that the event itself must be used as the callback argument. + + The function event_new() takes a callback argument which is passed + to the event's callback function. To specify that the argument to be + passed to the callback function is the event that event_new() returns, + pass in the return value of event_self_cbarg() as the callback argument + for event_new(). + + For example: +
+      struct event *ev = event_new(base, sock, events, callback, %event_self_cbarg());
+  
+ + For consistency with event_new(), it is possible to pass the return value + of this function as the callback argument for event_assign() – this + achieves the same result as passing the event in directly. + + @return a value to be passed as the callback argument to event_new() or + event_assign(). + @see event_new(), event_assign() + */ +EVENT2_EXPORT_SYMBOL +void *event_self_cbarg(void); + +/** + Allocate and asssign a new event structure, ready to be added. + + The function event_new() returns a new event that can be used in + future calls to event_add() and event_del(). The fd and events + arguments determine which conditions will trigger the event; the + callback and callback_arg arguments tell Libevent what to do when the + event becomes active. + + If events contains one of EV_READ, EV_WRITE, or EV_READ|EV_WRITE, then + fd is a file descriptor or socket that should get monitored for + readiness to read, readiness to write, or readiness for either operation + (respectively). If events contains EV_SIGNAL, then fd is a signal + number to wait for. If events contains none of those flags, then the + event can be triggered only by a timeout or by manual activation with + event_active(): In this case, fd must be -1. + + The EV_PERSIST flag can also be passed in the events argument: it makes + event_add() persistent until event_del() is called. + + The EV_ET flag is compatible with EV_READ and EV_WRITE, and supported + only by certain backends. It tells Libevent to use edge-triggered + events. + + The EV_TIMEOUT flag has no effect here. + + It is okay to have multiple events all listening on the same fds; but + they must either all be edge-triggered, or all not be edge triggerd. + + When the event becomes active, the event loop will run the provided + callbuck function, with three arguments. The first will be the provided + fd value. The second will be a bitfield of the events that triggered: + EV_READ, EV_WRITE, or EV_SIGNAL. Here the EV_TIMEOUT flag indicates + that a timeout occurred, and EV_ET indicates that an edge-triggered + event occurred. The third event will be the callback_arg pointer that + you provide. + + @param base the event base to which the event should be attached. + @param fd the file descriptor or signal to be monitored, or -1. + @param events desired events to monitor: bitfield of EV_READ, EV_WRITE, + EV_SIGNAL, EV_PERSIST, EV_ET. + @param callback callback function to be invoked when the event occurs + @param callback_arg an argument to be passed to the callback function + + @return a newly allocated struct event that must later be freed with + event_free(). + @see event_free(), event_add(), event_del(), event_assign() + */ +EVENT2_EXPORT_SYMBOL +struct event *event_new(struct event_base *, evutil_socket_t, short, event_callback_fn, void *); + + +/** + Prepare a new, already-allocated event structure to be added. + + The function event_assign() prepares the event structure ev to be used + in future calls to event_add() and event_del(). Unlike event_new(), it + doesn't allocate memory itself: it requires that you have already + allocated a struct event, probably on the heap. Doing this will + typically make your code depend on the size of the event structure, and + thereby create incompatibility with future versions of Libevent. + + The easiest way to avoid this problem is just to use event_new() and + event_free() instead. + + A slightly harder way to future-proof your code is to use + event_get_struct_event_size() to determine the required size of an event + at runtime. + + Note that it is NOT safe to call this function on an event that is + active or pending. Doing so WILL corrupt internal data structures in + Libevent, and lead to strange, hard-to-diagnose bugs. You _can_ use + event_assign to change an existing event, but only if it is not active + or pending! + + The arguments for this function, and the behavior of the events that it + makes, are as for event_new(). + + @param ev an event struct to be modified + @param base the event base to which ev should be attached. + @param fd the file descriptor to be monitored + @param events desired events to monitor; can be EV_READ and/or EV_WRITE + @param callback callback function to be invoked when the event occurs + @param callback_arg an argument to be passed to the callback function + + @return 0 if success, or -1 on invalid arguments. + + @see event_new(), event_add(), event_del(), event_base_once(), + event_get_struct_event_size() + */ +EVENT2_EXPORT_SYMBOL +int event_assign(struct event *, struct event_base *, evutil_socket_t, short, event_callback_fn, void *); + +/** + Deallocate a struct event * returned by event_new(). + + If the event is pending or active, first make it non-pending and + non-active. + */ +EVENT2_EXPORT_SYMBOL +void event_free(struct event *); + +/** + * Callback type for event_finalize and event_free_finalize(). + * + * THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES + * BECOMES STABLE. + * + **/ +typedef void (*event_finalize_callback_fn)(struct event *, void *); +/** + @name Finalization functions + + These functions are used to safely tear down an event in a multithreaded + application. If you construct your events with EV_FINALIZE to avoid + deadlocks, you will need a way to remove an event in the certainty that + it will definitely not be running its callback when you deallocate it + and its callback argument. + + To do this, call one of event_finalize() or event_free_finalize with + 0 for its first argument, the event to tear down as its second argument, + and a callback function as its third argument. The callback will be + invoked as part of the event loop, with the event's priority. + + After you call a finalizer function, event_add() and event_active() will + no longer work on the event, and event_del() will produce a no-op. You + must not try to change the event's fields with event_assign() or + event_set() while the finalize callback is in progress. Once the + callback has been invoked, you should treat the event structure as + containing uninitialized memory. + + The event_free_finalize() function frees the event after it's finalized; + event_finalize() does not. + + A finalizer callback must not make events pending or active. It must not + add events, activate events, or attempt to "resucitate" the event being + finalized in any way. + + THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES + BECOMES STABLE. + + @return 0 on succes, -1 on failure. + */ +/**@{*/ +EVENT2_EXPORT_SYMBOL +int event_finalize(unsigned, struct event *, event_finalize_callback_fn); +EVENT2_EXPORT_SYMBOL +int event_free_finalize(unsigned, struct event *, event_finalize_callback_fn); +/**@}*/ + +/** + Schedule a one-time event + + The function event_base_once() is similar to event_new(). However, it + schedules a callback to be called exactly once, and does not require the + caller to prepare an event structure. + + Note that in Libevent 2.0 and earlier, if the event is never triggered, the + internal memory used to hold it will never be freed. In Libevent 2.1, + the internal memory will get freed by event_base_free() if the event + is never triggered. The 'arg' value, however, will not get freed in either + case--you'll need to free that on your own if you want it to go away. + + @param base an event_base + @param fd a file descriptor to monitor, or -1 for no fd. + @param events event(s) to monitor; can be any of EV_READ | + EV_WRITE, or EV_TIMEOUT + @param callback callback function to be invoked when the event occurs + @param arg an argument to be passed to the callback function + @param timeout the maximum amount of time to wait for the event. NULL + makes an EV_READ/EV_WRITE event make forever; NULL makes an + EV_TIMEOUT event succees immediately. + @return 0 if successful, or -1 if an error occurred + */ +EVENT2_EXPORT_SYMBOL +int event_base_once(struct event_base *, evutil_socket_t, short, event_callback_fn, void *, const struct timeval *); + +/** + Add an event to the set of pending events. + + The function event_add() schedules the execution of the event 'ev' when the + condition specified by event_assign() or event_new() occurs, or when the time + specified in timeout has elapesed. If atimeout is NULL, no timeout + occurs and the function will only be + called if a matching event occurs. The event in the + ev argument must be already initialized by event_assign() or event_new() + and may not be used + in calls to event_assign() until it is no longer pending. + + If the event in the ev argument already has a scheduled timeout, calling + event_add() replaces the old timeout with the new one if tv is non-NULL. + + @param ev an event struct initialized via event_assign() or event_new() + @param timeout the maximum amount of time to wait for the event, or NULL + to wait forever + @return 0 if successful, or -1 if an error occurred + @see event_del(), event_assign(), event_new() + */ +EVENT2_EXPORT_SYMBOL +int event_add(struct event *ev, const struct timeval *timeout); + +/** + Remove a timer from a pending event without removing the event itself. + + If the event has a scheduled timeout, this function unschedules it but + leaves the event otherwise pending. + + @param ev an event struct initialized via event_assign() or event_new() + @return 0 on success, or -1 if an error occurrect. +*/ +EVENT2_EXPORT_SYMBOL +int event_remove_timer(struct event *ev); + +/** + Remove an event from the set of monitored events. + + The function event_del() will cancel the event in the argument ev. If the + event has already executed or has never been added the call will have no + effect. + + @param ev an event struct to be removed from the working set + @return 0 if successful, or -1 if an error occurred + @see event_add() + */ +EVENT2_EXPORT_SYMBOL +int event_del(struct event *); + +/** + As event_del(), but never blocks while the event's callback is running + in another thread, even if the event was constructed without the + EV_FINALIZE flag. + + THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES + BECOMES STABLE. + */ +EVENT2_EXPORT_SYMBOL +int event_del_noblock(struct event *ev); +/** + As event_del(), but always blocks while the event's callback is running + in another thread, even if the event was constructed with the + EV_FINALIZE flag. + + THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES + BECOMES STABLE. + */ +EVENT2_EXPORT_SYMBOL +int event_del_block(struct event *ev); + +/** + Make an event active. + + You can use this function on a pending or a non-pending event to make it + active, so that its callback will be run by event_base_dispatch() or + event_base_loop(). + + One common use in multithreaded programs is to wake the thread running + event_base_loop() from another thread. + + @param ev an event to make active. + @param res a set of flags to pass to the event's callback. + @param ncalls an obsolete argument: this is ignored. + **/ +EVENT2_EXPORT_SYMBOL +void event_active(struct event *ev, int res, short ncalls); + +/** + Checks if a specific event is pending or scheduled. + + @param ev an event struct previously passed to event_add() + @param events the requested event type; any of EV_TIMEOUT|EV_READ| + EV_WRITE|EV_SIGNAL + @param tv if this field is not NULL, and the event has a timeout, + this field is set to hold the time at which the timeout will + expire. + + @return true if the event is pending on any of the events in 'what', (that + is to say, it has been added), or 0 if the event is not added. + */ +EVENT2_EXPORT_SYMBOL +int event_pending(const struct event *ev, short events, struct timeval *tv); + +/** + If called from within the callback for an event, returns that event. + + The behavior of this function is not defined when called from outside the + callback function for an event. + */ +EVENT2_EXPORT_SYMBOL +struct event *event_base_get_running_event(struct event_base *base); + +/** + Test if an event structure might be initialized. + + The event_initialized() function can be used to check if an event has been + initialized. + + Warning: This function is only useful for distinguishing a a zeroed-out + piece of memory from an initialized event, it can easily be confused by + uninitialized memory. Thus, it should ONLY be used to distinguish an + initialized event from zero. + + @param ev an event structure to be tested + @return 1 if the structure might be initialized, or 0 if it has not been + initialized + */ +EVENT2_EXPORT_SYMBOL +int event_initialized(const struct event *ev); + +/** + Get the signal number assigned to a signal event +*/ +#define event_get_signal(ev) ((int)event_get_fd(ev)) + +/** + Get the socket or signal assigned to an event, or -1 if the event has + no socket. +*/ +EVENT2_EXPORT_SYMBOL +evutil_socket_t event_get_fd(const struct event *ev); + +/** + Get the event_base associated with an event. +*/ +EVENT2_EXPORT_SYMBOL +struct event_base *event_get_base(const struct event *ev); + +/** + Return the events (EV_READ, EV_WRITE, etc) assigned to an event. +*/ +EVENT2_EXPORT_SYMBOL +short event_get_events(const struct event *ev); + +/** + Return the callback assigned to an event. +*/ +EVENT2_EXPORT_SYMBOL +event_callback_fn event_get_callback(const struct event *ev); + +/** + Return the callback argument assigned to an event. +*/ +EVENT2_EXPORT_SYMBOL +void *event_get_callback_arg(const struct event *ev); + +/** + Return the priority of an event. + @see event_priority_init(), event_get_priority() +*/ +EVENT2_EXPORT_SYMBOL +int event_get_priority(const struct event *ev); + +/** + Extract _all_ of arguments given to construct a given event. The + event_base is copied into *base_out, the fd is copied into *fd_out, and so + on. + + If any of the "_out" arguments is NULL, it will be ignored. + */ +EVENT2_EXPORT_SYMBOL +void event_get_assignment(const struct event *event, + struct event_base **base_out, evutil_socket_t *fd_out, short *events_out, + event_callback_fn *callback_out, void **arg_out); + +/** + Return the size of struct event that the Libevent library was compiled + with. + + This will be NO GREATER than sizeof(struct event) if you're running with + the same version of Libevent that your application was built with, but + otherwise might not. + + Note that it might be SMALLER than sizeof(struct event) if some future + version of Libevent adds extra padding to the end of struct event. + We might do this to help ensure ABI-compatibility between different + versions of Libevent. + */ +EVENT2_EXPORT_SYMBOL +size_t event_get_struct_event_size(void); + +/** + Get the Libevent version. + + Note that this will give you the version of the library that you're + currently linked against, not the version of the headers that you've + compiled against. + + @return a string containing the version number of Libevent +*/ +EVENT2_EXPORT_SYMBOL +const char *event_get_version(void); + +/** + Return a numeric representation of Libevent's version. + + Note that this will give you the version of the library that you're + currently linked against, not the version of the headers you've used to + compile. + + The format uses one byte each for the major, minor, and patchlevel parts of + the version number. The low-order byte is unused. For example, version + 2.0.1-alpha has a numeric representation of 0x02000100 +*/ +EVENT2_EXPORT_SYMBOL +ev_uint32_t event_get_version_number(void); + +/** As event_get_version, but gives the version of Libevent's headers. */ +#define LIBEVENT_VERSION EVENT__VERSION +/** As event_get_version_number, but gives the version number of Libevent's + * headers. */ +#define LIBEVENT_VERSION_NUMBER EVENT__NUMERIC_VERSION + +/** Largest number of priorities that Libevent can support. */ +#define EVENT_MAX_PRIORITIES 256 +/** + Set the number of different event priorities + + By default Libevent schedules all active events with the same priority. + However, some time it is desirable to process some events with a higher + priority than others. For that reason, Libevent supports strict priority + queues. Active events with a lower priority are always processed before + events with a higher priority. + + The number of different priorities can be set initially with the + event_base_priority_init() function. This function should be called + before the first call to event_base_dispatch(). The + event_priority_set() function can be used to assign a priority to an + event. By default, Libevent assigns the middle priority to all events + unless their priority is explicitly set. + + Note that urgent-priority events can starve less-urgent events: after + running all urgent-priority callbacks, Libevent checks for more urgent + events again, before running less-urgent events. Less-urgent events + will not have their callbacks run until there are no events more urgent + than them that want to be active. + + @param eb the event_base structure returned by event_base_new() + @param npriorities the maximum number of priorities + @return 0 if successful, or -1 if an error occurred + @see event_priority_set() + */ +EVENT2_EXPORT_SYMBOL +int event_base_priority_init(struct event_base *, int); + +/** + Get the number of different event priorities. + + @param eb the event_base structure returned by event_base_new() + @return Number of different event priorities + @see event_base_priority_init() +*/ +EVENT2_EXPORT_SYMBOL +int event_base_get_npriorities(struct event_base *eb); + +/** + Assign a priority to an event. + + @param ev an event struct + @param priority the new priority to be assigned + @return 0 if successful, or -1 if an error occurred + @see event_priority_init(), event_get_priority() + */ +EVENT2_EXPORT_SYMBOL +int event_priority_set(struct event *, int); + +/** + Prepare an event_base to use a large number of timeouts with the same + duration. + + Libevent's default scheduling algorithm is optimized for having a large + number of timeouts with their durations more or less randomly + distributed. But if you have a large number of timeouts that all have + the same duration (for example, if you have a large number of + connections that all have a 10-second timeout), then you can improve + Libevent's performance by telling Libevent about it. + + To do this, call this function with the common duration. It will return a + pointer to a different, opaque timeout value. (Don't depend on its actual + contents!) When you use this timeout value in event_add(), Libevent will + schedule the event more efficiently. + + (This optimization probably will not be worthwhile until you have thousands + or tens of thousands of events with the same timeout.) + */ +EVENT2_EXPORT_SYMBOL +const struct timeval *event_base_init_common_timeout(struct event_base *base, + const struct timeval *duration); + +#if !defined(EVENT__DISABLE_MM_REPLACEMENT) || defined(EVENT_IN_DOXYGEN_) +/** + Override the functions that Libevent uses for memory management. + + Usually, Libevent uses the standard libc functions malloc, realloc, and + free to allocate memory. Passing replacements for those functions to + event_set_mem_functions() overrides this behavior. + + Note that all memory returned from Libevent will be allocated by the + replacement functions rather than by malloc() and realloc(). Thus, if you + have replaced those functions, it will not be appropriate to free() memory + that you get from Libevent. Instead, you must use the free_fn replacement + that you provided. + + Note also that if you are going to call this function, you should do so + before any call to any Libevent function that does allocation. + Otherwise, those funtions will allocate their memory using malloc(), but + then later free it using your provided free_fn. + + @param malloc_fn A replacement for malloc. + @param realloc_fn A replacement for realloc + @param free_fn A replacement for free. + **/ +EVENT2_EXPORT_SYMBOL +void event_set_mem_functions( + void *(*malloc_fn)(size_t sz), + void *(*realloc_fn)(void *ptr, size_t sz), + void (*free_fn)(void *ptr)); +/** This definition is present if Libevent was built with support for + event_set_mem_functions() */ +#define EVENT_SET_MEM_FUNCTIONS_IMPLEMENTED +#endif + +/** + Writes a human-readable description of all inserted and/or active + events to a provided stdio stream. + + This is intended for debugging; its format is not guaranteed to be the same + between libevent versions. + + @param base An event_base on which to scan the events. + @param output A stdio file to write on. + */ +EVENT2_EXPORT_SYMBOL +void event_base_dump_events(struct event_base *, FILE *); + + +/** + Activates all pending events for the given fd and event mask. + + This function activates pending events only. Events which have not been + added will not become active. + + @param base the event_base on which to activate the events. + @param fd An fd to active events on. + @param events One or more of EV_{READ,WRITE}. + */ +EVENT2_EXPORT_SYMBOL +void event_base_active_by_fd(struct event_base *base, evutil_socket_t fd, short events); + +/** + Activates all pending signals with a given signal number + + This function activates pending events only. Events which have not been + added will not become active. + + @param base the event_base on which to activate the events. + @param fd The signal to active events on. + */ +EVENT2_EXPORT_SYMBOL +void event_base_active_by_signal(struct event_base *base, int sig); + +/** + * Callback for iterating events in an event base via event_base_foreach_event + */ +typedef int (*event_base_foreach_event_cb)(const struct event_base *, const struct event *, void *); + +/** + Iterate over all added or active events events in an event loop, and invoke + a given callback on each one. + + The callback must not call any function that modifies the event base, that + modifies any event in the event base, or that adds or removes any event to + the event base. Doing so is unsupported and will lead to undefined + behavior -- likely, to crashes. + + event_base_foreach_event() holds a lock on the event_base() for the whole + time it's running: slow callbacks are not advisable. + + Note that Libevent adds some events of its own to make pieces of its + functionality work. You must not assume that the only events you'll + encounter will be the ones you added yourself. + + The callback function must return 0 to continue iteration, or some other + integer to stop iterating. + + @param base An event_base on which to scan the events. + @param fn A callback function to receive the events. + @param arg An argument passed to the callback function. + @return 0 if we iterated over every event, or the value returned by the + callback function if the loop exited early. +*/ +EVENT2_EXPORT_SYMBOL +int event_base_foreach_event(struct event_base *base, event_base_foreach_event_cb fn, void *arg); + + +/** Sets 'tv' to the current time (as returned by gettimeofday()), + looking at the cached value in 'base' if possible, and calling + gettimeofday() or clock_gettime() as appropriate if there is no + cached time. + + Generally, this value will only be cached while actually + processing event callbacks, and may be very inaccuate if your + callbacks take a long time to execute. + + Returns 0 on success, negative on failure. + */ +EVENT2_EXPORT_SYMBOL +int event_base_gettimeofday_cached(struct event_base *base, + struct timeval *tv); + +/** Update cached_tv in the 'base' to the current time + * + * You can use this function is useful for selectively increasing + * the accuracy of the cached time value in 'base' during callbacks + * that take a long time to execute. + * + * This function has no effect if the base is currently not in its + * event loop, or if timeval caching is disabled via + * EVENT_BASE_FLAG_NO_CACHE_TIME. + * + * @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int event_base_update_cache_time(struct event_base *base); + +/** Release up all globally-allocated resources allocated by Libevent. + + This function does not free developer-controlled resources like + event_bases, events, bufferevents, listeners, and so on. It only releases + resources like global locks that there is no other way to free. + + It is not actually necessary to call this function before exit: every + resource that it frees would be released anyway on exit. It mainly exists + so that resource-leak debugging tools don't see Libevent as holding + resources at exit. + + You should only call this function when no other Libevent functions will + be invoked -- e.g., when cleanly exiting a program. + */ +EVENT2_EXPORT_SYMBOL +void libevent_global_shutdown(void); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_EVENT_H_INCLUDED_ */ diff --git a/src/components/libevent/event_compat.h b/src/components/libevent/event_compat.h new file mode 100644 index 0000000..7aa36be --- /dev/null +++ b/src/components/libevent/event_compat.h @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_EVENT_COMPAT_H_INCLUDED_ +#define EVENT2_EVENT_COMPAT_H_INCLUDED_ + +/** @file event2/event_compat.h + + Potentially non-threadsafe versions of the functions in event.h: provided + only for backwards compatibility. + + In the oldest versions of Libevent, event_base was not a first-class + structure. Instead, there was a single event base that every function + manipulated. Later, when separate event bases were added, the old functions + that didn't take an event_base argument needed to work by manipulating the + "current" event base. This could lead to thread-safety issues, and obscure, + hard-to-diagnose bugs. + + @deprecated All functions in this file are by definition deprecated. + */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/** + Initialize the event API. + + The event API needs to be initialized with event_init() before it can be + used. Sets the global current base that gets used for events that have no + base associated with them. + + @deprecated This function is deprecated because it replaces the "current" + event_base, and is totally unsafe for multithreaded use. The replacement + is event_base_new(). + + @see event_base_set(), event_base_new() + */ +EVENT2_EXPORT_SYMBOL +struct event_base *event_init(void); + +/** + Loop to process events. + + Like event_base_dispatch(), but uses the "current" base. + + @deprecated This function is deprecated because it is easily confused by + multiple calls to event_init(), and because it is not safe for + multithreaded use. The replacement is event_base_dispatch(). + + @see event_base_dispatch(), event_init() + */ +EVENT2_EXPORT_SYMBOL +int event_dispatch(void); + +/** + Handle events. + + This function behaves like event_base_loop(), but uses the "current" base + + @deprecated This function is deprecated because it uses the event base from + the last call to event_init, and is therefore not safe for multithreaded + use. The replacement is event_base_loop(). + + @see event_base_loop(), event_init() +*/ +EVENT2_EXPORT_SYMBOL +int event_loop(int); + + +/** + Exit the event loop after the specified time. + + This function behaves like event_base_loopexit(), except that it uses the + "current" base. + + @deprecated This function is deprecated because it uses the event base from + the last call to event_init, and is therefore not safe for multithreaded + use. The replacement is event_base_loopexit(). + + @see event_init, event_base_loopexit() + */ +EVENT2_EXPORT_SYMBOL +int event_loopexit(const struct timeval *); + + +/** + Abort the active event_loop() immediately. + + This function behaves like event_base_loopbreakt(), except that it uses the + "current" base. + + @deprecated This function is deprecated because it uses the event base from + the last call to event_init, and is therefore not safe for multithreaded + use. The replacement is event_base_loopbreak(). + + @see event_base_loopbreak(), event_init() + */ +EVENT2_EXPORT_SYMBOL +int event_loopbreak(void); + +/** + Schedule a one-time event to occur. + + @deprecated This function is obsolete, and has been replaced by + event_base_once(). Its use is deprecated because it relies on the + "current" base configured by event_init(). + + @see event_base_once() + */ +EVENT2_EXPORT_SYMBOL +int event_once(evutil_socket_t , short, + void (*)(evutil_socket_t, short, void *), void *, const struct timeval *); + + +/** + Get the kernel event notification mechanism used by Libevent. + + @deprecated This function is obsolete, and has been replaced by + event_base_get_method(). Its use is deprecated because it relies on the + "current" base configured by event_init(). + + @see event_base_get_method() + */ +EVENT2_EXPORT_SYMBOL +const char *event_get_method(void); + + +/** + Set the number of different event priorities. + + @deprecated This function is deprecated because it is easily confused by + multiple calls to event_init(), and because it is not safe for + multithreaded use. The replacement is event_base_priority_init(). + + @see event_base_priority_init() + */ +EVENT2_EXPORT_SYMBOL +int event_priority_init(int); + +/** + Prepare an event structure to be added. + + @deprecated event_set() is not recommended for new code, because it requires + a subsequent call to event_base_set() to be safe under most circumstances. + Use event_assign() or event_new() instead. + */ +EVENT2_EXPORT_SYMBOL +void event_set(struct event *, evutil_socket_t, short, void (*)(evutil_socket_t, short, void *), void *); + +#define evtimer_set(ev, cb, arg) event_set((ev), -1, 0, (cb), (arg)) +#define evsignal_set(ev, x, cb, arg) \ + event_set((ev), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) + + +/** + @name timeout_* macros + + @deprecated These macros are deprecated because their naming is inconsistent + with the rest of Libevent. Use the evtimer_* macros instead. + @{ + */ +#define timeout_add(ev, tv) event_add((ev), (tv)) +#define timeout_set(ev, cb, arg) event_set((ev), -1, 0, (cb), (arg)) +#define timeout_del(ev) event_del(ev) +#define timeout_pending(ev, tv) event_pending((ev), EV_TIMEOUT, (tv)) +#define timeout_initialized(ev) event_initialized(ev) +/**@}*/ + +/** + @name signal_* macros + + @deprecated These macros are deprecated because their naming is inconsistent + with the rest of Libevent. Use the evsignal_* macros instead. + @{ + */ +#define signal_add(ev, tv) event_add((ev), (tv)) +#define signal_set(ev, x, cb, arg) \ + event_set((ev), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) +#define signal_del(ev) event_del(ev) +#define signal_pending(ev, tv) event_pending((ev), EV_SIGNAL, (tv)) +#define signal_initialized(ev) event_initialized(ev) +/**@}*/ + +#ifndef EVENT_FD +/* These macros are obsolete; use event_get_fd and event_get_signal instead. */ +#define EVENT_FD(ev) ((int)event_get_fd(ev)) +#define EVENT_SIGNAL(ev) event_get_signal(ev) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_EVENT_COMPAT_H_INCLUDED_ */ diff --git a/src/components/libevent/event_struct.h b/src/components/libevent/event_struct.h new file mode 100644 index 0000000..3097cc7 --- /dev/null +++ b/src/components/libevent/event_struct.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_EVENT_STRUCT_H_INCLUDED_ +#define EVENT2_EVENT_STRUCT_H_INCLUDED_ + +/** @file event2/event_struct.h + + Structures used by event.h. Using these structures directly WILL harm + forward compatibility: be careful. + + No field declared in this file should be used directly in user code. Except + for historical reasons, these fields would not be exposed at all. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/* For evkeyvalq */ +#include + +#define EVLIST_TIMEOUT 0x01 +#define EVLIST_INSERTED 0x02 +#define EVLIST_SIGNAL 0x04 +#define EVLIST_ACTIVE 0x08 +#define EVLIST_INTERNAL 0x10 +#define EVLIST_ACTIVE_LATER 0x20 +#define EVLIST_FINALIZING 0x40 +#define EVLIST_INIT 0x80 + +#define EVLIST_ALL 0xff + +/* Fix so that people don't have to run with */ +#ifndef TAILQ_ENTRY +#define EVENT_DEFINED_TQENTRY_ +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#endif /* !TAILQ_ENTRY */ + +#ifndef TAILQ_HEAD +#define EVENT_DEFINED_TQHEAD_ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; \ + struct type **tqh_last; \ +} +#endif + +/* Fix so that people don't have to run with */ +#ifndef LIST_ENTRY +#define EVENT_DEFINED_LISTENTRY_ +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} +#endif /* !LIST_ENTRY */ + +#ifndef LIST_HEAD +#define EVENT_DEFINED_LISTHEAD_ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ + } +#endif /* !LIST_HEAD */ + +struct event; + +struct event_callback { + TAILQ_ENTRY(event_callback) evcb_active_next; + short evcb_flags; + ev_uint8_t evcb_pri; /* smaller numbers are higher priority */ + ev_uint8_t evcb_closure; + /* allows us to adopt for different types of events */ + union { + void (*evcb_callback)(evutil_socket_t, short, void *); + void (*evcb_selfcb)(struct event_callback *, void *); + void (*evcb_evfinalize)(struct event *, void *); + void (*evcb_cbfinalize)(struct event_callback *, void *); + } evcb_cb_union; + void *evcb_arg; +}; + +struct event_base; +struct event { + struct event_callback ev_evcallback; + + /* for managing timeouts */ + union { + TAILQ_ENTRY(event) ev_next_with_common_timeout; + int min_heap_idx; + } ev_timeout_pos; + evutil_socket_t ev_fd; + + struct event_base *ev_base; + + union { + /* used for io events */ + struct { + LIST_ENTRY (event) ev_io_next; + struct timeval ev_timeout; + } ev_io; + + /* used by signal events */ + struct { + LIST_ENTRY (event) ev_signal_next; + short ev_ncalls; + /* Allows deletes in callback */ + short *ev_pncalls; + } ev_signal; + } ev_; + + short ev_events; + short ev_res; /* result passed to event callback */ + struct timeval ev_timeout; +}; + +TAILQ_HEAD (event_list, event); + +#ifdef EVENT_DEFINED_TQENTRY_ +#undef TAILQ_ENTRY +#endif + +#ifdef EVENT_DEFINED_TQHEAD_ +#undef TAILQ_HEAD +#endif + +LIST_HEAD (event_dlist, event); + +#ifdef EVENT_DEFINED_LISTENTRY_ +#undef LIST_ENTRY +#endif + +#ifdef EVENT_DEFINED_LISTHEAD_ +#undef LIST_HEAD +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_EVENT_STRUCT_H_INCLUDED_ */ diff --git a/src/components/libevent/http.h b/src/components/libevent/http.h new file mode 100644 index 0000000..f38a2b5 --- /dev/null +++ b/src/components/libevent/http.h @@ -0,0 +1,1192 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_HTTP_H_INCLUDED_ +#define EVENT2_HTTP_H_INCLUDED_ + +/* For int types. */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* In case we haven't included the right headers yet. */ +struct evbuffer; +struct event_base; +struct bufferevent; +struct evhttp_connection; + +/** @file event2/http.h + * + * Basic support for HTTP serving. + * + * As Libevent is a library for dealing with event notification and most + * interesting applications are networked today, I have often found the + * need to write HTTP code. The following prototypes and definitions provide + * an application with a minimal interface for making HTTP requests and for + * creating a very simple HTTP server. + */ + +/* Response codes */ +#define HTTP_OK 200 /**< request completed ok */ +#define HTTP_NOCONTENT 204 /**< request does not have content */ +#define HTTP_MOVEPERM 301 /**< the uri moved permanently */ +#define HTTP_MOVETEMP 302 /**< the uri moved temporarily */ +#define HTTP_NOTMODIFIED 304 /**< page was not modified from last */ +#define HTTP_BADREQUEST 400 /**< invalid http request was made */ +#define HTTP_NOTFOUND 404 /**< could not find content for uri */ +#define HTTP_BADMETHOD 405 /**< method not allowed for this uri */ +#define HTTP_ENTITYTOOLARGE 413 /**< */ +#define HTTP_EXPECTATIONFAILED 417 /**< we can't handle this expectation */ +#define HTTP_INTERNAL 500 /**< internal error */ +#define HTTP_NOTIMPLEMENTED 501 /**< not implemented */ +#define HTTP_SERVUNAVAIL 503 /**< the server is not available */ + +struct evhttp; +struct evhttp_request; +struct evkeyvalq; +struct evhttp_bound_socket; +struct evconnlistener; +struct evdns_base; + +/** + * Create a new HTTP server. + * + * @param base (optional) the event base to receive the HTTP events + * @return a pointer to a newly initialized evhttp server structure + * @see evhttp_free() + */ +EVENT2_EXPORT_SYMBOL +struct evhttp *evhttp_new(struct event_base *base); + +/** + * Binds an HTTP server on the specified address and port. + * + * Can be called multiple times to bind the same http server + * to multiple different ports. + * + * @param http a pointer to an evhttp object + * @param address a string containing the IP address to listen(2) on + * @param port the port number to listen on + * @return 0 on success, -1 on failure. + * @see evhttp_accept_socket() + */ +EVENT2_EXPORT_SYMBOL +int evhttp_bind_socket(struct evhttp *http, const char *address, ev_uint16_t port); + +/** + * Like evhttp_bind_socket(), but returns a handle for referencing the socket. + * + * The returned pointer is not valid after \a http is freed. + * + * @param http a pointer to an evhttp object + * @param address a string containing the IP address to listen(2) on + * @param port the port number to listen on + * @return Handle for the socket on success, NULL on failure. + * @see evhttp_bind_socket(), evhttp_del_accept_socket() + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_bound_socket *evhttp_bind_socket_with_handle(struct evhttp *http, const char *address, ev_uint16_t port); + +/** + * Makes an HTTP server accept connections on the specified socket. + * + * This may be useful to create a socket and then fork multiple instances + * of an http server, or when a socket has been communicated via file + * descriptor passing in situations where an http servers does not have + * permissions to bind to a low-numbered port. + * + * Can be called multiple times to have the http server listen to + * multiple different sockets. + * + * @param http a pointer to an evhttp object + * @param fd a socket fd that is ready for accepting connections + * @return 0 on success, -1 on failure. + * @see evhttp_bind_socket() + */ +EVENT2_EXPORT_SYMBOL +int evhttp_accept_socket(struct evhttp *http, evutil_socket_t fd); + +/** + * Like evhttp_accept_socket(), but returns a handle for referencing the socket. + * + * The returned pointer is not valid after \a http is freed. + * + * @param http a pointer to an evhttp object + * @param fd a socket fd that is ready for accepting connections + * @return Handle for the socket on success, NULL on failure. + * @see evhttp_accept_socket(), evhttp_del_accept_socket() + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_bound_socket *evhttp_accept_socket_with_handle(struct evhttp *http, evutil_socket_t fd); + +/** + * The most low-level evhttp_bind/accept method: takes an evconnlistener, and + * returns an evhttp_bound_socket. The listener will be freed when the bound + * socket is freed. + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_bound_socket *evhttp_bind_listener(struct evhttp *http, struct evconnlistener *listener); + +EVENT2_EXPORT_SYMBOL +void accept_socket_cb(struct evconnlistener *listener, evutil_socket_t nfd, + struct sockaddr *peer_sa, int peer_socklen, void *arg); +/** + * Return the listener used to implement a bound socket. + */ +EVENT2_EXPORT_SYMBOL +struct evconnlistener *evhttp_bound_socket_get_listener(struct evhttp_bound_socket *bound); + +typedef void evhttp_bound_socket_foreach_fn(struct evhttp_bound_socket *, void *); +/** + * Applies the function specified in the first argument to all + * evhttp_bound_sockets associated with "http". The user must not + * attempt to free or remove any connections, sockets or listeners + * in the callback "function". + * + * @param http pointer to an evhttp object + * @param function function to apply to every bound socket + * @param argument pointer value passed to function for every socket iterated + */ +EVENT2_EXPORT_SYMBOL +void evhttp_foreach_bound_socket(struct evhttp *http, evhttp_bound_socket_foreach_fn *function, void *argument); + +/** + * Makes an HTTP server stop accepting connections on the specified socket + * + * This may be useful when a socket has been sent via file descriptor passing + * and is no longer needed by the current process. + * + * If you created this bound socket with evhttp_bind_socket_with_handle or + * evhttp_accept_socket_with_handle, this function closes the fd you provided. + * If you created this bound socket with evhttp_bind_listener, this function + * frees the listener you provided. + * + * \a bound_socket is an invalid pointer after this call returns. + * + * @param http a pointer to an evhttp object + * @param bound_socket a handle returned by evhttp_{bind,accept}_socket_with_handle + * @see evhttp_bind_socket_with_handle(), evhttp_accept_socket_with_handle() + */ +EVENT2_EXPORT_SYMBOL +void evhttp_del_accept_socket(struct evhttp *http, struct evhttp_bound_socket *bound_socket); + +/** + * Get the raw file descriptor referenced by an evhttp_bound_socket. + * + * @param bound_socket a handle returned by evhttp_{bind,accept}_socket_with_handle + * @return the file descriptor used by the bound socket + * @see evhttp_bind_socket_with_handle(), evhttp_accept_socket_with_handle() + */ +EVENT2_EXPORT_SYMBOL +evutil_socket_t evhttp_bound_socket_get_fd(struct evhttp_bound_socket *bound_socket); + +/** + * Free the previously created HTTP server. + * + * Works only if no requests are currently being served. + * + * @param http the evhttp server object to be freed + * @see evhttp_start() + */ +EVENT2_EXPORT_SYMBOL +void evhttp_free(struct evhttp* http); + +/** XXX Document. */ +EVENT2_EXPORT_SYMBOL +void evhttp_set_max_headers_size(struct evhttp* http, ev_ssize_t max_headers_size); +/** XXX Document. */ +EVENT2_EXPORT_SYMBOL +void evhttp_set_max_body_size(struct evhttp* http, ev_ssize_t max_body_size); + +/** + Set the value to use for the Content-Type header when none was provided. If + the content type string is NULL, the Content-Type header will not be + automatically added. + + @param http the http server on which to set the default content type + @param content_type the value for the Content-Type header +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_set_default_content_type(struct evhttp *http, + const char *content_type); + +/** + Sets the what HTTP methods are supported in requests accepted by this + server, and passed to user callbacks. + + If not supported they will generate a "405 Method not allowed" response. + + By default this includes the following methods: GET, POST, HEAD, PUT, DELETE + + @param http the http server on which to set the methods + @param methods bit mask constructed from evhttp_cmd_type values +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_set_allowed_methods(struct evhttp* http, ev_uint16_t methods); + +/** + Set a callback for a specified URI + + @param http the http sever on which to set the callback + @param path the path for which to invoke the callback + @param cb the callback function that gets invoked on requesting path + @param cb_arg an additional context argument for the callback + @return 0 on success, -1 if the callback existed already, -2 on failure +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_set_cb(struct evhttp *http, const char *path, + void (*cb)(struct evhttp_request *, void *), void *cb_arg); + +/** Removes the callback for a specified URI */ +EVENT2_EXPORT_SYMBOL +int evhttp_del_cb(struct evhttp *, const char *); + +/** + Set a callback for all requests that are not caught by specific callbacks + + Invokes the specified callback for all requests that do not match any of + the previously specified request paths. This is catchall for requests not + specifically configured with evhttp_set_cb(). + + @param http the evhttp server object for which to set the callback + @param cb the callback to invoke for any unmatched requests + @param arg an context argument for the callback +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_set_gencb(struct evhttp *http, + void (*cb)(struct evhttp_request *, void *), void *arg); + +/** + Set a callback used to create new bufferevents for connections + to a given evhttp object. + + You can use this to override the default bufferevent type -- for example, + to make this evhttp object use SSL bufferevents rather than unencrypted + ones. + + New bufferevents must be allocated with no fd set on them. + + @param http the evhttp server object for which to set the callback + @param cb the callback to invoke for incoming connections + @param arg an context argument for the callback + */ +EVENT2_EXPORT_SYMBOL +void evhttp_set_bevcb(struct evhttp *http, + struct bufferevent *(*cb)(struct event_base *, void *), void *arg); + +/** + Adds a virtual host to the http server. + + A virtual host is a newly initialized evhttp object that has request + callbacks set on it via evhttp_set_cb() or evhttp_set_gencb(). It + most not have any listing sockets associated with it. + + If the virtual host has not been removed by the time that evhttp_free() + is called on the main http server, it will be automatically freed, too. + + It is possible to have hierarchical vhosts. For example: A vhost + with the pattern *.example.com may have other vhosts with patterns + foo.example.com and bar.example.com associated with it. + + @param http the evhttp object to which to add a virtual host + @param pattern the glob pattern against which the hostname is matched. + The match is case insensitive and follows otherwise regular shell + matching. + @param vhost the virtual host to add the regular http server. + @return 0 on success, -1 on failure + @see evhttp_remove_virtual_host() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_add_virtual_host(struct evhttp* http, const char *pattern, + struct evhttp* vhost); + +/** + Removes a virtual host from the http server. + + @param http the evhttp object from which to remove the virtual host + @param vhost the virtual host to remove from the regular http server. + @return 0 on success, -1 on failure + @see evhttp_add_virtual_host() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_remove_virtual_host(struct evhttp* http, struct evhttp* vhost); + +/** + Add a server alias to an http object. The http object can be a virtual + host or the main server. + + @param http the evhttp object + @param alias the alias to add + @see evhttp_add_remove_alias() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_add_server_alias(struct evhttp *http, const char *alias); + +/** + Remove a server alias from an http object. + + @param http the evhttp object + @param alias the alias to remove + @see evhttp_add_server_alias() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_remove_server_alias(struct evhttp *http, const char *alias); + +/** + * Set the timeout for an HTTP request. + * + * @param http an evhttp object + * @param timeout_in_secs the timeout, in seconds + */ +EVENT2_EXPORT_SYMBOL +void evhttp_set_timeout(struct evhttp *http, int timeout_in_secs); + +/** + * Set the timeout for an HTTP request. + * + * @param http an evhttp object + * @param tv the timeout, or NULL + */ +EVENT2_EXPORT_SYMBOL +void evhttp_set_timeout_tv(struct evhttp *http, const struct timeval* tv); + +/* Read all the clients body, and only after this respond with an error if the + * clients body exceed max_body_size */ +#define EVHTTP_SERVER_LINGERING_CLOSE 0x0001 +/** + * Set connection flags for HTTP server. + * + * @see EVHTTP_SERVER_* + * @return 0 on success, otherwise non zero (for example if flag doesn't + * supported). + */ +EVENT2_EXPORT_SYMBOL +int evhttp_set_flags(struct evhttp *http, int flags); + +/* Request/Response functionality */ + +/** + * Send an HTML error message to the client. + * + * @param req a request object + * @param error the HTTP error code + * @param reason a brief explanation of the error. If this is NULL, we'll + * just use the standard meaning of the error code. + */ +EVENT2_EXPORT_SYMBOL +void evhttp_send_error(struct evhttp_request *req, int error, + const char *reason); + +/** + * Send an HTML reply to the client. + * + * The body of the reply consists of the data in databuf. After calling + * evhttp_send_reply() databuf will be empty, but the buffer is still + * owned by the caller and needs to be deallocated by the caller if + * necessary. + * + * @param req a request object + * @param code the HTTP response code to send + * @param reason a brief message to send with the response code + * @param databuf the body of the response + */ +EVENT2_EXPORT_SYMBOL +void evhttp_send_reply(struct evhttp_request *req, int code, + const char *reason, struct evbuffer *databuf); + +/* Low-level response interface, for streaming/chunked replies */ + +/** + Initiate a reply that uses Transfer-Encoding chunked. + + This allows the caller to stream the reply back to the client and is + useful when either not all of the reply data is immediately available + or when sending very large replies. + + The caller needs to supply data chunks with evhttp_send_reply_chunk() + and complete the reply by calling evhttp_send_reply_end(). + + @param req a request object + @param code the HTTP response code to send + @param reason a brief message to send with the response code +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_send_reply_start(struct evhttp_request *req, int code, + const char *reason); + +/** + Send another data chunk as part of an ongoing chunked reply. + + The reply chunk consists of the data in databuf. After calling + evhttp_send_reply_chunk() databuf will be empty, but the buffer is + still owned by the caller and needs to be deallocated by the caller + if necessary. + + @param req a request object + @param databuf the data chunk to send as part of the reply. +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_send_reply_chunk(struct evhttp_request *req, + struct evbuffer *databuf); + +/** + Send another data chunk as part of an ongoing chunked reply. + + The reply chunk consists of the data in databuf. After calling + evhttp_send_reply_chunk() databuf will be empty, but the buffer is + still owned by the caller and needs to be deallocated by the caller + if necessary. + + @param req a request object + @param databuf the data chunk to send as part of the reply. + @param cb callback funcion + @param call back's argument. +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_send_reply_chunk_with_cb(struct evhttp_request *, struct evbuffer *, + void (*cb)(struct evhttp_connection *, void *), void *arg); + +/** + Complete a chunked reply, freeing the request as appropriate. + + @param req a request object +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_send_reply_end(struct evhttp_request *req); + +/* + * Interfaces for making requests + */ + +/** The different request types supported by evhttp. These are as specified + * in RFC2616, except for PATCH which is specified by RFC5789. + * + * By default, only some of these methods are accepted and passed to user + * callbacks; use evhttp_set_allowed_methods() to change which methods + * are allowed. + */ +enum evhttp_cmd_type { + EVHTTP_REQ_GET = 1 << 0, + EVHTTP_REQ_POST = 1 << 1, + EVHTTP_REQ_HEAD = 1 << 2, + EVHTTP_REQ_PUT = 1 << 3, + EVHTTP_REQ_DELETE = 1 << 4, + EVHTTP_REQ_OPTIONS = 1 << 5, + EVHTTP_REQ_TRACE = 1 << 6, + EVHTTP_REQ_CONNECT = 1 << 7, + EVHTTP_REQ_PATCH = 1 << 8 +}; + +/** a request object can represent either a request or a reply */ +enum evhttp_request_kind { EVHTTP_REQUEST, EVHTTP_RESPONSE }; + +/** + * Create and return a connection object that can be used to for making HTTP + * requests. The connection object tries to resolve address and establish the + * connection when it is given an http request object. + * + * @param base the event_base to use for handling the connection + * @param dnsbase the dns_base to use for resolving host names; if not + * specified host name resolution will block. + * @param bev a bufferevent to use for connecting to the server; if NULL, a + * socket-based bufferevent will be created. This buffrevent will be freed + * when the connection closes. It must have no fd set on it. + * @param address the address to which to connect + * @param port the port to connect to + * @return an evhttp_connection object that can be used for making requests + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_connection *evhttp_connection_base_bufferevent_new( + struct event_base *base, struct evdns_base *dnsbase, struct bufferevent* bev, const char *address, ev_uint16_t port); + +/** + * Return the bufferevent that an evhttp_connection is using. + */ +EVENT2_EXPORT_SYMBOL +struct bufferevent* evhttp_connection_get_bufferevent(struct evhttp_connection *evcon); + +/** + * Return the HTTP server associated with this connection, or NULL. + */ +EVENT2_EXPORT_SYMBOL +struct evhttp *evhttp_connection_get_server(struct evhttp_connection *evcon); + +/** + * Creates a new request object that needs to be filled in with the request + * parameters. The callback is executed when the request completed or an + * error occurred. + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_request *evhttp_request_new( + void (*cb)(struct evhttp_request *, void *), void *arg); + +/** + * Enable delivery of chunks to requestor. + * @param cb will be called after every read of data with the same argument + * as the completion callback. Will never be called on an empty + * response. May drain the input buffer; it will be drained + * automatically on return. + */ +EVENT2_EXPORT_SYMBOL +void evhttp_request_set_chunked_cb(struct evhttp_request *, + void (*cb)(struct evhttp_request *, void *)); + +/** + * Register callback for additional parsing of request headers. + * @param cb will be called after receiving and parsing the full header. + * It allows analyzing the header and possibly closing the connection + * by returning a value < 0. + */ +EVENT2_EXPORT_SYMBOL +void evhttp_request_set_header_cb(struct evhttp_request *, + int (*cb)(struct evhttp_request *, void *)); + +/** + * The different error types supported by evhttp + * + * @see evhttp_request_set_error_cb() + */ +enum evhttp_request_error { + /** + * Timeout reached, also @see evhttp_connection_set_timeout() + */ + EVREQ_HTTP_TIMEOUT, + /** + * EOF reached + */ + EVREQ_HTTP_EOF, + /** + * Error while reading header, or invalid header + */ + EVREQ_HTTP_INVALID_HEADER, + /** + * Error encountered while reading or writing + */ + EVREQ_HTTP_BUFFER_ERROR, + /** + * The evhttp_cancel_request() called on this request. + */ + EVREQ_HTTP_REQUEST_CANCEL, + /** + * Body is greater then evhttp_connection_set_max_body_size() + */ + EVREQ_HTTP_DATA_TOO_LONG +}; +/** + * Set a callback for errors + * @see evhttp_request_error for error types. + * + * On error, both the error callback and the regular callback will be called, + * error callback is called before the regular callback. + **/ +EVENT2_EXPORT_SYMBOL +void evhttp_request_set_error_cb(struct evhttp_request *, + void (*)(enum evhttp_request_error, void *)); + +/** + * Set a callback to be called on request completion of evhttp_send_* function. + * + * The callback function will be called on the completion of the request after + * the output data has been written and before the evhttp_request object + * is destroyed. This can be useful for tracking resources associated with a + * request (ex: timing metrics). + * + * @param req a request object + * @param cb callback function that will be called on request completion + * @param cb_arg an additional context argument for the callback + */ +EVENT2_EXPORT_SYMBOL +void evhttp_request_set_on_complete_cb(struct evhttp_request *req, + void (*cb)(struct evhttp_request *, void *), void *cb_arg); + +/** Frees the request object and removes associated events. */ +EVENT2_EXPORT_SYMBOL +void evhttp_request_free(struct evhttp_request *req); + +/** + * Create and return a connection object that can be used to for making HTTP + * requests. The connection object tries to resolve address and establish the + * connection when it is given an http request object. + * + * @param base the event_base to use for handling the connection + * @param dnsbase the dns_base to use for resolving host names; if not + * specified host name resolution will block. + * @param address the address to which to connect + * @param port the port to connect to + * @return an evhttp_connection object that can be used for making requests + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_connection *evhttp_connection_base_new( + struct event_base *base, struct evdns_base *dnsbase, + const char *address, ev_uint16_t port); + +/** + * Set family hint for DNS requests. + */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_family(struct evhttp_connection *evcon, + int family); + +/* reuse connection address on retry */ +#define EVHTTP_CON_REUSE_CONNECTED_ADDR 0x0008 +/* Try to read error, since server may already send and close + * connection, but if at that time we have some data to send then we + * can send get EPIPE and fail, while we can read that HTTP error. */ +#define EVHTTP_CON_READ_ON_WRITE_ERROR 0x0010 +/* @see EVHTTP_SERVER_LINGERING_CLOSE */ +#define EVHTTP_CON_LINGERING_CLOSE 0x0020 +/* Padding for public flags, @see EVHTTP_CON_* in http-internal.h */ +#define EVHTTP_CON_PUBLIC_FLAGS_END 0x100000 +/** + * Set connection flags. + * + * @see EVHTTP_CON_* + * @return 0 on success, otherwise non zero (for example if flag doesn't + * supported). + */ +EVENT2_EXPORT_SYMBOL +int evhttp_connection_set_flags(struct evhttp_connection *evcon, + int flags); + +/** Takes ownership of the request object + * + * Can be used in a request callback to keep onto the request until + * evhttp_request_free() is explicitly called by the user. + */ +EVENT2_EXPORT_SYMBOL +void evhttp_request_own(struct evhttp_request *req); + +/** Returns 1 if the request is owned by the user */ +EVENT2_EXPORT_SYMBOL +int evhttp_request_is_owned(struct evhttp_request *req); + +/** + * Returns the connection object associated with the request or NULL + * + * The user needs to either free the request explicitly or call + * evhttp_send_reply_end(). + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_connection *evhttp_request_get_connection(struct evhttp_request *req); + +/** + * Returns the underlying event_base for this connection + */ +EVENT2_EXPORT_SYMBOL +struct event_base *evhttp_connection_get_base(struct evhttp_connection *req); + +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_max_headers_size(struct evhttp_connection *evcon, + ev_ssize_t new_max_headers_size); + +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_max_body_size(struct evhttp_connection* evcon, + ev_ssize_t new_max_body_size); + +/** Frees an http connection */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_free(struct evhttp_connection *evcon); + +/** Disowns a given connection object + * + * Can be used to tell libevent to free the connection object after + * the last request has completed or failed. + */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_free_on_completion(struct evhttp_connection *evcon); + +/** sets the ip address from which http connections are made */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_local_address(struct evhttp_connection *evcon, + const char *address); + +/** sets the local port from which http connections are made */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_local_port(struct evhttp_connection *evcon, + ev_uint16_t port); + +/** Sets the timeout in seconds for events related to this connection */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_timeout(struct evhttp_connection *evcon, + int timeout_in_secs); + +/** Sets the timeout for events related to this connection. Takes a struct + * timeval. */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_timeout_tv(struct evhttp_connection *evcon, + const struct timeval *tv); + +/** Sets the delay before retrying requests on this connection. This is only + * used if evhttp_connection_set_retries is used to make the number of retries + * at least one. Each retry after the first is twice as long as the one before + * it. */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_initial_retry_tv(struct evhttp_connection *evcon, + const struct timeval *tv); + +/** Sets the retry limit for this connection - -1 repeats indefinitely */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_retries(struct evhttp_connection *evcon, + int retry_max); + +/** Set a callback for connection close. */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_set_closecb(struct evhttp_connection *evcon, + void (*)(struct evhttp_connection *, void *), void *); + +/** Get the remote address and port associated with this connection. */ +EVENT2_EXPORT_SYMBOL +void evhttp_connection_get_peer(struct evhttp_connection *evcon, + char **address, ev_uint16_t *port); + +/** Get the remote address associated with this connection. + * extracted from getpeername() OR from nameserver. + * + * @return NULL if getpeername() return non success, + * or connection is not connected, + * otherwise it return pointer to struct sockaddr_storage */ +EVENT2_EXPORT_SYMBOL +const struct sockaddr* +evhttp_connection_get_addr(struct evhttp_connection *evcon); + +/** + Make an HTTP request over the specified connection. + + The connection gets ownership of the request. On failure, the + request object is no longer valid as it has been freed. + + @param evcon the evhttp_connection object over which to send the request + @param req the previously created and configured request object + @param type the request type EVHTTP_REQ_GET, EVHTTP_REQ_POST, etc. + @param uri the URI associated with the request + @return 0 on success, -1 on failure + @see evhttp_cancel_request() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_make_request(struct evhttp_connection *evcon, + struct evhttp_request *req, + enum evhttp_cmd_type type, const char *uri); + +/** + Cancels a pending HTTP request. + + Cancels an ongoing HTTP request. The callback associated with this request + is not executed and the request object is freed. If the request is + currently being processed, e.g. it is ongoing, the corresponding + evhttp_connection object is going to get reset. + + A request cannot be canceled if its callback has executed already. A request + may be canceled reentrantly from its chunked callback. + + @param req the evhttp_request to cancel; req becomes invalid after this call. +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_cancel_request(struct evhttp_request *req); + +/** + * A structure to hold a parsed URI or Relative-Ref conforming to RFC3986. + */ +struct evhttp_uri; + +/** Returns the request URI */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_request_get_uri(const struct evhttp_request *req); +/** Returns the request URI (parsed) */ +EVENT2_EXPORT_SYMBOL +const struct evhttp_uri *evhttp_request_get_evhttp_uri(const struct evhttp_request *req); +/** Returns the request command */ +EVENT2_EXPORT_SYMBOL +enum evhttp_cmd_type evhttp_request_get_command(const struct evhttp_request *req); + +EVENT2_EXPORT_SYMBOL +int evhttp_request_get_response_code(const struct evhttp_request *req); +EVENT2_EXPORT_SYMBOL +const char * evhttp_request_get_response_code_line(const struct evhttp_request *req); + +/** Returns the input headers */ +EVENT2_EXPORT_SYMBOL +struct evkeyvalq *evhttp_request_get_input_headers(struct evhttp_request *req); +/** Returns the output headers */ +EVENT2_EXPORT_SYMBOL +struct evkeyvalq *evhttp_request_get_output_headers(struct evhttp_request *req); +/** Returns the input buffer */ +EVENT2_EXPORT_SYMBOL +struct evbuffer *evhttp_request_get_input_buffer(struct evhttp_request *req); +/** Returns the output buffer */ +EVENT2_EXPORT_SYMBOL +struct evbuffer *evhttp_request_get_output_buffer(struct evhttp_request *req); +/** Returns the host associated with the request. If a client sends an absolute + URI, the host part of that is preferred. Otherwise, the input headers are + searched for a Host: header. NULL is returned if no absolute URI or Host: + header is provided. */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_request_get_host(struct evhttp_request *req); + +/* Interfaces for dealing with HTTP headers */ + +/** + Finds the value belonging to a header. + + @param headers the evkeyvalq object in which to find the header + @param key the name of the header to find + @returns a pointer to the value for the header or NULL if the header + could not be found. + @see evhttp_add_header(), evhttp_remove_header() +*/ +EVENT2_EXPORT_SYMBOL +const char *evhttp_find_header(const struct evkeyvalq *headers, + const char *key); + +/** + Removes a header from a list of existing headers. + + @param headers the evkeyvalq object from which to remove a header + @param key the name of the header to remove + @returns 0 if the header was removed, -1 otherwise. + @see evhttp_find_header(), evhttp_add_header() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_remove_header(struct evkeyvalq *headers, const char *key); + +/** + Adds a header to a list of existing headers. + + @param headers the evkeyvalq object to which to add a header + @param key the name of the header + @param value the value belonging to the header + @returns 0 on success, -1 otherwise. + @see evhttp_find_header(), evhttp_clear_headers() +*/ +EVENT2_EXPORT_SYMBOL +int evhttp_add_header(struct evkeyvalq *headers, const char *key, const char *value); + +/** + Removes all headers from the header list. + + @param headers the evkeyvalq object from which to remove all headers +*/ +EVENT2_EXPORT_SYMBOL +void evhttp_clear_headers(struct evkeyvalq *headers); + +/* Miscellaneous utility functions */ + + +/** + Helper function to encode a string for inclusion in a URI. All + characters are replaced by their hex-escaped (%22) equivalents, + except for characters explicitly unreserved by RFC3986 -- that is, + ASCII alphanumeric characters, hyphen, dot, underscore, and tilde. + + The returned string must be freed by the caller. + + @param str an unencoded string + @return a newly allocated URI-encoded string or NULL on failure + */ +EVENT2_EXPORT_SYMBOL +char *evhttp_encode_uri(const char *str); + +/** + As evhttp_encode_uri, but if 'size' is nonnegative, treat the string + as being 'size' bytes long. This allows you to encode strings that + may contain 0-valued bytes. + + The returned string must be freed by the caller. + + @param str an unencoded string + @param size the length of the string to encode, or -1 if the string + is NUL-terminated + @param space_to_plus if true, space characters in 'str' are encoded + as +, not %20. + @return a newly allocate URI-encoded string, or NULL on failure. + */ +EVENT2_EXPORT_SYMBOL +char *evhttp_uriencode(const char *str, ev_ssize_t size, int space_to_plus); + +/** + Helper function to sort of decode a URI-encoded string. Unlike + evhttp_get_decoded_uri, it decodes all plus characters that appear + _after_ the first question mark character, but no plusses that occur + before. This is not a good way to decode URIs in whole or in part. + + The returned string must be freed by the caller + + @deprecated This function is deprecated; you probably want to use + evhttp_get_decoded_uri instead. + + @param uri an encoded URI + @return a newly allocated unencoded URI or NULL on failure + */ +EVENT2_EXPORT_SYMBOL +char *evhttp_decode_uri(const char *uri); + +/** + Helper function to decode a URI-escaped string or HTTP parameter. + + If 'decode_plus' is 1, then we decode the string as an HTTP parameter + value, and convert all plus ('+') characters to spaces. If + 'decode_plus' is 0, we leave all plus characters unchanged. + + The returned string must be freed by the caller. + + @param uri a URI-encode encoded URI + @param decode_plus determines whether we convert '+' to space. + @param size_out if size_out is not NULL, *size_out is set to the size of the + returned string + @return a newly allocated unencoded URI or NULL on failure + */ +EVENT2_EXPORT_SYMBOL +char *evhttp_uridecode(const char *uri, int decode_plus, + size_t *size_out); + +/** + Helper function to parse out arguments in a query. + + Parsing a URI like + + http://foo.com/?q=test&s=some+thing + + will result in two entries in the key value queue. + + The first entry is: key="q", value="test" + The second entry is: key="s", value="some thing" + + @deprecated This function is deprecated as of Libevent 2.0.9. Use + evhttp_uri_parse and evhttp_parse_query_str instead. + + @param uri the request URI + @param headers the head of the evkeyval queue + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evhttp_parse_query(const char *uri, struct evkeyvalq *headers); + +/** + Helper function to parse out arguments from the query portion of an + HTTP URI. + + Parsing a query string like + + q=test&s=some+thing + + will result in two entries in the key value queue. + + The first entry is: key="q", value="test" + The second entry is: key="s", value="some thing" + + @param query_parse the query portion of the URI + @param headers the head of the evkeyval queue + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evhttp_parse_query_str(const char *uri, struct evkeyvalq *headers); + +/** + * Escape HTML character entities in a string. + * + * Replaces <, >, ", ' and & with <, >, ", + * ' and & correspondingly. + * + * The returned string needs to be freed by the caller. + * + * @param html an unescaped HTML string + * @return an escaped HTML string or NULL on error + */ +EVENT2_EXPORT_SYMBOL +char *evhttp_htmlescape(const char *html); + +/** + * Return a new empty evhttp_uri with no fields set. + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_uri *evhttp_uri_new(void); + +/** + * Changes the flags set on a given URI. See EVHTTP_URI_* for + * a list of flags. + **/ +EVENT2_EXPORT_SYMBOL +void evhttp_uri_set_flags(struct evhttp_uri *uri, unsigned flags); + +/** Return the scheme of an evhttp_uri, or NULL if there is no scheme has + * been set and the evhttp_uri contains a Relative-Ref. */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_uri_get_scheme(const struct evhttp_uri *uri); +/** + * Return the userinfo part of an evhttp_uri, or NULL if it has no userinfo + * set. + */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_uri_get_userinfo(const struct evhttp_uri *uri); +/** + * Return the host part of an evhttp_uri, or NULL if it has no host set. + * The host may either be a regular hostname (conforming to the RFC 3986 + * "regname" production), or an IPv4 address, or the empty string, or a + * bracketed IPv6 address, or a bracketed 'IP-Future' address. + * + * Note that having a NULL host means that the URI has no authority + * section, but having an empty-string host means that the URI has an + * authority section with no host part. For example, + * "mailto:user@example.com" has a host of NULL, but "file:///etc/motd" + * has a host of "". + */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_uri_get_host(const struct evhttp_uri *uri); +/** Return the port part of an evhttp_uri, or -1 if there is no port set. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_get_port(const struct evhttp_uri *uri); +/** Return the path part of an evhttp_uri, or NULL if it has no path set */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_uri_get_path(const struct evhttp_uri *uri); +/** Return the query part of an evhttp_uri (excluding the leading "?"), or + * NULL if it has no query set */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_uri_get_query(const struct evhttp_uri *uri); +/** Return the fragment part of an evhttp_uri (excluding the leading "#"), + * or NULL if it has no fragment set */ +EVENT2_EXPORT_SYMBOL +const char *evhttp_uri_get_fragment(const struct evhttp_uri *uri); + +/** Set the scheme of an evhttp_uri, or clear the scheme if scheme==NULL. + * Returns 0 on success, -1 if scheme is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_scheme(struct evhttp_uri *uri, const char *scheme); +/** Set the userinfo of an evhttp_uri, or clear the userinfo if userinfo==NULL. + * Returns 0 on success, -1 if userinfo is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_userinfo(struct evhttp_uri *uri, const char *userinfo); +/** Set the host of an evhttp_uri, or clear the host if host==NULL. + * Returns 0 on success, -1 if host is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_host(struct evhttp_uri *uri, const char *host); +/** Set the port of an evhttp_uri, or clear the port if port==-1. + * Returns 0 on success, -1 if port is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_port(struct evhttp_uri *uri, int port); +/** Set the path of an evhttp_uri, or clear the path if path==NULL. + * Returns 0 on success, -1 if path is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_path(struct evhttp_uri *uri, const char *path); +/** Set the query of an evhttp_uri, or clear the query if query==NULL. + * The query should not include a leading "?". + * Returns 0 on success, -1 if query is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_query(struct evhttp_uri *uri, const char *query); +/** Set the fragment of an evhttp_uri, or clear the fragment if fragment==NULL. + * The fragment should not include a leading "#". + * Returns 0 on success, -1 if fragment is not well-formed. */ +EVENT2_EXPORT_SYMBOL +int evhttp_uri_set_fragment(struct evhttp_uri *uri, const char *fragment); + +/** + * Helper function to parse a URI-Reference as specified by RFC3986. + * + * This function matches the URI-Reference production from RFC3986, + * which includes both URIs like + * + * scheme://[[userinfo]@]foo.com[:port]]/[path][?query][#fragment] + * + * and relative-refs like + * + * [path][?query][#fragment] + * + * Any optional elements portions not present in the original URI are + * left set to NULL in the resulting evhttp_uri. If no port is + * specified, the port is set to -1. + * + * Note that no decoding is performed on percent-escaped characters in + * the string; if you want to parse them, use evhttp_uridecode or + * evhttp_parse_query_str as appropriate. + * + * Note also that most URI schemes will have additional constraints that + * this function does not know about, and cannot check. For example, + * mailto://www.example.com/cgi-bin/fortune.pl is not a reasonable + * mailto url, http://www.example.com:99999/ is not a reasonable HTTP + * URL, and ftp:username@example.com is not a reasonable FTP URL. + * Nevertheless, all of these URLs conform to RFC3986, and this function + * accepts all of them as valid. + * + * @param source_uri the request URI + * @param flags Zero or more EVHTTP_URI_* flags to affect the behavior + * of the parser. + * @return uri container to hold parsed data, or NULL if there is error + * @see evhttp_uri_free() + */ +EVENT2_EXPORT_SYMBOL +struct evhttp_uri *evhttp_uri_parse_with_flags(const char *source_uri, + unsigned flags); + +/** Tolerate URIs that do not conform to RFC3986. + * + * Unfortunately, some HTTP clients generate URIs that, according to RFC3986, + * are not conformant URIs. If you need to support these URIs, you can + * do so by passing this flag to evhttp_uri_parse_with_flags. + * + * Currently, these changes are: + *
    + *
  • Nonconformant URIs are allowed to contain otherwise unreasonable + * characters in their path, query, and fragment components. + *
+ */ +#define EVHTTP_URI_NONCONFORMANT 0x01 + +/** Alias for evhttp_uri_parse_with_flags(source_uri, 0) */ +EVENT2_EXPORT_SYMBOL +struct evhttp_uri *evhttp_uri_parse(const char *source_uri); + +/** + * Free all memory allocated for a parsed uri. Only use this for URIs + * generated by evhttp_uri_parse. + * + * @param uri container with parsed data + * @see evhttp_uri_parse() + */ +EVENT2_EXPORT_SYMBOL +void evhttp_uri_free(struct evhttp_uri *uri); + +/** + * Join together the uri parts from parsed data to form a URI-Reference. + * + * Note that no escaping of reserved characters is done on the members + * of the evhttp_uri, so the generated string might not be a valid URI + * unless the members of evhttp_uri are themselves valid. + * + * @param uri container with parsed data + * @param buf destination buffer + * @param limit destination buffer size + * @return an joined uri as string or NULL on error + * @see evhttp_uri_parse() + */ +EVENT2_EXPORT_SYMBOL +char *evhttp_uri_join(struct evhttp_uri *uri, char *buf, size_t limit); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_HTTP_H_INCLUDED_ */ diff --git a/src/components/libevent/http_compat.h b/src/components/libevent/http_compat.h new file mode 100644 index 0000000..ca9e708 --- /dev/null +++ b/src/components/libevent/http_compat.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_HTTP_COMPAT_H_INCLUDED_ +#define EVENT2_HTTP_COMPAT_H_INCLUDED_ + +/** @file event2/http_compat.h + + Potentially non-threadsafe versions of the functions in http.h: provided + only for backwards compatibility. + + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/** + * Start an HTTP server on the specified address and port + * + * @deprecated It does not allow an event base to be specified + * + * @param address the address to which the HTTP server should be bound + * @param port the port number on which the HTTP server should listen + * @return an struct evhttp object + */ +struct evhttp *evhttp_start(const char *address, ev_uint16_t port); + +/** + * A connection object that can be used to for making HTTP requests. The + * connection object tries to establish the connection when it is given an + * http request object. + * + * @deprecated It does not allow an event base to be specified + */ +struct evhttp_connection *evhttp_connection_new( + const char *address, ev_uint16_t port); + +/** + * Associates an event base with the connection - can only be called + * on a freshly created connection object that has not been used yet. + * + * @deprecated XXXX Why? + */ +void evhttp_connection_set_base(struct evhttp_connection *evcon, + struct event_base *base); + + +/** Returns the request URI */ +#define evhttp_request_uri evhttp_request_get_uri + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_EVENT_COMPAT_H_INCLUDED_ */ diff --git a/src/components/libevent/http_struct.h b/src/components/libevent/http_struct.h new file mode 100644 index 0000000..24b2fb9 --- /dev/null +++ b/src/components/libevent/http_struct.h @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_HTTP_STRUCT_H_INCLUDED_ +#define EVENT2_HTTP_STRUCT_H_INCLUDED_ + +/** @file event2/http_struct.h + + Data structures for http. Using these structures may hurt forward + compatibility with later versions of Libevent: be careful! + + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +/** + * the request structure that a server receives. + * WARNING: expect this structure to change. I will try to provide + * reasonable accessors. + */ +struct evhttp_request { +#if defined(TAILQ_ENTRY) + TAILQ_ENTRY(evhttp_request) next; +#else +struct { + struct evhttp_request *tqe_next; + struct evhttp_request **tqe_prev; +} next; +#endif + + /* the connection object that this request belongs to */ + struct evhttp_connection *evcon; + int flags; +/** The request obj owns the evhttp connection and needs to free it */ +#define EVHTTP_REQ_OWN_CONNECTION 0x0001 +/** Request was made via a proxy */ +#define EVHTTP_PROXY_REQUEST 0x0002 +/** The request object is owned by the user; the user must free it */ +#define EVHTTP_USER_OWNED 0x0004 +/** The request will be used again upstack; freeing must be deferred */ +#define EVHTTP_REQ_DEFER_FREE 0x0008 +/** The request should be freed upstack */ +#define EVHTTP_REQ_NEEDS_FREE 0x0010 + + struct evkeyvalq *input_headers; + struct evkeyvalq *output_headers; + + /* address of the remote host and the port connection came from */ + char *remote_host; + ev_uint16_t remote_port; + + /* cache of the hostname for evhttp_request_get_host */ + char *host_cache; + + enum evhttp_request_kind kind; + enum evhttp_cmd_type type; + + size_t headers_size; + size_t body_size; + + char *uri; /* uri after HTTP request was parsed */ + struct evhttp_uri *uri_elems; /* uri elements */ + + char major; /* HTTP Major number */ + char minor; /* HTTP Minor number */ + + int response_code; /* HTTP Response code */ + char *response_code_line; /* Readable response */ + + struct evbuffer *input_buffer; /* read data */ + ev_int64_t ntoread; + unsigned chunked:1, /* a chunked request */ + userdone:1; /* the user has sent all data */ + + struct evbuffer *output_buffer; /* outgoing post or data */ + + /* Callback */ + void (*cb)(struct evhttp_request *, void *); + void *cb_arg; + + /* + * Chunked data callback - call for each completed chunk if + * specified. If not specified, all the data is delivered via + * the regular callback. + */ + void (*chunk_cb)(struct evhttp_request *, void *); + + /* + * Callback added for forked-daapd so they can collect ICY + * (shoutcast) metadata from the http header. If return + * int is negative the connection will be closed. + */ + int (*header_cb)(struct evhttp_request *, void *); + + /* + * Error callback - called when error is occured. + * @see evhttp_request_error for error types. + * + * @see evhttp_request_set_error_cb() + */ + void (*error_cb)(enum evhttp_request_error, void *); + + /* + * Send complete callback - called when the request is actually + * sent and completed. + */ + void (*on_complete_cb)(struct evhttp_request *, void *); + void *on_complete_cb_arg; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_HTTP_STRUCT_H_INCLUDED_ */ + diff --git a/src/components/libevent/ipv6-internal.h b/src/components/libevent/ipv6-internal.h new file mode 100644 index 0000000..53df6a9 --- /dev/null +++ b/src/components/libevent/ipv6-internal.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ + +/* Internal use only: Fake IPv6 structures and values on platforms that + * do not have them */ + +#ifndef IPV6_INTERNAL_H_INCLUDED_ +#define IPV6_INTERNAL_H_INCLUDED_ + +#include "event-config.h" +#include "evconfig-private.h" + +#include +#ifdef EVENT__HAVE_SYS_SOCKET_H +#include +#endif +#include "util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file ipv6-internal.h + * + * Replacement types and functions for platforms that don't support ipv6 + * properly. + */ + +#ifndef EVENT__HAVE_STRUCT_IN6_ADDR +struct in6_addr { + ev_uint8_t s6_addr[16]; +}; +#endif + +#ifndef EVENT__HAVE_SA_FAMILY_T +typedef int sa_family_t; +#endif + +#ifndef EVENT__HAVE_STRUCT_SOCKADDR_IN6 +struct sockaddr_in6 { + /* This will fail if we find a struct sockaddr that doesn't have + * sa_family as the first element. */ + sa_family_t sin6_family; + ev_uint16_t sin6_port; + struct in6_addr sin6_addr; +}; +#endif + +#ifndef AF_INET6 +#define AF_INET6 3333 +#endif +#ifndef PF_INET6 +#define PF_INET6 AF_INET6 +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/libevent/keyvalq_struct.h b/src/components/libevent/keyvalq_struct.h new file mode 100644 index 0000000..bffa54b --- /dev/null +++ b/src/components/libevent/keyvalq_struct.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_KEYVALQ_STRUCT_H_INCLUDED_ +#define EVENT2_KEYVALQ_STRUCT_H_INCLUDED_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Fix so that people don't have to run with */ +/* XXXX This code is duplicated with event_struct.h */ +#ifndef TAILQ_ENTRY +#define EVENT_DEFINED_TQENTRY_ +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#endif /* !TAILQ_ENTRY */ + +#ifndef TAILQ_HEAD +#define EVENT_DEFINED_TQHEAD_ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; \ + struct type **tqh_last; \ +} +#endif + +/* + * Key-Value pairs. Can be used for HTTP headers but also for + * query argument parsing. + */ +struct evkeyval { + TAILQ_ENTRY(evkeyval) next; + + char *key; + char *value; +}; + +TAILQ_HEAD (evkeyvalq, evkeyval); + +/* XXXX This code is duplicated with event_struct.h */ +#ifdef EVENT_DEFINED_TQENTRY_ +#undef TAILQ_ENTRY +#endif + +#ifdef EVENT_DEFINED_TQHEAD_ +#undef TAILQ_HEAD +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/libevent/listener.h b/src/components/libevent/listener.h new file mode 100644 index 0000000..ea0c1fa --- /dev/null +++ b/src/components/libevent/listener.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_LISTENER_H_INCLUDED_ +#define EVENT2_LISTENER_H_INCLUDED_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +struct sockaddr; +struct evconnlistener; + +/** + A callback that we invoke when a listener has a new connection. + + @param listener The evconnlistener + @param fd The new file descriptor + @param addr The source address of the connection + @param socklen The length of addr + @param user_arg the pointer passed to evconnlistener_new() + */ +typedef void (*evconnlistener_cb)(struct evconnlistener *, evutil_socket_t, struct sockaddr *, int socklen, void *); + +/** + A callback that we invoke when a listener encounters a non-retriable error. + + @param listener The evconnlistener + @param user_arg the pointer passed to evconnlistener_new() + */ +typedef void (*evconnlistener_errorcb)(struct evconnlistener *, void *); + +/** Flag: Indicates that we should not make incoming sockets nonblocking + * before passing them to the callback. */ +#define LEV_OPT_LEAVE_SOCKETS_BLOCKING (1u<<0) +/** Flag: Indicates that freeing the listener should close the underlying + * socket. */ +#define LEV_OPT_CLOSE_ON_FREE (1u<<1) +/** Flag: Indicates that we should set the close-on-exec flag, if possible */ +#define LEV_OPT_CLOSE_ON_EXEC (1u<<2) +/** Flag: Indicates that we should disable the timeout (if any) between when + * this socket is closed and when we can listen again on the same port. */ +#define LEV_OPT_REUSEABLE (1u<<3) +/** Flag: Indicates that the listener should be locked so it's safe to use + * from multiple threadcs at once. */ +#define LEV_OPT_THREADSAFE (1u<<4) +/** Flag: Indicates that the listener should be created in disabled + * state. Use evconnlistener_enable() to enable it later. */ +#define LEV_OPT_DISABLED (1u<<5) +/** Flag: Indicates that the listener should defer accept() until data is + * available, if possible. Ignored on platforms that do not support this. + * + * This option can help performance for protocols where the client transmits + * immediately after connecting. Do not use this option if your protocol + * _doesn't_ start out with the client transmitting data, since in that case + * this option will sometimes cause the kernel to never tell you about the + * connection. + * + * This option is only supported by evconnlistener_new_bind(): it can't + * work with evconnlistener_new_fd(), since the listener needs to be told + * to use the option before it is actually bound. + */ +#define LEV_OPT_DEFERRED_ACCEPT (1u<<6) +/** Flag: Indicates that we ask to allow multiple servers (processes or + * threads) to bind to the same port if they each set the option. + * + * SO_REUSEPORT is what most people would expect SO_REUSEADDR to be, however + * SO_REUSEPORT does not imply SO_REUSEADDR. + * + * This is only available on Linux and kernel 3.9+ + */ +#define LEV_OPT_REUSEABLE_PORT (1u<<7) + +/** + Allocate a new evconnlistener object to listen for incoming TCP connections + on a given file descriptor. + + @param base The event base to associate the listener with. + @param cb A callback to be invoked when a new connection arrives. If the + callback is NULL, the listener will be treated as disabled until the + callback is set. + @param ptr A user-supplied pointer to give to the callback. + @param flags Any number of LEV_OPT_* flags + @param backlog Passed to the listen() call to determine the length of the + acceptable connection backlog. Set to -1 for a reasonable default. + Set to 0 if the socket is already listening. + @param fd The file descriptor to listen on. It must be a nonblocking + file descriptor, and it should already be bound to an appropriate + port and address. +*/ +EVENT2_EXPORT_SYMBOL +struct evconnlistener *evconnlistener_new(struct event_base *base, + evconnlistener_cb cb, void *ptr, unsigned flags, int backlog, + evutil_socket_t fd); +/** + Allocate a new evconnlistener object to listen for incoming TCP connections + on a given address. + + @param base The event base to associate the listener with. + @param cb A callback to be invoked when a new connection arrives. If the + callback is NULL, the listener will be treated as disabled until the + callback is set. + @param ptr A user-supplied pointer to give to the callback. + @param flags Any number of LEV_OPT_* flags + @param backlog Passed to the listen() call to determine the length of the + acceptable connection backlog. Set to -1 for a reasonable default. + @param addr The address to listen for connections on. + @param socklen The length of the address. + */ +EVENT2_EXPORT_SYMBOL +struct evconnlistener *evconnlistener_new_bind(struct event_base *base, + evconnlistener_cb cb, void *ptr, unsigned flags, int backlog, + const struct sockaddr *sa, int socklen); +/** + Disable and deallocate an evconnlistener. + */ +EVENT2_EXPORT_SYMBOL +void evconnlistener_free(struct evconnlistener *lev); +/** + Re-enable an evconnlistener that has been disabled. + */ +EVENT2_EXPORT_SYMBOL +int evconnlistener_enable(struct evconnlistener *lev); +/** + Stop listening for connections on an evconnlistener. + */ +EVENT2_EXPORT_SYMBOL +int evconnlistener_disable(struct evconnlistener *lev); + +/** Return an evconnlistener's associated event_base. */ +EVENT2_EXPORT_SYMBOL +struct event_base *evconnlistener_get_base(struct evconnlistener *lev); + +/** Return the socket that an evconnlistner is listening on. */ +EVENT2_EXPORT_SYMBOL +evutil_socket_t evconnlistener_get_fd(struct evconnlistener *lev); + +/** Change the callback on the listener to cb and its user_data to arg. + */ +EVENT2_EXPORT_SYMBOL +void evconnlistener_set_cb(struct evconnlistener *lev, + evconnlistener_cb cb, void *arg); + +/** Set an evconnlistener's error callback. */ +EVENT2_EXPORT_SYMBOL +void evconnlistener_set_error_cb(struct evconnlistener *lev, + evconnlistener_errorcb errorcb); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/libevent/log-internal.h b/src/components/libevent/log-internal.h new file mode 100644 index 0000000..f43ea3f --- /dev/null +++ b/src/components/libevent/log-internal.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef LOG_INTERNAL_H_INCLUDED_ +#define LOG_INTERNAL_H_INCLUDED_ + +#include "util.h" + +#ifdef __GNUC__ +#define EV_CHECK_FMT(a,b) __attribute__((format(printf, a, b))) +#define EV_NORETURN __attribute__((noreturn)) +#else +#define EV_CHECK_FMT(a,b) +#define EV_NORETURN +#endif + +#define EVENT_ERR_ABORT_ ((int)0xdeaddead) + +#define USE_GLOBAL_FOR_DEBUG_LOGGING + +#if !defined(EVENT__DISABLE_DEBUG_MODE) || defined(USE_DEBUG) +#define EVENT_DEBUG_LOGGING_ENABLED +#endif + +#ifdef EVENT_DEBUG_LOGGING_ENABLED +#ifdef USE_GLOBAL_FOR_DEBUG_LOGGING +extern ev_uint32_t event_debug_logging_mask_; +#define event_debug_get_logging_mask_() (event_debug_logging_mask_) +#else +ev_uint32_t event_debug_get_logging_mask_(void); +#endif +#else +#define event_debug_get_logging_mask_() (0) +#endif + +void event_err(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3) EV_NORETURN; +void event_warn(const char *fmt, ...) EV_CHECK_FMT(1,2); +void event_sock_err(int eval, evutil_socket_t sock, const char *fmt, ...) EV_CHECK_FMT(3,4) EV_NORETURN; +void event_sock_warn(evutil_socket_t sock, const char *fmt, ...) EV_CHECK_FMT(2,3); +void event_errx(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3) EV_NORETURN; +void event_warnx(const char *fmt, ...) EV_CHECK_FMT(1,2); +void event_msgx(const char *fmt, ...) EV_CHECK_FMT(1,2); +void event_debugx_(const char *fmt, ...) EV_CHECK_FMT(1,2); + +void event_logv_(int severity, const char *errstr, const char *fmt, va_list ap) + EV_CHECK_FMT(3,0); + +#ifdef EVENT_DEBUG_LOGGING_ENABLED +#define event_debug(x) do { \ + if (event_debug_get_logging_mask_()) { \ + event_debugx_ x; \ + } \ + } while (0) +#else +#define event_debug(x) ((void)0) +#endif + +#undef EV_CHECK_FMT + +#endif diff --git a/src/components/libevent/rpc.h b/src/components/libevent/rpc.h new file mode 100644 index 0000000..dd43df2 --- /dev/null +++ b/src/components/libevent/rpc.h @@ -0,0 +1,596 @@ +/* + * Copyright (c) 2006-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_RPC_H_INCLUDED_ +#define EVENT2_RPC_H_INCLUDED_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file rpc.h + * + * This header files provides basic support for an RPC server and client. + * + * To support RPCs in a server, every supported RPC command needs to be + * defined and registered. + * + * EVRPC_HEADER(SendCommand, Request, Reply); + * + * SendCommand is the name of the RPC command. + * Request is the name of a structure generated by event_rpcgen.py. + * It contains all parameters relating to the SendCommand RPC. The + * server needs to fill in the Reply structure. + * Reply is the name of a structure generated by event_rpcgen.py. It + * contains the answer to the RPC. + * + * To register an RPC with an HTTP server, you need to first create an RPC + * base with: + * + * struct evrpc_base *base = evrpc_init(http); + * + * A specific RPC can then be registered with + * + * EVRPC_REGISTER(base, SendCommand, Request, Reply, FunctionCB, arg); + * + * when the server receives an appropriately formatted RPC, the user callback + * is invoked. The callback needs to fill in the reply structure. + * + * void FunctionCB(EVRPC_STRUCT(SendCommand)* rpc, void *arg); + * + * To send the reply, call EVRPC_REQUEST_DONE(rpc); + * + * See the regression test for an example. + */ + +/** + Determines if the member has been set in the message + + @param msg the message to inspect + @param member the member variable to test for presences + @return 1 if it's present or 0 otherwise. +*/ +#define EVTAG_HAS(msg, member) \ + ((msg)->member##_set == 1) + +#ifndef EVENT2_RPC_COMPAT_H_INCLUDED_ + +/** + Assigns a value to the member in the message. + + @param msg the message to which to assign a value + @param member the name of the member variable + @param value the value to assign +*/ +#define EVTAG_ASSIGN(msg, member, value) \ + (*(msg)->base->member##_assign)((msg), (value)) +/** + Assigns a value to the member in the message. + + @param msg the message to which to assign a value + @param member the name of the member variable + @param value the value to assign + @param len the length of the value +*/ +#define EVTAG_ASSIGN_WITH_LEN(msg, member, value, len) \ + (*(msg)->base->member##_assign)((msg), (value), (len)) +/** + Returns the value for a member. + + @param msg the message from which to get the value + @param member the name of the member variable + @param pvalue a pointer to the variable to hold the value + @return 0 on success, -1 otherwise. +*/ +#define EVTAG_GET(msg, member, pvalue) \ + (*(msg)->base->member##_get)((msg), (pvalue)) +/** + Returns the value for a member. + + @param msg the message from which to get the value + @param member the name of the member variable + @param pvalue a pointer to the variable to hold the value + @param plen a pointer to the length of the value + @return 0 on success, -1 otherwise. +*/ +#define EVTAG_GET_WITH_LEN(msg, member, pvalue, plen) \ + (*(msg)->base->member##_get)((msg), (pvalue), (plen)) + +#endif /* EVENT2_RPC_COMPAT_H_INCLUDED_ */ + +/** + Adds a value to an array. +*/ +#define EVTAG_ARRAY_ADD_VALUE(msg, member, value) \ + (*(msg)->base->member##_add)((msg), (value)) +/** + Allocates a new entry in the array and returns it. +*/ +#define EVTAG_ARRAY_ADD(msg, member) \ + (*(msg)->base->member##_add)(msg) +/** + Gets a variable at the specified offset from the array. +*/ +#define EVTAG_ARRAY_GET(msg, member, offset, pvalue) \ + (*(msg)->base->member##_get)((msg), (offset), (pvalue)) +/** + Returns the number of entries in the array. +*/ +#define EVTAG_ARRAY_LEN(msg, member) ((msg)->member##_length) + + +struct evbuffer; +struct event_base; +struct evrpc_req_generic; +struct evrpc_request_wrapper; +struct evrpc; + +/** The type of a specific RPC Message + * + * @param rpcname the name of the RPC message + */ +#define EVRPC_STRUCT(rpcname) struct evrpc_req__##rpcname + +struct evhttp_request; +struct evrpc_status; +struct evrpc_hook_meta; + +/** Creates the definitions and prototypes for an RPC + * + * You need to use EVRPC_HEADER to create structures and function prototypes + * needed by the server and client implementation. The structures have to be + * defined in an .rpc file and converted to source code via event_rpcgen.py + * + * @param rpcname the name of the RPC + * @param reqstruct the name of the RPC request structure + * @param replystruct the name of the RPC reply structure + * @see EVRPC_GENERATE() + */ +#define EVRPC_HEADER(rpcname, reqstruct, rplystruct) \ +EVRPC_STRUCT(rpcname) { \ + struct evrpc_hook_meta *hook_meta; \ + struct reqstruct* request; \ + struct rplystruct* reply; \ + struct evrpc* rpc; \ + struct evhttp_request* http_req; \ + struct evbuffer* rpc_data; \ +}; \ +int evrpc_send_request_##rpcname(struct evrpc_pool *, \ + struct reqstruct *, struct rplystruct *, \ + void (*)(struct evrpc_status *, \ + struct reqstruct *, struct rplystruct *, void *cbarg), \ + void *); + +struct evrpc_pool; + +/** use EVRPC_GENERATE instead */ +struct evrpc_request_wrapper *evrpc_make_request_ctx( + struct evrpc_pool *pool, void *request, void *reply, + const char *rpcname, + void (*req_marshal)(struct evbuffer*, void *), + void (*rpl_clear)(void *), + int (*rpl_unmarshal)(void *, struct evbuffer *), + void (*cb)(struct evrpc_status *, void *, void *, void *), + void *cbarg); + +/** Creates a context structure that contains rpc specific information. + * + * EVRPC_MAKE_CTX is used to populate a RPC specific context that + * contains information about marshaling the RPC data types. + * + * @param rpcname the name of the RPC + * @param reqstruct the name of the RPC request structure + * @param replystruct the name of the RPC reply structure + * @param pool the evrpc_pool over which to make the request + * @param request a pointer to the RPC request structure object + * @param reply a pointer to the RPC reply structure object + * @param cb the callback function to call when the RPC has completed + * @param cbarg the argument to supply to the callback + */ +#define EVRPC_MAKE_CTX(rpcname, reqstruct, rplystruct, \ + pool, request, reply, cb, cbarg) \ + evrpc_make_request_ctx(pool, request, reply, \ + #rpcname, \ + (void (*)(struct evbuffer *, void *))reqstruct##_marshal, \ + (void (*)(void *))rplystruct##_clear, \ + (int (*)(void *, struct evbuffer *))rplystruct##_unmarshal, \ + (void (*)(struct evrpc_status *, void *, void *, void *))cb, \ + cbarg) + +/** Generates the code for receiving and sending an RPC message + * + * EVRPC_GENERATE is used to create the code corresponding to sending + * and receiving a particular RPC message + * + * @param rpcname the name of the RPC + * @param reqstruct the name of the RPC request structure + * @param replystruct the name of the RPC reply structure + * @see EVRPC_HEADER() + */ +#define EVRPC_GENERATE(rpcname, reqstruct, rplystruct) \ + int evrpc_send_request_##rpcname(struct evrpc_pool *pool, \ + struct reqstruct *request, struct rplystruct *reply, \ + void (*cb)(struct evrpc_status *, \ + struct reqstruct *, struct rplystruct *, void *cbarg), \ + void *cbarg) { \ + return evrpc_send_request_generic(pool, request, reply, \ + (void (*)(struct evrpc_status *, void *, void *, void *))cb, \ + cbarg, \ + #rpcname, \ + (void (*)(struct evbuffer *, void *))reqstruct##_marshal, \ + (void (*)(void *))rplystruct##_clear, \ + (int (*)(void *, struct evbuffer *))rplystruct##_unmarshal); \ +} + +/** Provides access to the HTTP request object underlying an RPC + * + * Access to the underlying http object; can be used to look at headers or + * for getting the remote ip address + * + * @param rpc_req the rpc request structure provided to the server callback + * @return an struct evhttp_request object that can be inspected for + * HTTP headers or sender information. + */ +#define EVRPC_REQUEST_HTTP(rpc_req) (rpc_req)->http_req + +/** completes the server response to an rpc request */ +void evrpc_request_done(struct evrpc_req_generic *req); + +/** accessors for request and reply */ +void *evrpc_get_request(struct evrpc_req_generic *req); +void *evrpc_get_reply(struct evrpc_req_generic *req); + +/** Creates the reply to an RPC request + * + * EVRPC_REQUEST_DONE is used to answer a request; the reply is expected + * to have been filled in. The request and reply pointers become invalid + * after this call has finished. + * + * @param rpc_req the rpc request structure provided to the server callback + */ +#define EVRPC_REQUEST_DONE(rpc_req) do { \ + struct evrpc_req_generic *req_ = (struct evrpc_req_generic *)(rpc_req); \ + evrpc_request_done(req_); \ +} while (0) + + +struct evrpc_base; +struct evhttp; + +/* functions to start up the rpc system */ + +/** Creates a new rpc base from which RPC requests can be received + * + * @param server a pointer to an existing HTTP server + * @return a newly allocated evrpc_base struct + * @see evrpc_free() + */ +struct evrpc_base *evrpc_init(struct evhttp *server); + +/** + * Frees the evrpc base + * + * For now, you are responsible for making sure that no rpcs are ongoing. + * + * @param base the evrpc_base object to be freed + * @see evrpc_init + */ +void evrpc_free(struct evrpc_base *base); + +/** register RPCs with the HTTP Server + * + * registers a new RPC with the HTTP server, each RPC needs to have + * a unique name under which it can be identified. + * + * @param base the evrpc_base structure in which the RPC should be + * registered. + * @param name the name of the RPC + * @param request the name of the RPC request structure + * @param reply the name of the RPC reply structure + * @param callback the callback that should be invoked when the RPC + * is received. The callback has the following prototype + * void (*callback)(EVRPC_STRUCT(Message)* rpc, void *arg) + * @param cbarg an additional parameter that can be passed to the callback. + * The parameter can be used to carry around state. + */ +#define EVRPC_REGISTER(base, name, request, reply, callback, cbarg) \ + evrpc_register_generic(base, #name, \ + (void (*)(struct evrpc_req_generic *, void *))callback, cbarg, \ + (void *(*)(void *))request##_new, NULL, \ + (void (*)(void *))request##_free, \ + (int (*)(void *, struct evbuffer *))request##_unmarshal, \ + (void *(*)(void *))reply##_new, NULL, \ + (void (*)(void *))reply##_free, \ + (int (*)(void *))reply##_complete, \ + (void (*)(struct evbuffer *, void *))reply##_marshal) + +/** + Low level function for registering an RPC with a server. + + Use EVRPC_REGISTER() instead. + + @see EVRPC_REGISTER() +*/ +int evrpc_register_rpc(struct evrpc_base *, struct evrpc *, + void (*)(struct evrpc_req_generic*, void *), void *); + +/** + * Unregisters an already registered RPC + * + * @param base the evrpc_base object from which to unregister an RPC + * @param name the name of the rpc to unregister + * @return -1 on error or 0 when successful. + * @see EVRPC_REGISTER() + */ +#define EVRPC_UNREGISTER(base, name) evrpc_unregister_rpc((base), #name) + +int evrpc_unregister_rpc(struct evrpc_base *base, const char *name); + +/* + * Client-side RPC support + */ + +struct evhttp_connection; +struct evrpc_status; + +/** launches an RPC and sends it to the server + * + * EVRPC_MAKE_REQUEST() is used by the client to send an RPC to the server. + * + * @param name the name of the RPC + * @param pool the evrpc_pool that contains the connection objects over which + * the request should be sent. + * @param request a pointer to the RPC request structure - it contains the + * data to be sent to the server. + * @param reply a pointer to the RPC reply structure. It is going to be filled + * if the request was answered successfully + * @param cb the callback to invoke when the RPC request has been answered + * @param cbarg an additional argument to be passed to the client + * @return 0 on success, -1 on failure + */ +#define EVRPC_MAKE_REQUEST(name, pool, request, reply, cb, cbarg) \ + evrpc_send_request_##name((pool), (request), (reply), (cb), (cbarg)) + +/** + Makes an RPC request based on the provided context. + + This is a low-level function and should not be used directly + unless a custom context object is provided. Use EVRPC_MAKE_REQUEST() + instead. + + @param ctx a context from EVRPC_MAKE_CTX() + @returns 0 on success, -1 otherwise. + @see EVRPC_MAKE_REQUEST(), EVRPC_MAKE_CTX() +*/ +int evrpc_make_request(struct evrpc_request_wrapper *ctx); + +/** creates an rpc connection pool + * + * a pool has a number of connections associated with it. + * rpc requests are always made via a pool. + * + * @param base a pointer to an struct event_based object; can be left NULL + * in singled-threaded applications + * @return a newly allocated struct evrpc_pool object + * @see evrpc_pool_free() + */ +struct evrpc_pool *evrpc_pool_new(struct event_base *base); +/** frees an rpc connection pool + * + * @param pool a pointer to an evrpc_pool allocated via evrpc_pool_new() + * @see evrpc_pool_new() + */ +void evrpc_pool_free(struct evrpc_pool *pool); + +/** + * Adds a connection over which rpc can be dispatched to the pool. + * + * The connection object must have been newly created. + * + * @param pool the pool to which to add the connection + * @param evcon the connection to add to the pool. + */ +void evrpc_pool_add_connection(struct evrpc_pool *pool, + struct evhttp_connection *evcon); + +/** + * Removes a connection from the pool. + * + * The connection object must have been newly created. + * + * @param pool the pool from which to remove the connection + * @param evcon the connection to remove from the pool. + */ +void evrpc_pool_remove_connection(struct evrpc_pool *pool, + struct evhttp_connection *evcon); + +/** + * Sets the timeout in secs after which a request has to complete. The + * RPC is completely aborted if it does not complete by then. Setting + * the timeout to 0 means that it never timeouts and can be used to + * implement callback type RPCs. + * + * Any connection already in the pool will be updated with the new + * timeout. Connections added to the pool after set_timeout has be + * called receive the pool timeout only if no timeout has been set + * for the connection itself. + * + * @param pool a pointer to a struct evrpc_pool object + * @param timeout_in_secs the number of seconds after which a request should + * timeout and a failure be returned to the callback. + */ +void evrpc_pool_set_timeout(struct evrpc_pool *pool, int timeout_in_secs); + +/** + * Hooks for changing the input and output of RPCs; this can be used to + * implement compression, authentication, encryption, ... + */ + +enum EVRPC_HOOK_TYPE { + EVRPC_INPUT, /**< apply the function to an input hook */ + EVRPC_OUTPUT /**< apply the function to an output hook */ +}; + +#ifndef _WIN32 +/** Deprecated alias for EVRPC_INPUT. Not available on windows, where it + * conflicts with platform headers. */ +#define INPUT EVRPC_INPUT +/** Deprecated alias for EVRPC_OUTPUT. Not available on windows, where it + * conflicts with platform headers. */ +#define OUTPUT EVRPC_OUTPUT +#endif + +/** + * Return value from hook processing functions + */ + +enum EVRPC_HOOK_RESULT { + EVRPC_TERMINATE = -1, /**< indicates the rpc should be terminated */ + EVRPC_CONTINUE = 0, /**< continue processing the rpc */ + EVRPC_PAUSE = 1 /**< pause processing request until resumed */ +}; + +/** adds a processing hook to either an rpc base or rpc pool + * + * If a hook returns TERMINATE, the processing is aborted. On CONTINUE, + * the request is immediately processed after the hook returns. If the + * hook returns PAUSE, request processing stops until evrpc_resume_request() + * has been called. + * + * The add functions return handles that can be used for removing hooks. + * + * @param vbase a pointer to either struct evrpc_base or struct evrpc_pool + * @param hook_type either INPUT or OUTPUT + * @param cb the callback to call when the hook is activated + * @param cb_arg an additional argument for the callback + * @return a handle to the hook so it can be removed later + * @see evrpc_remove_hook() + */ +void *evrpc_add_hook(void *vbase, + enum EVRPC_HOOK_TYPE hook_type, + int (*cb)(void *, struct evhttp_request *, struct evbuffer *, void *), + void *cb_arg); + +/** removes a previously added hook + * + * @param vbase a pointer to either struct evrpc_base or struct evrpc_pool + * @param hook_type either INPUT or OUTPUT + * @param handle a handle returned by evrpc_add_hook() + * @return 1 on success or 0 on failure + * @see evrpc_add_hook() + */ +int evrpc_remove_hook(void *vbase, + enum EVRPC_HOOK_TYPE hook_type, + void *handle); + +/** resume a paused request + * + * @param vbase a pointer to either struct evrpc_base or struct evrpc_pool + * @param ctx the context pointer provided to the original hook call + */ +int +evrpc_resume_request(void *vbase, void *ctx, enum EVRPC_HOOK_RESULT res); + +/** adds meta data to request + * + * evrpc_hook_add_meta() allows hooks to add meta data to a request. for + * a client request, the meta data can be inserted by an outgoing request hook + * and retrieved by the incoming request hook. + * + * @param ctx the context provided to the hook call + * @param key a NUL-terminated c-string + * @param data the data to be associated with the key + * @param data_size the size of the data + */ +void evrpc_hook_add_meta(void *ctx, const char *key, + const void *data, size_t data_size); + +/** retrieves meta data previously associated + * + * evrpc_hook_find_meta() can be used to retrieve meta data associated to a + * request by a previous hook. + * @param ctx the context provided to the hook call + * @param key a NUL-terminated c-string + * @param data pointer to a data pointer that will contain the retrieved data + * @param data_size pointer to the size of the data + * @return 0 on success or -1 on failure + */ +int evrpc_hook_find_meta(void *ctx, const char *key, + void **data, size_t *data_size); + +/** + * returns the connection object associated with the request + * + * @param ctx the context provided to the hook call + * @return a pointer to the evhttp_connection object + */ +struct evhttp_connection *evrpc_hook_get_connection(void *ctx); + +/** + Function for sending a generic RPC request. + + Do not call this function directly, use EVRPC_MAKE_REQUEST() instead. + + @see EVRPC_MAKE_REQUEST() + */ +int evrpc_send_request_generic(struct evrpc_pool *pool, + void *request, void *reply, + void (*cb)(struct evrpc_status *, void *, void *, void *), + void *cb_arg, + const char *rpcname, + void (*req_marshal)(struct evbuffer *, void *), + void (*rpl_clear)(void *), + int (*rpl_unmarshal)(void *, struct evbuffer *)); + +/** + Function for registering a generic RPC with the RPC base. + + Do not call this function directly, use EVRPC_REGISTER() instead. + + @see EVRPC_REGISTER() + */ +int +evrpc_register_generic(struct evrpc_base *base, const char *name, + void (*callback)(struct evrpc_req_generic *, void *), void *cbarg, + void *(*req_new)(void *), void *req_new_arg, void (*req_free)(void *), + int (*req_unmarshal)(void *, struct evbuffer *), + void *(*rpl_new)(void *), void *rpl_new_arg, void (*rpl_free)(void *), + int (*rpl_complete)(void *), + void (*rpl_marshal)(struct evbuffer *, void *)); + +/** accessors for obscure and undocumented functionality */ +struct evrpc_pool* evrpc_request_get_pool(struct evrpc_request_wrapper *ctx); +void evrpc_request_set_pool(struct evrpc_request_wrapper *ctx, + struct evrpc_pool *pool); +void evrpc_request_set_cb(struct evrpc_request_wrapper *ctx, + void (*cb)(struct evrpc_status*, void *request, void *reply, void *arg), + void *cb_arg); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_RPC_H_INCLUDED_ */ diff --git a/src/components/libevent/rpc_compat.h b/src/components/libevent/rpc_compat.h new file mode 100644 index 0000000..8d8334d --- /dev/null +++ b/src/components/libevent/rpc_compat.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2006-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_RPC_COMPAT_H_INCLUDED_ +#define EVENT2_RPC_COMPAT_H_INCLUDED_ + +/** @file event2/rpc_compat.h + + Deprecated versions of the functions in rpc.h: provided only for + backwards compatibility. + + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** backwards compatible accessors that work only with gcc */ +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + +#undef EVTAG_ASSIGN +#undef EVTAG_GET +#undef EVTAG_ADD + +#define EVTAG_ASSIGN(msg, member, args...) \ + (*(msg)->base->member##_assign)(msg, ## args) +#define EVTAG_GET(msg, member, args...) \ + (*(msg)->base->member##_get)(msg, ## args) +#define EVTAG_ADD(msg, member, args...) \ + (*(msg)->base->member##_add)(msg, ## args) +#endif +#define EVTAG_LEN(msg, member) ((msg)->member##_length) + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_EVENT_COMPAT_H_INCLUDED_ */ diff --git a/src/components/libevent/rpc_struct.h b/src/components/libevent/rpc_struct.h new file mode 100644 index 0000000..8f691f4 --- /dev/null +++ b/src/components/libevent/rpc_struct.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2006-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_RPC_STRUCT_H_INCLUDED_ +#define EVENT2_RPC_STRUCT_H_INCLUDED_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file event2/rpc_struct.h + + Structures used by rpc.h. Using these structures directly may harm + forward compatibility: be careful! + + */ + +/** + * provides information about the completed RPC request. + */ +struct evrpc_status { +#define EVRPC_STATUS_ERR_NONE 0 +#define EVRPC_STATUS_ERR_TIMEOUT 1 +#define EVRPC_STATUS_ERR_BADPAYLOAD 2 +#define EVRPC_STATUS_ERR_UNSTARTED 3 +#define EVRPC_STATUS_ERR_HOOKABORTED 4 + int error; + + /* for looking at headers or other information */ + struct evhttp_request *http_req; +}; + +/* the structure below needs to be synchronized with evrpc_req_generic */ + +/* Encapsulates a request */ +struct evrpc { + TAILQ_ENTRY(evrpc) next; + + /* the URI at which the request handler lives */ + const char* uri; + + /* creates a new request structure */ + void *(*request_new)(void *); + void *request_new_arg; + + /* frees the request structure */ + void (*request_free)(void *); + + /* unmarshals the buffer into the proper request structure */ + int (*request_unmarshal)(void *, struct evbuffer *); + + /* creates a new reply structure */ + void *(*reply_new)(void *); + void *reply_new_arg; + + /* frees the reply structure */ + void (*reply_free)(void *); + + /* verifies that the reply is valid */ + int (*reply_complete)(void *); + + /* marshals the reply into a buffer */ + void (*reply_marshal)(struct evbuffer*, void *); + + /* the callback invoked for each received rpc */ + void (*cb)(struct evrpc_req_generic *, void *); + void *cb_arg; + + /* reference for further configuration */ + struct evrpc_base *base; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_RPC_STRUCT_H_INCLUDED_ */ diff --git a/src/components/libevent/tag.h b/src/components/libevent/tag.h new file mode 100644 index 0000000..48e5e91 --- /dev/null +++ b/src/components/libevent/tag.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_TAG_H_INCLUDED_ +#define EVENT2_TAG_H_INCLUDED_ + +/** @file event2/tag.h + + Helper functions for reading and writing tagged data onto buffers. + + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif + +/* For int types. */ +#include + +struct evbuffer; + +/* + * Marshaling tagged data - We assume that all tags are inserted in their + * numeric order - so that unknown tags will always be higher than the + * known ones - and we can just ignore the end of an event buffer. + */ + +EVENT2_EXPORT_SYMBOL +void evtag_init(void); + +/** + Unmarshals the header and returns the length of the payload + + @param evbuf the buffer from which to unmarshal data + @param ptag a pointer in which the tag id is being stored + @returns -1 on failure or the number of bytes in the remaining payload. +*/ +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal_header(struct evbuffer *evbuf, ev_uint32_t *ptag); + +EVENT2_EXPORT_SYMBOL +void evtag_marshal(struct evbuffer *evbuf, ev_uint32_t tag, const void *data, + ev_uint32_t len); +EVENT2_EXPORT_SYMBOL +void evtag_marshal_buffer(struct evbuffer *evbuf, ev_uint32_t tag, + struct evbuffer *data); + +/** + Encode an integer and store it in an evbuffer. + + We encode integers by nybbles; the first nibble contains the number + of significant nibbles - 1; this allows us to encode up to 64-bit + integers. This function is byte-order independent. + + @param evbuf evbuffer to store the encoded number + @param number a 32-bit integer + */ +EVENT2_EXPORT_SYMBOL +void evtag_encode_int(struct evbuffer *evbuf, ev_uint32_t number); +EVENT2_EXPORT_SYMBOL +void evtag_encode_int64(struct evbuffer *evbuf, ev_uint64_t number); + +EVENT2_EXPORT_SYMBOL +void evtag_marshal_int(struct evbuffer *evbuf, ev_uint32_t tag, + ev_uint32_t integer); +EVENT2_EXPORT_SYMBOL +void evtag_marshal_int64(struct evbuffer *evbuf, ev_uint32_t tag, + ev_uint64_t integer); + +EVENT2_EXPORT_SYMBOL +void evtag_marshal_string(struct evbuffer *buf, ev_uint32_t tag, + const char *string); + +EVENT2_EXPORT_SYMBOL +void evtag_marshal_timeval(struct evbuffer *evbuf, ev_uint32_t tag, + struct timeval *tv); + +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal(struct evbuffer *src, ev_uint32_t *ptag, + struct evbuffer *dst); +EVENT2_EXPORT_SYMBOL +int evtag_peek(struct evbuffer *evbuf, ev_uint32_t *ptag); +EVENT2_EXPORT_SYMBOL +int evtag_peek_length(struct evbuffer *evbuf, ev_uint32_t *plength); +EVENT2_EXPORT_SYMBOL +int evtag_payload_length(struct evbuffer *evbuf, ev_uint32_t *plength); +EVENT2_EXPORT_SYMBOL +int evtag_consume(struct evbuffer *evbuf); + +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal_int(struct evbuffer *evbuf, ev_uint32_t need_tag, + ev_uint32_t *pinteger); +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal_int64(struct evbuffer *evbuf, ev_uint32_t need_tag, + ev_uint64_t *pinteger); + +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal_fixed(struct evbuffer *src, ev_uint32_t need_tag, + void *data, size_t len); + +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal_string(struct evbuffer *evbuf, ev_uint32_t need_tag, + char **pstring); + +EVENT2_EXPORT_SYMBOL +int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev_uint32_t need_tag, + struct timeval *ptv); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_TAG_H_INCLUDED_ */ diff --git a/src/components/libevent/tag_compat.h b/src/components/libevent/tag_compat.h new file mode 100644 index 0000000..a276c0d --- /dev/null +++ b/src/components/libevent/tag_compat.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_TAG_COMPAT_H_INCLUDED_ +#define EVENT2_TAG_COMPAT_H_INCLUDED_ + +/** @file event2/tag_compat.h + + Obsolete/deprecated functions from tag.h; provided only for backwards + compatibility. + */ + +/** + @name Misnamed functions + + @deprecated These macros are deprecated because their names don't follow + Libevent's naming conventions. Use evtag_encode_int and + evtag_encode_int64 instead. + + @{ +*/ +#define encode_int(evbuf, number) evtag_encode_int((evbuf), (number)) +#define encode_int64(evbuf, number) evtag_encode_int64((evbuf), (number)) +/**@}*/ + +#endif /* EVENT2_TAG_H_INCLUDED_ */ diff --git a/src/components/libevent/thread.h b/src/components/libevent/thread.h new file mode 100644 index 0000000..9b2ba62 --- /dev/null +++ b/src/components/libevent/thread.h @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2008-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_THREAD_H_INCLUDED_ +#define EVENT2_THREAD_H_INCLUDED_ + +/** @file event2/thread.h + + Functions for multi-threaded applications using Libevent. + + When using a multi-threaded application in which multiple threads + add and delete events from a single event base, Libevent needs to + lock its data structures. + + Like the memory-management function hooks, all of the threading functions + _must_ be set up before an event_base is created if you want the base to + use them. + + Most programs will either be using Windows threads or Posix threads. You + can configure Libevent to use one of these event_use_windows_threads() or + event_use_pthreads() respectively. If you're using another threading + library, you'll need to configure threading functions manually using + evthread_set_lock_callbacks() and evthread_set_condition_callbacks(). + + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** + @name Flags passed to lock functions + + @{ +*/ +/** A flag passed to a locking callback when the lock was allocated as a + * read-write lock, and we want to acquire or release the lock for writing. */ +#define EVTHREAD_WRITE 0x04 +/** A flag passed to a locking callback when the lock was allocated as a + * read-write lock, and we want to acquire or release the lock for reading. */ +#define EVTHREAD_READ 0x08 +/** A flag passed to a locking callback when we don't want to block waiting + * for the lock; if we can't get the lock immediately, we will instead + * return nonzero from the locking callback. */ +#define EVTHREAD_TRY 0x10 +/**@}*/ + +#if !defined(EVENT__DISABLE_THREAD_SUPPORT) || defined(EVENT_IN_DOXYGEN_) + +#define EVTHREAD_LOCK_API_VERSION 1 + +/** + @name Types of locks + + @{*/ +/** A recursive lock is one that can be acquired multiple times at once by the + * same thread. No other process can allocate the lock until the thread that + * has been holding it has unlocked it as many times as it locked it. */ +#define EVTHREAD_LOCKTYPE_RECURSIVE 1 +/* A read-write lock is one that allows multiple simultaneous readers, but + * where any one writer excludes all other writers and readers. */ +#define EVTHREAD_LOCKTYPE_READWRITE 2 +/**@}*/ + +/** This structure describes the interface a threading library uses for + * locking. It's used to tell evthread_set_lock_callbacks() how to use + * locking on this platform. + */ +struct evthread_lock_callbacks { + /** The current version of the locking API. Set this to + * EVTHREAD_LOCK_API_VERSION */ + int lock_api_version; + /** Which kinds of locks does this version of the locking API + * support? A bitfield of EVTHREAD_LOCKTYPE_RECURSIVE and + * EVTHREAD_LOCKTYPE_READWRITE. + * + * (Note that RECURSIVE locks are currently mandatory, and + * READWRITE locks are not currently used.) + **/ + unsigned supported_locktypes; + /** Function to allocate and initialize new lock of type 'locktype'. + * Returns NULL on failure. */ + void *(*alloc)(unsigned locktype); + /** Funtion to release all storage held in 'lock', which was created + * with type 'locktype'. */ + void (*free)(void *lock, unsigned locktype); + /** Acquire an already-allocated lock at 'lock' with mode 'mode'. + * Returns 0 on success, and nonzero on failure. */ + int (*lock)(unsigned mode, void *lock); + /** Release a lock at 'lock' using mode 'mode'. Returns 0 on success, + * and nonzero on failure. */ + int (*unlock)(unsigned mode, void *lock); +}; + +/** Sets a group of functions that Libevent should use for locking. + * For full information on the required callback API, see the + * documentation for the individual members of evthread_lock_callbacks. + * + * Note that if you're using Windows or the Pthreads threading library, you + * probably shouldn't call this function; instead, use + * evthread_use_windows_threads() or evthread_use_posix_threads() if you can. + */ +EVENT2_EXPORT_SYMBOL +int evthread_set_lock_callbacks(const struct evthread_lock_callbacks *); + +#define EVTHREAD_CONDITION_API_VERSION 1 + +struct timeval; + +/** This structure describes the interface a threading library uses for + * condition variables. It's used to tell evthread_set_condition_callbacks + * how to use locking on this platform. + */ +struct evthread_condition_callbacks { + /** The current version of the conditions API. Set this to + * EVTHREAD_CONDITION_API_VERSION */ + int condition_api_version; + /** Function to allocate and initialize a new condition variable. + * Returns the condition variable on success, and NULL on failure. + * The 'condtype' argument will be 0 with this API version. + */ + void *(*alloc_condition)(unsigned condtype); + /** Function to free a condition variable. */ + void (*free_condition)(void *cond); + /** Function to signal a condition variable. If 'broadcast' is 1, all + * threads waiting on 'cond' should be woken; otherwise, only on one + * thread is worken. Should return 0 on success, -1 on failure. + * This function will only be called while holding the associated + * lock for the condition. + */ + int (*signal_condition)(void *cond, int broadcast); + /** Function to wait for a condition variable. The lock 'lock' + * will be held when this function is called; should be released + * while waiting for the condition to be come signalled, and + * should be held again when this function returns. + * If timeout is provided, it is interval of seconds to wait for + * the event to become signalled; if it is NULL, the function + * should wait indefinitely. + * + * The function should return -1 on error; 0 if the condition + * was signalled, or 1 on a timeout. */ + int (*wait_condition)(void *cond, void *lock, + const struct timeval *timeout); +}; + +/** Sets a group of functions that Libevent should use for condition variables. + * For full information on the required callback API, see the + * documentation for the individual members of evthread_condition_callbacks. + * + * Note that if you're using Windows or the Pthreads threading library, you + * probably shouldn't call this function; instead, use + * evthread_use_windows_threads() or evthread_use_pthreads() if you can. + */ +EVENT2_EXPORT_SYMBOL +int evthread_set_condition_callbacks( + const struct evthread_condition_callbacks *); + +/** + Sets the function for determining the thread id. + + @param base the event base for which to set the id function + @param id_fn the identify function Libevent should invoke to + determine the identity of a thread. +*/ +EVENT2_EXPORT_SYMBOL +void evthread_set_id_callback( + unsigned long (*id_fn)(void)); + +#if (defined(_WIN32) && !defined(EVENT__DISABLE_THREAD_SUPPORT)) || defined(EVENT_IN_DOXYGEN_) +/** Sets up Libevent for use with Windows builtin locking and thread ID + functions. Unavailable if Libevent is not built for Windows. + + @return 0 on success, -1 on failure. */ +EVENT2_EXPORT_SYMBOL +int evthread_use_windows_threads(void); +/** + Defined if Libevent was built with support for evthread_use_windows_threads() +*/ +#define EVTHREAD_USE_WINDOWS_THREADS_IMPLEMENTED 1 +#endif + +#if defined(EVENT__HAVE_PTHREADS) || defined(EVENT_IN_DOXYGEN_) +/** Sets up Libevent for use with Pthreads locking and thread ID functions. + Unavailable if Libevent is not build for use with pthreads. Requires + libraries to link against Libevent_pthreads as well as Libevent. + + @return 0 on success, -1 on failure. */ +EVENT2_EXPORT_SYMBOL +int evthread_use_pthreads(void); +/** Defined if Libevent was built with support for evthread_use_pthreads() */ +#define EVTHREAD_USE_PTHREADS_IMPLEMENTED 1 + +#endif + +/** Enable debugging wrappers around the current lock callbacks. If Libevent + * makes one of several common locking errors, exit with an assertion failure. + * + * If you're going to call this function, you must do so before any locks are + * allocated. + **/ +EVENT2_EXPORT_SYMBOL +void evthread_enable_lock_debugging(void); + +/* Old (misspelled) version: This is deprecated; use + * evthread_enable_log_debugging instead. */ +EVENT2_EXPORT_SYMBOL +void evthread_enable_lock_debuging(void); + +#endif /* EVENT__DISABLE_THREAD_SUPPORT */ + +struct event_base; +/** Make sure it's safe to tell an event base to wake up from another thread + or a signal handler. + + You shouldn't need to call this by hand; configuring the base with thread + support should be necessary and sufficient. + + @return 0 on success, -1 on failure. + */ +EVENT2_EXPORT_SYMBOL +int evthread_make_base_notifiable(struct event_base *base); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT2_THREAD_H_INCLUDED_ */ diff --git a/src/components/libevent/time-internal.h b/src/components/libevent/time-internal.h new file mode 100644 index 0000000..9b0ce9f --- /dev/null +++ b/src/components/libevent/time-internal.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2000-2007 Niels Provos + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef TIME_INTERNAL_H_INCLUDED_ +#define TIME_INTERNAL_H_INCLUDED_ + +#include "event-config.h" +#include "evconfig-private.h" + +#ifdef EVENT__HAVE_MACH_MACH_TIME_H +/* For mach_timebase_info */ +#include +#endif + +#include + +#include "util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(EVENT__HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC) +#define HAVE_POSIX_MONOTONIC +#elif defined(EVENT__HAVE_MACH_ABSOLUTE_TIME) +#define HAVE_MACH_MONOTONIC +#elif defined(_WIN32) +#define HAVE_WIN32_MONOTONIC +#else +#define HAVE_FALLBACK_MONOTONIC +#endif + +long evutil_tv_to_msec_(const struct timeval *tv); +void evutil_usleep_(const struct timeval *tv); + +#ifdef _WIN32 +typedef ULONGLONG (WINAPI *ev_GetTickCount_func)(void); +#endif + +struct evutil_monotonic_timer { + +#ifdef HAVE_MACH_MONOTONIC + struct mach_timebase_info mach_timebase_units; +#endif + +#ifdef HAVE_POSIX_MONOTONIC + int monotonic_clock; +#endif + +#ifdef HAVE_WIN32_MONOTONIC + ev_GetTickCount_func GetTickCount64_fn; + ev_GetTickCount_func GetTickCount_fn; + ev_uint64_t last_tick_count; + ev_uint64_t adjust_tick_count; + + ev_uint64_t first_tick; + ev_uint64_t first_counter; + double usec_per_count; + int use_performance_counter; +#endif + + struct timeval adjust_monotonic_clock; + struct timeval last_time; +}; + +int evutil_configure_monotonic_time_(struct evutil_monotonic_timer *mt, + int flags); +int evutil_gettime_monotonic_(struct evutil_monotonic_timer *mt, struct timeval *tv); + + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT_INTERNAL_H_INCLUDED_ */ diff --git a/src/components/libevent/util-internal.h b/src/components/libevent/util-internal.h new file mode 100644 index 0000000..d317d8c --- /dev/null +++ b/src/components/libevent/util-internal.h @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef UTIL_INTERNAL_H_INCLUDED_ +#define UTIL_INTERNAL_H_INCLUDED_ + +#include "event-config.h" +#include "evconfig-private.h" + +#include + +/* For EVUTIL_ASSERT */ +#include "log-internal.h" +#include +#include +#ifdef EVENT__HAVE_SYS_SOCKET_H +#include +#endif +#ifdef EVENT__HAVE_SYS_EVENTFD_H +#include +#endif +#include "util.h" + +#include "time-internal.h" +#include "ipv6-internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If we need magic to say "inline", get it for free internally. */ +#ifdef EVENT__inline +#define inline EVENT__inline +#endif +#if defined(EVENT____func__) && !defined(__func__) +#define __func__ EVENT____func__ +#endif + +/* A good no-op to use in macro definitions. */ +#define EVUTIL_NIL_STMT_ ((void)0) +/* A no-op that tricks the compiler into thinking a condition is used while + * definitely not making any code for it. Used to compile out asserts while + * avoiding "unused variable" warnings. The "!" forces the compiler to + * do the sizeof() on an int, in case "condition" is a bitfield value. + */ +#define EVUTIL_NIL_CONDITION_(condition) do { \ + (void)sizeof(!(condition)); \ +} while(0) + +/* Internal use only: macros to match patterns of error codes in a + cross-platform way. We need these macros because of two historical + reasons: first, nonblocking IO functions are generally written to give an + error on the "blocked now, try later" case, so sometimes an error from a + read, write, connect, or accept means "no error; just wait for more + data," and we need to look at the error code. Second, Windows defines + a different set of error codes for sockets. */ + +#ifndef _WIN32 + +#if EAGAIN == EWOULDBLOCK +#define EVUTIL_ERR_IS_EAGAIN(e) \ + ((e) == EAGAIN) +#else +#define EVUTIL_ERR_IS_EAGAIN(e) \ + ((e) == EAGAIN || (e) == EWOULDBLOCK) +#endif + +/* True iff e is an error that means a read/write operation can be retried. */ +#define EVUTIL_ERR_RW_RETRIABLE(e) \ + ((e) == EINTR || EVUTIL_ERR_IS_EAGAIN(e)) +/* True iff e is an error that means an connect can be retried. */ +#define EVUTIL_ERR_CONNECT_RETRIABLE(e) \ + ((e) == EINTR || (e) == EINPROGRESS) +/* True iff e is an error that means a accept can be retried. */ +#define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \ + ((e) == EINTR || EVUTIL_ERR_IS_EAGAIN(e) || (e) == ECONNABORTED) + +/* True iff e is an error that means the connection was refused */ +#define EVUTIL_ERR_CONNECT_REFUSED(e) \ + ((e) == ECONNREFUSED) + +#else +/* Win32 */ + +#define EVUTIL_ERR_IS_EAGAIN(e) \ + ((e) == WSAEWOULDBLOCK || (e) == EAGAIN) + +#define EVUTIL_ERR_RW_RETRIABLE(e) \ + ((e) == WSAEWOULDBLOCK || \ + (e) == WSAEINTR) + +#define EVUTIL_ERR_CONNECT_RETRIABLE(e) \ + ((e) == WSAEWOULDBLOCK || \ + (e) == WSAEINTR || \ + (e) == WSAEINPROGRESS || \ + (e) == WSAEINVAL) + +#define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \ + EVUTIL_ERR_RW_RETRIABLE(e) + +#define EVUTIL_ERR_CONNECT_REFUSED(e) \ + ((e) == WSAECONNREFUSED) + +#endif + +/* Arguments for shutdown() */ +#ifdef SHUT_RD +#define EVUTIL_SHUT_RD SHUT_RD +#else +#define EVUTIL_SHUT_RD 0 +#endif +#ifdef SHUT_WR +#define EVUTIL_SHUT_WR SHUT_WR +#else +#define EVUTIL_SHUT_WR 1 /* SD_SEND */ +#endif +#ifdef SHUT_BOTH +#define EVUTIL_SHUT_BOTH SHUT_BOTH +#else +#define EVUTIL_SHUT_BOTH 2 +#endif + +/* Helper: Verify that all the elements in 'dlist' are internally consistent. + * Checks for circular lists and bad prev/next pointers. + * + * Example usage: + * EVUTIL_ASSERT_LIST_OK(eventlist, event, ev_next); + */ +#define EVUTIL_ASSERT_LIST_OK(dlist, type, field) do { \ + struct type *elm1, *elm2, **nextp; \ + if (LIST_EMPTY((dlist))) \ + break; \ + \ + /* Check list for circularity using Floyd's */ \ + /* 'Tortoise and Hare' algorithm */ \ + elm1 = LIST_FIRST((dlist)); \ + elm2 = LIST_NEXT(elm1, field); \ + while (elm1 && elm2) { \ + EVUTIL_ASSERT(elm1 != elm2); \ + elm1 = LIST_NEXT(elm1, field); \ + elm2 = LIST_NEXT(elm2, field); \ + if (!elm2) \ + break; \ + EVUTIL_ASSERT(elm1 != elm2); \ + elm2 = LIST_NEXT(elm2, field); \ + } \ + \ + /* Now check next and prev pointers for consistency. */ \ + nextp = &LIST_FIRST((dlist)); \ + elm1 = LIST_FIRST((dlist)); \ + while (elm1) { \ + EVUTIL_ASSERT(*nextp == elm1); \ + EVUTIL_ASSERT(nextp == elm1->field.le_prev); \ + nextp = &LIST_NEXT(elm1, field); \ + elm1 = *nextp; \ + } \ + } while (0) + +/* Helper: Verify that all the elements in a TAILQ are internally consistent. + * Checks for circular lists and bad prev/next pointers. + * + * Example usage: + * EVUTIL_ASSERT_TAILQ_OK(activelist, event, ev_active_next); + */ +#define EVUTIL_ASSERT_TAILQ_OK(tailq, type, field) do { \ + struct type *elm1, *elm2, **nextp; \ + if (TAILQ_EMPTY((tailq))) \ + break; \ + \ + /* Check list for circularity using Floyd's */ \ + /* 'Tortoise and Hare' algorithm */ \ + elm1 = TAILQ_FIRST((tailq)); \ + elm2 = TAILQ_NEXT(elm1, field); \ + while (elm1 && elm2) { \ + EVUTIL_ASSERT(elm1 != elm2); \ + elm1 = TAILQ_NEXT(elm1, field); \ + elm2 = TAILQ_NEXT(elm2, field); \ + if (!elm2) \ + break; \ + EVUTIL_ASSERT(elm1 != elm2); \ + elm2 = TAILQ_NEXT(elm2, field); \ + } \ + \ + /* Now check next and prev pointers for consistency. */ \ + nextp = &TAILQ_FIRST((tailq)); \ + elm1 = TAILQ_FIRST((tailq)); \ + while (elm1) { \ + EVUTIL_ASSERT(*nextp == elm1); \ + EVUTIL_ASSERT(nextp == elm1->field.tqe_prev); \ + nextp = &TAILQ_NEXT(elm1, field); \ + elm1 = *nextp; \ + } \ + EVUTIL_ASSERT(nextp == (tailq)->tqh_last); \ + } while (0) + +/* Locale-independent replacements for some ctypes functions. Use these + * when you care about ASCII's notion of character types, because you are about + * to send those types onto the wire. + */ +int EVUTIL_ISALPHA_(char c); +int EVUTIL_ISALNUM_(char c); +int EVUTIL_ISSPACE_(char c); +int EVUTIL_ISDIGIT_(char c); +int EVUTIL_ISXDIGIT_(char c); +int EVUTIL_ISPRINT_(char c); +int EVUTIL_ISLOWER_(char c); +int EVUTIL_ISUPPER_(char c); +char EVUTIL_TOUPPER_(char c); +char EVUTIL_TOLOWER_(char c); + +/** Remove all trailing horizontal whitespace (space or tab) from the end of a + * string */ +void evutil_rtrim_lws_(char *); + + +/** Helper macro. If we know that a given pointer points to a field in a + structure, return a pointer to the structure itself. Used to implement + our half-baked C OO. Example: + + struct subtype { + int x; + struct supertype common; + int y; + }; + ... + void fn(struct supertype *super) { + struct subtype *sub = EVUTIL_UPCAST(super, struct subtype, common); + ... + } + */ +#define EVUTIL_UPCAST(ptr, type, field) \ + ((type *)(((char*)(ptr)) - evutil_offsetof(type, field))) + +/* As open(pathname, flags, mode), except that the file is always opened with + * the close-on-exec flag set. (And the mode argument is mandatory.) + */ +int evutil_open_closeonexec_(const char *pathname, int flags, unsigned mode); + +int evutil_read_file_(const char *filename, char **content_out, size_t *len_out, + int is_binary); + +int evutil_socket_connect_(evutil_socket_t *fd_ptr, const struct sockaddr *sa, int socklen); + +int evutil_socket_finished_connecting_(evutil_socket_t fd); + +int evutil_ersatz_socketpair_(int, int , int, evutil_socket_t[]); + +int evutil_resolve_(int family, const char *hostname, struct sockaddr *sa, + ev_socklen_t *socklen, int port); + +const char *evutil_getenv_(const char *name); + +/* Structure to hold the state of our weak random number generator. + */ +struct evutil_weakrand_state { + ev_uint32_t seed; +}; + +#define EVUTIL_WEAKRAND_MAX EV_INT32_MAX + +/* Initialize the state of a week random number generator based on 'seed'. If + * the seed is 0, construct a new seed based on not-very-strong platform + * entropy, like the PID and the time of day. + * + * This function, and the other evutil_weakrand* functions, are meant for + * speed, not security or statistical strength. If you need a RNG which an + * attacker can't predict, or which passes strong statistical tests, use the + * evutil_secure_rng* functions instead. + */ +ev_uint32_t evutil_weakrand_seed_(struct evutil_weakrand_state *state, ev_uint32_t seed); +/* Return a pseudorandom value between 0 and EVUTIL_WEAKRAND_MAX inclusive. + * Updates the state in 'seed' as needed -- this value must be protected by a + * lock. + */ +ev_int32_t evutil_weakrand_(struct evutil_weakrand_state *seed); +/* Return a pseudorandom value x such that 0 <= x < top. top must be no more + * than EVUTIL_WEAKRAND_MAX. Updates the state in 'seed' as needed -- this + * value must be proteced by a lock */ +ev_int32_t evutil_weakrand_range_(struct evutil_weakrand_state *seed, ev_int32_t top); + +/* Evaluates to the same boolean value as 'p', and hints to the compiler that + * we expect this value to be false. */ +#if defined(__GNUC__) && __GNUC__ >= 3 /* gcc 3.0 or later */ +#define EVUTIL_UNLIKELY(p) __builtin_expect(!!(p),0) +#else +#define EVUTIL_UNLIKELY(p) (p) +#endif + +/* Replacement for assert() that calls event_errx on failure. */ +#ifdef NDEBUG +#define EVUTIL_ASSERT(cond) EVUTIL_NIL_CONDITION_(cond) +#define EVUTIL_FAILURE_CHECK(cond) 0 +#else +#define EVUTIL_ASSERT(cond) \ + do { \ + if (EVUTIL_UNLIKELY(!(cond))) { \ + event_errx(EVENT_ERR_ABORT_, \ + "%s:%d: Assertion %s failed in %s", \ + __FILE__,__LINE__,#cond,__func__); \ + /* In case a user-supplied handler tries to */ \ + /* return control to us, log and abort here. */ \ + (void)fprintf(stderr, \ + "%s:%d: Assertion %s failed in %s", \ + __FILE__,__LINE__,#cond,__func__); \ + abort(); \ + } \ + } while (0) +#define EVUTIL_FAILURE_CHECK(cond) EVUTIL_UNLIKELY(cond) +#endif + +#ifndef EVENT__HAVE_STRUCT_SOCKADDR_STORAGE +/* Replacement for sockaddr storage that we can use internally on platforms + * that lack it. It is not space-efficient, but neither is sockaddr_storage. + */ +struct sockaddr_storage { + union { + struct sockaddr ss_sa; + struct sockaddr_in ss_sin; + struct sockaddr_in6 ss_sin6; + char ss_padding[128]; + } ss_union; +}; +#define ss_family ss_union.ss_sa.sa_family +#endif + +/* Internal addrinfo error code. This one is returned from only from + * evutil_getaddrinfo_common_, when we are sure that we'll have to hit a DNS + * server. */ +#define EVUTIL_EAI_NEED_RESOLVE -90002 + +struct evdns_base; +struct evdns_getaddrinfo_request; +typedef struct evdns_getaddrinfo_request* (*evdns_getaddrinfo_fn)( + struct evdns_base *base, + const char *nodename, const char *servname, + const struct evutil_addrinfo *hints_in, + void (*cb)(int, struct evutil_addrinfo *, void *), void *arg); +void evutil_set_evdns_getaddrinfo_fn_(evdns_getaddrinfo_fn fn); +typedef void (*evdns_getaddrinfo_cancel_fn)( + struct evdns_getaddrinfo_request *req); +void evutil_set_evdns_getaddrinfo_cancel_fn_(evdns_getaddrinfo_cancel_fn fn); + +struct evutil_addrinfo *evutil_new_addrinfo_(struct sockaddr *sa, + ev_socklen_t socklen, const struct evutil_addrinfo *hints); +struct evutil_addrinfo *evutil_addrinfo_append_(struct evutil_addrinfo *first, + struct evutil_addrinfo *append); +void evutil_adjust_hints_for_addrconfig_(struct evutil_addrinfo *hints); +int evutil_getaddrinfo_common_(const char *nodename, const char *servname, + struct evutil_addrinfo *hints, struct evutil_addrinfo **res, int *portnum); + +struct evdns_getaddrinfo_request *evutil_getaddrinfo_async_( + struct evdns_base *dns_base, + const char *nodename, const char *servname, + const struct evutil_addrinfo *hints_in, + void (*cb)(int, struct evutil_addrinfo *, void *), void *arg); +void evutil_getaddrinfo_cancel_async_(struct evdns_getaddrinfo_request *data); + +/** Return true iff sa is a looback address. (That is, it is 127.0.0.1/8, or + * ::1). */ +int evutil_sockaddr_is_loopback_(const struct sockaddr *sa); + + +/** + Formats a sockaddr sa into a string buffer of size outlen stored in out. + Returns a pointer to out. Always writes something into out, so it's safe + to use the output of this function without checking it for NULL. + */ +const char *evutil_format_sockaddr_port_(const struct sockaddr *sa, char *out, size_t outlen); + +int evutil_hex_char_to_int_(char c); + + +void evutil_free_secure_rng_globals_(void); +void evutil_free_globals_(void); + +#ifdef _WIN32 +HMODULE evutil_load_windows_system_library_(const TCHAR *library_name); +#endif + +#ifndef EV_SIZE_FMT +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) +#define EV_U64_FMT "%I64u" +#define EV_I64_FMT "%I64d" +#define EV_I64_ARG(x) ((__int64)(x)) +#define EV_U64_ARG(x) ((unsigned __int64)(x)) +#else +#define EV_U64_FMT "%llu" +#define EV_I64_FMT "%lld" +#define EV_I64_ARG(x) ((long long)(x)) +#define EV_U64_ARG(x) ((unsigned long long)(x)) +#endif +#endif + +#ifdef _WIN32 +#define EV_SOCK_FMT EV_I64_FMT +#define EV_SOCK_ARG(x) EV_I64_ARG((x)) +#else +#define EV_SOCK_FMT "%d" +#define EV_SOCK_ARG(x) (x) +#endif + +#if defined(__STDC__) && defined(__STDC_VERSION__) && !defined(__MINGW64_VERSION_MAJOR) +#if (__STDC_VERSION__ >= 199901L) +#define EV_SIZE_FMT "%zu" +#define EV_SSIZE_FMT "%zd" +#define EV_SIZE_ARG(x) (x) +#define EV_SSIZE_ARG(x) (x) +#endif +#endif + +#ifndef EV_SIZE_FMT +#if (EVENT__SIZEOF_SIZE_T <= EVENT__SIZEOF_LONG) +#define EV_SIZE_FMT "%lu" +#define EV_SSIZE_FMT "%ld" +#define EV_SIZE_ARG(x) ((unsigned long)(x)) +#define EV_SSIZE_ARG(x) ((long)(x)) +#else +#define EV_SIZE_FMT EV_U64_FMT +#define EV_SSIZE_FMT EV_I64_FMT +#define EV_SIZE_ARG(x) EV_U64_ARG(x) +#define EV_SSIZE_ARG(x) EV_I64_ARG(x) +#endif +#endif + +evutil_socket_t evutil_socket_(int domain, int type, int protocol); +evutil_socket_t evutil_accept4_(evutil_socket_t sockfd, struct sockaddr *addr, + ev_socklen_t *addrlen, int flags); + + /* used by one of the test programs.. */ +EVENT2_EXPORT_SYMBOL +int evutil_make_internal_pipe_(evutil_socket_t fd[2]); +evutil_socket_t evutil_eventfd_(unsigned initval, int flags); + +#ifdef SOCK_NONBLOCK +#define EVUTIL_SOCK_NONBLOCK SOCK_NONBLOCK +#else +#define EVUTIL_SOCK_NONBLOCK 0x4000000 +#endif +#ifdef SOCK_CLOEXEC +#define EVUTIL_SOCK_CLOEXEC SOCK_CLOEXEC +#else +#define EVUTIL_SOCK_CLOEXEC 0x80000000 +#endif +#ifdef EFD_NONBLOCK +#define EVUTIL_EFD_NONBLOCK EFD_NONBLOCK +#else +#define EVUTIL_EFD_NONBLOCK 0x4000 +#endif +#ifdef EFD_CLOEXEC +#define EVUTIL_EFD_CLOEXEC EFD_CLOEXEC +#else +#define EVUTIL_EFD_CLOEXEC 0x8000 +#endif + +void evutil_memclear_(void *mem, size_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/libevent/util.h b/src/components/libevent/util.h new file mode 100644 index 0000000..e6a8e73 --- /dev/null +++ b/src/components/libevent/util.h @@ -0,0 +1,866 @@ +/* + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_UTIL_H_INCLUDED_ +#define EVENT2_UTIL_H_INCLUDED_ + +/** @file event2/util.h + + Common convenience functions for cross-platform portability and + related socket manipulations. + + */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifdef EVENT__HAVE_SYS_TIME_H +#include +#endif +#ifdef EVENT__HAVE_STDINT_H +#include +#elif defined(EVENT__HAVE_INTTYPES_H) +#include +#endif +#ifdef EVENT__HAVE_SYS_TYPES_H +#include +#endif +#ifdef EVENT__HAVE_STDDEF_H +#include +#endif +#ifdef _MSC_VER +#include +#endif +#include +#ifdef EVENT__HAVE_NETDB_H +#if !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif +#include +#endif + +#ifdef _WIN32 +#include +#ifdef EVENT__HAVE_GETADDRINFO +/* for EAI_* definitions. */ +#include +#endif +#else +#ifdef EVENT__HAVE_ERRNO_H +#include +#endif +#include +#endif + +#include + +/* Some openbsd autoconf versions get the name of this macro wrong. */ +#if defined(EVENT__SIZEOF_VOID__) && !defined(EVENT__SIZEOF_VOID_P) +#define EVENT__SIZEOF_VOID_P EVENT__SIZEOF_VOID__ +#endif + +/** + * @name Standard integer types. + * + * Integer type definitions for types that are supposed to be defined in the + * C99-specified stdint.h. Shamefully, some platforms do not include + * stdint.h, so we need to replace it. (If you are on a platform like this, + * your C headers are now over 10 years out of date. You should bug them to + * do something about this.) + * + * We define: + * + *
+ *
ev_uint64_t, ev_uint32_t, ev_uint16_t, ev_uint8_t
+ *
unsigned integer types of exactly 64, 32, 16, and 8 bits + * respectively.
+ *
ev_int64_t, ev_int32_t, ev_int16_t, ev_int8_t
+ *
signed integer types of exactly 64, 32, 16, and 8 bits + * respectively.
+ *
ev_uintptr_t, ev_intptr_t
+ *
unsigned/signed integers large enough + * to hold a pointer without loss of bits.
+ *
ev_ssize_t
+ *
A signed type of the same size as size_t
+ *
ev_off_t
+ *
A signed type typically used to represent offsets within a + * (potentially large) file
+ * + * @{ + */ +#ifdef EVENT__HAVE_UINT64_T +#define ev_uint64_t uint64_t +#define ev_int64_t int64_t +#elif defined(_WIN32) +#define ev_uint64_t unsigned __int64 +#define ev_int64_t signed __int64 +#elif EVENT__SIZEOF_LONG_LONG == 8 +#define ev_uint64_t unsigned long long +#define ev_int64_t long long +#elif EVENT__SIZEOF_LONG == 8 +#define ev_uint64_t unsigned long +#define ev_int64_t long +#elif defined(EVENT_IN_DOXYGEN_) +#define ev_uint64_t ... +#define ev_int64_t ... +#else +#error "No way to define ev_uint64_t" +#endif + +#ifdef EVENT__HAVE_UINT32_T +#define ev_uint32_t uint32_t +#define ev_int32_t int32_t +#elif defined(_WIN32) +#define ev_uint32_t unsigned int +#define ev_int32_t signed int +#elif EVENT__SIZEOF_LONG == 4 +#define ev_uint32_t unsigned long +#define ev_int32_t signed long +#elif EVENT__SIZEOF_INT == 4 +#define ev_uint32_t unsigned int +#define ev_int32_t signed int +#elif defined(EVENT_IN_DOXYGEN_) +#define ev_uint32_t ... +#define ev_int32_t ... +#else +#error "No way to define ev_uint32_t" +#endif + +#ifdef EVENT__HAVE_UINT16_T +#define ev_uint16_t uint16_t +#define ev_int16_t int16_t +#elif defined(_WIN32) +#define ev_uint16_t unsigned short +#define ev_int16_t signed short +#elif EVENT__SIZEOF_INT == 2 +#define ev_uint16_t unsigned int +#define ev_int16_t signed int +#elif EVENT__SIZEOF_SHORT == 2 +#define ev_uint16_t unsigned short +#define ev_int16_t signed short +#elif defined(EVENT_IN_DOXYGEN_) +#define ev_uint16_t ... +#define ev_int16_t ... +#else +#error "No way to define ev_uint16_t" +#endif + +#ifdef EVENT__HAVE_UINT8_T +#define ev_uint8_t uint8_t +#define ev_int8_t int8_t +#elif defined(EVENT_IN_DOXYGEN_) +#define ev_uint8_t ... +#define ev_int8_t ... +#else +#define ev_uint8_t unsigned char +#define ev_int8_t signed char +#endif + +#ifdef EVENT__HAVE_UINTPTR_T +#define ev_uintptr_t uintptr_t +#define ev_intptr_t intptr_t +#elif EVENT__SIZEOF_VOID_P <= 4 +#define ev_uintptr_t ev_uint32_t +#define ev_intptr_t ev_int32_t +#elif EVENT__SIZEOF_VOID_P <= 8 +#define ev_uintptr_t ev_uint64_t +#define ev_intptr_t ev_int64_t +#elif defined(EVENT_IN_DOXYGEN_) +#define ev_uintptr_t ... +#define ev_intptr_t ... +#else +#error "No way to define ev_uintptr_t" +#endif + +#ifdef EVENT__ssize_t +#define ev_ssize_t EVENT__ssize_t +#else +#define ev_ssize_t ssize_t +#endif + +/* Note that we define ev_off_t based on the compile-time size of off_t that + * we used to build Libevent, and not based on the current size of off_t. + * (For example, we don't define ev_off_t to off_t.). We do this because + * some systems let you build your software with different off_t sizes + * at runtime, and so putting in any dependency on off_t would risk API + * mismatch. + */ +#ifdef _WIN32 +#define ev_off_t ev_int64_t +#elif EVENT__SIZEOF_OFF_T == 8 +#define ev_off_t ev_int64_t +#elif EVENT__SIZEOF_OFF_T == 4 +#define ev_off_t ev_int32_t +#elif defined(EVENT_IN_DOXYGEN_) +#define ev_off_t ... +#else +#define ev_off_t off_t +#endif +/**@}*/ + +/* Limits for integer types. + + We're making two assumptions here: + - The compiler does constant folding properly. + - The platform does signed arithmetic in two's complement. +*/ + +/** + @name Limits for integer types + + These macros hold the largest or smallest values possible for the + ev_[u]int*_t types. + + @{ +*/ +#ifndef EVENT__HAVE_STDINT_H +#define EV_UINT64_MAX ((((ev_uint64_t)0xffffffffUL) << 32) | 0xffffffffUL) +#define EV_INT64_MAX ((((ev_int64_t) 0x7fffffffL) << 32) | 0xffffffffL) +#define EV_INT64_MIN ((-EV_INT64_MAX) - 1) +#define EV_UINT32_MAX ((ev_uint32_t)0xffffffffUL) +#define EV_INT32_MAX ((ev_int32_t) 0x7fffffffL) +#define EV_INT32_MIN ((-EV_INT32_MAX) - 1) +#define EV_UINT16_MAX ((ev_uint16_t)0xffffUL) +#define EV_INT16_MAX ((ev_int16_t) 0x7fffL) +#define EV_INT16_MIN ((-EV_INT16_MAX) - 1) +#define EV_UINT8_MAX 255 +#define EV_INT8_MAX 127 +#define EV_INT8_MIN ((-EV_INT8_MAX) - 1) +#else +#define EV_UINT64_MAX UINT64_MAX +#define EV_INT64_MAX INT64_MAX +#define EV_INT64_MIN INT64_MIN +#define EV_UINT32_MAX UINT32_MAX +#define EV_INT32_MAX INT32_MAX +#define EV_INT32_MIN INT32_MIN +#define EV_UINT16_MAX UINT16_MAX +#define EV_INT16_MAX INT16_MAX +#define EV_UINT8_MAX UINT8_MAX +#define EV_INT8_MAX INT8_MAX +#define EV_INT8_MIN INT8_MIN +/** @} */ +#endif + + +/** + @name Limits for SIZE_T and SSIZE_T + + @{ +*/ +#if EVENT__SIZEOF_SIZE_T == 8 +#define EV_SIZE_MAX EV_UINT64_MAX +#define EV_SSIZE_MAX EV_INT64_MAX +#elif EVENT__SIZEOF_SIZE_T == 4 +#define EV_SIZE_MAX EV_UINT32_MAX +#define EV_SSIZE_MAX EV_INT32_MAX +#elif defined(EVENT_IN_DOXYGEN_) +#define EV_SIZE_MAX ... +#define EV_SSIZE_MAX ... +#else +#error "No way to define SIZE_MAX" +#endif + +#define EV_SSIZE_MIN ((-EV_SSIZE_MAX) - 1) +/**@}*/ + +#ifdef _WIN32 +#define ev_socklen_t int +#elif defined(EVENT__socklen_t) +#define ev_socklen_t EVENT__socklen_t +#else +#define ev_socklen_t socklen_t +#endif + +#ifdef EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY +#if !defined(EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY) \ + && !defined(ss_family) +#define ss_family __ss_family +#endif +#endif + +/** + * A type wide enough to hold the output of "socket()" or "accept()". On + * Windows, this is an intptr_t; elsewhere, it is an int. */ +#ifdef _WIN32 +#define evutil_socket_t intptr_t +#else +#define evutil_socket_t int +#endif + +/** + * Structure to hold information about a monotonic timer + * + * Use this with evutil_configure_monotonic_time() and + * evutil_gettime_monotonic(). + * + * This is an opaque structure; you can allocate one using + * evutil_monotonic_timer_new(). + * + * @see evutil_monotonic_timer_new(), evutil_monotonic_timer_free(), + * evutil_configure_monotonic_time(), evutil_gettime_monotonic() + */ +struct evutil_monotonic_timer +#ifdef EVENT_IN_DOXYGEN_ +{/*Empty body so that doxygen will generate documentation here.*/} +#endif +; + +#define EV_MONOT_PRECISE 1 +#define EV_MONOT_FALLBACK 2 + +/** Format a date string using RFC 1123 format (used in HTTP). + * If `tm` is NULL, current system's time will be used. + * The number of characters written will be returned. + * One should check if the return value is smaller than `datelen` to check if + * the result is truncated or not. + */ +EVENT2_EXPORT_SYMBOL int +evutil_date_rfc1123(char *date, const size_t datelen, const struct tm *tm); + +/** Allocate a new struct evutil_monotonic_timer for use with the + * evutil_configure_monotonic_time() and evutil_gettime_monotonic() + * functions. You must configure the timer with + * evutil_configure_monotonic_time() before using it. + */ +EVENT2_EXPORT_SYMBOL +struct evutil_monotonic_timer * evutil_monotonic_timer_new(void); + +/** Free a struct evutil_monotonic_timer that was allocated using + * evutil_monotonic_timer_new(). + */ +EVENT2_EXPORT_SYMBOL +void evutil_monotonic_timer_free(struct evutil_monotonic_timer *timer); + +/** Set up a struct evutil_monotonic_timer; flags can include + * EV_MONOT_PRECISE and EV_MONOT_FALLBACK. + */ +EVENT2_EXPORT_SYMBOL +int evutil_configure_monotonic_time(struct evutil_monotonic_timer *timer, + int flags); + +/** Query the current monotonic time from a struct evutil_monotonic_timer + * previously configured with evutil_configure_monotonic_time(). Monotonic + * time is guaranteed never to run in reverse, but is not necessarily epoch- + * based, or relative to any other definite point. Use it to make reliable + * measurements of elapsed time between events even when the system time + * may be changed. + * + * It is not safe to use this funtion on the same timer from multiple + * threads. + */ +EVENT2_EXPORT_SYMBOL +int evutil_gettime_monotonic(struct evutil_monotonic_timer *timer, + struct timeval *tp); + +/** Create two new sockets that are connected to each other. + + On Unix, this simply calls socketpair(). On Windows, it uses the + loopback network interface on 127.0.0.1, and only + AF_INET,SOCK_STREAM are supported. + + (This may fail on some Windows hosts where firewall software has cleverly + decided to keep 127.0.0.1 from talking to itself.) + + Parameters and return values are as for socketpair() +*/ +EVENT2_EXPORT_SYMBOL +int evutil_socketpair(int d, int type, int protocol, evutil_socket_t sv[2]); +/** Do platform-specific operations as needed to make a socket nonblocking. + + @param sock The socket to make nonblocking + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evutil_make_socket_nonblocking(evutil_socket_t sock); + +/** Do platform-specific operations to make a listener socket reusable. + + Specifically, we want to make sure that another program will be able + to bind this address right after we've closed the listener. + + This differs from Windows's interpretation of "reusable", which + allows multiple listeners to bind the same address at the same time. + + @param sock The socket to make reusable + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evutil_make_listen_socket_reuseable(evutil_socket_t sock); + +/** Do platform-specific operations to make a listener port reusable. + + Specifically, we want to make sure that multiple programs which also + set the same socket option will be able to bind, listen at the same time. + + This is a feature available only to Linux 3.9+ + + @param sock The socket to make reusable + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evutil_make_listen_socket_reuseable_port(evutil_socket_t sock); + +/** Do platform-specific operations as needed to close a socket upon a + successful execution of one of the exec*() functions. + + @param sock The socket to be closed + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evutil_make_socket_closeonexec(evutil_socket_t sock); + +/** Do the platform-specific call needed to close a socket returned from + socket() or accept(). + + @param sock The socket to be closed + @return 0 on success, -1 on failure + */ +EVENT2_EXPORT_SYMBOL +int evutil_closesocket(evutil_socket_t sock); +#define EVUTIL_CLOSESOCKET(s) evutil_closesocket(s) + +/** Do platform-specific operations, if possible, to make a tcp listener + * socket defer accept()s until there is data to read. + * + * Not all platforms support this. You don't want to do this for every + * listener socket: only the ones that implement a protocol where the + * client transmits before the server needs to respond. + * + * @param sock The listening socket to to make deferred + * @return 0 on success (whether the operation is supported or not), + * -1 on failure +*/ +EVENT2_EXPORT_SYMBOL +int evutil_make_tcp_listen_socket_deferred(evutil_socket_t sock); + +#ifdef _WIN32 +/** Return the most recent socket error. Not idempotent on all platforms. */ +#define EVUTIL_SOCKET_ERROR() WSAGetLastError() +/** Replace the most recent socket error with errcode */ +#define EVUTIL_SET_SOCKET_ERROR(errcode) \ + do { WSASetLastError(errcode); } while (0) +/** Return the most recent socket error to occur on sock. */ +EVENT2_EXPORT_SYMBOL +int evutil_socket_geterror(evutil_socket_t sock); +/** Convert a socket error to a string. */ +EVENT2_EXPORT_SYMBOL +const char *evutil_socket_error_to_string(int errcode); +#elif defined(EVENT_IN_DOXYGEN_) +/** + @name Socket error functions + + These functions are needed for making programs compatible between + Windows and Unix-like platforms. + + You see, Winsock handles socket errors differently from the rest of + the world. Elsewhere, a socket error is like any other error and is + stored in errno. But winsock functions require you to retrieve the + error with a special function, and don't let you use strerror for + the error codes. And handling EWOULDBLOCK is ... different. + + @{ +*/ +/** Return the most recent socket error. Not idempotent on all platforms. */ +#define EVUTIL_SOCKET_ERROR() ... +/** Replace the most recent socket error with errcode */ +#define EVUTIL_SET_SOCKET_ERROR(errcode) ... +/** Return the most recent socket error to occur on sock. */ +#define evutil_socket_geterror(sock) ... +/** Convert a socket error to a string. */ +#define evutil_socket_error_to_string(errcode) ... +/**@}*/ +#else +#define EVUTIL_SOCKET_ERROR() (errno) +#define EVUTIL_SET_SOCKET_ERROR(errcode) \ + do { errno = (errcode); } while (0) +#define evutil_socket_geterror(sock) (errno) +#define evutil_socket_error_to_string(errcode) (strerror(errcode)) +#endif + + +/** + * @name Manipulation macros for struct timeval. + * + * We define replacements + * for timeradd, timersub, timerclear, timercmp, and timerisset. + * + * @{ + */ +#ifdef EVENT__HAVE_TIMERADD +#define evutil_timeradd(tvp, uvp, vvp) timeradd((tvp), (uvp), (vvp)) +#define evutil_timersub(tvp, uvp, vvp) timersub((tvp), (uvp), (vvp)) +#else +#define evutil_timeradd(tvp, uvp, vvp) \ + do { \ + (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ + (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ + if ((vvp)->tv_usec >= 1000000) { \ + (vvp)->tv_sec++; \ + (vvp)->tv_usec -= 1000000; \ + } \ + } while (0) +#define evutil_timersub(tvp, uvp, vvp) \ + do { \ + (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ + (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ + if ((vvp)->tv_usec < 0) { \ + (vvp)->tv_sec--; \ + (vvp)->tv_usec += 1000000; \ + } \ + } while (0) +#endif /* !EVENT__HAVE_TIMERADD */ + +#ifdef EVENT__HAVE_TIMERCLEAR +#define evutil_timerclear(tvp) timerclear(tvp) +#else +#define evutil_timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 +#endif +/**@}*/ + +/** Return true iff the tvp is related to uvp according to the relational + * operator cmp. Recognized values for cmp are ==, <=, <, >=, and >. */ +#define evutil_timercmp(tvp, uvp, cmp) \ + (((tvp)->tv_sec == (uvp)->tv_sec) ? \ + ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ + ((tvp)->tv_sec cmp (uvp)->tv_sec)) + +#ifdef EVENT__HAVE_TIMERISSET +#define evutil_timerisset(tvp) timerisset(tvp) +#else +#define evutil_timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#endif + +/** Replacement for offsetof on platforms that don't define it. */ +#ifdef offsetof +#define evutil_offsetof(type, field) offsetof(type, field) +#else +#define evutil_offsetof(type, field) ((off_t)(&((type *)0)->field)) +#endif + +/* big-int related functions */ +/** Parse a 64-bit value from a string. Arguments are as for strtol. */ +EVENT2_EXPORT_SYMBOL +ev_int64_t evutil_strtoll(const char *s, char **endptr, int base); + +/** Replacement for gettimeofday on platforms that lack it. */ +#ifdef EVENT__HAVE_GETTIMEOFDAY +#define evutil_gettimeofday(tv, tz) gettimeofday((tv), (tz)) +#else +struct timezone; +EVENT2_EXPORT_SYMBOL +int evutil_gettimeofday(struct timeval *tv, struct timezone *tz); +#endif + +/** Replacement for snprintf to get consistent behavior on platforms for + which the return value of snprintf does not conform to C99. + */ +EVENT2_EXPORT_SYMBOL +int evutil_snprintf(char *buf, size_t buflen, const char *format, ...) +#ifdef __GNUC__ + __attribute__((format(printf, 3, 4))) +#endif +; +/** Replacement for vsnprintf to get consistent behavior on platforms for + which the return value of snprintf does not conform to C99. + */ +EVENT2_EXPORT_SYMBOL +int evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap) +#ifdef __GNUC__ + __attribute__((format(printf, 3, 0))) +#endif +; + +/** Replacement for inet_ntop for platforms which lack it. */ +EVENT2_EXPORT_SYMBOL +const char *evutil_inet_ntop(int af, const void *src, char *dst, size_t len); +/** Replacement for inet_pton for platforms which lack it. */ +EVENT2_EXPORT_SYMBOL +int evutil_inet_pton(int af, const char *src, void *dst); +struct sockaddr; + +/** Parse an IPv4 or IPv6 address, with optional port, from a string. + + Recognized formats are: + - [IPv6Address]:port + - [IPv6Address] + - IPv6Address + - IPv4Address:port + - IPv4Address + + If no port is specified, the port in the output is set to 0. + + @param str The string to parse. + @param out A struct sockaddr to hold the result. This should probably be + a struct sockaddr_storage. + @param outlen A pointer to the number of bytes that that 'out' can safely + hold. Set to the number of bytes used in 'out' on success. + @return -1 if the address is not well-formed, if the port is out of range, + or if out is not large enough to hold the result. Otherwise returns + 0 on success. +*/ +EVENT2_EXPORT_SYMBOL +int evutil_parse_sockaddr_port(const char *str, struct sockaddr *out, int *outlen); + +/** Compare two sockaddrs; return 0 if they are equal, or less than 0 if sa1 + * preceeds sa2, or greater than 0 if sa1 follows sa2. If include_port is + * true, consider the port as well as the address. Only implemented for + * AF_INET and AF_INET6 addresses. The ordering is not guaranteed to remain + * the same between Libevent versions. */ +EVENT2_EXPORT_SYMBOL +int evutil_sockaddr_cmp(const struct sockaddr *sa1, const struct sockaddr *sa2, + int include_port); + +/** As strcasecmp, but always compares the characters in locale-independent + ASCII. That's useful if you're handling data in ASCII-based protocols. + */ +EVENT2_EXPORT_SYMBOL +int evutil_ascii_strcasecmp(const char *str1, const char *str2); +/** As strncasecmp, but always compares the characters in locale-independent + ASCII. That's useful if you're handling data in ASCII-based protocols. + */ +EVENT2_EXPORT_SYMBOL +int evutil_ascii_strncasecmp(const char *str1, const char *str2, size_t n); + +/* Here we define evutil_addrinfo to the native addrinfo type, or redefine it + * if this system has no getaddrinfo(). */ +#ifdef EVENT__HAVE_STRUCT_ADDRINFO +#define evutil_addrinfo addrinfo +#else +/** A definition of struct addrinfo for systems that lack it. + + (This is just an alias for struct addrinfo if the system defines + struct addrinfo.) +*/ +struct evutil_addrinfo { + int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */ + int ai_family; /* PF_xxx */ + int ai_socktype; /* SOCK_xxx */ + int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ + size_t ai_addrlen; /* length of ai_addr */ + char *ai_canonname; /* canonical name for nodename */ + struct sockaddr *ai_addr; /* binary address */ + struct evutil_addrinfo *ai_next; /* next structure in linked list */ +}; +#endif +/** @name evutil_getaddrinfo() error codes + + These values are possible error codes for evutil_getaddrinfo() and + related functions. + + @{ +*/ +#if defined(EAI_ADDRFAMILY) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_ADDRFAMILY EAI_ADDRFAMILY +#else +#define EVUTIL_EAI_ADDRFAMILY -901 +#endif +#if defined(EAI_AGAIN) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_AGAIN EAI_AGAIN +#else +#define EVUTIL_EAI_AGAIN -902 +#endif +#if defined(EAI_BADFLAGS) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_BADFLAGS EAI_BADFLAGS +#else +#define EVUTIL_EAI_BADFLAGS -903 +#endif +#if defined(EAI_FAIL) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_FAIL EAI_FAIL +#else +#define EVUTIL_EAI_FAIL -904 +#endif +#if defined(EAI_FAMILY) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_FAMILY EAI_FAMILY +#else +#define EVUTIL_EAI_FAMILY -905 +#endif +#if defined(EAI_MEMORY) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_MEMORY EAI_MEMORY +#else +#define EVUTIL_EAI_MEMORY -906 +#endif +/* This test is a bit complicated, since some MS SDKs decide to + * remove NODATA or redefine it to be the same as NONAME, in a + * fun interpretation of RFC 2553 and RFC 3493. */ +#if defined(EAI_NODATA) && defined(EVENT__HAVE_GETADDRINFO) && (!defined(EAI_NONAME) || EAI_NODATA != EAI_NONAME) +#define EVUTIL_EAI_NODATA EAI_NODATA +#else +#define EVUTIL_EAI_NODATA -907 +#endif +#if defined(EAI_NONAME) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_NONAME EAI_NONAME +#else +#define EVUTIL_EAI_NONAME -908 +#endif +#if defined(EAI_SERVICE) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_SERVICE EAI_SERVICE +#else +#define EVUTIL_EAI_SERVICE -909 +#endif +#if defined(EAI_SOCKTYPE) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_SOCKTYPE EAI_SOCKTYPE +#else +#define EVUTIL_EAI_SOCKTYPE -910 +#endif +#if defined(EAI_SYSTEM) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_EAI_SYSTEM EAI_SYSTEM +#else +#define EVUTIL_EAI_SYSTEM -911 +#endif + +#define EVUTIL_EAI_CANCEL -90001 + +#if defined(AI_PASSIVE) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_PASSIVE AI_PASSIVE +#else +#define EVUTIL_AI_PASSIVE 0x1000 +#endif +#if defined(AI_CANONNAME) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_CANONNAME AI_CANONNAME +#else +#define EVUTIL_AI_CANONNAME 0x2000 +#endif +#if defined(AI_NUMERICHOST) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_NUMERICHOST AI_NUMERICHOST +#else +#define EVUTIL_AI_NUMERICHOST 0x4000 +#endif +#if defined(AI_NUMERICSERV) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_NUMERICSERV AI_NUMERICSERV +#else +#define EVUTIL_AI_NUMERICSERV 0x8000 +#endif +#if defined(AI_V4MAPPED) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_V4MAPPED AI_V4MAPPED +#else +#define EVUTIL_AI_V4MAPPED 0x10000 +#endif +#if defined(AI_ALL) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_ALL AI_ALL +#else +#define EVUTIL_AI_ALL 0x20000 +#endif +#if defined(AI_ADDRCONFIG) && defined(EVENT__HAVE_GETADDRINFO) +#define EVUTIL_AI_ADDRCONFIG AI_ADDRCONFIG +#else +#define EVUTIL_AI_ADDRCONFIG 0x40000 +#endif +/**@}*/ + +struct evutil_addrinfo; +/** + * This function clones getaddrinfo for systems that don't have it. For full + * details, see RFC 3493, section 6.1. + * + * Limitations: + * - When the system has no getaddrinfo, we fall back to gethostbyname_r or + * gethostbyname, with their attendant issues. + * - The AI_V4MAPPED and AI_ALL flags are not currently implemented. + * + * For a nonblocking variant, see evdns_getaddrinfo. + */ +EVENT2_EXPORT_SYMBOL +int evutil_getaddrinfo(const char *nodename, const char *servname, + const struct evutil_addrinfo *hints_in, struct evutil_addrinfo **res); + +/** Release storage allocated by evutil_getaddrinfo or evdns_getaddrinfo. */ +EVENT2_EXPORT_SYMBOL +void evutil_freeaddrinfo(struct evutil_addrinfo *ai); + +EVENT2_EXPORT_SYMBOL +const char *evutil_gai_strerror(int err); + +/** Generate n bytes of secure pseudorandom data, and store them in buf. + * + * Current versions of Libevent use an ARC4-based random number generator, + * seeded using the platform's entropy source (/dev/urandom on Unix-like + * systems; CryptGenRandom on Windows). This is not actually as secure as it + * should be: ARC4 is a pretty lousy cipher, and the current implementation + * provides only rudimentary prediction- and backtracking-resistance. Don't + * use this for serious cryptographic applications. + */ +EVENT2_EXPORT_SYMBOL +void evutil_secure_rng_get_bytes(void *buf, size_t n); + +/** + * Seed the secure random number generator if needed, and return 0 on + * success or -1 on failure. + * + * It is okay to call this function more than once; it will still return + * 0 if the RNG has been successfully seeded and -1 if it can't be + * seeded. + * + * Ordinarily you don't need to call this function from your own code; + * Libevent will seed the RNG itself the first time it needs good random + * numbers. You only need to call it if (a) you want to double-check + * that one of the seeding methods did succeed, or (b) you plan to drop + * the capability to seed (by chrooting, or dropping capabilities, or + * whatever), and you want to make sure that seeding happens before your + * program loses the ability to do it. + */ +EVENT2_EXPORT_SYMBOL +int evutil_secure_rng_init(void); + +/** + * Set a filename to use in place of /dev/urandom for seeding the secure + * PRNG. Return 0 on success, -1 on failure. + * + * Call this function BEFORE calling any other initialization or RNG + * functions. + * + * (This string will _NOT_ be copied internally. Do not free it while any + * user of the secure RNG might be running. Don't pass anything other than a + * real /dev/...random device file here, or you might lose security.) + * + * This API is unstable, and might change in a future libevent version. + */ +EVENT2_EXPORT_SYMBOL +int evutil_secure_rng_set_urandom_device_file(char *fname); + +/** Seed the random number generator with extra random bytes. + + You should almost never need to call this function; it should be + sufficient to invoke evutil_secure_rng_init(), or let Libevent take + care of calling evutil_secure_rng_init() on its own. + + If you call this function as a _replacement_ for the regular + entropy sources, then you need to be sure that your input + contains a fairly large amount of strong entropy. Doing so is + notoriously hard: most people who try get it wrong. Watch out! + + @param dat a buffer full of a strong source of random numbers + @param datlen the number of bytes to read from datlen + */ +EVENT2_EXPORT_SYMBOL +void evutil_secure_rng_add_bytes(const char *dat, size_t datlen); + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT1_EVUTIL_H_INCLUDED_ */ diff --git a/src/components/libevent/visibility.h b/src/components/libevent/visibility.h new file mode 100644 index 0000000..b8ba06a --- /dev/null +++ b/src/components/libevent/visibility.h @@ -0,0 +1,50 @@ +/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +/* + * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. + */ +#ifndef EVENT2_VISIBILITY_H_INCLUDED_ +#define EVENT2_VISIBILITY_H_INCLUDED_ + +#include + +#if defined(event_EXPORTS) || defined(event_extra_EXPORTS) || defined(event_core_EXPORTS) +# if defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550) +# define EVENT2_EXPORT_SYMBOL __global +# elif defined __GNUC__ +# define EVENT2_EXPORT_SYMBOL __attribute__ ((visibility("default"))) +# elif defined(_MSC_VER) +# define EVENT2_EXPORT_SYMBOL extern __declspec(dllexport) +# else +# define EVENT2_EXPORT_SYMBOL /* unknown compiler */ +# endif +#else +# if defined(EVENT__NEED_DLLIMPORT) && defined(_MSC_VER) && !defined(EVENT_BUILDING_REGRESS_TEST) +# define EVENT2_EXPORT_SYMBOL extern __declspec(dllimport) +# else +# define EVENT2_EXPORT_SYMBOL +# endif +#endif + +#endif /* EVENT2_VISIBILITY_H_INCLUDED_ */ diff --git a/src/components/openssl/aes.h b/src/components/openssl/aes.h new file mode 100644 index 0000000..36db745 --- /dev/null +++ b/src/components/openssl/aes.h @@ -0,0 +1,149 @@ +/* crypto/aes/aes.h */ +/* ==================================================================== + * Copyright (c) 1998-2002 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. + * ==================================================================== + * + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include + +# ifdef OPENSSL_NO_AES +# error AES is disabled. +# endif + +# include + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ +# define AES_MAXNR 14 +# define AES_BLOCK_SIZE 16 + +#ifdef __cplusplus +extern "C" { +#endif + +/* This should be a hidden type, but EVP requires that the size be known */ +struct aes_key_st { +# ifdef AES_LONG + unsigned long rd_key[4 * (AES_MAXNR + 1)]; +# else + unsigned int rd_key[4 * (AES_MAXNR + 1)]; +# endif + int rounds; +}; +typedef struct aes_key_st AES_KEY; + +const char *AES_options(void); + +int AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); + +int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); + +void AES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void AES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key, const int enc); +void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num); +void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char ivec[AES_BLOCK_SIZE], + unsigned char ecount_buf[AES_BLOCK_SIZE], + unsigned int *num); +/* NB: the IV is _two_ blocks long */ +void AES_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +/* NB: the IV is _four_ blocks long */ +void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const AES_KEY *key2, const unsigned char *ivec, + const int enc); + +int AES_wrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); +int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); + + +#ifdef __cplusplus +} +#endif + +#endif /* !HEADER_AES_H */ diff --git a/src/components/openssl/asn1.h b/src/components/openssl/asn1.h new file mode 100644 index 0000000..da8a45b --- /dev/null +++ b/src/components/openssl/asn1.h @@ -0,0 +1,1419 @@ +/* crypto/asn1/asn1.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ASN1_H +# define HEADER_ASN1_H + +# include +# include +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# include + +# include + +# include +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG 0x1f + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_NEG 0x100/* negative flag */ + +# define V_ASN1_UNDEF -1 +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + struct X509_algor_st; +DECLARE_STACK_OF(X509_ALGOR) + +# define DECLARE_ASN1_SET_OF(type)/* filled in by mkstack.pl */ +# define IMPLEMENT_ASN1_SET_OF(type)/* nothing, no longer needed */ + +/* + * We MUST make sure that, except for constness, asn1_ctx_st and + * asn1_const_ctx are exactly the same. Fortunately, as soon as the old ASN1 + * parsing macros are gone, we can throw this away as well... + */ +typedef struct asn1_ctx_st { + unsigned char *p; /* work char pointer */ + int eos; /* end of sequence read for indefinite + * encoding */ + int error; /* error code to use when returning an error */ + int inf; /* constructed if 0x20, indefinite is 0x21 */ + int tag; /* tag from last 'get object' */ + int xclass; /* class from last 'get object' */ + long slen; /* length of last 'get object' */ + unsigned char *max; /* largest value of p allowed */ + unsigned char *q; /* temporary variable */ + unsigned char **pp; /* variable */ + int line; /* used in error processing */ +} ASN1_CTX; + +typedef struct asn1_const_ctx_st { + const unsigned char *p; /* work char pointer */ + int eos; /* end of sequence read for indefinite + * encoding */ + int error; /* error code to use when returning an error */ + int inf; /* constructed if 0x20, indefinite is 0x21 */ + int tag; /* tag from last 'get object' */ + int xclass; /* class from last 'get object' */ + long slen; /* length of last 'get object' */ + const unsigned char *max; /* largest value of p allowed */ + const unsigned char *q; /* temporary variable */ + const unsigned char **pp; /* variable */ + int line; /* used in error processing */ +} ASN1_const_CTX; + +/* + * These are used internally in the ASN1_OBJECT to keep track of whether the + * names and data need to be free()ed + */ +# define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ +# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ +# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ +# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ +struct asn1_object_st { + const char *sn, *ln; + int nid; + int length; + const unsigned char *data; /* data remains const after init */ + int flags; /* Should we free this one */ +}; + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +typedef struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +} ASN1_STRING_TABLE; + +DECLARE_STACK_OF(ASN1_STRING_TABLE) + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) + +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(itname) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(const type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(name) + +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + int i2d_##name##_NDEF(name *a, unsigned char **out); + +# define DECLARE_ASN1_FUNCTIONS_const(name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + type *name##_new(void); \ + void name##_free(type *a); + +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx); + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(type *,unsigned char **) +# define I2D_OF_const(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +TYPEDEF_D2I2D_OF(void); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM ASN1_ITEM_EXP; + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) + +# define ASN1_ITEM_rptr(ref) (&(ref##_it)) + +# define DECLARE_ASN1_ITEM(name) \ + OPENSSL_EXTERN const ASN1_ITEM name##_it; + +# else + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM(name) \ + const ASN1_ITEM * name##_it(void); + +# endif + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + +DECLARE_STACK_OF(ASN1_INTEGER) +DECLARE_ASN1_SET_OF(ASN1_INTEGER) + +DECLARE_STACK_OF(ASN1_GENERALSTRING) + +typedef struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +} ASN1_TYPE; + +DECLARE_STACK_OF(ASN1_TYPE) +DECLARE_ASN1_SET_OF(ASN1_TYPE) + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +typedef struct NETSCAPE_X509_st { + ASN1_OCTET_STRING *header; + X509 *cert; +} NETSCAPE_X509; + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define M_ASN1_STRING_length(x) ((x)->length) +# define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) +# define M_ASN1_STRING_type(x) ((x)->type) +# define M_ASN1_STRING_data(x) ((x)->data) + +/* Macros for string operations */ +# define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ + ASN1_STRING_type_new(V_ASN1_BIT_STRING) +# define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) +# define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) + +# define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ + ASN1_STRING_type_new(V_ASN1_INTEGER) +# define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) + +# define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ + ASN1_STRING_type_new(V_ASN1_ENUMERATED) +# define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) + +# define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ + ASN1_STRING_type_new(V_ASN1_OCTET_STRING) +# define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) +# define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) +# define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) +# define M_i2d_ASN1_OCTET_STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ + V_ASN1_UNIVERSAL) + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +# define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) +# define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_PRINTABLE(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_PRINTABLE) + +# define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) +# define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +# define M_d2i_DIRECTORYSTRING(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_DIRECTORYSTRING) + +# define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) +# define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +# define M_d2i_DISPLAYTEXT(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_DISPLAYTEXT) + +# define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ + ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) +# define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ + (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) + +# define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ + ASN1_STRING_type_new(V_ASN1_T61STRING) +# define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_T61STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_T61STRING(a,pp,l) \ + (ASN1_T61STRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) + +# define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ + ASN1_STRING_type_new(V_ASN1_IA5STRING) +# define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_IA5STRING_dup(a) \ + (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_i2d_ASN1_IA5STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_IA5STRING(a,pp,l) \ + (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ + B_ASN1_IA5STRING) + +# define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ + ASN1_STRING_type_new(V_ASN1_UTCTIME) +# define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) + +# define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ + ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) +# define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ + (const ASN1_STRING *)a) + +# define M_ASN1_TIME_new() (ASN1_TIME *)\ + ASN1_STRING_type_new(V_ASN1_UTCTIME) +# define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) + +# define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ + ASN1_STRING_type_new(V_ASN1_GENERALSTRING) +# define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_GENERALSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ + (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) + +# define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ + ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) +# define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ + (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) + +# define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ + ASN1_STRING_type_new(V_ASN1_BMPSTRING) +# define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_BMPSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_BMPSTRING(a,pp,l) \ + (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) + +# define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ + ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) +# define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_VISIBLESTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ + (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) + +# define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ + ASN1_STRING_type_new(V_ASN1_UTF8STRING) +# define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_UTF8STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_UTF8STRING(a,pp,l) \ + (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) + + /* for the is_set parameter to i2d_ASN1_SET */ +# define IS_SEQUENCE 0 +# define IS_SET 1 + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_OBJECT *ASN1_OBJECT_new(void); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp); +ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DECLARE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_SET_OF(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(ASN1_STRING *x); +unsigned char *ASN1_STRING_data(ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp); +ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, + const unsigned char **pp, long length); +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, + unsigned char *flags, int flags_len); + +# ifndef OPENSSL_NO_BIO +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +# endif +int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, + BIT_STRING_BITNAME *tbl); + +int i2d_ASN1_BOOLEAN(int a, unsigned char **pp); +int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp); +ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); +# if 0 +time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); +# endif + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME + **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); + +int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, + i2d_of_void *i2d, int ex_tag, int ex_class, int is_set); +STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, + const unsigned char **pp, + long length, d2i_of_void *d2i, + void (*free_func) (OPENSSL_BLOCK), + int ex_tag, int ex_class); + +# ifndef OPENSSL_NO_BIO +int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); +# endif +int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); +ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, + long length, int Ptag, int Pclass); +unsigned long ASN1_tag2bit(int tag); +/* type is one or more of the B_ASN1_ values. */ +ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp, + long length, int type); + +/* PARSING */ +int asn1_Finish(ASN1_CTX *c); +int asn1_const_Finish(ASN1_const_CTX *c); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_dup_of_const(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, void *x); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_FP_API +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); + +# ifndef OPENSSL_NO_BIO +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +# endif +const char *ASN1_tag2str(int tag); + +/* Used to load and write netscape format cert */ + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, + d2i_of_void *d2i, + void (*free_func) (OPENSSL_BLOCK)); +unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, + unsigned char **buf, int *len); +void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); +void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); +ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, + ASN1_OCTET_STRING **oct); + +# define ASN1_pack_string_of(type,obj,i2d,oct) \ + (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ + CHECKED_I2D_OF(type, i2d), \ + oct)) + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); + +ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +BIO_METHOD *BIO_f_asn1(void); + +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ASN1_strings(void); + +/* Error codes for the ASN1 functions. */ + +/* Function codes. */ +# define ASN1_F_A2D_ASN1_OBJECT 100 +# define ASN1_F_A2I_ASN1_ENUMERATED 101 +# define ASN1_F_A2I_ASN1_INTEGER 102 +# define ASN1_F_A2I_ASN1_STRING 103 +# define ASN1_F_APPEND_EXP 176 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 +# define ASN1_F_ASN1_CB 177 +# define ASN1_F_ASN1_CHECK_TLEN 104 +# define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 +# define ASN1_F_ASN1_COLLECT 106 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 +# define ASN1_F_ASN1_D2I_FP 109 +# define ASN1_F_ASN1_D2I_READ_BIO 107 +# define ASN1_F_ASN1_DIGEST 184 +# define ASN1_F_ASN1_DO_ADB 110 +# define ASN1_F_ASN1_DUP 111 +# define ASN1_F_ASN1_ENUMERATED_SET 112 +# define ASN1_F_ASN1_ENUMERATED_TO_BN 113 +# define ASN1_F_ASN1_EX_C2I 204 +# define ASN1_F_ASN1_FIND_END 190 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 +# define ASN1_F_ASN1_GENERALIZEDTIME_SET 185 +# define ASN1_F_ASN1_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_HEADER_NEW 115 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_INTEGER_SET 118 +# define ASN1_F_ASN1_INTEGER_TO_BN 119 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 +# define ASN1_F_ASN1_ITEM_EX_D2I 120 +# define ASN1_F_ASN1_ITEM_I2D_BIO 192 +# define ASN1_F_ASN1_ITEM_I2D_FP 193 +# define ASN1_F_ASN1_ITEM_PACK 198 +# define ASN1_F_ASN1_ITEM_SIGN 195 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 +# define ASN1_F_ASN1_ITEM_UNPACK 199 +# define ASN1_F_ASN1_ITEM_VERIFY 197 +# define ASN1_F_ASN1_MBSTRING_NCOPY 122 +# define ASN1_F_ASN1_OBJECT_NEW 123 +# define ASN1_F_ASN1_OUTPUT_DATA 214 +# define ASN1_F_ASN1_PACK_STRING 124 +# define ASN1_F_ASN1_PCTX_NEW 205 +# define ASN1_F_ASN1_PKCS5_PBE_SET 125 +# define ASN1_F_ASN1_SEQ_PACK 126 +# define ASN1_F_ASN1_SEQ_UNPACK 127 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# define ASN1_F_ASN1_STRING_TYPE_NEW 130 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 +# define ASN1_F_ASN1_TEMPLATE_NEW 133 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 +# define ASN1_F_ASN1_TIME_ADJ 217 +# define ASN1_F_ASN1_TIME_SET 175 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UNPACK_STRING 136 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# define ASN1_F_ASN1_UTCTIME_SET 187 +# define ASN1_F_ASN1_VERIFY 137 +# define ASN1_F_B64_READ_ASN1 209 +# define ASN1_F_B64_WRITE_ASN1 210 +# define ASN1_F_BIO_NEW_NDEF 208 +# define ASN1_F_BITSTR_CB 180 +# define ASN1_F_BN_TO_ASN1_ENUMERATED 138 +# define ASN1_F_BN_TO_ASN1_INTEGER 139 +# define ASN1_F_C2I_ASN1_BIT_STRING 189 +# define ASN1_F_C2I_ASN1_INTEGER 194 +# define ASN1_F_C2I_ASN1_OBJECT 196 +# define ASN1_F_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_BIT_STRING 141 +# define ASN1_F_D2I_ASN1_BOOLEAN 142 +# define ASN1_F_D2I_ASN1_BYTES 143 +# define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 +# define ASN1_F_D2I_ASN1_HEADER 145 +# define ASN1_F_D2I_ASN1_INTEGER 146 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_SET 148 +# define ASN1_F_D2I_ASN1_TYPE_BYTES 149 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_ASN1_UTCTIME 151 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_NETSCAPE_RSA 152 +# define ASN1_F_D2I_NETSCAPE_RSA_2 153 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_D2I_RSA_NET 200 +# define ASN1_F_D2I_RSA_NET_2 201 +# define ASN1_F_D2I_X509 156 +# define ASN1_F_D2I_X509_CINF 157 +# define ASN1_F_D2I_X509_PKEY 159 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# define ASN1_F_I2D_ASN1_SET 188 +# define ASN1_F_I2D_ASN1_TIME 160 +# define ASN1_F_I2D_DSA_PUBKEY 161 +# define ASN1_F_I2D_EC_PUBKEY 181 +# define ASN1_F_I2D_PRIVATEKEY 163 +# define ASN1_F_I2D_PUBLICKEY 164 +# define ASN1_F_I2D_RSA_NET 162 +# define ASN1_F_I2D_RSA_PUBKEY 165 +# define ASN1_F_LONG_C2I 166 +# define ASN1_F_OID_MODULE_INIT 174 +# define ASN1_F_PARSE_TAGGING 182 +# define ASN1_F_PKCS5_PBE2_SET_IV 167 +# define ASN1_F_PKCS5_PBE_SET 202 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 +# define ASN1_F_PKCS5_PBKDF2_SET 219 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_X509_CINF_NEW 168 +# define ASN1_F_X509_CRL_ADD0_REVOKED 169 +# define ASN1_F_X509_INFO_NEW 170 +# define ASN1_F_X509_NAME_ENCODE 203 +# define ASN1_F_X509_NAME_EX_D2I 158 +# define ASN1_F_X509_NAME_EX_NEW 171 +# define ASN1_F_X509_NEW 172 +# define ASN1_F_X509_PKEY_NEW 173 + +/* Reason codes. */ +# define ASN1_R_ADDING_OBJECT 171 +# define ASN1_R_ASN1_PARSE_ERROR 203 +# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 +# define ASN1_R_AUX_ERROR 100 +# define ASN1_R_BAD_CLASS 101 +# define ASN1_R_BAD_OBJECT_HEADER 102 +# define ASN1_R_BAD_PASSWORD_READ 103 +# define ASN1_R_BAD_TAG 104 +# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 +# define ASN1_R_BN_LIB 105 +# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 +# define ASN1_R_BUFFER_TOO_SMALL 107 +# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 +# define ASN1_R_CONTEXT_NOT_INITIALISED 217 +# define ASN1_R_DATA_IS_WRONG 109 +# define ASN1_R_DECODE_ERROR 110 +# define ASN1_R_DECODING_ERROR 111 +# define ASN1_R_DEPTH_EXCEEDED 174 +# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 +# define ASN1_R_ENCODE_ERROR 112 +# define ASN1_R_ERROR_GETTING_TIME 173 +# define ASN1_R_ERROR_LOADING_SECTION 172 +# define ASN1_R_ERROR_PARSING_SET_ELEMENT 113 +# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 +# define ASN1_R_EXPECTING_AN_INTEGER 115 +# define ASN1_R_EXPECTING_AN_OBJECT 116 +# define ASN1_R_EXPECTING_A_BOOLEAN 117 +# define ASN1_R_EXPECTING_A_TIME 118 +# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 +# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 +# define ASN1_R_FIELD_MISSING 121 +# define ASN1_R_FIRST_NUM_TOO_LARGE 122 +# define ASN1_R_HEADER_TOO_LONG 123 +# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 +# define ASN1_R_ILLEGAL_BOOLEAN 176 +# define ASN1_R_ILLEGAL_CHARACTERS 124 +# define ASN1_R_ILLEGAL_FORMAT 177 +# define ASN1_R_ILLEGAL_HEX 178 +# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 +# define ASN1_R_ILLEGAL_INTEGER 180 +# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 +# define ASN1_R_ILLEGAL_NULL 125 +# define ASN1_R_ILLEGAL_NULL_VALUE 182 +# define ASN1_R_ILLEGAL_OBJECT 183 +# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 +# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 +# define ASN1_R_ILLEGAL_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 +# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 +# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 +# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 +# define ASN1_R_INVALID_DIGIT 130 +# define ASN1_R_INVALID_MIME_TYPE 205 +# define ASN1_R_INVALID_MODIFIER 186 +# define ASN1_R_INVALID_NUMBER 187 +# define ASN1_R_INVALID_OBJECT_ENCODING 216 +# define ASN1_R_INVALID_SEPARATOR 131 +# define ASN1_R_INVALID_TIME_FORMAT 132 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_IV_TOO_LARGE 135 +# define ASN1_R_LENGTH_ERROR 136 +# define ASN1_R_LIST_ERROR 188 +# define ASN1_R_MIME_NO_CONTENT_TYPE 206 +# define ASN1_R_MIME_PARSE_ERROR 207 +# define ASN1_R_MIME_SIG_PARSE_ERROR 208 +# define ASN1_R_MISSING_EOC 137 +# define ASN1_R_MISSING_SECOND_NUMBER 138 +# define ASN1_R_MISSING_VALUE 189 +# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 +# define ASN1_R_MSTRING_WRONG_TAG 140 +# define ASN1_R_NESTED_ASN1_STRING 197 +# define ASN1_R_NON_HEX_CHARACTERS 141 +# define ASN1_R_NOT_ASCII_FORMAT 190 +# define ASN1_R_NOT_ENOUGH_DATA 142 +# define ASN1_R_NO_CONTENT_TYPE 209 +# define ASN1_R_NO_DEFAULT_DIGEST 201 +# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 +# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 +# define ASN1_R_NO_MULTIPART_BOUNDARY 211 +# define ASN1_R_NO_SIG_CONTENT_TYPE 212 +# define ASN1_R_NULL_IS_WRONG_LENGTH 144 +# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 +# define ASN1_R_ODD_NUMBER_OF_CHARS 145 +# define ASN1_R_PRIVATE_KEY_HEADER_MISSING 146 +# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 +# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 +# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 +# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 +# define ASN1_R_SHORT_LINE 150 +# define ASN1_R_SIG_INVALID_MIME_TYPE 213 +# define ASN1_R_STREAMING_NOT_SUPPORTED 202 +# define ASN1_R_STRING_TOO_LONG 151 +# define ASN1_R_STRING_TOO_SHORT 152 +# define ASN1_R_TAG_VALUE_TOO_HIGH 153 +# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +# define ASN1_R_TOO_LONG 155 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 218 +# define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 +# define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 +# define ASN1_R_UNEXPECTED_EOC 159 +# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_FORMAT 160 +# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 +# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 +# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 +# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 +# define ASN1_R_UNKNOWN_TAG 194 +# define ASN1_R_UNKOWN_FORMAT 195 +# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_CIPHER 165 +# define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 +# define ASN1_R_WRONG_TYPE 169 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/asn1_mac.h b/src/components/openssl/asn1_mac.h new file mode 100644 index 0000000..ab9ec85 --- /dev/null +++ b/src/components/openssl/asn1_mac.h @@ -0,0 +1,579 @@ +/* crypto/asn1/asn1_mac.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ASN1_MAC_H +# define HEADER_ASN1_MAC_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef ASN1_MAC_ERR_LIB +# define ASN1_MAC_ERR_LIB ERR_LIB_ASN1 +# endif + +# define ASN1_MAC_H_err(f,r,line) \ + ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line)) + +# define M_ASN1_D2I_vars(a,type,func) \ + ASN1_const_CTX c; \ + type ret=NULL; \ + \ + c.pp=(const unsigned char **)pp; \ + c.q= *(const unsigned char **)pp; \ + c.error=ERR_R_NESTED_ASN1_ERROR; \ + if ((a == NULL) || ((*a) == NULL)) \ + { if ((ret=(type)func()) == NULL) \ + { c.line=__LINE__; goto err; } } \ + else ret=(*a); + +# define M_ASN1_D2I_Init() \ + c.p= *(const unsigned char **)pp; \ + c.max=(length == 0)?0:(c.p+length); + +# define M_ASN1_D2I_Finish_2(a) \ + if (!asn1_const_Finish(&c)) \ + { c.line=__LINE__; goto err; } \ + *(const unsigned char **)pp=c.p; \ + if (a != NULL) (*a)=ret; \ + return(ret); + +# define M_ASN1_D2I_Finish(a,func,e) \ + M_ASN1_D2I_Finish_2(a); \ +err:\ + ASN1_MAC_H_err((e),c.error,c.line); \ + asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \ + if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ + return(NULL) + +# define M_ASN1_D2I_start_sequence() \ + if (!asn1_GetSequence(&c,&length)) \ + { c.line=__LINE__; goto err; } +/* Begin reading ASN1 without a surrounding sequence */ +# define M_ASN1_D2I_begin() \ + c.slen = length; + +/* End reading ASN1 with no check on length */ +# define M_ASN1_D2I_Finish_nolen(a, func, e) \ + *pp=c.p; \ + if (a != NULL) (*a)=ret; \ + return(ret); \ +err:\ + ASN1_MAC_H_err((e),c.error,c.line); \ + asn1_add_error(*pp,(int)(c.q- *pp)); \ + if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ + return(NULL) + +# define M_ASN1_D2I_end_sequence() \ + (((c.inf&1) == 0)?(c.slen <= 0): \ + (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen))) + +/* Don't use this with d2i_ASN1_BOOLEAN() */ +# define M_ASN1_D2I_get(b, func) \ + c.q=c.p; \ + if (func(&(b),&c.p,c.slen) == NULL) \ + {c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +/* Don't use this with d2i_ASN1_BOOLEAN() */ +# define M_ASN1_D2I_get_x(type,b,func) \ + c.q=c.p; \ + if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \ + {c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +/* use this instead () */ +# define M_ASN1_D2I_get_int(b,func) \ + c.q=c.p; \ + if (func(&(b),&c.p,c.slen) < 0) \ + {c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_opt(b,func,type) \ + if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ + == (V_ASN1_UNIVERSAL|(type)))) \ + { \ + M_ASN1_D2I_get(b,func); \ + } + +# define M_ASN1_D2I_get_int_opt(b,func,type) \ + if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ + == (V_ASN1_UNIVERSAL|(type)))) \ + { \ + M_ASN1_D2I_get_int(b,func); \ + } + +# define M_ASN1_D2I_get_imp(b,func, type) \ + M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \ + c.q=c.p; \ + if (func(&(b),&c.p,c.slen) == NULL) \ + {c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \ + c.slen-=(c.p-c.q);\ + M_ASN1_next_prev=_tmp; + +# define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \ + if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \ + (V_ASN1_CONTEXT_SPECIFIC|(tag)))) \ + { \ + unsigned char _tmp = M_ASN1_next; \ + M_ASN1_D2I_get_imp(b,func, type);\ + } + +# define M_ASN1_D2I_get_set(r,func,free_func) \ + M_ASN1_D2I_get_imp_set(r,func,free_func, \ + V_ASN1_SET,V_ASN1_UNIVERSAL); + +# define M_ASN1_D2I_get_set_type(type,r,func,free_func) \ + M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \ + V_ASN1_SET,V_ASN1_UNIVERSAL); + +# define M_ASN1_D2I_get_set_opt(r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ + { M_ASN1_D2I_get_set(r,func,free_func); } + +# define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ + { M_ASN1_D2I_get_set_type(type,r,func,free_func); } + +# define M_ASN1_I2D_len_SET_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_len_SET(a,f); + +# define M_ASN1_I2D_put_SET_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_put_SET(a,f); + +# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_put_SEQUENCE(a,f); + +# define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + M_ASN1_I2D_put_SEQUENCE_type(type,a,f); + +# define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ + if ((c.slen != 0) && \ + (M_ASN1_next == \ + (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ + { \ + M_ASN1_D2I_get_imp_set(b,func,free_func,\ + tag,V_ASN1_CONTEXT_SPECIFIC); \ + } + +# define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \ + if ((c.slen != 0) && \ + (M_ASN1_next == \ + (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ + { \ + M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\ + tag,V_ASN1_CONTEXT_SPECIFIC); \ + } + +# define M_ASN1_D2I_get_seq(r,func,free_func) \ + M_ASN1_D2I_get_imp_set(r,func,free_func,\ + V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); + +# define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \ + M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ + V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) + +# define M_ASN1_D2I_get_seq_opt(r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ + { M_ASN1_D2I_get_seq(r,func,free_func); } + +# define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ + { M_ASN1_D2I_get_seq_type(type,r,func,free_func); } + +# define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \ + M_ASN1_D2I_get_imp_set(r,func,free_func,\ + x,V_ASN1_CONTEXT_SPECIFIC); + +# define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \ + M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ + x,V_ASN1_CONTEXT_SPECIFIC); + +# define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \ + c.q=c.p; \ + if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\ + (void (*)())free_func,a,b) == NULL) \ + { c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \ + c.q=c.p; \ + if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\ + free_func,a,b) == NULL) \ + { c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_set_strings(r,func,a,b) \ + c.q=c.p; \ + if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \ + { c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_EXP_opt(r,func,tag) \ + if ((c.slen != 0L) && (M_ASN1_next == \ + (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ + { \ + int Tinf,Ttag,Tclass; \ + long Tlen; \ + \ + c.q=c.p; \ + Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ + if (Tinf & 0x80) \ + { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ + c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ + Tlen = c.slen - (c.p - c.q) - 2; \ + if (func(&(r),&c.p,Tlen) == NULL) \ + { c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ + Tlen = c.slen - (c.p - c.q); \ + if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \ + { c.error=ERR_R_MISSING_ASN1_EOS; \ + c.line=__LINE__; goto err; } \ + }\ + c.slen-=(c.p-c.q); \ + } + +# define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \ + if ((c.slen != 0) && (M_ASN1_next == \ + (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ + { \ + int Tinf,Ttag,Tclass; \ + long Tlen; \ + \ + c.q=c.p; \ + Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ + if (Tinf & 0x80) \ + { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ + c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ + Tlen = c.slen - (c.p - c.q) - 2; \ + if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \ + (void (*)())free_func, \ + b,V_ASN1_UNIVERSAL) == NULL) \ + { c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ + Tlen = c.slen - (c.p - c.q); \ + if(!ASN1_check_infinite_end(&c.p, Tlen)) \ + { c.error=ERR_R_MISSING_ASN1_EOS; \ + c.line=__LINE__; goto err; } \ + }\ + c.slen-=(c.p-c.q); \ + } + +# define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \ + if ((c.slen != 0) && (M_ASN1_next == \ + (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ + { \ + int Tinf,Ttag,Tclass; \ + long Tlen; \ + \ + c.q=c.p; \ + Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ + if (Tinf & 0x80) \ + { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ + c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ + Tlen = c.slen - (c.p - c.q) - 2; \ + if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \ + free_func,b,V_ASN1_UNIVERSAL) == NULL) \ + { c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ + Tlen = c.slen - (c.p - c.q); \ + if(!ASN1_check_infinite_end(&c.p, Tlen)) \ + { c.error=ERR_R_MISSING_ASN1_EOS; \ + c.line=__LINE__; goto err; } \ + }\ + c.slen-=(c.p-c.q); \ + } + +/* New macros */ +# define M_ASN1_New_Malloc(ret,type) \ + if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \ + { c.line=__LINE__; goto err2; } + +# define M_ASN1_New(arg,func) \ + if (((arg)=func()) == NULL) return(NULL) + +# define M_ASN1_New_Error(a) \ +/*- err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ + return(NULL);*/ \ + err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ + return(NULL) + +/* + * BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some + * macros that use ASN1_const_CTX still insist on writing in the input + * stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. Please? -- + * Richard Levitte + */ +# define M_ASN1_next (*((unsigned char *)(c.p))) +# define M_ASN1_next_prev (*((unsigned char *)(c.q))) + +/*************************************************/ + +# define M_ASN1_I2D_vars(a) int r=0,ret=0; \ + unsigned char *p; \ + if (a == NULL) return(0) + +/* Length Macros */ +# define M_ASN1_I2D_len(a,f) ret+=f(a,NULL) +# define M_ASN1_I2D_len_IMP_opt(a,f) if (a != NULL) M_ASN1_I2D_len(a,f) + +# define M_ASN1_I2D_len_SET(a,f) \ + ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET); + +# define M_ASN1_I2D_len_SET_type(type,a,f) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \ + V_ASN1_UNIVERSAL,IS_SET); + +# define M_ASN1_I2D_len_SEQUENCE(a,f) \ + ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \ + V_ASN1_UNIVERSAL,IS_SEQUENCE) + +# define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_len_SEQUENCE(a,f); + +# define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + M_ASN1_I2D_len_SEQUENCE_type(type,a,f); + +# define M_ASN1_I2D_len_IMP_SET(a,f,x) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); + +# define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ + V_ASN1_CONTEXT_SPECIFIC,IS_SET); + +# define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SET); + +# define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ + V_ASN1_CONTEXT_SPECIFIC,IS_SET); + +# define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ + V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \ + if (a != NULL)\ + { \ + v=f(a,NULL); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +# define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0))\ + { \ + v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +# define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0))\ + { \ + v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +# define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_##type##_num(a) != 0))\ + { \ + v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \ + V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +/* Put Macros */ +# define M_ASN1_I2D_put(a,f) f(a,&p) + +# define M_ASN1_I2D_put_IMP_opt(a,f,t) \ + if (a != NULL) \ + { \ + unsigned char *q=p; \ + f(a,&p); \ + *q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\ + } + +# define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\ + V_ASN1_UNIVERSAL,IS_SET) +# define M_ASN1_I2D_put_SET_type(type,a,f) \ + i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET) +# define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ + V_ASN1_CONTEXT_SPECIFIC,IS_SET) +# define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \ + i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET) +# define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ + V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE) + +# define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\ + V_ASN1_UNIVERSAL,IS_SEQUENCE) + +# define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \ + i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE) + +# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_put_SEQUENCE(a,f); + +# define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SET); } + +# define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ + V_ASN1_CONTEXT_SPECIFIC, \ + IS_SET); } + +# define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); } + +# define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ + V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); } + +# define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \ + if (a != NULL) \ + { \ + ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \ + f(a,&p); \ + } + +# define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { \ + ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ + i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ + } + +# define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { \ + ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ + i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \ + } + +# define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + { \ + ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ + i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); \ + } + +# define M_ASN1_I2D_seq_total() \ + r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ + if (pp == NULL) return(r); \ + p= *pp; \ + ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) + +# define M_ASN1_I2D_INF_seq_start(tag,ctx) \ + *(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \ + *(p++)=0x80 + +# define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00 + +# define M_ASN1_I2D_finish() *pp=p; \ + return(r); + +int asn1_GetSequence(ASN1_const_CTX *c, long *length); +void asn1_add_error(const unsigned char *address, int offset); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/asn1t.h b/src/components/openssl/asn1t.h new file mode 100644 index 0000000..490514a --- /dev/null +++ b/src/components/openssl/asn1t.h @@ -0,0 +1,973 @@ +/* asn1t.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 2000. + */ +/* ==================================================================== + * Copyright (c) 2000-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 + * licensing@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_ASN1T_H +# define HEADER_ASN1T_H + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { + +# define ASN1_ITEM_end(itname) \ + }; + +# else + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +# endif + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_BROKEN_SEQUENCE(tname) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb, lck) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* used when the structure is combined with the parent */ + +# define ASN1_EX_COMBINE(flags, tag, type) { \ + (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# else +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } +# endif +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ + ;\ + static const ASN1_ADB name##_adb = {\ + flags,\ + offsetof(name, field),\ + app_table,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + } + +# else + +# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + app_table,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# endif + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ +# ifndef NO_ASN1_FIELD_NAMES + const char *field_name; /* Field name */ +# endif + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag means a parent structure is passed instead of the field: this is + * useful is a SEQUENCE is being combined with a CHOICE for example. Since + * this means the structure and item name will differ we need to use the + * ASN1_CHOICE_END_name() macro for example. + */ + +# define ASN1_TFLG_COMBINE (0x1<<10) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* functions that handle this type */ + long size; /* Structure size (usually) */ +# ifndef NO_ASN1_FIELD_NAMES + const char *sname; /* Structure name */ +# endif +}; + +/*- + * These are values for the itype field and + * determine how the type is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application + * specific functions. + * + * For COMPAT types the funcs field gives a + * set of functions that handle this type, this + * supports the old d2i, i2d convention. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 + +# define ASN1_ITYPE_SEQUENCE 0x1 + +# define ASN1_ITYPE_CHOICE 0x2 + +# define ASN1_ITYPE_COMPAT 0x3 + +# define ASN1_ITYPE_EXTERN 0x4 + +# define ASN1_ITYPE_MSTRING 0x5 + +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ + +typedef ASN1_VALUE *ASN1_new_func(void); +typedef void ASN1_free_func(ASN1_VALUE *a); +typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in, + long length); +typedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in); + +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_COMPAT_FUNCS_st { + ASN1_new_func *asn1_new; + ASN1_free_func *asn1_free; + ASN1_d2i_func *asn1_d2i; + ASN1_i2d_func *asn1_i2d; +} ASN1_COMPAT_FUNCS; + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Lock type to use */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement an ASN1_ITEM in terms of old style funcs */ + +# define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE) + +# define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \ + static const ASN1_COMPAT_FUNCS sname##_ff = { \ + (ASN1_new_func *)sname##_new, \ + (ASN1_free_func *)sname##_free, \ + (ASN1_d2i_func *)d2i_##sname, \ + (ASN1_i2d_func *)i2d_##sname, \ + }; \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_COMPAT, \ + tag, \ + NULL, \ + 0, \ + &sname##_ff, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +/* + * This includes evil casts to remove const: they will go away when full ASN1 + * constification is done. + */ +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ + IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) + +# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) + +DECLARE_STACK_OF(ASN1_VALUE) + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); +int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); +int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); + +void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); +int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_TEMPLATE *tt); +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_TEMPLATE *tt); +void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, + const ASN1_ITEM *it); +int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, + int utype, char *free_cont, const ASN1_ITEM *it); + +int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); +int asn1_set_choice_selector(ASN1_VALUE **pval, int value, + const ASN1_ITEM *it); + +ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); + +const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, + int nullerr); + +int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it); + +void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it); +void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it); +int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, + const ASN1_ITEM *it); +int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, + const ASN1_ITEM *it); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/bio.h b/src/components/openssl/bio.h new file mode 100644 index 0000000..f82dee4 --- /dev/null +++ b/src/components/openssl/bio.h @@ -0,0 +1,883 @@ +/* crypto/bio/bio.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BIO_H +# define HEADER_BIO_H + +# include + +# ifndef OPENSSL_NO_FP_API +# include +# endif +# include + +# include + +# ifndef OPENSSL_NO_SCTP +# ifndef OPENSSL_SYS_VMS +# include +# else +# include +# endif +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM (1|0x0400) +# define BIO_TYPE_FILE (2|0x0400) + +# define BIO_TYPE_FD (4|0x0400|0x0100) +# define BIO_TYPE_SOCKET (5|0x0400|0x0100) +# define BIO_TYPE_NULL (6|0x0400) +# define BIO_TYPE_SSL (7|0x0200) +# define BIO_TYPE_MD (8|0x0200)/* passive filter */ +# define BIO_TYPE_BUFFER (9|0x0200)/* filter */ +# define BIO_TYPE_CIPHER (10|0x0200)/* filter */ +# define BIO_TYPE_BASE64 (11|0x0200)/* filter */ +# define BIO_TYPE_CONNECT (12|0x0400|0x0100)/* socket - connect */ +# define BIO_TYPE_ACCEPT (13|0x0400|0x0100)/* socket for accept */ +# define BIO_TYPE_PROXY_CLIENT (14|0x0200)/* client proxy BIO */ +# define BIO_TYPE_PROXY_SERVER (15|0x0200)/* server proxy BIO */ +# define BIO_TYPE_NBIO_TEST (16|0x0200)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|0x0200) +# define BIO_TYPE_BER (18|0x0200)/* BER -> bin filter */ +# define BIO_TYPE_BIO (19|0x0400)/* (half a) BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|0x0200)/* filter */ +# define BIO_TYPE_DGRAM (21|0x0400|0x0100) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|0x0400|0x0100) +# endif +# define BIO_TYPE_ASN1 (22|0x0200)/* filter */ +# define BIO_TYPE_COMP (23|0x0200)/* filter */ + +# define BIO_TYPE_DESCRIPTOR 0x0100/* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +/* callback is int cb(BIO *bio,state,ret); */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef BIO_FLAGS_UPLINK +/* + * "UPLINK" flag denotes file descriptors provided by application. It + * defaults to 0, as most platforms don't require UPLINK interface. + */ +# define BIO_FLAGS_UPLINK 0 +# endif + +/* Used in BIO_gethostbyname() */ +# define BIO_GHBN_CTRL_HITS 1 +# define BIO_GHBN_CTRL_MISSES 2 +# define BIO_GHBN_CTRL_CACHE_SIZE 3 +# define BIO_GHBN_CTRL_GET_ENTRY 4 +# define BIO_GHBN_CTRL_FLUSH 5 + +/* Mostly used in the SSL BIO */ +/*- + * Not used anymore + * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10 + * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20 + * #define BIO_FLAGS_PROTOCOL_STARTUP 0x40 + */ + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: it means we shouldn't free up or change the + * data in any way. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 + +typedef struct bio_st BIO; + +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *, + int, long, long); +void BIO_set_callback(BIO *b, + long (*callback) (struct bio_st *, int, const char *, + int, long, long)); +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef void bio_info_cb (struct bio_st *, int, const char *, int, long, + long); + +typedef struct bio_method_st { + int type; + const char *name; + int (*bwrite) (BIO *, const char *, int); + int (*bread) (BIO *, char *, int); + int (*bputs) (BIO *, const char *); + int (*bgets) (BIO *, char *, int); + long (*ctrl) (BIO *, int, long, void *); + int (*create) (BIO *); + int (*destroy) (BIO *); + long (*callback_ctrl) (BIO *, int, bio_info_cb *); +} BIO_METHOD; + +struct bio_st { + BIO_METHOD *method; + /* bio, mode, argp, argi, argl, ret */ + long (*callback) (struct bio_st *, int, const char *, int, long, long); + char *cb_arg; /* first argument for the callback */ + int init; + int shutdown; + int flags; /* extra storage */ + int retry_reason; + int num; + void *ptr; + struct bio_st *next_bio; /* used by filter BIOs */ + struct bio_st *prev_bio; /* used by filter BIOs */ + int references; + unsigned long num_read; + unsigned long num_write; + CRYPTO_EX_DATA ex_data; +}; + +DECLARE_STACK_OF(BIO) + +typedef struct bio_f_buffer_ctx_struct { + /*- + * Buffers are setup like this: + * + * <---------------------- size -----------------------> + * +---------------------------------------------------+ + * | consumed | remaining | free space | + * +---------------------------------------------------+ + * <-- off --><------- len -------> + */ + /*- BIO *bio; *//* + * this is now in the BIO struct + */ + int ibuf_size; /* how big is the input buffer */ + int obuf_size; /* how big is the output buffer */ + char *ibuf; /* the char array */ + int ibuf_len; /* how many bytes are in it */ + int ibuf_off; /* write/read offset */ + char *obuf; /* the char array */ + int obuf_len; /* how many bytes are in it */ + int obuf_off; /* write/read offset */ +} BIO_F_BUFFER_CTX; + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* connect BIO stuff */ +# define BIO_CONN_S_BEFORE 1 +# define BIO_CONN_S_GET_IP 2 +# define BIO_CONN_S_GET_PORT 3 +# define BIO_CONN_S_CREATE_SOCKET 4 +# define BIO_CONN_S_CONNECT 5 +# define BIO_CONN_S_OK 6 +# define BIO_CONN_S_BLOCKED_CONNECT 7 +# define BIO_CONN_S_NBIO 8 +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +# define BIO_C_SET_PROXY_PARAM 103 +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +# define BIO_C_GET_PROXY_PARAM 121 +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +/* BIO_s_connect() and BIO_s_socks4a_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port) +# define BIO_set_conn_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip) +# define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port) +# define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0) +# define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1) +# define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2) +# define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) +# define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio) + +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR_IF_UNUSED 1 +# define BIO_BIND_REUSEADDR 2 +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +/* BIO_s_accept() and BIO_s_connect() */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_proxy_client() */ +# define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url)) +# define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p)) +/* BIO_set_nbio(b,n) */ +# define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s)) +/* BIO *BIO_get_filter_bio(BIO *bio); */ +# define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)())) +# define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk) +# define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool) + +# define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp) +# define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p)) +# define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url)) +# define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)name) +# endif +# define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer) +# define BIO_ctrl_set_connected(b, state, peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +/* These two aren't currently implemented */ +/* int BIO_get_ex_num(BIO *bio); */ +/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */ +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(BIO *bio, int idx); +int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +unsigned long BIO_number_read(BIO *bio); +unsigned long BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +# ifndef OPENSSL_NO_FP_API +BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_fp(FILE *stream, int close_flag); +# define BIO_s_file_internal BIO_s_file +# endif +BIO *BIO_new(BIO_METHOD *type); +int BIO_set(BIO *a, BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_vfree(BIO *a); +int BIO_read(BIO *b, void *data, int len); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_write(BIO *b, const void *data, int len); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, + void (*fp) (struct bio_st *, int, const char *, int, + long, long)); +char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, + long argl, long ret); + +BIO_METHOD *BIO_s_mem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +BIO_METHOD *BIO_s_socket(void); +BIO_METHOD *BIO_s_connect(void); +BIO_METHOD *BIO_s_accept(void); +BIO_METHOD *BIO_s_fd(void); +# ifndef OPENSSL_SYS_OS2 +BIO_METHOD *BIO_s_log(void); +# endif +BIO_METHOD *BIO_s_bio(void); +BIO_METHOD *BIO_s_null(void); +BIO_METHOD *BIO_f_null(void); +BIO_METHOD *BIO_f_buffer(void); +# ifdef OPENSSL_SYS_VMS +BIO_METHOD *BIO_f_linebuffer(void); +# endif +BIO_METHOD *BIO_f_nbio_test(void); +# ifndef OPENSSL_NO_DGRAM +BIO_METHOD *BIO_s_datagram(void); +# ifndef OPENSSL_NO_SCTP +BIO_METHOD *BIO_s_datagram_sctp(void); +# endif +# endif + +/* BIO_METHOD *BIO_f_ber(void); */ + +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_dgram_non_fatal_error(int error); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len, int indent); +int BIO_dump(BIO *b, const char *bytes, int len); +int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); +# ifndef OPENSSL_NO_FP_API +int BIO_dump_fp(FILE *fp, const char *s, int len); +int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, + int datalen); + +struct hostent *BIO_gethostbyname(const char *name); +/*- + * We might want a thread-safe interface too: + * struct hostent *BIO_gethostbyname_r(const char *name, + * struct hostent *result, void *buffer, size_t buflen); + * or something similar (caller allocates a struct hostent, + * pointed to by "result", and additional buffer space for the various + * substructures; if the buffer does not suffice, NULL is returned + * and an appropriate error code is set). + */ +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_get_port(const char *str, unsigned short *port_ptr); +int BIO_get_host_ip(const char *str, unsigned char *ip); +int BIO_get_accept_socket(char *host_port, int mode); +int BIO_accept(int sock, char **ip_port); +int BIO_sock_init(void); +void BIO_sock_cleanup(void); +int BIO_set_tcp_ndelay(int sock, int turn_on); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + void (*handle_notifications) (BIO *bio, + void + *context, + void *buf), + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +BIO *BIO_new_fd(int fd, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# ifdef __GNUC__ +# define __bio_h__attr__ __attribute__ +# else +# define __bio_h__attr__(x) +# endif +int BIO_printf(BIO *bio, const char *format, ...) +__bio_h__attr__((__format__(__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +__bio_h__attr__((__format__(__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +__bio_h__attr__((__format__(__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +__bio_h__attr__((__format__(__printf__, 3, 0))); +# undef __bio_h__attr__ + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_BIO_strings(void); + +/* Error codes for the BIO functions. */ + +/* Function codes. */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_BER_GET_HEADER 102 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETHOSTBYNAME 120 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_ACCEPT_SOCKET 105 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_MAKE_PAIR 121 +# define BIO_F_BIO_NEW 108 +# define BIO_F_BIO_NEW_FILE 109 +# define BIO_F_BIO_NEW_MEM_BUF 126 +# define BIO_F_BIO_NREAD 123 +# define BIO_F_BIO_NREAD0 124 +# define BIO_F_BIO_NWRITE 125 +# define BIO_F_BIO_NWRITE0 122 +# define BIO_F_BIO_PUTS 110 +# define BIO_F_BIO_READ 111 +# define BIO_F_BIO_SOCK_INIT 112 +# define BIO_F_BIO_WRITE 113 +# define BIO_F_BUFFER_CTRL 114 +# define BIO_F_CONN_CTRL 127 +# define BIO_F_CONN_STATE 115 +# define BIO_F_DGRAM_SCTP_READ 132 +# define BIO_F_DGRAM_SCTP_WRITE 133 +# define BIO_F_FILE_CTRL 116 +# define BIO_F_FILE_READ 130 +# define BIO_F_LINEBUFFER_CTRL 129 +# define BIO_F_MEM_READ 128 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_SSL_NEW 118 +# define BIO_F_WSASTARTUP 119 + +/* Reason codes. */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BAD_HOSTNAME_LOOKUP 102 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_EOF_ON_MEMORY_BIO 127 +# define BIO_R_ERROR_SETTING_NBIO 104 +# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105 +# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_IP_ADDRESS 108 +# define BIO_R_IN_USE 123 +# define BIO_R_KEEPALIVE 109 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111 +# define BIO_R_NO_HOSTNAME_SPECIFIED 112 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_PORT_SPECIFIED 114 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_TAG_MISMATCH 116 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/blowfish.h b/src/components/openssl/blowfish.h new file mode 100644 index 0000000..5dab06b --- /dev/null +++ b/src/components/openssl/blowfish.h @@ -0,0 +1,130 @@ +/* crypto/bf/blowfish.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BLOWFISH_H +# define HEADER_BLOWFISH_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_BF +# error BF is disabled. +# endif + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! BF_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! BF_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define BF_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define BF_LONG unsigned long +# define BF_LONG_LOG2 3 +/* + * _CRAY note. I could declare short, but I have no idea what impact + * does it have on performance on none-T3E machines. I could declare + * int, but at least on C90 sizeof(int) can be chosen at compile time. + * So I've chosen long... + * + */ +# else +# define BF_LONG unsigned int +# endif + +# define BF_ROUNDS 16 +# define BF_BLOCK 8 + +typedef struct bf_key_st { + BF_LONG P[BF_ROUNDS + 2]; + BF_LONG S[4 * 256]; +} BF_KEY; + +# ifdef OPENSSL_FIPS +void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data); +# endif +void BF_set_key(BF_KEY *key, int len, const unsigned char *data); + +void BF_encrypt(BF_LONG *data, const BF_KEY *key); +void BF_decrypt(BF_LONG *data, const BF_KEY *key); + +void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, + const BF_KEY *key, int enc); +void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + const BF_KEY *schedule, unsigned char *ivec, int enc); +void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +const char *BF_options(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/bn.h b/src/components/openssl/bn.h new file mode 100644 index 0000000..4945858 --- /dev/null +++ b/src/components/openssl/bn.h @@ -0,0 +1,951 @@ +/* crypto/bn/bn.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 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). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the Eric Young open source + * license provided above. + * + * The binary polynomial arithmetic software is originally written by + * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. + * + */ + +#ifndef HEADER_BN_H +# define HEADER_BN_H + +# include +# include +# ifndef OPENSSL_NO_FP_API +# include /* FILE */ +# endif +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These preprocessor symbols control various aspects of the bignum headers + * and library code. They're not defined by any "normal" configuration, as + * they are intended for development and testing purposes. NB: defining all + * three can be useful for debugging application code as well as openssl + * itself. BN_DEBUG - turn on various debugging alterations to the bignum + * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up + * mismanagement of bignum internals. You must also define BN_DEBUG. + */ +/* #define BN_DEBUG */ +/* #define BN_DEBUG_RAND */ + +# ifndef OPENSSL_SMALL_FOOTPRINT +# define BN_MUL_COMBA +# define BN_SQR_COMBA +# define BN_RECURSION +# endif + +/* + * This next option uses the C libraries (2 word)/(1 word) function. If it is + * not defined, I use my C version (which is slower). The reason for this + * flag is that when the particular C compiler library routine is used, and + * the library is linked with a different compiler, the library is missing. + * This mostly happens when the library is built with gcc and then linked + * using normal cc. This would be a common occurrence because gcc normally + * produces code that is 2 times faster than system compilers for the big + * number stuff. For machines with only one compiler (or shared libraries), + * this should be on. Again this in only really a problem on machines using + * "long long's", are 32bit, and are not using my assembler code. + */ +# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \ + defined(OPENSSL_SYS_WIN32) || defined(linux) +# ifndef BN_DIV2W +# define BN_DIV2W +# endif +# endif + +/* + * assuming long is 64bit - this is the DEC Alpha unsigned long long is only + * 64 bits :-(, don't define BN_LLONG for the DEC Alpha + */ +# ifdef SIXTY_FOUR_BIT_LONG +# define BN_ULLONG unsigned long long +# define BN_ULONG unsigned long +# define BN_LONG long +# define BN_BITS 128 +# define BN_BYTES 8 +# define BN_BITS2 64 +# define BN_BITS4 32 +# define BN_MASK (0xffffffffffffffffffffffffffffffffLL) +# define BN_MASK2 (0xffffffffffffffffL) +# define BN_MASK2l (0xffffffffL) +# define BN_MASK2h (0xffffffff00000000L) +# define BN_MASK2h1 (0xffffffff80000000L) +# define BN_TBIT (0x8000000000000000L) +# define BN_DEC_CONV (10000000000000000000UL) +# define BN_DEC_FMT1 "%lu" +# define BN_DEC_FMT2 "%019lu" +# define BN_DEC_NUM 19 +# define BN_HEX_FMT1 "%lX" +# define BN_HEX_FMT2 "%016lX" +# endif + +/* + * This is where the long long data type is 64 bits, but long is 32. For + * machines where there are 64bit registers, this is the mode to use. IRIX, + * on R4000 and above should use this mode, along with the relevant assembler + * code :-). Do NOT define BN_LLONG. + */ +# ifdef SIXTY_FOUR_BIT +# undef BN_LLONG +# undef BN_ULLONG +# define BN_ULONG unsigned long long +# define BN_LONG long long +# define BN_BITS 128 +# define BN_BYTES 8 +# define BN_BITS2 64 +# define BN_BITS4 32 +# define BN_MASK2 (0xffffffffffffffffLL) +# define BN_MASK2l (0xffffffffL) +# define BN_MASK2h (0xffffffff00000000LL) +# define BN_MASK2h1 (0xffffffff80000000LL) +# define BN_TBIT (0x8000000000000000LL) +# define BN_DEC_CONV (10000000000000000000ULL) +# define BN_DEC_FMT1 "%llu" +# define BN_DEC_FMT2 "%019llu" +# define BN_DEC_NUM 19 +# define BN_HEX_FMT1 "%llX" +# define BN_HEX_FMT2 "%016llX" +# endif + +# ifdef THIRTY_TWO_BIT +# ifdef BN_LLONG +# if defined(_WIN32) && !defined(__GNUC__) +# define BN_ULLONG unsigned __int64 +# define BN_MASK (0xffffffffffffffffI64) +# else +# define BN_ULLONG unsigned long long +# define BN_MASK (0xffffffffffffffffLL) +# endif +# endif +# define BN_ULONG unsigned int +# define BN_LONG int +# define BN_BITS 64 +# define BN_BYTES 4 +# define BN_BITS2 32 +# define BN_BITS4 16 +# define BN_MASK2 (0xffffffffL) +# define BN_MASK2l (0xffff) +# define BN_MASK2h1 (0xffff8000L) +# define BN_MASK2h (0xffff0000L) +# define BN_TBIT (0x80000000L) +# define BN_DEC_CONV (1000000000L) +# define BN_DEC_FMT1 "%u" +# define BN_DEC_FMT2 "%09u" +# define BN_DEC_NUM 9 +# define BN_HEX_FMT1 "%X" +# define BN_HEX_FMT2 "%08X" +# endif + +# define BN_DEFAULT_BITS 1280 + +# define BN_FLG_MALLOCED 0x01 +# define BN_FLG_STATIC_DATA 0x02 + +/* + * avoid leaking exponent information through timing, + * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, + * BN_div() will call BN_div_no_branch, + * BN_mod_inverse() will call BN_mod_inverse_no_branch. + */ +# define BN_FLG_CONSTTIME 0x04 + +# ifdef OPENSSL_NO_DEPRECATED +/* deprecated name for the flag */ +# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME +/* + * avoid leaking exponent information through timings + * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) + */ +# endif + +# ifndef OPENSSL_NO_DEPRECATED +# define BN_FLG_FREE 0x8000 + /* used for debuging */ +# endif +# define BN_set_flags(b,n) ((b)->flags|=(n)) +# define BN_get_flags(b,n) ((b)->flags&(n)) + +/* + * get a clone of a BIGNUM with changed flags, for *temporary* use only (the + * two BIGNUMs cannot not be used in parallel!) + */ +# define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \ + (dest)->top=(b)->top, \ + (dest)->dmax=(b)->dmax, \ + (dest)->neg=(b)->neg, \ + (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \ + | ((b)->flags & ~BN_FLG_MALLOCED) \ + | BN_FLG_STATIC_DATA \ + | (n))) + +/* Already declared in ossl_typ.h */ +# if 0 +typedef struct bignum_st BIGNUM; +/* Used for temp variables (declaration hidden in bn_lcl.h) */ +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; +# endif + +struct bignum_st { + BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit + * chunks. */ + int top; /* Index of last used d +1. */ + /* The next are internal book keeping for bn_expand. */ + int dmax; /* Size of the d array. */ + int neg; /* one if the number is negative */ + int flags; +}; + +/* Used for montgomery multiplication */ +struct bn_mont_ctx_st { + int ri; /* number of bits in R */ + BIGNUM RR; /* used to convert to montgomery form */ + BIGNUM N; /* The modulus */ + BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 (Ni is only + * stored for bignum algorithm) */ + BN_ULONG n0[2]; /* least significant word(s) of Ni; (type + * changed with 0.9.9, was "BN_ULONG n0;" + * before) */ + int flags; +}; + +/* + * Used for reciprocal division/mod functions It cannot be shared between + * threads + */ +struct bn_recp_ctx_st { + BIGNUM N; /* the divisor */ + BIGNUM Nr; /* the reciprocal */ + int num_bits; + int shift; + int flags; +}; + +/* Used for slow "generation" functions. */ +struct bn_gencb_st { + unsigned int ver; /* To handle binary (in)compatibility */ + void *arg; /* callback-specific data */ + union { + /* if(ver==1) - handles old style callbacks */ + void (*cb_1) (int, int, void *); + /* if(ver==2) - new callback style */ + int (*cb_2) (int, int, BN_GENCB *); + } cb; +}; +/* Wrapper function to make using BN_GENCB easier, */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); +/* Macro to populate a BN_GENCB structure with an "old"-style callback */ +# define BN_GENCB_set_old(gencb, callback, cb_arg) { \ + BN_GENCB *tmp_gencb = (gencb); \ + tmp_gencb->ver = 1; \ + tmp_gencb->arg = (cb_arg); \ + tmp_gencb->cb.cb_1 = (callback); } +/* Macro to populate a BN_GENCB structure with a "new"-style callback */ +# define BN_GENCB_set(gencb, callback, cb_arg) { \ + BN_GENCB *tmp_gencb = (gencb); \ + tmp_gencb->ver = 2; \ + tmp_gencb->arg = (cb_arg); \ + tmp_gencb->cb.cb_2 = (callback); } + +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ + +/* + * number of Miller-Rabin iterations for an error rate of less than 2^-80 for + * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of + * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996]; + * original paper: Damgaard, Landrock, Pomerance: Average case error + * estimates for the strong probable prime test. -- Math. Comp. 61 (1993) + * 177-194) + */ +# define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \ + (b) >= 850 ? 3 : \ + (b) >= 650 ? 4 : \ + (b) >= 550 ? 5 : \ + (b) >= 450 ? 6 : \ + (b) >= 400 ? 7 : \ + (b) >= 350 ? 8 : \ + (b) >= 300 ? 9 : \ + (b) >= 250 ? 12 : \ + (b) >= 200 ? 15 : \ + (b) >= 150 ? 18 : \ + /* b >= 100 */ 27) + +# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) + +/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */ +# define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \ + (((w) == 0) && ((a)->top == 0))) +# define BN_is_zero(a) ((a)->top == 0) +# define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg) +# define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg)) +# define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1)) + +# define BN_one(a) (BN_set_word((a),1)) +# define BN_zero_ex(a) \ + do { \ + BIGNUM *_tmp_bn = (a); \ + _tmp_bn->top = 0; \ + _tmp_bn->neg = 0; \ + } while(0) +# ifdef OPENSSL_NO_DEPRECATED +# define BN_zero(a) BN_zero_ex(a) +# else +# define BN_zero(a) (BN_set_word((a),0)) +# endif + +const BIGNUM *BN_value_one(void); +char *BN_options(void); +BN_CTX *BN_CTX_new(void); +# ifndef OPENSSL_NO_DEPRECATED +void BN_CTX_init(BN_CTX *c); +# endif +void BN_CTX_free(BN_CTX *c); +void BN_CTX_start(BN_CTX *ctx); +BIGNUM *BN_CTX_get(BN_CTX *ctx); +void BN_CTX_end(BN_CTX *ctx); +int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_num_bits(const BIGNUM *a); +int BN_num_bits_word(BN_ULONG); +BIGNUM *BN_new(void); +void BN_init(BIGNUM *); +void BN_clear_free(BIGNUM *a); +BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); +void BN_swap(BIGNUM *a, BIGNUM *b); +BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2bin(const BIGNUM *a, unsigned char *to); +BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2mpi(const BIGNUM *a, unsigned char *to); +int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); +/** BN_set_negative sets sign of a BIGNUM + * \param b pointer to the BIGNUM object + * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise + */ +void BN_set_negative(BIGNUM *b, int n); +/** BN_is_negative returns 1 if the BIGNUM is negative + * \param a pointer to the BIGNUM object + * \return 1 if a < 0 and 0 otherwise + */ +# define BN_is_negative(a) ((a)->neg != 0) + +int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, + BN_CTX *ctx); +# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) +int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); +int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); + +BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); +BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); +int BN_mul_word(BIGNUM *a, BN_ULONG w); +int BN_add_word(BIGNUM *a, BN_ULONG w); +int BN_sub_word(BIGNUM *a, BN_ULONG w); +int BN_set_word(BIGNUM *a, BN_ULONG w); +BN_ULONG BN_get_word(const BIGNUM *a); + +int BN_cmp(const BIGNUM *a, const BIGNUM *b); +void BN_free(BIGNUM *a); +int BN_is_bit_set(const BIGNUM *a, int n); +int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_lshift1(BIGNUM *r, const BIGNUM *a); +int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); +int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, + BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); + +int BN_mask_bits(BIGNUM *a, int n); +# ifndef OPENSSL_NO_FP_API +int BN_print_fp(FILE *fp, const BIGNUM *a); +# endif +# ifdef HEADER_BIO_H +int BN_print(BIO *fp, const BIGNUM *a); +# else +int BN_print(void *fp, const BIGNUM *a); +# endif +int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); +int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_rshift1(BIGNUM *r, const BIGNUM *a); +void BN_clear(BIGNUM *a); +BIGNUM *BN_dup(const BIGNUM *a); +int BN_ucmp(const BIGNUM *a, const BIGNUM *b); +int BN_set_bit(BIGNUM *a, int n); +int BN_clear_bit(BIGNUM *a, int n); +char *BN_bn2hex(const BIGNUM *a); +char *BN_bn2dec(const BIGNUM *a); +int BN_hex2bn(BIGNUM **a, const char *str); +int BN_dec2bn(BIGNUM **a, const char *str); +int BN_asc2bn(BIGNUM **a, const char *str); +int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns + * -2 for + * error */ +BIGNUM *BN_mod_inverse(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); +BIGNUM *BN_mod_sqrt(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); + +void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); + +/* Deprecated versions */ +# ifndef OPENSSL_NO_DEPRECATED +BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback) (int, int, void *), void *cb_arg); +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), BN_CTX *ctx, + void *cb_arg, int do_trial_division); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* Newer versions */ +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, + int do_trial_division, BN_GENCB *cb); + +int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); + +int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); +int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, + BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, + BN_CTX *ctx, BN_GENCB *cb); + +BN_MONT_CTX *BN_MONT_CTX_new(void); +void BN_MONT_CTX_init(BN_MONT_CTX *ctx); +int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +# define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\ + (r),(a),&((mont)->RR),(mont),(ctx)) +int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, + BN_MONT_CTX *mont, BN_CTX *ctx); +void BN_MONT_CTX_free(BN_MONT_CTX *mont); +int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); +BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); +BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, + const BIGNUM *mod, BN_CTX *ctx); + +/* BN_BLINDING flags */ +# define BN_BLINDING_NO_UPDATE 0x00000001 +# define BN_BLINDING_NO_RECREATE 0x00000002 + +BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); +void BN_BLINDING_free(BN_BLINDING *b); +int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); +int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, + BN_CTX *); +# ifndef OPENSSL_NO_DEPRECATED +unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *); +void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long); +# endif +CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *); +unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); +void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); +BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, + const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx), + BN_MONT_CTX *m_ctx); + +# ifndef OPENSSL_NO_DEPRECATED +void BN_set_params(int mul, int high, int low, int mont); +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif + +void BN_RECP_CTX_init(BN_RECP_CTX *recp); +BN_RECP_CTX *BN_RECP_CTX_new(void); +void BN_RECP_CTX_free(BN_RECP_CTX *recp); +int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); +int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, + BN_RECP_CTX *recp, BN_CTX *ctx); +int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, + BN_RECP_CTX *recp, BN_CTX *ctx); + +# ifndef OPENSSL_NO_EC2M + +/* + * Functions for arithmetic over binary polynomials represented by BIGNUMs. + * The BIGNUM::neg property of BIGNUMs representing binary polynomials is + * ignored. Note that input arguments are not const so that their bit arrays + * can be expanded to the appropriate size if needed. + */ + +/* + * r = a + b + */ +int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) +/* + * r=a mod p + */ +int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) +/*- + * Some functions allow for representation of the irreducible polynomials + * as an unsigned int[], say p. The irreducible f(t) is then of the form: + * t^p[0] + t^p[1] + ... + t^p[k] + * where m = p[0] > p[1] > ... > p[k] = 0. + */ +/* r = a mod p */ +int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], + BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], + BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); +int BN_GF2m_arr2poly(const int p[], BIGNUM *a); + +# endif + +/* + * faster mod functions for the 'NIST primes' 0 <= a < p^2 + */ +int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +const BIGNUM *BN_get0_nist_prime_192(void); +const BIGNUM *BN_get0_nist_prime_224(void); +const BIGNUM *BN_get0_nist_prime_256(void); +const BIGNUM *BN_get0_nist_prime_384(void); +const BIGNUM *BN_get0_nist_prime_521(void); + +/* library internal functions */ + +# define bn_expand(a,bits) \ + ( \ + bits > (INT_MAX - BN_BITS2 + 1) ? \ + NULL \ + : \ + (((bits+BN_BITS2-1)/BN_BITS2) <= (a)->dmax) ? \ + (a) \ + : \ + bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2) \ + ) + +# define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) +BIGNUM *bn_expand2(BIGNUM *a, int words); +# ifndef OPENSSL_NO_DEPRECATED +BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ +# endif + +/*- + * Bignum consistency macros + * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from + * bignum data after direct manipulations on the data. There is also an + * "internal" macro, bn_check_top(), for verifying that there are no leading + * zeroes. Unfortunately, some auditing is required due to the fact that + * bn_fix_top() has become an overabused duct-tape because bignum data is + * occasionally passed around in an inconsistent state. So the following + * changes have been made to sort this out; + * - bn_fix_top()s implementation has been moved to bn_correct_top() + * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and + * bn_check_top() is as before. + * - if BN_DEBUG *is* defined; + * - bn_check_top() tries to pollute unused words even if the bignum 'top' is + * consistent. (ed: only if BN_DEBUG_RAND is defined) + * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything. + * The idea is to have debug builds flag up inconsistent bignums when they + * occur. If that occurs in a bn_fix_top(), we examine the code in question; if + * the use of bn_fix_top() was appropriate (ie. it follows directly after code + * that manipulates the bignum) it is converted to bn_correct_top(), and if it + * was not appropriate, we convert it permanently to bn_check_top() and track + * down the cause of the bug. Eventually, no internal code should be using the + * bn_fix_top() macro. External applications and libraries should try this with + * their own code too, both in terms of building against the openssl headers + * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it + * defined. This not only improves external code, it provides more test + * coverage for openssl's own code. + */ + +# ifdef BN_DEBUG + +/* We only need assert() when debugging */ +# include + +# ifdef BN_DEBUG_RAND +/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ +# ifndef RAND_pseudo_bytes +int RAND_pseudo_bytes(unsigned char *buf, int num); +# define BN_DEBUG_TRIX +# endif +# define bn_pollute(a) \ + do { \ + const BIGNUM *_bnum1 = (a); \ + if(_bnum1->top < _bnum1->dmax) { \ + unsigned char _tmp_char; \ + /* We cast away const without the compiler knowing, any \ + * *genuinely* constant variables that aren't mutable \ + * wouldn't be constructed with top!=dmax. */ \ + BN_ULONG *_not_const; \ + memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \ + /* Debug only - safe to ignore error return */ \ + RAND_pseudo_bytes(&_tmp_char, 1); \ + memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \ + (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \ + } \ + } while(0) +# ifdef BN_DEBUG_TRIX +# undef RAND_pseudo_bytes +# endif +# else +# define bn_pollute(a) +# endif +# define bn_check_top(a) \ + do { \ + const BIGNUM *_bnum2 = (a); \ + if (_bnum2 != NULL) { \ + assert((_bnum2->top == 0) || \ + (_bnum2->d[_bnum2->top - 1] != 0)); \ + bn_pollute(_bnum2); \ + } \ + } while(0) + +# define bn_fix_top(a) bn_check_top(a) + +# define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2) +# define bn_wcheck_size(bn, words) \ + do { \ + const BIGNUM *_bnum2 = (bn); \ + assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \ + /* avoid unused variable warning with NDEBUG */ \ + (void)(_bnum2); \ + } while(0) + +# else /* !BN_DEBUG */ + +# define bn_pollute(a) +# define bn_check_top(a) +# define bn_fix_top(a) bn_correct_top(a) +# define bn_check_size(bn, bits) +# define bn_wcheck_size(bn, words) + +# endif + +# define bn_correct_top(a) \ + { \ + BN_ULONG *ftl; \ + int tmp_top = (a)->top; \ + if (tmp_top > 0) \ + { \ + for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \ + if (*(ftl--)) break; \ + (a)->top = tmp_top; \ + } \ + if ((a)->top == 0) \ + (a)->neg = 0; \ + bn_pollute(a); \ + } + +BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, + BN_ULONG w); +BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); +void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num); +BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d); +BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, + int num); +BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, + int num); + +/* Primes from RFC 2409 */ +BIGNUM *get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn); + +int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_BN_strings(void); + +/* Error codes for the BN functions. */ + +/* Function codes. */ +# define BN_F_BNRAND 127 +# define BN_F_BN_BLINDING_CONVERT_EX 100 +# define BN_F_BN_BLINDING_CREATE_PARAM 128 +# define BN_F_BN_BLINDING_INVERT_EX 101 +# define BN_F_BN_BLINDING_NEW 102 +# define BN_F_BN_BLINDING_UPDATE 103 +# define BN_F_BN_BN2DEC 104 +# define BN_F_BN_BN2HEX 105 +# define BN_F_BN_CTX_GET 116 +# define BN_F_BN_CTX_NEW 106 +# define BN_F_BN_CTX_START 129 +# define BN_F_BN_DIV 107 +# define BN_F_BN_DIV_NO_BRANCH 138 +# define BN_F_BN_DIV_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND2 108 +# define BN_F_BN_EXPAND_INTERNAL 120 +# define BN_F_BN_GF2M_MOD 131 +# define BN_F_BN_GF2M_MOD_EXP 132 +# define BN_F_BN_GF2M_MOD_MUL 133 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +# define BN_F_BN_GF2M_MOD_SQR 136 +# define BN_F_BN_GF2M_MOD_SQRT 137 +# define BN_F_BN_LSHIFT 145 +# define BN_F_BN_MOD_EXP2_MONT 118 +# define BN_F_BN_MOD_EXP_MONT 109 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +# define BN_F_BN_MOD_EXP_MONT_WORD 117 +# define BN_F_BN_MOD_EXP_RECP 125 +# define BN_F_BN_MOD_EXP_SIMPLE 126 +# define BN_F_BN_MOD_INVERSE 110 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +# define BN_F_BN_MOD_LSHIFT_QUICK 119 +# define BN_F_BN_MOD_MUL_RECIPROCAL 111 +# define BN_F_BN_MOD_SQRT 121 +# define BN_F_BN_MPI2BN 112 +# define BN_F_BN_NEW 113 +# define BN_F_BN_RAND 114 +# define BN_F_BN_RAND_RANGE 122 +# define BN_F_BN_RSHIFT 146 +# define BN_F_BN_USUB 115 + +/* Reason codes. */ +# define BN_R_ARG2_LT_ARG3 100 +# define BN_R_BAD_RECIPROCAL 101 +# define BN_R_BIGNUM_TOO_LONG 114 +# define BN_R_BITS_TOO_SMALL 118 +# define BN_R_CALLED_WITH_EVEN_MODULUS 102 +# define BN_R_DIV_BY_ZERO 103 +# define BN_R_ENCODING_ERROR 104 +# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +# define BN_R_INPUT_NOT_REDUCED 110 +# define BN_R_INVALID_LENGTH 106 +# define BN_R_INVALID_RANGE 115 +# define BN_R_INVALID_SHIFT 119 +# define BN_R_NOT_A_SQUARE 111 +# define BN_R_NOT_INITIALIZED 107 +# define BN_R_NO_INVERSE 108 +# define BN_R_NO_SOLUTION 116 +# define BN_R_P_IS_NOT_PRIME 112 +# define BN_R_TOO_MANY_ITERATIONS 113 +# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/buffer.h b/src/components/openssl/buffer.h new file mode 100644 index 0000000..e8cf4d0 --- /dev/null +++ b/src/components/openssl/buffer.h @@ -0,0 +1,125 @@ +/* crypto/buffer/buffer.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BUFFER_H +# define HEADER_BUFFER_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# if !defined(NO_SYS_TYPES_H) +# include +# endif + +/* Already declared in ossl_typ.h */ +/* typedef struct buf_mem_st BUF_MEM; */ + +struct buf_mem_st { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ +}; + +BUF_MEM *BUF_MEM_new(void); +void BUF_MEM_free(BUF_MEM *a); +int BUF_MEM_grow(BUF_MEM *str, size_t len); +int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +size_t BUF_strnlen(const char *str, size_t maxlen); +char *BUF_strdup(const char *str); + +/* + * Like strndup, but in addition, explicitly guarantees to never read past the + * first |siz| bytes of |str|. + */ +char *BUF_strndup(const char *str, size_t siz); + +void *BUF_memdup(const void *data, size_t siz); +void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); + +/* safe string functions */ +size_t BUF_strlcpy(char *dst, const char *src, size_t siz); +size_t BUF_strlcat(char *dst, const char *src, size_t siz); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_BUF_strings(void); + +/* Error codes for the BUF functions. */ + +/* Function codes. */ +# define BUF_F_BUF_MEMDUP 103 +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 +# define BUF_F_BUF_STRDUP 102 +# define BUF_F_BUF_STRNDUP 104 + +/* Reason codes. */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/camellia.h b/src/components/openssl/camellia.h new file mode 100644 index 0000000..4c65d4e --- /dev/null +++ b/src/components/openssl/camellia.h @@ -0,0 +1,132 @@ +/* crypto/camellia/camellia.h */ +/* ==================================================================== + * Copyright (c) 2006 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. + * ==================================================================== + * + */ + +#ifndef HEADER_CAMELLIA_H +# define HEADER_CAMELLIA_H + +# include + +# ifdef OPENSSL_NO_CAMELLIA +# error CAMELLIA is disabled. +# endif + +# include + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* This should be a hidden type, but EVP requires that the size be known */ + +# define CAMELLIA_BLOCK_SIZE 16 +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) + +typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match + * with WORD */ + +struct camellia_key_st { + union { + double d; /* ensures 64-bit align */ + KEY_TABLE_TYPE rd_key; + } u; + int grand_rounds; +}; +typedef struct camellia_key_st CAMELLIA_KEY; + +# ifdef OPENSSL_FIPS +int private_Camellia_set_key(const unsigned char *userKey, const int bits, + CAMELLIA_KEY *key); +# endif +int Camellia_set_key(const unsigned char *userKey, const int bits, + CAMELLIA_KEY *key); + +void Camellia_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void Camellia_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key, const int enc); +void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, const int enc); +void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num); +void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char ivec[CAMELLIA_BLOCK_SIZE], + unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], + unsigned int *num); + +#ifdef __cplusplus +} +#endif + +#endif /* !HEADER_Camellia_H */ diff --git a/src/components/openssl/cast.h b/src/components/openssl/cast.h new file mode 100644 index 0000000..5415fcd --- /dev/null +++ b/src/components/openssl/cast.h @@ -0,0 +1,107 @@ +/* crypto/cast/cast.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CAST_H +# define HEADER_CAST_H + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# ifdef OPENSSL_NO_CAST +# error CAST is disabled. +# endif + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + +# define CAST_BLOCK 8 +# define CAST_KEY_LENGTH 16 + +typedef struct cast_key_st { + CAST_LONG data[32]; + int short_key; /* Use reduced rounds for short key */ +} CAST_KEY; + +# ifdef OPENSSL_FIPS +void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +# endif +void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAST_KEY *key, int enc); +void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *ks, unsigned char *iv, + int enc); +void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/cmac.h b/src/components/openssl/cmac.h new file mode 100644 index 0000000..1da7646 --- /dev/null +++ b/src/components/openssl/cmac.h @@ -0,0 +1,82 @@ +/* crypto/cmac/cmac.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL + * project. + */ +/* ==================================================================== + * Copyright (c) 2010 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 + * licensing@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. + * ==================================================================== + */ + +#ifndef HEADER_CMAC_H +# define HEADER_CMAC_H + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +/* Opaque */ +typedef struct CMAC_CTX_st CMAC_CTX; + +CMAC_CTX *CMAC_CTX_new(void); +void CMAC_CTX_cleanup(CMAC_CTX *ctx); +void CMAC_CTX_free(CMAC_CTX *ctx); +EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); + +int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); +int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); +int CMAC_resume(CMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/cms.h b/src/components/openssl/cms.h new file mode 100644 index 0000000..18d94b2 --- /dev/null +++ b/src/components/openssl/cms.h @@ -0,0 +1,555 @@ +/* crypto/cms/cms.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL + * project. + */ +/* ==================================================================== + * Copyright (c) 2008 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 + * licensing@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. + * ==================================================================== + */ + +#ifndef HEADER_CMS_H +# define HEADER_CMS_H + +# include + +# ifdef OPENSSL_NO_CMS +# error CMS is disabled. +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +DECLARE_STACK_OF(CMS_SignerInfo) +DECLARE_STACK_OF(GENERAL_NAMES) +DECLARE_STACK_OF(CMS_RecipientEncryptedKey) +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 + +const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef HEADER_PEM_H +DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +# ifdef HEADER_X509V3_H + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, + int allorfirst, + STACK_OF(GENERAL_NAMES) + *receiptList, STACK_OF(GENERAL_NAMES) + *receiptsTo); +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +# endif +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_CMS_strings(void); + +/* Error codes for the CMS functions. */ + +/* Function codes. */ +# define CMS_F_CHECK_CONTENT 99 +# define CMS_F_CMS_ADD0_CERT 164 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 +# define CMS_F_CMS_ADD1_SIGNER 102 +# define CMS_F_CMS_ADD1_SIGNINGTIME 103 +# define CMS_F_CMS_COMPRESS 104 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 +# define CMS_F_CMS_COPY_CONTENT 107 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 +# define CMS_F_CMS_DATA 109 +# define CMS_F_CMS_DATAFINAL 110 +# define CMS_F_CMS_DATAINIT 111 +# define CMS_F_CMS_DECRYPT 112 +# define CMS_F_CMS_DECRYPT_SET1_KEY 113 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 +# define CMS_F_CMS_DIGEST_VERIFY 118 +# define CMS_F_CMS_ENCODE_RECEIPT 161 +# define CMS_F_CMS_ENCRYPT 119 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 +# define CMS_F_CMS_ENV_ASN1_CTRL 171 +# define CMS_F_CMS_FINAL 127 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 +# define CMS_F_CMS_GET0_CONTENT 129 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 +# define CMS_F_CMS_GET0_ENVELOPED 131 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 +# define CMS_F_CMS_GET0_SIGNED 133 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 +# define CMS_F_CMS_RECEIPT_VERIFY 160 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 +# define CMS_F_CMS_SD_ASN1_CTRL 170 +# define CMS_F_CMS_SET1_IAS 176 +# define CMS_F_CMS_SET1_KEYID 177 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 +# define CMS_F_CMS_SET_DETACHED 147 +# define CMS_F_CMS_SIGN 148 +# define CMS_F_CMS_SIGNED_DATA_INIT 149 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 +# define CMS_F_CMS_SIGNERINFO_SIGN 151 +# define CMS_F_CMS_SIGNERINFO_VERIFY 152 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 +# define CMS_F_CMS_SIGN_RECEIPT 163 +# define CMS_F_CMS_STREAM 155 +# define CMS_F_CMS_UNCOMPRESS 156 +# define CMS_F_CMS_VERIFY 157 + +/* Reason codes. */ +# define CMS_R_ADD_SIGNER_ERROR 99 +# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 +# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 +# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_INITIALISATION_ERROR 101 +# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 +# define CMS_R_CMS_DATAFINAL_ERROR 103 +# define CMS_R_CMS_LIB 104 +# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 +# define CMS_R_CONTENT_NOT_FOUND 105 +# define CMS_R_CONTENT_TYPE_MISMATCH 171 +# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 +# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 +# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 +# define CMS_R_CONTENT_VERIFY_ERROR 109 +# define CMS_R_CTRL_ERROR 110 +# define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECRYPT_ERROR 112 +# define CMS_R_DIGEST_ERROR 161 +# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 +# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 +# define CMS_R_ERROR_SETTING_KEY 115 +# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 +# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 +# define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_MD_BIO_INIT_ERROR 119 +# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 +# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 +# define CMS_R_MSGSIGDIGEST_ERROR 172 +# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 +# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 +# define CMS_R_NEED_ONE_SIGNER 164 +# define CMS_R_NOT_A_SIGNED_RECEIPT 165 +# define CMS_R_NOT_ENCRYPTED_DATA 122 +# define CMS_R_NOT_KEK 123 +# define CMS_R_NOT_KEY_AGREEMENT 181 +# define CMS_R_NOT_KEY_TRANSPORT 124 +# define CMS_R_NOT_PWRI 177 +# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 +# define CMS_R_NO_CIPHER 126 +# define CMS_R_NO_CONTENT 127 +# define CMS_R_NO_CONTENT_TYPE 173 +# define CMS_R_NO_DEFAULT_DIGEST 128 +# define CMS_R_NO_DIGEST_SET 129 +# define CMS_R_NO_KEY 130 +# define CMS_R_NO_KEY_OR_CERT 174 +# define CMS_R_NO_MATCHING_DIGEST 131 +# define CMS_R_NO_MATCHING_RECIPIENT 132 +# define CMS_R_NO_MATCHING_SIGNATURE 166 +# define CMS_R_NO_MSGSIGDIGEST 167 +# define CMS_R_NO_PASSWORD 178 +# define CMS_R_NO_PRIVATE_KEY 133 +# define CMS_R_NO_PUBLIC_KEY 134 +# define CMS_R_NO_RECEIPT_REQUEST 168 +# define CMS_R_NO_SIGNERS 135 +# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 +# define CMS_R_RECEIPT_DECODE_ERROR 169 +# define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 +# define CMS_R_SIGNFINAL_ERROR 139 +# define CMS_R_SMIME_TEXT_ERROR 140 +# define CMS_R_STORE_INIT_ERROR 141 +# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 +# define CMS_R_TYPE_NOT_DATA 143 +# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 +# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 +# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 +# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 +# define CMS_R_UNKNOWN_CIPHER 148 +# define CMS_R_UNKNOWN_DIGEST_ALGORIHM 149 +# define CMS_R_UNKNOWN_ID 150 +# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 +# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 +# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE 155 +# define CMS_R_UNSUPPORTED_TYPE 156 +# define CMS_R_UNWRAP_ERROR 157 +# define CMS_R_UNWRAP_FAILURE 180 +# define CMS_R_VERIFICATION_FAILURE 158 +# define CMS_R_WRAP_ERROR 159 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/comp.h b/src/components/openssl/comp.h new file mode 100644 index 0000000..ca18cca --- /dev/null +++ b/src/components/openssl/comp.h @@ -0,0 +1,83 @@ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include + +# ifdef OPENSSL_NO_COMP +# error COMP is disabled. +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct comp_ctx_st COMP_CTX; + +struct comp_method_st { + int type; /* NID for compression library */ + const char *name; /* A text string to identify the library */ + int (*init) (COMP_CTX *ctx); + void (*finish) (COMP_CTX *ctx); + int (*compress) (COMP_CTX *ctx, + unsigned char *out, unsigned int olen, + unsigned char *in, unsigned int ilen); + int (*expand) (COMP_CTX *ctx, + unsigned char *out, unsigned int olen, + unsigned char *in, unsigned int ilen); + /* + * The following two do NOTHING, but are kept for backward compatibility + */ + long (*ctrl) (void); + long (*callback_ctrl) (void); +}; + +struct comp_ctx_st { + COMP_METHOD *meth; + unsigned long compress_in; + unsigned long compress_out; + unsigned long expand_in; + unsigned long expand_out; + CRYPTO_EX_DATA ex_data; +}; + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +void COMP_CTX_free(COMP_CTX *ctx); +int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +COMP_METHOD *COMP_rle(void); +COMP_METHOD *COMP_zlib(void); +void COMP_zlib_cleanup(void); + +# ifdef HEADER_BIO_H +# ifdef ZLIB +BIO_METHOD *BIO_f_zlib(void); +# endif +# endif + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_COMP_strings(void); + +/* Error codes for the COMP functions. */ + +/* Function codes. */ +# define COMP_F_BIO_ZLIB_FLUSH 99 +# define COMP_F_BIO_ZLIB_NEW 100 +# define COMP_F_BIO_ZLIB_READ 101 +# define COMP_F_BIO_ZLIB_WRITE 102 + +/* Reason codes. */ +# define COMP_R_ZLIB_DEFLATE_ERROR 99 +# define COMP_R_ZLIB_INFLATE_ERROR 100 +# define COMP_R_ZLIB_NOT_SUPPORTED 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/conf.h b/src/components/openssl/conf.h new file mode 100644 index 0000000..329336f --- /dev/null +++ b/src/components/openssl/conf.h @@ -0,0 +1,267 @@ +/* crypto/conf/conf.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CONF_H +# define HEADER_CONF_H + +# include +# include +# include +# include +# include + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +DECLARE_STACK_OF(CONF_VALUE) +DECLARE_LHASH_OF(CONF_VALUE); + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +/* Module definitions */ + +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +DECLARE_STACK_OF(CONF_MODULE) +DECLARE_STACK_OF(CONF_IMODULE) + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_FP_API +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +void OPENSSL_config(const char *config_name); +void OPENSSL_no_config(void); + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; +}; + +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +CONF_METHOD *NCONF_WIN32(void); +# if 0 /* Just to give you an idea of what I have in + * mind */ +CONF_METHOD *NCONF_XML(void); +# endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_FP_API +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +int NCONF_dump_fp(const CONF *conf, FILE *out); +int NCONF_dump_bio(const CONF *conf, BIO *out); + +# if 0 /* The following function has no error + * checking, and should therefore be avoided */ +long NCONF_get_number(CONF *conf, char *group, char *name); +# else +# define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) +# endif + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +void CONF_modules_free(void); +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_CONF_strings(void); + +/* Error codes for the CONF functions. */ + +/* Function codes. */ +# define CONF_F_CONF_DUMP_FP 104 +# define CONF_F_CONF_LOAD 100 +# define CONF_F_CONF_LOAD_BIO 102 +# define CONF_F_CONF_LOAD_FP 103 +# define CONF_F_CONF_MODULES_LOAD 116 +# define CONF_F_CONF_PARSE_LIST 119 +# define CONF_F_DEF_LOAD 120 +# define CONF_F_DEF_LOAD_BIO 121 +# define CONF_F_MODULE_INIT 115 +# define CONF_F_MODULE_LOAD_DSO 117 +# define CONF_F_MODULE_RUN 118 +# define CONF_F_NCONF_DUMP_BIO 105 +# define CONF_F_NCONF_DUMP_FP 106 +# define CONF_F_NCONF_GET_NUMBER 107 +# define CONF_F_NCONF_GET_NUMBER_E 112 +# define CONF_F_NCONF_GET_SECTION 108 +# define CONF_F_NCONF_GET_STRING 109 +# define CONF_F_NCONF_LOAD 113 +# define CONF_F_NCONF_LOAD_BIO 110 +# define CONF_F_NCONF_LOAD_FP 114 +# define CONF_F_NCONF_NEW 111 +# define CONF_F_STR_COPY 101 + +/* Reason codes. */ +# define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 +# define CONF_R_MISSING_EQUAL_SIGN 101 +# define CONF_R_MISSING_FINISH_FUNCTION 111 +# define CONF_R_MISSING_INIT_FUNCTION 112 +# define CONF_R_MODULE_INITIALIZATION_ERROR 109 +# define CONF_R_NO_CLOSE_BRACE 102 +# define CONF_R_NO_CONF 105 +# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 +# define CONF_R_NO_SECTION 107 +# define CONF_R_NO_SUCH_FILE 114 +# define CONF_R_NO_VALUE 108 +# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 +# define CONF_R_UNKNOWN_MODULE_NAME 113 +# define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/conf_api.h b/src/components/openssl/conf_api.h new file mode 100644 index 0000000..ac86814 --- /dev/null +++ b/src/components/openssl/conf_api.h @@ -0,0 +1,89 @@ +/* conf_api.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CONF_API_H +# define HEADER_CONF_API_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Up until OpenSSL 0.9.5a, this was new_section */ +CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was get_section */ +CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ +STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, + const char *section); + +int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); +char *_CONF_get_string(const CONF *conf, const char *section, + const char *name); +long _CONF_get_number(const CONF *conf, const char *section, + const char *name); + +int _CONF_new_data(CONF *conf); +void _CONF_free_data(CONF *conf); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/crypto.h b/src/components/openssl/crypto.h new file mode 100644 index 0000000..61b13ba --- /dev/null +++ b/src/components/openssl/crypto.h @@ -0,0 +1,661 @@ +/* crypto/crypto.h */ +/* ==================================================================== + * Copyright (c) 1998-2006 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). + * + */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECDH support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_CRYPTO_H +# define HEADER_CRYPTO_H + +# include + +# include + +# ifndef OPENSSL_NO_FP_API +# include +# endif + +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Backward compatibility to SSLeay */ +/* + * This is more to be used to check the correct DLL is being used in the MS + * world. + */ +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION 0 +/* #define SSLEAY_OPTIONS 1 no longer supported */ +# define SSLEAY_CFLAGS 2 +# define SSLEAY_BUILT_ON 3 +# define SSLEAY_PLATFORM 4 +# define SSLEAY_DIR 5 + +/* Already declared in ossl_typ.h */ +# if 0 +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; +/* Called when a new object is created */ +typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +/* Called when an object is free()ed */ +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +/* Called when we need to dup an object */ +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp); +# endif + +/* A generic structure to pass assorted data in a expandable way */ +typedef struct openssl_item_st { + int code; + void *value; /* Not used for flag attributes */ + size_t value_size; /* Max size of value for output, length for + * input */ + size_t *value_length; /* Returned length of value for output */ +} OPENSSL_ITEM; + +/* + * When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock + * names in cryptlib.c + */ + +# define CRYPTO_LOCK_ERR 1 +# define CRYPTO_LOCK_EX_DATA 2 +# define CRYPTO_LOCK_X509 3 +# define CRYPTO_LOCK_X509_INFO 4 +# define CRYPTO_LOCK_X509_PKEY 5 +# define CRYPTO_LOCK_X509_CRL 6 +# define CRYPTO_LOCK_X509_REQ 7 +# define CRYPTO_LOCK_DSA 8 +# define CRYPTO_LOCK_RSA 9 +# define CRYPTO_LOCK_EVP_PKEY 10 +# define CRYPTO_LOCK_X509_STORE 11 +# define CRYPTO_LOCK_SSL_CTX 12 +# define CRYPTO_LOCK_SSL_CERT 13 +# define CRYPTO_LOCK_SSL_SESSION 14 +# define CRYPTO_LOCK_SSL_SESS_CERT 15 +# define CRYPTO_LOCK_SSL 16 +# define CRYPTO_LOCK_SSL_METHOD 17 +# define CRYPTO_LOCK_RAND 18 +# define CRYPTO_LOCK_RAND2 19 +# define CRYPTO_LOCK_MALLOC 20 +# define CRYPTO_LOCK_BIO 21 +# define CRYPTO_LOCK_GETHOSTBYNAME 22 +# define CRYPTO_LOCK_GETSERVBYNAME 23 +# define CRYPTO_LOCK_READDIR 24 +# define CRYPTO_LOCK_RSA_BLINDING 25 +# define CRYPTO_LOCK_DH 26 +# define CRYPTO_LOCK_MALLOC2 27 +# define CRYPTO_LOCK_DSO 28 +# define CRYPTO_LOCK_DYNLOCK 29 +# define CRYPTO_LOCK_ENGINE 30 +# define CRYPTO_LOCK_UI 31 +# define CRYPTO_LOCK_ECDSA 32 +# define CRYPTO_LOCK_EC 33 +# define CRYPTO_LOCK_ECDH 34 +# define CRYPTO_LOCK_BN 35 +# define CRYPTO_LOCK_EC_PRE_COMP 36 +# define CRYPTO_LOCK_STORE 37 +# define CRYPTO_LOCK_COMP 38 +# define CRYPTO_LOCK_FIPS 39 +# define CRYPTO_LOCK_FIPS2 40 +# define CRYPTO_NUM_LOCKS 41 + +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +# ifndef OPENSSL_NO_LOCKING +# ifndef CRYPTO_w_lock +# define CRYPTO_w_lock(type) \ + CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) +# define CRYPTO_w_unlock(type) \ + CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) +# define CRYPTO_r_lock(type) \ + CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__) +# define CRYPTO_r_unlock(type) \ + CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__) +# define CRYPTO_add(addr,amount,type) \ + CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__) +# endif +# else +# define CRYPTO_w_lock(a) +# define CRYPTO_w_unlock(a) +# define CRYPTO_r_lock(a) +# define CRYPTO_r_unlock(a) +# define CRYPTO_add(a,b,c) ((*(a))+=(b)) +# endif + +/* + * Some applications as well as some parts of OpenSSL need to allocate and + * deallocate locks in a dynamic fashion. The following typedef makes this + * possible in a type-safe manner. + */ +/* struct CRYPTO_dynlock_value has to be defined by the application. */ +typedef struct { + int references; + struct CRYPTO_dynlock_value *data; +} CRYPTO_dynlock; + +/* + * The following can be used to detect memory leaks in the SSLeay library. It + * used, it turns on malloc checking + */ + +# define CRYPTO_MEM_CHECK_OFF 0x0/* an enume */ +# define CRYPTO_MEM_CHECK_ON 0x1/* a bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2/* a bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3/* an enume */ + +/* + * The following are bit values to turn on or off options connected to the + * malloc checking functionality + */ + +/* Adds time to the memory checking information */ +# define V_CRYPTO_MDEBUG_TIME 0x1/* a bit */ +/* Adds thread number to the memory checking information */ +# define V_CRYPTO_MDEBUG_THREAD 0x2/* a bit */ + +# define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) + +/* predec of the BIO type */ +typedef struct bio_st BIO_dummy; + +struct crypto_ex_data_st { + STACK_OF(void) *sk; + /* gcc is screwing up this data structure :-( */ + int dummy; +}; +DECLARE_STACK_OF(void) + +/* + * This stuff is basically class callback functions The current classes are + * SSL_CTX, SSL, SSL_SESSION, and a few more + */ + +typedef struct crypto_ex_data_func_st { + long argl; /* Arbitary long */ + void *argp; /* Arbitary void * */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; +} CRYPTO_EX_DATA_FUNCS; + +DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) + +/* + * Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA + * entry. + */ + +# define CRYPTO_EX_INDEX_BIO 0 +# define CRYPTO_EX_INDEX_SSL 1 +# define CRYPTO_EX_INDEX_SSL_CTX 2 +# define CRYPTO_EX_INDEX_SSL_SESSION 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_RSA 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_DH 8 +# define CRYPTO_EX_INDEX_ENGINE 9 +# define CRYPTO_EX_INDEX_X509 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_ECDSA 12 +# define CRYPTO_EX_INDEX_ECDH 13 +# define CRYPTO_EX_INDEX_COMP 14 +# define CRYPTO_EX_INDEX_STORE 15 + +/* + * Dynamically assigned indexes start from this value (don't use directly, + * use via CRYPTO_ex_data_new_class). + */ +# define CRYPTO_EX_INDEX_USER 100 + +/* + * This is the default callbacks, but we can have others as well: this is + * needed in Win32 where the application malloc and the library malloc may + * not be the same. + */ +# define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ + malloc, realloc, free) + +# if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD +# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ +# define CRYPTO_MDEBUG +# endif +# endif + +/* + * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG + * is defined) + */ +# define CRYPTO_malloc_debug_init() do {\ + CRYPTO_set_mem_debug_functions(\ + CRYPTO_dbg_malloc,\ + CRYPTO_dbg_realloc,\ + CRYPTO_dbg_free,\ + CRYPTO_dbg_set_options,\ + CRYPTO_dbg_get_options);\ + } while(0) + +int CRYPTO_mem_ctrl(int mode); +int CRYPTO_is_mem_check_on(void); + +/* for applications */ +# define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) +# define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) + +/* for library-internal use */ +# define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) +# define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) +# define is_MemCheck_on() CRYPTO_is_mem_check_on() + +# define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) +# define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__) +# define OPENSSL_realloc(addr,num) \ + CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) +# define OPENSSL_realloc_clean(addr,old_num,num) \ + CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__) +# define OPENSSL_remalloc(addr,num) \ + CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) +# define OPENSSL_freeFunc CRYPTO_free +# define OPENSSL_free(addr) CRYPTO_free(addr) + +# define OPENSSL_malloc_locked(num) \ + CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) +# define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr) + +const char *SSLeay_version(int type); +unsigned long SSLeay(void); + +int OPENSSL_issetugid(void); + +/* An opaque type representing an implementation of "ex_data" support */ +typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; +/* Return an opaque pointer to the current "ex_data" implementation */ +const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); +/* Sets the "ex_data" implementation to be used (if it's not too late) */ +int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); +/* Get a new "ex_data" class, and return the corresponding "class_index" */ +int CRYPTO_ex_data_new_class(void); +/* Within a given class, get/register a new index */ +int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + CRYPTO_EX_DATA *from); +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +void CRYPTO_cleanup_all_ex_data(void); + +int CRYPTO_get_new_lockid(char *name); + +int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ +void CRYPTO_lock(int mode, int type, const char *file, int line); +void CRYPTO_set_locking_callback(void (*func) (int mode, int type, + const char *file, int line)); +void (*CRYPTO_get_locking_callback(void)) (int mode, int type, + const char *file, int line); +void CRYPTO_set_add_lock_callback(int (*func) + (int *num, int mount, int type, + const char *file, int line)); +int (*CRYPTO_get_add_lock_callback(void)) (int *num, int mount, int type, + const char *file, int line); + +/* Don't use this structure directly. */ +typedef struct crypto_threadid_st { + void *ptr; + unsigned long val; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); +void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); +int CRYPTO_THREADID_set_callback(void (*threadid_func) (CRYPTO_THREADID *)); +void (*CRYPTO_THREADID_get_callback(void)) (CRYPTO_THREADID *); +void CRYPTO_THREADID_current(CRYPTO_THREADID *id); +int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b); +void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src); +unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id); +# ifndef OPENSSL_NO_DEPRECATED +void CRYPTO_set_id_callback(unsigned long (*func) (void)); +unsigned long (*CRYPTO_get_id_callback(void)) (void); +unsigned long CRYPTO_thread_id(void); +# endif + +const char *CRYPTO_get_lock_name(int type); +int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, + int line); + +int CRYPTO_get_new_dynlockid(void); +void CRYPTO_destroy_dynlockid(int i); +struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); +void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value + *(*dyn_create_function) (const char + *file, + int line)); +void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function) + (int mode, + struct CRYPTO_dynlock_value *l, + const char *file, int line)); +void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function) + (struct CRYPTO_dynlock_value *l, + const char *file, int line)); +struct CRYPTO_dynlock_value +*(*CRYPTO_get_dynlock_create_callback(void)) (const char *file, int line); +void (*CRYPTO_get_dynlock_lock_callback(void)) (int mode, + struct CRYPTO_dynlock_value + *l, const char *file, + int line); +void (*CRYPTO_get_dynlock_destroy_callback(void)) (struct CRYPTO_dynlock_value + *l, const char *file, + int line); + +/* + * CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- call + * the latter last if you need different functions + */ +int CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t), + void (*f) (void *)); +int CRYPTO_set_locked_mem_functions(void *(*m) (size_t), + void (*free_func) (void *)); +int CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, + int), void (*f) (void *)); +int CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int), + void (*free_func) (void *)); +int CRYPTO_set_mem_debug_functions(void (*m) + (void *, int, const char *, int, int), + void (*r) (void *, void *, int, + const char *, int, int), + void (*f) (void *, int), void (*so) (long), + long (*go) (void)); +void CRYPTO_get_mem_functions(void *(**m) (size_t), + void *(**r) (void *, size_t), + void (**f) (void *)); +void CRYPTO_get_locked_mem_functions(void *(**m) (size_t), + void (**f) (void *)); +void CRYPTO_get_mem_ex_functions(void *(**m) (size_t, const char *, int), + void *(**r) (void *, size_t, const char *, + int), void (**f) (void *)); +void CRYPTO_get_locked_mem_ex_functions(void + *(**m) (size_t, const char *, int), + void (**f) (void *)); +void CRYPTO_get_mem_debug_functions(void (**m) + (void *, int, const char *, int, int), + void (**r) (void *, void *, int, + const char *, int, int), + void (**f) (void *, int), + void (**so) (long), long (**go) (void)); + +void *CRYPTO_malloc_locked(int num, const char *file, int line); +void CRYPTO_free_locked(void *ptr); +void *CRYPTO_malloc(int num, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +void CRYPTO_free(void *ptr); +void *CRYPTO_realloc(void *addr, int num, const char *file, int line); +void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, + int line); +void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); + +void OPENSSL_cleanse(void *ptr, size_t len); + +void CRYPTO_set_mem_debug_options(long bits); +long CRYPTO_get_mem_debug_options(void); + +# define CRYPTO_push_info(info) \ + CRYPTO_push_info_(info, __FILE__, __LINE__); +int CRYPTO_push_info_(const char *info, const char *file, int line); +int CRYPTO_pop_info(void); +int CRYPTO_remove_all_info(void); + +/* + * Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro; + * used as default in CRYPTO_MDEBUG compilations): + */ +/*- + * The last argument has the following significance: + * + * 0: called before the actual memory allocation has taken place + * 1: called after the actual memory allocation has taken place + */ +void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, + int before_p); +void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, + int line, int before_p); +void CRYPTO_dbg_free(void *addr, int before_p); +/*- + * Tell the debugging code about options. By default, the following values + * apply: + * + * 0: Clear all options. + * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option. + * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option. + * V_CRYPTO_MDEBUG_ALL (3): 1 + 2 + */ +void CRYPTO_dbg_set_options(long bits); +long CRYPTO_dbg_get_options(void); + +# ifndef OPENSSL_NO_FP_API +void CRYPTO_mem_leaks_fp(FILE *); +# endif +void CRYPTO_mem_leaks(struct bio_st *bio); +/* unsigned long order, char *file, int line, int num_bytes, char *addr */ +typedef void *CRYPTO_MEM_LEAK_CB (unsigned long, const char *, int, int, + void *); +void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); + +/* die if we have to */ +void OpenSSLDie(const char *file, int line, const char *assertion); +# define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) + +unsigned long *OPENSSL_ia32cap_loc(void); +# define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc())) +int OPENSSL_isservice(void); + +int FIPS_mode(void); +int FIPS_mode_set(int r); + +void OPENSSL_init(void); + +# define fips_md_init(alg) fips_md_init_ctx(alg, alg) + +# ifdef OPENSSL_FIPS +# define fips_md_init_ctx(alg, cx) \ + int alg##_Init(cx##_CTX *c) \ + { \ + if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ + "Low level API call to digest " #alg " forbidden in FIPS mode!"); \ + return private_##alg##_Init(c); \ + } \ + int private_##alg##_Init(cx##_CTX *c) + +# define fips_cipher_abort(alg) \ + if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ + "Low level API call to cipher " #alg " forbidden in FIPS mode!") + +# else +# define fips_md_init_ctx(alg, cx) \ + int alg##_Init(cx##_CTX *c) +# define fips_cipher_abort(alg) while(0) +# endif + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const volatile void *a, const volatile void *b, size_t len); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_CRYPTO_strings(void); + +/* Error codes for the CRYPTO functions. */ + +/* Function codes. */ +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103 +# define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_DEF_ADD_INDEX 104 +# define CRYPTO_F_DEF_GET_CLASS 105 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_INT_DUP_EX_DATA 106 +# define CRYPTO_F_INT_FREE_EX_DATA 107 +# define CRYPTO_F_INT_NEW_EX_DATA 108 + +/* Reason codes. */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/des.h b/src/components/openssl/des.h new file mode 100644 index 0000000..dc85c33 --- /dev/null +++ b/src/components/openssl/des.h @@ -0,0 +1,257 @@ +/* crypto/des/des.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_NEW_DES_H +# define HEADER_NEW_DES_H + +# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG + * (via openssl/opensslconf.h */ + +# ifdef OPENSSL_NO_DES +# error DES is disabled. +# endif + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char DES_cblock[8]; +typedef /* const */ unsigned char const_DES_cblock[8]; +/* + * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and + * const_DES_cblock * are incompatible pointer types. + */ + +typedef struct DES_ks { + union { + DES_cblock cblock; + /* + * make sure things are correct size on machines with 8 byte longs + */ + DES_LONG deslong[2]; + } ks[16]; +} DES_key_schedule; + +# ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT +# ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT +# define OPENSSL_ENABLE_OLD_DES_SUPPORT +# endif +# endif + +# ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT +# include +# endif + +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) + +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 + +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 + +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ + DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ +# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) +OPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */ +# define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) + +const char *DES_options(void); +void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, int enc); +DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, + long length, DES_key_schedule *schedule, + const_DES_cblock *ivec); +/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, const_DES_cblock *inw, + const_DES_cblock *outw, int enc); +void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks, int enc); + +/* + * This is the DES encryption function that gets called by just about every + * other DES routine in the library. You should not use this function except + * to implement 'modes' of DES. I say this because the functions that call + * this routine do the conversion from 'char *' to long, and this needs to be + * done to make sure 'non-aligned' memory access do not occur. The + * characters are loaded 'little endian'. Data is a pointer to 2 unsigned + * long's and ks is the DES_key_schedule to use. enc, is non zero specifies + * encryption, zero if decryption. + */ +void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); + +/* + * This functions is the same as DES_encrypt1() except that the DES initial + * permutation (IP) and final permutation (FP) have been left out. As for + * DES_encrypt1(), you should not use this function. It is used by the + * routines in the library that implement triple DES. IP() DES_encrypt2() + * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() + * DES_encrypt1() DES_encrypt1() except faster :-). + */ +void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); + +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, DES_cblock *ivec, int enc); +void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, + long length, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, + DES_cblock *ivec1, DES_cblock *ivec2, int enc); +void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num, int enc); +void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, + int numbits, long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num); +# if 0 +void DES_xwhite_in2out(const_DES_cblock *DES_key, const_DES_cblock *in_white, + DES_cblock *out_white); +# endif + +int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, + DES_cblock *iv); +int DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched, + DES_cblock *iv); +char *DES_fcrypt(const char *buf, const char *salt, char *ret); +char *DES_crypt(const char *buf, const char *salt); +void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec); +void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], + long length, int out_count, DES_cblock *seed); +int DES_random_key(DES_cblock *ret); +void DES_set_odd_parity(DES_cblock *key); +int DES_check_key_parity(const_DES_cblock *key); +int DES_is_weak_key(const_DES_cblock *key); +/* + * DES_set_key (= set_key = DES_key_sched = key_sched) calls + * DES_set_key_checked if global variable DES_check_key is set, + * DES_set_key_unchecked otherwise. + */ +int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); +# ifdef OPENSSL_FIPS +void private_DES_set_key_unchecked(const_DES_cblock *key, + DES_key_schedule *schedule); +# endif +void DES_string_to_key(const char *str, DES_cblock *key); +void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num, int enc); +void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num); + +int DES_read_password(DES_cblock *key, const char *prompt, int verify); +int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, + const char *prompt, int verify); + +# define DES_fixup_key_parity DES_set_odd_parity + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/des_old.h b/src/components/openssl/des_old.h new file mode 100644 index 0000000..1de076b --- /dev/null +++ b/src/components/openssl/des_old.h @@ -0,0 +1,497 @@ +/* crypto/des/des_old.h */ + +/*- + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + * + * The function names in here are deprecated and are only present to + * provide an interface compatible with openssl 0.9.6 and older as + * well as libdes. OpenSSL now provides functions where "des_" has + * been replaced with "DES_" in the names, to make it possible to + * make incompatible changes that are needed for C type security and + * other stuff. + * + * This include files has two compatibility modes: + * + * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API + * that is compatible with libdes and SSLeay. + * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an + * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. + * + * Note that these modes break earlier snapshots of OpenSSL, where + * libdes compatibility was the only available mode or (later on) the + * prefered compatibility mode. However, after much consideration + * (and more or less violent discussions with external parties), it + * was concluded that OpenSSL should be compatible with earlier versions + * of itself before anything else. Also, in all honesty, libdes is + * an old beast that shouldn't really be used any more. + * + * Please consider starting to use the DES_ functions rather than the + * des_ ones. The des_ functions will disappear completely before + * OpenSSL 1.0! + * + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + */ + +/* + * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project + * 2001. + */ +/* ==================================================================== + * Copyright (c) 1998-2002 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_DES_H +# define HEADER_DES_H + +# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ + +# ifdef OPENSSL_NO_DES +# error DES is disabled. +# endif + +# ifndef HEADER_NEW_DES_H +# error You must include des.h, not des_old.h directly. +# endif + +# ifdef _KERBEROS_DES_H +# error replaces . +# endif + +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef _ +# undef _ +# endif + +typedef unsigned char _ossl_old_des_cblock[8]; +typedef struct _ossl_old_des_ks_struct { + union { + _ossl_old_des_cblock _; + /* + * make sure things are correct size on machines with 8 byte longs + */ + DES_LONG pad[2]; + } ks; +} _ossl_old_des_key_schedule[16]; + +# ifndef OPENSSL_DES_LIBDES_COMPATIBILITY +# define des_cblock DES_cblock +# define const_des_cblock const_DES_cblock +# define des_key_schedule DES_key_schedule +# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ + DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e)) +# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ + DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e)) +# define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\ + DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e)) +# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ + DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e)) +# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ + DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n)) +# define des_options()\ + DES_options() +# define des_cbc_cksum(i,o,l,k,iv)\ + DES_cbc_cksum((i),(o),(l),&(k),(iv)) +# define des_cbc_encrypt(i,o,l,k,iv,e)\ + DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e)) +# define des_ncbc_encrypt(i,o,l,k,iv,e)\ + DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e)) +# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ + DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e)) +# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ + DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e)) +# define des_ecb_encrypt(i,o,k,e)\ + DES_ecb_encrypt((i),(o),&(k),(e)) +# define des_encrypt1(d,k,e)\ + DES_encrypt1((d),&(k),(e)) +# define des_encrypt2(d,k,e)\ + DES_encrypt2((d),&(k),(e)) +# define des_encrypt3(d,k1,k2,k3)\ + DES_encrypt3((d),&(k1),&(k2),&(k3)) +# define des_decrypt3(d,k1,k2,k3)\ + DES_decrypt3((d),&(k1),&(k2),&(k3)) +# define des_xwhite_in2out(k,i,o)\ + DES_xwhite_in2out((k),(i),(o)) +# define des_enc_read(f,b,l,k,iv)\ + DES_enc_read((f),(b),(l),&(k),(iv)) +# define des_enc_write(f,b,l,k,iv)\ + DES_enc_write((f),(b),(l),&(k),(iv)) +# define des_fcrypt(b,s,r)\ + DES_fcrypt((b),(s),(r)) +# if 0 +# define des_crypt(b,s)\ + DES_crypt((b),(s)) +# if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__) +# define crypt(b,s)\ + DES_crypt((b),(s)) +# endif +# endif +# define des_ofb_encrypt(i,o,n,l,k,iv)\ + DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv)) +# define des_pcbc_encrypt(i,o,l,k,iv,e)\ + DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e)) +# define des_quad_cksum(i,o,l,c,s)\ + DES_quad_cksum((i),(o),(l),(c),(s)) +# define des_random_seed(k)\ + _ossl_096_des_random_seed((k)) +# define des_random_key(r)\ + DES_random_key((r)) +# define des_read_password(k,p,v) \ + DES_read_password((k),(p),(v)) +# define des_read_2passwords(k1,k2,p,v) \ + DES_read_2passwords((k1),(k2),(p),(v)) +# define des_set_odd_parity(k)\ + DES_set_odd_parity((k)) +# define des_check_key_parity(k)\ + DES_check_key_parity((k)) +# define des_is_weak_key(k)\ + DES_is_weak_key((k)) +# define des_set_key(k,ks)\ + DES_set_key((k),&(ks)) +# define des_key_sched(k,ks)\ + DES_key_sched((k),&(ks)) +# define des_set_key_checked(k,ks)\ + DES_set_key_checked((k),&(ks)) +# define des_set_key_unchecked(k,ks)\ + DES_set_key_unchecked((k),&(ks)) +# define des_string_to_key(s,k)\ + DES_string_to_key((s),(k)) +# define des_string_to_2keys(s,k1,k2)\ + DES_string_to_2keys((s),(k1),(k2)) +# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ + DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e)) +# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ + DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n)) + +# define des_ecb2_encrypt(i,o,k1,k2,e) \ + des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +# define des_check_key DES_check_key +# define des_rw_mode DES_rw_mode +# else /* libdes compatibility */ +/* + * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with + * libdes + */ +# define des_cblock _ossl_old_des_cblock +# define des_key_schedule _ossl_old_des_key_schedule +# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ + _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) +# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ + _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) +# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ + _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) +# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ + _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) +# define des_options()\ + _ossl_old_des_options() +# define des_cbc_cksum(i,o,l,k,iv)\ + _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv)) +# define des_cbc_encrypt(i,o,l,k,iv,e)\ + _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e)) +# define des_ncbc_encrypt(i,o,l,k,iv,e)\ + _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) +# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ + _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) +# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ + _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) +# define des_ecb_encrypt(i,o,k,e)\ + _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) +# define des_encrypt(d,k,e)\ + _ossl_old_des_encrypt((d),(k),(e)) +# define des_encrypt2(d,k,e)\ + _ossl_old_des_encrypt2((d),(k),(e)) +# define des_encrypt3(d,k1,k2,k3)\ + _ossl_old_des_encrypt3((d),(k1),(k2),(k3)) +# define des_decrypt3(d,k1,k2,k3)\ + _ossl_old_des_decrypt3((d),(k1),(k2),(k3)) +# define des_xwhite_in2out(k,i,o)\ + _ossl_old_des_xwhite_in2out((k),(i),(o)) +# define des_enc_read(f,b,l,k,iv)\ + _ossl_old_des_enc_read((f),(b),(l),(k),(iv)) +# define des_enc_write(f,b,l,k,iv)\ + _ossl_old_des_enc_write((f),(b),(l),(k),(iv)) +# define des_fcrypt(b,s,r)\ + _ossl_old_des_fcrypt((b),(s),(r)) +# define des_crypt(b,s)\ + _ossl_old_des_crypt((b),(s)) +# if 0 +# define crypt(b,s)\ + _ossl_old_crypt((b),(s)) +# endif +# define des_ofb_encrypt(i,o,n,l,k,iv)\ + _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv)) +# define des_pcbc_encrypt(i,o,l,k,iv,e)\ + _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e)) +# define des_quad_cksum(i,o,l,c,s)\ + _ossl_old_des_quad_cksum((i),(o),(l),(c),(s)) +# define des_random_seed(k)\ + _ossl_old_des_random_seed((k)) +# define des_random_key(r)\ + _ossl_old_des_random_key((r)) +# define des_read_password(k,p,v) \ + _ossl_old_des_read_password((k),(p),(v)) +# define des_read_2passwords(k1,k2,p,v) \ + _ossl_old_des_read_2passwords((k1),(k2),(p),(v)) +# define des_set_odd_parity(k)\ + _ossl_old_des_set_odd_parity((k)) +# define des_is_weak_key(k)\ + _ossl_old_des_is_weak_key((k)) +# define des_set_key(k,ks)\ + _ossl_old_des_set_key((k),(ks)) +# define des_key_sched(k,ks)\ + _ossl_old_des_key_sched((k),(ks)) +# define des_string_to_key(s,k)\ + _ossl_old_des_string_to_key((s),(k)) +# define des_string_to_2keys(s,k1,k2)\ + _ossl_old_des_string_to_2keys((s),(k1),(k2)) +# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ + _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e)) +# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ + _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n)) + +# define des_ecb2_encrypt(i,o,k1,k2,e) \ + des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +# define des_check_key DES_check_key +# define des_rw_mode DES_rw_mode +# endif + +const char *_ossl_old_des_options(void); +void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, int enc); +DES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec); +void _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, + _ossl_old_des_cblock *inw, + _ossl_old_des_cblock *outw, int enc); +void _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out, + int numbits, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, + _ossl_old_des_key_schedule ks, int enc); +void _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks, + int enc); +void _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks, + int enc); +void _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3); +void _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3); +void _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, + _ossl_old_des_cblock *ivec, int *num, + int enc); +void _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, + _ossl_old_des_cblock *ivec, int *num); +# if 0 +void _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key), + _ossl_old_des_cblock (*in_white), + _ossl_old_des_cblock (*out_white)); +# endif + +int _ossl_old_des_enc_read(int fd, char *buf, int len, + _ossl_old_des_key_schedule sched, + _ossl_old_des_cblock *iv); +int _ossl_old_des_enc_write(int fd, char *buf, int len, + _ossl_old_des_key_schedule sched, + _ossl_old_des_cblock *iv); +char *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret); +char *_ossl_old_des_crypt(const char *buf, const char *salt); +# if !defined(PERL5) && !defined(NeXT) +char *_ossl_old_crypt(const char *buf, const char *salt); +# endif +void _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out, + int numbits, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec); +void _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +DES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + int out_count, _ossl_old_des_cblock *seed); +void _ossl_old_des_random_seed(_ossl_old_des_cblock key); +void _ossl_old_des_random_key(_ossl_old_des_cblock ret); +int _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt, + int verify); +int _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1, + _ossl_old_des_cblock *key2, + const char *prompt, int verify); +void _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key); +int _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key); +int _ossl_old_des_set_key(_ossl_old_des_cblock *key, + _ossl_old_des_key_schedule schedule); +int _ossl_old_des_key_sched(_ossl_old_des_cblock *key, + _ossl_old_des_key_schedule schedule); +void _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key); +void _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1, + _ossl_old_des_cblock *key2); +void _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int *num, + int enc); +void _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int *num); + +void _ossl_096_des_random_seed(des_cblock *key); + +/* + * The following definitions provide compatibility with the MIT Kerberos + * library. The _ossl_old_des_key_schedule structure is not binary + * compatible. + */ + +# define _KERBEROS_DES_H + +# define KRBDES_ENCRYPT DES_ENCRYPT +# define KRBDES_DECRYPT DES_DECRYPT + +# ifdef KERBEROS +# define ENCRYPT DES_ENCRYPT +# define DECRYPT DES_DECRYPT +# endif + +# ifndef NCOMPAT +# define C_Block des_cblock +# define Key_schedule des_key_schedule +# define KEY_SZ DES_KEY_SZ +# define string_to_key des_string_to_key +# define read_pw_string des_read_pw_string +# define random_key des_random_key +# define pcbc_encrypt des_pcbc_encrypt +# define set_key des_set_key +# define key_sched des_key_sched +# define ecb_encrypt des_ecb_encrypt +# define cbc_encrypt des_cbc_encrypt +# define ncbc_encrypt des_ncbc_encrypt +# define xcbc_encrypt des_xcbc_encrypt +# define cbc_cksum des_cbc_cksum +# define quad_cksum des_quad_cksum +# define check_parity des_check_key_parity +# endif + +# define des_fixup_key_parity DES_fixup_key_parity + +#ifdef __cplusplus +} +#endif + +/* for DES_read_pw_string et al */ +# include + +#endif diff --git a/src/components/openssl/dh.h b/src/components/openssl/dh.h new file mode 100644 index 0000000..ba78804 --- /dev/null +++ b/src/components/openssl/dh.h @@ -0,0 +1,393 @@ +/* crypto/dh/dh.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_DH_H +# define HEADER_DH_H + +# include + +# ifdef OPENSSL_NO_DH +# error DH is disabled. +# endif + +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# define DH_FLAG_CACHE_MONT_P 0x01 + +/* + * new with 0.9.7h; the built-in DH + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x02 + +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its reposibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +struct dh_method { + const char *name; + /* Methods here */ + int (*generate_key) (DH *dh); + int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh); + /* Can be null */ + int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a, + const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *m_ctx); + int (*init) (DH *dh); + int (*finish) (DH *dh); + int flags; + char *app_data; + /* If this is non-NULL, it will be used to generate parameters */ + int (*generate_params) (DH *dh, int prime_len, int generator, + BN_GENCB *cb); +}; + +struct dh_st { + /* + * This first argument is used to pick up errors when a DH is passed + * instead of a EVP_PKEY + */ + int pad; + int version; + BIGNUM *p; + BIGNUM *g; + long length; /* optional */ + BIGNUM *pub_key; /* g^x % p */ + BIGNUM *priv_key; /* x */ + int flags; + BN_MONT_CTX *method_mont_p; + /* Place holders if we want to do X9.42 DH */ + BIGNUM *q; + BIGNUM *j; + unsigned char *seed; + int seedlen; + BIGNUM *counter; + int references; + CRYPTO_EX_DATA ex_data; + const DH_METHOD *meth; + ENGINE *engine; +}; + +# define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x)) +# define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x) +# define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH *DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_size(const DH *dh); +int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED +DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, void *), void *cb_arg); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, + BN_GENCB *cb); + +int DH_check(const DH *dh, int *codes); +int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); +int DH_generate_key(DH *dh); +int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); +DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); +int i2d_DHparams(const DH *a, unsigned char **pp); +DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); +int i2d_DHxparams(const DH *a, unsigned char **pp); +# ifndef OPENSSL_NO_FP_API +int DHparams_print_fp(FILE *fp, const DH *x); +# endif +# ifndef OPENSSL_NO_BIO +int DHparams_print(BIO *bp, const DH *x); +# else +int DHparams_print(char *bp, const DH *x); +# endif + +/* RFC 5114 parameters */ +DH *DH_get_1024_160(void); +DH *DH_get_2048_224(void); +DH *DH_get_2048_256(void); + +/* RFC2631 KDF */ +int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); + +# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) + +# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid) + +# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid) + +# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd) + +# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen) + +# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p) + +# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p) + +# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) +# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) + +/* KDF types */ +# define EVP_PKEY_DH_KDF_NONE 1 +# define EVP_PKEY_DH_KDF_X9_42 2 + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_DH_strings(void); + +/* Error codes for the DH functions. */ + +/* Function codes. */ +# define DH_F_COMPUTE_KEY 102 +# define DH_F_DHPARAMS_PRINT_FP 101 +# define DH_F_DH_BUILTIN_GENPARAMS 106 +# define DH_F_DH_CMS_DECRYPT 117 +# define DH_F_DH_CMS_SET_PEERKEY 118 +# define DH_F_DH_CMS_SET_SHARED_INFO 119 +# define DH_F_DH_COMPUTE_KEY 114 +# define DH_F_DH_GENERATE_KEY 115 +# define DH_F_DH_GENERATE_PARAMETERS_EX 116 +# define DH_F_DH_NEW_METHOD 105 +# define DH_F_DH_PARAM_DECODE 107 +# define DH_F_DH_PRIV_DECODE 110 +# define DH_F_DH_PRIV_ENCODE 111 +# define DH_F_DH_PUB_DECODE 108 +# define DH_F_DH_PUB_ENCODE 109 +# define DH_F_DO_DH_PRINT 100 +# define DH_F_GENERATE_KEY 103 +# define DH_F_GENERATE_PARAMETERS 104 +# define DH_F_PKEY_DH_DERIVE 112 +# define DH_F_PKEY_DH_KEYGEN 113 + +/* Reason codes. */ +# define DH_R_BAD_GENERATOR 101 +# define DH_R_BN_DECODE_ERROR 109 +# define DH_R_BN_ERROR 106 +# define DH_R_DECODE_ERROR 104 +# define DH_R_INVALID_PUBKEY 102 +# define DH_R_KDF_PARAMETER_ERROR 112 +# define DH_R_KEYS_NOT_SET 108 +# define DH_R_KEY_SIZE_TOO_SMALL 110 +# define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_NON_FIPS_METHOD 111 +# define DH_R_NO_PARAMETERS_SET 107 +# define DH_R_NO_PRIVATE_VALUE 100 +# define DH_R_PARAMETER_ENCODING_ERROR 105 +# define DH_R_PEER_KEY_ERROR 113 +# define DH_R_SHARED_INFO_ERROR 114 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/dsa.h b/src/components/openssl/dsa.h new file mode 100644 index 0000000..cdf1bd4 --- /dev/null +++ b/src/components/openssl/dsa.h @@ -0,0 +1,332 @@ +/* crypto/dsa/dsa.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +/* + * The DSS routines are based on patches supplied by + * Steven Schoch . He basically did the + * work and I have just tweaked them a little to fit into my + * stylistic vision for SSLeay :-) */ + +#ifndef HEADER_DSA_H +# define HEADER_DSA_H + +# include + +# ifdef OPENSSL_NO_DSA +# error DSA is disabled. +# endif + +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED +# include +# ifndef OPENSSL_NO_DH +# include +# endif +# endif + +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define DSA_FLAG_CACHE_MONT_P 0x01 +/* + * new with 0.9.7h; the built-in DSA implementation now uses constant time + * modular exponentiation for secret exponents by default. This flag causes + * the faster variable sliding window method to be used for all exponents. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x02 + +/* + * If this flag is set the DSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its reposibility to ensure the + * result is compliant. + */ + +# define DSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st { + BIGNUM *r; + BIGNUM *s; +} DSA_SIG; + +struct dsa_method { + const char *name; + DSA_SIG *(*dsa_do_sign) (const unsigned char *dgst, int dlen, DSA *dsa); + int (*dsa_sign_setup) (DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, + BIGNUM **rp); + int (*dsa_do_verify) (const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + int (*dsa_mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, + BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); + /* Can be null */ + int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); + int (*init) (DSA *dsa); + int (*finish) (DSA *dsa); + int flags; + char *app_data; + /* If this is non-NULL, it is used to generate DSA parameters */ + int (*dsa_paramgen) (DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + /* If this is non-NULL, it is used to generate DSA keys */ + int (*dsa_keygen) (DSA *dsa); +}; + +struct dsa_st { + /* + * This first variable is used to pick up errors where a DSA is passed + * instead of of a EVP_PKEY + */ + int pad; + long version; + int write_params; + BIGNUM *p; + BIGNUM *q; /* == 20 */ + BIGNUM *g; + BIGNUM *pub_key; /* y public key */ + BIGNUM *priv_key; /* x private key */ + BIGNUM *kinv; /* Signing pre-calc */ + BIGNUM *r; /* Signing pre-calc */ + int flags; + /* Normally used to cache montgomery values */ + BN_MONT_CTX *method_mont_p; + int references; + CRYPTO_EX_DATA ex_data; + const DSA_METHOD *meth; + /* functional reference if 'meth' is ENGINE-provided */ + ENGINE *engine; +}; + +# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) +# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) +# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) + +DSA *DSAparams_dup(DSA *x); +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); +DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); + +DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); +int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + +const DSA_METHOD *DSA_OpenSSL(void); + +void DSA_set_default_method(const DSA_METHOD *); +const DSA_METHOD *DSA_get_default_method(void); +int DSA_set_method(DSA *dsa, const DSA_METHOD *); + +DSA *DSA_new(void); +DSA *DSA_new_method(ENGINE *engine); +void DSA_free(DSA *r); +/* "up" the DSA object's reference count */ +int DSA_up_ref(DSA *r); +int DSA_size(const DSA *); + /* next 4 return -1 on error */ +int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); +int DSA_sign(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); +int DSA_verify(int type, const unsigned char *dgst, int dgst_len, + const unsigned char *sigbuf, int siglen, DSA *dsa); +int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int DSA_set_ex_data(DSA *d, int idx, void *arg); +void *DSA_get_ex_data(DSA *d, int idx); + +DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED +DSA *DSA_generate_parameters(int bits, + unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, void + (*callback) (int, int, void *), void *cb_arg); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + +int DSA_generate_key(DSA *a); +int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); +int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); +int i2d_DSAparams(const DSA *a, unsigned char **pp); + +# ifndef OPENSSL_NO_BIO +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +# endif +# ifndef OPENSSL_NO_FP_API +int DSAparams_print_fp(FILE *fp, const DSA *x); +int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif + +# define DSS_prime_checks 50 +/* + * Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of + * Rabin-Miller + */ +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) + +# ifndef OPENSSL_NO_DH +/* + * Convert DSA structure (key or just parameters) into DH structure (be + * careful to avoid small subgroup attacks when using this!) + */ +DH *DSA_dup_DH(const DSA *r); +# endif + +# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) + +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_DSA_strings(void); + +/* Error codes for the DSA functions. */ + +/* Function codes. */ +# define DSA_F_D2I_DSA_SIG 110 +# define DSA_F_DO_DSA_PRINT 104 +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 +# define DSA_F_DSA_DO_SIGN 112 +# define DSA_F_DSA_DO_VERIFY 113 +# define DSA_F_DSA_GENERATE_KEY 124 +# define DSA_F_DSA_GENERATE_PARAMETERS_EX 123 +# define DSA_F_DSA_NEW_METHOD 103 +# define DSA_F_DSA_PARAM_DECODE 119 +# define DSA_F_DSA_PRINT_FP 105 +# define DSA_F_DSA_PRIV_DECODE 115 +# define DSA_F_DSA_PRIV_ENCODE 116 +# define DSA_F_DSA_PUB_DECODE 117 +# define DSA_F_DSA_PUB_ENCODE 118 +# define DSA_F_DSA_SIGN 106 +# define DSA_F_DSA_SIGN_SETUP 107 +# define DSA_F_DSA_SIG_NEW 109 +# define DSA_F_DSA_SIG_PRINT 125 +# define DSA_F_DSA_VERIFY 108 +# define DSA_F_I2D_DSA_SIG 111 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_KEYGEN 121 +# define DSA_F_SIG_CB 114 + +/* Reason codes. */ +# define DSA_R_BAD_Q_VALUE 102 +# define DSA_R_BN_DECODE_ERROR 108 +# define DSA_R_BN_ERROR 109 +# define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100 +# define DSA_R_DECODE_ERROR 104 +# define DSA_R_INVALID_DIGEST_TYPE 106 +# define DSA_R_INVALID_PARAMETERS 112 +# define DSA_R_MISSING_PARAMETERS 101 +# define DSA_R_MODULUS_TOO_LARGE 103 +# define DSA_R_NEED_NEW_SETUP_VALUES 110 +# define DSA_R_NON_FIPS_DSA_METHOD 111 +# define DSA_R_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/dso.h b/src/components/openssl/dso.h new file mode 100644 index 0000000..e0e5d48 --- /dev/null +++ b/src/components/openssl/dso.h @@ -0,0 +1,451 @@ +/* dso.h */ +/* + * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project + * 2000. + */ +/* ==================================================================== + * Copyright (c) 2000 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 + * licensing@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_DSO_H +# define HEADER_DSO_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* These values are used as commands to DSO_ctrl() */ +# define DSO_CTRL_GET_FLAGS 1 +# define DSO_CTRL_SET_FLAGS 2 +# define DSO_CTRL_OR_FLAGS 3 + +/* + * By default, DSO_load() will translate the provided filename into a form + * typical for the platform (more specifically the DSO_METHOD) using the + * dso_name_converter function of the method. Eg. win32 will transform "blah" + * into "blah.dll", and dlfcn will transform it into "libblah.so". The + * behaviour can be overriden by setting the name_converter callback in the + * DSO object (using DSO_set_name_converter()). This callback could even + * utilise the DSO_METHOD's converter too if it only wants to override + * behaviour for one or two possible DSO methods. However, the following flag + * can be set in a DSO to prevent *any* native name-translation at all - eg. + * if the caller has prompted the user for a path to a driver library so the + * filename should be interpreted as-is. + */ +# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 +/* + * An extra flag to give if only the extension should be added as + * translation. This is obviously only of importance on Unix and other + * operating systems where the translation also may prefix the name with + * something, like 'lib', and ignored everywhere else. This flag is also + * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. + */ +# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 + +/* + * The following flag controls the translation of symbol names to upper case. + * This is currently only being implemented for OpenVMS. + */ +# define DSO_FLAG_UPCASE_SYMBOL 0x10 + +/* + * This flag loads the library with public symbols. Meaning: The exported + * symbols of this library are public to all libraries loaded after this + * library. At the moment only implemented in unix. + */ +# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 + +typedef void (*DSO_FUNC_TYPE) (void); + +typedef struct dso_st DSO; + +/* + * The function prototype used for method functions (or caller-provided + * callbacks) that transform filenames. They are passed a DSO structure + * pointer (or NULL if they are to be used independantly of a DSO object) and + * a filename to transform. They should either return NULL (if there is an + * error condition) or a newly allocated string containing the transformed + * form that the caller will need to free with OPENSSL_free() when done. + */ +typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); +/* + * The function prototype used for method functions (or caller-provided + * callbacks) that merge two file specifications. They are passed a DSO + * structure pointer (or NULL if they are to be used independantly of a DSO + * object) and two file specifications to merge. They should either return + * NULL (if there is an error condition) or a newly allocated string + * containing the result of merging that the caller will need to free with + * OPENSSL_free() when done. Here, merging means that bits and pieces are + * taken from each of the file specifications and added together in whatever + * fashion that is sensible for the DSO method in question. The only rule + * that really applies is that if the two specification contain pieces of the + * same type, the copy from the first string takes priority. One could see + * it as the first specification is the one given by the user and the second + * being a bunch of defaults to add on if they're missing in the first. + */ +typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); + +typedef struct dso_meth_st { + const char *name; + /* + * Loads a shared library, NB: new DSO_METHODs must ensure that a + * successful load populates the loaded_filename field, and likewise a + * successful unload OPENSSL_frees and NULLs it out. + */ + int (*dso_load) (DSO *dso); + /* Unloads a shared library */ + int (*dso_unload) (DSO *dso); + /* Binds a variable */ + void *(*dso_bind_var) (DSO *dso, const char *symname); + /* + * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should + * be cast to the real function prototype by the caller. Platforms that + * don't have compatible representations for different prototypes (this + * is possible within ANSI C) are highly unlikely to have shared + * libraries at all, let alone a DSO_METHOD implemented for them. + */ + DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); +/* I don't think this would actually be used in any circumstances. */ +# if 0 + /* Unbinds a variable */ + int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); + /* Unbinds a function */ + int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); +# endif + /* + * The generic (yuck) "ctrl()" function. NB: Negative return values + * (rather than zero) indicate errors. + */ + long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); + /* + * The default DSO_METHOD-specific function for converting filenames to a + * canonical native form. + */ + DSO_NAME_CONVERTER_FUNC dso_name_converter; + /* + * The default DSO_METHOD-specific function for converting filenames to a + * canonical native form. + */ + DSO_MERGER_FUNC dso_merger; + /* [De]Initialisation handlers. */ + int (*init) (DSO *dso); + int (*finish) (DSO *dso); + /* Return pathname of the module containing location */ + int (*pathbyaddr) (void *addr, char *path, int sz); + /* Perform global symbol lookup, i.e. among *all* modules */ + void *(*globallookup) (const char *symname); +} DSO_METHOD; + +/**********************************************************************/ +/* The low-level handle type used to refer to a loaded shared library */ + +struct dso_st { + DSO_METHOD *meth; + /* + * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use + * anything but will need to cache the filename for use in the dso_bind + * handler. All in all, let each method control its own destiny. + * "Handles" and such go in a STACK. + */ + STACK_OF(void) *meth_data; + int references; + int flags; + /* + * For use by applications etc ... use this for your bits'n'pieces, don't + * touch meth_data! + */ + CRYPTO_EX_DATA ex_data; + /* + * If this callback function pointer is set to non-NULL, then it will be + * used in DSO_load() in place of meth->dso_name_converter. NB: This + * should normally set using DSO_set_name_converter(). + */ + DSO_NAME_CONVERTER_FUNC name_converter; + /* + * If this callback function pointer is set to non-NULL, then it will be + * used in DSO_load() in place of meth->dso_merger. NB: This should + * normally set using DSO_set_merger(). + */ + DSO_MERGER_FUNC merger; + /* + * This is populated with (a copy of) the platform-independant filename + * used for this DSO. + */ + char *filename; + /* + * This is populated with (a copy of) the translated filename by which + * the DSO was actually loaded. It is NULL iff the DSO is not currently + * loaded. NB: This is here because the filename translation process may + * involve a callback being invoked more than once not only to convert to + * a platform-specific form, but also to try different filenames in the + * process of trying to perform a load. As such, this variable can be + * used to indicate (a) whether this DSO structure corresponds to a + * loaded library or not, and (b) the filename with which it was actually + * loaded. + */ + char *loaded_filename; +}; + +DSO *DSO_new(void); +DSO *DSO_new_method(DSO_METHOD *method); +int DSO_free(DSO *dso); +int DSO_flags(DSO *dso); +int DSO_up_ref(DSO *dso); +long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); + +/* + * This function sets the DSO's name_converter callback. If it is non-NULL, + * then it will be used instead of the associated DSO_METHOD's function. If + * oldcb is non-NULL then it is set to the function pointer value being + * replaced. Return value is non-zero for success. + */ +int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, + DSO_NAME_CONVERTER_FUNC *oldcb); +/* + * These functions can be used to get/set the platform-independant filename + * used for a DSO. NB: set will fail if the DSO is already loaded. + */ +const char *DSO_get_filename(DSO *dso); +int DSO_set_filename(DSO *dso, const char *filename); +/* + * This function will invoke the DSO's name_converter callback to translate a + * filename, or if the callback isn't set it will instead use the DSO_METHOD's + * converter. If "filename" is NULL, the "filename" in the DSO itself will be + * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is + * simply duplicated. NB: This function is usually called from within a + * DSO_METHOD during the processing of a DSO_load() call, and is exposed so + * that caller-created DSO_METHODs can do the same thing. A non-NULL return + * value will need to be OPENSSL_free()'d. + */ +char *DSO_convert_filename(DSO *dso, const char *filename); +/* + * This function will invoke the DSO's merger callback to merge two file + * specifications, or if the callback isn't set it will instead use the + * DSO_METHOD's merger. A non-NULL return value will need to be + * OPENSSL_free()'d. + */ +char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); +/* + * If the DSO is currently loaded, this returns the filename that it was + * loaded under, otherwise it returns NULL. So it is also useful as a test as + * to whether the DSO is currently loaded. NB: This will not necessarily + * return the same value as DSO_convert_filename(dso, dso->filename), because + * the DSO_METHOD's load function may have tried a variety of filenames (with + * and/or without the aid of the converters) before settling on the one it + * actually loaded. + */ +const char *DSO_get_loaded_filename(DSO *dso); + +void DSO_set_default_method(DSO_METHOD *meth); +DSO_METHOD *DSO_get_default_method(void); +DSO_METHOD *DSO_get_method(DSO *dso); +DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); + +/* + * The all-singing all-dancing load function, you normally pass NULL for the + * first and third parameters. Use DSO_up and DSO_free for subsequent + * reference count handling. Any flags passed in will be set in the + * constructed DSO after its init() function but before the load operation. + * If 'dso' is non-NULL, 'flags' is ignored. + */ +DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); + +/* This function binds to a variable inside a shared library. */ +void *DSO_bind_var(DSO *dso, const char *symname); + +/* This function binds to a function inside a shared library. */ +DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); + +/* + * This method is the default, but will beg, borrow, or steal whatever method + * should be the default on any particular platform (including + * DSO_METH_null() if necessary). + */ +DSO_METHOD *DSO_METHOD_openssl(void); + +/* + * This method is defined for all platforms - if a platform has no DSO + * support then this will be the only method! + */ +DSO_METHOD *DSO_METHOD_null(void); + +/* + * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, + * dlclose, dlsym, etc) will be used and incorporated into this method. If + * not, this method will return NULL. + */ +DSO_METHOD *DSO_METHOD_dlfcn(void); + +/* + * If DSO_DL is defined, the standard dl.h-style functions (shl_load, + * shl_unload, shl_findsym, etc) will be used and incorporated into this + * method. If not, this method will return NULL. + */ +DSO_METHOD *DSO_METHOD_dl(void); + +/* If WIN32 is defined, use DLLs. If not, return NULL. */ +DSO_METHOD *DSO_METHOD_win32(void); + +/* If VMS is defined, use shared images. If not, return NULL. */ +DSO_METHOD *DSO_METHOD_vms(void); + +/* + * This function writes null-terminated pathname of DSO module containing + * 'addr' into 'sz' large caller-provided 'path' and returns the number of + * characters [including trailing zero] written to it. If 'sz' is 0 or + * negative, 'path' is ignored and required amount of charachers [including + * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then + * pathname of cryptolib itself is returned. Negative or zero return value + * denotes error. + */ +int DSO_pathbyaddr(void *addr, char *path, int sz); + +/* + * This function should be used with caution! It looks up symbols in *all* + * loaded modules and if module gets unloaded by somebody else attempt to + * dereference the pointer is doomed to have fatal consequences. Primary + * usage for this function is to probe *core* system functionality, e.g. + * check if getnameinfo(3) is available at run-time without bothering about + * OS-specific details such as libc.so.versioning or where does it actually + * reside: in libc itself or libsocket. + */ +void *DSO_global_lookup(const char *name); + +/* If BeOS is defined, use shared images. If not, return NULL. */ +DSO_METHOD *DSO_METHOD_beos(void); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_DSO_strings(void); + +/* Error codes for the DSO functions. */ + +/* Function codes. */ +# define DSO_F_BEOS_BIND_FUNC 144 +# define DSO_F_BEOS_BIND_VAR 145 +# define DSO_F_BEOS_LOAD 146 +# define DSO_F_BEOS_NAME_CONVERTER 147 +# define DSO_F_BEOS_UNLOAD 148 +# define DSO_F_DLFCN_BIND_FUNC 100 +# define DSO_F_DLFCN_BIND_VAR 101 +# define DSO_F_DLFCN_LOAD 102 +# define DSO_F_DLFCN_MERGER 130 +# define DSO_F_DLFCN_NAME_CONVERTER 123 +# define DSO_F_DLFCN_UNLOAD 103 +# define DSO_F_DL_BIND_FUNC 104 +# define DSO_F_DL_BIND_VAR 105 +# define DSO_F_DL_LOAD 106 +# define DSO_F_DL_MERGER 131 +# define DSO_F_DL_NAME_CONVERTER 124 +# define DSO_F_DL_UNLOAD 107 +# define DSO_F_DSO_BIND_FUNC 108 +# define DSO_F_DSO_BIND_VAR 109 +# define DSO_F_DSO_CONVERT_FILENAME 126 +# define DSO_F_DSO_CTRL 110 +# define DSO_F_DSO_FREE 111 +# define DSO_F_DSO_GET_FILENAME 127 +# define DSO_F_DSO_GET_LOADED_FILENAME 128 +# define DSO_F_DSO_GLOBAL_LOOKUP 139 +# define DSO_F_DSO_LOAD 112 +# define DSO_F_DSO_MERGE 132 +# define DSO_F_DSO_NEW_METHOD 113 +# define DSO_F_DSO_PATHBYADDR 140 +# define DSO_F_DSO_SET_FILENAME 129 +# define DSO_F_DSO_SET_NAME_CONVERTER 122 +# define DSO_F_DSO_UP_REF 114 +# define DSO_F_GLOBAL_LOOKUP_FUNC 138 +# define DSO_F_PATHBYADDR 137 +# define DSO_F_VMS_BIND_SYM 115 +# define DSO_F_VMS_LOAD 116 +# define DSO_F_VMS_MERGER 133 +# define DSO_F_VMS_UNLOAD 117 +# define DSO_F_WIN32_BIND_FUNC 118 +# define DSO_F_WIN32_BIND_VAR 119 +# define DSO_F_WIN32_GLOBALLOOKUP 142 +# define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 +# define DSO_F_WIN32_JOINER 135 +# define DSO_F_WIN32_LOAD 120 +# define DSO_F_WIN32_MERGER 134 +# define DSO_F_WIN32_NAME_CONVERTER 125 +# define DSO_F_WIN32_PATHBYADDR 141 +# define DSO_F_WIN32_SPLITTER 136 +# define DSO_F_WIN32_UNLOAD 121 + +/* Reason codes. */ +# define DSO_R_CTRL_FAILED 100 +# define DSO_R_DSO_ALREADY_LOADED 110 +# define DSO_R_EMPTY_FILE_STRUCTURE 113 +# define DSO_R_FAILURE 114 +# define DSO_R_FILENAME_TOO_BIG 101 +# define DSO_R_FINISH_FAILED 102 +# define DSO_R_INCORRECT_FILE_SYNTAX 115 +# define DSO_R_LOAD_FAILED 103 +# define DSO_R_NAME_TRANSLATION_FAILED 109 +# define DSO_R_NO_FILENAME 111 +# define DSO_R_NO_FILE_SPECIFICATION 116 +# define DSO_R_NULL_HANDLE 104 +# define DSO_R_SET_FILENAME_FAILED 112 +# define DSO_R_STACK_ERROR 105 +# define DSO_R_SYM_FAILURE 106 +# define DSO_R_UNLOAD_FAILED 107 +# define DSO_R_UNSUPPORTED 108 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/dtls1.h b/src/components/openssl/dtls1.h new file mode 100644 index 0000000..beda10b --- /dev/null +++ b/src/components/openssl/dtls1.h @@ -0,0 +1,272 @@ +/* ssl/dtls1.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_DTLS1_H +# define HEADER_DTLS1_H + +# include +# include +# ifdef OPENSSL_SYS_VMS +# include +# include +# endif +# ifdef OPENSSL_SYS_WIN32 +/* Needed for struct timeval */ +# include +# elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) +# include +# else +# if defined(OPENSSL_SYS_VXWORKS) +# include +# else +# include +# endif +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# define DTLS1_VERSION_MAJOR 0xFE + +# define DTLS1_BAD_VER 0x0100 + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +# if 0 +/* this alert description is not specified anywhere... */ +# define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110 +# endif + +/* lengths of messages */ +# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_RT_HEADER_LENGTH 13 + +# define DTLS1_HM_HEADER_LENGTH 12 + +# define DTLS1_HM_BAD_FRAGMENT -2 +# define DTLS1_HM_FRAGMENT_RETRY -3 + +# define DTLS1_CCS_HEADER_LENGTH 1 + +# ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE +# define DTLS1_AL_HEADER_LENGTH 7 +# else +# define DTLS1_AL_HEADER_LENGTH 2 +# endif + +# ifndef OPENSSL_NO_SSL_INTERN + +# ifndef OPENSSL_NO_SCTP +# define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP" +# endif + +/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */ +# define DTLS1_MAX_MTU_OVERHEAD 48 + +typedef struct dtls1_bitmap_st { + unsigned long map; /* track 32 packets on 32-bit systems and 64 + * - on 64-bit systems */ + unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit + * value in big-endian encoding */ +} DTLS1_BITMAP; + +struct dtls1_retransmit_state { + EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ + EVP_MD_CTX *write_hash; /* used for mac generation */ +# ifndef OPENSSL_NO_COMP + COMP_CTX *compress; /* compression */ +# else + char *compress; +# endif + SSL_SESSION *session; + unsigned short epoch; +}; + +struct hm_header_st { + unsigned char type; + unsigned long msg_len; + unsigned short seq; + unsigned long frag_off; + unsigned long frag_len; + unsigned int is_ccs; + struct dtls1_retransmit_state saved_retransmit_state; +}; + +struct ccs_header_st { + unsigned char type; + unsigned short seq; +}; + +struct dtls1_timeout_st { + /* Number of read timeouts so far */ + unsigned int read_timeouts; + /* Number of write timeouts so far */ + unsigned int write_timeouts; + /* Number of alerts received so far */ + unsigned int num_alerts; +}; + +typedef struct record_pqueue_st { + unsigned short epoch; + pqueue q; +} record_pqueue; + +typedef struct hm_fragment_st { + struct hm_header_st msg_header; + unsigned char *fragment; + unsigned char *reassembly; +} hm_fragment; + +typedef struct dtls1_state_st { + unsigned int send_cookie; + unsigned char cookie[DTLS1_COOKIE_LENGTH]; + unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH]; + unsigned int cookie_len; + /* + * The current data and handshake epoch. This is initially + * undefined, and starts at zero once the initial handshake is + * completed + */ + unsigned short r_epoch; + unsigned short w_epoch; + /* records being received in the current epoch */ + DTLS1_BITMAP bitmap; + /* renegotiation starts a new set of sequence numbers */ + DTLS1_BITMAP next_bitmap; + /* handshake message numbers */ + unsigned short handshake_write_seq; + unsigned short next_handshake_write_seq; + unsigned short handshake_read_seq; + /* save last sequence number for retransmissions */ + unsigned char last_write_sequence[8]; + /* Received handshake records (processed and unprocessed) */ + record_pqueue unprocessed_rcds; + record_pqueue processed_rcds; + /* Buffered handshake messages */ + pqueue buffered_messages; + /* Buffered (sent) handshake records */ + pqueue sent_messages; + /* + * Buffered application records. Only for records between CCS and + * Finished to prevent either protocol violation or unnecessary message + * loss. + */ + record_pqueue buffered_app_data; + /* Is set when listening for new connections with dtls1_listen() */ + unsigned int listen; + unsigned int link_mtu; /* max on-the-wire DTLS packet size */ + unsigned int mtu; /* max DTLS packet size */ + struct hm_header_st w_msg_hdr; + struct hm_header_st r_msg_hdr; + struct dtls1_timeout_st timeout; + /* + * Indicates when the last handshake msg or heartbeat sent will timeout + */ + struct timeval next_timeout; + /* Timeout duration */ + unsigned short timeout_duration; + /* + * storage for Alert/Handshake protocol data received but not yet + * processed by ssl3_read_bytes: + */ + unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH]; + unsigned int handshake_fragment_len; + unsigned int retransmitting; + /* + * Set when the handshake is ready to process peer's ChangeCipherSpec message. + * Cleared after the message has been processed. + */ + unsigned int change_cipher_spec_ok; +# ifndef OPENSSL_NO_SCTP + /* used when SSL_ST_XX_FLUSH is entered */ + int next_state; + int shutdown_received; +# endif +} DTLS1_STATE; + +typedef struct dtls1_record_data_st { + unsigned char *packet; + unsigned int packet_length; + SSL3_BUFFER rbuf; + SSL3_RECORD rrec; +# ifndef OPENSSL_NO_SCTP + struct bio_dgram_sctp_rcvinfo recordinfo; +# endif +} DTLS1_RECORD_DATA; + +# endif + +/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ +# define DTLS1_TMO_READ_COUNT 2 +# define DTLS1_TMO_WRITE_COUNT 2 + +# define DTLS1_TMO_ALERT_COUNT 12 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/e_os2.h b/src/components/openssl/e_os2.h new file mode 100644 index 0000000..d26b144 --- /dev/null +++ b/src/components/openssl/e_os2.h @@ -0,0 +1,328 @@ +/* e_os2.h */ +/* ==================================================================== + * Copyright (c) 1998-2000 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 + +#ifndef HEADER_E_OS2_H +# define HEADER_E_OS2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * Detect operating systems. This probably needs completing. + * The result is that at least one OPENSSL_SYS_os macro should be defined. + * However, if none is defined, Unix is assumed. + **/ + +# define OPENSSL_SYS_UNIX + +/* ---------------------- Macintosh, before MacOS X ----------------------- */ +# if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_MACINTOSH_CLASSIC +# endif + +/* ---------------------- NetWare ----------------------------------------- */ +# if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_NETWARE +# endif + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +# if defined(OPENSSL_SYSNAME_MSDOS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_MSDOS +# endif + +/* + * For 32 bit environment, there seems to be the CygWin environment and then + * all the others that try to do the same thing Microsoft does... + */ +# if defined(OPENSSL_SYSNAME_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +# else +# if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32 +# endif +# if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN64) +# define OPENSSL_SYS_WIN64 +# endif +# endif +# if defined(OPENSSL_SYSNAME_WINNT) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINNT +# endif +# if defined(OPENSSL_SYSNAME_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINCE +# endif +# endif +# endif + +/* Anything that tries to look like Microsoft is "Windows" */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +# endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementor how he or she will link the application, so it + * requires some macro to be used. + */ +# ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to + * indicate that DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +# endif + +/* ------------------------------- OpenVMS -------------------------------- */ +# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS +# if defined(__DECC) +# define OPENSSL_SYS_VMS_DECC +# elif defined(__DECCXX) +# define OPENSSL_SYS_VMS_DECC +# define OPENSSL_SYS_VMS_DECCXX +# else +# define OPENSSL_SYS_VMS_NODECC +# endif +# endif + +/* -------------------------------- OS/2 ---------------------------------- */ +# if defined(__EMX__) || defined(__OS2__) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_OS2 +# endif + +/* -------------------------------- Unix ---------------------------------- */ +# ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# ifdef OPENSSL_SYSNAME_MPE +# define OPENSSL_SYS_MPE +# endif +# ifdef OPENSSL_SYSNAME_SNI +# define OPENSSL_SYS_SNI +# endif +# ifdef OPENSSL_SYSNAME_ULTRASPARC +# define OPENSSL_SYS_ULTRASPARC +# endif +# ifdef OPENSSL_SYSNAME_NEWS4 +# define OPENSSL_SYS_NEWS4 +# endif +# ifdef OPENSSL_SYSNAME_MACOSX +# define OPENSSL_SYS_MACOSX +# endif +# ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY +# define OPENSSL_SYS_MACOSX_RHAPSODY +# define OPENSSL_SYS_MACOSX +# endif +# ifdef OPENSSL_SYSNAME_SUNOS +# define OPENSSL_SYS_SUNOS +# endif +# if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) +# define OPENSSL_SYS_CRAY +# endif +# if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) +# define OPENSSL_SYS_AIX +# endif +# endif + +/* -------------------------------- VOS ----------------------------------- */ +# if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS) +# define OPENSSL_SYS_VOS +# ifdef __HPPA__ +# define OPENSSL_SYS_VOS_HPPA +# endif +# ifdef __IA32__ +# define OPENSSL_SYS_VOS_IA32 +# endif +# endif + +/* ------------------------------ VxWorks --------------------------------- */ +# ifdef OPENSSL_SYSNAME_VXWORKS +# define OPENSSL_SYS_VXWORKS +# endif + +/* -------------------------------- BeOS ---------------------------------- */ +# if defined(__BEOS__) +# define OPENSSL_SYS_BEOS +# include +# if defined(BONE_VERSION) +# define OPENSSL_SYS_BEOS_BONE +# else +# define OPENSSL_SYS_BEOS_R5 +# endif +# endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + +/* Specials for I/O an exit */ +# ifdef OPENSSL_SYS_MSDOS +# define OPENSSL_UNISTD_IO +# define OPENSSL_DECLARE_EXIT extern void exit(int); +# else +# define OPENSSL_UNISTD_IO OPENSSL_UNISTD +# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ +# endif + +/*- + * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare + * certain global symbols that, with some compilers under VMS, have to be + * defined and declared explicitely with globaldef and globalref. + * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare + * DLL exports and imports for compilers under Win32. These are a little + * more complicated to use. Basically, for any library that exports some + * global variables, the following code must be present in the header file + * that declares them, before OPENSSL_EXTERN is used: + * + * #ifdef SOME_BUILD_FLAG_MACRO + * # undef OPENSSL_EXTERN + * # define OPENSSL_EXTERN OPENSSL_EXPORT + * #endif + * + * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL + * have some generally sensible values, and for OPENSSL_EXTERN to have the + * value OPENSSL_IMPORT. + */ + +# if defined(OPENSSL_SYS_VMS_NODECC) +# define OPENSSL_EXPORT globalref +# define OPENSSL_IMPORT globalref +# define OPENSSL_GLOBAL globaldef +# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_IMPORT extern __declspec(dllimport) +# define OPENSSL_GLOBAL +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_IMPORT extern +# define OPENSSL_GLOBAL +# endif +# define OPENSSL_EXTERN OPENSSL_IMPORT + +/*- + * Macros to allow global variables to be reached through function calls when + * required (if a shared library version requires it, for example. + * The way it's done allows definitions like this: + * + * // in foobar.c + * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) + * // in foobar.h + * OPENSSL_DECLARE_GLOBAL(int,foobar); + * #define foobar OPENSSL_GLOBAL_REF(foobar) + */ +# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ + type *_shadow_##name(void) \ + { static type _hide_##name=value; return &_hide_##name; } +# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) +# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) +# else +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value; +# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name +# define OPENSSL_GLOBAL_REF(name) _shadow_##name +# endif + +# if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE) +# define ossl_ssize_t long +# endif + +# ifdef OPENSSL_SYS_MSDOS +# define ossl_ssize_t long +# endif + +# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS) +# define ssize_t int +# endif + +# if defined(__ultrix) && !defined(ssize_t) +# define ossl_ssize_t int +# endif + +# ifndef ossl_ssize_t +# define ossl_ssize_t ssize_t +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ebcdic.h b/src/components/openssl/ebcdic.h new file mode 100644 index 0000000..4cbdfeb --- /dev/null +++ b/src/components/openssl/ebcdic.h @@ -0,0 +1,26 @@ +/* crypto/ebcdic.h */ + +#ifndef HEADER_EBCDIC_H +# define HEADER_EBCDIC_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid name clashes with other applications */ +# define os_toascii _openssl_os_toascii +# define os_toebcdic _openssl_os_toebcdic +# define ebcdic2ascii _openssl_ebcdic2ascii +# define ascii2ebcdic _openssl_ascii2ebcdic + +extern const unsigned char os_toascii[256]; +extern const unsigned char os_toebcdic[256]; +void *ebcdic2ascii(void *dest, const void *srce, size_t count); +void *ascii2ebcdic(void *dest, const void *srce, size_t count); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ec.h b/src/components/openssl/ec.h new file mode 100644 index 0000000..a5204f0 --- /dev/null +++ b/src/components/openssl/ec.h @@ -0,0 +1,1282 @@ +/* crypto/ec/ec.h */ +/* + * Originally written by Bodo Moeller for the OpenSSL project. + */ +/** + * \file crypto/ec/ec.h Include file for the OpenSSL EC functions + * \author Originally written by Bodo Moeller for the OpenSSL project + */ +/* ==================================================================== + * Copyright (c) 1998-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). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the OpenSSL open source + * license provided above. + * + * The elliptic curve binary polynomial software is originally written by + * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. + * + */ + +#ifndef HEADER_EC_H +# define HEADER_EC_H + +# include + +# ifdef OPENSSL_NO_EC +# error EC is disabled. +# endif + +# include +# include +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif + +# ifdef __cplusplus +extern "C" { +# elif defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x04 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + +typedef struct ec_method_st EC_METHOD; + +typedef struct ec_group_st + /*- + EC_METHOD *meth; + -- field definition + -- curve coefficients + -- optional generator with associated information (order, cofactor) + -- optional extra data (precomputed table for fast computation of multiples of generator) + -- ASN1 stuff + */ + EC_GROUP; + +typedef struct ec_point_st EC_POINT; + +/********************************************************************/ +/* EC_METHODs for curves over GF(p) */ +/********************************************************************/ + +/** Returns the basic GFp ec methods which provides the basis for the + * optimized methods. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_simple_method(void); + +/** Returns GFp methods using montgomery multiplication. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_mont_method(void); + +/** Returns GFp methods using optimized methods for NIST recommended curves + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nist_method(void); + +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +/** Returns 64-bit optimized methods for nistp224 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp224_method(void); + +/** Returns 64-bit optimized methods for nistp256 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp256_method(void); + +/** Returns 64-bit optimized methods for nistp521 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp521_method(void); +# endif + +# ifndef OPENSSL_NO_EC2M +/********************************************************************/ +/* EC_METHOD for curves over GF(2^m) */ +/********************************************************************/ + +/** Returns the basic GF2m ec method + * \return EC_METHOD object + */ +const EC_METHOD *EC_GF2m_simple_method(void); + +# endif + +/********************************************************************/ +/* EC_GROUP functions */ +/********************************************************************/ + +/** Creates a new EC_GROUP object + * \param meth EC_METHOD to use + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Frees a EC_GROUP object + * \param group EC_GROUP object to be freed. + */ +void EC_GROUP_free(EC_GROUP *group); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +void EC_GROUP_clear_free(EC_GROUP *group); + +/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. + * \param dst destination EC_GROUP object + * \param src source EC_GROUP object + * \return 1 on success and 0 if an error occurred. + */ +int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); + +/** Creates a new EC_GROUP object and copies the copies the content + * form src to the newly created EC_KEY object + * \param src source EC_GROUP object + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +int EC_METHOD_get_field_type(const EC_METHOD *meth); + +/** Sets the generator and it's order/cofactor of a EC_GROUP object. + * \param group EC_GROUP object + * \param generator EC_POINT object with the generator. + * \param order the order of the group generated by the generator. + * \param cofactor the index of the sub-group generated by the generator + * in the group of all points on the elliptic curve. + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, + const BIGNUM *order, const BIGNUM *cofactor); + +/** Returns the generator of a EC_GROUP object. + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). + */ +const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); + +/** Returns the montgomery data for order(Generator) + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). +*/ +BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); + +/** Gets the order of a EC_GROUP + * \param group EC_GROUP object + * \param order BIGNUM to which the order is copied + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, + BN_CTX *ctx); + +/** Sets the name of a EC_GROUP object + * \param group EC_GROUP object + * \param nid NID of the curve name OID + */ +void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); + +/** Returns the curve name of a EC_GROUP object + * \param group EC_GROUP object + * \return NID of the curve name OID or 0 if not set. + */ +int EC_GROUP_get_curve_name(const EC_GROUP *group); + +void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); +int EC_GROUP_get_asn1_flag(const EC_GROUP *group); + +void EC_GROUP_set_point_conversion_form(EC_GROUP *group, + point_conversion_form_t form); +point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); + +unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); +size_t EC_GROUP_get_seed_len(const EC_GROUP *); +size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); + +/** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b + * \param group EC_GROUP object + * \param p BIGNUM with the prime number + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b + * \param group EC_GROUP object + * \param p BIGNUM for the prime number + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, + BIGNUM *b, BN_CTX *ctx); + +# ifndef OPENSSL_NO_EC2M +/** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b + * \param group EC_GROUP object + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b + * \param group EC_GROUP object + * \param p BIGNUM for the polynomial defining the underlying field + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, + BIGNUM *b, BN_CTX *ctx); +# endif +/** Returns the number of bits needed to represent a field element + * \param group EC_GROUP object + * \return number of bits needed to represent a field element + */ +int EC_GROUP_get_degree(const EC_GROUP *group); + +/** Checks whether the parameter in the EC_GROUP define a valid ec group + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if group is a valid ec group and 0 otherwise + */ +int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); + +/** Checks whether the discriminant of the elliptic curve is zero or not + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if the discriminant is not zero and 0 otherwise + */ +int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); + +/** Compares two EC_GROUP objects + * \param a first EC_GROUP object + * \param b second EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 0 if both groups are equal and 1 otherwise + */ +int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); + +/* + * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after + * choosing an appropriate EC_METHOD + */ + +/** Creates a new EC_GROUP object with the specified parameters defined + * over GFp (defined by the equation y^2 = x^3 + a*x + b) + * \param p BIGNUM with the prime number + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M +/** Creates a new EC_GROUP object with the specified parameters defined + * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# endif +/** Creates a EC_GROUP object with a curve specified by a NID + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name(int nid); + +/********************************************************************/ +/* handling of internal curves */ +/********************************************************************/ + +typedef struct { + int nid; + const char *comment; +} EC_builtin_curve; + +/* + * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all + * available curves or zero if a error occurred. In case r ist not zero + * nitems EC_builtin_curve structures are filled with the data of the first + * nitems internal groups + */ +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); + +const char *EC_curve_nid2nist(int nid); +int EC_curve_nist2nid(const char *name); + +/********************************************************************/ +/* EC_POINT functions */ +/********************************************************************/ + +/** Creates a new EC_POINT object for the specified EC_GROUP + * \param group EC_GROUP the underlying EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_new(const EC_GROUP *group); + +/** Frees a EC_POINT object + * \param point EC_POINT object to be freed + */ +void EC_POINT_free(EC_POINT *point); + +/** Clears and frees a EC_POINT object + * \param point EC_POINT object to be cleared and freed + */ +void EC_POINT_clear_free(EC_POINT *point); + +/** Copies EC_POINT object + * \param dst destination EC_POINT object + * \param src source EC_POINT object + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); + +/** Creates a new EC_POINT object and copies the content of the supplied + * EC_POINT + * \param src source EC_POINT object + * \param group underlying the EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); + +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + +/** Sets a point to infinity (neutral element) + * \param group underlying EC_GROUP object + * \param point EC_POINT to set to infinity + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); + +/** Sets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param z BIGNUM with the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, const BIGNUM *x, + const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); + +/** Gets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param z BIGNUM for the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, + BIGNUM *y, BIGNUM *z, + BN_CTX *ctx); + +/** Sets the affine coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +/** Gets the affine coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, + BIGNUM *y, BN_CTX *ctx); + +/** Sets the x9.62 compressed coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, const BIGNUM *x, + int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M +/** Sets the affine coordinates of a EC_POINT over GF2m + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +/** Gets the affine coordinates of a EC_POINT over GF2m + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, + BIGNUM *y, BN_CTX *ctx); + +/** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, const BIGNUM *x, + int y_bit, BN_CTX *ctx); +# endif +/** Encodes a EC_POINT object to a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param form point conversion form + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, + point_conversion_form_t form, + unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Decodes a EC_POINT from a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/* other interfaces to point2oct/oct2point: */ +BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BIGNUM *, BN_CTX *); +EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, + EC_POINT *, BN_CTX *); +char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BN_CTX *); +EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, + EC_POINT *, BN_CTX *); + +/********************************************************************/ +/* functions for doing EC_POINT arithmetic */ +/********************************************************************/ + +/** Computes the sum of two EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = a + b) + * \param a EC_POINT object with the first summand + * \param b EC_POINT object with the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + const EC_POINT *b, BN_CTX *ctx); + +/** Computes the double of a EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = 2 * a) + * \param a EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + BN_CTX *ctx); + +/** Computes the inverse of a EC_POINT + * \param group underlying EC_GROUP object + * \param a EC_POINT object to be inverted (it's used for the result as well) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); + +/** Checks whether the point is the neutral element of the group + * \param group the underlying EC_GROUP object + * \param p EC_POINT object + * \return 1 if the point is the neutral element and 0 otherwise + */ +int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); + +/** Checks whether the point is on the curve + * \param group underlying EC_GROUP object + * \param point EC_POINT object to check + * \param ctx BN_CTX object (optional) + * \return 1 if point if on the curve and 0 otherwise + */ +int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, + BN_CTX *ctx); + +/** Compares two EC_POINTs + * \param group underlying EC_GROUP object + * \param a first EC_POINT object + * \param b second EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 0 if both points are equal and a value != 0 otherwise + */ +int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, + BN_CTX *ctx); + +int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); +int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); + +/** Computes r = generator * n sum_{i=0}^{num-1} p[i] * m[i] + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param num number futher summands + * \param p array of size num of EC_POINT objects + * \param m array of size num of BIGNUM objects + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + size_t num, const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); + +/** Computes r = generator * n + q * m + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param q EC_POINT object with the first factor of the second summand + * \param m BIGNUM with the second factor of the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); + +/** Stores multiples of generator for faster point multiplication + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); + +/** Reports whether a precomputation has been done + * \param group EC_GROUP object + * \return 1 if a pre-computation has been done and 0 otherwise + */ +int EC_GROUP_have_precompute_mult(const EC_GROUP *group); + +/********************************************************************/ +/* ASN1 stuff */ +/********************************************************************/ + +/* + * EC_GROUP_get_basis_type() returns the NID of the basis type used to + * represent the field elements + */ +int EC_GROUP_get_basis_type(const EC_GROUP *); +# ifndef OPENSSL_NO_EC2M +int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); +int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, + unsigned int *k2, unsigned int *k3); +# endif + +# define OPENSSL_EC_NAMED_CURVE 0x001 + +typedef struct ecpk_parameters_st ECPKPARAMETERS; + +EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); +int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); + +# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) +# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) +# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ + (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) +# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ + (unsigned char *)(x)) + +# ifndef OPENSSL_NO_BIO +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +# endif +# ifndef OPENSSL_NO_FP_API +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +# endif + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +typedef struct ec_key_st EC_KEY; + +/* some values for the encoding_flag */ +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 + +/* some values for the flags field */ +# define EC_FLAG_NON_FIPS_ALLOW 0x1 +# define EC_FLAG_FIPS_CHECKED 0x2 + +/** Creates a new EC_KEY object. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new(void); + +int EC_KEY_get_flags(const EC_KEY *key); + +void EC_KEY_set_flags(EC_KEY *key, int flags); + +void EC_KEY_clear_flags(EC_KEY *key, int flags); + +/** Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new_by_curve_name(int nid); + +/** Frees a EC_KEY object. + * \param key EC_KEY object to be freed. + */ +void EC_KEY_free(EC_KEY *key); + +/** Copies a EC_KEY object. + * \param dst destination EC_KEY object + * \param src src EC_KEY object + * \return dst or NULL if an error occurred. + */ +EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); + +/** Creates a new EC_KEY object and copies the content from src to it. + * \param src the source EC_KEY object + * \return newly created EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_dup(const EC_KEY *src); + +/** Increases the internal reference count of a EC_KEY object. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_up_ref(EC_KEY *key); + +/** Returns the EC_GROUP object of a EC_KEY object + * \param key EC_KEY object + * \return the EC_GROUP object (possibly NULL). + */ +const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); + +/** Sets the EC_GROUP of a EC_KEY object. + * \param key EC_KEY object + * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY + * object will use an own copy of the EC_GROUP). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); + +/** Returns the private key of a EC_KEY object. + * \param key EC_KEY object + * \return a BIGNUM with the private key (possibly NULL). + */ +const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); + +/** Sets the private key of a EC_KEY object. + * \param key EC_KEY object + * \param prv BIGNUM with the private key (note: the EC_KEY object + * will use an own copy of the BIGNUM). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); + +/** Returns the public key of a EC_KEY object. + * \param key the EC_KEY object + * \return a EC_POINT object with the public key (possibly NULL) + */ +const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); + +/** Sets the public key of a EC_KEY object. + * \param key EC_KEY object + * \param pub EC_POINT object with the public key (note: the EC_KEY object + * will use an own copy of the EC_POINT object). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); + +unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); +/* functions to set/get method specific data */ +void *EC_KEY_get_key_method_data(EC_KEY *key, + void *(*dup_func) (void *), + void (*free_func) (void *), + void (*clear_free_func) (void *)); +/** Sets the key method data of an EC_KEY object, if none has yet been set. + * \param key EC_KEY object + * \param data opaque data to install. + * \param dup_func a function that duplicates |data|. + * \param free_func a function that frees |data|. + * \param clear_free_func a function that wipes and frees |data|. + * \return the previously set data pointer, or NULL if |data| was inserted. + */ +void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data, + void *(*dup_func) (void *), + void (*free_func) (void *), + void (*clear_free_func) (void *)); +/* wrapper functions for the underlying EC_GROUP object */ +void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); + +/** Creates a table of pre-computed multiples of the generator to + * accelerate further EC_KEY operations. + * \param key EC_KEY object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); + +/** Creates a new ec private (and optional a new public) key. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_generate_key(EC_KEY *key); + +/** Verifies that a private and/or public key is valid. + * \param key the EC_KEY object + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_check_key(const EC_KEY *key); + +/** Sets a public key from affine coordindates performing + * neccessary NIST PKV tests. + * \param key the EC_KEY object + * \param x public key x coordinate + * \param y public key y coordinate + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, + BIGNUM *y); + +/********************************************************************/ +/* de- and encoding functions for SEC1 ECPrivateKey */ +/********************************************************************/ + +/** Decodes a private key from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded private key + * \param len length of the DER encoded private key + * \return the decoded private key or NULL if an error occurred. + */ +EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a private key object and stores the result in a buffer. + * \param key the EC_KEY object to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC parameters */ +/********************************************************************/ + +/** Decodes ec parameter from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded ec parameters + * \param len length of the DER encoded ec parameters + * \return a EC_KEY object with the decoded parameters or NULL if an error + * occurred. + */ +EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes ec parameter and stores the result in a buffer. + * \param key the EC_KEY object with ec paramters to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECParameters(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC public key */ +/* (octet string, not DER -- hence 'o2i' and 'i2o') */ +/********************************************************************/ + +/** Decodes a ec public key from a octet string. + * \param key a pointer to a EC_KEY object which should be used + * \param in memory buffer with the encoded public key + * \param len length of the encoded public key + * \return EC_KEY object with decoded public key or NULL if an error + * occurred. + */ +EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a ec public key in an octet string. + * \param key the EC_KEY object with the public key + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred + */ +int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); + +# ifndef OPENSSL_NO_BIO +/** Prints out the ec parameters on human readable form. + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print(BIO *bp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); + +# endif +# ifndef OPENSSL_NO_FP_API +/** Prints out the ec parameters on human readable form. + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print_fp(FILE *fp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); + +# endif + +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) + +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif +# endif + +# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) + +# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) + +# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd) + +# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen) + +# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p) + +# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p) + +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_62 2 + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_EC_strings(void); + +/* Error codes for the EC functions. */ + +/* Function codes. */ +# define EC_F_BN_TO_FELEM 224 +# define EC_F_COMPUTE_WNAF 143 +# define EC_F_D2I_ECPARAMETERS 144 +# define EC_F_D2I_ECPKPARAMETERS 145 +# define EC_F_D2I_ECPRIVATEKEY 146 +# define EC_F_DO_EC_KEY_PRINT 221 +# define EC_F_ECDH_CMS_DECRYPT 238 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 +# define EC_F_ECKEY_PARAM2TYPE 223 +# define EC_F_ECKEY_PARAM_DECODE 212 +# define EC_F_ECKEY_PRIV_DECODE 213 +# define EC_F_ECKEY_PRIV_ENCODE 214 +# define EC_F_ECKEY_PUB_DECODE 215 +# define EC_F_ECKEY_PUB_ENCODE 216 +# define EC_F_ECKEY_TYPE2PARAM 220 +# define EC_F_ECPARAMETERS_PRINT 147 +# define EC_F_ECPARAMETERS_PRINT_FP 148 +# define EC_F_ECPKPARAMETERS_PRINT 149 +# define EC_F_ECPKPARAMETERS_PRINT_FP 150 +# define EC_F_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# define EC_F_ECP_NISTZ256_SET_WORDS 245 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECP_NIST_MOD_192 203 +# define EC_F_ECP_NIST_MOD_224 204 +# define EC_F_ECP_NIST_MOD_256 205 +# define EC_F_ECP_NIST_MOD_521 206 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# define EC_F_EC_ASN1_GROUP2PARAMETERS 155 +# define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156 +# define EC_F_EC_ASN1_PARAMETERS2GROUP 157 +# define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158 +# define EC_F_EC_EX_DATA_SET_DATA 211 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 +# define EC_F_EC_GFP_MONT_FIELD_MUL 131 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 +# define EC_F_EC_GFP_MONT_FIELD_SQR 132 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP 135 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 +# define EC_F_EC_GFP_NIST_FIELD_MUL 200 +# define EC_F_EC_GFP_NIST_FIELD_SQR 201 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129 +# define EC_F_EC_GROUP_CHECK 170 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 +# define EC_F_EC_GROUP_COPY 106 +# define EC_F_EC_GROUP_GET0_GENERATOR 139 +# define EC_F_EC_GROUP_GET_COFACTOR 140 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 +# define EC_F_EC_GROUP_GET_CURVE_GFP 130 +# define EC_F_EC_GROUP_GET_DEGREE 173 +# define EC_F_EC_GROUP_GET_ORDER 141 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 +# define EC_F_EC_GROUP_NEW 108 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 +# define EC_F_EC_GROUP_NEW_FROM_DATA 175 +# define EC_F_EC_GROUP_PRECOMPUTE_MULT 142 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# define EC_F_EC_GROUP_SET_EXTRA_DATA 110 +# define EC_F_EC_GROUP_SET_GENERATOR 111 +# define EC_F_EC_KEY_CHECK_KEY 177 +# define EC_F_EC_KEY_COPY 178 +# define EC_F_EC_KEY_GENERATE_KEY 179 +# define EC_F_EC_KEY_NEW 182 +# define EC_F_EC_KEY_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# define EC_F_EC_POINTS_MAKE_AFFINE 136 +# define EC_F_EC_POINT_ADD 112 +# define EC_F_EC_POINT_CMP 113 +# define EC_F_EC_POINT_COPY 114 +# define EC_F_EC_POINT_DBL 115 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 +# define EC_F_EC_POINT_INVERT 210 +# define EC_F_EC_POINT_IS_AT_INFINITY 118 +# define EC_F_EC_POINT_IS_ON_CURVE 119 +# define EC_F_EC_POINT_MAKE_AFFINE 120 +# define EC_F_EC_POINT_MUL 184 +# define EC_F_EC_POINT_NEW 121 +# define EC_F_EC_POINT_OCT2POINT 122 +# define EC_F_EC_POINT_POINT2OCT 123 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 +# define EC_F_EC_POINT_SET_TO_INFINITY 127 +# define EC_F_EC_PRE_COMP_DUP 207 +# define EC_F_EC_PRE_COMP_NEW 196 +# define EC_F_EC_WNAF_MUL 187 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +# define EC_F_I2D_ECPARAMETERS 190 +# define EC_F_I2D_ECPKPARAMETERS 191 +# define EC_F_I2D_ECPRIVATEKEY 192 +# define EC_F_I2O_ECPUBLICKEY 151 +# define EC_F_NISTP224_PRE_COMP_NEW 227 +# define EC_F_NISTP256_PRE_COMP_NEW 236 +# define EC_F_NISTP521_PRE_COMP_NEW 237 +# define EC_F_O2I_ECPUBLICKEY 152 +# define EC_F_OLD_EC_PRIV_DECODE 222 +# define EC_F_PKEY_EC_CTRL 197 +# define EC_F_PKEY_EC_CTRL_STR 198 +# define EC_F_PKEY_EC_DERIVE 217 +# define EC_F_PKEY_EC_KEYGEN 199 +# define EC_F_PKEY_EC_PARAMGEN 219 +# define EC_F_PKEY_EC_SIGN 218 + +/* Reason codes. */ +# define EC_R_ASN1_ERROR 115 +# define EC_R_ASN1_UNKNOWN_FIELD 116 +# define EC_R_BIGNUM_OUT_OF_RANGE 144 +# define EC_R_BUFFER_TOO_SMALL 100 +# define EC_R_COORDINATES_OUT_OF_RANGE 146 +# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 +# define EC_R_DECODE_ERROR 142 +# define EC_R_DISCRIMINANT_IS_ZERO 118 +# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_FIELD_TOO_LARGE 143 +# define EC_R_GF2M_NOT_SUPPORTED 147 +# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 +# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 +# define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_COMPRESSED_POINT 110 +# define EC_R_INVALID_COMPRESSION_BIT 109 +# define EC_R_INVALID_CURVE 141 +# define EC_R_INVALID_DIGEST 151 +# define EC_R_INVALID_DIGEST_TYPE 138 +# define EC_R_INVALID_ENCODING 102 +# define EC_R_INVALID_FIELD 103 +# define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GROUP_ORDER 122 +# define EC_R_INVALID_PENTANOMIAL_BASIS 132 +# define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_TRINOMIAL_BASIS 137 +# define EC_R_KDF_PARAMETER_ERROR 148 +# define EC_R_KEYS_NOT_SET 140 +# define EC_R_MISSING_PARAMETERS 124 +# define EC_R_MISSING_PRIVATE_KEY 125 +# define EC_R_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_FIELD_MOD 133 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# define EC_R_SHARED_INFO_ERROR 150 +# define EC_R_SLOT_FULL 108 +# define EC_R_UNDEFINED_GENERATOR 113 +# define EC_R_UNDEFINED_ORDER 128 +# define EC_R_UNKNOWN_GROUP 129 +# define EC_R_UNKNOWN_ORDER 114 +# define EC_R_UNSUPPORTED_FIELD 131 +# define EC_R_WRONG_CURVE_PARAMETERS 145 +# define EC_R_WRONG_ORDER 130 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ecdh.h b/src/components/openssl/ecdh.h new file mode 100644 index 0000000..e6a189e --- /dev/null +++ b/src/components/openssl/ecdh.h @@ -0,0 +1,134 @@ +/* crypto/ecdh/ecdh.h */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * The Elliptic Curve Public-Key Crypto Library (ECC Code) included + * herein is developed by SUN MICROSYSTEMS, INC., and is contributed + * to the OpenSSL project. + * + * The ECC Code is licensed pursuant to the OpenSSL open source + * license provided below. + * + * The ECDH software is originally written by Douglas Stebila of + * Sun Microsystems Laboratories. + * + */ +/* ==================================================================== + * Copyright (c) 2000-2002 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 + * licensing@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_ECDH_H +# define HEADER_ECDH_H + +# include + +# ifdef OPENSSL_NO_ECDH +# error ECDH is disabled. +# endif + +# include +# include +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define EC_FLAG_COFACTOR_ECDH 0x1000 + +const ECDH_METHOD *ECDH_OpenSSL(void); + +void ECDH_set_default_method(const ECDH_METHOD *); +const ECDH_METHOD *ECDH_get_default_method(void); +int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, + EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen, + void *out, size_t *outlen)); + +int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new + *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); +void *ECDH_get_ex_data(EC_KEY *d, int idx); + +int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ECDH_strings(void); + +/* Error codes for the ECDH functions. */ + +/* Function codes. */ +# define ECDH_F_ECDH_CHECK 102 +# define ECDH_F_ECDH_COMPUTE_KEY 100 +# define ECDH_F_ECDH_DATA_NEW_METHOD 101 + +/* Reason codes. */ +# define ECDH_R_KDF_FAILED 102 +# define ECDH_R_NON_FIPS_METHOD 103 +# define ECDH_R_NO_PRIVATE_VALUE 100 +# define ECDH_R_POINT_ARITHMETIC_FAILURE 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ecdsa.h b/src/components/openssl/ecdsa.h new file mode 100644 index 0000000..e040c00 --- /dev/null +++ b/src/components/openssl/ecdsa.h @@ -0,0 +1,335 @@ +/* crypto/ecdsa/ecdsa.h */ +/** + * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions + * \author Written by Nils Larsch for the OpenSSL project + */ +/* ==================================================================== + * Copyright (c) 2000-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 + * licensing@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_ECDSA_H +# define HEADER_ECDSA_H + +# include + +# ifdef OPENSSL_NO_ECDSA +# error ECDSA is disabled. +# endif + +# include +# include +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ECDSA_SIG_st { + BIGNUM *r; + BIGNUM *s; +} ECDSA_SIG; + +/** Allocates and initialize a ECDSA_SIG structure + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_SIG_new(void); + +/** frees a ECDSA_SIG structure + * \param sig pointer to the ECDSA_SIG structure + */ +void ECDSA_SIG_free(ECDSA_SIG *sig); + +/** DER encode content of ECDSA_SIG object (note: this function modifies *pp + * (*pp += length of the DER encoded signature)). + * \param sig pointer to the ECDSA_SIG object + * \param pp pointer to a unsigned char pointer for the output or NULL + * \return the length of the DER encoded ECDSA_SIG object or 0 + */ +int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); + +/** Decodes a DER encoded ECDSA signature (note: this function changes *pp + * (*pp += len)). + * \param sig pointer to ECDSA_SIG pointer (may be NULL) + * \param pp memory buffer with the DER encoded signature + * \param len length of the buffer + * \return pointer to the decoded ECDSA_SIG structure (or NULL) + */ +ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); + +/** Computes the ECDSA signature of the given hash value using + * the supplied private key and returns the created signature. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, + EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optioanl), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, + const BIGNUM *kinv, const BIGNUM *rp, + EC_KEY *eckey); + +/** Verifies that the supplied signature is a valid ECDSA + * signature of the supplied hash value using the supplied public key. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param sig ECDSA_SIG structure + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); + +const ECDSA_METHOD *ECDSA_OpenSSL(void); + +/** Sets the default ECDSA method + * \param meth new default ECDSA_METHOD + */ +void ECDSA_set_default_method(const ECDSA_METHOD *meth); + +/** Returns the default ECDSA method + * \return pointer to ECDSA_METHOD structure containing the default method + */ +const ECDSA_METHOD *ECDSA_get_default_method(void); + +/** Sets method to be used for the ECDSA operations + * \param eckey EC_KEY object + * \param meth new method + * \return 1 on success and 0 otherwise + */ +int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); + +/** Returns the maximum length of the DER encoded signature + * \param eckey EC_KEY object + * \return numbers of bytes required for the DER encoded signature + */ +int ECDSA_size(const EC_KEY *eckey); + +/** Precompute parts of the signing operation + * \param eckey EC_KEY object containing a private EC key + * \param ctx BN_CTX object (optional) + * \param kinv BIGNUM pointer for the inverse of k + * \param rp BIGNUM pointer for x coordinate of k * generator + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig memory for the DER encoded created signature + * \param siglen pointer to the length of the returned signature + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig buffer to hold the DER encoded signature + * \param siglen pointer to the length of the returned signature + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optioanl), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); + +/** Verifies that the given signature is valid ECDSA signature + * of the supplied hash value using the specified public key. + * \param type this parameter is ignored + * \param dgst pointer to the hash value + * \param dgstlen length of the hash value + * \param sig pointer to the DER encoded signature + * \param siglen length of the DER encoded signature + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, EC_KEY *eckey); + +/* the standard ex_data functions */ +int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new + *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); +void *ECDSA_get_ex_data(EC_KEY *d, int idx); + +/** Allocates and initialize a ECDSA_METHOD structure + * \param ecdsa_method pointer to ECDSA_METHOD to copy. (May be NULL) + * \return pointer to a ECDSA_METHOD structure or NULL if an error occurred + */ + +ECDSA_METHOD *ECDSA_METHOD_new(const ECDSA_METHOD *ecdsa_method); + +/** frees a ECDSA_METHOD structure + * \param ecdsa_method pointer to the ECDSA_METHOD structure + */ +void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method); + +/** Sets application specific data in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param app application specific data to set + */ + +void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app); + +/** Returns application specific data from a ECDSA_METHOD structure + * \param ecdsa_method pointer to ECDSA_METHOD structure + * \return pointer to application specific data. + */ + +void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method); + +/** Set the ECDSA_do_sign function in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param ecdsa_do_sign a funtion of type ECDSA_do_sign + */ + +void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method, + ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char + *dgst, int dgst_len, + const BIGNUM *inv, + const BIGNUM *rp, + EC_KEY *eckey)); + +/** Set the ECDSA_sign_setup function in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param ecdsa_sign_setup a funtion of type ECDSA_sign_setup + */ + +void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method, + int (*ecdsa_sign_setup) (EC_KEY *eckey, + BN_CTX *ctx, + BIGNUM **kinv, + BIGNUM **r)); + +/** Set the ECDSA_do_verify function in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param ecdsa_do_verify a funtion of type ECDSA_do_verify + */ + +void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method, + int (*ecdsa_do_verify) (const unsigned char + *dgst, int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags); + +/** Set the flags field in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param flags flags value to set + */ + +void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name); + +/** Set the name field in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param name name to set + */ + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ECDSA_strings(void); + +/* Error codes for the ECDSA functions. */ + +/* Function codes. */ +# define ECDSA_F_ECDSA_CHECK 104 +# define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 +# define ECDSA_F_ECDSA_DO_SIGN 101 +# define ECDSA_F_ECDSA_DO_VERIFY 102 +# define ECDSA_F_ECDSA_METHOD_NEW 105 +# define ECDSA_F_ECDSA_SIGN_SETUP 103 + +/* Reason codes. */ +# define ECDSA_R_BAD_SIGNATURE 100 +# define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 +# define ECDSA_R_ERR_EC_LIB 102 +# define ECDSA_R_MISSING_PARAMETERS 103 +# define ECDSA_R_NEED_NEW_SETUP_VALUES 106 +# define ECDSA_R_NON_FIPS_METHOD 107 +# define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 +# define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/engine.h b/src/components/openssl/engine.h new file mode 100644 index 0000000..4b5421b --- /dev/null +++ b/src/components/openssl/engine.h @@ -0,0 +1,960 @@ +/* openssl/engine.h */ +/* + * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project + * 2000. + */ +/* ==================================================================== + * Copyright (c) 1999-2004 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 + * licensing@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). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECDH support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_ENGINE_H +# define HEADER_ENGINE_H + +# include + +# ifdef OPENSSL_NO_ENGINE +# error ENGINE is disabled. +# endif + +# ifndef OPENSSL_NO_DEPRECATED +# include +# ifndef OPENSSL_NO_RSA +# include +# endif +# ifndef OPENSSL_NO_DSA +# include +# endif +# ifndef OPENSSL_NO_DH +# include +# endif +# ifndef OPENSSL_NO_ECDH +# include +# endif +# ifndef OPENSSL_NO_ECDSA +# include +# endif +# include +# include +# include +# endif + +# include +# include + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These flags are used to control combinations of algorithm (methods) by + * bitwise "OR"ing. + */ +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_ECDH (unsigned int)0x0010 +# define ENGINE_METHOD_ECDSA (unsigned int)0x0020 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_STORE (unsigned int)0x0100 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +/* Obvious all-or-nothing cases. */ +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 + +/* + * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used + * internally to control registration of ENGINE implementations, and can be + * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to + * initialise registered ENGINEs if they are not already initialised. + */ +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 + +/* ENGINE flags that can be set by ENGINE_set_flags(). */ +/* Not used */ +/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ + +/* + * This flag is for ENGINEs that wish to handle the various 'CMD'-related + * control commands on their own. Without this flag, ENGINE_ctrl() handles + * these control commands on behalf of the ENGINE using their "cmd_defns" + * data. + */ +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 + +/* + * This flag is for ENGINEs who return new duplicate structures when found + * via "ENGINE_by_id()". When an ENGINE must store state (eg. if + * ENGINE_ctrl() commands are called in sequence as part of some stateful + * process like key-generation setup and execution), it can set this flag - + * then each attempt to obtain the ENGINE will result in it being copied into + * a new structure. Normally, ENGINEs don't declare this flag so + * ENGINE_by_id() just increments the existing ENGINE's structural reference + * count. + */ +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 + +/* + * This flag if for an ENGINE that does not want its methods registered as + * part of ENGINE_register_all_complete() for example if the methods are not + * usable as default methods. + */ + +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 + +/* + * ENGINEs can support their own command types, and these flags are used in + * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input + * each command expects. Currently only numeric and string input is + * supported. If a control command supports none of the _NUMERIC, _STRING, or + * _NO_INPUT options, then it is regarded as an "internal" control command - + * and not for use in config setting situations. As such, they're not + * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() + * access. Changes to this list of 'command types' should be reflected + * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). + */ + +/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +/* + * accepts string input (cast from 'void*' to 'const char *', 4th parameter + * to ENGINE_ctrl) + */ +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +/* + * Indicates that the control command takes *no* input. Ie. the control + * command is unparameterised. + */ +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +/* + * Indicates that the control command is internal. This control command won't + * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() + * function. + */ +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 + +/* + * NB: These 3 control commands are deprecated and should not be used. + * ENGINEs relying on these commands should compile conditional support for + * compatibility (eg. if these symbols are defined) but should also migrate + * the same functionality to their own ENGINE-specific control functions that + * can be "discovered" by calling applications. The fact these control + * commands wouldn't be "executable" (ie. usable by text-based config) + * doesn't change the fact that application code can find and use them + * without requiring per-ENGINE hacking. + */ + +/* + * These flags are used to tell the ctrl function what should be done. All + * command numbers are shared between all engines, even if some don't make + * sense to some engines. In such a case, they do nothing but return the + * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. + */ +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise + * any handles/connections + * etc. */ +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used + * when calling the password + * callback and the user + * interface */ +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, + * given a string that + * represents a file name + * or so */ +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given + * section in the already + * loaded configuration */ + +/* + * These control commands allow an application to deal with an arbitrary + * engine in a dynamic way. Warn: Negative return values indicate errors FOR + * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other + * commands, including ENGINE-specific command types, return zero for an + * error. An ENGINE can choose to implement these ctrl functions, and can + * internally manage things however it chooses - it does so by setting the + * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise + * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the + * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's + * ctrl() handler need only implement its own commands - the above "meta" + * commands will be taken care of. + */ + +/* + * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", + * then all the remaining control commands will return failure, so it is + * worth checking this first if the caller is trying to "discover" the + * engine's capabilities and doesn't want errors generated unnecessarily. + */ +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +/* + * Returns a positive command number for the first command supported by the + * engine. Returns zero if no ctrl commands are supported. + */ +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +/* + * The 'long' argument specifies a command implemented by the engine, and the + * return value is the next command supported, or zero if there are no more. + */ +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +/* + * The 'void*' argument is a command name (cast from 'const char *'), and the + * return value is the command that corresponds to it. + */ +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +/* + * The next two allow a command to be converted into its corresponding string + * form. In each case, the 'long' argument supplies the command. In the + * NAME_LEN case, the return value is the length of the command name (not + * counting a trailing EOL). In the NAME case, the 'void*' argument must be a + * string buffer large enough, and it will be populated with the name of the + * command (WITH a trailing EOL). + */ +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +/* The next two are similar but give a "short description" of a command. */ +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +/* + * With this command, the return value is the OR'd combination of + * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given + * engine-specific ctrl command expects. + */ +# define ENGINE_CTRL_GET_CMD_FLAGS 18 + +/* + * ENGINE implementations should start the numbering of their own control + * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). + */ +# define ENGINE_CMD_BASE 200 + +/* + * NB: These 2 nCipher "chil" control commands are deprecated, and their + * functionality is now available through ENGINE-specific control commands + * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 + * commands should be migrated to the more general command handling before + * these are removed. + */ + +/* Flags specific to the nCipher "chil" engine */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ + +/* + * If an ENGINE supports its own specific control commands and wishes the + * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on + * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN + * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() + * handler that supports the stated commands (ie. the "cmd_num" entries as + * described by the array). NB: The array must be ordered in increasing order + * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element + * has cmd_num set to zero and/or cmd_name set to NULL. + */ +typedef struct ENGINE_CMD_DEFN_st { + unsigned int cmd_num; /* The command number */ + const char *cmd_name; /* The command name itself */ + const char *cmd_desc; /* A short description of the command */ + unsigned int cmd_flags; /* The input the command expects */ +} ENGINE_CMD_DEFN; + +/* Generic function pointer */ +typedef int (*ENGINE_GEN_FUNC_PTR) (void); +/* Generic function pointer taking no arguments */ +typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); +/* Specific control function pointer */ +typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, + void (*f) (void)); +/* Generic load_key function pointer */ +typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, + UI_METHOD *ui_method, + void *callback_data); +typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, + STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **pkey, + STACK_OF(X509) **pother, + UI_METHOD *ui_method, + void *callback_data); +/*- + * These callback types are for an ENGINE's handler for cipher and digest logic. + * These handlers have these prototypes; + * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); + * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); + * Looking at how to implement these handlers in the case of cipher support, if + * the framework wants the EVP_CIPHER for 'nid', it will call; + * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) + * If the framework wants a list of supported 'nid's, it will call; + * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) + */ +/* + * Returns to a pointer to the array of supported cipher 'nid's. If the + * second parameter is non-NULL it is set to the size of the returned array. + */ +typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, + const int **, int); +typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, + int); +typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, + const int **, int); +typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, + const int **, int); +/* + * STRUCTURE functions ... all of these functions deal with pointers to + * ENGINE structures where the pointers have a "structural reference". This + * means that their reference is to allowed access to the structure but it + * does not imply that the structure is functional. To simply increment or + * decrement the structural reference count, use ENGINE_by_id and + * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next + * as it will automatically decrement the structural reference count of the + * "current" ENGINE and increment the structural reference count of the + * ENGINE it returns (unless it is NULL). + */ + +/* Get the first/last "ENGINE" type available. */ +ENGINE *ENGINE_get_first(void); +ENGINE *ENGINE_get_last(void); +/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ +ENGINE *ENGINE_get_next(ENGINE *e); +ENGINE *ENGINE_get_prev(ENGINE *e); +/* Add another "ENGINE" type into the array. */ +int ENGINE_add(ENGINE *e); +/* Remove an existing "ENGINE" type from the array. */ +int ENGINE_remove(ENGINE *e); +/* Retrieve an engine from the list by its unique "id" value. */ +ENGINE *ENGINE_by_id(const char *id); +/* Add all the built-in engines. */ +void ENGINE_load_openssl(void); +void ENGINE_load_dynamic(void); +# ifndef OPENSSL_NO_STATIC_ENGINE +void ENGINE_load_4758cca(void); +void ENGINE_load_aep(void); +void ENGINE_load_atalla(void); +void ENGINE_load_chil(void); +void ENGINE_load_cswift(void); +void ENGINE_load_nuron(void); +void ENGINE_load_sureware(void); +void ENGINE_load_ubsec(void); +void ENGINE_load_padlock(void); +void ENGINE_load_capi(void); +# ifndef OPENSSL_NO_GMP +void ENGINE_load_gmp(void); +# endif +# ifndef OPENSSL_NO_GOST +void ENGINE_load_gost(void); +# endif +# endif +void ENGINE_load_cryptodev(void); +void ENGINE_load_rdrand(void); +void ENGINE_load_builtin_engines(void); + +/* + * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation + * "registry" handling. + */ +unsigned int ENGINE_get_table_flags(void); +void ENGINE_set_table_flags(unsigned int flags); + +/*- Manage registration of ENGINEs per "table". For each type, there are 3 + * functions; + * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) + * ENGINE_unregister_***(e) - unregister the implementation from 'e' + * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list + * Cleanup is automatically registered from each table when required, so + * ENGINE_cleanup() will reverse any "register" operations. + */ + +int ENGINE_register_RSA(ENGINE *e); +void ENGINE_unregister_RSA(ENGINE *e); +void ENGINE_register_all_RSA(void); + +int ENGINE_register_DSA(ENGINE *e); +void ENGINE_unregister_DSA(ENGINE *e); +void ENGINE_register_all_DSA(void); + +int ENGINE_register_ECDH(ENGINE *e); +void ENGINE_unregister_ECDH(ENGINE *e); +void ENGINE_register_all_ECDH(void); + +int ENGINE_register_ECDSA(ENGINE *e); +void ENGINE_unregister_ECDSA(ENGINE *e); +void ENGINE_register_all_ECDSA(void); + +int ENGINE_register_DH(ENGINE *e); +void ENGINE_unregister_DH(ENGINE *e); +void ENGINE_register_all_DH(void); + +int ENGINE_register_RAND(ENGINE *e); +void ENGINE_unregister_RAND(ENGINE *e); +void ENGINE_register_all_RAND(void); + +int ENGINE_register_STORE(ENGINE *e); +void ENGINE_unregister_STORE(ENGINE *e); +void ENGINE_register_all_STORE(void); + +int ENGINE_register_ciphers(ENGINE *e); +void ENGINE_unregister_ciphers(ENGINE *e); +void ENGINE_register_all_ciphers(void); + +int ENGINE_register_digests(ENGINE *e); +void ENGINE_unregister_digests(ENGINE *e); +void ENGINE_register_all_digests(void); + +int ENGINE_register_pkey_meths(ENGINE *e); +void ENGINE_unregister_pkey_meths(ENGINE *e); +void ENGINE_register_all_pkey_meths(void); + +int ENGINE_register_pkey_asn1_meths(ENGINE *e); +void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +void ENGINE_register_all_pkey_asn1_meths(void); + +/* + * These functions register all support from the above categories. Note, use + * of these functions can result in static linkage of code your application + * may not need. If you only need a subset of functionality, consider using + * more selective initialisation. + */ +int ENGINE_register_complete(ENGINE *e); +int ENGINE_register_all_complete(void); + +/* + * Send parametrised control commands to the engine. The possibilities to + * send down an integer, a pointer to data or a function pointer are + * provided. Any of the parameters may or may not be NULL, depending on the + * command number. In actuality, this function only requires a structural + * (rather than functional) reference to an engine, but many control commands + * may require the engine be functional. The caller should be aware of trying + * commands that require an operational ENGINE, and only use functional + * references in such situations. + */ +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); + +/* + * This function tests if an ENGINE-specific command is usable as a + * "setting". Eg. in an application's config file that gets processed through + * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to + * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). + */ +int ENGINE_cmd_is_executable(ENGINE *e, int cmd); + +/* + * This function works like ENGINE_ctrl() with the exception of taking a + * command name instead of a command number, and can handle optional + * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation + * on how to use the cmd_name and cmd_optional. + */ +int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), int cmd_optional); + +/* + * This function passes a command-name and argument to an ENGINE. The + * cmd_name is converted to a command number and the control command is + * called using 'arg' as an argument (unless the ENGINE doesn't support such + * a command, in which case no control command is called). The command is + * checked for input flags, and if necessary the argument will be converted + * to a numeric value. If cmd_optional is non-zero, then if the ENGINE + * doesn't support the given cmd_name the return value will be success + * anyway. This function is intended for applications to use so that users + * (or config files) can supply engine-specific config data to the ENGINE at + * run-time to control behaviour of specific engines. As such, it shouldn't + * be used for calling ENGINE_ctrl() functions that return data, deal with + * binary data, or that are otherwise supposed to be used directly through + * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() + * operation in this function will be lost - the return value is interpreted + * as failure if the return value is zero, success otherwise, and this + * function returns a boolean value as a result. In other words, vendors of + * 'ENGINE'-enabled devices should write ENGINE implementations with + * parameterisations that work in this scheme, so that compliant ENGINE-based + * applications can work consistently with the same configuration for the + * same ENGINE-enabled devices, across applications. + */ +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional); + +/* + * These functions are useful for manufacturing new ENGINE structures. They + * don't address reference counting at all - one uses them to populate an + * ENGINE structure with personalised implementations of things prior to + * using it directly or adding it to the builtin ENGINE list in OpenSSL. + * These are also here so that the ENGINE structure doesn't have to be + * exposed and break binary compatibility! + */ +ENGINE *ENGINE_new(void); +int ENGINE_free(ENGINE *e); +int ENGINE_up_ref(ENGINE *e); +int ENGINE_set_id(ENGINE *e, const char *id); +int ENGINE_set_name(ENGINE *e, const char *name); +int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +int ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *ecdh_meth); +int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *ecdsa_meth); +int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +int ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *store_meth); +int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); +int ENGINE_set_load_privkey_function(ENGINE *e, + ENGINE_LOAD_KEY_PTR loadpriv_f); +int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, + ENGINE_SSL_CLIENT_CERT_PTR + loadssl_f); +int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); +int ENGINE_set_flags(ENGINE *e, int flags); +int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +/* These functions allow control over any per-structure ENGINE data. */ +int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +void *ENGINE_get_ex_data(const ENGINE *e, int idx); + +/* + * This function cleans up anything that needs it. Eg. the ENGINE_add() + * function automatically ensures the list cleanup function is registered to + * be called from ENGINE_cleanup(). Similarly, all ENGINE_register_*** + * functions ensure ENGINE_cleanup() will clean up after them. + */ +void ENGINE_cleanup(void); + +/* + * These return values from within the ENGINE structure. These can be useful + * with functional references as well as structural references - it depends + * which you obtained. Using the result for functional purposes if you only + * obtained a structural reference may be problematic! + */ +const char *ENGINE_get_id(const ENGINE *e); +const char *ENGINE_get_name(const ENGINE *e); +const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e); +const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e); +const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE + *e); +ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, + const char *str, + int len); +const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, + const char *str, + int len); +const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); +int ENGINE_get_flags(const ENGINE *e); + +/* + * FUNCTIONAL functions. These functions deal with ENGINE structures that + * have (or will) be initialised for use. Broadly speaking, the structural + * functions are useful for iterating the list of available engine types, + * creating new engine types, and other "list" operations. These functions + * actually deal with ENGINEs that are to be used. As such these functions + * can fail (if applicable) when particular engines are unavailable - eg. if + * a hardware accelerator is not attached or not functioning correctly. Each + * ENGINE has 2 reference counts; structural and functional. Every time a + * functional reference is obtained or released, a corresponding structural + * reference is automatically obtained or released too. + */ + +/* + * Initialise a engine type for use (or up its reference count if it's + * already in use). This will fail if the engine is not currently operational + * and cannot initialise. + */ +int ENGINE_init(ENGINE *e); +/* + * Free a functional reference to a engine type. This does not require a + * corresponding call to ENGINE_free as it also releases a structural + * reference. + */ +int ENGINE_finish(ENGINE *e); + +/* + * The following functions handle keys that are stored in some secondary + * location, handled by the engine. The storage may be on a card or + * whatever. + */ +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, + STACK_OF(X509_NAME) *ca_dn, X509 **pcert, + EVP_PKEY **ppkey, STACK_OF(X509) **pother, + UI_METHOD *ui_method, void *callback_data); + +/* + * This returns a pointer for the current ENGINE structure that is (by + * default) performing any RSA operations. The value returned is an + * incremented reference, so it should be free'd (ENGINE_finish) before it is + * discarded. + */ +ENGINE *ENGINE_get_default_RSA(void); +/* Same for the other "methods" */ +ENGINE *ENGINE_get_default_DSA(void); +ENGINE *ENGINE_get_default_ECDH(void); +ENGINE *ENGINE_get_default_ECDSA(void); +ENGINE *ENGINE_get_default_DH(void); +ENGINE *ENGINE_get_default_RAND(void); +/* + * These functions can be used to get a functional reference to perform + * ciphering or digesting corresponding to "nid". + */ +ENGINE *ENGINE_get_cipher_engine(int nid); +ENGINE *ENGINE_get_digest_engine(int nid); +ENGINE *ENGINE_get_pkey_meth_engine(int nid); +ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); + +/* + * This sets a new default ENGINE structure for performing RSA operations. If + * the result is non-zero (success) then the ENGINE structure will have had + * its reference count up'd so the caller should still free their own + * reference 'e'. + */ +int ENGINE_set_default_RSA(ENGINE *e); +int ENGINE_set_default_string(ENGINE *e, const char *def_list); +/* Same for the other "methods" */ +int ENGINE_set_default_DSA(ENGINE *e); +int ENGINE_set_default_ECDH(ENGINE *e); +int ENGINE_set_default_ECDSA(ENGINE *e); +int ENGINE_set_default_DH(ENGINE *e); +int ENGINE_set_default_RAND(ENGINE *e); +int ENGINE_set_default_ciphers(ENGINE *e); +int ENGINE_set_default_digests(ENGINE *e); +int ENGINE_set_default_pkey_meths(ENGINE *e); +int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); + +/* + * The combination "set" - the flags are bitwise "OR"d from the + * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" + * function, this function can result in unnecessary static linkage. If your + * application requires only specific functionality, consider using more + * selective functions. + */ +int ENGINE_set_default(ENGINE *e, unsigned int flags); + +void ENGINE_add_conf_module(void); + +/* Deprecated functions ... */ +/* int ENGINE_clear_defaults(void); */ + +/**************************/ +/* DYNAMIC ENGINE SUPPORT */ +/**************************/ + +/* Binary/behaviour compatibility levels */ +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00020000 +/* + * Binary versions older than this are too old for us (whether we're a loader + * or a loadee) + */ +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00020000 + +/* + * When compiling an ENGINE entirely as an external shared library, loadable + * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' + * structure type provides the calling application's (or library's) error + * functionality and memory management function pointers to the loaded + * library. These should be used/set in the loaded library code so that the + * loading application's 'state' will be used/changed in all operations. The + * 'static_state' pointer allows the loaded library to know if it shares the + * same static data as the calling application (or library), and thus whether + * these callbacks need to be set or not. + */ +typedef void *(*dyn_MEM_malloc_cb) (size_t); +typedef void *(*dyn_MEM_realloc_cb) (void *, size_t); +typedef void (*dyn_MEM_free_cb) (void *); +typedef struct st_dynamic_MEM_fns { + dyn_MEM_malloc_cb malloc_cb; + dyn_MEM_realloc_cb realloc_cb; + dyn_MEM_free_cb free_cb; +} dynamic_MEM_fns; +/* + * FIXME: Perhaps the memory and locking code (crypto.h) should declare and + * use these types so we (and any other dependant code) can simplify a bit?? + */ +typedef void (*dyn_lock_locking_cb) (int, int, const char *, int); +typedef int (*dyn_lock_add_lock_cb) (int *, int, int, const char *, int); +typedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb) (const char *, + int); +typedef void (*dyn_dynlock_lock_cb) (int, struct CRYPTO_dynlock_value *, + const char *, int); +typedef void (*dyn_dynlock_destroy_cb) (struct CRYPTO_dynlock_value *, + const char *, int); +typedef struct st_dynamic_LOCK_fns { + dyn_lock_locking_cb lock_locking_cb; + dyn_lock_add_lock_cb lock_add_lock_cb; + dyn_dynlock_create_cb dynlock_create_cb; + dyn_dynlock_lock_cb dynlock_lock_cb; + dyn_dynlock_destroy_cb dynlock_destroy_cb; +} dynamic_LOCK_fns; +/* The top-level structure */ +typedef struct st_dynamic_fns { + void *static_state; + const ERR_FNS *err_fns; + const CRYPTO_EX_DATA_IMPL *ex_data_fns; + dynamic_MEM_fns mem_fns; + dynamic_LOCK_fns lock_fns; +} dynamic_fns; + +/* + * The version checking function should be of this prototype. NB: The + * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading + * code. If this function returns zero, it indicates a (potential) version + * incompatibility and the loaded library doesn't believe it can proceed. + * Otherwise, the returned value is the (latest) version supported by the + * loading library. The loader may still decide that the loaded code's + * version is unsatisfactory and could veto the load. The function is + * expected to be implemented with the symbol name "v_check", and a default + * implementation can be fully instantiated with + * IMPLEMENT_DYNAMIC_CHECK_FN(). + */ +typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ + if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ + return 0; } + +/* + * This function is passed the ENGINE structure to initialise with its own + * function and command settings. It should not adjust the structural or + * functional reference counts. If this function returns zero, (a) the load + * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto + * the structure, and (c) the shared library will be unloaded. So + * implementations should do their own internal cleanup in failure + * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, + * represents the ENGINE id that the loader is looking for. If this is NULL, + * the shared library can choose to return failure or to initialise a + * 'default' ENGINE. If non-NULL, the shared library must initialise only an + * ENGINE matching the passed 'id'. The function is expected to be + * implemented with the symbol name "bind_engine". A standard implementation + * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter + * 'fn' is a callback function that populates the ENGINE structure and + * returns an int value (zero for failure). 'fn' should have prototype; + * [static] int fn(ENGINE *e, const char *id); + */ +typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, + const dynamic_fns *fns); +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ + if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ + if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \ + fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \ + return 0; \ + CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \ + CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \ + CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \ + CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \ + CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \ + if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \ + return 0; \ + if(!ERR_set_implementation(fns->err_fns)) return 0; \ + skip_cbs: \ + if(!fn(e,id)) return 0; \ + return 1; } + +/* + * If the loading application (or library) and the loaded ENGINE library + * share the same static data (eg. they're both dynamically linked to the + * same libcrypto.so) we need a way to avoid trying to set system callbacks - + * this would fail, and for the same reason that it's unnecessary to try. If + * the loaded ENGINE has (or gets from through the loader) its own copy of + * the libcrypto static data, we will need to set the callbacks. The easiest + * way to detect this is to have a function that returns a pointer to some + * static data and let the loading application and loaded ENGINE compare + * their respective values. + */ +void *ENGINE_get_static_state(void); + +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV) +void ENGINE_setup_bsd_cryptodev(void); +# endif + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ENGINE_strings(void); + +/* Error codes for the ENGINE functions. */ + +/* Function codes. */ +# define ENGINE_F_DYNAMIC_CTRL 180 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 +# define ENGINE_F_DYNAMIC_LOAD 182 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 +# define ENGINE_F_ENGINE_ADD 105 +# define ENGINE_F_ENGINE_BY_ID 106 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 +# define ENGINE_F_ENGINE_CTRL 142 +# define ENGINE_F_ENGINE_CTRL_CMD 178 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 +# define ENGINE_F_ENGINE_FINISH 107 +# define ENGINE_F_ENGINE_FREE_UTIL 108 +# define ENGINE_F_ENGINE_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# define ENGINE_F_ENGINE_GET_NEXT 115 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 +# define ENGINE_F_ENGINE_GET_PKEY_METH 192 +# define ENGINE_F_ENGINE_GET_PREV 116 +# define ENGINE_F_ENGINE_INIT 119 +# define ENGINE_F_ENGINE_LIST_ADD 120 +# define ENGINE_F_ENGINE_LIST_REMOVE 121 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 +# define ENGINE_F_ENGINE_NEW 122 +# define ENGINE_F_ENGINE_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126 +# define ENGINE_F_ENGINE_SET_ID 129 +# define ENGINE_F_ENGINE_SET_NAME 130 +# define ENGINE_F_ENGINE_TABLE_REGISTER 184 +# define ENGINE_F_ENGINE_UNLOAD_KEY 152 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 +# define ENGINE_F_ENGINE_UP_REF 190 +# define ENGINE_F_INT_CTRL_HELPER 172 +# define ENGINE_F_INT_ENGINE_CONFIGURE 188 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 +# define ENGINE_F_LOG_MESSAGE 141 + +/* Reason codes. */ +# define ENGINE_R_ALREADY_LOADED 100 +# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 +# define ENGINE_R_CMD_NOT_EXECUTABLE 134 +# define ENGINE_R_COMMAND_TAKES_INPUT 135 +# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 +# define ENGINE_R_CONFLICTING_ENGINE_ID 103 +# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 +# define ENGINE_R_DH_NOT_IMPLEMENTED 139 +# define ENGINE_R_DSA_NOT_IMPLEMENTED 140 +# define ENGINE_R_DSO_FAILURE 104 +# define ENGINE_R_DSO_NOT_FOUND 132 +# define ENGINE_R_ENGINES_SECTION_ERROR 148 +# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 +# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 +# define ENGINE_R_ENGINE_SECTION_ERROR 149 +# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 +# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 +# define ENGINE_R_FINISH_FAILED 106 +# define ENGINE_R_GET_HANDLE_FAILED 107 +# define ENGINE_R_ID_OR_NAME_MISSING 108 +# define ENGINE_R_INIT_FAILED 109 +# define ENGINE_R_INTERNAL_LIST_ERROR 110 +# define ENGINE_R_INVALID_ARGUMENT 143 +# define ENGINE_R_INVALID_CMD_NAME 137 +# define ENGINE_R_INVALID_CMD_NUMBER 138 +# define ENGINE_R_INVALID_INIT_VALUE 151 +# define ENGINE_R_INVALID_STRING 150 +# define ENGINE_R_NOT_INITIALISED 117 +# define ENGINE_R_NOT_LOADED 112 +# define ENGINE_R_NO_CONTROL_FUNCTION 120 +# define ENGINE_R_NO_INDEX 144 +# define ENGINE_R_NO_LOAD_FUNCTION 125 +# define ENGINE_R_NO_REFERENCE 130 +# define ENGINE_R_NO_SUCH_ENGINE 116 +# define ENGINE_R_NO_UNLOAD_FUNCTION 126 +# define ENGINE_R_PROVIDE_PARAMETERS 113 +# define ENGINE_R_RSA_NOT_IMPLEMENTED 141 +# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 +# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 +# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 +# define ENGINE_R_VERSION_INCOMPATIBILITY 145 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/err.h b/src/components/openssl/err.h new file mode 100644 index 0000000..5792b57 --- /dev/null +++ b/src/components/openssl/err.h @@ -0,0 +1,389 @@ +/* crypto/err/err.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 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_ERR_H +# define HEADER_ERR_H + +# include + +# ifndef OPENSSL_NO_FP_API +# include +# include +# endif + +# include +# ifndef OPENSSL_NO_BIO +# include +# endif +# ifndef OPENSSL_NO_LHASH +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_ERR +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) +# else +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# endif + +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# define ERR_FLAG_MARK 0x01 + +# define ERR_NUM_ERRORS 16 +typedef struct err_state_st { + CRYPTO_THREADID tid; + int err_flags[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + const char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + int top, bottom; +} ERR_STATE; + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +# define ERR_LIB_JPAKE 49 + +# define ERR_LIB_USER 128 + +# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) +# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) +# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) +# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) +# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) +# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) +# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) +# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) +# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) +# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) +# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) +# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) +# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) +# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) +# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) +# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) +# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) +# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) +# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) +# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) +# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) +# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) +# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) +# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) +# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) +# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) +# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) +# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) +# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) +# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) +# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) +# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) +# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) + +/* + * Borland C seems too stupid to be able to shift and do longs in the + * pre-processor :-( + */ +# define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ + ((((unsigned long)f)&0xfffL)*0x1000)| \ + ((((unsigned long)r)&0xfffL))) +# define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) +# define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) +# define ERR_GET_REASON(l) (int)((l)&0xfffL) +# define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) + +/* OS functions */ +# define SYS_F_FOPEN 1 +# define SYS_F_CONNECT 2 +# define SYS_F_GETSERVBYNAME 3 +# define SYS_F_SOCKET 4 +# define SYS_F_IOCTLSOCKET 5 +# define SYS_F_BIND 6 +# define SYS_F_LISTEN 7 +# define SYS_F_ACCEPT 8 +# define SYS_F_WSASTARTUP 9/* Winsock stuff */ +# define SYS_F_OPENDIR 10 +# define SYS_F_FREAD 11 + +/* reasons */ +# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ +# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ +# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ +# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ +# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ +# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ +# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ +# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ +# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ +# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ +# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ +# define ERR_R_CONF_LIB ERR_LIB_CONF/* 14 */ +# define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO/* 15 */ +# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ +# define ERR_R_SSL_LIB ERR_LIB_SSL/* 20 */ +# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ +# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ +# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ +# define ERR_R_PKCS12_LIB ERR_LIB_PKCS12/* 35 */ +# define ERR_R_RAND_LIB ERR_LIB_RAND/* 36 */ +# define ERR_R_DSO_LIB ERR_LIB_DSO/* 37 */ +# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_OCSP_LIB ERR_LIB_OCSP/* 39 */ +# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ +# define ERR_R_COMP_LIB ERR_LIB_COMP/* 41 */ +# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ +# define ERR_R_ECDH_LIB ERR_LIB_ECDH/* 43 */ +# define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */ +# define ERR_R_TS_LIB ERR_LIB_TS/* 45 */ + +# define ERR_R_NESTED_ASN1_ERROR 58 +# define ERR_R_BAD_ASN1_OBJECT_HEADER 59 +# define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 +# define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 +# define ERR_R_ASN1_LENGTH_MISMATCH 62 +# define ERR_R_MISSING_ASN1_EOS 63 + +/* fatal error */ +# define ERR_R_FATAL 64 +# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) +# define ERR_R_DISABLED (5|ERR_R_FATAL) + +/* + * 99 is the maximum possible ERR_R_... code, higher values are reserved for + * the individual libraries + */ + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +void ERR_put_error(int lib, int func, int reason, const char *file, int line); +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_line(const char **file, int *line); +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +void ERR_clear_error(void); +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +const char *ERR_func_error_string(unsigned long e); +const char *ERR_reason_error_string(unsigned long e); +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_FP_API +void ERR_print_errors_fp(FILE *fp); +# endif +# ifndef OPENSSL_NO_BIO +void ERR_print_errors(BIO *bp); +# endif +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +void ERR_load_strings(int lib, ERR_STRING_DATA str[]); +void ERR_unload_strings(int lib, ERR_STRING_DATA str[]); +void ERR_load_ERR_strings(void); +void ERR_load_crypto_strings(void); +void ERR_free_strings(void); + +void ERR_remove_thread_state(const CRYPTO_THREADID *tid); +# ifndef OPENSSL_NO_DEPRECATED +void ERR_remove_state(unsigned long pid); /* if zero we look it up */ +# endif +ERR_STATE *ERR_get_state(void); + +# ifndef OPENSSL_NO_LHASH +LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); +LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); +void ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash); +# endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); + +/* Already defined in ossl_typ.h */ +/* typedef struct st_ERR_FNS ERR_FNS; */ +/* + * An application can use this function and provide the return value to + * loaded modules that should use the application's ERR state/functionality + */ +const ERR_FNS *ERR_get_implementation(void); +/* + * A loaded module should call this function prior to any ERR operations + * using the application's "ERR_FNS". + */ +int ERR_set_implementation(const ERR_FNS *fns); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/evp.h b/src/components/openssl/evp.h new file mode 100644 index 0000000..3c6351b --- /dev/null +++ b/src/components/openssl/evp.h @@ -0,0 +1,1536 @@ +/* crypto/evp/evp.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ENVELOPE_H +# define HEADER_ENVELOPE_H + +# ifdef OPENSSL_ALGORITHM_DEFINES +# include +# else +# define OPENSSL_ALGORITHM_DEFINES +# include +# undef OPENSSL_ALGORITHM_DEFINES +# endif + +# include + +# include + +# ifndef OPENSSL_NO_BIO +# include +# endif + +/*- +#define EVP_RC2_KEY_SIZE 16 +#define EVP_RC4_KEY_SIZE 16 +#define EVP_BLOWFISH_KEY_SIZE 16 +#define EVP_CAST5_KEY_SIZE 16 +#define EVP_RC5_32_12_16_KEY_SIZE 16 +*/ +# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ +# define EVP_MAX_KEY_LENGTH 64 +# define EVP_MAX_IV_LENGTH 16 +# define EVP_MAX_BLOCK_LENGTH 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include + +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_DSA NID_dsa +# define EVP_PKEY_DSA1 NID_dsa_2 +# define EVP_PKEY_DSA2 NID_dsaWithSHA +# define EVP_PKEY_DSA3 NID_dsaWithSHA1 +# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +# define EVP_PKEY_DH NID_dhKeyAgreement +# define EVP_PKEY_DHX NID_dhpublicnumber +# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Type needs to be a bit field Sub-type needs to be for variations on the + * method, as in, can it do arbitrary encryption.... + */ +struct evp_pkey_st { + int type; + int save_type; + int references; + const EVP_PKEY_ASN1_METHOD *ameth; + ENGINE *engine; + union { + char *ptr; +# ifndef OPENSSL_NO_RSA + struct rsa_st *rsa; /* RSA */ +# endif +# ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +# endif +# ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +# endif +# ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ +# endif + } pkey; + int save_parameters; + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ +} /* EVP_PKEY */ ; + +# define EVP_PKEY_MO_SIGN 0x0001 +# define EVP_PKEY_MO_VERIFY 0x0002 +# define EVP_PKEY_MO_ENCRYPT 0x0004 +# define EVP_PKEY_MO_DECRYPT 0x0008 + +# ifndef EVP_MD +struct env_md_st { + int type; + int pkey_type; + int md_size; + unsigned long flags; + int (*init) (EVP_MD_CTX *ctx); + int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); + int (*final) (EVP_MD_CTX *ctx, unsigned char *md); + int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); + int (*cleanup) (EVP_MD_CTX *ctx); + /* FIXME: prototype these some day */ + int (*sign) (int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, void *key); + int (*verify) (int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, + void *key); + int required_pkey_type[5]; /* EVP_PKEY_xxx */ + int block_size; + int ctx_size; /* how big does the ctx->md_data need to be */ + /* control function */ + int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); +} /* EVP_MD */ ; + +typedef int evp_sign_method(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, void *key); +typedef int evp_verify_method(int type, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, void *key); + +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* + * digest is a "clone" digest used + * which is a copy of an existing + * one for a specific public key type. + * EVP_dss1() etc + */ +# define EVP_MD_FLAG_PKEY_DIGEST 0x0002 + +/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ + +# define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE 0x0004 + +/* DigestAlgorithmIdentifier flags... */ + +# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 + +/* NULL or absent parameter accepted. Use NULL */ + +# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 + +/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ + +# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 + +/* Custom handling via ctrl */ + +# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 + +/* Note if suitable for use in FIPS mode */ +# define EVP_MD_FLAG_FIPS 0x0400 + +/* Digest ctrls */ + +# define EVP_MD_CTRL_DIGALGID 0x1 +# define EVP_MD_CTRL_MICALG 0x2 + +/* Minimum Algorithm specific ctrl value */ + +# define EVP_MD_CTRL_ALG_CTRL 0x1000 + +# define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ + (evp_verify_method *)DSA_verify, \ + {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ + EVP_PKEY_DSA4,0} +# else +# define EVP_PKEY_DSA_method EVP_PKEY_NULL_method +# endif + +# ifndef OPENSSL_NO_ECDSA +# define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \ + (evp_verify_method *)ECDSA_verify, \ + {EVP_PKEY_EC,0,0,0} +# else +# define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method +# endif + +# ifndef OPENSSL_NO_RSA +# define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ + (evp_verify_method *)RSA_verify, \ + {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} +# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ + (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ + (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ + {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} +# else +# define EVP_PKEY_RSA_method EVP_PKEY_NULL_method +# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method +# endif + +# endif /* !EVP_MD */ + +struct env_md_ctx_st { + const EVP_MD *digest; + ENGINE *engine; /* functional reference if 'digest' is + * ENGINE-provided */ + unsigned long flags; + void *md_data; + /* Public key context for sign/verify */ + EVP_PKEY_CTX *pctx; + /* Update function: usually copied from EVP_MD */ + int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); +} /* EVP_MD_CTX */ ; + +/* values for EVP_MD_CTX flags */ + +# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be + * called once only */ +# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been + * cleaned */ +# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data + * in EVP_MD_CTX_cleanup */ +/* + * FIPS and pad options are ignored in 1.0.0, definitions are here so we + * don't accidentally reuse the values for other purposes. + */ + +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS + * digest in FIPS mode */ + +/* + * The following PAD options are also currently ignored in 1.0.0, digest + * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() + * instead. + */ +# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ +# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ +# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ +# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ + +# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ + +struct evp_cipher_st { + int nid; + int block_size; + /* Default value for variable length ciphers */ + int key_len; + int iv_len; + /* Various flags */ + unsigned long flags; + /* init key */ + int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc); + /* encrypt/decrypt data */ + int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t inl); + /* cleanup ctx */ + int (*cleanup) (EVP_CIPHER_CTX *); + /* how big ctx->cipher_data needs to be */ + int ctx_size; + /* Populate a ASN1_TYPE with parameters */ + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); + /* Get parameters from a ASN1_TYPE */ + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); + /* Miscellaneous operations */ + int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); + /* Application data */ + void *app_data; +} /* EVP_CIPHER */ ; + +/* Values for cipher flags */ + +/* Modes for ciphers */ + +# define EVP_CIPH_STREAM_CIPHER 0x0 +# define EVP_CIPH_ECB_MODE 0x1 +# define EVP_CIPH_CBC_MODE 0x2 +# define EVP_CIPH_CFB_MODE 0x3 +# define EVP_CIPH_OFB_MODE 0x4 +# define EVP_CIPH_CTR_MODE 0x5 +# define EVP_CIPH_GCM_MODE 0x6 +# define EVP_CIPH_CCM_MODE 0x7 +# define EVP_CIPH_XTS_MODE 0x10001 +# define EVP_CIPH_WRAP_MODE 0x10002 +# define EVP_CIPH_MODE 0xF0007 +/* Set if variable length cipher */ +# define EVP_CIPH_VARIABLE_LENGTH 0x8 +/* Set if the iv handling should be done by the cipher itself */ +# define EVP_CIPH_CUSTOM_IV 0x10 +/* Set if the cipher's init() function should be called if key is NULL */ +# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 +/* Call ctrl() to init cipher parameters */ +# define EVP_CIPH_CTRL_INIT 0x40 +/* Don't use standard key length function */ +# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 +/* Don't use standard block padding */ +# define EVP_CIPH_NO_PADDING 0x100 +/* cipher handles random key generation */ +# define EVP_CIPH_RAND_KEY 0x200 +/* cipher has its own additional copying logic */ +# define EVP_CIPH_CUSTOM_COPY 0x400 +/* Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Buffer length in bits not bytes: CFB1 mode only */ +# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 +/* Note if suitable for use in FIPS mode */ +# define EVP_CIPH_FLAG_FIPS 0x4000 +/* Allow non FIPS cipher in FIPS mode */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* + * Cipher handles any and all padding logic as well as finalisation. + */ +# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 +# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 +# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 + +/* + * Cipher context flag to indicate we can handle wrap mode: if allowed in + * older applications it could overflow buffers. + */ + +# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 + +/* ctrl() values */ + +# define EVP_CTRL_INIT 0x0 +# define EVP_CTRL_SET_KEY_LENGTH 0x1 +# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 +# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 +# define EVP_CTRL_GET_RC5_ROUNDS 0x4 +# define EVP_CTRL_SET_RC5_ROUNDS 0x5 +# define EVP_CTRL_RAND_KEY 0x6 +# define EVP_CTRL_PBE_PRF_NID 0x7 +# define EVP_CTRL_COPY 0x8 +# define EVP_CTRL_GCM_SET_IVLEN 0x9 +# define EVP_CTRL_GCM_GET_TAG 0x10 +# define EVP_CTRL_GCM_SET_TAG 0x11 +# define EVP_CTRL_GCM_SET_IV_FIXED 0x12 +# define EVP_CTRL_GCM_IV_GEN 0x13 +# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_GCM_SET_IVLEN +# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_GCM_GET_TAG +# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_GCM_SET_TAG +# define EVP_CTRL_CCM_SET_L 0x14 +# define EVP_CTRL_CCM_SET_MSGLEN 0x15 +/* + * AEAD cipher deduces payload length and returns number of bytes required to + * store MAC and eventual padding. Subsequent call to EVP_Cipher even + * appends/verifies MAC. + */ +# define EVP_CTRL_AEAD_TLS1_AAD 0x16 +/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ +# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 +/* Set the GCM invocation field, decrypt only */ +# define EVP_CTRL_GCM_SET_IV_INV 0x18 + +# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 +# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a +# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b +# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c + +/* RFC 5246 defines additional data to be 13 bytes in length */ +# define EVP_AEAD_TLS1_AAD_LEN 13 + +typedef struct { + unsigned char *out; + const unsigned char *inp; + size_t len; + unsigned int interleave; +} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; + +/* GCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_GCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 +/* Length of tag for TLS */ +# define EVP_GCM_TLS_TAG_LEN 16 + +typedef struct evp_cipher_info_st { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; +} EVP_CIPHER_INFO; + +struct evp_cipher_ctx_st { + const EVP_CIPHER *cipher; + ENGINE *engine; /* functional reference if 'cipher' is + * ENGINE-provided */ + int encrypt; /* encrypt or decrypt */ + int buf_len; /* number we have left */ + unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ + unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ + unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ + int num; /* used by cfb/ofb/ctr mode */ + void *app_data; /* application stuff */ + int key_len; /* May change for variable length cipher */ + unsigned long flags; /* Various flags */ + void *cipher_data; /* per EVP data */ + int final_used; + int block_mask; + unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ +} /* EVP_CIPHER_CTX */ ; + +typedef struct evp_Encode_Ctx_st { + /* number saved in a partial encode/decode */ + int num; + /* + * The length is either the output line length (in input bytes) or the + * shortest input line length that is ok. Once decoding begins, the + * length is adjusted up each time a longer line is decoded + */ + int length; + /* data to encode */ + unsigned char enc_data[80]; + /* number read on current line */ + int line_num; + int expect_nl; +} EVP_ENCODE_CTX; + +/* Password based encryption function */ +typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de); + +# ifndef OPENSSL_NO_RSA +# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ + (char *)(rsa)) +# endif + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ + (char *)(dsa)) +# endif + +# ifndef OPENSSL_NO_DH +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ + (char *)(dh)) +# endif + +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ + (char *)(eckey)) +# endif + +/* Add some extra combinations */ +# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) +# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) +# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) +# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) + +int EVP_MD_type(const EVP_MD *md); +# define EVP_MD_nid(e) EVP_MD_type(e) +# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) +int EVP_MD_pkey_type(const EVP_MD *md); +int EVP_MD_size(const EVP_MD *md); +int EVP_MD_block_size(const EVP_MD *md); +unsigned long EVP_MD_flags(const EVP_MD *md); + +const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) +# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) +# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) + +int EVP_CIPHER_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) +int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); +int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); +unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) + +const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); +void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); +# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) + +# define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) +# define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) + +# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_SignInit(a,b) EVP_DigestInit(a,b) +# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) +# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) +# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) +# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) + +# ifdef CONST_STRICT +void BIO_set_md(BIO *, const EVP_MD *md); +# else +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) +# endif +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) +# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) + +int EVP_Cipher(EVP_CIPHER_CTX *c, + unsigned char *out, const unsigned char *in, unsigned int inl); + +# define EVP_add_cipher_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_add_digest_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_delete_cipher_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); +# define EVP_delete_digest_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); + +void EVP_MD_CTX_init(EVP_MD_CTX *ctx); +int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx); +EVP_MD_CTX *EVP_MD_CTX_create(void); +void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); +int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); +void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); +void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); +int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); +int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); +int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); +int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, const EVP_MD *type, + ENGINE *impl); + +int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); +int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); + +int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); +int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, + const char *prompt, int verify); +void EVP_set_pw_prompt(const char *prompt); +char *EVP_get_pw_prompt(void); + +int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, + const unsigned char *salt, const unsigned char *data, + int datal, int count, unsigned char *key, + unsigned char *iv); + +void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); +void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); +int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); + +int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + ENGINE *impl, const unsigned char *key, + const unsigned char *iv); +int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + ENGINE *impl, const unsigned char *key, + const unsigned char *iv); +int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); + +int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc); +int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + ENGINE *impl, const unsigned char *key, + const unsigned char *iv, int enc); +int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); + +int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey); + +int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); + +int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignFinal(EVP_MD_CTX *ctx, + unsigned char *sigret, size_t *siglen); + +int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, + const unsigned char *sig, size_t siglen); + +int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + const unsigned char *ek, int ekl, const unsigned char *iv, + EVP_PKEY *priv); +int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); +int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned + char *out, int *outl); +int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); +int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a); +int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); +int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); +int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); +int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); + +# ifndef OPENSSL_NO_BIO +BIO_METHOD *BIO_f_md(void); +BIO_METHOD *BIO_f_base64(void); +BIO_METHOD *BIO_f_cipher(void); +BIO_METHOD *BIO_f_reliable(void); +void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, + const unsigned char *i, int enc); +# endif + +const EVP_MD *EVP_md_null(void); +# ifndef OPENSSL_NO_MD2 +const EVP_MD *EVP_md2(void); +# endif +# ifndef OPENSSL_NO_MD4 +const EVP_MD *EVP_md4(void); +# endif +# ifndef OPENSSL_NO_MD5 +const EVP_MD *EVP_md5(void); +# endif +# ifndef OPENSSL_NO_SHA +const EVP_MD *EVP_sha(void); +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_dss(void); +const EVP_MD *EVP_dss1(void); +const EVP_MD *EVP_ecdsa(void); +# endif +# ifndef OPENSSL_NO_SHA256 +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +# endif +# ifndef OPENSSL_NO_SHA512 +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +# endif +# ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +# endif +# ifndef OPENSSL_NO_RIPEMD +const EVP_MD *EVP_ripemd160(void); +# endif +# ifndef OPENSSL_NO_WHIRLPOOL +const EVP_MD *EVP_whirlpool(void); +# endif +const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ +# ifndef OPENSSL_NO_DES +const EVP_CIPHER *EVP_des_ecb(void); +const EVP_CIPHER *EVP_des_ede(void); +const EVP_CIPHER *EVP_des_ede3(void); +const EVP_CIPHER *EVP_des_ede_ecb(void); +const EVP_CIPHER *EVP_des_ede3_ecb(void); +const EVP_CIPHER *EVP_des_cfb64(void); +# define EVP_des_cfb EVP_des_cfb64 +const EVP_CIPHER *EVP_des_cfb1(void); +const EVP_CIPHER *EVP_des_cfb8(void); +const EVP_CIPHER *EVP_des_ede_cfb64(void); +# define EVP_des_ede_cfb EVP_des_ede_cfb64 +# if 0 +const EVP_CIPHER *EVP_des_ede_cfb1(void); +const EVP_CIPHER *EVP_des_ede_cfb8(void); +# endif +const EVP_CIPHER *EVP_des_ede3_cfb64(void); +# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb1(void); +const EVP_CIPHER *EVP_des_ede3_cfb8(void); +const EVP_CIPHER *EVP_des_ofb(void); +const EVP_CIPHER *EVP_des_ede_ofb(void); +const EVP_CIPHER *EVP_des_ede3_ofb(void); +const EVP_CIPHER *EVP_des_cbc(void); +const EVP_CIPHER *EVP_des_ede_cbc(void); +const EVP_CIPHER *EVP_des_ede3_cbc(void); +const EVP_CIPHER *EVP_desx_cbc(void); +const EVP_CIPHER *EVP_des_ede3_wrap(void); +/* + * This should now be supported through the dev_crypto ENGINE. But also, why + * are rc4 and md5 declarations made here inside a "NO_DES" precompiler + * branch? + */ +# if 0 +# ifdef OPENSSL_OPENBSD_DEV_CRYPTO +const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void); +const EVP_CIPHER *EVP_dev_crypto_rc4(void); +const EVP_MD *EVP_dev_crypto_md5(void); +# endif +# endif +# endif +# ifndef OPENSSL_NO_RC4 +const EVP_CIPHER *EVP_rc4(void); +const EVP_CIPHER *EVP_rc4_40(void); +# ifndef OPENSSL_NO_MD5 +const EVP_CIPHER *EVP_rc4_hmac_md5(void); +# endif +# endif +# ifndef OPENSSL_NO_IDEA +const EVP_CIPHER *EVP_idea_ecb(void); +const EVP_CIPHER *EVP_idea_cfb64(void); +# define EVP_idea_cfb EVP_idea_cfb64 +const EVP_CIPHER *EVP_idea_ofb(void); +const EVP_CIPHER *EVP_idea_cbc(void); +# endif +# ifndef OPENSSL_NO_RC2 +const EVP_CIPHER *EVP_rc2_ecb(void); +const EVP_CIPHER *EVP_rc2_cbc(void); +const EVP_CIPHER *EVP_rc2_40_cbc(void); +const EVP_CIPHER *EVP_rc2_64_cbc(void); +const EVP_CIPHER *EVP_rc2_cfb64(void); +# define EVP_rc2_cfb EVP_rc2_cfb64 +const EVP_CIPHER *EVP_rc2_ofb(void); +# endif +# ifndef OPENSSL_NO_BF +const EVP_CIPHER *EVP_bf_ecb(void); +const EVP_CIPHER *EVP_bf_cbc(void); +const EVP_CIPHER *EVP_bf_cfb64(void); +# define EVP_bf_cfb EVP_bf_cfb64 +const EVP_CIPHER *EVP_bf_ofb(void); +# endif +# ifndef OPENSSL_NO_CAST +const EVP_CIPHER *EVP_cast5_ecb(void); +const EVP_CIPHER *EVP_cast5_cbc(void); +const EVP_CIPHER *EVP_cast5_cfb64(void); +# define EVP_cast5_cfb EVP_cast5_cfb64 +const EVP_CIPHER *EVP_cast5_ofb(void); +# endif +# ifndef OPENSSL_NO_RC5 +const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); +const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); +const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); +# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 +const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); +# endif +# ifndef OPENSSL_NO_AES +const EVP_CIPHER *EVP_aes_128_ecb(void); +const EVP_CIPHER *EVP_aes_128_cbc(void); +const EVP_CIPHER *EVP_aes_128_cfb1(void); +const EVP_CIPHER *EVP_aes_128_cfb8(void); +const EVP_CIPHER *EVP_aes_128_cfb128(void); +# define EVP_aes_128_cfb EVP_aes_128_cfb128 +const EVP_CIPHER *EVP_aes_128_ofb(void); +const EVP_CIPHER *EVP_aes_128_ctr(void); +const EVP_CIPHER *EVP_aes_128_ccm(void); +const EVP_CIPHER *EVP_aes_128_gcm(void); +const EVP_CIPHER *EVP_aes_128_xts(void); +const EVP_CIPHER *EVP_aes_128_wrap(void); +const EVP_CIPHER *EVP_aes_192_ecb(void); +const EVP_CIPHER *EVP_aes_192_cbc(void); +const EVP_CIPHER *EVP_aes_192_cfb1(void); +const EVP_CIPHER *EVP_aes_192_cfb8(void); +const EVP_CIPHER *EVP_aes_192_cfb128(void); +# define EVP_aes_192_cfb EVP_aes_192_cfb128 +const EVP_CIPHER *EVP_aes_192_ofb(void); +const EVP_CIPHER *EVP_aes_192_ctr(void); +const EVP_CIPHER *EVP_aes_192_ccm(void); +const EVP_CIPHER *EVP_aes_192_gcm(void); +const EVP_CIPHER *EVP_aes_192_wrap(void); +const EVP_CIPHER *EVP_aes_256_ecb(void); +const EVP_CIPHER *EVP_aes_256_cbc(void); +const EVP_CIPHER *EVP_aes_256_cfb1(void); +const EVP_CIPHER *EVP_aes_256_cfb8(void); +const EVP_CIPHER *EVP_aes_256_cfb128(void); +# define EVP_aes_256_cfb EVP_aes_256_cfb128 +const EVP_CIPHER *EVP_aes_256_ofb(void); +const EVP_CIPHER *EVP_aes_256_ctr(void); +const EVP_CIPHER *EVP_aes_256_ccm(void); +const EVP_CIPHER *EVP_aes_256_gcm(void); +const EVP_CIPHER *EVP_aes_256_xts(void); +const EVP_CIPHER *EVP_aes_256_wrap(void); +# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); +# endif +# ifndef OPENSSL_NO_SHA256 +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# endif +# endif +# ifndef OPENSSL_NO_CAMELLIA +const EVP_CIPHER *EVP_camellia_128_ecb(void); +const EVP_CIPHER *EVP_camellia_128_cbc(void); +const EVP_CIPHER *EVP_camellia_128_cfb1(void); +const EVP_CIPHER *EVP_camellia_128_cfb8(void); +const EVP_CIPHER *EVP_camellia_128_cfb128(void); +# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 +const EVP_CIPHER *EVP_camellia_128_ofb(void); +const EVP_CIPHER *EVP_camellia_192_ecb(void); +const EVP_CIPHER *EVP_camellia_192_cbc(void); +const EVP_CIPHER *EVP_camellia_192_cfb1(void); +const EVP_CIPHER *EVP_camellia_192_cfb8(void); +const EVP_CIPHER *EVP_camellia_192_cfb128(void); +# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 +const EVP_CIPHER *EVP_camellia_192_ofb(void); +const EVP_CIPHER *EVP_camellia_256_ecb(void); +const EVP_CIPHER *EVP_camellia_256_cbc(void); +const EVP_CIPHER *EVP_camellia_256_cfb1(void); +const EVP_CIPHER *EVP_camellia_256_cfb8(void); +const EVP_CIPHER *EVP_camellia_256_cfb128(void); +# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 +const EVP_CIPHER *EVP_camellia_256_ofb(void); +# endif + +# ifndef OPENSSL_NO_SEED +const EVP_CIPHER *EVP_seed_ecb(void); +const EVP_CIPHER *EVP_seed_cbc(void); +const EVP_CIPHER *EVP_seed_cfb128(void); +# define EVP_seed_cfb EVP_seed_cfb128 +const EVP_CIPHER *EVP_seed_ofb(void); +# endif + +void OPENSSL_add_all_algorithms_noconf(void); +void OPENSSL_add_all_algorithms_conf(void); + +# ifdef OPENSSL_LOAD_CONF +# define OpenSSL_add_all_algorithms() \ + OPENSSL_add_all_algorithms_conf() +# else +# define OpenSSL_add_all_algorithms() \ + OPENSSL_add_all_algorithms_noconf() +# endif + +void OpenSSL_add_all_ciphers(void); +void OpenSSL_add_all_digests(void); +# define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms() +# define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers() +# define SSLeay_add_all_digests() OpenSSL_add_all_digests() + +int EVP_add_cipher(const EVP_CIPHER *cipher); +int EVP_add_digest(const EVP_MD *digest); + +const EVP_CIPHER *EVP_get_cipherbyname(const char *name); +const EVP_MD *EVP_get_digestbyname(const char *name); +void EVP_cleanup(void); + +void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_CIPHER_do_all_sorted(void (*fn) + (const EVP_CIPHER *ciph, const char *from, + const char *to, void *x), void *arg); + +void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_MD_do_all_sorted(void (*fn) + (const EVP_MD *ciph, const char *from, + const char *to, void *x), void *arg); + +int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, int enc_key_len, + EVP_PKEY *private_key); +int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, int key_len, + EVP_PKEY *pub_key); +int EVP_PKEY_type(int type); +int EVP_PKEY_id(const EVP_PKEY *pkey); +int EVP_PKEY_base_id(const EVP_PKEY *pkey); +int EVP_PKEY_bits(EVP_PKEY *pkey); +int EVP_PKEY_size(EVP_PKEY *pkey); +int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); +int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); +int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +void *EVP_PKEY_get0(EVP_PKEY *pkey); + +# ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DSA +struct dsa_st; +int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); +struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DH +struct dh_st; +int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_EC +struct ec_key_st; +int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif + +EVP_PKEY *EVP_PKEY_new(void); +void EVP_PKEY_free(EVP_PKEY *pkey); + +EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); + +int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); +int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); +int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); + +int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); + +int EVP_CIPHER_type(const EVP_CIPHER *ctx); + +/* calls methods */ +int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* These are used by EVP_CIPHER methods */ +int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* PKCS5 password based encryption */ +int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); +int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + int keylen, unsigned char *out); +int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, unsigned char *out); +int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); + +void PKCS5_PBE_add(void); + +int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); + +/* PBE type */ + +/* Can appear as the outermost AlgorithmIdentifier */ +# define EVP_PBE_TYPE_OUTER 0x0 +/* Is an PRF type OID */ +# define EVP_PBE_TYPE_PRF 0x1 + +int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, + int md_nid, EVP_PBE_KEYGEN *keygen); +int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, + EVP_PBE_KEYGEN *keygen); +int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen); +void EVP_PBE_cleanup(void); + +# define ASN1_PKEY_ALIAS 0x1 +# define ASN1_PKEY_DYNAMIC 0x2 +# define ASN1_PKEY_SIGPARAM_NULL 0x4 + +# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 +# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 +# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 +# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 +# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 +# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 + +int EVP_PKEY_asn1_get_count(void); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, + const char *str, int len); +int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +int EVP_PKEY_asn1_add_alias(int to, int from); +int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, + int *ppkey_flags, const char **pinfo, + const char **ppem_str, + const EVP_PKEY_ASN1_METHOD *ameth); + +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(EVP_PKEY *pkey); +EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, + const char *pem_str, + const char *info); +void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, + const EVP_PKEY_ASN1_METHOD *src); +void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, + int (*pub_decode) (EVP_PKEY *pk, + X509_PUBKEY *pub), + int (*pub_encode) (X509_PUBKEY *pub, + const EVP_PKEY *pk), + int (*pub_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*pub_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx), + int (*pkey_size) (const EVP_PKEY *pk), + int (*pkey_bits) (const EVP_PKEY *pk)); +void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, + int (*priv_decode) (EVP_PKEY *pk, + PKCS8_PRIV_KEY_INFO + *p8inf), + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, + const EVP_PKEY *pk), + int (*priv_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, + int derlen), + int (*param_encode) (const EVP_PKEY *pkey, + unsigned char **pder), + int (*param_missing) (const EVP_PKEY *pk), + int (*param_copy) (EVP_PKEY *to, + const EVP_PKEY *from), + int (*param_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*param_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, + int (*item_verify) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *a, + ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +# define EVP_PKEY_OP_UNDEFINED 0 +# define EVP_PKEY_OP_PARAMGEN (1<<1) +# define EVP_PKEY_OP_KEYGEN (1<<2) +# define EVP_PKEY_OP_SIGN (1<<3) +# define EVP_PKEY_OP_VERIFY (1<<4) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) +# define EVP_PKEY_OP_SIGNCTX (1<<6) +# define EVP_PKEY_OP_VERIFYCTX (1<<7) +# define EVP_PKEY_OP_ENCRYPT (1<<8) +# define EVP_PKEY_OP_DECRYPT (1<<9) +# define EVP_PKEY_OP_DERIVE (1<<10) + +# define EVP_PKEY_OP_TYPE_SIG \ + (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ + | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) + +# define EVP_PKEY_OP_TYPE_CRYPT \ + (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) + +# define EVP_PKEY_OP_TYPE_NOGEN \ + (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) + +# define EVP_PKEY_OP_TYPE_GEN \ + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + +# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd) + +# define EVP_PKEY_CTRL_MD 1 +# define EVP_PKEY_CTRL_PEER_KEY 2 + +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 + +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 + +# define EVP_PKEY_CTRL_SET_MAC_KEY 6 + +# define EVP_PKEY_CTRL_DIGESTINIT 7 + +/* Used by GOST key encryption in TLS */ +# define EVP_PKEY_CTRL_SET_IV 8 + +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 + +# define EVP_PKEY_CTRL_CIPHER 12 + +# define EVP_PKEY_CTRL_GET_MD 13 + +# define EVP_PKEY_ALG_CTRL 0x1000 + +# define EVP_PKEY_FLAG_AUTOARGLEN 2 +/* + * Method handles all operations: don't assume any digest related defaults. + */ +# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 + +const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); +void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); + +EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, int p1, void *p2); +int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, + const char *value); + +int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); + +EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, + const unsigned char *key, int keylen); + +void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); + +EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, + const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, + unsigned char *rout, size_t *routlen, + const unsigned char *sig, size_t siglen); +int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); + +int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); +int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); + +typedef int EVP_PKEY_gen_cb (EVP_PKEY_CTX *ctx); + +int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); + +void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); +EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); + +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, + int (*copy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, + void (*cleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, + int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, + int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, + int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, + int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, + int (*verify_recover_init) (EVP_PKEY_CTX + *ctx), + int (*verify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, + int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, + int (*verifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*verifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, + int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, + int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, + int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, + int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, + const char *type, + const char *value)); + +void EVP_add_alg_module(void); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ + +void ERR_load_EVP_strings(void); + +/* Error codes for the EVP functions. */ + +/* Function codes. */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AESNI_XTS_CIPHER 176 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_AES_XTS 172 +# define EVP_F_AES_XTS_CIPHER 175 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CMAC_INIT 173 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_D2I_PKEY 100 +# define EVP_F_DO_SIGVER_INIT 161 +# define EVP_F_DSAPKEY2PKCS8 134 +# define EVP_F_DSA_PKEY2PKCS8 135 +# define EVP_F_ECDSA_PKEY2PKCS8 129 +# define EVP_F_ECKEY_PKEY2PKCS8 132 +# define EVP_F_EVP_CIPHERINIT_EX 123 +# define EVP_F_EVP_CIPHER_CTX_COPY 163 +# define EVP_F_EVP_CIPHER_CTX_CTRL 124 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 +# define EVP_F_EVP_DECRYPTFINAL_EX 101 +# define EVP_F_EVP_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# define EVP_F_EVP_MD_CTX_COPY_EX 110 +# define EVP_F_EVP_MD_SIZE 162 +# define EVP_F_EVP_OPENINIT 102 +# define EVP_F_EVP_PBE_ALG_ADD 115 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 +# define EVP_F_EVP_PBE_CIPHERINIT 116 +# define EVP_F_EVP_PKCS82PKEY 111 +# define EVP_F_EVP_PKCS82PKEY_BROKEN 136 +# define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 +# define EVP_F_EVP_PKEY_CTX_CTRL 137 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 +# define EVP_F_EVP_PKEY_CTX_DUP 156 +# define EVP_F_EVP_PKEY_DECRYPT 104 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 +# define EVP_F_EVP_PKEY_DERIVE 153 +# define EVP_F_EVP_PKEY_DERIVE_INIT 154 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 +# define EVP_F_EVP_PKEY_ENCRYPT 105 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 +# define EVP_F_EVP_PKEY_GET1_DH 119 +# define EVP_F_EVP_PKEY_GET1_DSA 120 +# define EVP_F_EVP_PKEY_GET1_ECDSA 130 +# define EVP_F_EVP_PKEY_GET1_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET1_RSA 121 +# define EVP_F_EVP_PKEY_KEYGEN 146 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 +# define EVP_F_EVP_PKEY_NEW 106 +# define EVP_F_EVP_PKEY_PARAMGEN 148 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 +# define EVP_F_EVP_PKEY_SIGN 140 +# define EVP_F_EVP_PKEY_SIGN_INIT 141 +# define EVP_F_EVP_PKEY_VERIFY 142 +# define EVP_F_EVP_PKEY_VERIFY_INIT 143 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 +# define EVP_F_EVP_RIJNDAEL 126 +# define EVP_F_EVP_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# define EVP_F_FIPS_CIPHERINIT 166 +# define EVP_F_FIPS_CIPHER_CTX_COPY 170 +# define EVP_F_FIPS_CIPHER_CTX_CTRL 167 +# define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH 171 +# define EVP_F_FIPS_DIGESTINIT 168 +# define EVP_F_FIPS_MD_CTX_COPY 169 +# define EVP_F_HMAC_INIT_EX 174 +# define EVP_F_INT_CTX_NEW 157 +# define EVP_F_PKCS5_PBE_KEYIVGEN 117 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 +# define EVP_F_PKCS8_SET_BROKEN 112 +# define EVP_F_PKEY_SET_TYPE 158 +# define EVP_F_RC2_MAGIC_TO_METH 109 +# define EVP_F_RC5_CTRL 125 + +/* Reason codes. */ +# define EVP_R_AES_IV_SETUP_FAILED 162 +# define EVP_R_AES_KEY_SETUP_FAILED 143 +# define EVP_R_ASN1_LIB 140 +# define EVP_R_BAD_BLOCK_LENGTH 136 +# define EVP_R_BAD_DECRYPT 100 +# define EVP_R_BAD_KEY_LENGTH 137 +# define EVP_R_BN_DECODE_ERROR 112 +# define EVP_R_BN_PUBKEY_ERROR 113 +# define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CIPHER_PARAMETER_ERROR 122 +# define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_CTRL_NOT_IMPLEMENTED 132 +# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 +# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 +# define EVP_R_DECODE_ERROR 114 +# define EVP_R_DIFFERENT_KEY_TYPES 101 +# define EVP_R_DIFFERENT_PARAMETERS 153 +# define EVP_R_DISABLED_FOR_FIPS 163 +# define EVP_R_ENCODE_ERROR 115 +# define EVP_R_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 +# define EVP_R_EXPECTING_AN_RSA_KEY 127 +# define EVP_R_EXPECTING_A_DH_KEY 128 +# define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_ECDSA_KEY 141 +# define EVP_R_EXPECTING_A_EC_KEY 142 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_INITIALIZATION_ERROR 134 +# define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_DIGEST 152 +# define EVP_R_INVALID_FIPS_MODE 168 +# define EVP_R_INVALID_KEY 171 +# define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_OPERATION 148 +# define EVP_R_IV_TOO_LARGE 102 +# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 +# define EVP_R_METHOD_NOT_SUPPORTED 144 +# define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NO_CIPHER_SET 131 +# define EVP_R_NO_DEFAULT_DIGEST 158 +# define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_DSA_PARAMETERS 116 +# define EVP_R_NO_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 +# define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117 +# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 +# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 +# define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_TOO_LARGE 164 +# define EVP_R_UNKNOWN_CIPHER 160 +# define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_OPTION 169 +# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 +# define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 +# define EVP_R_UNSUPPORTED_ALGORITHM 156 +# define EVP_R_UNSUPPORTED_CIPHER 107 +# define EVP_R_UNSUPPORTED_KEYLENGTH 123 +# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 +# define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_PRF 125 +# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 +# define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 +# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 +# define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/src/components/openssl/hmac.h b/src/components/openssl/hmac.h new file mode 100644 index 0000000..40b209a --- /dev/null +++ b/src/components/openssl/hmac.h @@ -0,0 +1,109 @@ +/* crypto/hmac/hmac.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +#ifndef HEADER_HMAC_H +# define HEADER_HMAC_H + +# include + +# ifdef OPENSSL_NO_HMAC +# error HMAC is disabled. +# endif + +# include + +# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct hmac_ctx_st { + const EVP_MD *md; + EVP_MD_CTX md_ctx; + EVP_MD_CTX i_ctx; + EVP_MD_CTX o_ctx; + unsigned int key_length; + unsigned char key[HMAC_MAX_MD_CBLOCK]; +} HMAC_CTX; + +# define HMAC_size(e) (EVP_MD_size((e)->md)) + +void HMAC_CTX_init(HMAC_CTX *ctx); +void HMAC_CTX_cleanup(HMAC_CTX *ctx); + +/* deprecated */ +# define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) + +/* deprecated */ +int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md); +int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); +int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); +unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + const unsigned char *d, size_t n, unsigned char *md, + unsigned int *md_len); +int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/idea.h b/src/components/openssl/idea.h new file mode 100644 index 0000000..d794216 --- /dev/null +++ b/src/components/openssl/idea.h @@ -0,0 +1,105 @@ +/* crypto/idea/idea.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_IDEA_H +# define HEADER_IDEA_H + +# include /* IDEA_INT, OPENSSL_NO_IDEA */ + +# ifdef OPENSSL_NO_IDEA +# error IDEA is disabled. +# endif + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct idea_key_st { + IDEA_INT data[9][6]; +} IDEA_KEY_SCHEDULE; + +const char *idea_options(void); +void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +# ifdef OPENSSL_FIPS +void private_idea_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +# endif +void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); +void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); +void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int enc); +void idea_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num, int enc); +void idea_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num); +void idea_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/krb5_asn.h b/src/components/openssl/krb5_asn.h new file mode 100644 index 0000000..fdd8268 --- /dev/null +++ b/src/components/openssl/krb5_asn.h @@ -0,0 +1,240 @@ +/* krb5_asn.h */ +/* + * Written by Vern Staats for the OpenSSL project, ** + * using ocsp/{*.h,*asn*.c} as a starting point + */ + +/* ==================================================================== + * Copyright (c) 1998-2000 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_KRB5_ASN_H +# define HEADER_KRB5_ASN_H + +/* + * #include + */ +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ASN.1 from Kerberos RFC 1510 + */ + +/*- EncryptedData ::= SEQUENCE { + * etype[0] INTEGER, -- EncryptionType + * kvno[1] INTEGER OPTIONAL, + * cipher[2] OCTET STRING -- ciphertext + * } + */ +typedef struct krb5_encdata_st { + ASN1_INTEGER *etype; + ASN1_INTEGER *kvno; + ASN1_OCTET_STRING *cipher; +} KRB5_ENCDATA; + +DECLARE_STACK_OF(KRB5_ENCDATA) + +/*- PrincipalName ::= SEQUENCE { + * name-type[0] INTEGER, + * name-string[1] SEQUENCE OF GeneralString + * } + */ +typedef struct krb5_princname_st { + ASN1_INTEGER *nametype; + STACK_OF(ASN1_GENERALSTRING) *namestring; +} KRB5_PRINCNAME; + +DECLARE_STACK_OF(KRB5_PRINCNAME) + +/*- Ticket ::= [APPLICATION 1] SEQUENCE { + * tkt-vno[0] INTEGER, + * realm[1] Realm, + * sname[2] PrincipalName, + * enc-part[3] EncryptedData + * } + */ +typedef struct krb5_tktbody_st { + ASN1_INTEGER *tktvno; + ASN1_GENERALSTRING *realm; + KRB5_PRINCNAME *sname; + KRB5_ENCDATA *encdata; +} KRB5_TKTBODY; + +typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET; +DECLARE_STACK_OF(KRB5_TKTBODY) + +/*- AP-REQ ::= [APPLICATION 14] SEQUENCE { + * pvno[0] INTEGER, + * msg-type[1] INTEGER, + * ap-options[2] APOptions, + * ticket[3] Ticket, + * authenticator[4] EncryptedData + * } + * + * APOptions ::= BIT STRING { + * reserved(0), use-session-key(1), mutual-required(2) } + */ +typedef struct krb5_ap_req_st { + ASN1_INTEGER *pvno; + ASN1_INTEGER *msgtype; + ASN1_BIT_STRING *apoptions; + KRB5_TICKET *ticket; + KRB5_ENCDATA *authenticator; +} KRB5_APREQBODY; + +typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ; +DECLARE_STACK_OF(KRB5_APREQBODY) + +/* Authenticator Stuff */ + +/*- Checksum ::= SEQUENCE { + * cksumtype[0] INTEGER, + * checksum[1] OCTET STRING + * } + */ +typedef struct krb5_checksum_st { + ASN1_INTEGER *ctype; + ASN1_OCTET_STRING *checksum; +} KRB5_CHECKSUM; + +DECLARE_STACK_OF(KRB5_CHECKSUM) + +/*- EncryptionKey ::= SEQUENCE { + * keytype[0] INTEGER, + * keyvalue[1] OCTET STRING + * } + */ +typedef struct krb5_encryptionkey_st { + ASN1_INTEGER *ktype; + ASN1_OCTET_STRING *keyvalue; +} KRB5_ENCKEY; + +DECLARE_STACK_OF(KRB5_ENCKEY) + +/*- AuthorizationData ::= SEQUENCE OF SEQUENCE { + * ad-type[0] INTEGER, + * ad-data[1] OCTET STRING + * } + */ +typedef struct krb5_authorization_st { + ASN1_INTEGER *adtype; + ASN1_OCTET_STRING *addata; +} KRB5_AUTHDATA; + +DECLARE_STACK_OF(KRB5_AUTHDATA) + +/*- -- Unencrypted authenticator + * Authenticator ::= [APPLICATION 2] SEQUENCE { + * authenticator-vno[0] INTEGER, + * crealm[1] Realm, + * cname[2] PrincipalName, + * cksum[3] Checksum OPTIONAL, + * cusec[4] INTEGER, + * ctime[5] KerberosTime, + * subkey[6] EncryptionKey OPTIONAL, + * seq-number[7] INTEGER OPTIONAL, + * authorization-data[8] AuthorizationData OPTIONAL + * } + */ +typedef struct krb5_authenticator_st { + ASN1_INTEGER *avno; + ASN1_GENERALSTRING *crealm; + KRB5_PRINCNAME *cname; + KRB5_CHECKSUM *cksum; + ASN1_INTEGER *cusec; + ASN1_GENERALIZEDTIME *ctime; + KRB5_ENCKEY *subkey; + ASN1_INTEGER *seqnum; + KRB5_AUTHDATA *authorization; +} KRB5_AUTHENTBODY; + +typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT; +DECLARE_STACK_OF(KRB5_AUTHENTBODY) + +/*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) = + * type *name##_new(void); + * void name##_free(type *a); + * DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) = + * DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) = + * type *d2i_##name(type **a, const unsigned char **in, long len); + * int i2d_##name(type *a, unsigned char **out); + * DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it + */ + +DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA) +DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME) +DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY) +DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY) +DECLARE_ASN1_FUNCTIONS(KRB5_TICKET) +DECLARE_ASN1_FUNCTIONS(KRB5_APREQ) + +DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM) +DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY) +DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA) +DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) +DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT) + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/kssl.h b/src/components/openssl/kssl.h new file mode 100644 index 0000000..18bc28e --- /dev/null +++ b/src/components/openssl/kssl.h @@ -0,0 +1,197 @@ +/* ssl/kssl.h */ +/* + * Written by Vern Staats for the OpenSSL project + * 2000. project 2000. + */ +/* ==================================================================== + * Copyright (c) 2000 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 + * licensing@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). + * + */ + +/* + ** 19990701 VRS Started. + */ + +#ifndef KSSL_H +# define KSSL_H + +# include + +# ifndef OPENSSL_NO_KRB5 + +# include +# include +# include +# ifdef OPENSSL_SYS_WIN32 +/* + * These can sometimes get redefined indirectly by krb5 header files after + * they get undefed in ossl_typ.h + */ +# undef X509_NAME +# undef X509_EXTENSIONS +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Depending on which KRB5 implementation used, some types from + * the other may be missing. Resolve that here and now + */ +# ifdef KRB5_HEIMDAL +typedef unsigned char krb5_octet; +# define FAR +# else + +# ifndef FAR +# define FAR +# endif + +# endif + +/*- + * Uncomment this to debug kssl problems or + * to trace usage of the Kerberos session key + * + * #define KSSL_DEBUG + */ + +# ifndef KRB5SVC +# define KRB5SVC "host" +# endif + +# ifndef KRB5KEYTAB +# define KRB5KEYTAB "/etc/krb5.keytab" +# endif + +# ifndef KRB5SENDAUTH +# define KRB5SENDAUTH 1 +# endif + +# ifndef KRB5CHECKAUTH +# define KRB5CHECKAUTH 1 +# endif + +# ifndef KSSL_CLOCKSKEW +# define KSSL_CLOCKSKEW 300; +# endif + +# define KSSL_ERR_MAX 255 +typedef struct kssl_err_st { + int reason; + char text[KSSL_ERR_MAX + 1]; +} KSSL_ERR; + +/*- Context for passing + * (1) Kerberos session key to SSL, and + * (2) Config data between application and SSL lib + */ +typedef struct kssl_ctx_st { + /* used by: disposition: */ + char *service_name; /* C,S default ok (kssl) */ + char *service_host; /* C input, REQUIRED */ + char *client_princ; /* S output from krb5 ticket */ + char *keytab_file; /* S NULL (/etc/krb5.keytab) */ + char *cred_cache; /* C NULL (default) */ + krb5_enctype enctype; + int length; + krb5_octet FAR *key; +} KSSL_CTX; + +# define KSSL_CLIENT 1 +# define KSSL_SERVER 2 +# define KSSL_SERVICE 3 +# define KSSL_KEYTAB 4 + +# define KSSL_CTX_OK 0 +# define KSSL_CTX_ERR 1 +# define KSSL_NOMEM 2 + +/* Public (for use by applications that use OpenSSL with Kerberos 5 support */ +krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); +KSSL_CTX *kssl_ctx_new(void); +KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); +void kssl_ctx_show(KSSL_CTX *kssl_ctx); +krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, + krb5_data *realm, krb5_data *entity, + int nentities); +krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, + krb5_data *authenp, KSSL_ERR *kssl_err); +krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, + krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); +krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); +void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); +void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); +krb5_error_code kssl_build_principal_2(krb5_context context, + krb5_principal *princ, int rlen, + const char *realm, int slen, + const char *svc, int hlen, + const char *host); +krb5_error_code kssl_validate_times(krb5_timestamp atime, + krb5_ticket_times *ttimes); +krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, + krb5_timestamp *atimep, + KSSL_ERR *kssl_err); +unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); + +void SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx); +KSSL_CTX *SSL_get0_kssl_ctx(SSL *s); +char *kssl_ctx_get0_client_princ(KSSL_CTX *kctx); + +#ifdef __cplusplus +} +#endif +# endif /* OPENSSL_NO_KRB5 */ +#endif /* KSSL_H */ diff --git a/src/components/openssl/lhash.h b/src/components/openssl/lhash.h new file mode 100644 index 0000000..2f5bc47 --- /dev/null +++ b/src/components/openssl/lhash.h @@ -0,0 +1,240 @@ +/* crypto/lhash/lhash.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +# define HEADER_LHASH_H + +# include +# ifndef OPENSSL_NO_FP_API +# include +# endif + +# ifndef OPENSSL_NO_BIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st { + void *data; + struct lhash_node_st *next; +# ifndef OPENSSL_NO_HASH_COMP + unsigned long hash; +# endif +} LHASH_NODE; + +typedef int (*LHASH_COMP_FN_TYPE) (const void *, const void *); +typedef unsigned long (*LHASH_HASH_FN_TYPE) (const void *); +typedef void (*LHASH_DOALL_FN_TYPE) (void *); +typedef void (*LHASH_DOALL_ARG_FN_TYPE) (void *, void *); + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Third: "doall" functions */ +# define DECLARE_LHASH_DOALL_FN(name, o_type) \ + void name##_LHASH_DOALL(void *); +# define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \ + void name##_LHASH_DOALL(void *arg) { \ + o_type *a = arg; \ + name##_doall(a); } +# define LHASH_DOALL_FN(name) name##_LHASH_DOALL + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + +typedef struct lhash_st { + LHASH_NODE **b; + LHASH_COMP_FN_TYPE comp; + LHASH_HASH_FN_TYPE hash; + unsigned int num_nodes; + unsigned int num_alloc_nodes; + unsigned int p; + unsigned int pmax; + unsigned long up_load; /* load times 256 */ + unsigned long down_load; /* load times 256 */ + unsigned long num_items; + unsigned long num_expands; + unsigned long num_expand_reallocs; + unsigned long num_contracts; + unsigned long num_contract_reallocs; + unsigned long num_hash_calls; + unsigned long num_comp_calls; + unsigned long num_insert; + unsigned long num_replace; + unsigned long num_delete; + unsigned long num_no_delete; + unsigned long num_retrieve; + unsigned long num_retrieve_miss; + unsigned long num_hash_comps; + int error; +} _LHASH; /* Do not use _LHASH directly, use LHASH_OF + * and friends */ + +# define LH_LOAD_MULT 256 + +/* + * Indicates a malloc() error in the last call, this is only bad in + * lh_insert(). + */ +# define lh_error(lh) ((lh)->error) + +_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); +void lh_free(_LHASH *lh); +void *lh_insert(_LHASH *lh, void *data); +void *lh_delete(_LHASH *lh, const void *data); +void *lh_retrieve(_LHASH *lh, const void *data); +void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func); +void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); +unsigned long lh_strhash(const char *c); +unsigned long lh_num_items(const _LHASH *lh); + +# ifndef OPENSSL_NO_FP_API +void lh_stats(const _LHASH *lh, FILE *out); +void lh_node_stats(const _LHASH *lh, FILE *out); +void lh_node_usage_stats(const _LHASH *lh, FILE *out); +# endif + +# ifndef OPENSSL_NO_BIO +void lh_stats_bio(const _LHASH *lh, BIO *out); +void lh_node_stats_bio(const _LHASH *lh, BIO *out); +void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out); +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +# define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; } + +# define CHECKED_LHASH_OF(type,lh) \ + ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh)) + +/* Define wrapper functions. */ +# define LHM_lh_new(type, name) \ + ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name))) +# define LHM_lh_error(type, lh) \ + lh_error(CHECKED_LHASH_OF(type,lh)) +# define LHM_lh_insert(type, lh, inst) \ + ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +# define LHM_lh_retrieve(type, lh, inst) \ + ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +# define LHM_lh_delete(type, lh, inst) \ + ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +# define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn) +# define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \ + lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg)) +# define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh)) +# define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load) +# define LHM_lh_node_stats_bio(type, lh, out) \ + lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out) +# define LHM_lh_node_usage_stats_bio(type, lh, out) \ + lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out) +# define LHM_lh_stats_bio(type, lh, out) \ + lh_stats_bio(CHECKED_LHASH_OF(type, lh), out) +# define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh)) + +DECLARE_LHASH_OF(OPENSSL_STRING); +DECLARE_LHASH_OF(OPENSSL_CSTRING); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/md4.h b/src/components/openssl/md4.h new file mode 100644 index 0000000..0dc9ae3 --- /dev/null +++ b/src/components/openssl/md4.h @@ -0,0 +1,119 @@ +/* crypto/md4/md4.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_MD4_H +# define HEADER_MD4_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_MD4 +# error MD4 is disabled. +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD4_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! MD4_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define MD4_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define MD4_LONG unsigned long +# define MD4_LONG_LOG2 3 +/* + * _CRAY note. I could declare short, but I have no idea what impact + * does it have on performance on none-T3E machines. I could declare + * int, but at least on C90 sizeof(int) can be chosen at compile time. + * So I've chosen long... + * + */ +# else +# define MD4_LONG unsigned int +# endif + +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) +# define MD4_DIGEST_LENGTH 16 + +typedef struct MD4state_st { + MD4_LONG A, B, C, D; + MD4_LONG Nl, Nh; + MD4_LONG data[MD4_LBLOCK]; + unsigned int num; +} MD4_CTX; + +# ifdef OPENSSL_FIPS +int private_MD4_Init(MD4_CTX *c); +# endif +int MD4_Init(MD4_CTX *c); +int MD4_Update(MD4_CTX *c, const void *data, size_t len); +int MD4_Final(unsigned char *md, MD4_CTX *c); +unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); +void MD4_Transform(MD4_CTX *c, const unsigned char *b); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/md5.h b/src/components/openssl/md5.h new file mode 100644 index 0000000..a54c74f --- /dev/null +++ b/src/components/openssl/md5.h @@ -0,0 +1,119 @@ +/* crypto/md5/md5.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_MD5_H +# define HEADER_MD5_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_MD5 +# error MD5 is disabled. +# endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! MD5_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define MD5_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define MD5_LONG unsigned long +# define MD5_LONG_LOG2 3 +/* + * _CRAY note. I could declare short, but I have no idea what impact + * does it have on performance on none-T3E machines. I could declare + * int, but at least on C90 sizeof(int) can be chosen at compile time. + * So I've chosen long... + * + */ +# else +# define MD5_LONG unsigned int +# endif + +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) +# define MD5_DIGEST_LENGTH 16 + +typedef struct MD5state_st { + MD5_LONG A, B, C, D; + MD5_LONG Nl, Nh; + MD5_LONG data[MD5_LBLOCK]; + unsigned int num; +} MD5_CTX; + +# ifdef OPENSSL_FIPS +int private_MD5_Init(MD5_CTX *c); +# endif +int MD5_Init(MD5_CTX *c); +int MD5_Update(MD5_CTX *c, const void *data, size_t len); +int MD5_Final(unsigned char *md, MD5_CTX *c); +unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); +void MD5_Transform(MD5_CTX *c, const unsigned char *b); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/mdc2.h b/src/components/openssl/mdc2.h new file mode 100644 index 0000000..51abb5e --- /dev/null +++ b/src/components/openssl/mdc2.h @@ -0,0 +1,94 @@ +/* crypto/mdc2/mdc2.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_MDC2_H +# define HEADER_MDC2_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_MDC2 +# error MDC2 is disabled. +# endif + +# define MDC2_BLOCK 8 +# define MDC2_DIGEST_LENGTH 16 + +typedef struct mdc2_ctx_st { + unsigned int num; + unsigned char data[MDC2_BLOCK]; + DES_cblock h, hh; + int pad_type; /* either 1 or 2, default 1 */ +} MDC2_CTX; + +# ifdef OPENSSL_FIPS +int private_MDC2_Init(MDC2_CTX *c); +# endif +int MDC2_Init(MDC2_CTX *c); +int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); +int MDC2_Final(unsigned char *md, MDC2_CTX *c); +unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/modes.h b/src/components/openssl/modes.h new file mode 100644 index 0000000..fd48849 --- /dev/null +++ b/src/components/openssl/modes.h @@ -0,0 +1,163 @@ +/* ==================================================================== + * Copyright (c) 2008 The OpenSSL Project. All rights reserved. + * + * Rights for redistribution and usage in source and binary + * forms are granted according to the OpenSSL license. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif +typedef void (*block128_f) (const unsigned char in[16], + unsigned char out[16], const void *key); + +typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int enc); + +typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16]); + +typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); +void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); + +void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], unsigned int *num, + block128_f block); + +void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], + unsigned int *num, ctr128_f ctr); + +void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + block128_f block); + +void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, + size_t bits, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); + +size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +typedef struct gcm128_context GCM128_CONTEXT; + +GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); +void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); +void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, + size_t len); +int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); + +typedef struct ccm128_context CCM128_CONTEXT; + +void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, + unsigned int M, unsigned int L, void *key, + block128_f block); +int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, + size_t nlen, size_t mlen); +void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, + size_t alen); +int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); + +typedef struct xts128_context XTS128_CONTEXT; + +int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, + const unsigned char iv[16], + const unsigned char *inp, unsigned char *out, + size_t len, int enc); + +size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); + +size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); + +#ifdef __cplusplus +} +#endif diff --git a/src/components/openssl/obj_mac.h b/src/components/openssl/obj_mac.h new file mode 100644 index 0000000..779c309 --- /dev/null +++ b/src/components/openssl/obj_mac.h @@ -0,0 +1,4194 @@ +/* crypto/objects/obj_mac.h */ + +/* + * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following + * command: perl objects.pl objects.txt obj_mac.num obj_mac.h + */ + +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#define SN_undef "UNDEF" +#define LN_undef "undefined" +#define NID_undef 0 +#define OBJ_undef 0L + +#define SN_itu_t "ITU-T" +#define LN_itu_t "itu-t" +#define NID_itu_t 645 +#define OBJ_itu_t 0L + +#define NID_ccitt 404 +#define OBJ_ccitt OBJ_itu_t + +#define SN_iso "ISO" +#define LN_iso "iso" +#define NID_iso 181 +#define OBJ_iso 1L + +#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" +#define LN_joint_iso_itu_t "joint-iso-itu-t" +#define NID_joint_iso_itu_t 646 +#define OBJ_joint_iso_itu_t 2L + +#define NID_joint_iso_ccitt 393 +#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t + +#define SN_member_body "member-body" +#define LN_member_body "ISO Member Body" +#define NID_member_body 182 +#define OBJ_member_body OBJ_iso,2L + +#define SN_identified_organization "identified-organization" +#define NID_identified_organization 676 +#define OBJ_identified_organization OBJ_iso,3L + +#define SN_hmac_md5 "HMAC-MD5" +#define LN_hmac_md5 "hmac-md5" +#define NID_hmac_md5 780 +#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L + +#define SN_hmac_sha1 "HMAC-SHA1" +#define LN_hmac_sha1 "hmac-sha1" +#define NID_hmac_sha1 781 +#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L + +#define SN_certicom_arc "certicom-arc" +#define NID_certicom_arc 677 +#define OBJ_certicom_arc OBJ_identified_organization,132L + +#define SN_international_organizations "international-organizations" +#define LN_international_organizations "International Organizations" +#define NID_international_organizations 647 +#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L + +#define SN_wap "wap" +#define NID_wap 678 +#define OBJ_wap OBJ_international_organizations,43L + +#define SN_wap_wsg "wap-wsg" +#define NID_wap_wsg 679 +#define OBJ_wap_wsg OBJ_wap,1L + +#define SN_selected_attribute_types "selected-attribute-types" +#define LN_selected_attribute_types "Selected Attribute Types" +#define NID_selected_attribute_types 394 +#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L + +#define SN_clearance "clearance" +#define NID_clearance 395 +#define OBJ_clearance OBJ_selected_attribute_types,55L + +#define SN_ISO_US "ISO-US" +#define LN_ISO_US "ISO US Member Body" +#define NID_ISO_US 183 +#define OBJ_ISO_US OBJ_member_body,840L + +#define SN_X9_57 "X9-57" +#define LN_X9_57 "X9.57" +#define NID_X9_57 184 +#define OBJ_X9_57 OBJ_ISO_US,10040L + +#define SN_X9cm "X9cm" +#define LN_X9cm "X9.57 CM ?" +#define NID_X9cm 185 +#define OBJ_X9cm OBJ_X9_57,4L + +#define SN_dsa "DSA" +#define LN_dsa "dsaEncryption" +#define NID_dsa 116 +#define OBJ_dsa OBJ_X9cm,1L + +#define SN_dsaWithSHA1 "DSA-SHA1" +#define LN_dsaWithSHA1 "dsaWithSHA1" +#define NID_dsaWithSHA1 113 +#define OBJ_dsaWithSHA1 OBJ_X9cm,3L + +#define SN_ansi_X9_62 "ansi-X9-62" +#define LN_ansi_X9_62 "ANSI X9.62" +#define NID_ansi_X9_62 405 +#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L + +#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L + +#define SN_X9_62_prime_field "prime-field" +#define NID_X9_62_prime_field 406 +#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L + +#define SN_X9_62_characteristic_two_field "characteristic-two-field" +#define NID_X9_62_characteristic_two_field 407 +#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L + +#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" +#define NID_X9_62_id_characteristic_two_basis 680 +#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L + +#define SN_X9_62_onBasis "onBasis" +#define NID_X9_62_onBasis 681 +#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L + +#define SN_X9_62_tpBasis "tpBasis" +#define NID_X9_62_tpBasis 682 +#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L + +#define SN_X9_62_ppBasis "ppBasis" +#define NID_X9_62_ppBasis 683 +#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L + +#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L + +#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" +#define NID_X9_62_id_ecPublicKey 408 +#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L + +#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L + +#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L + +#define SN_X9_62_c2pnb163v1 "c2pnb163v1" +#define NID_X9_62_c2pnb163v1 684 +#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L + +#define SN_X9_62_c2pnb163v2 "c2pnb163v2" +#define NID_X9_62_c2pnb163v2 685 +#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L + +#define SN_X9_62_c2pnb163v3 "c2pnb163v3" +#define NID_X9_62_c2pnb163v3 686 +#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L + +#define SN_X9_62_c2pnb176v1 "c2pnb176v1" +#define NID_X9_62_c2pnb176v1 687 +#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L + +#define SN_X9_62_c2tnb191v1 "c2tnb191v1" +#define NID_X9_62_c2tnb191v1 688 +#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L + +#define SN_X9_62_c2tnb191v2 "c2tnb191v2" +#define NID_X9_62_c2tnb191v2 689 +#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L + +#define SN_X9_62_c2tnb191v3 "c2tnb191v3" +#define NID_X9_62_c2tnb191v3 690 +#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L + +#define SN_X9_62_c2onb191v4 "c2onb191v4" +#define NID_X9_62_c2onb191v4 691 +#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L + +#define SN_X9_62_c2onb191v5 "c2onb191v5" +#define NID_X9_62_c2onb191v5 692 +#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L + +#define SN_X9_62_c2pnb208w1 "c2pnb208w1" +#define NID_X9_62_c2pnb208w1 693 +#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L + +#define SN_X9_62_c2tnb239v1 "c2tnb239v1" +#define NID_X9_62_c2tnb239v1 694 +#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L + +#define SN_X9_62_c2tnb239v2 "c2tnb239v2" +#define NID_X9_62_c2tnb239v2 695 +#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L + +#define SN_X9_62_c2tnb239v3 "c2tnb239v3" +#define NID_X9_62_c2tnb239v3 696 +#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L + +#define SN_X9_62_c2onb239v4 "c2onb239v4" +#define NID_X9_62_c2onb239v4 697 +#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L + +#define SN_X9_62_c2onb239v5 "c2onb239v5" +#define NID_X9_62_c2onb239v5 698 +#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L + +#define SN_X9_62_c2pnb272w1 "c2pnb272w1" +#define NID_X9_62_c2pnb272w1 699 +#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L + +#define SN_X9_62_c2pnb304w1 "c2pnb304w1" +#define NID_X9_62_c2pnb304w1 700 +#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L + +#define SN_X9_62_c2tnb359v1 "c2tnb359v1" +#define NID_X9_62_c2tnb359v1 701 +#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L + +#define SN_X9_62_c2pnb368w1 "c2pnb368w1" +#define NID_X9_62_c2pnb368w1 702 +#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L + +#define SN_X9_62_c2tnb431r1 "c2tnb431r1" +#define NID_X9_62_c2tnb431r1 703 +#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L + +#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L + +#define SN_X9_62_prime192v1 "prime192v1" +#define NID_X9_62_prime192v1 409 +#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L + +#define SN_X9_62_prime192v2 "prime192v2" +#define NID_X9_62_prime192v2 410 +#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L + +#define SN_X9_62_prime192v3 "prime192v3" +#define NID_X9_62_prime192v3 411 +#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L + +#define SN_X9_62_prime239v1 "prime239v1" +#define NID_X9_62_prime239v1 412 +#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L + +#define SN_X9_62_prime239v2 "prime239v2" +#define NID_X9_62_prime239v2 413 +#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L + +#define SN_X9_62_prime239v3 "prime239v3" +#define NID_X9_62_prime239v3 414 +#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L + +#define SN_X9_62_prime256v1 "prime256v1" +#define NID_X9_62_prime256v1 415 +#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L + +#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L + +#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" +#define NID_ecdsa_with_SHA1 416 +#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L + +#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" +#define NID_ecdsa_with_Recommended 791 +#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L + +#define SN_ecdsa_with_Specified "ecdsa-with-Specified" +#define NID_ecdsa_with_Specified 792 +#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L + +#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" +#define NID_ecdsa_with_SHA224 793 +#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L + +#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" +#define NID_ecdsa_with_SHA256 794 +#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L + +#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" +#define NID_ecdsa_with_SHA384 795 +#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L + +#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" +#define NID_ecdsa_with_SHA512 796 +#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L + +#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L + +#define SN_secp112r1 "secp112r1" +#define NID_secp112r1 704 +#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L + +#define SN_secp112r2 "secp112r2" +#define NID_secp112r2 705 +#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L + +#define SN_secp128r1 "secp128r1" +#define NID_secp128r1 706 +#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L + +#define SN_secp128r2 "secp128r2" +#define NID_secp128r2 707 +#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L + +#define SN_secp160k1 "secp160k1" +#define NID_secp160k1 708 +#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L + +#define SN_secp160r1 "secp160r1" +#define NID_secp160r1 709 +#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L + +#define SN_secp160r2 "secp160r2" +#define NID_secp160r2 710 +#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L + +#define SN_secp192k1 "secp192k1" +#define NID_secp192k1 711 +#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L + +#define SN_secp224k1 "secp224k1" +#define NID_secp224k1 712 +#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L + +#define SN_secp224r1 "secp224r1" +#define NID_secp224r1 713 +#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L + +#define SN_secp256k1 "secp256k1" +#define NID_secp256k1 714 +#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L + +#define SN_secp384r1 "secp384r1" +#define NID_secp384r1 715 +#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L + +#define SN_secp521r1 "secp521r1" +#define NID_secp521r1 716 +#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L + +#define SN_sect113r1 "sect113r1" +#define NID_sect113r1 717 +#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L + +#define SN_sect113r2 "sect113r2" +#define NID_sect113r2 718 +#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L + +#define SN_sect131r1 "sect131r1" +#define NID_sect131r1 719 +#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L + +#define SN_sect131r2 "sect131r2" +#define NID_sect131r2 720 +#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L + +#define SN_sect163k1 "sect163k1" +#define NID_sect163k1 721 +#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L + +#define SN_sect163r1 "sect163r1" +#define NID_sect163r1 722 +#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L + +#define SN_sect163r2 "sect163r2" +#define NID_sect163r2 723 +#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L + +#define SN_sect193r1 "sect193r1" +#define NID_sect193r1 724 +#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L + +#define SN_sect193r2 "sect193r2" +#define NID_sect193r2 725 +#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L + +#define SN_sect233k1 "sect233k1" +#define NID_sect233k1 726 +#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L + +#define SN_sect233r1 "sect233r1" +#define NID_sect233r1 727 +#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L + +#define SN_sect239k1 "sect239k1" +#define NID_sect239k1 728 +#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L + +#define SN_sect283k1 "sect283k1" +#define NID_sect283k1 729 +#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L + +#define SN_sect283r1 "sect283r1" +#define NID_sect283r1 730 +#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L + +#define SN_sect409k1 "sect409k1" +#define NID_sect409k1 731 +#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L + +#define SN_sect409r1 "sect409r1" +#define NID_sect409r1 732 +#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L + +#define SN_sect571k1 "sect571k1" +#define NID_sect571k1 733 +#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L + +#define SN_sect571r1 "sect571r1" +#define NID_sect571r1 734 +#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L + +#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L + +#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" +#define NID_wap_wsg_idm_ecid_wtls1 735 +#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L + +#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" +#define NID_wap_wsg_idm_ecid_wtls3 736 +#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L + +#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" +#define NID_wap_wsg_idm_ecid_wtls4 737 +#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L + +#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" +#define NID_wap_wsg_idm_ecid_wtls5 738 +#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L + +#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" +#define NID_wap_wsg_idm_ecid_wtls6 739 +#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L + +#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" +#define NID_wap_wsg_idm_ecid_wtls7 740 +#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L + +#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" +#define NID_wap_wsg_idm_ecid_wtls8 741 +#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L + +#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" +#define NID_wap_wsg_idm_ecid_wtls9 742 +#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L + +#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" +#define NID_wap_wsg_idm_ecid_wtls10 743 +#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L + +#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" +#define NID_wap_wsg_idm_ecid_wtls11 744 +#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L + +#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" +#define NID_wap_wsg_idm_ecid_wtls12 745 +#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L + +#define SN_cast5_cbc "CAST5-CBC" +#define LN_cast5_cbc "cast5-cbc" +#define NID_cast5_cbc 108 +#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L + +#define SN_cast5_ecb "CAST5-ECB" +#define LN_cast5_ecb "cast5-ecb" +#define NID_cast5_ecb 109 + +#define SN_cast5_cfb64 "CAST5-CFB" +#define LN_cast5_cfb64 "cast5-cfb" +#define NID_cast5_cfb64 110 + +#define SN_cast5_ofb64 "CAST5-OFB" +#define LN_cast5_ofb64 "cast5-ofb" +#define NID_cast5_ofb64 111 + +#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" +#define NID_pbeWithMD5AndCast5_CBC 112 +#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L + +#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" +#define LN_id_PasswordBasedMAC "password based MAC" +#define NID_id_PasswordBasedMAC 782 +#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L + +#define SN_id_DHBasedMac "id-DHBasedMac" +#define LN_id_DHBasedMac "Diffie-Hellman based MAC" +#define NID_id_DHBasedMac 783 +#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L + +#define SN_rsadsi "rsadsi" +#define LN_rsadsi "RSA Data Security, Inc." +#define NID_rsadsi 1 +#define OBJ_rsadsi OBJ_ISO_US,113549L + +#define SN_pkcs "pkcs" +#define LN_pkcs "RSA Data Security, Inc. PKCS" +#define NID_pkcs 2 +#define OBJ_pkcs OBJ_rsadsi,1L + +#define SN_pkcs1 "pkcs1" +#define NID_pkcs1 186 +#define OBJ_pkcs1 OBJ_pkcs,1L + +#define LN_rsaEncryption "rsaEncryption" +#define NID_rsaEncryption 6 +#define OBJ_rsaEncryption OBJ_pkcs1,1L + +#define SN_md2WithRSAEncryption "RSA-MD2" +#define LN_md2WithRSAEncryption "md2WithRSAEncryption" +#define NID_md2WithRSAEncryption 7 +#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L + +#define SN_md4WithRSAEncryption "RSA-MD4" +#define LN_md4WithRSAEncryption "md4WithRSAEncryption" +#define NID_md4WithRSAEncryption 396 +#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L + +#define SN_md5WithRSAEncryption "RSA-MD5" +#define LN_md5WithRSAEncryption "md5WithRSAEncryption" +#define NID_md5WithRSAEncryption 8 +#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L + +#define SN_sha1WithRSAEncryption "RSA-SHA1" +#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +#define NID_sha1WithRSAEncryption 65 +#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L + +#define SN_rsaesOaep "RSAES-OAEP" +#define LN_rsaesOaep "rsaesOaep" +#define NID_rsaesOaep 919 +#define OBJ_rsaesOaep OBJ_pkcs1,7L + +#define SN_mgf1 "MGF1" +#define LN_mgf1 "mgf1" +#define NID_mgf1 911 +#define OBJ_mgf1 OBJ_pkcs1,8L + +#define SN_pSpecified "PSPECIFIED" +#define LN_pSpecified "pSpecified" +#define NID_pSpecified 935 +#define OBJ_pSpecified OBJ_pkcs1,9L + +#define SN_rsassaPss "RSASSA-PSS" +#define LN_rsassaPss "rsassaPss" +#define NID_rsassaPss 912 +#define OBJ_rsassaPss OBJ_pkcs1,10L + +#define SN_sha256WithRSAEncryption "RSA-SHA256" +#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" +#define NID_sha256WithRSAEncryption 668 +#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L + +#define SN_sha384WithRSAEncryption "RSA-SHA384" +#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" +#define NID_sha384WithRSAEncryption 669 +#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L + +#define SN_sha512WithRSAEncryption "RSA-SHA512" +#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" +#define NID_sha512WithRSAEncryption 670 +#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L + +#define SN_sha224WithRSAEncryption "RSA-SHA224" +#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" +#define NID_sha224WithRSAEncryption 671 +#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L + +#define SN_pkcs3 "pkcs3" +#define NID_pkcs3 27 +#define OBJ_pkcs3 OBJ_pkcs,3L + +#define LN_dhKeyAgreement "dhKeyAgreement" +#define NID_dhKeyAgreement 28 +#define OBJ_dhKeyAgreement OBJ_pkcs3,1L + +#define SN_pkcs5 "pkcs5" +#define NID_pkcs5 187 +#define OBJ_pkcs5 OBJ_pkcs,5L + +#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +#define NID_pbeWithMD2AndDES_CBC 9 +#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L + +#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +#define NID_pbeWithMD5AndDES_CBC 10 +#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L + +#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +#define NID_pbeWithMD2AndRC2_CBC 168 +#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L + +#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" +#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" +#define NID_pbeWithMD5AndRC2_CBC 169 +#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L + +#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +#define NID_pbeWithSHA1AndDES_CBC 170 +#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L + +#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +#define NID_pbeWithSHA1AndRC2_CBC 68 +#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L + +#define LN_id_pbkdf2 "PBKDF2" +#define NID_id_pbkdf2 69 +#define OBJ_id_pbkdf2 OBJ_pkcs5,12L + +#define LN_pbes2 "PBES2" +#define NID_pbes2 161 +#define OBJ_pbes2 OBJ_pkcs5,13L + +#define LN_pbmac1 "PBMAC1" +#define NID_pbmac1 162 +#define OBJ_pbmac1 OBJ_pkcs5,14L + +#define SN_pkcs7 "pkcs7" +#define NID_pkcs7 20 +#define OBJ_pkcs7 OBJ_pkcs,7L + +#define LN_pkcs7_data "pkcs7-data" +#define NID_pkcs7_data 21 +#define OBJ_pkcs7_data OBJ_pkcs7,1L + +#define LN_pkcs7_signed "pkcs7-signedData" +#define NID_pkcs7_signed 22 +#define OBJ_pkcs7_signed OBJ_pkcs7,2L + +#define LN_pkcs7_enveloped "pkcs7-envelopedData" +#define NID_pkcs7_enveloped 23 +#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L + +#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" +#define NID_pkcs7_signedAndEnveloped 24 +#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L + +#define LN_pkcs7_digest "pkcs7-digestData" +#define NID_pkcs7_digest 25 +#define OBJ_pkcs7_digest OBJ_pkcs7,5L + +#define LN_pkcs7_encrypted "pkcs7-encryptedData" +#define NID_pkcs7_encrypted 26 +#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L + +#define SN_pkcs9 "pkcs9" +#define NID_pkcs9 47 +#define OBJ_pkcs9 OBJ_pkcs,9L + +#define LN_pkcs9_emailAddress "emailAddress" +#define NID_pkcs9_emailAddress 48 +#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L + +#define LN_pkcs9_unstructuredName "unstructuredName" +#define NID_pkcs9_unstructuredName 49 +#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L + +#define LN_pkcs9_contentType "contentType" +#define NID_pkcs9_contentType 50 +#define OBJ_pkcs9_contentType OBJ_pkcs9,3L + +#define LN_pkcs9_messageDigest "messageDigest" +#define NID_pkcs9_messageDigest 51 +#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L + +#define LN_pkcs9_signingTime "signingTime" +#define NID_pkcs9_signingTime 52 +#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L + +#define LN_pkcs9_countersignature "countersignature" +#define NID_pkcs9_countersignature 53 +#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L + +#define LN_pkcs9_challengePassword "challengePassword" +#define NID_pkcs9_challengePassword 54 +#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L + +#define LN_pkcs9_unstructuredAddress "unstructuredAddress" +#define NID_pkcs9_unstructuredAddress 55 +#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L + +#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" +#define NID_pkcs9_extCertAttributes 56 +#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L + +#define SN_ext_req "extReq" +#define LN_ext_req "Extension Request" +#define NID_ext_req 172 +#define OBJ_ext_req OBJ_pkcs9,14L + +#define SN_SMIMECapabilities "SMIME-CAPS" +#define LN_SMIMECapabilities "S/MIME Capabilities" +#define NID_SMIMECapabilities 167 +#define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +#define SN_SMIME "SMIME" +#define LN_SMIME "S/MIME" +#define NID_SMIME 188 +#define OBJ_SMIME OBJ_pkcs9,16L + +#define SN_id_smime_mod "id-smime-mod" +#define NID_id_smime_mod 189 +#define OBJ_id_smime_mod OBJ_SMIME,0L + +#define SN_id_smime_ct "id-smime-ct" +#define NID_id_smime_ct 190 +#define OBJ_id_smime_ct OBJ_SMIME,1L + +#define SN_id_smime_aa "id-smime-aa" +#define NID_id_smime_aa 191 +#define OBJ_id_smime_aa OBJ_SMIME,2L + +#define SN_id_smime_alg "id-smime-alg" +#define NID_id_smime_alg 192 +#define OBJ_id_smime_alg OBJ_SMIME,3L + +#define SN_id_smime_cd "id-smime-cd" +#define NID_id_smime_cd 193 +#define OBJ_id_smime_cd OBJ_SMIME,4L + +#define SN_id_smime_spq "id-smime-spq" +#define NID_id_smime_spq 194 +#define OBJ_id_smime_spq OBJ_SMIME,5L + +#define SN_id_smime_cti "id-smime-cti" +#define NID_id_smime_cti 195 +#define OBJ_id_smime_cti OBJ_SMIME,6L + +#define SN_id_smime_mod_cms "id-smime-mod-cms" +#define NID_id_smime_mod_cms 196 +#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L + +#define SN_id_smime_mod_ess "id-smime-mod-ess" +#define NID_id_smime_mod_ess 197 +#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L + +#define SN_id_smime_mod_oid "id-smime-mod-oid" +#define NID_id_smime_mod_oid 198 +#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L + +#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" +#define NID_id_smime_mod_msg_v3 199 +#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L + +#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" +#define NID_id_smime_mod_ets_eSignature_88 200 +#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L + +#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" +#define NID_id_smime_mod_ets_eSignature_97 201 +#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L + +#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" +#define NID_id_smime_mod_ets_eSigPolicy_88 202 +#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L + +#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" +#define NID_id_smime_mod_ets_eSigPolicy_97 203 +#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L + +#define SN_id_smime_ct_receipt "id-smime-ct-receipt" +#define NID_id_smime_ct_receipt 204 +#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L + +#define SN_id_smime_ct_authData "id-smime-ct-authData" +#define NID_id_smime_ct_authData 205 +#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L + +#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" +#define NID_id_smime_ct_publishCert 206 +#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L + +#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" +#define NID_id_smime_ct_TSTInfo 207 +#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L + +#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" +#define NID_id_smime_ct_TDTInfo 208 +#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L + +#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" +#define NID_id_smime_ct_contentInfo 209 +#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L + +#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" +#define NID_id_smime_ct_DVCSRequestData 210 +#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L + +#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" +#define NID_id_smime_ct_DVCSResponseData 211 +#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L + +#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" +#define NID_id_smime_ct_compressedData 786 +#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L + +#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" +#define NID_id_ct_asciiTextWithCRLF 787 +#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L + +#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" +#define NID_id_smime_aa_receiptRequest 212 +#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L + +#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" +#define NID_id_smime_aa_securityLabel 213 +#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L + +#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" +#define NID_id_smime_aa_mlExpandHistory 214 +#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L + +#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" +#define NID_id_smime_aa_contentHint 215 +#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L + +#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" +#define NID_id_smime_aa_msgSigDigest 216 +#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L + +#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" +#define NID_id_smime_aa_encapContentType 217 +#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L + +#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" +#define NID_id_smime_aa_contentIdentifier 218 +#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L + +#define SN_id_smime_aa_macValue "id-smime-aa-macValue" +#define NID_id_smime_aa_macValue 219 +#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L + +#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" +#define NID_id_smime_aa_equivalentLabels 220 +#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L + +#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" +#define NID_id_smime_aa_contentReference 221 +#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L + +#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" +#define NID_id_smime_aa_encrypKeyPref 222 +#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L + +#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" +#define NID_id_smime_aa_signingCertificate 223 +#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L + +#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" +#define NID_id_smime_aa_smimeEncryptCerts 224 +#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L + +#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" +#define NID_id_smime_aa_timeStampToken 225 +#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L + +#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" +#define NID_id_smime_aa_ets_sigPolicyId 226 +#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L + +#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" +#define NID_id_smime_aa_ets_commitmentType 227 +#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L + +#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" +#define NID_id_smime_aa_ets_signerLocation 228 +#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L + +#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" +#define NID_id_smime_aa_ets_signerAttr 229 +#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L + +#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" +#define NID_id_smime_aa_ets_otherSigCert 230 +#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L + +#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" +#define NID_id_smime_aa_ets_contentTimestamp 231 +#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L + +#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" +#define NID_id_smime_aa_ets_CertificateRefs 232 +#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L + +#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" +#define NID_id_smime_aa_ets_RevocationRefs 233 +#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L + +#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" +#define NID_id_smime_aa_ets_certValues 234 +#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L + +#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" +#define NID_id_smime_aa_ets_revocationValues 235 +#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L + +#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" +#define NID_id_smime_aa_ets_escTimeStamp 236 +#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L + +#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" +#define NID_id_smime_aa_ets_certCRLTimestamp 237 +#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L + +#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" +#define NID_id_smime_aa_ets_archiveTimeStamp 238 +#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L + +#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" +#define NID_id_smime_aa_signatureType 239 +#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L + +#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" +#define NID_id_smime_aa_dvcs_dvc 240 +#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L + +#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" +#define NID_id_smime_alg_ESDHwith3DES 241 +#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L + +#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" +#define NID_id_smime_alg_ESDHwithRC2 242 +#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L + +#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" +#define NID_id_smime_alg_3DESwrap 243 +#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L + +#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" +#define NID_id_smime_alg_RC2wrap 244 +#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L + +#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" +#define NID_id_smime_alg_ESDH 245 +#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L + +#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" +#define NID_id_smime_alg_CMS3DESwrap 246 +#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L + +#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" +#define NID_id_smime_alg_CMSRC2wrap 247 +#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L + +#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" +#define NID_id_alg_PWRI_KEK 893 +#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L + +#define SN_id_smime_cd_ldap "id-smime-cd-ldap" +#define NID_id_smime_cd_ldap 248 +#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L + +#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" +#define NID_id_smime_spq_ets_sqt_uri 249 +#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L + +#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" +#define NID_id_smime_spq_ets_sqt_unotice 250 +#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L + +#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" +#define NID_id_smime_cti_ets_proofOfOrigin 251 +#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L + +#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" +#define NID_id_smime_cti_ets_proofOfReceipt 252 +#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L + +#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" +#define NID_id_smime_cti_ets_proofOfDelivery 253 +#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L + +#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" +#define NID_id_smime_cti_ets_proofOfSender 254 +#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L + +#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" +#define NID_id_smime_cti_ets_proofOfApproval 255 +#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L + +#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" +#define NID_id_smime_cti_ets_proofOfCreation 256 +#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L + +#define LN_friendlyName "friendlyName" +#define NID_friendlyName 156 +#define OBJ_friendlyName OBJ_pkcs9,20L + +#define LN_localKeyID "localKeyID" +#define NID_localKeyID 157 +#define OBJ_localKeyID OBJ_pkcs9,21L + +#define SN_ms_csp_name "CSPName" +#define LN_ms_csp_name "Microsoft CSP Name" +#define NID_ms_csp_name 417 +#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L + +#define SN_LocalKeySet "LocalKeySet" +#define LN_LocalKeySet "Microsoft Local Key set" +#define NID_LocalKeySet 856 +#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L + +#define OBJ_certTypes OBJ_pkcs9,22L + +#define LN_x509Certificate "x509Certificate" +#define NID_x509Certificate 158 +#define OBJ_x509Certificate OBJ_certTypes,1L + +#define LN_sdsiCertificate "sdsiCertificate" +#define NID_sdsiCertificate 159 +#define OBJ_sdsiCertificate OBJ_certTypes,2L + +#define OBJ_crlTypes OBJ_pkcs9,23L + +#define LN_x509Crl "x509Crl" +#define NID_x509Crl 160 +#define OBJ_x509Crl OBJ_crlTypes,1L + +#define OBJ_pkcs12 OBJ_pkcs,12L + +#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L + +#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" +#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" +#define NID_pbe_WithSHA1And128BitRC4 144 +#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L + +#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" +#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" +#define NID_pbe_WithSHA1And40BitRC4 145 +#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L + +#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" +#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 +#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L + +#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" +#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 +#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L + +#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" +#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" +#define NID_pbe_WithSHA1And128BitRC2_CBC 148 +#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L + +#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" +#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" +#define NID_pbe_WithSHA1And40BitRC2_CBC 149 +#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L + +#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L + +#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L + +#define LN_keyBag "keyBag" +#define NID_keyBag 150 +#define OBJ_keyBag OBJ_pkcs12_BagIds,1L + +#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" +#define NID_pkcs8ShroudedKeyBag 151 +#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L + +#define LN_certBag "certBag" +#define NID_certBag 152 +#define OBJ_certBag OBJ_pkcs12_BagIds,3L + +#define LN_crlBag "crlBag" +#define NID_crlBag 153 +#define OBJ_crlBag OBJ_pkcs12_BagIds,4L + +#define LN_secretBag "secretBag" +#define NID_secretBag 154 +#define OBJ_secretBag OBJ_pkcs12_BagIds,5L + +#define LN_safeContentsBag "safeContentsBag" +#define NID_safeContentsBag 155 +#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L + +#define SN_md2 "MD2" +#define LN_md2 "md2" +#define NID_md2 3 +#define OBJ_md2 OBJ_rsadsi,2L,2L + +#define SN_md4 "MD4" +#define LN_md4 "md4" +#define NID_md4 257 +#define OBJ_md4 OBJ_rsadsi,2L,4L + +#define SN_md5 "MD5" +#define LN_md5 "md5" +#define NID_md5 4 +#define OBJ_md5 OBJ_rsadsi,2L,5L + +#define SN_md5_sha1 "MD5-SHA1" +#define LN_md5_sha1 "md5-sha1" +#define NID_md5_sha1 114 + +#define LN_hmacWithMD5 "hmacWithMD5" +#define NID_hmacWithMD5 797 +#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L + +#define LN_hmacWithSHA1 "hmacWithSHA1" +#define NID_hmacWithSHA1 163 +#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +#define LN_hmacWithSHA224 "hmacWithSHA224" +#define NID_hmacWithSHA224 798 +#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L + +#define LN_hmacWithSHA256 "hmacWithSHA256" +#define NID_hmacWithSHA256 799 +#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L + +#define LN_hmacWithSHA384 "hmacWithSHA384" +#define NID_hmacWithSHA384 800 +#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L + +#define LN_hmacWithSHA512 "hmacWithSHA512" +#define NID_hmacWithSHA512 801 +#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L + +#define SN_rc2_cbc "RC2-CBC" +#define LN_rc2_cbc "rc2-cbc" +#define NID_rc2_cbc 37 +#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L + +#define SN_rc2_ecb "RC2-ECB" +#define LN_rc2_ecb "rc2-ecb" +#define NID_rc2_ecb 38 + +#define SN_rc2_cfb64 "RC2-CFB" +#define LN_rc2_cfb64 "rc2-cfb" +#define NID_rc2_cfb64 39 + +#define SN_rc2_ofb64 "RC2-OFB" +#define LN_rc2_ofb64 "rc2-ofb" +#define NID_rc2_ofb64 40 + +#define SN_rc2_40_cbc "RC2-40-CBC" +#define LN_rc2_40_cbc "rc2-40-cbc" +#define NID_rc2_40_cbc 98 + +#define SN_rc2_64_cbc "RC2-64-CBC" +#define LN_rc2_64_cbc "rc2-64-cbc" +#define NID_rc2_64_cbc 166 + +#define SN_rc4 "RC4" +#define LN_rc4 "rc4" +#define NID_rc4 5 +#define OBJ_rc4 OBJ_rsadsi,3L,4L + +#define SN_rc4_40 "RC4-40" +#define LN_rc4_40 "rc4-40" +#define NID_rc4_40 97 + +#define SN_des_ede3_cbc "DES-EDE3-CBC" +#define LN_des_ede3_cbc "des-ede3-cbc" +#define NID_des_ede3_cbc 44 +#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L + +#define SN_rc5_cbc "RC5-CBC" +#define LN_rc5_cbc "rc5-cbc" +#define NID_rc5_cbc 120 +#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L + +#define SN_rc5_ecb "RC5-ECB" +#define LN_rc5_ecb "rc5-ecb" +#define NID_rc5_ecb 121 + +#define SN_rc5_cfb64 "RC5-CFB" +#define LN_rc5_cfb64 "rc5-cfb" +#define NID_rc5_cfb64 122 + +#define SN_rc5_ofb64 "RC5-OFB" +#define LN_rc5_ofb64 "rc5-ofb" +#define NID_rc5_ofb64 123 + +#define SN_ms_ext_req "msExtReq" +#define LN_ms_ext_req "Microsoft Extension Request" +#define NID_ms_ext_req 171 +#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +#define SN_ms_code_ind "msCodeInd" +#define LN_ms_code_ind "Microsoft Individual Code Signing" +#define NID_ms_code_ind 134 +#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L + +#define SN_ms_code_com "msCodeCom" +#define LN_ms_code_com "Microsoft Commercial Code Signing" +#define NID_ms_code_com 135 +#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L + +#define SN_ms_ctl_sign "msCTLSign" +#define LN_ms_ctl_sign "Microsoft Trust List Signing" +#define NID_ms_ctl_sign 136 +#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L + +#define SN_ms_sgc "msSGC" +#define LN_ms_sgc "Microsoft Server Gated Crypto" +#define NID_ms_sgc 137 +#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L + +#define SN_ms_efs "msEFS" +#define LN_ms_efs "Microsoft Encrypted File System" +#define NID_ms_efs 138 +#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L + +#define SN_ms_smartcard_login "msSmartcardLogin" +#define LN_ms_smartcard_login "Microsoft Smartcardlogin" +#define NID_ms_smartcard_login 648 +#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L + +#define SN_ms_upn "msUPN" +#define LN_ms_upn "Microsoft Universal Principal Name" +#define NID_ms_upn 649 +#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L + +#define SN_idea_cbc "IDEA-CBC" +#define LN_idea_cbc "idea-cbc" +#define NID_idea_cbc 34 +#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L + +#define SN_idea_ecb "IDEA-ECB" +#define LN_idea_ecb "idea-ecb" +#define NID_idea_ecb 36 + +#define SN_idea_cfb64 "IDEA-CFB" +#define LN_idea_cfb64 "idea-cfb" +#define NID_idea_cfb64 35 + +#define SN_idea_ofb64 "IDEA-OFB" +#define LN_idea_ofb64 "idea-ofb" +#define NID_idea_ofb64 46 + +#define SN_bf_cbc "BF-CBC" +#define LN_bf_cbc "bf-cbc" +#define NID_bf_cbc 91 +#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L + +#define SN_bf_ecb "BF-ECB" +#define LN_bf_ecb "bf-ecb" +#define NID_bf_ecb 92 + +#define SN_bf_cfb64 "BF-CFB" +#define LN_bf_cfb64 "bf-cfb" +#define NID_bf_cfb64 93 + +#define SN_bf_ofb64 "BF-OFB" +#define LN_bf_ofb64 "bf-ofb" +#define NID_bf_ofb64 94 + +#define SN_id_pkix "PKIX" +#define NID_id_pkix 127 +#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +#define SN_id_pkix_mod "id-pkix-mod" +#define NID_id_pkix_mod 258 +#define OBJ_id_pkix_mod OBJ_id_pkix,0L + +#define SN_id_pe "id-pe" +#define NID_id_pe 175 +#define OBJ_id_pe OBJ_id_pkix,1L + +#define SN_id_qt "id-qt" +#define NID_id_qt 259 +#define OBJ_id_qt OBJ_id_pkix,2L + +#define SN_id_kp "id-kp" +#define NID_id_kp 128 +#define OBJ_id_kp OBJ_id_pkix,3L + +#define SN_id_it "id-it" +#define NID_id_it 260 +#define OBJ_id_it OBJ_id_pkix,4L + +#define SN_id_pkip "id-pkip" +#define NID_id_pkip 261 +#define OBJ_id_pkip OBJ_id_pkix,5L + +#define SN_id_alg "id-alg" +#define NID_id_alg 262 +#define OBJ_id_alg OBJ_id_pkix,6L + +#define SN_id_cmc "id-cmc" +#define NID_id_cmc 263 +#define OBJ_id_cmc OBJ_id_pkix,7L + +#define SN_id_on "id-on" +#define NID_id_on 264 +#define OBJ_id_on OBJ_id_pkix,8L + +#define SN_id_pda "id-pda" +#define NID_id_pda 265 +#define OBJ_id_pda OBJ_id_pkix,9L + +#define SN_id_aca "id-aca" +#define NID_id_aca 266 +#define OBJ_id_aca OBJ_id_pkix,10L + +#define SN_id_qcs "id-qcs" +#define NID_id_qcs 267 +#define OBJ_id_qcs OBJ_id_pkix,11L + +#define SN_id_cct "id-cct" +#define NID_id_cct 268 +#define OBJ_id_cct OBJ_id_pkix,12L + +#define SN_id_ppl "id-ppl" +#define NID_id_ppl 662 +#define OBJ_id_ppl OBJ_id_pkix,21L + +#define SN_id_ad "id-ad" +#define NID_id_ad 176 +#define OBJ_id_ad OBJ_id_pkix,48L + +#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" +#define NID_id_pkix1_explicit_88 269 +#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L + +#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" +#define NID_id_pkix1_implicit_88 270 +#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L + +#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" +#define NID_id_pkix1_explicit_93 271 +#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L + +#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" +#define NID_id_pkix1_implicit_93 272 +#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L + +#define SN_id_mod_crmf "id-mod-crmf" +#define NID_id_mod_crmf 273 +#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L + +#define SN_id_mod_cmc "id-mod-cmc" +#define NID_id_mod_cmc 274 +#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L + +#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" +#define NID_id_mod_kea_profile_88 275 +#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L + +#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" +#define NID_id_mod_kea_profile_93 276 +#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L + +#define SN_id_mod_cmp "id-mod-cmp" +#define NID_id_mod_cmp 277 +#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L + +#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" +#define NID_id_mod_qualified_cert_88 278 +#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L + +#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" +#define NID_id_mod_qualified_cert_93 279 +#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L + +#define SN_id_mod_attribute_cert "id-mod-attribute-cert" +#define NID_id_mod_attribute_cert 280 +#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L + +#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" +#define NID_id_mod_timestamp_protocol 281 +#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L + +#define SN_id_mod_ocsp "id-mod-ocsp" +#define NID_id_mod_ocsp 282 +#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L + +#define SN_id_mod_dvcs "id-mod-dvcs" +#define NID_id_mod_dvcs 283 +#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L + +#define SN_id_mod_cmp2000 "id-mod-cmp2000" +#define NID_id_mod_cmp2000 284 +#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L + +#define SN_info_access "authorityInfoAccess" +#define LN_info_access "Authority Information Access" +#define NID_info_access 177 +#define OBJ_info_access OBJ_id_pe,1L + +#define SN_biometricInfo "biometricInfo" +#define LN_biometricInfo "Biometric Info" +#define NID_biometricInfo 285 +#define OBJ_biometricInfo OBJ_id_pe,2L + +#define SN_qcStatements "qcStatements" +#define NID_qcStatements 286 +#define OBJ_qcStatements OBJ_id_pe,3L + +#define SN_ac_auditEntity "ac-auditEntity" +#define NID_ac_auditEntity 287 +#define OBJ_ac_auditEntity OBJ_id_pe,4L + +#define SN_ac_targeting "ac-targeting" +#define NID_ac_targeting 288 +#define OBJ_ac_targeting OBJ_id_pe,5L + +#define SN_aaControls "aaControls" +#define NID_aaControls 289 +#define OBJ_aaControls OBJ_id_pe,6L + +#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" +#define NID_sbgp_ipAddrBlock 290 +#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L + +#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" +#define NID_sbgp_autonomousSysNum 291 +#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L + +#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" +#define NID_sbgp_routerIdentifier 292 +#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L + +#define SN_ac_proxying "ac-proxying" +#define NID_ac_proxying 397 +#define OBJ_ac_proxying OBJ_id_pe,10L + +#define SN_sinfo_access "subjectInfoAccess" +#define LN_sinfo_access "Subject Information Access" +#define NID_sinfo_access 398 +#define OBJ_sinfo_access OBJ_id_pe,11L + +#define SN_proxyCertInfo "proxyCertInfo" +#define LN_proxyCertInfo "Proxy Certificate Information" +#define NID_proxyCertInfo 663 +#define OBJ_proxyCertInfo OBJ_id_pe,14L + +#define SN_id_qt_cps "id-qt-cps" +#define LN_id_qt_cps "Policy Qualifier CPS" +#define NID_id_qt_cps 164 +#define OBJ_id_qt_cps OBJ_id_qt,1L + +#define SN_id_qt_unotice "id-qt-unotice" +#define LN_id_qt_unotice "Policy Qualifier User Notice" +#define NID_id_qt_unotice 165 +#define OBJ_id_qt_unotice OBJ_id_qt,2L + +#define SN_textNotice "textNotice" +#define NID_textNotice 293 +#define OBJ_textNotice OBJ_id_qt,3L + +#define SN_server_auth "serverAuth" +#define LN_server_auth "TLS Web Server Authentication" +#define NID_server_auth 129 +#define OBJ_server_auth OBJ_id_kp,1L + +#define SN_client_auth "clientAuth" +#define LN_client_auth "TLS Web Client Authentication" +#define NID_client_auth 130 +#define OBJ_client_auth OBJ_id_kp,2L + +#define SN_code_sign "codeSigning" +#define LN_code_sign "Code Signing" +#define NID_code_sign 131 +#define OBJ_code_sign OBJ_id_kp,3L + +#define SN_email_protect "emailProtection" +#define LN_email_protect "E-mail Protection" +#define NID_email_protect 132 +#define OBJ_email_protect OBJ_id_kp,4L + +#define SN_ipsecEndSystem "ipsecEndSystem" +#define LN_ipsecEndSystem "IPSec End System" +#define NID_ipsecEndSystem 294 +#define OBJ_ipsecEndSystem OBJ_id_kp,5L + +#define SN_ipsecTunnel "ipsecTunnel" +#define LN_ipsecTunnel "IPSec Tunnel" +#define NID_ipsecTunnel 295 +#define OBJ_ipsecTunnel OBJ_id_kp,6L + +#define SN_ipsecUser "ipsecUser" +#define LN_ipsecUser "IPSec User" +#define NID_ipsecUser 296 +#define OBJ_ipsecUser OBJ_id_kp,7L + +#define SN_time_stamp "timeStamping" +#define LN_time_stamp "Time Stamping" +#define NID_time_stamp 133 +#define OBJ_time_stamp OBJ_id_kp,8L + +#define SN_OCSP_sign "OCSPSigning" +#define LN_OCSP_sign "OCSP Signing" +#define NID_OCSP_sign 180 +#define OBJ_OCSP_sign OBJ_id_kp,9L + +#define SN_dvcs "DVCS" +#define LN_dvcs "dvcs" +#define NID_dvcs 297 +#define OBJ_dvcs OBJ_id_kp,10L + +#define SN_id_it_caProtEncCert "id-it-caProtEncCert" +#define NID_id_it_caProtEncCert 298 +#define OBJ_id_it_caProtEncCert OBJ_id_it,1L + +#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" +#define NID_id_it_signKeyPairTypes 299 +#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L + +#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" +#define NID_id_it_encKeyPairTypes 300 +#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L + +#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" +#define NID_id_it_preferredSymmAlg 301 +#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L + +#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" +#define NID_id_it_caKeyUpdateInfo 302 +#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L + +#define SN_id_it_currentCRL "id-it-currentCRL" +#define NID_id_it_currentCRL 303 +#define OBJ_id_it_currentCRL OBJ_id_it,6L + +#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" +#define NID_id_it_unsupportedOIDs 304 +#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L + +#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" +#define NID_id_it_subscriptionRequest 305 +#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L + +#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" +#define NID_id_it_subscriptionResponse 306 +#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L + +#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" +#define NID_id_it_keyPairParamReq 307 +#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L + +#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" +#define NID_id_it_keyPairParamRep 308 +#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L + +#define SN_id_it_revPassphrase "id-it-revPassphrase" +#define NID_id_it_revPassphrase 309 +#define OBJ_id_it_revPassphrase OBJ_id_it,12L + +#define SN_id_it_implicitConfirm "id-it-implicitConfirm" +#define NID_id_it_implicitConfirm 310 +#define OBJ_id_it_implicitConfirm OBJ_id_it,13L + +#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" +#define NID_id_it_confirmWaitTime 311 +#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L + +#define SN_id_it_origPKIMessage "id-it-origPKIMessage" +#define NID_id_it_origPKIMessage 312 +#define OBJ_id_it_origPKIMessage OBJ_id_it,15L + +#define SN_id_it_suppLangTags "id-it-suppLangTags" +#define NID_id_it_suppLangTags 784 +#define OBJ_id_it_suppLangTags OBJ_id_it,16L + +#define SN_id_regCtrl "id-regCtrl" +#define NID_id_regCtrl 313 +#define OBJ_id_regCtrl OBJ_id_pkip,1L + +#define SN_id_regInfo "id-regInfo" +#define NID_id_regInfo 314 +#define OBJ_id_regInfo OBJ_id_pkip,2L + +#define SN_id_regCtrl_regToken "id-regCtrl-regToken" +#define NID_id_regCtrl_regToken 315 +#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L + +#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" +#define NID_id_regCtrl_authenticator 316 +#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L + +#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" +#define NID_id_regCtrl_pkiPublicationInfo 317 +#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L + +#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" +#define NID_id_regCtrl_pkiArchiveOptions 318 +#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L + +#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" +#define NID_id_regCtrl_oldCertID 319 +#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L + +#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" +#define NID_id_regCtrl_protocolEncrKey 320 +#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L + +#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" +#define NID_id_regInfo_utf8Pairs 321 +#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L + +#define SN_id_regInfo_certReq "id-regInfo-certReq" +#define NID_id_regInfo_certReq 322 +#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L + +#define SN_id_alg_des40 "id-alg-des40" +#define NID_id_alg_des40 323 +#define OBJ_id_alg_des40 OBJ_id_alg,1L + +#define SN_id_alg_noSignature "id-alg-noSignature" +#define NID_id_alg_noSignature 324 +#define OBJ_id_alg_noSignature OBJ_id_alg,2L + +#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" +#define NID_id_alg_dh_sig_hmac_sha1 325 +#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L + +#define SN_id_alg_dh_pop "id-alg-dh-pop" +#define NID_id_alg_dh_pop 326 +#define OBJ_id_alg_dh_pop OBJ_id_alg,4L + +#define SN_id_cmc_statusInfo "id-cmc-statusInfo" +#define NID_id_cmc_statusInfo 327 +#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L + +#define SN_id_cmc_identification "id-cmc-identification" +#define NID_id_cmc_identification 328 +#define OBJ_id_cmc_identification OBJ_id_cmc,2L + +#define SN_id_cmc_identityProof "id-cmc-identityProof" +#define NID_id_cmc_identityProof 329 +#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L + +#define SN_id_cmc_dataReturn "id-cmc-dataReturn" +#define NID_id_cmc_dataReturn 330 +#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L + +#define SN_id_cmc_transactionId "id-cmc-transactionId" +#define NID_id_cmc_transactionId 331 +#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L + +#define SN_id_cmc_senderNonce "id-cmc-senderNonce" +#define NID_id_cmc_senderNonce 332 +#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L + +#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" +#define NID_id_cmc_recipientNonce 333 +#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L + +#define SN_id_cmc_addExtensions "id-cmc-addExtensions" +#define NID_id_cmc_addExtensions 334 +#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L + +#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" +#define NID_id_cmc_encryptedPOP 335 +#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L + +#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" +#define NID_id_cmc_decryptedPOP 336 +#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L + +#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" +#define NID_id_cmc_lraPOPWitness 337 +#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L + +#define SN_id_cmc_getCert "id-cmc-getCert" +#define NID_id_cmc_getCert 338 +#define OBJ_id_cmc_getCert OBJ_id_cmc,15L + +#define SN_id_cmc_getCRL "id-cmc-getCRL" +#define NID_id_cmc_getCRL 339 +#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L + +#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" +#define NID_id_cmc_revokeRequest 340 +#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L + +#define SN_id_cmc_regInfo "id-cmc-regInfo" +#define NID_id_cmc_regInfo 341 +#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L + +#define SN_id_cmc_responseInfo "id-cmc-responseInfo" +#define NID_id_cmc_responseInfo 342 +#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L + +#define SN_id_cmc_queryPending "id-cmc-queryPending" +#define NID_id_cmc_queryPending 343 +#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L + +#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" +#define NID_id_cmc_popLinkRandom 344 +#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L + +#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" +#define NID_id_cmc_popLinkWitness 345 +#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L + +#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" +#define NID_id_cmc_confirmCertAcceptance 346 +#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L + +#define SN_id_on_personalData "id-on-personalData" +#define NID_id_on_personalData 347 +#define OBJ_id_on_personalData OBJ_id_on,1L + +#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" +#define LN_id_on_permanentIdentifier "Permanent Identifier" +#define NID_id_on_permanentIdentifier 858 +#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L + +#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" +#define NID_id_pda_dateOfBirth 348 +#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L + +#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" +#define NID_id_pda_placeOfBirth 349 +#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L + +#define SN_id_pda_gender "id-pda-gender" +#define NID_id_pda_gender 351 +#define OBJ_id_pda_gender OBJ_id_pda,3L + +#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" +#define NID_id_pda_countryOfCitizenship 352 +#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L + +#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" +#define NID_id_pda_countryOfResidence 353 +#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L + +#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" +#define NID_id_aca_authenticationInfo 354 +#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L + +#define SN_id_aca_accessIdentity "id-aca-accessIdentity" +#define NID_id_aca_accessIdentity 355 +#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L + +#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" +#define NID_id_aca_chargingIdentity 356 +#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L + +#define SN_id_aca_group "id-aca-group" +#define NID_id_aca_group 357 +#define OBJ_id_aca_group OBJ_id_aca,4L + +#define SN_id_aca_role "id-aca-role" +#define NID_id_aca_role 358 +#define OBJ_id_aca_role OBJ_id_aca,5L + +#define SN_id_aca_encAttrs "id-aca-encAttrs" +#define NID_id_aca_encAttrs 399 +#define OBJ_id_aca_encAttrs OBJ_id_aca,6L + +#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" +#define NID_id_qcs_pkixQCSyntax_v1 359 +#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L + +#define SN_id_cct_crs "id-cct-crs" +#define NID_id_cct_crs 360 +#define OBJ_id_cct_crs OBJ_id_cct,1L + +#define SN_id_cct_PKIData "id-cct-PKIData" +#define NID_id_cct_PKIData 361 +#define OBJ_id_cct_PKIData OBJ_id_cct,2L + +#define SN_id_cct_PKIResponse "id-cct-PKIResponse" +#define NID_id_cct_PKIResponse 362 +#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L + +#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" +#define LN_id_ppl_anyLanguage "Any language" +#define NID_id_ppl_anyLanguage 664 +#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L + +#define SN_id_ppl_inheritAll "id-ppl-inheritAll" +#define LN_id_ppl_inheritAll "Inherit all" +#define NID_id_ppl_inheritAll 665 +#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L + +#define SN_Independent "id-ppl-independent" +#define LN_Independent "Independent" +#define NID_Independent 667 +#define OBJ_Independent OBJ_id_ppl,2L + +#define SN_ad_OCSP "OCSP" +#define LN_ad_OCSP "OCSP" +#define NID_ad_OCSP 178 +#define OBJ_ad_OCSP OBJ_id_ad,1L + +#define SN_ad_ca_issuers "caIssuers" +#define LN_ad_ca_issuers "CA Issuers" +#define NID_ad_ca_issuers 179 +#define OBJ_ad_ca_issuers OBJ_id_ad,2L + +#define SN_ad_timeStamping "ad_timestamping" +#define LN_ad_timeStamping "AD Time Stamping" +#define NID_ad_timeStamping 363 +#define OBJ_ad_timeStamping OBJ_id_ad,3L + +#define SN_ad_dvcs "AD_DVCS" +#define LN_ad_dvcs "ad dvcs" +#define NID_ad_dvcs 364 +#define OBJ_ad_dvcs OBJ_id_ad,4L + +#define SN_caRepository "caRepository" +#define LN_caRepository "CA Repository" +#define NID_caRepository 785 +#define OBJ_caRepository OBJ_id_ad,5L + +#define OBJ_id_pkix_OCSP OBJ_ad_OCSP + +#define SN_id_pkix_OCSP_basic "basicOCSPResponse" +#define LN_id_pkix_OCSP_basic "Basic OCSP Response" +#define NID_id_pkix_OCSP_basic 365 +#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L + +#define SN_id_pkix_OCSP_Nonce "Nonce" +#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" +#define NID_id_pkix_OCSP_Nonce 366 +#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L + +#define SN_id_pkix_OCSP_CrlID "CrlID" +#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" +#define NID_id_pkix_OCSP_CrlID 367 +#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L + +#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" +#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" +#define NID_id_pkix_OCSP_acceptableResponses 368 +#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L + +#define SN_id_pkix_OCSP_noCheck "noCheck" +#define LN_id_pkix_OCSP_noCheck "OCSP No Check" +#define NID_id_pkix_OCSP_noCheck 369 +#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L + +#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" +#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" +#define NID_id_pkix_OCSP_archiveCutoff 370 +#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L + +#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" +#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" +#define NID_id_pkix_OCSP_serviceLocator 371 +#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L + +#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" +#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" +#define NID_id_pkix_OCSP_extendedStatus 372 +#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L + +#define SN_id_pkix_OCSP_valid "valid" +#define NID_id_pkix_OCSP_valid 373 +#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L + +#define SN_id_pkix_OCSP_path "path" +#define NID_id_pkix_OCSP_path 374 +#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L + +#define SN_id_pkix_OCSP_trustRoot "trustRoot" +#define LN_id_pkix_OCSP_trustRoot "Trust Root" +#define NID_id_pkix_OCSP_trustRoot 375 +#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L + +#define SN_algorithm "algorithm" +#define LN_algorithm "algorithm" +#define NID_algorithm 376 +#define OBJ_algorithm 1L,3L,14L,3L,2L + +#define SN_md5WithRSA "RSA-NP-MD5" +#define LN_md5WithRSA "md5WithRSA" +#define NID_md5WithRSA 104 +#define OBJ_md5WithRSA OBJ_algorithm,3L + +#define SN_des_ecb "DES-ECB" +#define LN_des_ecb "des-ecb" +#define NID_des_ecb 29 +#define OBJ_des_ecb OBJ_algorithm,6L + +#define SN_des_cbc "DES-CBC" +#define LN_des_cbc "des-cbc" +#define NID_des_cbc 31 +#define OBJ_des_cbc OBJ_algorithm,7L + +#define SN_des_ofb64 "DES-OFB" +#define LN_des_ofb64 "des-ofb" +#define NID_des_ofb64 45 +#define OBJ_des_ofb64 OBJ_algorithm,8L + +#define SN_des_cfb64 "DES-CFB" +#define LN_des_cfb64 "des-cfb" +#define NID_des_cfb64 30 +#define OBJ_des_cfb64 OBJ_algorithm,9L + +#define SN_rsaSignature "rsaSignature" +#define NID_rsaSignature 377 +#define OBJ_rsaSignature OBJ_algorithm,11L + +#define SN_dsa_2 "DSA-old" +#define LN_dsa_2 "dsaEncryption-old" +#define NID_dsa_2 67 +#define OBJ_dsa_2 OBJ_algorithm,12L + +#define SN_dsaWithSHA "DSA-SHA" +#define LN_dsaWithSHA "dsaWithSHA" +#define NID_dsaWithSHA 66 +#define OBJ_dsaWithSHA OBJ_algorithm,13L + +#define SN_shaWithRSAEncryption "RSA-SHA" +#define LN_shaWithRSAEncryption "shaWithRSAEncryption" +#define NID_shaWithRSAEncryption 42 +#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +#define SN_des_ede_ecb "DES-EDE" +#define LN_des_ede_ecb "des-ede" +#define NID_des_ede_ecb 32 +#define OBJ_des_ede_ecb OBJ_algorithm,17L + +#define SN_des_ede3_ecb "DES-EDE3" +#define LN_des_ede3_ecb "des-ede3" +#define NID_des_ede3_ecb 33 + +#define SN_des_ede_cbc "DES-EDE-CBC" +#define LN_des_ede_cbc "des-ede-cbc" +#define NID_des_ede_cbc 43 + +#define SN_des_ede_cfb64 "DES-EDE-CFB" +#define LN_des_ede_cfb64 "des-ede-cfb" +#define NID_des_ede_cfb64 60 + +#define SN_des_ede3_cfb64 "DES-EDE3-CFB" +#define LN_des_ede3_cfb64 "des-ede3-cfb" +#define NID_des_ede3_cfb64 61 + +#define SN_des_ede_ofb64 "DES-EDE-OFB" +#define LN_des_ede_ofb64 "des-ede-ofb" +#define NID_des_ede_ofb64 62 + +#define SN_des_ede3_ofb64 "DES-EDE3-OFB" +#define LN_des_ede3_ofb64 "des-ede3-ofb" +#define NID_des_ede3_ofb64 63 + +#define SN_desx_cbc "DESX-CBC" +#define LN_desx_cbc "desx-cbc" +#define NID_desx_cbc 80 + +#define SN_sha "SHA" +#define LN_sha "sha" +#define NID_sha 41 +#define OBJ_sha OBJ_algorithm,18L + +#define SN_sha1 "SHA1" +#define LN_sha1 "sha1" +#define NID_sha1 64 +#define OBJ_sha1 OBJ_algorithm,26L + +#define SN_dsaWithSHA1_2 "DSA-SHA1-old" +#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +#define NID_dsaWithSHA1_2 70 +#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +#define SN_sha1WithRSA "RSA-SHA1-2" +#define LN_sha1WithRSA "sha1WithRSA" +#define NID_sha1WithRSA 115 +#define OBJ_sha1WithRSA OBJ_algorithm,29L + +#define SN_ripemd160 "RIPEMD160" +#define LN_ripemd160 "ripemd160" +#define NID_ripemd160 117 +#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +#define SN_ripemd160WithRSA "RSA-RIPEMD160" +#define LN_ripemd160WithRSA "ripemd160WithRSA" +#define NID_ripemd160WithRSA 119 +#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +#define SN_sxnet "SXNetID" +#define LN_sxnet "Strong Extranet ID" +#define NID_sxnet 143 +#define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +#define SN_X500 "X500" +#define LN_X500 "directory services (X.500)" +#define NID_X500 11 +#define OBJ_X500 2L,5L + +#define SN_X509 "X509" +#define NID_X509 12 +#define OBJ_X509 OBJ_X500,4L + +#define SN_commonName "CN" +#define LN_commonName "commonName" +#define NID_commonName 13 +#define OBJ_commonName OBJ_X509,3L + +#define SN_surname "SN" +#define LN_surname "surname" +#define NID_surname 100 +#define OBJ_surname OBJ_X509,4L + +#define LN_serialNumber "serialNumber" +#define NID_serialNumber 105 +#define OBJ_serialNumber OBJ_X509,5L + +#define SN_countryName "C" +#define LN_countryName "countryName" +#define NID_countryName 14 +#define OBJ_countryName OBJ_X509,6L + +#define SN_localityName "L" +#define LN_localityName "localityName" +#define NID_localityName 15 +#define OBJ_localityName OBJ_X509,7L + +#define SN_stateOrProvinceName "ST" +#define LN_stateOrProvinceName "stateOrProvinceName" +#define NID_stateOrProvinceName 16 +#define OBJ_stateOrProvinceName OBJ_X509,8L + +#define SN_streetAddress "street" +#define LN_streetAddress "streetAddress" +#define NID_streetAddress 660 +#define OBJ_streetAddress OBJ_X509,9L + +#define SN_organizationName "O" +#define LN_organizationName "organizationName" +#define NID_organizationName 17 +#define OBJ_organizationName OBJ_X509,10L + +#define SN_organizationalUnitName "OU" +#define LN_organizationalUnitName "organizationalUnitName" +#define NID_organizationalUnitName 18 +#define OBJ_organizationalUnitName OBJ_X509,11L + +#define SN_title "title" +#define LN_title "title" +#define NID_title 106 +#define OBJ_title OBJ_X509,12L + +#define LN_description "description" +#define NID_description 107 +#define OBJ_description OBJ_X509,13L + +#define LN_searchGuide "searchGuide" +#define NID_searchGuide 859 +#define OBJ_searchGuide OBJ_X509,14L + +#define LN_businessCategory "businessCategory" +#define NID_businessCategory 860 +#define OBJ_businessCategory OBJ_X509,15L + +#define LN_postalAddress "postalAddress" +#define NID_postalAddress 861 +#define OBJ_postalAddress OBJ_X509,16L + +#define LN_postalCode "postalCode" +#define NID_postalCode 661 +#define OBJ_postalCode OBJ_X509,17L + +#define LN_postOfficeBox "postOfficeBox" +#define NID_postOfficeBox 862 +#define OBJ_postOfficeBox OBJ_X509,18L + +#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" +#define NID_physicalDeliveryOfficeName 863 +#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L + +#define LN_telephoneNumber "telephoneNumber" +#define NID_telephoneNumber 864 +#define OBJ_telephoneNumber OBJ_X509,20L + +#define LN_telexNumber "telexNumber" +#define NID_telexNumber 865 +#define OBJ_telexNumber OBJ_X509,21L + +#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" +#define NID_teletexTerminalIdentifier 866 +#define OBJ_teletexTerminalIdentifier OBJ_X509,22L + +#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" +#define NID_facsimileTelephoneNumber 867 +#define OBJ_facsimileTelephoneNumber OBJ_X509,23L + +#define LN_x121Address "x121Address" +#define NID_x121Address 868 +#define OBJ_x121Address OBJ_X509,24L + +#define LN_internationaliSDNNumber "internationaliSDNNumber" +#define NID_internationaliSDNNumber 869 +#define OBJ_internationaliSDNNumber OBJ_X509,25L + +#define LN_registeredAddress "registeredAddress" +#define NID_registeredAddress 870 +#define OBJ_registeredAddress OBJ_X509,26L + +#define LN_destinationIndicator "destinationIndicator" +#define NID_destinationIndicator 871 +#define OBJ_destinationIndicator OBJ_X509,27L + +#define LN_preferredDeliveryMethod "preferredDeliveryMethod" +#define NID_preferredDeliveryMethod 872 +#define OBJ_preferredDeliveryMethod OBJ_X509,28L + +#define LN_presentationAddress "presentationAddress" +#define NID_presentationAddress 873 +#define OBJ_presentationAddress OBJ_X509,29L + +#define LN_supportedApplicationContext "supportedApplicationContext" +#define NID_supportedApplicationContext 874 +#define OBJ_supportedApplicationContext OBJ_X509,30L + +#define SN_member "member" +#define NID_member 875 +#define OBJ_member OBJ_X509,31L + +#define SN_owner "owner" +#define NID_owner 876 +#define OBJ_owner OBJ_X509,32L + +#define LN_roleOccupant "roleOccupant" +#define NID_roleOccupant 877 +#define OBJ_roleOccupant OBJ_X509,33L + +#define SN_seeAlso "seeAlso" +#define NID_seeAlso 878 +#define OBJ_seeAlso OBJ_X509,34L + +#define LN_userPassword "userPassword" +#define NID_userPassword 879 +#define OBJ_userPassword OBJ_X509,35L + +#define LN_userCertificate "userCertificate" +#define NID_userCertificate 880 +#define OBJ_userCertificate OBJ_X509,36L + +#define LN_cACertificate "cACertificate" +#define NID_cACertificate 881 +#define OBJ_cACertificate OBJ_X509,37L + +#define LN_authorityRevocationList "authorityRevocationList" +#define NID_authorityRevocationList 882 +#define OBJ_authorityRevocationList OBJ_X509,38L + +#define LN_certificateRevocationList "certificateRevocationList" +#define NID_certificateRevocationList 883 +#define OBJ_certificateRevocationList OBJ_X509,39L + +#define LN_crossCertificatePair "crossCertificatePair" +#define NID_crossCertificatePair 884 +#define OBJ_crossCertificatePair OBJ_X509,40L + +#define SN_name "name" +#define LN_name "name" +#define NID_name 173 +#define OBJ_name OBJ_X509,41L + +#define SN_givenName "GN" +#define LN_givenName "givenName" +#define NID_givenName 99 +#define OBJ_givenName OBJ_X509,42L + +#define SN_initials "initials" +#define LN_initials "initials" +#define NID_initials 101 +#define OBJ_initials OBJ_X509,43L + +#define LN_generationQualifier "generationQualifier" +#define NID_generationQualifier 509 +#define OBJ_generationQualifier OBJ_X509,44L + +#define LN_x500UniqueIdentifier "x500UniqueIdentifier" +#define NID_x500UniqueIdentifier 503 +#define OBJ_x500UniqueIdentifier OBJ_X509,45L + +#define SN_dnQualifier "dnQualifier" +#define LN_dnQualifier "dnQualifier" +#define NID_dnQualifier 174 +#define OBJ_dnQualifier OBJ_X509,46L + +#define LN_enhancedSearchGuide "enhancedSearchGuide" +#define NID_enhancedSearchGuide 885 +#define OBJ_enhancedSearchGuide OBJ_X509,47L + +#define LN_protocolInformation "protocolInformation" +#define NID_protocolInformation 886 +#define OBJ_protocolInformation OBJ_X509,48L + +#define LN_distinguishedName "distinguishedName" +#define NID_distinguishedName 887 +#define OBJ_distinguishedName OBJ_X509,49L + +#define LN_uniqueMember "uniqueMember" +#define NID_uniqueMember 888 +#define OBJ_uniqueMember OBJ_X509,50L + +#define LN_houseIdentifier "houseIdentifier" +#define NID_houseIdentifier 889 +#define OBJ_houseIdentifier OBJ_X509,51L + +#define LN_supportedAlgorithms "supportedAlgorithms" +#define NID_supportedAlgorithms 890 +#define OBJ_supportedAlgorithms OBJ_X509,52L + +#define LN_deltaRevocationList "deltaRevocationList" +#define NID_deltaRevocationList 891 +#define OBJ_deltaRevocationList OBJ_X509,53L + +#define SN_dmdName "dmdName" +#define NID_dmdName 892 +#define OBJ_dmdName OBJ_X509,54L + +#define LN_pseudonym "pseudonym" +#define NID_pseudonym 510 +#define OBJ_pseudonym OBJ_X509,65L + +#define SN_role "role" +#define LN_role "role" +#define NID_role 400 +#define OBJ_role OBJ_X509,72L + +#define SN_X500algorithms "X500algorithms" +#define LN_X500algorithms "directory services - algorithms" +#define NID_X500algorithms 378 +#define OBJ_X500algorithms OBJ_X500,8L + +#define SN_rsa "RSA" +#define LN_rsa "rsa" +#define NID_rsa 19 +#define OBJ_rsa OBJ_X500algorithms,1L,1L + +#define SN_mdc2WithRSA "RSA-MDC2" +#define LN_mdc2WithRSA "mdc2WithRSA" +#define NID_mdc2WithRSA 96 +#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L + +#define SN_mdc2 "MDC2" +#define LN_mdc2 "mdc2" +#define NID_mdc2 95 +#define OBJ_mdc2 OBJ_X500algorithms,3L,101L + +#define SN_id_ce "id-ce" +#define NID_id_ce 81 +#define OBJ_id_ce OBJ_X500,29L + +#define SN_subject_directory_attributes "subjectDirectoryAttributes" +#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" +#define NID_subject_directory_attributes 769 +#define OBJ_subject_directory_attributes OBJ_id_ce,9L + +#define SN_subject_key_identifier "subjectKeyIdentifier" +#define LN_subject_key_identifier "X509v3 Subject Key Identifier" +#define NID_subject_key_identifier 82 +#define OBJ_subject_key_identifier OBJ_id_ce,14L + +#define SN_key_usage "keyUsage" +#define LN_key_usage "X509v3 Key Usage" +#define NID_key_usage 83 +#define OBJ_key_usage OBJ_id_ce,15L + +#define SN_private_key_usage_period "privateKeyUsagePeriod" +#define LN_private_key_usage_period "X509v3 Private Key Usage Period" +#define NID_private_key_usage_period 84 +#define OBJ_private_key_usage_period OBJ_id_ce,16L + +#define SN_subject_alt_name "subjectAltName" +#define LN_subject_alt_name "X509v3 Subject Alternative Name" +#define NID_subject_alt_name 85 +#define OBJ_subject_alt_name OBJ_id_ce,17L + +#define SN_issuer_alt_name "issuerAltName" +#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" +#define NID_issuer_alt_name 86 +#define OBJ_issuer_alt_name OBJ_id_ce,18L + +#define SN_basic_constraints "basicConstraints" +#define LN_basic_constraints "X509v3 Basic Constraints" +#define NID_basic_constraints 87 +#define OBJ_basic_constraints OBJ_id_ce,19L + +#define SN_crl_number "crlNumber" +#define LN_crl_number "X509v3 CRL Number" +#define NID_crl_number 88 +#define OBJ_crl_number OBJ_id_ce,20L + +#define SN_crl_reason "CRLReason" +#define LN_crl_reason "X509v3 CRL Reason Code" +#define NID_crl_reason 141 +#define OBJ_crl_reason OBJ_id_ce,21L + +#define SN_invalidity_date "invalidityDate" +#define LN_invalidity_date "Invalidity Date" +#define NID_invalidity_date 142 +#define OBJ_invalidity_date OBJ_id_ce,24L + +#define SN_delta_crl "deltaCRL" +#define LN_delta_crl "X509v3 Delta CRL Indicator" +#define NID_delta_crl 140 +#define OBJ_delta_crl OBJ_id_ce,27L + +#define SN_issuing_distribution_point "issuingDistributionPoint" +#define LN_issuing_distribution_point "X509v3 Issuing Distrubution Point" +#define NID_issuing_distribution_point 770 +#define OBJ_issuing_distribution_point OBJ_id_ce,28L + +#define SN_certificate_issuer "certificateIssuer" +#define LN_certificate_issuer "X509v3 Certificate Issuer" +#define NID_certificate_issuer 771 +#define OBJ_certificate_issuer OBJ_id_ce,29L + +#define SN_name_constraints "nameConstraints" +#define LN_name_constraints "X509v3 Name Constraints" +#define NID_name_constraints 666 +#define OBJ_name_constraints OBJ_id_ce,30L + +#define SN_crl_distribution_points "crlDistributionPoints" +#define LN_crl_distribution_points "X509v3 CRL Distribution Points" +#define NID_crl_distribution_points 103 +#define OBJ_crl_distribution_points OBJ_id_ce,31L + +#define SN_certificate_policies "certificatePolicies" +#define LN_certificate_policies "X509v3 Certificate Policies" +#define NID_certificate_policies 89 +#define OBJ_certificate_policies OBJ_id_ce,32L + +#define SN_any_policy "anyPolicy" +#define LN_any_policy "X509v3 Any Policy" +#define NID_any_policy 746 +#define OBJ_any_policy OBJ_certificate_policies,0L + +#define SN_policy_mappings "policyMappings" +#define LN_policy_mappings "X509v3 Policy Mappings" +#define NID_policy_mappings 747 +#define OBJ_policy_mappings OBJ_id_ce,33L + +#define SN_authority_key_identifier "authorityKeyIdentifier" +#define LN_authority_key_identifier "X509v3 Authority Key Identifier" +#define NID_authority_key_identifier 90 +#define OBJ_authority_key_identifier OBJ_id_ce,35L + +#define SN_policy_constraints "policyConstraints" +#define LN_policy_constraints "X509v3 Policy Constraints" +#define NID_policy_constraints 401 +#define OBJ_policy_constraints OBJ_id_ce,36L + +#define SN_ext_key_usage "extendedKeyUsage" +#define LN_ext_key_usage "X509v3 Extended Key Usage" +#define NID_ext_key_usage 126 +#define OBJ_ext_key_usage OBJ_id_ce,37L + +#define SN_freshest_crl "freshestCRL" +#define LN_freshest_crl "X509v3 Freshest CRL" +#define NID_freshest_crl 857 +#define OBJ_freshest_crl OBJ_id_ce,46L + +#define SN_inhibit_any_policy "inhibitAnyPolicy" +#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" +#define NID_inhibit_any_policy 748 +#define OBJ_inhibit_any_policy OBJ_id_ce,54L + +#define SN_target_information "targetInformation" +#define LN_target_information "X509v3 AC Targeting" +#define NID_target_information 402 +#define OBJ_target_information OBJ_id_ce,55L + +#define SN_no_rev_avail "noRevAvail" +#define LN_no_rev_avail "X509v3 No Revocation Available" +#define NID_no_rev_avail 403 +#define OBJ_no_rev_avail OBJ_id_ce,56L + +#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" +#define LN_anyExtendedKeyUsage "Any Extended Key Usage" +#define NID_anyExtendedKeyUsage 910 +#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L + +#define SN_netscape "Netscape" +#define LN_netscape "Netscape Communications Corp." +#define NID_netscape 57 +#define OBJ_netscape 2L,16L,840L,1L,113730L + +#define SN_netscape_cert_extension "nsCertExt" +#define LN_netscape_cert_extension "Netscape Certificate Extension" +#define NID_netscape_cert_extension 58 +#define OBJ_netscape_cert_extension OBJ_netscape,1L + +#define SN_netscape_data_type "nsDataType" +#define LN_netscape_data_type "Netscape Data Type" +#define NID_netscape_data_type 59 +#define OBJ_netscape_data_type OBJ_netscape,2L + +#define SN_netscape_cert_type "nsCertType" +#define LN_netscape_cert_type "Netscape Cert Type" +#define NID_netscape_cert_type 71 +#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L + +#define SN_netscape_base_url "nsBaseUrl" +#define LN_netscape_base_url "Netscape Base Url" +#define NID_netscape_base_url 72 +#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L + +#define SN_netscape_revocation_url "nsRevocationUrl" +#define LN_netscape_revocation_url "Netscape Revocation Url" +#define NID_netscape_revocation_url 73 +#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L + +#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" +#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" +#define NID_netscape_ca_revocation_url 74 +#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L + +#define SN_netscape_renewal_url "nsRenewalUrl" +#define LN_netscape_renewal_url "Netscape Renewal Url" +#define NID_netscape_renewal_url 75 +#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L + +#define SN_netscape_ca_policy_url "nsCaPolicyUrl" +#define LN_netscape_ca_policy_url "Netscape CA Policy Url" +#define NID_netscape_ca_policy_url 76 +#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L + +#define SN_netscape_ssl_server_name "nsSslServerName" +#define LN_netscape_ssl_server_name "Netscape SSL Server Name" +#define NID_netscape_ssl_server_name 77 +#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L + +#define SN_netscape_comment "nsComment" +#define LN_netscape_comment "Netscape Comment" +#define NID_netscape_comment 78 +#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L + +#define SN_netscape_cert_sequence "nsCertSequence" +#define LN_netscape_cert_sequence "Netscape Certificate Sequence" +#define NID_netscape_cert_sequence 79 +#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L + +#define SN_ns_sgc "nsSGC" +#define LN_ns_sgc "Netscape Server Gated Crypto" +#define NID_ns_sgc 139 +#define OBJ_ns_sgc OBJ_netscape,4L,1L + +#define SN_org "ORG" +#define LN_org "org" +#define NID_org 379 +#define OBJ_org OBJ_iso,3L + +#define SN_dod "DOD" +#define LN_dod "dod" +#define NID_dod 380 +#define OBJ_dod OBJ_org,6L + +#define SN_iana "IANA" +#define LN_iana "iana" +#define NID_iana 381 +#define OBJ_iana OBJ_dod,1L + +#define OBJ_internet OBJ_iana + +#define SN_Directory "directory" +#define LN_Directory "Directory" +#define NID_Directory 382 +#define OBJ_Directory OBJ_internet,1L + +#define SN_Management "mgmt" +#define LN_Management "Management" +#define NID_Management 383 +#define OBJ_Management OBJ_internet,2L + +#define SN_Experimental "experimental" +#define LN_Experimental "Experimental" +#define NID_Experimental 384 +#define OBJ_Experimental OBJ_internet,3L + +#define SN_Private "private" +#define LN_Private "Private" +#define NID_Private 385 +#define OBJ_Private OBJ_internet,4L + +#define SN_Security "security" +#define LN_Security "Security" +#define NID_Security 386 +#define OBJ_Security OBJ_internet,5L + +#define SN_SNMPv2 "snmpv2" +#define LN_SNMPv2 "SNMPv2" +#define NID_SNMPv2 387 +#define OBJ_SNMPv2 OBJ_internet,6L + +#define LN_Mail "Mail" +#define NID_Mail 388 +#define OBJ_Mail OBJ_internet,7L + +#define SN_Enterprises "enterprises" +#define LN_Enterprises "Enterprises" +#define NID_Enterprises 389 +#define OBJ_Enterprises OBJ_Private,1L + +#define SN_dcObject "dcobject" +#define LN_dcObject "dcObject" +#define NID_dcObject 390 +#define OBJ_dcObject OBJ_Enterprises,1466L,344L + +#define SN_mime_mhs "mime-mhs" +#define LN_mime_mhs "MIME MHS" +#define NID_mime_mhs 504 +#define OBJ_mime_mhs OBJ_Mail,1L + +#define SN_mime_mhs_headings "mime-mhs-headings" +#define LN_mime_mhs_headings "mime-mhs-headings" +#define NID_mime_mhs_headings 505 +#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L + +#define SN_mime_mhs_bodies "mime-mhs-bodies" +#define LN_mime_mhs_bodies "mime-mhs-bodies" +#define NID_mime_mhs_bodies 506 +#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L + +#define SN_id_hex_partial_message "id-hex-partial-message" +#define LN_id_hex_partial_message "id-hex-partial-message" +#define NID_id_hex_partial_message 507 +#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L + +#define SN_id_hex_multipart_message "id-hex-multipart-message" +#define LN_id_hex_multipart_message "id-hex-multipart-message" +#define NID_id_hex_multipart_message 508 +#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L + +#define SN_rle_compression "RLE" +#define LN_rle_compression "run length compression" +#define NID_rle_compression 124 +#define OBJ_rle_compression 1L,1L,1L,1L,666L,1L + +#define SN_zlib_compression "ZLIB" +#define LN_zlib_compression "zlib compression" +#define NID_zlib_compression 125 +#define OBJ_zlib_compression OBJ_id_smime_alg,8L + +#define OBJ_csor 2L,16L,840L,1L,101L,3L + +#define OBJ_nistAlgorithms OBJ_csor,4L + +#define OBJ_aes OBJ_nistAlgorithms,1L + +#define SN_aes_128_ecb "AES-128-ECB" +#define LN_aes_128_ecb "aes-128-ecb" +#define NID_aes_128_ecb 418 +#define OBJ_aes_128_ecb OBJ_aes,1L + +#define SN_aes_128_cbc "AES-128-CBC" +#define LN_aes_128_cbc "aes-128-cbc" +#define NID_aes_128_cbc 419 +#define OBJ_aes_128_cbc OBJ_aes,2L + +#define SN_aes_128_ofb128 "AES-128-OFB" +#define LN_aes_128_ofb128 "aes-128-ofb" +#define NID_aes_128_ofb128 420 +#define OBJ_aes_128_ofb128 OBJ_aes,3L + +#define SN_aes_128_cfb128 "AES-128-CFB" +#define LN_aes_128_cfb128 "aes-128-cfb" +#define NID_aes_128_cfb128 421 +#define OBJ_aes_128_cfb128 OBJ_aes,4L + +#define SN_id_aes128_wrap "id-aes128-wrap" +#define NID_id_aes128_wrap 788 +#define OBJ_id_aes128_wrap OBJ_aes,5L + +#define SN_aes_128_gcm "id-aes128-GCM" +#define LN_aes_128_gcm "aes-128-gcm" +#define NID_aes_128_gcm 895 +#define OBJ_aes_128_gcm OBJ_aes,6L + +#define SN_aes_128_ccm "id-aes128-CCM" +#define LN_aes_128_ccm "aes-128-ccm" +#define NID_aes_128_ccm 896 +#define OBJ_aes_128_ccm OBJ_aes,7L + +#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" +#define NID_id_aes128_wrap_pad 897 +#define OBJ_id_aes128_wrap_pad OBJ_aes,8L + +#define SN_aes_192_ecb "AES-192-ECB" +#define LN_aes_192_ecb "aes-192-ecb" +#define NID_aes_192_ecb 422 +#define OBJ_aes_192_ecb OBJ_aes,21L + +#define SN_aes_192_cbc "AES-192-CBC" +#define LN_aes_192_cbc "aes-192-cbc" +#define NID_aes_192_cbc 423 +#define OBJ_aes_192_cbc OBJ_aes,22L + +#define SN_aes_192_ofb128 "AES-192-OFB" +#define LN_aes_192_ofb128 "aes-192-ofb" +#define NID_aes_192_ofb128 424 +#define OBJ_aes_192_ofb128 OBJ_aes,23L + +#define SN_aes_192_cfb128 "AES-192-CFB" +#define LN_aes_192_cfb128 "aes-192-cfb" +#define NID_aes_192_cfb128 425 +#define OBJ_aes_192_cfb128 OBJ_aes,24L + +#define SN_id_aes192_wrap "id-aes192-wrap" +#define NID_id_aes192_wrap 789 +#define OBJ_id_aes192_wrap OBJ_aes,25L + +#define SN_aes_192_gcm "id-aes192-GCM" +#define LN_aes_192_gcm "aes-192-gcm" +#define NID_aes_192_gcm 898 +#define OBJ_aes_192_gcm OBJ_aes,26L + +#define SN_aes_192_ccm "id-aes192-CCM" +#define LN_aes_192_ccm "aes-192-ccm" +#define NID_aes_192_ccm 899 +#define OBJ_aes_192_ccm OBJ_aes,27L + +#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" +#define NID_id_aes192_wrap_pad 900 +#define OBJ_id_aes192_wrap_pad OBJ_aes,28L + +#define SN_aes_256_ecb "AES-256-ECB" +#define LN_aes_256_ecb "aes-256-ecb" +#define NID_aes_256_ecb 426 +#define OBJ_aes_256_ecb OBJ_aes,41L + +#define SN_aes_256_cbc "AES-256-CBC" +#define LN_aes_256_cbc "aes-256-cbc" +#define NID_aes_256_cbc 427 +#define OBJ_aes_256_cbc OBJ_aes,42L + +#define SN_aes_256_ofb128 "AES-256-OFB" +#define LN_aes_256_ofb128 "aes-256-ofb" +#define NID_aes_256_ofb128 428 +#define OBJ_aes_256_ofb128 OBJ_aes,43L + +#define SN_aes_256_cfb128 "AES-256-CFB" +#define LN_aes_256_cfb128 "aes-256-cfb" +#define NID_aes_256_cfb128 429 +#define OBJ_aes_256_cfb128 OBJ_aes,44L + +#define SN_id_aes256_wrap "id-aes256-wrap" +#define NID_id_aes256_wrap 790 +#define OBJ_id_aes256_wrap OBJ_aes,45L + +#define SN_aes_256_gcm "id-aes256-GCM" +#define LN_aes_256_gcm "aes-256-gcm" +#define NID_aes_256_gcm 901 +#define OBJ_aes_256_gcm OBJ_aes,46L + +#define SN_aes_256_ccm "id-aes256-CCM" +#define LN_aes_256_ccm "aes-256-ccm" +#define NID_aes_256_ccm 902 +#define OBJ_aes_256_ccm OBJ_aes,47L + +#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" +#define NID_id_aes256_wrap_pad 903 +#define OBJ_id_aes256_wrap_pad OBJ_aes,48L + +#define SN_aes_128_cfb1 "AES-128-CFB1" +#define LN_aes_128_cfb1 "aes-128-cfb1" +#define NID_aes_128_cfb1 650 + +#define SN_aes_192_cfb1 "AES-192-CFB1" +#define LN_aes_192_cfb1 "aes-192-cfb1" +#define NID_aes_192_cfb1 651 + +#define SN_aes_256_cfb1 "AES-256-CFB1" +#define LN_aes_256_cfb1 "aes-256-cfb1" +#define NID_aes_256_cfb1 652 + +#define SN_aes_128_cfb8 "AES-128-CFB8" +#define LN_aes_128_cfb8 "aes-128-cfb8" +#define NID_aes_128_cfb8 653 + +#define SN_aes_192_cfb8 "AES-192-CFB8" +#define LN_aes_192_cfb8 "aes-192-cfb8" +#define NID_aes_192_cfb8 654 + +#define SN_aes_256_cfb8 "AES-256-CFB8" +#define LN_aes_256_cfb8 "aes-256-cfb8" +#define NID_aes_256_cfb8 655 + +#define SN_aes_128_ctr "AES-128-CTR" +#define LN_aes_128_ctr "aes-128-ctr" +#define NID_aes_128_ctr 904 + +#define SN_aes_192_ctr "AES-192-CTR" +#define LN_aes_192_ctr "aes-192-ctr" +#define NID_aes_192_ctr 905 + +#define SN_aes_256_ctr "AES-256-CTR" +#define LN_aes_256_ctr "aes-256-ctr" +#define NID_aes_256_ctr 906 + +#define SN_aes_128_xts "AES-128-XTS" +#define LN_aes_128_xts "aes-128-xts" +#define NID_aes_128_xts 913 + +#define SN_aes_256_xts "AES-256-XTS" +#define LN_aes_256_xts "aes-256-xts" +#define NID_aes_256_xts 914 + +#define SN_des_cfb1 "DES-CFB1" +#define LN_des_cfb1 "des-cfb1" +#define NID_des_cfb1 656 + +#define SN_des_cfb8 "DES-CFB8" +#define LN_des_cfb8 "des-cfb8" +#define NID_des_cfb8 657 + +#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" +#define LN_des_ede3_cfb1 "des-ede3-cfb1" +#define NID_des_ede3_cfb1 658 + +#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" +#define LN_des_ede3_cfb8 "des-ede3-cfb8" +#define NID_des_ede3_cfb8 659 + +#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L + +#define SN_sha256 "SHA256" +#define LN_sha256 "sha256" +#define NID_sha256 672 +#define OBJ_sha256 OBJ_nist_hashalgs,1L + +#define SN_sha384 "SHA384" +#define LN_sha384 "sha384" +#define NID_sha384 673 +#define OBJ_sha384 OBJ_nist_hashalgs,2L + +#define SN_sha512 "SHA512" +#define LN_sha512 "sha512" +#define NID_sha512 674 +#define OBJ_sha512 OBJ_nist_hashalgs,3L + +#define SN_sha224 "SHA224" +#define LN_sha224 "sha224" +#define NID_sha224 675 +#define OBJ_sha224 OBJ_nist_hashalgs,4L + +#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA224 "dsa_with_SHA224" +#define NID_dsa_with_SHA224 802 +#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L + +#define SN_dsa_with_SHA256 "dsa_with_SHA256" +#define NID_dsa_with_SHA256 803 +#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L + +#define SN_hold_instruction_code "holdInstructionCode" +#define LN_hold_instruction_code "Hold Instruction Code" +#define NID_hold_instruction_code 430 +#define OBJ_hold_instruction_code OBJ_id_ce,23L + +#define OBJ_holdInstruction OBJ_X9_57,2L + +#define SN_hold_instruction_none "holdInstructionNone" +#define LN_hold_instruction_none "Hold Instruction None" +#define NID_hold_instruction_none 431 +#define OBJ_hold_instruction_none OBJ_holdInstruction,1L + +#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" +#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" +#define NID_hold_instruction_call_issuer 432 +#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L + +#define SN_hold_instruction_reject "holdInstructionReject" +#define LN_hold_instruction_reject "Hold Instruction Reject" +#define NID_hold_instruction_reject 433 +#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L + +#define SN_data "data" +#define NID_data 434 +#define OBJ_data OBJ_itu_t,9L + +#define SN_pss "pss" +#define NID_pss 435 +#define OBJ_pss OBJ_data,2342L + +#define SN_ucl "ucl" +#define NID_ucl 436 +#define OBJ_ucl OBJ_pss,19200300L + +#define SN_pilot "pilot" +#define NID_pilot 437 +#define OBJ_pilot OBJ_ucl,100L + +#define LN_pilotAttributeType "pilotAttributeType" +#define NID_pilotAttributeType 438 +#define OBJ_pilotAttributeType OBJ_pilot,1L + +#define LN_pilotAttributeSyntax "pilotAttributeSyntax" +#define NID_pilotAttributeSyntax 439 +#define OBJ_pilotAttributeSyntax OBJ_pilot,3L + +#define LN_pilotObjectClass "pilotObjectClass" +#define NID_pilotObjectClass 440 +#define OBJ_pilotObjectClass OBJ_pilot,4L + +#define LN_pilotGroups "pilotGroups" +#define NID_pilotGroups 441 +#define OBJ_pilotGroups OBJ_pilot,10L + +#define LN_iA5StringSyntax "iA5StringSyntax" +#define NID_iA5StringSyntax 442 +#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L + +#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" +#define NID_caseIgnoreIA5StringSyntax 443 +#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L + +#define LN_pilotObject "pilotObject" +#define NID_pilotObject 444 +#define OBJ_pilotObject OBJ_pilotObjectClass,3L + +#define LN_pilotPerson "pilotPerson" +#define NID_pilotPerson 445 +#define OBJ_pilotPerson OBJ_pilotObjectClass,4L + +#define SN_account "account" +#define NID_account 446 +#define OBJ_account OBJ_pilotObjectClass,5L + +#define SN_document "document" +#define NID_document 447 +#define OBJ_document OBJ_pilotObjectClass,6L + +#define SN_room "room" +#define NID_room 448 +#define OBJ_room OBJ_pilotObjectClass,7L + +#define LN_documentSeries "documentSeries" +#define NID_documentSeries 449 +#define OBJ_documentSeries OBJ_pilotObjectClass,9L + +#define SN_Domain "domain" +#define LN_Domain "Domain" +#define NID_Domain 392 +#define OBJ_Domain OBJ_pilotObjectClass,13L + +#define LN_rFC822localPart "rFC822localPart" +#define NID_rFC822localPart 450 +#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L + +#define LN_dNSDomain "dNSDomain" +#define NID_dNSDomain 451 +#define OBJ_dNSDomain OBJ_pilotObjectClass,15L + +#define LN_domainRelatedObject "domainRelatedObject" +#define NID_domainRelatedObject 452 +#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L + +#define LN_friendlyCountry "friendlyCountry" +#define NID_friendlyCountry 453 +#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L + +#define LN_simpleSecurityObject "simpleSecurityObject" +#define NID_simpleSecurityObject 454 +#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L + +#define LN_pilotOrganization "pilotOrganization" +#define NID_pilotOrganization 455 +#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L + +#define LN_pilotDSA "pilotDSA" +#define NID_pilotDSA 456 +#define OBJ_pilotDSA OBJ_pilotObjectClass,21L + +#define LN_qualityLabelledData "qualityLabelledData" +#define NID_qualityLabelledData 457 +#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L + +#define SN_userId "UID" +#define LN_userId "userId" +#define NID_userId 458 +#define OBJ_userId OBJ_pilotAttributeType,1L + +#define LN_textEncodedORAddress "textEncodedORAddress" +#define NID_textEncodedORAddress 459 +#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L + +#define SN_rfc822Mailbox "mail" +#define LN_rfc822Mailbox "rfc822Mailbox" +#define NID_rfc822Mailbox 460 +#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L + +#define SN_info "info" +#define NID_info 461 +#define OBJ_info OBJ_pilotAttributeType,4L + +#define LN_favouriteDrink "favouriteDrink" +#define NID_favouriteDrink 462 +#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L + +#define LN_roomNumber "roomNumber" +#define NID_roomNumber 463 +#define OBJ_roomNumber OBJ_pilotAttributeType,6L + +#define SN_photo "photo" +#define NID_photo 464 +#define OBJ_photo OBJ_pilotAttributeType,7L + +#define LN_userClass "userClass" +#define NID_userClass 465 +#define OBJ_userClass OBJ_pilotAttributeType,8L + +#define SN_host "host" +#define NID_host 466 +#define OBJ_host OBJ_pilotAttributeType,9L + +#define SN_manager "manager" +#define NID_manager 467 +#define OBJ_manager OBJ_pilotAttributeType,10L + +#define LN_documentIdentifier "documentIdentifier" +#define NID_documentIdentifier 468 +#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L + +#define LN_documentTitle "documentTitle" +#define NID_documentTitle 469 +#define OBJ_documentTitle OBJ_pilotAttributeType,12L + +#define LN_documentVersion "documentVersion" +#define NID_documentVersion 470 +#define OBJ_documentVersion OBJ_pilotAttributeType,13L + +#define LN_documentAuthor "documentAuthor" +#define NID_documentAuthor 471 +#define OBJ_documentAuthor OBJ_pilotAttributeType,14L + +#define LN_documentLocation "documentLocation" +#define NID_documentLocation 472 +#define OBJ_documentLocation OBJ_pilotAttributeType,15L + +#define LN_homeTelephoneNumber "homeTelephoneNumber" +#define NID_homeTelephoneNumber 473 +#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L + +#define SN_secretary "secretary" +#define NID_secretary 474 +#define OBJ_secretary OBJ_pilotAttributeType,21L + +#define LN_otherMailbox "otherMailbox" +#define NID_otherMailbox 475 +#define OBJ_otherMailbox OBJ_pilotAttributeType,22L + +#define LN_lastModifiedTime "lastModifiedTime" +#define NID_lastModifiedTime 476 +#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L + +#define LN_lastModifiedBy "lastModifiedBy" +#define NID_lastModifiedBy 477 +#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L + +#define SN_domainComponent "DC" +#define LN_domainComponent "domainComponent" +#define NID_domainComponent 391 +#define OBJ_domainComponent OBJ_pilotAttributeType,25L + +#define LN_aRecord "aRecord" +#define NID_aRecord 478 +#define OBJ_aRecord OBJ_pilotAttributeType,26L + +#define LN_pilotAttributeType27 "pilotAttributeType27" +#define NID_pilotAttributeType27 479 +#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L + +#define LN_mXRecord "mXRecord" +#define NID_mXRecord 480 +#define OBJ_mXRecord OBJ_pilotAttributeType,28L + +#define LN_nSRecord "nSRecord" +#define NID_nSRecord 481 +#define OBJ_nSRecord OBJ_pilotAttributeType,29L + +#define LN_sOARecord "sOARecord" +#define NID_sOARecord 482 +#define OBJ_sOARecord OBJ_pilotAttributeType,30L + +#define LN_cNAMERecord "cNAMERecord" +#define NID_cNAMERecord 483 +#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L + +#define LN_associatedDomain "associatedDomain" +#define NID_associatedDomain 484 +#define OBJ_associatedDomain OBJ_pilotAttributeType,37L + +#define LN_associatedName "associatedName" +#define NID_associatedName 485 +#define OBJ_associatedName OBJ_pilotAttributeType,38L + +#define LN_homePostalAddress "homePostalAddress" +#define NID_homePostalAddress 486 +#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L + +#define LN_personalTitle "personalTitle" +#define NID_personalTitle 487 +#define OBJ_personalTitle OBJ_pilotAttributeType,40L + +#define LN_mobileTelephoneNumber "mobileTelephoneNumber" +#define NID_mobileTelephoneNumber 488 +#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L + +#define LN_pagerTelephoneNumber "pagerTelephoneNumber" +#define NID_pagerTelephoneNumber 489 +#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L + +#define LN_friendlyCountryName "friendlyCountryName" +#define NID_friendlyCountryName 490 +#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L + +#define LN_organizationalStatus "organizationalStatus" +#define NID_organizationalStatus 491 +#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L + +#define LN_janetMailbox "janetMailbox" +#define NID_janetMailbox 492 +#define OBJ_janetMailbox OBJ_pilotAttributeType,46L + +#define LN_mailPreferenceOption "mailPreferenceOption" +#define NID_mailPreferenceOption 493 +#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L + +#define LN_buildingName "buildingName" +#define NID_buildingName 494 +#define OBJ_buildingName OBJ_pilotAttributeType,48L + +#define LN_dSAQuality "dSAQuality" +#define NID_dSAQuality 495 +#define OBJ_dSAQuality OBJ_pilotAttributeType,49L + +#define LN_singleLevelQuality "singleLevelQuality" +#define NID_singleLevelQuality 496 +#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L + +#define LN_subtreeMinimumQuality "subtreeMinimumQuality" +#define NID_subtreeMinimumQuality 497 +#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L + +#define LN_subtreeMaximumQuality "subtreeMaximumQuality" +#define NID_subtreeMaximumQuality 498 +#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L + +#define LN_personalSignature "personalSignature" +#define NID_personalSignature 499 +#define OBJ_personalSignature OBJ_pilotAttributeType,53L + +#define LN_dITRedirect "dITRedirect" +#define NID_dITRedirect 500 +#define OBJ_dITRedirect OBJ_pilotAttributeType,54L + +#define SN_audio "audio" +#define NID_audio 501 +#define OBJ_audio OBJ_pilotAttributeType,55L + +#define LN_documentPublisher "documentPublisher" +#define NID_documentPublisher 502 +#define OBJ_documentPublisher OBJ_pilotAttributeType,56L + +#define SN_id_set "id-set" +#define LN_id_set "Secure Electronic Transactions" +#define NID_id_set 512 +#define OBJ_id_set OBJ_international_organizations,42L + +#define SN_set_ctype "set-ctype" +#define LN_set_ctype "content types" +#define NID_set_ctype 513 +#define OBJ_set_ctype OBJ_id_set,0L + +#define SN_set_msgExt "set-msgExt" +#define LN_set_msgExt "message extensions" +#define NID_set_msgExt 514 +#define OBJ_set_msgExt OBJ_id_set,1L + +#define SN_set_attr "set-attr" +#define NID_set_attr 515 +#define OBJ_set_attr OBJ_id_set,3L + +#define SN_set_policy "set-policy" +#define NID_set_policy 516 +#define OBJ_set_policy OBJ_id_set,5L + +#define SN_set_certExt "set-certExt" +#define LN_set_certExt "certificate extensions" +#define NID_set_certExt 517 +#define OBJ_set_certExt OBJ_id_set,7L + +#define SN_set_brand "set-brand" +#define NID_set_brand 518 +#define OBJ_set_brand OBJ_id_set,8L + +#define SN_setct_PANData "setct-PANData" +#define NID_setct_PANData 519 +#define OBJ_setct_PANData OBJ_set_ctype,0L + +#define SN_setct_PANToken "setct-PANToken" +#define NID_setct_PANToken 520 +#define OBJ_setct_PANToken OBJ_set_ctype,1L + +#define SN_setct_PANOnly "setct-PANOnly" +#define NID_setct_PANOnly 521 +#define OBJ_setct_PANOnly OBJ_set_ctype,2L + +#define SN_setct_OIData "setct-OIData" +#define NID_setct_OIData 522 +#define OBJ_setct_OIData OBJ_set_ctype,3L + +#define SN_setct_PI "setct-PI" +#define NID_setct_PI 523 +#define OBJ_setct_PI OBJ_set_ctype,4L + +#define SN_setct_PIData "setct-PIData" +#define NID_setct_PIData 524 +#define OBJ_setct_PIData OBJ_set_ctype,5L + +#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" +#define NID_setct_PIDataUnsigned 525 +#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L + +#define SN_setct_HODInput "setct-HODInput" +#define NID_setct_HODInput 526 +#define OBJ_setct_HODInput OBJ_set_ctype,7L + +#define SN_setct_AuthResBaggage "setct-AuthResBaggage" +#define NID_setct_AuthResBaggage 527 +#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L + +#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" +#define NID_setct_AuthRevReqBaggage 528 +#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L + +#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" +#define NID_setct_AuthRevResBaggage 529 +#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L + +#define SN_setct_CapTokenSeq "setct-CapTokenSeq" +#define NID_setct_CapTokenSeq 530 +#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L + +#define SN_setct_PInitResData "setct-PInitResData" +#define NID_setct_PInitResData 531 +#define OBJ_setct_PInitResData OBJ_set_ctype,12L + +#define SN_setct_PI_TBS "setct-PI-TBS" +#define NID_setct_PI_TBS 532 +#define OBJ_setct_PI_TBS OBJ_set_ctype,13L + +#define SN_setct_PResData "setct-PResData" +#define NID_setct_PResData 533 +#define OBJ_setct_PResData OBJ_set_ctype,14L + +#define SN_setct_AuthReqTBS "setct-AuthReqTBS" +#define NID_setct_AuthReqTBS 534 +#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L + +#define SN_setct_AuthResTBS "setct-AuthResTBS" +#define NID_setct_AuthResTBS 535 +#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L + +#define SN_setct_AuthResTBSX "setct-AuthResTBSX" +#define NID_setct_AuthResTBSX 536 +#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L + +#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" +#define NID_setct_AuthTokenTBS 537 +#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L + +#define SN_setct_CapTokenData "setct-CapTokenData" +#define NID_setct_CapTokenData 538 +#define OBJ_setct_CapTokenData OBJ_set_ctype,20L + +#define SN_setct_CapTokenTBS "setct-CapTokenTBS" +#define NID_setct_CapTokenTBS 539 +#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L + +#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" +#define NID_setct_AcqCardCodeMsg 540 +#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L + +#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" +#define NID_setct_AuthRevReqTBS 541 +#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L + +#define SN_setct_AuthRevResData "setct-AuthRevResData" +#define NID_setct_AuthRevResData 542 +#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L + +#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" +#define NID_setct_AuthRevResTBS 543 +#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L + +#define SN_setct_CapReqTBS "setct-CapReqTBS" +#define NID_setct_CapReqTBS 544 +#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L + +#define SN_setct_CapReqTBSX "setct-CapReqTBSX" +#define NID_setct_CapReqTBSX 545 +#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L + +#define SN_setct_CapResData "setct-CapResData" +#define NID_setct_CapResData 546 +#define OBJ_setct_CapResData OBJ_set_ctype,28L + +#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" +#define NID_setct_CapRevReqTBS 547 +#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L + +#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" +#define NID_setct_CapRevReqTBSX 548 +#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L + +#define SN_setct_CapRevResData "setct-CapRevResData" +#define NID_setct_CapRevResData 549 +#define OBJ_setct_CapRevResData OBJ_set_ctype,31L + +#define SN_setct_CredReqTBS "setct-CredReqTBS" +#define NID_setct_CredReqTBS 550 +#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L + +#define SN_setct_CredReqTBSX "setct-CredReqTBSX" +#define NID_setct_CredReqTBSX 551 +#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L + +#define SN_setct_CredResData "setct-CredResData" +#define NID_setct_CredResData 552 +#define OBJ_setct_CredResData OBJ_set_ctype,34L + +#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" +#define NID_setct_CredRevReqTBS 553 +#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L + +#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" +#define NID_setct_CredRevReqTBSX 554 +#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L + +#define SN_setct_CredRevResData "setct-CredRevResData" +#define NID_setct_CredRevResData 555 +#define OBJ_setct_CredRevResData OBJ_set_ctype,37L + +#define SN_setct_PCertReqData "setct-PCertReqData" +#define NID_setct_PCertReqData 556 +#define OBJ_setct_PCertReqData OBJ_set_ctype,38L + +#define SN_setct_PCertResTBS "setct-PCertResTBS" +#define NID_setct_PCertResTBS 557 +#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L + +#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" +#define NID_setct_BatchAdminReqData 558 +#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L + +#define SN_setct_BatchAdminResData "setct-BatchAdminResData" +#define NID_setct_BatchAdminResData 559 +#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L + +#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" +#define NID_setct_CardCInitResTBS 560 +#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L + +#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" +#define NID_setct_MeAqCInitResTBS 561 +#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L + +#define SN_setct_RegFormResTBS "setct-RegFormResTBS" +#define NID_setct_RegFormResTBS 562 +#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L + +#define SN_setct_CertReqData "setct-CertReqData" +#define NID_setct_CertReqData 563 +#define OBJ_setct_CertReqData OBJ_set_ctype,45L + +#define SN_setct_CertReqTBS "setct-CertReqTBS" +#define NID_setct_CertReqTBS 564 +#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L + +#define SN_setct_CertResData "setct-CertResData" +#define NID_setct_CertResData 565 +#define OBJ_setct_CertResData OBJ_set_ctype,47L + +#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" +#define NID_setct_CertInqReqTBS 566 +#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L + +#define SN_setct_ErrorTBS "setct-ErrorTBS" +#define NID_setct_ErrorTBS 567 +#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L + +#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" +#define NID_setct_PIDualSignedTBE 568 +#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L + +#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" +#define NID_setct_PIUnsignedTBE 569 +#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L + +#define SN_setct_AuthReqTBE "setct-AuthReqTBE" +#define NID_setct_AuthReqTBE 570 +#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L + +#define SN_setct_AuthResTBE "setct-AuthResTBE" +#define NID_setct_AuthResTBE 571 +#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L + +#define SN_setct_AuthResTBEX "setct-AuthResTBEX" +#define NID_setct_AuthResTBEX 572 +#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L + +#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" +#define NID_setct_AuthTokenTBE 573 +#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L + +#define SN_setct_CapTokenTBE "setct-CapTokenTBE" +#define NID_setct_CapTokenTBE 574 +#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L + +#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" +#define NID_setct_CapTokenTBEX 575 +#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L + +#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" +#define NID_setct_AcqCardCodeMsgTBE 576 +#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L + +#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" +#define NID_setct_AuthRevReqTBE 577 +#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L + +#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" +#define NID_setct_AuthRevResTBE 578 +#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L + +#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" +#define NID_setct_AuthRevResTBEB 579 +#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L + +#define SN_setct_CapReqTBE "setct-CapReqTBE" +#define NID_setct_CapReqTBE 580 +#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L + +#define SN_setct_CapReqTBEX "setct-CapReqTBEX" +#define NID_setct_CapReqTBEX 581 +#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L + +#define SN_setct_CapResTBE "setct-CapResTBE" +#define NID_setct_CapResTBE 582 +#define OBJ_setct_CapResTBE OBJ_set_ctype,64L + +#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" +#define NID_setct_CapRevReqTBE 583 +#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L + +#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" +#define NID_setct_CapRevReqTBEX 584 +#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L + +#define SN_setct_CapRevResTBE "setct-CapRevResTBE" +#define NID_setct_CapRevResTBE 585 +#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L + +#define SN_setct_CredReqTBE "setct-CredReqTBE" +#define NID_setct_CredReqTBE 586 +#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L + +#define SN_setct_CredReqTBEX "setct-CredReqTBEX" +#define NID_setct_CredReqTBEX 587 +#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L + +#define SN_setct_CredResTBE "setct-CredResTBE" +#define NID_setct_CredResTBE 588 +#define OBJ_setct_CredResTBE OBJ_set_ctype,70L + +#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" +#define NID_setct_CredRevReqTBE 589 +#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L + +#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" +#define NID_setct_CredRevReqTBEX 590 +#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L + +#define SN_setct_CredRevResTBE "setct-CredRevResTBE" +#define NID_setct_CredRevResTBE 591 +#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L + +#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" +#define NID_setct_BatchAdminReqTBE 592 +#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L + +#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" +#define NID_setct_BatchAdminResTBE 593 +#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L + +#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" +#define NID_setct_RegFormReqTBE 594 +#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L + +#define SN_setct_CertReqTBE "setct-CertReqTBE" +#define NID_setct_CertReqTBE 595 +#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L + +#define SN_setct_CertReqTBEX "setct-CertReqTBEX" +#define NID_setct_CertReqTBEX 596 +#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L + +#define SN_setct_CertResTBE "setct-CertResTBE" +#define NID_setct_CertResTBE 597 +#define OBJ_setct_CertResTBE OBJ_set_ctype,79L + +#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" +#define NID_setct_CRLNotificationTBS 598 +#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L + +#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" +#define NID_setct_CRLNotificationResTBS 599 +#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L + +#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" +#define NID_setct_BCIDistributionTBS 600 +#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L + +#define SN_setext_genCrypt "setext-genCrypt" +#define LN_setext_genCrypt "generic cryptogram" +#define NID_setext_genCrypt 601 +#define OBJ_setext_genCrypt OBJ_set_msgExt,1L + +#define SN_setext_miAuth "setext-miAuth" +#define LN_setext_miAuth "merchant initiated auth" +#define NID_setext_miAuth 602 +#define OBJ_setext_miAuth OBJ_set_msgExt,3L + +#define SN_setext_pinSecure "setext-pinSecure" +#define NID_setext_pinSecure 603 +#define OBJ_setext_pinSecure OBJ_set_msgExt,4L + +#define SN_setext_pinAny "setext-pinAny" +#define NID_setext_pinAny 604 +#define OBJ_setext_pinAny OBJ_set_msgExt,5L + +#define SN_setext_track2 "setext-track2" +#define NID_setext_track2 605 +#define OBJ_setext_track2 OBJ_set_msgExt,7L + +#define SN_setext_cv "setext-cv" +#define LN_setext_cv "additional verification" +#define NID_setext_cv 606 +#define OBJ_setext_cv OBJ_set_msgExt,8L + +#define SN_set_policy_root "set-policy-root" +#define NID_set_policy_root 607 +#define OBJ_set_policy_root OBJ_set_policy,0L + +#define SN_setCext_hashedRoot "setCext-hashedRoot" +#define NID_setCext_hashedRoot 608 +#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L + +#define SN_setCext_certType "setCext-certType" +#define NID_setCext_certType 609 +#define OBJ_setCext_certType OBJ_set_certExt,1L + +#define SN_setCext_merchData "setCext-merchData" +#define NID_setCext_merchData 610 +#define OBJ_setCext_merchData OBJ_set_certExt,2L + +#define SN_setCext_cCertRequired "setCext-cCertRequired" +#define NID_setCext_cCertRequired 611 +#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L + +#define SN_setCext_tunneling "setCext-tunneling" +#define NID_setCext_tunneling 612 +#define OBJ_setCext_tunneling OBJ_set_certExt,4L + +#define SN_setCext_setExt "setCext-setExt" +#define NID_setCext_setExt 613 +#define OBJ_setCext_setExt OBJ_set_certExt,5L + +#define SN_setCext_setQualf "setCext-setQualf" +#define NID_setCext_setQualf 614 +#define OBJ_setCext_setQualf OBJ_set_certExt,6L + +#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" +#define NID_setCext_PGWYcapabilities 615 +#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L + +#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" +#define NID_setCext_TokenIdentifier 616 +#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L + +#define SN_setCext_Track2Data "setCext-Track2Data" +#define NID_setCext_Track2Data 617 +#define OBJ_setCext_Track2Data OBJ_set_certExt,9L + +#define SN_setCext_TokenType "setCext-TokenType" +#define NID_setCext_TokenType 618 +#define OBJ_setCext_TokenType OBJ_set_certExt,10L + +#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" +#define NID_setCext_IssuerCapabilities 619 +#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L + +#define SN_setAttr_Cert "setAttr-Cert" +#define NID_setAttr_Cert 620 +#define OBJ_setAttr_Cert OBJ_set_attr,0L + +#define SN_setAttr_PGWYcap "setAttr-PGWYcap" +#define LN_setAttr_PGWYcap "payment gateway capabilities" +#define NID_setAttr_PGWYcap 621 +#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L + +#define SN_setAttr_TokenType "setAttr-TokenType" +#define NID_setAttr_TokenType 622 +#define OBJ_setAttr_TokenType OBJ_set_attr,2L + +#define SN_setAttr_IssCap "setAttr-IssCap" +#define LN_setAttr_IssCap "issuer capabilities" +#define NID_setAttr_IssCap 623 +#define OBJ_setAttr_IssCap OBJ_set_attr,3L + +#define SN_set_rootKeyThumb "set-rootKeyThumb" +#define NID_set_rootKeyThumb 624 +#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L + +#define SN_set_addPolicy "set-addPolicy" +#define NID_set_addPolicy 625 +#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L + +#define SN_setAttr_Token_EMV "setAttr-Token-EMV" +#define NID_setAttr_Token_EMV 626 +#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L + +#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" +#define NID_setAttr_Token_B0Prime 627 +#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L + +#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" +#define NID_setAttr_IssCap_CVM 628 +#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L + +#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" +#define NID_setAttr_IssCap_T2 629 +#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L + +#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" +#define NID_setAttr_IssCap_Sig 630 +#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L + +#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" +#define LN_setAttr_GenCryptgrm "generate cryptogram" +#define NID_setAttr_GenCryptgrm 631 +#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L + +#define SN_setAttr_T2Enc "setAttr-T2Enc" +#define LN_setAttr_T2Enc "encrypted track 2" +#define NID_setAttr_T2Enc 632 +#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L + +#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" +#define LN_setAttr_T2cleartxt "cleartext track 2" +#define NID_setAttr_T2cleartxt 633 +#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L + +#define SN_setAttr_TokICCsig "setAttr-TokICCsig" +#define LN_setAttr_TokICCsig "ICC or token signature" +#define NID_setAttr_TokICCsig 634 +#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L + +#define SN_setAttr_SecDevSig "setAttr-SecDevSig" +#define LN_setAttr_SecDevSig "secure device signature" +#define NID_setAttr_SecDevSig 635 +#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L + +#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" +#define NID_set_brand_IATA_ATA 636 +#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L + +#define SN_set_brand_Diners "set-brand-Diners" +#define NID_set_brand_Diners 637 +#define OBJ_set_brand_Diners OBJ_set_brand,30L + +#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" +#define NID_set_brand_AmericanExpress 638 +#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L + +#define SN_set_brand_JCB "set-brand-JCB" +#define NID_set_brand_JCB 639 +#define OBJ_set_brand_JCB OBJ_set_brand,35L + +#define SN_set_brand_Visa "set-brand-Visa" +#define NID_set_brand_Visa 640 +#define OBJ_set_brand_Visa OBJ_set_brand,4L + +#define SN_set_brand_MasterCard "set-brand-MasterCard" +#define NID_set_brand_MasterCard 641 +#define OBJ_set_brand_MasterCard OBJ_set_brand,5L + +#define SN_set_brand_Novus "set-brand-Novus" +#define NID_set_brand_Novus 642 +#define OBJ_set_brand_Novus OBJ_set_brand,6011L + +#define SN_des_cdmf "DES-CDMF" +#define LN_des_cdmf "des-cdmf" +#define NID_des_cdmf 643 +#define OBJ_des_cdmf OBJ_rsadsi,3L,10L + +#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" +#define NID_rsaOAEPEncryptionSET 644 +#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L + +#define SN_ipsec3 "Oakley-EC2N-3" +#define LN_ipsec3 "ipsec3" +#define NID_ipsec3 749 + +#define SN_ipsec4 "Oakley-EC2N-4" +#define LN_ipsec4 "ipsec4" +#define NID_ipsec4 750 + +#define SN_whirlpool "whirlpool" +#define NID_whirlpool 804 +#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L + +#define SN_cryptopro "cryptopro" +#define NID_cryptopro 805 +#define OBJ_cryptopro OBJ_member_body,643L,2L,2L + +#define SN_cryptocom "cryptocom" +#define NID_cryptocom 806 +#define OBJ_cryptocom OBJ_member_body,643L,2L,9L + +#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" +#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" +#define NID_id_GostR3411_94_with_GostR3410_2001 807 +#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L + +#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" +#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" +#define NID_id_GostR3411_94_with_GostR3410_94 808 +#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L + +#define SN_id_GostR3411_94 "md_gost94" +#define LN_id_GostR3411_94 "GOST R 34.11-94" +#define NID_id_GostR3411_94 809 +#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L + +#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" +#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" +#define NID_id_HMACGostR3411_94 810 +#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L + +#define SN_id_GostR3410_2001 "gost2001" +#define LN_id_GostR3410_2001 "GOST R 34.10-2001" +#define NID_id_GostR3410_2001 811 +#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L + +#define SN_id_GostR3410_94 "gost94" +#define LN_id_GostR3410_94 "GOST R 34.10-94" +#define NID_id_GostR3410_94 812 +#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L + +#define SN_id_Gost28147_89 "gost89" +#define LN_id_Gost28147_89 "GOST 28147-89" +#define NID_id_Gost28147_89 813 +#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L + +#define SN_gost89_cnt "gost89-cnt" +#define NID_gost89_cnt 814 + +#define SN_id_Gost28147_89_MAC "gost-mac" +#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" +#define NID_id_Gost28147_89_MAC 815 +#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L + +#define SN_id_GostR3411_94_prf "prf-gostr3411-94" +#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" +#define NID_id_GostR3411_94_prf 816 +#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L + +#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" +#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" +#define NID_id_GostR3410_2001DH 817 +#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L + +#define SN_id_GostR3410_94DH "id-GostR3410-94DH" +#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" +#define NID_id_GostR3410_94DH 818 +#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L + +#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" +#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 +#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L + +#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" +#define NID_id_Gost28147_89_None_KeyMeshing 820 +#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L + +#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" +#define NID_id_GostR3411_94_TestParamSet 821 +#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L + +#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" +#define NID_id_GostR3411_94_CryptoProParamSet 822 +#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L + +#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" +#define NID_id_Gost28147_89_TestParamSet 823 +#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L + +#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 +#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L + +#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 +#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L + +#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 +#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L + +#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 +#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L + +#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 +#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L + +#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" +#define NID_id_GostR3410_94_TestParamSet 831 +#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L + +#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 +#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L + +#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 +#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L + +#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 +#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L + +#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 +#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L + +#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 +#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L + +#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 +#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L + +#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 +#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L + +#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" +#define NID_id_GostR3410_2001_TestParamSet 839 +#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L + +#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 +#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L + +#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 +#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L + +#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 +#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L + +#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 +#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L + +#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 +#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L + +#define SN_id_GostR3410_94_a "id-GostR3410-94-a" +#define NID_id_GostR3410_94_a 845 +#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L + +#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" +#define NID_id_GostR3410_94_aBis 846 +#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L + +#define SN_id_GostR3410_94_b "id-GostR3410-94-b" +#define NID_id_GostR3410_94_b 847 +#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L + +#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" +#define NID_id_GostR3410_94_bBis 848 +#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L + +#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" +#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" +#define NID_id_Gost28147_89_cc 849 +#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L + +#define SN_id_GostR3410_94_cc "gost94cc" +#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" +#define NID_id_GostR3410_94_cc 850 +#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L + +#define SN_id_GostR3410_2001_cc "gost2001cc" +#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" +#define NID_id_GostR3410_2001_cc 851 +#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L + +#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" +#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 +#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L + +#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" +#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 +#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L + +#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" +#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" +#define NID_id_GostR3410_2001_ParamSet_cc 854 +#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L + +#define SN_camellia_128_cbc "CAMELLIA-128-CBC" +#define LN_camellia_128_cbc "camellia-128-cbc" +#define NID_camellia_128_cbc 751 +#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L + +#define SN_camellia_192_cbc "CAMELLIA-192-CBC" +#define LN_camellia_192_cbc "camellia-192-cbc" +#define NID_camellia_192_cbc 752 +#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L + +#define SN_camellia_256_cbc "CAMELLIA-256-CBC" +#define LN_camellia_256_cbc "camellia-256-cbc" +#define NID_camellia_256_cbc 753 +#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L + +#define SN_id_camellia128_wrap "id-camellia128-wrap" +#define NID_id_camellia128_wrap 907 +#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L + +#define SN_id_camellia192_wrap "id-camellia192-wrap" +#define NID_id_camellia192_wrap 908 +#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L + +#define SN_id_camellia256_wrap "id-camellia256-wrap" +#define NID_id_camellia256_wrap 909 +#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L + +#define OBJ_ntt_ds 0L,3L,4401L,5L + +#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L + +#define SN_camellia_128_ecb "CAMELLIA-128-ECB" +#define LN_camellia_128_ecb "camellia-128-ecb" +#define NID_camellia_128_ecb 754 +#define OBJ_camellia_128_ecb OBJ_camellia,1L + +#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" +#define LN_camellia_128_ofb128 "camellia-128-ofb" +#define NID_camellia_128_ofb128 766 +#define OBJ_camellia_128_ofb128 OBJ_camellia,3L + +#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" +#define LN_camellia_128_cfb128 "camellia-128-cfb" +#define NID_camellia_128_cfb128 757 +#define OBJ_camellia_128_cfb128 OBJ_camellia,4L + +#define SN_camellia_192_ecb "CAMELLIA-192-ECB" +#define LN_camellia_192_ecb "camellia-192-ecb" +#define NID_camellia_192_ecb 755 +#define OBJ_camellia_192_ecb OBJ_camellia,21L + +#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" +#define LN_camellia_192_ofb128 "camellia-192-ofb" +#define NID_camellia_192_ofb128 767 +#define OBJ_camellia_192_ofb128 OBJ_camellia,23L + +#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" +#define LN_camellia_192_cfb128 "camellia-192-cfb" +#define NID_camellia_192_cfb128 758 +#define OBJ_camellia_192_cfb128 OBJ_camellia,24L + +#define SN_camellia_256_ecb "CAMELLIA-256-ECB" +#define LN_camellia_256_ecb "camellia-256-ecb" +#define NID_camellia_256_ecb 756 +#define OBJ_camellia_256_ecb OBJ_camellia,41L + +#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" +#define LN_camellia_256_ofb128 "camellia-256-ofb" +#define NID_camellia_256_ofb128 768 +#define OBJ_camellia_256_ofb128 OBJ_camellia,43L + +#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" +#define LN_camellia_256_cfb128 "camellia-256-cfb" +#define NID_camellia_256_cfb128 759 +#define OBJ_camellia_256_cfb128 OBJ_camellia,44L + +#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" +#define LN_camellia_128_cfb1 "camellia-128-cfb1" +#define NID_camellia_128_cfb1 760 + +#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" +#define LN_camellia_192_cfb1 "camellia-192-cfb1" +#define NID_camellia_192_cfb1 761 + +#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" +#define LN_camellia_256_cfb1 "camellia-256-cfb1" +#define NID_camellia_256_cfb1 762 + +#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" +#define LN_camellia_128_cfb8 "camellia-128-cfb8" +#define NID_camellia_128_cfb8 763 + +#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" +#define LN_camellia_192_cfb8 "camellia-192-cfb8" +#define NID_camellia_192_cfb8 764 + +#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" +#define LN_camellia_256_cfb8 "camellia-256-cfb8" +#define NID_camellia_256_cfb8 765 + +#define SN_kisa "KISA" +#define LN_kisa "kisa" +#define NID_kisa 773 +#define OBJ_kisa OBJ_member_body,410L,200004L + +#define SN_seed_ecb "SEED-ECB" +#define LN_seed_ecb "seed-ecb" +#define NID_seed_ecb 776 +#define OBJ_seed_ecb OBJ_kisa,1L,3L + +#define SN_seed_cbc "SEED-CBC" +#define LN_seed_cbc "seed-cbc" +#define NID_seed_cbc 777 +#define OBJ_seed_cbc OBJ_kisa,1L,4L + +#define SN_seed_cfb128 "SEED-CFB" +#define LN_seed_cfb128 "seed-cfb" +#define NID_seed_cfb128 779 +#define OBJ_seed_cfb128 OBJ_kisa,1L,5L + +#define SN_seed_ofb128 "SEED-OFB" +#define LN_seed_ofb128 "seed-ofb" +#define NID_seed_ofb128 778 +#define OBJ_seed_ofb128 OBJ_kisa,1L,6L + +#define SN_hmac "HMAC" +#define LN_hmac "hmac" +#define NID_hmac 855 + +#define SN_cmac "CMAC" +#define LN_cmac "cmac" +#define NID_cmac 894 + +#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" +#define LN_rc4_hmac_md5 "rc4-hmac-md5" +#define NID_rc4_hmac_md5 915 + +#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" +#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" +#define NID_aes_128_cbc_hmac_sha1 916 + +#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" +#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" +#define NID_aes_192_cbc_hmac_sha1 917 + +#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" +#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" +#define NID_aes_256_cbc_hmac_sha1 918 + +#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" +#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" +#define NID_aes_128_cbc_hmac_sha256 948 + +#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" +#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" +#define NID_aes_192_cbc_hmac_sha256 949 + +#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" +#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" +#define NID_aes_256_cbc_hmac_sha256 950 + +#define SN_dhpublicnumber "dhpublicnumber" +#define LN_dhpublicnumber "X9.42 DH" +#define NID_dhpublicnumber 920 +#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L + +#define SN_brainpoolP160r1 "brainpoolP160r1" +#define NID_brainpoolP160r1 921 +#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L + +#define SN_brainpoolP160t1 "brainpoolP160t1" +#define NID_brainpoolP160t1 922 +#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L + +#define SN_brainpoolP192r1 "brainpoolP192r1" +#define NID_brainpoolP192r1 923 +#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L + +#define SN_brainpoolP192t1 "brainpoolP192t1" +#define NID_brainpoolP192t1 924 +#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L + +#define SN_brainpoolP224r1 "brainpoolP224r1" +#define NID_brainpoolP224r1 925 +#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L + +#define SN_brainpoolP224t1 "brainpoolP224t1" +#define NID_brainpoolP224t1 926 +#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L + +#define SN_brainpoolP256r1 "brainpoolP256r1" +#define NID_brainpoolP256r1 927 +#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L + +#define SN_brainpoolP256t1 "brainpoolP256t1" +#define NID_brainpoolP256t1 928 +#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L + +#define SN_brainpoolP320r1 "brainpoolP320r1" +#define NID_brainpoolP320r1 929 +#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L + +#define SN_brainpoolP320t1 "brainpoolP320t1" +#define NID_brainpoolP320t1 930 +#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L + +#define SN_brainpoolP384r1 "brainpoolP384r1" +#define NID_brainpoolP384r1 931 +#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L + +#define SN_brainpoolP384t1 "brainpoolP384t1" +#define NID_brainpoolP384t1 932 +#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L + +#define SN_brainpoolP512r1 "brainpoolP512r1" +#define NID_brainpoolP512r1 933 +#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L + +#define SN_brainpoolP512t1 "brainpoolP512t1" +#define NID_brainpoolP512t1 934 +#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L + +#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L + +#define OBJ_secg_scheme OBJ_certicom_arc,1L + +#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" +#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 +#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L + +#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" +#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 +#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L + +#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" +#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 +#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L + +#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" +#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 +#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L + +#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" +#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 +#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L + +#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 +#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L + +#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 +#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L + +#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 +#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L + +#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 +#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L + +#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 +#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L + +#define SN_dh_std_kdf "dh-std-kdf" +#define NID_dh_std_kdf 946 + +#define SN_dh_cofactor_kdf "dh-cofactor-kdf" +#define NID_dh_cofactor_kdf 947 + +#define SN_ct_precert_scts "ct_precert_scts" +#define LN_ct_precert_scts "CT Precertificate SCTs" +#define NID_ct_precert_scts 951 +#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L + +#define SN_ct_precert_poison "ct_precert_poison" +#define LN_ct_precert_poison "CT Precertificate Poison" +#define NID_ct_precert_poison 952 +#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L + +#define SN_ct_precert_signer "ct_precert_signer" +#define LN_ct_precert_signer "CT Precertificate Signer" +#define NID_ct_precert_signer 953 +#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L + +#define SN_ct_cert_scts "ct_cert_scts" +#define LN_ct_cert_scts "CT Certificate SCTs" +#define NID_ct_cert_scts 954 +#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L + +#define SN_jurisdictionLocalityName "jurisdictionL" +#define LN_jurisdictionLocalityName "jurisdictionLocalityName" +#define NID_jurisdictionLocalityName 955 +#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L + +#define SN_jurisdictionStateOrProvinceName "jurisdictionST" +#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" +#define NID_jurisdictionStateOrProvinceName 956 +#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L + +#define SN_jurisdictionCountryName "jurisdictionC" +#define LN_jurisdictionCountryName "jurisdictionCountryName" +#define NID_jurisdictionCountryName 957 +#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L diff --git a/src/components/openssl/objects.h b/src/components/openssl/objects.h new file mode 100644 index 0000000..16b8a9f --- /dev/null +++ b/src/components/openssl/objects.h @@ -0,0 +1,1143 @@ +/* crypto/objects/objects.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_OBJECTS_H +# define HEADER_OBJECTS_H + +# define USE_OBJ_MAC + +# ifdef USE_OBJ_MAC +# include +# else +# define SN_undef "UNDEF" +# define LN_undef "undefined" +# define NID_undef 0 +# define OBJ_undef 0L + +# define SN_Algorithm "Algorithm" +# define LN_algorithm "algorithm" +# define NID_algorithm 38 +# define OBJ_algorithm 1L,3L,14L,3L,2L + +# define LN_rsadsi "rsadsi" +# define NID_rsadsi 1 +# define OBJ_rsadsi 1L,2L,840L,113549L + +# define LN_pkcs "pkcs" +# define NID_pkcs 2 +# define OBJ_pkcs OBJ_rsadsi,1L + +# define SN_md2 "MD2" +# define LN_md2 "md2" +# define NID_md2 3 +# define OBJ_md2 OBJ_rsadsi,2L,2L + +# define SN_md5 "MD5" +# define LN_md5 "md5" +# define NID_md5 4 +# define OBJ_md5 OBJ_rsadsi,2L,5L + +# define SN_rc4 "RC4" +# define LN_rc4 "rc4" +# define NID_rc4 5 +# define OBJ_rc4 OBJ_rsadsi,3L,4L + +# define LN_rsaEncryption "rsaEncryption" +# define NID_rsaEncryption 6 +# define OBJ_rsaEncryption OBJ_pkcs,1L,1L + +# define SN_md2WithRSAEncryption "RSA-MD2" +# define LN_md2WithRSAEncryption "md2WithRSAEncryption" +# define NID_md2WithRSAEncryption 7 +# define OBJ_md2WithRSAEncryption OBJ_pkcs,1L,2L + +# define SN_md5WithRSAEncryption "RSA-MD5" +# define LN_md5WithRSAEncryption "md5WithRSAEncryption" +# define NID_md5WithRSAEncryption 8 +# define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L + +# define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +# define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +# define NID_pbeWithMD2AndDES_CBC 9 +# define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L + +# define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +# define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +# define NID_pbeWithMD5AndDES_CBC 10 +# define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L + +# define LN_X500 "X500" +# define NID_X500 11 +# define OBJ_X500 2L,5L + +# define LN_X509 "X509" +# define NID_X509 12 +# define OBJ_X509 OBJ_X500,4L + +# define SN_commonName "CN" +# define LN_commonName "commonName" +# define NID_commonName 13 +# define OBJ_commonName OBJ_X509,3L + +# define SN_countryName "C" +# define LN_countryName "countryName" +# define NID_countryName 14 +# define OBJ_countryName OBJ_X509,6L + +# define SN_localityName "L" +# define LN_localityName "localityName" +# define NID_localityName 15 +# define OBJ_localityName OBJ_X509,7L + +/* Postal Address? PA */ + +/* should be "ST" (rfc1327) but MS uses 'S' */ +# define SN_stateOrProvinceName "ST" +# define LN_stateOrProvinceName "stateOrProvinceName" +# define NID_stateOrProvinceName 16 +# define OBJ_stateOrProvinceName OBJ_X509,8L + +# define SN_organizationName "O" +# define LN_organizationName "organizationName" +# define NID_organizationName 17 +# define OBJ_organizationName OBJ_X509,10L + +# define SN_organizationalUnitName "OU" +# define LN_organizationalUnitName "organizationalUnitName" +# define NID_organizationalUnitName 18 +# define OBJ_organizationalUnitName OBJ_X509,11L + +# define SN_rsa "RSA" +# define LN_rsa "rsa" +# define NID_rsa 19 +# define OBJ_rsa OBJ_X500,8L,1L,1L + +# define LN_pkcs7 "pkcs7" +# define NID_pkcs7 20 +# define OBJ_pkcs7 OBJ_pkcs,7L + +# define LN_pkcs7_data "pkcs7-data" +# define NID_pkcs7_data 21 +# define OBJ_pkcs7_data OBJ_pkcs7,1L + +# define LN_pkcs7_signed "pkcs7-signedData" +# define NID_pkcs7_signed 22 +# define OBJ_pkcs7_signed OBJ_pkcs7,2L + +# define LN_pkcs7_enveloped "pkcs7-envelopedData" +# define NID_pkcs7_enveloped 23 +# define OBJ_pkcs7_enveloped OBJ_pkcs7,3L + +# define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" +# define NID_pkcs7_signedAndEnveloped 24 +# define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L + +# define LN_pkcs7_digest "pkcs7-digestData" +# define NID_pkcs7_digest 25 +# define OBJ_pkcs7_digest OBJ_pkcs7,5L + +# define LN_pkcs7_encrypted "pkcs7-encryptedData" +# define NID_pkcs7_encrypted 26 +# define OBJ_pkcs7_encrypted OBJ_pkcs7,6L + +# define LN_pkcs3 "pkcs3" +# define NID_pkcs3 27 +# define OBJ_pkcs3 OBJ_pkcs,3L + +# define LN_dhKeyAgreement "dhKeyAgreement" +# define NID_dhKeyAgreement 28 +# define OBJ_dhKeyAgreement OBJ_pkcs3,1L + +# define SN_des_ecb "DES-ECB" +# define LN_des_ecb "des-ecb" +# define NID_des_ecb 29 +# define OBJ_des_ecb OBJ_algorithm,6L + +# define SN_des_cfb64 "DES-CFB" +# define LN_des_cfb64 "des-cfb" +# define NID_des_cfb64 30 +/* IV + num */ +# define OBJ_des_cfb64 OBJ_algorithm,9L + +# define SN_des_cbc "DES-CBC" +# define LN_des_cbc "des-cbc" +# define NID_des_cbc 31 +/* IV */ +# define OBJ_des_cbc OBJ_algorithm,7L + +# define SN_des_ede "DES-EDE" +# define LN_des_ede "des-ede" +# define NID_des_ede 32 +/* ?? */ +# define OBJ_des_ede OBJ_algorithm,17L + +# define SN_des_ede3 "DES-EDE3" +# define LN_des_ede3 "des-ede3" +# define NID_des_ede3 33 + +# define SN_idea_cbc "IDEA-CBC" +# define LN_idea_cbc "idea-cbc" +# define NID_idea_cbc 34 +# define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L + +# define SN_idea_cfb64 "IDEA-CFB" +# define LN_idea_cfb64 "idea-cfb" +# define NID_idea_cfb64 35 + +# define SN_idea_ecb "IDEA-ECB" +# define LN_idea_ecb "idea-ecb" +# define NID_idea_ecb 36 + +# define SN_rc2_cbc "RC2-CBC" +# define LN_rc2_cbc "rc2-cbc" +# define NID_rc2_cbc 37 +# define OBJ_rc2_cbc OBJ_rsadsi,3L,2L + +# define SN_rc2_ecb "RC2-ECB" +# define LN_rc2_ecb "rc2-ecb" +# define NID_rc2_ecb 38 + +# define SN_rc2_cfb64 "RC2-CFB" +# define LN_rc2_cfb64 "rc2-cfb" +# define NID_rc2_cfb64 39 + +# define SN_rc2_ofb64 "RC2-OFB" +# define LN_rc2_ofb64 "rc2-ofb" +# define NID_rc2_ofb64 40 + +# define SN_sha "SHA" +# define LN_sha "sha" +# define NID_sha 41 +# define OBJ_sha OBJ_algorithm,18L + +# define SN_shaWithRSAEncryption "RSA-SHA" +# define LN_shaWithRSAEncryption "shaWithRSAEncryption" +# define NID_shaWithRSAEncryption 42 +# define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +# define SN_des_ede_cbc "DES-EDE-CBC" +# define LN_des_ede_cbc "des-ede-cbc" +# define NID_des_ede_cbc 43 + +# define SN_des_ede3_cbc "DES-EDE3-CBC" +# define LN_des_ede3_cbc "des-ede3-cbc" +# define NID_des_ede3_cbc 44 +# define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L + +# define SN_des_ofb64 "DES-OFB" +# define LN_des_ofb64 "des-ofb" +# define NID_des_ofb64 45 +# define OBJ_des_ofb64 OBJ_algorithm,8L + +# define SN_idea_ofb64 "IDEA-OFB" +# define LN_idea_ofb64 "idea-ofb" +# define NID_idea_ofb64 46 + +# define LN_pkcs9 "pkcs9" +# define NID_pkcs9 47 +# define OBJ_pkcs9 OBJ_pkcs,9L + +# define SN_pkcs9_emailAddress "Email" +# define LN_pkcs9_emailAddress "emailAddress" +# define NID_pkcs9_emailAddress 48 +# define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L + +# define LN_pkcs9_unstructuredName "unstructuredName" +# define NID_pkcs9_unstructuredName 49 +# define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L + +# define LN_pkcs9_contentType "contentType" +# define NID_pkcs9_contentType 50 +# define OBJ_pkcs9_contentType OBJ_pkcs9,3L + +# define LN_pkcs9_messageDigest "messageDigest" +# define NID_pkcs9_messageDigest 51 +# define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L + +# define LN_pkcs9_signingTime "signingTime" +# define NID_pkcs9_signingTime 52 +# define OBJ_pkcs9_signingTime OBJ_pkcs9,5L + +# define LN_pkcs9_countersignature "countersignature" +# define NID_pkcs9_countersignature 53 +# define OBJ_pkcs9_countersignature OBJ_pkcs9,6L + +# define LN_pkcs9_challengePassword "challengePassword" +# define NID_pkcs9_challengePassword 54 +# define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L + +# define LN_pkcs9_unstructuredAddress "unstructuredAddress" +# define NID_pkcs9_unstructuredAddress 55 +# define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L + +# define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" +# define NID_pkcs9_extCertAttributes 56 +# define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L + +# define SN_netscape "Netscape" +# define LN_netscape "Netscape Communications Corp." +# define NID_netscape 57 +# define OBJ_netscape 2L,16L,840L,1L,113730L + +# define SN_netscape_cert_extension "nsCertExt" +# define LN_netscape_cert_extension "Netscape Certificate Extension" +# define NID_netscape_cert_extension 58 +# define OBJ_netscape_cert_extension OBJ_netscape,1L + +# define SN_netscape_data_type "nsDataType" +# define LN_netscape_data_type "Netscape Data Type" +# define NID_netscape_data_type 59 +# define OBJ_netscape_data_type OBJ_netscape,2L + +# define SN_des_ede_cfb64 "DES-EDE-CFB" +# define LN_des_ede_cfb64 "des-ede-cfb" +# define NID_des_ede_cfb64 60 + +# define SN_des_ede3_cfb64 "DES-EDE3-CFB" +# define LN_des_ede3_cfb64 "des-ede3-cfb" +# define NID_des_ede3_cfb64 61 + +# define SN_des_ede_ofb64 "DES-EDE-OFB" +# define LN_des_ede_ofb64 "des-ede-ofb" +# define NID_des_ede_ofb64 62 + +# define SN_des_ede3_ofb64 "DES-EDE3-OFB" +# define LN_des_ede3_ofb64 "des-ede3-ofb" +# define NID_des_ede3_ofb64 63 + +/* I'm not sure about the object ID */ +# define SN_sha1 "SHA1" +# define LN_sha1 "sha1" +# define NID_sha1 64 +# define OBJ_sha1 OBJ_algorithm,26L +/* 28 Jun 1996 - eay */ +/* #define OBJ_sha1 1L,3L,14L,2L,26L,05L <- wrong */ + +# define SN_sha1WithRSAEncryption "RSA-SHA1" +# define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +# define NID_sha1WithRSAEncryption 65 +# define OBJ_sha1WithRSAEncryption OBJ_pkcs,1L,5L + +# define SN_dsaWithSHA "DSA-SHA" +# define LN_dsaWithSHA "dsaWithSHA" +# define NID_dsaWithSHA 66 +# define OBJ_dsaWithSHA OBJ_algorithm,13L + +# define SN_dsa_2 "DSA-old" +# define LN_dsa_2 "dsaEncryption-old" +# define NID_dsa_2 67 +# define OBJ_dsa_2 OBJ_algorithm,12L + +/* proposed by microsoft to RSA */ +# define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +# define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +# define NID_pbeWithSHA1AndRC2_CBC 68 +# define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L + +/* + * proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now defined + * explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something completely + * different. + */ +# define LN_id_pbkdf2 "PBKDF2" +# define NID_id_pbkdf2 69 +# define OBJ_id_pbkdf2 OBJ_pkcs,5L,12L + +# define SN_dsaWithSHA1_2 "DSA-SHA1-old" +# define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +# define NID_dsaWithSHA1_2 70 +/* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */ +# define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +# define SN_netscape_cert_type "nsCertType" +# define LN_netscape_cert_type "Netscape Cert Type" +# define NID_netscape_cert_type 71 +# define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L + +# define SN_netscape_base_url "nsBaseUrl" +# define LN_netscape_base_url "Netscape Base Url" +# define NID_netscape_base_url 72 +# define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L + +# define SN_netscape_revocation_url "nsRevocationUrl" +# define LN_netscape_revocation_url "Netscape Revocation Url" +# define NID_netscape_revocation_url 73 +# define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L + +# define SN_netscape_ca_revocation_url "nsCaRevocationUrl" +# define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" +# define NID_netscape_ca_revocation_url 74 +# define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L + +# define SN_netscape_renewal_url "nsRenewalUrl" +# define LN_netscape_renewal_url "Netscape Renewal Url" +# define NID_netscape_renewal_url 75 +# define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L + +# define SN_netscape_ca_policy_url "nsCaPolicyUrl" +# define LN_netscape_ca_policy_url "Netscape CA Policy Url" +# define NID_netscape_ca_policy_url 76 +# define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L + +# define SN_netscape_ssl_server_name "nsSslServerName" +# define LN_netscape_ssl_server_name "Netscape SSL Server Name" +# define NID_netscape_ssl_server_name 77 +# define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L + +# define SN_netscape_comment "nsComment" +# define LN_netscape_comment "Netscape Comment" +# define NID_netscape_comment 78 +# define OBJ_netscape_comment OBJ_netscape_cert_extension,13L + +# define SN_netscape_cert_sequence "nsCertSequence" +# define LN_netscape_cert_sequence "Netscape Certificate Sequence" +# define NID_netscape_cert_sequence 79 +# define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L + +# define SN_desx_cbc "DESX-CBC" +# define LN_desx_cbc "desx-cbc" +# define NID_desx_cbc 80 + +# define SN_id_ce "id-ce" +# define NID_id_ce 81 +# define OBJ_id_ce 2L,5L,29L + +# define SN_subject_key_identifier "subjectKeyIdentifier" +# define LN_subject_key_identifier "X509v3 Subject Key Identifier" +# define NID_subject_key_identifier 82 +# define OBJ_subject_key_identifier OBJ_id_ce,14L + +# define SN_key_usage "keyUsage" +# define LN_key_usage "X509v3 Key Usage" +# define NID_key_usage 83 +# define OBJ_key_usage OBJ_id_ce,15L + +# define SN_private_key_usage_period "privateKeyUsagePeriod" +# define LN_private_key_usage_period "X509v3 Private Key Usage Period" +# define NID_private_key_usage_period 84 +# define OBJ_private_key_usage_period OBJ_id_ce,16L + +# define SN_subject_alt_name "subjectAltName" +# define LN_subject_alt_name "X509v3 Subject Alternative Name" +# define NID_subject_alt_name 85 +# define OBJ_subject_alt_name OBJ_id_ce,17L + +# define SN_issuer_alt_name "issuerAltName" +# define LN_issuer_alt_name "X509v3 Issuer Alternative Name" +# define NID_issuer_alt_name 86 +# define OBJ_issuer_alt_name OBJ_id_ce,18L + +# define SN_basic_constraints "basicConstraints" +# define LN_basic_constraints "X509v3 Basic Constraints" +# define NID_basic_constraints 87 +# define OBJ_basic_constraints OBJ_id_ce,19L + +# define SN_crl_number "crlNumber" +# define LN_crl_number "X509v3 CRL Number" +# define NID_crl_number 88 +# define OBJ_crl_number OBJ_id_ce,20L + +# define SN_certificate_policies "certificatePolicies" +# define LN_certificate_policies "X509v3 Certificate Policies" +# define NID_certificate_policies 89 +# define OBJ_certificate_policies OBJ_id_ce,32L + +# define SN_authority_key_identifier "authorityKeyIdentifier" +# define LN_authority_key_identifier "X509v3 Authority Key Identifier" +# define NID_authority_key_identifier 90 +# define OBJ_authority_key_identifier OBJ_id_ce,35L + +# define SN_bf_cbc "BF-CBC" +# define LN_bf_cbc "bf-cbc" +# define NID_bf_cbc 91 +# define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L + +# define SN_bf_ecb "BF-ECB" +# define LN_bf_ecb "bf-ecb" +# define NID_bf_ecb 92 + +# define SN_bf_cfb64 "BF-CFB" +# define LN_bf_cfb64 "bf-cfb" +# define NID_bf_cfb64 93 + +# define SN_bf_ofb64 "BF-OFB" +# define LN_bf_ofb64 "bf-ofb" +# define NID_bf_ofb64 94 + +# define SN_mdc2 "MDC2" +# define LN_mdc2 "mdc2" +# define NID_mdc2 95 +# define OBJ_mdc2 2L,5L,8L,3L,101L +/* An alternative? 1L,3L,14L,3L,2L,19L */ + +# define SN_mdc2WithRSA "RSA-MDC2" +# define LN_mdc2WithRSA "mdc2withRSA" +# define NID_mdc2WithRSA 96 +# define OBJ_mdc2WithRSA 2L,5L,8L,3L,100L + +# define SN_rc4_40 "RC4-40" +# define LN_rc4_40 "rc4-40" +# define NID_rc4_40 97 + +# define SN_rc2_40_cbc "RC2-40-CBC" +# define LN_rc2_40_cbc "rc2-40-cbc" +# define NID_rc2_40_cbc 98 + +# define SN_givenName "G" +# define LN_givenName "givenName" +# define NID_givenName 99 +# define OBJ_givenName OBJ_X509,42L + +# define SN_surname "S" +# define LN_surname "surname" +# define NID_surname 100 +# define OBJ_surname OBJ_X509,4L + +# define SN_initials "I" +# define LN_initials "initials" +# define NID_initials 101 +# define OBJ_initials OBJ_X509,43L + +# define SN_uniqueIdentifier "UID" +# define LN_uniqueIdentifier "uniqueIdentifier" +# define NID_uniqueIdentifier 102 +# define OBJ_uniqueIdentifier OBJ_X509,45L + +# define SN_crl_distribution_points "crlDistributionPoints" +# define LN_crl_distribution_points "X509v3 CRL Distribution Points" +# define NID_crl_distribution_points 103 +# define OBJ_crl_distribution_points OBJ_id_ce,31L + +# define SN_md5WithRSA "RSA-NP-MD5" +# define LN_md5WithRSA "md5WithRSA" +# define NID_md5WithRSA 104 +# define OBJ_md5WithRSA OBJ_algorithm,3L + +# define SN_serialNumber "SN" +# define LN_serialNumber "serialNumber" +# define NID_serialNumber 105 +# define OBJ_serialNumber OBJ_X509,5L + +# define SN_title "T" +# define LN_title "title" +# define NID_title 106 +# define OBJ_title OBJ_X509,12L + +# define SN_description "D" +# define LN_description "description" +# define NID_description 107 +# define OBJ_description OBJ_X509,13L + +/* CAST5 is CAST-128, I'm just sticking with the documentation */ +# define SN_cast5_cbc "CAST5-CBC" +# define LN_cast5_cbc "cast5-cbc" +# define NID_cast5_cbc 108 +# define OBJ_cast5_cbc 1L,2L,840L,113533L,7L,66L,10L + +# define SN_cast5_ecb "CAST5-ECB" +# define LN_cast5_ecb "cast5-ecb" +# define NID_cast5_ecb 109 + +# define SN_cast5_cfb64 "CAST5-CFB" +# define LN_cast5_cfb64 "cast5-cfb" +# define NID_cast5_cfb64 110 + +# define SN_cast5_ofb64 "CAST5-OFB" +# define LN_cast5_ofb64 "cast5-ofb" +# define NID_cast5_ofb64 111 + +# define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" +# define NID_pbeWithMD5AndCast5_CBC 112 +# define OBJ_pbeWithMD5AndCast5_CBC 1L,2L,840L,113533L,7L,66L,12L + +/*- + * This is one sun will soon be using :-( + * id-dsa-with-sha1 ID ::= { + * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 } + */ +# define SN_dsaWithSHA1 "DSA-SHA1" +# define LN_dsaWithSHA1 "dsaWithSHA1" +# define NID_dsaWithSHA1 113 +# define OBJ_dsaWithSHA1 1L,2L,840L,10040L,4L,3L + +# define NID_md5_sha1 114 +# define SN_md5_sha1 "MD5-SHA1" +# define LN_md5_sha1 "md5-sha1" + +# define SN_sha1WithRSA "RSA-SHA1-2" +# define LN_sha1WithRSA "sha1WithRSA" +# define NID_sha1WithRSA 115 +# define OBJ_sha1WithRSA OBJ_algorithm,29L + +# define SN_dsa "DSA" +# define LN_dsa "dsaEncryption" +# define NID_dsa 116 +# define OBJ_dsa 1L,2L,840L,10040L,4L,1L + +# define SN_ripemd160 "RIPEMD160" +# define LN_ripemd160 "ripemd160" +# define NID_ripemd160 117 +# define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +/* + * The name should actually be rsaSignatureWithripemd160, but I'm going to + * continue using the convention I'm using with the other ciphers + */ +# define SN_ripemd160WithRSA "RSA-RIPEMD160" +# define LN_ripemd160WithRSA "ripemd160WithRSA" +# define NID_ripemd160WithRSA 119 +# define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +/*- + * Taken from rfc2040 + * RC5_CBC_Parameters ::= SEQUENCE { + * version INTEGER (v1_0(16)), + * rounds INTEGER (8..127), + * blockSizeInBits INTEGER (64, 128), + * iv OCTET STRING OPTIONAL + * } + */ +# define SN_rc5_cbc "RC5-CBC" +# define LN_rc5_cbc "rc5-cbc" +# define NID_rc5_cbc 120 +# define OBJ_rc5_cbc OBJ_rsadsi,3L,8L + +# define SN_rc5_ecb "RC5-ECB" +# define LN_rc5_ecb "rc5-ecb" +# define NID_rc5_ecb 121 + +# define SN_rc5_cfb64 "RC5-CFB" +# define LN_rc5_cfb64 "rc5-cfb" +# define NID_rc5_cfb64 122 + +# define SN_rc5_ofb64 "RC5-OFB" +# define LN_rc5_ofb64 "rc5-ofb" +# define NID_rc5_ofb64 123 + +# define SN_rle_compression "RLE" +# define LN_rle_compression "run length compression" +# define NID_rle_compression 124 +# define OBJ_rle_compression 1L,1L,1L,1L,666L,1L + +# define SN_zlib_compression "ZLIB" +# define LN_zlib_compression "zlib compression" +# define NID_zlib_compression 125 +# define OBJ_zlib_compression 1L,1L,1L,1L,666L,2L + +# define SN_ext_key_usage "extendedKeyUsage" +# define LN_ext_key_usage "X509v3 Extended Key Usage" +# define NID_ext_key_usage 126 +# define OBJ_ext_key_usage OBJ_id_ce,37 + +# define SN_id_pkix "PKIX" +# define NID_id_pkix 127 +# define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +# define SN_id_kp "id-kp" +# define NID_id_kp 128 +# define OBJ_id_kp OBJ_id_pkix,3L + +/* PKIX extended key usage OIDs */ + +# define SN_server_auth "serverAuth" +# define LN_server_auth "TLS Web Server Authentication" +# define NID_server_auth 129 +# define OBJ_server_auth OBJ_id_kp,1L + +# define SN_client_auth "clientAuth" +# define LN_client_auth "TLS Web Client Authentication" +# define NID_client_auth 130 +# define OBJ_client_auth OBJ_id_kp,2L + +# define SN_code_sign "codeSigning" +# define LN_code_sign "Code Signing" +# define NID_code_sign 131 +# define OBJ_code_sign OBJ_id_kp,3L + +# define SN_email_protect "emailProtection" +# define LN_email_protect "E-mail Protection" +# define NID_email_protect 132 +# define OBJ_email_protect OBJ_id_kp,4L + +# define SN_time_stamp "timeStamping" +# define LN_time_stamp "Time Stamping" +# define NID_time_stamp 133 +# define OBJ_time_stamp OBJ_id_kp,8L + +/* Additional extended key usage OIDs: Microsoft */ + +# define SN_ms_code_ind "msCodeInd" +# define LN_ms_code_ind "Microsoft Individual Code Signing" +# define NID_ms_code_ind 134 +# define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L + +# define SN_ms_code_com "msCodeCom" +# define LN_ms_code_com "Microsoft Commercial Code Signing" +# define NID_ms_code_com 135 +# define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L + +# define SN_ms_ctl_sign "msCTLSign" +# define LN_ms_ctl_sign "Microsoft Trust List Signing" +# define NID_ms_ctl_sign 136 +# define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L + +# define SN_ms_sgc "msSGC" +# define LN_ms_sgc "Microsoft Server Gated Crypto" +# define NID_ms_sgc 137 +# define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L + +# define SN_ms_efs "msEFS" +# define LN_ms_efs "Microsoft Encrypted File System" +# define NID_ms_efs 138 +# define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L + +/* Additional usage: Netscape */ + +# define SN_ns_sgc "nsSGC" +# define LN_ns_sgc "Netscape Server Gated Crypto" +# define NID_ns_sgc 139 +# define OBJ_ns_sgc OBJ_netscape,4L,1L + +# define SN_delta_crl "deltaCRL" +# define LN_delta_crl "X509v3 Delta CRL Indicator" +# define NID_delta_crl 140 +# define OBJ_delta_crl OBJ_id_ce,27L + +# define SN_crl_reason "CRLReason" +# define LN_crl_reason "CRL Reason Code" +# define NID_crl_reason 141 +# define OBJ_crl_reason OBJ_id_ce,21L + +# define SN_invalidity_date "invalidityDate" +# define LN_invalidity_date "Invalidity Date" +# define NID_invalidity_date 142 +# define OBJ_invalidity_date OBJ_id_ce,24L + +# define SN_sxnet "SXNetID" +# define LN_sxnet "Strong Extranet ID" +# define NID_sxnet 143 +# define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +/* PKCS12 and related OBJECT IDENTIFIERS */ + +# define OBJ_pkcs12 OBJ_pkcs,12L +# define OBJ_pkcs12_pbeids OBJ_pkcs12, 1 + +# define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" +# define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" +# define NID_pbe_WithSHA1And128BitRC4 144 +# define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L + +# define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" +# define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" +# define NID_pbe_WithSHA1And40BitRC4 145 +# define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L + +# define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" +# define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" +# define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 +# define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L + +# define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" +# define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" +# define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 +# define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L + +# define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" +# define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" +# define NID_pbe_WithSHA1And128BitRC2_CBC 148 +# define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L + +# define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" +# define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" +# define NID_pbe_WithSHA1And40BitRC2_CBC 149 +# define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L + +# define OBJ_pkcs12_Version1 OBJ_pkcs12, 10L + +# define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1, 1L + +# define LN_keyBag "keyBag" +# define NID_keyBag 150 +# define OBJ_keyBag OBJ_pkcs12_BagIds, 1L + +# define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" +# define NID_pkcs8ShroudedKeyBag 151 +# define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L + +# define LN_certBag "certBag" +# define NID_certBag 152 +# define OBJ_certBag OBJ_pkcs12_BagIds, 3L + +# define LN_crlBag "crlBag" +# define NID_crlBag 153 +# define OBJ_crlBag OBJ_pkcs12_BagIds, 4L + +# define LN_secretBag "secretBag" +# define NID_secretBag 154 +# define OBJ_secretBag OBJ_pkcs12_BagIds, 5L + +# define LN_safeContentsBag "safeContentsBag" +# define NID_safeContentsBag 155 +# define OBJ_safeContentsBag OBJ_pkcs12_BagIds, 6L + +# define LN_friendlyName "friendlyName" +# define NID_friendlyName 156 +# define OBJ_friendlyName OBJ_pkcs9, 20L + +# define LN_localKeyID "localKeyID" +# define NID_localKeyID 157 +# define OBJ_localKeyID OBJ_pkcs9, 21L + +# define OBJ_certTypes OBJ_pkcs9, 22L + +# define LN_x509Certificate "x509Certificate" +# define NID_x509Certificate 158 +# define OBJ_x509Certificate OBJ_certTypes, 1L + +# define LN_sdsiCertificate "sdsiCertificate" +# define NID_sdsiCertificate 159 +# define OBJ_sdsiCertificate OBJ_certTypes, 2L + +# define OBJ_crlTypes OBJ_pkcs9, 23L + +# define LN_x509Crl "x509Crl" +# define NID_x509Crl 160 +# define OBJ_x509Crl OBJ_crlTypes, 1L + +/* PKCS#5 v2 OIDs */ + +# define LN_pbes2 "PBES2" +# define NID_pbes2 161 +# define OBJ_pbes2 OBJ_pkcs,5L,13L + +# define LN_pbmac1 "PBMAC1" +# define NID_pbmac1 162 +# define OBJ_pbmac1 OBJ_pkcs,5L,14L + +# define LN_hmacWithSHA1 "hmacWithSHA1" +# define NID_hmacWithSHA1 163 +# define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +/* Policy Qualifier Ids */ + +# define LN_id_qt_cps "Policy Qualifier CPS" +# define SN_id_qt_cps "id-qt-cps" +# define NID_id_qt_cps 164 +# define OBJ_id_qt_cps OBJ_id_pkix,2L,1L + +# define LN_id_qt_unotice "Policy Qualifier User Notice" +# define SN_id_qt_unotice "id-qt-unotice" +# define NID_id_qt_unotice 165 +# define OBJ_id_qt_unotice OBJ_id_pkix,2L,2L + +# define SN_rc2_64_cbc "RC2-64-CBC" +# define LN_rc2_64_cbc "rc2-64-cbc" +# define NID_rc2_64_cbc 166 + +# define SN_SMIMECapabilities "SMIME-CAPS" +# define LN_SMIMECapabilities "S/MIME Capabilities" +# define NID_SMIMECapabilities 167 +# define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +# define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +# define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +# define NID_pbeWithMD2AndRC2_CBC 168 +# define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L + +# define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" +# define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" +# define NID_pbeWithMD5AndRC2_CBC 169 +# define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L + +# define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +# define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +# define NID_pbeWithSHA1AndDES_CBC 170 +# define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L + +/* Extension request OIDs */ + +# define LN_ms_ext_req "Microsoft Extension Request" +# define SN_ms_ext_req "msExtReq" +# define NID_ms_ext_req 171 +# define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +# define LN_ext_req "Extension Request" +# define SN_ext_req "extReq" +# define NID_ext_req 172 +# define OBJ_ext_req OBJ_pkcs9,14L + +# define SN_name "name" +# define LN_name "name" +# define NID_name 173 +# define OBJ_name OBJ_X509,41L + +# define SN_dnQualifier "dnQualifier" +# define LN_dnQualifier "dnQualifier" +# define NID_dnQualifier 174 +# define OBJ_dnQualifier OBJ_X509,46L + +# define SN_id_pe "id-pe" +# define NID_id_pe 175 +# define OBJ_id_pe OBJ_id_pkix,1L + +# define SN_id_ad "id-ad" +# define NID_id_ad 176 +# define OBJ_id_ad OBJ_id_pkix,48L + +# define SN_info_access "authorityInfoAccess" +# define LN_info_access "Authority Information Access" +# define NID_info_access 177 +# define OBJ_info_access OBJ_id_pe,1L + +# define SN_ad_OCSP "OCSP" +# define LN_ad_OCSP "OCSP" +# define NID_ad_OCSP 178 +# define OBJ_ad_OCSP OBJ_id_ad,1L + +# define SN_ad_ca_issuers "caIssuers" +# define LN_ad_ca_issuers "CA Issuers" +# define NID_ad_ca_issuers 179 +# define OBJ_ad_ca_issuers OBJ_id_ad,2L + +# define SN_OCSP_sign "OCSPSigning" +# define LN_OCSP_sign "OCSP Signing" +# define NID_OCSP_sign 180 +# define OBJ_OCSP_sign OBJ_id_kp,9L +# endif /* USE_OBJ_MAC */ + +# include +# include + +# define OBJ_NAME_TYPE_UNDEF 0x00 +# define OBJ_NAME_TYPE_MD_METH 0x01 +# define OBJ_NAME_TYPE_CIPHER_METH 0x02 +# define OBJ_NAME_TYPE_PKEY_METH 0x03 +# define OBJ_NAME_TYPE_COMP_METH 0x04 +# define OBJ_NAME_TYPE_NUM 0x05 + +# define OBJ_NAME_ALIAS 0x8000 + +# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct obj_name_st { + int type; + int alias; + const char *name; + const char *data; +} OBJ_NAME; + +# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) + +int OBJ_NAME_init(void); +int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), + int (*cmp_func) (const char *, const char *), + void (*free_func) (const char *, int, const char *)); +const char *OBJ_NAME_get(const char *name, int type); +int OBJ_NAME_add(const char *name, int type, const char *data); +int OBJ_NAME_remove(const char *name, int type); +void OBJ_NAME_cleanup(int type); /* -1 for everything */ +void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), + void *arg); +void OBJ_NAME_do_all_sorted(int type, + void (*fn) (const OBJ_NAME *, void *arg), + void *arg); + +ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_nid2obj(int n); +const char *OBJ_nid2ln(int n); +const char *OBJ_nid2sn(int n); +int OBJ_obj2nid(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); +int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); +int OBJ_txt2nid(const char *s); +int OBJ_ln2nid(const char *s); +int OBJ_sn2nid(const char *s); +int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); +const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, + int (*cmp) (const void *, const void *)); +const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, + int size, + int (*cmp) (const void *, const void *), + int flags); + +# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ + static int nm##_cmp(type1 const *, type2 const *); \ + scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ + _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) +# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +/*- + * Unsolved problem: if a type is actually a pointer type, like + * nid_triple is, then its impossible to get a const where you need + * it. Consider: + * + * typedef int nid_triple[3]; + * const void *a_; + * const nid_triple const *a = a_; + * + * The assignement discards a const because what you really want is: + * + * const int const * const *a = a_; + * + * But if you do that, you lose the fact that a is an array of 3 ints, + * which breaks comparison functions. + * + * Thus we end up having to cast, sadly, or unpack the + * declarations. Or, as I finally did in this case, delcare nid_triple + * to be a struct, which it should have been in the first place. + * + * Ben, August 2008. + * + * Also, strictly speaking not all types need be const, but handling + * the non-constness means a lot of complication, and in practice + * comparison routines do always not touch their arguments. + */ + +# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ + ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN))) + +# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ + ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN)),flags) + +int OBJ_new_nid(int num); +int OBJ_add_object(const ASN1_OBJECT *obj); +int OBJ_create(const char *oid, const char *sn, const char *ln); +void OBJ_cleanup(void); +int OBJ_create_objects(BIO *in); + +int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); +int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); +int OBJ_add_sigid(int signid, int dig_id, int pkey_id); +void OBJ_sigid_free(void); + +extern int obj_cleanup_defer; +void check_defer(int nid); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_OBJ_strings(void); + +/* Error codes for the OBJ functions. */ + +/* Function codes. */ +# define OBJ_F_OBJ_ADD_OBJECT 105 +# define OBJ_F_OBJ_CREATE 100 +# define OBJ_F_OBJ_DUP 101 +# define OBJ_F_OBJ_NAME_NEW_INDEX 106 +# define OBJ_F_OBJ_NID2LN 102 +# define OBJ_F_OBJ_NID2OBJ 103 +# define OBJ_F_OBJ_NID2SN 104 + +/* Reason codes. */ +# define OBJ_R_MALLOC_FAILURE 100 +# define OBJ_R_UNKNOWN_NID 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ocsp.h b/src/components/openssl/ocsp.h new file mode 100644 index 0000000..996c62f --- /dev/null +++ b/src/components/openssl/ocsp.h @@ -0,0 +1,637 @@ +/* ocsp.h */ +/* + * Written by Tom Titchener for the OpenSSL + * project. + */ + +/* + * History: This file was transfered to Richard Levitte from CertCo by Kathy + * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a + * patch kit. + */ + +/* ==================================================================== + * Copyright (c) 1998-2000 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_OCSP_H +# define HEADER_OCSP_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 + +/*- CertID ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier, + * issuerNameHash OCTET STRING, -- Hash of Issuer's DN + * issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields) + * serialNumber CertificateSerialNumber } + */ +typedef struct ocsp_cert_id_st { + X509_ALGOR *hashAlgorithm; + ASN1_OCTET_STRING *issuerNameHash; + ASN1_OCTET_STRING *issuerKeyHash; + ASN1_INTEGER *serialNumber; +} OCSP_CERTID; + +DECLARE_STACK_OF(OCSP_CERTID) + +/*- Request ::= SEQUENCE { + * reqCert CertID, + * singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_one_request_st { + OCSP_CERTID *reqCert; + STACK_OF(X509_EXTENSION) *singleRequestExtensions; +} OCSP_ONEREQ; + +DECLARE_STACK_OF(OCSP_ONEREQ) +DECLARE_ASN1_SET_OF(OCSP_ONEREQ) + +/*- TBSRequest ::= SEQUENCE { + * version [0] EXPLICIT Version DEFAULT v1, + * requestorName [1] EXPLICIT GeneralName OPTIONAL, + * requestList SEQUENCE OF Request, + * requestExtensions [2] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_req_info_st { + ASN1_INTEGER *version; + GENERAL_NAME *requestorName; + STACK_OF(OCSP_ONEREQ) *requestList; + STACK_OF(X509_EXTENSION) *requestExtensions; +} OCSP_REQINFO; + +/*- Signature ::= SEQUENCE { + * signatureAlgorithm AlgorithmIdentifier, + * signature BIT STRING, + * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } + */ +typedef struct ocsp_signature_st { + X509_ALGOR *signatureAlgorithm; + ASN1_BIT_STRING *signature; + STACK_OF(X509) *certs; +} OCSP_SIGNATURE; + +/*- OCSPRequest ::= SEQUENCE { + * tbsRequest TBSRequest, + * optionalSignature [0] EXPLICIT Signature OPTIONAL } + */ +typedef struct ocsp_request_st { + OCSP_REQINFO *tbsRequest; + OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */ +} OCSP_REQUEST; + +/*- OCSPResponseStatus ::= ENUMERATED { + * successful (0), --Response has valid confirmations + * malformedRequest (1), --Illegal confirmation request + * internalError (2), --Internal error in issuer + * tryLater (3), --Try again later + * --(4) is not used + * sigRequired (5), --Must sign the request + * unauthorized (6) --Request unauthorized + * } + */ +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +/*- ResponseBytes ::= SEQUENCE { + * responseType OBJECT IDENTIFIER, + * response OCTET STRING } + */ +typedef struct ocsp_resp_bytes_st { + ASN1_OBJECT *responseType; + ASN1_OCTET_STRING *response; +} OCSP_RESPBYTES; + +/*- OCSPResponse ::= SEQUENCE { + * responseStatus OCSPResponseStatus, + * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } + */ +struct ocsp_response_st { + ASN1_ENUMERATED *responseStatus; + OCSP_RESPBYTES *responseBytes; +}; + +/*- ResponderID ::= CHOICE { + * byName [1] Name, + * byKey [2] KeyHash } + */ +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 +struct ocsp_responder_id_st { + int type; + union { + X509_NAME *byName; + ASN1_OCTET_STRING *byKey; + } value; +}; + +DECLARE_STACK_OF(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) + +/*- KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key + * --(excluding the tag and length fields) + */ + +/*- RevokedInfo ::= SEQUENCE { + * revocationTime GeneralizedTime, + * revocationReason [0] EXPLICIT CRLReason OPTIONAL } + */ +typedef struct ocsp_revoked_info_st { + ASN1_GENERALIZEDTIME *revocationTime; + ASN1_ENUMERATED *revocationReason; +} OCSP_REVOKEDINFO; + +/*- CertStatus ::= CHOICE { + * good [0] IMPLICIT NULL, + * revoked [1] IMPLICIT RevokedInfo, + * unknown [2] IMPLICIT UnknownInfo } + */ +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 +typedef struct ocsp_cert_status_st { + int type; + union { + ASN1_NULL *good; + OCSP_REVOKEDINFO *revoked; + ASN1_NULL *unknown; + } value; +} OCSP_CERTSTATUS; + +/*- SingleResponse ::= SEQUENCE { + * certID CertID, + * certStatus CertStatus, + * thisUpdate GeneralizedTime, + * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, + * singleExtensions [1] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_single_response_st { + OCSP_CERTID *certId; + OCSP_CERTSTATUS *certStatus; + ASN1_GENERALIZEDTIME *thisUpdate; + ASN1_GENERALIZEDTIME *nextUpdate; + STACK_OF(X509_EXTENSION) *singleExtensions; +} OCSP_SINGLERESP; + +DECLARE_STACK_OF(OCSP_SINGLERESP) +DECLARE_ASN1_SET_OF(OCSP_SINGLERESP) + +/*- ResponseData ::= SEQUENCE { + * version [0] EXPLICIT Version DEFAULT v1, + * responderID ResponderID, + * producedAt GeneralizedTime, + * responses SEQUENCE OF SingleResponse, + * responseExtensions [1] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_response_data_st { + ASN1_INTEGER *version; + OCSP_RESPID *responderId; + ASN1_GENERALIZEDTIME *producedAt; + STACK_OF(OCSP_SINGLERESP) *responses; + STACK_OF(X509_EXTENSION) *responseExtensions; +} OCSP_RESPDATA; + +/*- BasicOCSPResponse ::= SEQUENCE { + * tbsResponseData ResponseData, + * signatureAlgorithm AlgorithmIdentifier, + * signature BIT STRING, + * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } + */ + /* + * Note 1: The value for "signature" is specified in the OCSP rfc2560 as + * follows: "The value for the signature SHALL be computed on the hash of + * the DER encoding ResponseData." This means that you must hash the + * DER-encoded tbsResponseData, and then run it through a crypto-signing + * function, which will (at least w/RSA) do a hash-'n'-private-encrypt + * operation. This seems a bit odd, but that's the spec. Also note that + * the data structures do not leave anywhere to independently specify the + * algorithm used for the initial hash. So, we look at the + * signature-specification algorithm, and try to do something intelligent. + * -- Kathy Weinhold, CertCo + */ + /* + * Note 2: It seems that the mentioned passage from RFC 2560 (section + * 4.2.1) is open for interpretation. I've done tests against another + * responder, and found that it doesn't do the double hashing that the RFC + * seems to say one should. Therefore, all relevant functions take a flag + * saying which variant should be used. -- Richard Levitte, OpenSSL team + * and CeloCom + */ +typedef struct ocsp_basic_response_st { + OCSP_RESPDATA *tbsResponseData; + X509_ALGOR *signatureAlgorithm; + ASN1_BIT_STRING *signature; + STACK_OF(X509) *certs; +} OCSP_BASICRESP; + +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * removeFromCRL (8) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 + +/*- + * CrlID ::= SEQUENCE { + * crlUrl [0] EXPLICIT IA5String OPTIONAL, + * crlNum [1] EXPLICIT INTEGER OPTIONAL, + * crlTime [2] EXPLICIT GeneralizedTime OPTIONAL } + */ +typedef struct ocsp_crl_id_st { + ASN1_IA5STRING *crlUrl; + ASN1_INTEGER *crlNum; + ASN1_GENERALIZEDTIME *crlTime; +} OCSP_CRLID; + +/*- + * ServiceLocator ::= SEQUENCE { + * issuer Name, + * locator AuthorityInfoAccessSyntax OPTIONAL } + */ +typedef struct ocsp_service_locator_st { + X509_NAME *issuer; + STACK_OF(ACCESS_DESCRIPTION) *locator; +} OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)o, NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)o, NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define OCSP_REQUEST_sign(o,pkey,md) \ + ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\ + o->optionalSignature->signatureAlgorithm,NULL,\ + o->optionalSignature->signature,o->tbsRequest,pkey,md) + +# define OCSP_BASICRESP_sign(o,pkey,md,d) \ + ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\ + o->signature,o->tbsResponseData,pkey,md) + +# define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\ + a->optionalSignature->signatureAlgorithm,\ + a->optionalSignature->signature,a->tbsRequest,r) + +# define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\ + a->signatureAlgorithm,a->signature,a->tbsResponseData,r) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ + (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + +OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); + +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); +OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, + int maxline); +int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); +int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); +OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); +void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); +void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, + ASN1_VALUE *val); +int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, + const ASN1_ITEM *it); +BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, + ASN1_VALUE *val); +int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); +int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); +int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, + const char *name, const char *value); + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + X509_NAME *issuerName, + ASN1_BIT_STRING *issuerKey, + ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, + int *pssl); + +int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b); +int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +X509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_OCSP_strings(void); + +/* Error codes for the OCSP functions. */ + +/* Function codes. */ +# define OCSP_F_ASN1_STRING_ENCODE 100 +# define OCSP_F_D2I_OCSP_NONCE 102 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 +# define OCSP_F_OCSP_BASIC_SIGN 104 +# define OCSP_F_OCSP_BASIC_VERIFY 105 +# define OCSP_F_OCSP_CERT_ID_NEW 101 +# define OCSP_F_OCSP_CHECK_DELEGATED 106 +# define OCSP_F_OCSP_CHECK_IDS 107 +# define OCSP_F_OCSP_CHECK_ISSUER 108 +# define OCSP_F_OCSP_CHECK_VALIDITY 115 +# define OCSP_F_OCSP_MATCH_ISSUERID 109 +# define OCSP_F_OCSP_PARSE_URL 114 +# define OCSP_F_OCSP_REQUEST_SIGN 110 +# define OCSP_F_OCSP_REQUEST_VERIFY 116 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 +# define OCSP_F_OCSP_SENDREQ_BIO 112 +# define OCSP_F_OCSP_SENDREQ_NBIO 117 +# define OCSP_F_PARSE_HTTP_LINE1 118 +# define OCSP_F_REQUEST_VERIFY 113 + +/* Reason codes. */ +# define OCSP_R_BAD_DATA 100 +# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 +# define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 +# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 +# define OCSP_R_ERROR_PARSING_URL 121 +# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 +# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 +# define OCSP_R_NOT_BASIC_RESPONSE 104 +# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 +# define OCSP_R_NO_CONTENT 106 +# define OCSP_R_NO_PUBLIC_KEY 107 +# define OCSP_R_NO_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 +# define OCSP_R_REQUEST_NOT_SIGNED 128 +# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 +# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 +# define OCSP_R_SERVER_READ_ERROR 113 +# define OCSP_R_SERVER_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# define OCSP_R_SERVER_WRITE_ERROR 116 +# define OCSP_R_SIGNATURE_FAILURE 117 +# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 +# define OCSP_R_STATUS_EXPIRED 125 +# define OCSP_R_STATUS_NOT_YET_VALID 126 +# define OCSP_R_STATUS_TOO_OLD 127 +# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 +# define OCSP_R_UNKNOWN_NID 120 +# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/opensslconf.h b/src/components/openssl/opensslconf.h new file mode 100644 index 0000000..87a3d3e --- /dev/null +++ b/src/components/openssl/opensslconf.h @@ -0,0 +1,270 @@ +/* opensslconf.h */ +/* WARNING: Generated automatically from opensslconf.h.in by Configure. */ + +#ifdef __cplusplus +extern "C" { +#endif +/* OpenSSL was configured with the following options: */ +#ifndef OPENSSL_DOING_MAKEDEPEND + + +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_GMP +# define OPENSSL_NO_GMP +#endif +#ifndef OPENSSL_NO_JPAKE +# define OPENSSL_NO_JPAKE +#endif +#ifndef OPENSSL_NO_KRB5 +# define OPENSSL_NO_KRB5 +#endif +#ifndef OPENSSL_NO_LIBUNBOUND +# define OPENSSL_NO_LIBUNBOUND +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_NO_RFC3779 +# define OPENSSL_NO_RFC3779 +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL2 +# define OPENSSL_NO_SSL2 +#endif +#ifndef OPENSSL_NO_STORE +# define OPENSSL_NO_STORE +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif + +#endif /* OPENSSL_DOING_MAKEDEPEND */ + +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +#endif + +/* The OPENSSL_NO_* macros are also defined as NO_* if the application + asks for it. This is a transient feature that is provided for those + who haven't had the time to do the appropriate changes in their + applications. */ +#ifdef OPENSSL_ALGORITHM_DEFINES +# if defined(OPENSSL_NO_EC_NISTP_64_GCC_128) && !defined(NO_EC_NISTP_64_GCC_128) +# define NO_EC_NISTP_64_GCC_128 +# endif +# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP) +# define NO_GMP +# endif +# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE) +# define NO_JPAKE +# endif +# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5) +# define NO_KRB5 +# endif +# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND) +# define NO_LIBUNBOUND +# endif +# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2) +# define NO_MD2 +# endif +# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5) +# define NO_RC5 +# endif +# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779) +# define NO_RFC3779 +# endif +# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP) +# define NO_SCTP +# endif +# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE) +# define NO_SSL_TRACE +# endif +# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2) +# define NO_SSL2 +# endif +# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE) +# define NO_STORE +# endif +# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST) +# define NO_UNIT_TEST +# endif +# if defined(OPENSSL_NO_WEAK_SSL_CIPHERS) && !defined(NO_WEAK_SSL_CIPHERS) +# define NO_WEAK_SSL_CIPHERS +# endif +#endif + +#define OPENSSL_CPUID_OBJ + +/* crypto/opensslconf.h.in */ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ +#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) +#define ENGINESDIR "/usr/local/openssl/lib/engines" +#define OPENSSLDIR "/usr/local/openssl/ssl" +#endif +#endif + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) +#define IDEA_INT unsigned int +#endif + +#if defined(HEADER_MD2_H) && !defined(MD2_INT) +#define MD2_INT unsigned int +#endif + +#if defined(HEADER_RC2_H) && !defined(RC2_INT) +/* I need to put in a mod for the alpha - eay */ +#define RC2_INT unsigned int +#endif + +#if defined(HEADER_RC4_H) +#if !defined(RC4_INT) +/* using int types make the structure larger but make the code faster + * on most boxes I have tested - up to %20 faster. */ +/* + * I don't know what does "most" mean, but declaring "int" is a must on: + * - Intel P6 because partial register stalls are very expensive; + * - elder Alpha because it lacks byte load/store instructions; + */ +#define RC4_INT unsigned int +#endif +#if !defined(RC4_CHUNK) +/* + * This enables code handling data aligned at natural CPU word + * boundary. See crypto/rc4/rc4_enc.c for further details. + */ +#define RC4_CHUNK unsigned long +#endif +#endif + +#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) +/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a + * %20 speed up (longs are 8 bytes, int's are 4). */ +#ifndef DES_LONG +#define DES_LONG unsigned int +#endif +#endif + +#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) +#define CONFIG_HEADER_BN_H +#undef BN_LLONG + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +#define SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#undef THIRTY_TWO_BIT +#endif + +#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) +#define CONFIG_HEADER_RC4_LOCL_H +/* if this is defined data[i] is used instead of *data, this is a %20 + * speedup on x86 */ +#undef RC4_INDEX +#endif + +#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) +#define CONFIG_HEADER_BF_LOCL_H +#undef BF_PTR +#endif /* HEADER_BF_LOCL_H */ + +#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) +#define CONFIG_HEADER_DES_LOCL_H +#ifndef DES_DEFAULT_OPTIONS +/* the following is tweaked from a config script, that is why it is a + * protected undef/define */ +#ifndef DES_PTR +#undef DES_PTR +#endif + +/* This helps C compiler generate the correct code for multiple functional + * units. It reduces register dependancies at the expense of 2 more + * registers */ +#ifndef DES_RISC1 +#undef DES_RISC1 +#endif + +#ifndef DES_RISC2 +#undef DES_RISC2 +#endif + +#if defined(DES_RISC1) && defined(DES_RISC2) +#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! +#endif + +/* Unroll the inner loop, this sometimes helps, sometimes hinders. + * Very mucy CPU dependant */ +#ifndef DES_UNROLL +#define DES_UNROLL +#endif + +/* These default values were supplied by + * Peter Gutman + * They are only used if nothing else has been defined */ +#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) +/* Special defines which change the way the code is built depending on the + CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find + even newer MIPS CPU's, but at the moment one size fits all for + optimization options. Older Sparc's work better with only UNROLL, but + there's no way to tell at compile time what it is you're running on */ + +#if defined( __sun ) || defined ( sun ) /* Newer Sparc's */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#elif defined( __ultrix ) /* Older MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined( __osf1__ ) /* Alpha */ +# define DES_PTR +# define DES_RISC2 +#elif defined ( _AIX ) /* RS6000 */ + /* Unknown */ +#elif defined( __hpux ) /* HP-PA */ + /* Unknown */ +#elif defined( __aux ) /* 68K */ + /* Unknown */ +#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ +# define DES_UNROLL +#elif defined( __sgi ) /* Newer MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#endif /* Systems-specific speed defines */ +#endif + +#endif /* DES_DEFAULT_OPTIONS */ +#endif /* HEADER_DES_LOCL_H */ +#ifdef __cplusplus +} +#endif diff --git a/src/components/openssl/opensslv.h b/src/components/openssl/opensslv.h new file mode 100644 index 0000000..645dd07 --- /dev/null +++ b/src/components/openssl/opensslv.h @@ -0,0 +1,97 @@ +#ifndef HEADER_OPENSSLV_H +# define HEADER_OPENSSLV_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * Numeric release version identifier: + * MNNFFPPS: major minor fix patch status + * The status nibble has one of the values 0 for development, 1 to e for betas + * 1 to 14, and f for release. The patch level is exactly that. + * For example: + * 0.9.3-dev 0x00903000 + * 0.9.3-beta1 0x00903001 + * 0.9.3-beta2-dev 0x00903002 + * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) + * 0.9.3 0x0090300f + * 0.9.3a 0x0090301f + * 0.9.4 0x0090400f + * 1.2.3z 0x102031af + * + * For continuity reasons (because 0.9.5 is already out, and is coded + * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level + * part is slightly different, by setting the highest bit. This means + * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start + * with 0x0090600S... + * + * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) + * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for + * major minor fix final patch/beta) + */ +# define OPENSSL_VERSION_NUMBER 0x100020bfL +# ifdef OPENSSL_FIPS +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2k-fips 26 Jan 2017" +# else +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2k 26 Jan 2017" +# endif +# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT + +/*- + * The macros below are to be used for shared library (.so, .dll, ...) + * versioning. That kind of versioning works a bit differently between + * operating systems. The most usual scheme is to set a major and a minor + * number, and have the runtime loader check that the major number is equal + * to what it was at application link time, while the minor number has to + * be greater or equal to what it was at application link time. With this + * scheme, the version number is usually part of the file name, like this: + * + * libcrypto.so.0.9 + * + * Some unixen also make a softlink with the major verson number only: + * + * libcrypto.so.0 + * + * On Tru64 and IRIX 6.x it works a little bit differently. There, the + * shared library version is stored in the file, and is actually a series + * of versions, separated by colons. The rightmost version present in the + * library when linking an application is stored in the application to be + * matched at run time. When the application is run, a check is done to + * see if the library version stored in the application matches any of the + * versions in the version string of the library itself. + * This version string can be constructed in any way, depending on what + * kind of matching is desired. However, to implement the same scheme as + * the one used in the other unixen, all compatible versions, from lowest + * to highest, should be part of the string. Consecutive builds would + * give the following versions strings: + * + * 3.0 + * 3.0:3.1 + * 3.0:3.1:3.2 + * 4.0 + * 4.0:4.1 + * + * Notice how version 4 is completely incompatible with version, and + * therefore give the breach you can see. + * + * There may be other schemes as well that I haven't yet discovered. + * + * So, here's the way it works here: first of all, the library version + * number doesn't need at all to match the overall OpenSSL version. + * However, it's nice and more understandable if it actually does. + * The current library version is stored in the macro SHLIB_VERSION_NUMBER, + * which is just a piece of text in the format "M.m.e" (Major, minor, edit). + * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, + * we need to keep a history of version numbers, which is done in the + * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and + * should only keep the versions that are binary compatible with the current. + */ +# define SHLIB_VERSION_HISTORY "" +# define SHLIB_VERSION_NUMBER "1.0.0" + + +#ifdef __cplusplus +} +#endif +#endif /* HEADER_OPENSSLV_H */ diff --git a/src/components/openssl/ossl_typ.h b/src/components/openssl/ossl_typ.h new file mode 100644 index 0000000..e0d5d19 --- /dev/null +++ b/src/components/openssl/ossl_typ.h @@ -0,0 +1,213 @@ +/* ==================================================================== + * Copyright (c) 1998-2001 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_OPENSSL_TYPES_H +# define HEADER_OPENSSL_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_object_st ASN1_OBJECT; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; + +# ifdef OPENSSL_SYS_WIN32 +# undef X509_NAME +# undef X509_EXTENSIONS +# undef X509_CERT_PAIR +# undef PKCS7_ISSUER_AND_SERIAL +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +# ifdef BIGNUM +# undef BIGNUM +# endif +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct env_md_st EVP_MD; +typedef struct env_md_ctx_st EVP_MD_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; + +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; + +typedef struct rand_meth_st RAND_METHOD; + +typedef struct ecdh_method ECDH_METHOD; +typedef struct ecdsa_method ECDSA_METHOD; + +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; + +typedef struct store_st STORE; +typedef struct store_method_st STORE_METHOD; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct st_ERR_FNS ERR_FNS; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + + /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ +# define DECLARE_PKCS12_STACK_OF(type)/* Nothing */ +# define IMPLEMENT_PKCS12_STACK_OF(type)/* Nothing */ + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; +/* Callback types for crypto.h */ +typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp); + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +#ifdef __cplusplus +} +#endif +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/src/components/openssl/pem.h b/src/components/openssl/pem.h new file mode 100644 index 0000000..4134adf --- /dev/null +++ b/src/components/openssl/pem.h @@ -0,0 +1,617 @@ +/* crypto/pem/pem.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_PEM_H +# define HEADER_PEM_H + +# include +# ifndef OPENSSL_NO_BIO +# include +# endif +# ifndef OPENSSL_NO_STACK +# include +# endif +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PEM_BUFSIZE 1024 + +# define PEM_OBJ_UNDEF 0 +# define PEM_OBJ_X509 1 +# define PEM_OBJ_X509_REQ 2 +# define PEM_OBJ_CRL 3 +# define PEM_OBJ_SSL_SESSION 4 +# define PEM_OBJ_PRIV_KEY 10 +# define PEM_OBJ_PRIV_RSA 11 +# define PEM_OBJ_PRIV_DSA 12 +# define PEM_OBJ_PRIV_DH 13 +# define PEM_OBJ_PUB_RSA 14 +# define PEM_OBJ_PUB_DSA 15 +# define PEM_OBJ_PUB_DH 16 +# define PEM_OBJ_DHPARAMS 17 +# define PEM_OBJ_DSAPARAMS 18 +# define PEM_OBJ_PRIV_RSA_PUBLIC 19 +# define PEM_OBJ_PRIV_ECDSA 20 +# define PEM_OBJ_PUB_ECDSA 21 +# define PEM_OBJ_ECPARAMETERS 22 + +# define PEM_ERROR 30 +# define PEM_DEK_DES_CBC 40 +# define PEM_DEK_IDEA_CBC 45 +# define PEM_DEK_DES_EDE 50 +# define PEM_DEK_DES_ECB 60 +# define PEM_DEK_RSA 70 +# define PEM_DEK_RSA_MD2 80 +# define PEM_DEK_RSA_MD5 90 + +# define PEM_MD_MD2 NID_md2 +# define PEM_MD_MD5 NID_md5 +# define PEM_MD_SHA NID_sha +# define PEM_MD_MD2_RSA NID_md2WithRSAEncryption +# define PEM_MD_MD5_RSA NID_md5WithRSAEncryption +# define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption + +# define PEM_STRING_X509_OLD "X509 CERTIFICATE" +# define PEM_STRING_X509 "CERTIFICATE" +# define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" +# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" +# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" +# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" +# define PEM_STRING_X509_CRL "X509 CRL" +# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" +# define PEM_STRING_PUBLIC "PUBLIC KEY" +# define PEM_STRING_RSA "RSA PRIVATE KEY" +# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" +# define PEM_STRING_DSA "DSA PRIVATE KEY" +# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" +# define PEM_STRING_PKCS7 "PKCS7" +# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" +# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" +# define PEM_STRING_PKCS8INF "PRIVATE KEY" +# define PEM_STRING_DHPARAMS "DH PARAMETERS" +# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" +# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" +# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" +# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" +# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" +# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" +# define PEM_STRING_PARAMETERS "PARAMETERS" +# define PEM_STRING_CMS "CMS" + + /* + * Note that this structure is initialised by PEM_SealInit and cleaned up + * by PEM_SealFinal (at least for now) + */ +typedef struct PEM_Encode_Seal_st { + EVP_ENCODE_CTX encode; + EVP_MD_CTX md; + EVP_CIPHER_CTX cipher; +} PEM_ENCODE_SEAL_CTX; + +/* enc_type is one off */ +# define PEM_TYPE_ENCRYPTED 10 +# define PEM_TYPE_MIC_ONLY 20 +# define PEM_TYPE_MIC_CLEAR 30 +# define PEM_TYPE_CLEAR 40 + +typedef struct pem_recip_st { + char *name; + X509_NAME *dn; + int cipher; + int key_enc; + /* char iv[8]; unused and wrong size */ +} PEM_USER; + +typedef struct pem_ctx_st { + int type; /* what type of object */ + struct { + int version; + int mode; + } proc_type; + + char *domain; + + struct { + int cipher; + /*- + unused, and wrong size + unsigned char iv[8]; */ + } DEK_info; + + PEM_USER *originator; + + int num_recipient; + PEM_USER **recipient; +/*- + XXX(ben): don#t think this is used! + STACK *x509_chain; / * certificate chain */ + EVP_MD *md; /* signature type */ + + int md_enc; /* is the md encrypted or not? */ + int md_len; /* length of md_data */ + char *md_data; /* message digest, could be pkey encrypted */ + + EVP_CIPHER *dec; /* date encryption cipher */ + int key_len; /* key length */ + unsigned char *key; /* key */ + /*- + unused, and wrong size + unsigned char iv[8]; */ + + int data_enc; /* is the data encrypted */ + int data_len; + unsigned char *data; +} PEM_CTX; + +/* + * These macros make the PEM_read/PEM_write functions easier to maintain and + * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or + * IMPLEMENT_PEM_rw_cb(...) + */ + +# ifdef OPENSSL_NO_FP_API + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# else + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ +type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, const type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# endif + +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ +type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, const type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_read_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb(name, type, str, asn1) + +/* These are the same except they are for the declarations */ + +# if defined(OPENSSL_NO_FP_API) + +# define DECLARE_PEM_read_fp(name, type) /**/ +# define DECLARE_PEM_write_fp(name, type) /**/ +# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# else + +# define DECLARE_PEM_read_fp(name, type) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x); + +# define DECLARE_PEM_write_fp_const(name, type) \ + int PEM_write_##name(FILE *fp, const type *x); + +# define DECLARE_PEM_write_cb_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# endif + +# ifndef OPENSSL_NO_BIO +# define DECLARE_PEM_read_bio(name, type) \ + type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x); + +# define DECLARE_PEM_write_bio_const(name, type) \ + int PEM_write_bio_##name(BIO *bp, const type *x); + +# define DECLARE_PEM_write_cb_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# else + +# define DECLARE_PEM_read_bio(name, type) /**/ +# define DECLARE_PEM_write_bio(name, type) /**/ +# define DECLARE_PEM_write_bio_const(name, type) /**/ +# define DECLARE_PEM_write_cb_bio(name, type) /**/ +# endif +# define DECLARE_PEM_write(name, type) \ + DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_fp(name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_fp_const(name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_fp(name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_fp(name, type) +# define DECLARE_PEM_rw(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write(name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_const(name, type) +# define DECLARE_PEM_rw_cb(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_cb(name, type) +# if 1 +/* "userdata": new with OpenSSL 0.9.4 */ +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); +# else +/* OpenSSL 0.9.3, 0.9.3a */ +typedef int pem_password_cb (char *buf, int size, int rwflag); +# endif + +int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); +int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, + pem_password_cb *callback, void *u); + +# ifndef OPENSSL_NO_BIO +int PEM_read_bio(BIO *bp, char **name, char **header, + unsigned char **data, long *len); +int PEM_write_bio(BIO *bp, const char *name, const char *hdr, + const unsigned char *data, long len); +int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, + const EVP_CIPHER *enc, unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); +int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cd, void *u); +# endif + +int PEM_read(FILE *fp, char **name, char **header, + unsigned char **data, long *len); +int PEM_write(FILE *fp, const char *name, const char *hdr, + const unsigned char *data, long len); +void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, + void *x, const EVP_CIPHER *enc, unsigned char *kstr, + int klen, pem_password_cb *callback, void *u); +STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); + +int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, + EVP_MD *md_type, unsigned char **ek, int *ekl, + unsigned char *iv, EVP_PKEY **pubk, int npubk); +void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, + unsigned char *in, int inl); +int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl, + unsigned char *out, int *outl, EVP_PKEY *priv); + +void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, EVP_PKEY *pkey); + +int PEM_def_callback(char *buf, int num, int w, void *key); +void PEM_proc_type(char *buf, int type); +void PEM_dek_info(char *buf, const char *type, int len, char *str); + +# include + +DECLARE_PEM_rw(X509, X509) +DECLARE_PEM_rw(X509_AUX, X509) +DECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR) +DECLARE_PEM_rw(X509_REQ, X509_REQ) +DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) +DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(PKCS7, PKCS7) +DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) +DECLARE_PEM_rw(PKCS8, X509_SIG) +DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) +# ifndef OPENSSL_NO_RSA +DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) +DECLARE_PEM_rw_const(RSAPublicKey, RSA) +DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# endif +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) +DECLARE_PEM_rw(DSA_PUBKEY, DSA) +DECLARE_PEM_rw_const(DSAparams, DSA) +# endif +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) +DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) +# endif +# ifndef OPENSSL_NO_DH +DECLARE_PEM_rw_const(DHparams, DH) +DECLARE_PEM_write_const(DHxparams, DH) +# endif +DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, + char *, int, pem_password_cb *, void *); +int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); + +EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, pem_password_cb *cd, + void *u); + +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + +EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PrivateKey_bio(BIO *in); +EVP_PKEY *b2i_PublicKey_bio(BIO *in); +int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); +# ifndef OPENSSL_NO_RC4 +EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u); +# endif + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ + +void ERR_load_PEM_strings(void); + +/* Error codes for the PEM functions. */ + +/* Function codes. */ +# define PEM_F_B2I_DSS 127 +# define PEM_F_B2I_PVK_BIO 128 +# define PEM_F_B2I_RSA 129 +# define PEM_F_CHECK_BITLEN_DSA 130 +# define PEM_F_CHECK_BITLEN_RSA 131 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 +# define PEM_F_DO_B2I 132 +# define PEM_F_DO_B2I_BIO 133 +# define PEM_F_DO_BLOB_HEADER 134 +# define PEM_F_DO_PK8PKEY 126 +# define PEM_F_DO_PK8PKEY_FP 125 +# define PEM_F_DO_PVK_BODY 135 +# define PEM_F_DO_PVK_HEADER 136 +# define PEM_F_I2B_PVK 137 +# define PEM_F_I2B_PVK_BIO 138 +# define PEM_F_LOAD_IV 101 +# define PEM_F_PEM_ASN1_READ 102 +# define PEM_F_PEM_ASN1_READ_BIO 103 +# define PEM_F_PEM_ASN1_WRITE 104 +# define PEM_F_PEM_ASN1_WRITE_BIO 105 +# define PEM_F_PEM_DEF_CALLBACK 100 +# define PEM_F_PEM_DO_HEADER 106 +# define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 +# define PEM_F_PEM_PK8PKEY 119 +# define PEM_F_PEM_READ 108 +# define PEM_F_PEM_READ_BIO 109 +# define PEM_F_PEM_READ_BIO_DHPARAMS 141 +# define PEM_F_PEM_READ_BIO_PARAMETERS 140 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 +# define PEM_F_PEM_READ_DHPARAMS 142 +# define PEM_F_PEM_READ_PRIVATEKEY 124 +# define PEM_F_PEM_SEALFINAL 110 +# define PEM_F_PEM_SEALINIT 111 +# define PEM_F_PEM_SIGNFINAL 112 +# define PEM_F_PEM_WRITE 113 +# define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_PRIVATEKEY 139 +# define PEM_F_PEM_X509_INFO_READ 115 +# define PEM_F_PEM_X509_INFO_READ_BIO 116 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* Reason codes. */ +# define PEM_R_BAD_BASE64_DECODE 100 +# define PEM_R_BAD_DECRYPT 101 +# define PEM_R_BAD_END_LINE 102 +# define PEM_R_BAD_IV_CHARS 103 +# define PEM_R_BAD_MAGIC_NUMBER 116 +# define PEM_R_BAD_PASSWORD_READ 104 +# define PEM_R_BAD_VERSION_NUMBER 117 +# define PEM_R_BIO_WRITE_FAILURE 118 +# define PEM_R_CIPHER_IS_NULL 127 +# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 +# define PEM_R_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# define PEM_R_NOT_DEK_INFO 105 +# define PEM_R_NOT_ENCRYPTED 106 +# define PEM_R_NOT_PROC_TYPE 107 +# define PEM_R_NO_START_LINE 108 +# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 +# define PEM_R_PUBLIC_KEY_NO_RSA 110 +# define PEM_R_PVK_DATA_TOO_SHORT 124 +# define PEM_R_PVK_TOO_SHORT 125 +# define PEM_R_READ_KEY 111 +# define PEM_R_SHORT_HEADER 112 +# define PEM_R_UNSUPPORTED_CIPHER 113 +# define PEM_R_UNSUPPORTED_ENCRYPTION 114 +# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/src/components/openssl/pem2.h b/src/components/openssl/pem2.h new file mode 100644 index 0000000..84897d5 --- /dev/null +++ b/src/components/openssl/pem2.h @@ -0,0 +1,70 @@ +/* ==================================================================== + * Copyright (c) 1999 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 + * licensing@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). + * + */ + +/* + * This header only exists to break a circular dependency between pem and err + * Ben 30 Jan 1999. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HEADER_PEM_H +void ERR_load_PEM_strings(void); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/components/openssl/pkcs12.h b/src/components/openssl/pkcs12.h new file mode 100644 index 0000000..71ca982 --- /dev/null +++ b/src/components/openssl/pkcs12.h @@ -0,0 +1,342 @@ +/* pkcs12.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 1999. + */ +/* ==================================================================== + * Copyright (c) 1999 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 + * licensing@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_PKCS12_H +# define HEADER_PKCS12_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* Uncomment out next line for unicode password and names, otherwise ASCII */ + +/* + * #define PBE_UNICODE + */ + +# ifdef PBE_UNICODE +# define PKCS12_key_gen PKCS12_key_gen_uni +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni +# else +# define PKCS12_key_gen PKCS12_key_gen_asc +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc +# endif + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct { + X509_SIG *dinfo; + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; /* defaults to 1 */ +} PKCS12_MAC_DATA; + +typedef struct { + ASN1_INTEGER *version; + PKCS12_MAC_DATA *mac; + PKCS7 *authsafes; +} PKCS12; + +typedef struct { + ASN1_OBJECT *type; + union { + struct pkcs12_bag_st *bag; /* secret, crl and certbag */ + struct pkcs8_priv_key_info_st *keybag; /* keybag */ + X509_SIG *shkeybag; /* shrouded key bag */ + STACK_OF(PKCS12_SAFEBAG) *safes; + ASN1_TYPE *other; + } value; + STACK_OF(X509_ATTRIBUTE) *attrib; +} PKCS12_SAFEBAG; + +DECLARE_STACK_OF(PKCS12_SAFEBAG) +DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG) +DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) + +typedef struct pkcs12_bag_st { + ASN1_OBJECT *type; + union { + ASN1_OCTET_STRING *x509cert; + ASN1_OCTET_STRING *x509crl; + ASN1_OCTET_STRING *octet; + ASN1_IA5STRING *sdsicert; + ASN1_TYPE *other; /* Secret or other bag */ + } value; +} PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +# define M_PKCS12_x5092certbag PKCS12_x5092certbag +# define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag + +# define M_PKCS12_certbag2x509 PKCS12_certbag2x509 +# define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl + +# define M_PKCS12_unpack_p7data PKCS12_unpack_p7data +# define M_PKCS12_pack_authsafes PKCS12_pack_authsafes +# define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes +# define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata + +# define M_PKCS12_decrypt_skey PKCS12_decrypt_skey +# define M_PKCS8_decrypt PKCS8_decrypt + +# define M_PKCS12_bag_type(bg) OBJ_obj2nid((bg)->type) +# define M_PKCS12_cert_bag_type(bg) OBJ_obj2nid((bg)->value.bag->type) +# define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type + +# define PKCS12_get_attr(bag, attr_nid) \ + PKCS12_get_attr_gen(bag->attrib, attr_nid) + +# define PKCS8_get_attr(p8, attr_nid) \ + PKCS12_get_attr_gen(p8->attributes, attr_nid) + +# define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0) + +PKCS12_SAFEBAG *PKCS12_x5092certbag(X509 *x509); +PKCS12_SAFEBAG *PKCS12_x509crl2certbag(X509_CRL *crl); +X509 *PKCS12_certbag2x509(PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, + int passlen, unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, + int passlen, unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +void *PKCS12_item_decrypt_d2i(X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + ASN1_OCTET_STRING *oct, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +PKCS12 *PKCS12_init(int mode); +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, + STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, + int mac_iter, int keytype); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, char *pass); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, char *pass); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); + +int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_PKCS12_strings(void); + +/* Error codes for the PKCS12 functions. */ + +/* Function codes. */ +# define PKCS12_F_PARSE_BAG 129 +# define PKCS12_F_PARSE_BAGS 103 +# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 +# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 +# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 +# define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 +# define PKCS12_F_PKCS12_CREATE 105 +# define PKCS12_F_PKCS12_GEN_MAC 107 +# define PKCS12_F_PKCS12_INIT 109 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 +# define PKCS12_F_PKCS12_MAKE_KEYBAG 112 +# define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 +# define PKCS12_F_PKCS12_NEWPASS 128 +# define PKCS12_F_PKCS12_PACK_P7DATA 114 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 +# define PKCS12_F_PKCS12_PARSE 118 +# define PKCS12_F_PKCS12_PBE_CRYPT 119 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 +# define PKCS12_F_PKCS12_SETUP_MAC 122 +# define PKCS12_F_PKCS12_SET_MAC 123 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 +# define PKCS12_F_PKCS12_VERIFY_MAC 126 +# define PKCS12_F_PKCS8_ADD_KEYUSAGE 124 +# define PKCS12_F_PKCS8_ENCRYPT 125 + +/* Reason codes. */ +# define PKCS12_R_CANT_PACK_STRUCTURE 100 +# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 +# define PKCS12_R_DECODE_ERROR 101 +# define PKCS12_R_ENCODE_ERROR 102 +# define PKCS12_R_ENCRYPT_ERROR 103 +# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 +# define PKCS12_R_INVALID_NULL_ARGUMENT 104 +# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_IV_GEN_ERROR 106 +# define PKCS12_R_KEY_GEN_ERROR 107 +# define PKCS12_R_MAC_ABSENT 108 +# define PKCS12_R_MAC_GENERATION_ERROR 109 +# define PKCS12_R_MAC_SETUP_ERROR 110 +# define PKCS12_R_MAC_STRING_SET_ERROR 111 +# define PKCS12_R_MAC_VERIFY_ERROR 112 +# define PKCS12_R_MAC_VERIFY_FAILURE 113 +# define PKCS12_R_PARSE_ERROR 114 +# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 +# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 +# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 +# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 +# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/pkcs7.h b/src/components/openssl/pkcs7.h new file mode 100644 index 0000000..1390bd0 --- /dev/null +++ b/src/components/openssl/pkcs7.h @@ -0,0 +1,481 @@ +/* crypto/pkcs7/pkcs7.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_PKCS7_H +# define HEADER_PKCS7_H + +# include +# include +# include + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_SYS_WIN32 +/* Under Win32 thes are defined in wincrypt.h */ +# undef PKCS7_ISSUER_AND_SERIAL +# undef PKCS7_SIGNER_INFO +# endif + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; +} PKCS7_SIGNER_INFO; + +DECLARE_STACK_OF(PKCS7_SIGNER_INFO) +DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ +} PKCS7_RECIP_INFO; + +DECLARE_STACK_OF(PKCS7_RECIP_INFO) +DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; +} PKCS7; + +DECLARE_STACK_OF(PKCS7) +DECLARE_ASN1_SET_OF(PKCS7) +DECLARE_PKCS12_STACK_OF(PKCS7) + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_FP_API +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +# endif +PKCS7 *PKCS7_dup(PKCS7 *p7); +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_PKCS7_strings(void); + +/* Error codes for the PKCS7 functions. */ + +/* Function codes. */ +# define PKCS7_F_B64_READ_PKCS7 120 +# define PKCS7_F_B64_WRITE_PKCS7 121 +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# define PKCS7_F_I2D_PKCS7_BIO_STREAM 140 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 +# define PKCS7_F_PKCS7_ADD_CRL 101 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 +# define PKCS7_F_PKCS7_ADD_SIGNER 103 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 +# define PKCS7_F_PKCS7_CTRL 104 +# define PKCS7_F_PKCS7_DATADECODE 112 +# define PKCS7_F_PKCS7_DATAFINAL 128 +# define PKCS7_F_PKCS7_DATAINIT 105 +# define PKCS7_F_PKCS7_DATASIGN 106 +# define PKCS7_F_PKCS7_DATAVERIFY 107 +# define PKCS7_F_PKCS7_DECRYPT 114 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 +# define PKCS7_F_PKCS7_ENCODE_RINFO 132 +# define PKCS7_F_PKCS7_ENCRYPT 115 +# define PKCS7_F_PKCS7_FINAL 134 +# define PKCS7_F_PKCS7_FIND_DIGEST 127 +# define PKCS7_F_PKCS7_GET0_SIGNERS 124 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 +# define PKCS7_F_PKCS7_SET_CIPHER 108 +# define PKCS7_F_PKCS7_SET_CONTENT 109 +# define PKCS7_F_PKCS7_SET_DIGEST 126 +# define PKCS7_F_PKCS7_SET_TYPE 110 +# define PKCS7_F_PKCS7_SIGN 116 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 +# define PKCS7_F_PKCS7_VERIFY 117 +# define PKCS7_F_SMIME_READ_PKCS7 122 +# define PKCS7_F_SMIME_TEXT 123 + +/* Reason codes. */ +# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 +# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 +# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 +# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 +# define PKCS7_R_CTRL_ERROR 152 +# define PKCS7_R_DECODE_ERROR 130 +# define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH 100 +# define PKCS7_R_DECRYPT_ERROR 119 +# define PKCS7_R_DIGEST_FAILURE 101 +# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 +# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 +# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 +# define PKCS7_R_ERROR_SETTING_CIPHER 121 +# define PKCS7_R_INVALID_MIME_TYPE 131 +# define PKCS7_R_INVALID_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_MIME_NO_CONTENT_TYPE 132 +# define PKCS7_R_MIME_PARSE_ERROR 133 +# define PKCS7_R_MIME_SIG_PARSE_ERROR 134 +# define PKCS7_R_MISSING_CERIPEND_INFO 103 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_CONTENT_TYPE 135 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_MULTIPART_BODY_FAILURE 136 +# define PKCS7_R_NO_MULTIPART_BOUNDARY 137 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_RECIPIENT_MATCHES_KEY 146 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# define PKCS7_R_NO_SIG_CONTENT_TYPE 138 +# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 +# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 +# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 +# define PKCS7_R_PKCS7_DATAFINAL 126 +# define PKCS7_R_PKCS7_DATAFINAL_ERROR 125 +# define PKCS7_R_PKCS7_DATASIGN 145 +# define PKCS7_R_PKCS7_PARSE_ERROR 139 +# define PKCS7_R_PKCS7_SIG_PARSE_ERROR 140 +# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 +# define PKCS7_R_SIGNATURE_FAILURE 105 +# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 +# define PKCS7_R_SIGNING_CTRL_FAILURE 147 +# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 +# define PKCS7_R_SIG_INVALID_MIME_TYPE 141 +# define PKCS7_R_SMIME_TEXT_ERROR 129 +# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 +# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 +# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 +# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 +# define PKCS7_R_UNKNOWN_OPERATION 110 +# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 +# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 +# define PKCS7_R_WRONG_CONTENT_TYPE 113 +# define PKCS7_R_WRONG_PKCS7_TYPE 114 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/pqueue.h b/src/components/openssl/pqueue.h new file mode 100644 index 0000000..d40d9c7 --- /dev/null +++ b/src/components/openssl/pqueue.h @@ -0,0 +1,99 @@ +/* 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 +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif +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); + +void pqueue_print(pqueue pq); +int pqueue_size(pqueue pq); + +#ifdef __cplusplus +} +#endif +#endif /* ! HEADER_PQUEUE_H */ diff --git a/src/components/openssl/rand.h b/src/components/openssl/rand.h new file mode 100644 index 0000000..8d2dbe2 --- /dev/null +++ b/src/components/openssl/rand.h @@ -0,0 +1,150 @@ +/* crypto/rand/rand.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RAND_H +# define HEADER_RAND_H + +# include +# include +# include + +# if defined(OPENSSL_SYS_WINDOWS) +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if defined(OPENSSL_FIPS) +# define FIPS_RAND_SIZE_T size_t +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct rand_meth_st RAND_METHOD; */ + +struct rand_meth_st { + void (*seed) (const void *buf, int num); + int (*bytes) (unsigned char *buf, int num); + void (*cleanup) (void); + void (*add) (const void *buf, int num, double entropy); + int (*pseudorand) (unsigned char *buf, int num); + int (*status) (void); +}; + +# ifdef BN_DEBUG +extern int rand_predictable; +# endif + +int RAND_set_rand_method(const RAND_METHOD *meth); +const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +int RAND_set_rand_engine(ENGINE *engine); +# endif +RAND_METHOD *RAND_SSLeay(void); +void RAND_cleanup(void); +int RAND_bytes(unsigned char *buf, int num); +int RAND_pseudo_bytes(unsigned char *buf, int num); +void RAND_seed(const void *buf, int num); +void RAND_add(const void *buf, int num, double entropy); +int RAND_load_file(const char *file, long max_bytes); +int RAND_write_file(const char *file); +const char *RAND_file_name(char *file, size_t num); +int RAND_status(void); +int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); +int RAND_egd(const char *path); +int RAND_egd_bytes(const char *path, int bytes); +int RAND_poll(void); + +# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) + +void RAND_screen(void); +int RAND_event(UINT, WPARAM, LPARAM); + +# endif + +# ifdef OPENSSL_FIPS +void RAND_set_fips_drbg_type(int type, int flags); +int RAND_init_fips(void); +# endif + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_RAND_strings(void); + +/* Error codes for the RAND functions. */ + +/* Function codes. */ +# define RAND_F_RAND_GET_RAND_METHOD 101 +# define RAND_F_RAND_INIT_FIPS 102 +# define RAND_F_SSLEAY_RAND_BYTES 100 + +/* Reason codes. */ +# define RAND_R_DUAL_EC_DRBG_DISABLED 104 +# define RAND_R_ERROR_INITIALISING_DRBG 102 +# define RAND_R_ERROR_INSTANTIATING_DRBG 103 +# define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 +# define RAND_R_PRNG_NOT_SEEDED 100 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/rc2.h b/src/components/openssl/rc2.h new file mode 100644 index 0000000..5cbce65 --- /dev/null +++ b/src/components/openssl/rc2.h @@ -0,0 +1,103 @@ +/* crypto/rc2/rc2.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RC2_H +# define HEADER_RC2_H + +# include /* OPENSSL_NO_RC2, RC2_INT */ +# ifdef OPENSSL_NO_RC2 +# error RC2 is disabled. +# endif + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; + +# ifdef OPENSSL_FIPS +void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, + int bits); +# endif +void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); +void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC2_KEY *key, int enc); +void RC2_encrypt(unsigned long *data, RC2_KEY *key); +void RC2_decrypt(unsigned long *data, RC2_KEY *key); +void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, int enc); +void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num, int enc); +void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/rc4.h b/src/components/openssl/rc4.h new file mode 100644 index 0000000..58d370b --- /dev/null +++ b/src/components/openssl/rc4.h @@ -0,0 +1,88 @@ +/* crypto/rc4/rc4.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RC4_H +# define HEADER_RC4_H + +# include /* OPENSSL_NO_RC4, RC4_INT */ +# ifdef OPENSSL_NO_RC4 +# error RC4 is disabled. +# endif + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rc4_key_st { + RC4_INT x, y; + RC4_INT data[256]; +} RC4_KEY; + +const char *RC4_options(void); +void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/ripemd.h b/src/components/openssl/ripemd.h new file mode 100644 index 0000000..99ce3fc --- /dev/null +++ b/src/components/openssl/ripemd.h @@ -0,0 +1,105 @@ +/* crypto/ripemd/ripemd.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RIPEMD_H +# define HEADER_RIPEMD_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_RIPEMD +# error RIPEMD is disabled. +# endif + +# if defined(__LP32__) +# define RIPEMD160_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define RIPEMD160_LONG unsigned long +# define RIPEMD160_LONG_LOG2 3 +# else +# define RIPEMD160_LONG unsigned int +# endif + +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) +# define RIPEMD160_DIGEST_LENGTH 20 + +typedef struct RIPEMD160state_st { + RIPEMD160_LONG A, B, C, D, E; + RIPEMD160_LONG Nl, Nh; + RIPEMD160_LONG data[RIPEMD160_LBLOCK]; + unsigned int num; +} RIPEMD160_CTX; + +# ifdef OPENSSL_FIPS +int private_RIPEMD160_Init(RIPEMD160_CTX *c); +# endif +int RIPEMD160_Init(RIPEMD160_CTX *c); +int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); +int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); +void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/rsa.h b/src/components/openssl/rsa.h new file mode 100644 index 0000000..a097ae7 --- /dev/null +++ b/src/components/openssl/rsa.h @@ -0,0 +1,664 @@ +/* crypto/rsa/rsa.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RSA_H +# define HEADER_RSA_H + +# include + +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# include +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif + +# ifdef OPENSSL_NO_RSA +# error RSA is disabled. +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Declared already in ossl_typ.h */ +/* typedef struct rsa_st RSA; */ +/* typedef struct rsa_meth_st RSA_METHOD; */ + +struct rsa_meth_st { + const char *name; + int (*rsa_pub_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + int (*rsa_pub_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + int (*rsa_priv_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + int (*rsa_priv_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + /* Can be null */ + int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); + /* Can be null */ + int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); + /* called at new */ + int (*init) (RSA *rsa); + /* called at free */ + int (*finish) (RSA *rsa); + /* RSA_METHOD_FLAG_* things */ + int flags; + /* may be needed! */ + char *app_data; + /* + * New sign and verify functions: some libraries don't allow arbitrary + * data to be signed/verified: this allows them to be used. Note: for + * this to work the RSA_public_decrypt() and RSA_private_encrypt() should + * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note: + * for backwards compatibility this functionality is only enabled if the + * RSA_FLAG_SIGN_VER option is set in 'flags'. + */ + int (*rsa_sign) (int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa); + int (*rsa_verify) (int dtype, const unsigned char *m, + unsigned int m_length, const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa); + /* + * If this callback is NULL, the builtin software RSA key-gen will be + * used. This is for behavioural compatibility whilst the code gets + * rewired, but one day it would be nice to assume there are no such + * things as "builtin software" implementations. + */ + int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +}; + +struct rsa_st { + /* + * The first parameter is used to pickup errors where this is passed + * instead of aEVP_PKEY, it is set to 0 + */ + int pad; + long version; + const RSA_METHOD *meth; + /* functional reference if 'meth' is ENGINE-provided */ + ENGINE *engine; + BIGNUM *n; + BIGNUM *e; + BIGNUM *d; + BIGNUM *p; + BIGNUM *q; + BIGNUM *dmp1; + BIGNUM *dmq1; + BIGNUM *iqmp; + /* be careful using this if the RSA structure is shared */ + CRYPTO_EX_DATA ex_data; + int references; + int flags; + /* Used to cache montgomery values */ + BN_MONT_CTX *_method_mod_n; + BN_MONT_CTX *_method_mod_p; + BN_MONT_CTX *_method_mod_q; + /* + * all BIGNUM values are actually in the following data, if it is not + * NULL + */ + char *bignum_data; + BN_BLINDING *blinding; + BN_BLINDING *mt_blinding; +}; + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS + +/* exponent limit enforced for "large" modulus only */ +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif + +# define RSA_3 0x3L +# define RSA_F4 0x10001L + +# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private + * match */ + +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 +/* + * This flag means the private key operations will be handled by rsa_mod_exp + * and that they do not depend on the private key components being present: + * for example a key stored in external hardware. Without this flag + * bn_mod_exp gets called when private key components are absent. + */ +# define RSA_FLAG_EXT_PKEY 0x0020 + +/* + * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify + * functions. + */ +# define RSA_FLAG_SIGN_VER 0x0040 + +/* + * new with 0.9.6j and 0.9.7b; the built-in + * RSA implementation now uses blinding by + * default (ignoring RSA_FLAG_BLINDING), + * but other engines might not need it + */ +# define RSA_FLAG_NO_BLINDING 0x0080 +/* + * new with 0.9.8f; the built-in RSA + * implementation now uses constant time + * operations by default in private key operations, + * e.g., constant time modular exponentiation, + * modular inverse without leaking branches, + * division without leaking branches. This + * flag disables these constant time + * operations and results in faster RSA + * private key operations. + */ +# define RSA_FLAG_NO_CONSTTIME 0x0100 +# ifdef OPENSSL_USE_DEPRECATED +/* deprecated name for the flag*/ +/* + * new with 0.9.7h; the built-in RSA + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME +# endif + +# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ + pad, NULL) + +# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \ + EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) + +# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ + (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ + len, NULL) + +# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ + (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \ + 0, plen) + +# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) + +# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) + +# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ + EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ + EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd) + +# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd) + +# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l) + +# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l) + +# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) + +# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) + +# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) + +# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) + +# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) + +# define RSA_PKCS1_PADDING 1 +# define RSA_SSLV23_PADDING 2 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 + +# define RSA_PKCS1_PADDING_SIZE 11 + +# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) +# define RSA_get_app_data(s) RSA_get_ex_data(s,0) + +RSA *RSA_new(void); +RSA *RSA_new_method(ENGINE *engine); +int RSA_size(const RSA *rsa); + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED +RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), void *cb_arg); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + +int RSA_check_key(const RSA *); + /* next 4 return -1 on error */ +int RSA_public_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_public_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +void RSA_free(RSA *r); +/* "up" the RSA object's reference count */ +int RSA_up_ref(RSA *r); + +int RSA_flags(const RSA *r); + +void RSA_set_default_method(const RSA_METHOD *meth); +const RSA_METHOD *RSA_get_default_method(void); +const RSA_METHOD *RSA_get_method(const RSA *rsa); +int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); + +/* This function needs the memory locking malloc callbacks to be installed */ +int RSA_memory_lock(RSA *r); + +/* these are the actual SSLeay RSA functions */ +const RSA_METHOD *RSA_PKCS1_SSLeay(void); + +const RSA_METHOD *RSA_null_method(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) + +typedef struct rsa_pss_params_st { + X509_ALGOR *hashAlgorithm; + X509_ALGOR *maskGenAlgorithm; + ASN1_INTEGER *saltLength; + ASN1_INTEGER *trailerField; +} RSA_PSS_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) + +typedef struct rsa_oaep_params_st { + X509_ALGOR *hashFunc; + X509_ALGOR *maskGenFunc; + X509_ALGOR *pSourceFunc; +} RSA_OAEP_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) + +# ifndef OPENSSL_NO_FP_API +int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +# ifndef OPENSSL_NO_BIO +int RSA_print(BIO *bp, const RSA *r, int offset); +# endif + +# ifndef OPENSSL_NO_RC4 +int i2d_RSA_NET(const RSA *a, unsigned char **pp, + int (*cb) (char *buf, int len, const char *prompt, + int verify), int sgckey); +RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, + int (*cb) (char *buf, int len, const char *prompt, + int verify), int sgckey); + +int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, + int (*cb) (char *buf, int len, const char *prompt, + int verify)); +RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, + int (*cb) (char *buf, int len, const char *prompt, + int verify)); +# endif + +/* + * The following 2 functions sign and verify a X509_SIG ASN1 object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign(int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, RSA *rsa); +int RSA_verify(int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); + +/* + * The following 2 function sign and verify a ASN1_OCTET_STRING object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + RSA *rsa); +int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); + +int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +void RSA_blinding_off(RSA *rsa); +BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); + +int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, + long seedlen, const EVP_MD *dgst); +int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, + const unsigned char *p, int pl); +int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len, + const unsigned char *p, int pl); +int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + int num, const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); +int RSA_padding_add_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_X931_hash_id(int nid); + +int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const unsigned char *EM, + int sLen); +int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, const EVP_MD *Hash, + int sLen); + +int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + const unsigned char *EM, int sLen); + +int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + int sLen); + +int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int RSA_set_ex_data(RSA *r, int idx, void *arg); +void *RSA_get_ex_data(const RSA *r, int idx); + +RSA *RSAPublicKey_dup(RSA *rsa); +RSA *RSAPrivateKey_dup(RSA *rsa); + +/* + * If this flag is set the RSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define RSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +/* + * Application has decided PRNG is good enough to generate a key: don't + * check. + */ +# define RSA_FLAG_CHECKED 0x0800 + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_RSA_strings(void); + +/* Error codes for the RSA functions. */ + +/* Function codes. */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_DO_RSA_PRINT 146 +# define RSA_F_INT_RSA_VERIFY 145 +# define RSA_F_MEMORY_LOCK 100 +# define RSA_F_OLD_RSA_PRIV_DECODE 147 +# define RSA_F_PKEY_RSA_CTRL 143 +# define RSA_F_PKEY_RSA_CTRL_STR 144 +# define RSA_F_PKEY_RSA_SIGN 142 +# define RSA_F_PKEY_RSA_VERIFY 154 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 157 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CMS_DECRYPT 158 +# define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 +# define RSA_F_RSA_GENERATE_KEY 105 +# define RSA_F_RSA_GENERATE_KEY_EX 155 +# define RSA_F_RSA_ITEM_VERIFY 156 +# define RSA_F_RSA_MEMORY_LOCK 130 +# define RSA_F_RSA_MGF1_TO_MD 159 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# define RSA_F_RSA_NULL_MOD_EXP 131 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 +# define RSA_F_RSA_PADDING_ADD_NONE 107 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 160 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 +# define RSA_F_RSA_PADDING_ADD_SSLV23 110 +# define RSA_F_RSA_PADDING_ADD_X931 127 +# define RSA_F_RSA_PADDING_CHECK_NONE 111 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 161 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 +# define RSA_F_RSA_PADDING_CHECK_X931 128 +# define RSA_F_RSA_PRINT 115 +# define RSA_F_RSA_PRINT_FP 116 +# define RSA_F_RSA_PRIVATE_DECRYPT 150 +# define RSA_F_RSA_PRIVATE_ENCRYPT 151 +# define RSA_F_RSA_PRIV_DECODE 137 +# define RSA_F_RSA_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_TO_CTX 162 +# define RSA_F_RSA_PUBLIC_DECRYPT 152 +# define RSA_F_RSA_PUBLIC_ENCRYPT 153 +# define RSA_F_RSA_PUB_DECODE 139 +# define RSA_F_RSA_SETUP_BLINDING 136 +# define RSA_F_RSA_SIGN 117 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 +# define RSA_F_RSA_VERIFY 119 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 +# define RSA_F_RSA_VERIFY_PKCS1_PSS 126 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 149 + +/* Reason codes. */ +# define RSA_R_ALGORITHM_MISMATCH 100 +# define RSA_R_BAD_E_VALUE 101 +# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 +# define RSA_R_BAD_PAD_BYTE_COUNT 103 +# define RSA_R_BAD_SIGNATURE 104 +# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 +# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 +# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 +# define RSA_R_DATA_TOO_LARGE 109 +# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 +# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 +# define RSA_R_DATA_TOO_SMALL 111 +# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 +# define RSA_R_DIGEST_DOES_NOT_MATCH 166 +# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 +# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 +# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 +# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 +# define RSA_R_FIRST_OCTET_INVALID 133 +# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 +# define RSA_R_INVALID_DIGEST 160 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_KEYBITS 145 +# define RSA_R_INVALID_LABEL 161 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_OAEP_PARAMETERS 162 +# define RSA_R_INVALID_PADDING 138 +# define RSA_R_INVALID_PADDING_MODE 141 +# define RSA_R_INVALID_PSS_PARAMETERS 149 +# define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_TRAILER 139 +# define RSA_R_INVALID_X931_DIGEST 142 +# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 +# define RSA_R_KEY_SIZE_TOO_SMALL 120 +# define RSA_R_LAST_OCTET_INVALID 134 +# define RSA_R_MODULUS_TOO_LARGE 105 +# define RSA_R_NON_FIPS_RSA_METHOD 157 +# define RSA_R_NO_PUBLIC_EXPONENT 140 +# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 +# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 +# define RSA_R_OAEP_DECODING_ERROR 121 +# define RSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE 158 +# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 +# define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PKCS_DECODING_ERROR 159 +# define RSA_R_P_NOT_PRIME 128 +# define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 +# define RSA_R_SLEN_CHECK_FAILED 136 +# define RSA_R_SLEN_RECOVERY_FAILED 135 +# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 +# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 +# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 +# define RSA_R_UNKNOWN_DIGEST 163 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNKNOWN_PSS_DIGEST 152 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 164 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 165 +# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 +# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 +# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 +# define RSA_R_VALUE_MISSING 147 +# define RSA_R_WRONG_SIGNATURE_LENGTH 119 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/safestack.h b/src/components/openssl/safestack.h new file mode 100644 index 0000000..0257b06 --- /dev/null +++ b/src/components/openssl/safestack.h @@ -0,0 +1,2672 @@ +/* ==================================================================== + * Copyright (c) 1999 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_SAFESTACK_H +# define HEADER_SAFESTACK_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef CHECKED_PTR_OF +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# endif + +/* + * In C++ we get problems because an explicit cast is needed from (void *) we + * use CHECKED_STACK_OF to ensure the correct type is passed in the macros + * below. + */ + +# define CHECKED_STACK_OF(type, p) \ + ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) + +# define CHECKED_SK_COPY_FUNC(type, p) \ + ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0))) + +# define CHECKED_SK_FREE_FUNC(type, p) \ + ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) + +# define CHECKED_SK_CMP_FUNC(type, p) \ + ((int (*)(const void *, const void *)) \ + ((1 ? p : (int (*)(const type * const *, const type * const *))0))) + +# define STACK_OF(type) struct stack_st_##type +# define PREDECLARE_STACK_OF(type) STACK_OF(type); + +# define DECLARE_STACK_OF(type) \ +STACK_OF(type) \ + { \ + _STACK stack; \ + }; +# define DECLARE_SPECIAL_STACK_OF(type, type2) \ +STACK_OF(type) \ + { \ + _STACK stack; \ + }; + +/* nada (obsolete in new safestack approach)*/ +# define IMPLEMENT_STACK_OF(type) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; + +typedef const char *OPENSSL_CSTRING; + +/* + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ + +DECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char) + +/* + * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +/* + * SKM_sk_... stack macros are internal to safestack.h: never use them + * directly, use sk__... instead + */ +# define SKM_sk_new(type, cmp) \ + ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp))) +# define SKM_sk_new_null(type) \ + ((STACK_OF(type) *)sk_new_null()) +# define SKM_sk_free(type, st) \ + sk_free(CHECKED_STACK_OF(type, st)) +# define SKM_sk_num(type, st) \ + sk_num(CHECKED_STACK_OF(type, st)) +# define SKM_sk_value(type, st,i) \ + ((type *)sk_value(CHECKED_STACK_OF(type, st), i)) +# define SKM_sk_set(type, st,i,val) \ + sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val)) +# define SKM_sk_zero(type, st) \ + sk_zero(CHECKED_STACK_OF(type, st)) +# define SKM_sk_push(type, st, val) \ + sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +# define SKM_sk_unshift(type, st, val) \ + sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +# define SKM_sk_find(type, st, val) \ + sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +# define SKM_sk_find_ex(type, st, val) \ + sk_find_ex(CHECKED_STACK_OF(type, st), \ + CHECKED_PTR_OF(type, val)) +# define SKM_sk_delete(type, st, i) \ + (type *)sk_delete(CHECKED_STACK_OF(type, st), i) +# define SKM_sk_delete_ptr(type, st, ptr) \ + (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr)) +# define SKM_sk_insert(type, st,val, i) \ + sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i) +# define SKM_sk_set_cmp_func(type, st, cmp) \ + ((int (*)(const type * const *,const type * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp))) +# define SKM_sk_dup(type, st) \ + (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st)) +# define SKM_sk_pop_free(type, st, free_func) \ + sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func)) +# define SKM_sk_deep_copy(type, st, copy_func, free_func) \ + (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func)) +# define SKM_sk_shift(type, st) \ + (type *)sk_shift(CHECKED_STACK_OF(type, st)) +# define SKM_sk_pop(type, st) \ + (type *)sk_pop(CHECKED_STACK_OF(type, st)) +# define SKM_sk_sort(type, st) \ + sk_sort(CHECKED_STACK_OF(type, st)) +# define SKM_sk_is_sorted(type, st) \ + sk_is_sorted(CHECKED_STACK_OF(type, st)) +# define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + (STACK_OF(type) *)d2i_ASN1_SET( \ + (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \ + pp, length, \ + CHECKED_D2I_OF(type, d2i_func), \ + CHECKED_SK_FREE_FUNC(type, free_func), \ + ex_tag, ex_class) +# define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ + i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \ + CHECKED_I2D_OF(type, i2d_func), \ + ex_tag, ex_class, is_set) +# define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \ + ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \ + CHECKED_I2D_OF(type, i2d_func), buf, len) +# define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \ + (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func)) +# define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \ + (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \ + CHECKED_D2I_OF(type, d2i_func), \ + CHECKED_SK_FREE_FUNC(type, free_func), \ + pass, passlen, oct, seq) +/* + * This block of defines is updated by util/mkstack.pl, please do not touch! + */ +# define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp)) +# define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION) +# define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i)) +# define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val)) +# define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i)) +# define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr)) +# define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i)) +# define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp)) +# define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st) +# define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func)) +# define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func)) +# define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) +# define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp)) +# define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange) +# define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st)) +# define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st)) +# define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i)) +# define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val)) +# define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st)) +# define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i)) +# define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr)) +# define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i)) +# define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp)) +# define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st) +# define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func)) +# define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func)) +# define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st)) +# define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st)) +# define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st)) +# define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st)) +# define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp)) +# define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) +# define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i)) +# define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val)) +# define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i)) +# define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr)) +# define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i)) +# define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp)) +# define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st) +# define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func)) +# define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func)) +# define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp)) +# define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) +# define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i)) +# define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val)) +# define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i)) +# define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr)) +# define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i)) +# define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp)) +# define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st) +# define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func)) +# define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func)) +# define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) +# define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp)) +# define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) +# define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i)) +# define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val)) +# define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i)) +# define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr)) +# define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i)) +# define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp)) +# define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st) +# define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func)) +# define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func)) +# define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) +# define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp)) +# define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) +# define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i)) +# define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val)) +# define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i)) +# define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr)) +# define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i)) +# define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp)) +# define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st) +# define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func)) +# define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func)) +# define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp)) +# define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) +# define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i)) +# define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val)) +# define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i)) +# define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr)) +# define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i)) +# define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp)) +# define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st) +# define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func)) +# define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func)) +# define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) +# define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp)) +# define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING) +# define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i)) +# define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val)) +# define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i)) +# define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr)) +# define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i)) +# define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp)) +# define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st) +# define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func)) +# define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func)) +# define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st)) +# define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp)) +# define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) +# define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i)) +# define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val)) +# define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i)) +# define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr)) +# define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i)) +# define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp)) +# define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st) +# define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func)) +# define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func)) +# define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) +# define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) +# define sk_BIO_new_null() SKM_sk_new_null(BIO) +# define sk_BIO_free(st) SKM_sk_free(BIO, (st)) +# define sk_BIO_num(st) SKM_sk_num(BIO, (st)) +# define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i)) +# define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val)) +# define sk_BIO_zero(st) SKM_sk_zero(BIO, (st)) +# define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val)) +# define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val)) +# define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val)) +# define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val)) +# define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i)) +# define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr)) +# define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i)) +# define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp)) +# define sk_BIO_dup(st) SKM_sk_dup(BIO, st) +# define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func)) +# define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func)) +# define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) +# define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) +# define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) +# define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) +# define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp)) +# define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY) +# define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i)) +# define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val)) +# define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i)) +# define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr)) +# define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i)) +# define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp)) +# define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st) +# define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func)) +# define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func)) +# define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp)) +# define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH) +# define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i)) +# define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val)) +# define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i)) +# define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr)) +# define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i)) +# define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp)) +# define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st) +# define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func)) +# define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func)) +# define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st)) +# define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp)) +# define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices) +# define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i)) +# define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val)) +# define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i)) +# define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr)) +# define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i)) +# define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp)) +# define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st) +# define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func)) +# define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func)) +# define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st)) +# define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp)) +# define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey) +# define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i)) +# define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val)) +# define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i)) +# define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr)) +# define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i)) +# define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp)) +# define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st) +# define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func)) +# define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func)) +# define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp)) +# define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo) +# define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i)) +# define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val)) +# define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i)) +# define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr)) +# define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i)) +# define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp)) +# define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st) +# define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func)) +# define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func)) +# define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st)) +# define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp)) +# define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice) +# define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i)) +# define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val)) +# define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i)) +# define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr)) +# define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i)) +# define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp)) +# define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st) +# define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func)) +# define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func)) +# define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp)) +# define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo) +# define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i)) +# define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val)) +# define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i)) +# define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr)) +# define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i)) +# define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp)) +# define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st) +# define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func)) +# define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func)) +# define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st)) +# define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp)) +# define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) +# define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i)) +# define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val)) +# define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i)) +# define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr)) +# define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i)) +# define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp)) +# define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st) +# define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func)) +# define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func)) +# define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) +# define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp)) +# define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) +# define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st)) +# define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st)) +# define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i)) +# define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val)) +# define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st)) +# define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i)) +# define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr)) +# define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i)) +# define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp)) +# define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st) +# define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func)) +# define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func)) +# define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) +# define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) +# define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) +# define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) +# define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp)) +# define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) +# define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st)) +# define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st)) +# define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i)) +# define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val)) +# define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st)) +# define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i)) +# define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr)) +# define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i)) +# define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp)) +# define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st) +# define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func)) +# define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func)) +# define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) +# define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) +# define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) +# define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) +# define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) +# define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) +# define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) +# define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) +# define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) +# define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) +# define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) +# define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) +# define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func)) +# define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) +# define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) +# define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i)) +# define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val)) +# define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i)) +# define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr)) +# define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i)) +# define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp)) +# define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st) +# define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func)) +# define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func)) +# define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) +# define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp)) +# define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) +# define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st)) +# define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st)) +# define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i)) +# define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val)) +# define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st)) +# define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i)) +# define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr)) +# define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i)) +# define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp)) +# define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st) +# define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func)) +# define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func)) +# define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) +# define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) +# define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) +# define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) +# define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp)) +# define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) +# define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st)) +# define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st)) +# define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i)) +# define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val)) +# define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st)) +# define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val)) +# define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val)) +# define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val)) +# define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val)) +# define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i)) +# define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr)) +# define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i)) +# define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp)) +# define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st) +# define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func)) +# define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func)) +# define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) +# define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) +# define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) +# define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) +# define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp)) +# define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) +# define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i)) +# define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val)) +# define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i)) +# define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr)) +# define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i)) +# define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp)) +# define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st) +# define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func)) +# define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func)) +# define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp)) +# define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID) +# define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i)) +# define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val)) +# define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i)) +# define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr)) +# define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i)) +# define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp)) +# define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st) +# define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func)) +# define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func)) +# define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st)) +# define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp)) +# define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD) +# define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st)) +# define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st)) +# define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i)) +# define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val)) +# define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st)) +# define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val)) +# define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val)) +# define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val)) +# define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val)) +# define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i)) +# define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr)) +# define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i)) +# define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp)) +# define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st) +# define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func)) +# define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func)) +# define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st)) +# define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st)) +# define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st)) +# define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st)) +# define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp)) +# define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL) +# define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i)) +# define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val)) +# define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i)) +# define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr)) +# define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i)) +# define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp)) +# define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st) +# define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func)) +# define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func)) +# define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp)) +# define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD) +# define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i)) +# define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i)) +# define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr)) +# define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i)) +# define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp)) +# define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st) +# define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func)) +# define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func)) +# define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp)) +# define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD) +# define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i)) +# define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val)) +# define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i)) +# define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr)) +# define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i)) +# define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp)) +# define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st) +# define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func)) +# define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func)) +# define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st)) +# define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp)) +# define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) +# define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i)) +# define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val)) +# define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i)) +# define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr)) +# define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i)) +# define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp)) +# define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st) +# define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func)) +# define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func)) +# define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) +# define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp)) +# define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES) +# define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i)) +# define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val)) +# define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i)) +# define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr)) +# define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i)) +# define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp)) +# define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st) +# define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func)) +# define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func)) +# define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st)) +# define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp)) +# define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE) +# define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i)) +# define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val)) +# define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i)) +# define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr)) +# define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i)) +# define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp)) +# define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st) +# define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func)) +# define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func)) +# define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st)) +# define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp)) +# define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily) +# define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st)) +# define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st)) +# define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i)) +# define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val)) +# define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st)) +# define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i)) +# define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr)) +# define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i)) +# define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp)) +# define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st) +# define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func)) +# define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func)) +# define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st)) +# define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st)) +# define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st)) +# define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st)) +# define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp)) +# define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange) +# define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i)) +# define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val)) +# define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i)) +# define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr)) +# define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i)) +# define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp)) +# define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st) +# define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func)) +# define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func)) +# define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st)) +# define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp)) +# define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) +# define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i)) +# define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val)) +# define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i)) +# define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr)) +# define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i)) +# define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp)) +# define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st) +# define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func)) +# define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func)) +# define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) +# define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp)) +# define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) +# define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i)) +# define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val)) +# define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i)) +# define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr)) +# define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i)) +# define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp)) +# define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st) +# define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func)) +# define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func)) +# define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp)) +# define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) +# define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i)) +# define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val)) +# define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i)) +# define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr)) +# define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i)) +# define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp)) +# define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st) +# define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func)) +# define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func)) +# define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp)) +# define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) +# define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i)) +# define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val)) +# define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i)) +# define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr)) +# define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i)) +# define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp)) +# define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st) +# define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func)) +# define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func)) +# define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) +# define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp)) +# define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) +# define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i)) +# define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val)) +# define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i)) +# define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr)) +# define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i)) +# define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp)) +# define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st) +# define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func)) +# define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func)) +# define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp)) +# define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) +# define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i)) +# define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val)) +# define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i)) +# define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr)) +# define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i)) +# define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp)) +# define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st) +# define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func)) +# define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func)) +# define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) +# define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp)) +# define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) +# define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i)) +# define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val)) +# define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i)) +# define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr)) +# define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i)) +# define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp)) +# define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st) +# define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func)) +# define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func)) +# define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) +# define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp)) +# define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) +# define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i)) +# define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val)) +# define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i)) +# define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr)) +# define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i)) +# define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp)) +# define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st) +# define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func)) +# define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func)) +# define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) +# define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp)) +# define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA) +# define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i)) +# define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val)) +# define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i)) +# define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr)) +# define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i)) +# define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp)) +# define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st) +# define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func)) +# define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func)) +# define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st)) +# define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp)) +# define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) +# define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st)) +# define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st)) +# define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i)) +# define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val)) +# define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st)) +# define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i)) +# define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr)) +# define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i)) +# define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp)) +# define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st) +# define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func)) +# define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func)) +# define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) +# define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) +# define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) +# define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) +# define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp)) +# define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) +# define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st)) +# define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st)) +# define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i)) +# define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val)) +# define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st)) +# define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i)) +# define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr)) +# define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i)) +# define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp)) +# define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st) +# define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func)) +# define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func)) +# define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) +# define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) +# define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) +# define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) +# define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp)) +# define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) +# define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i)) +# define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val)) +# define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i)) +# define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr)) +# define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i)) +# define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp)) +# define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st) +# define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func)) +# define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func)) +# define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) +# define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp)) +# define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) +# define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i)) +# define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val)) +# define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i)) +# define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr)) +# define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i)) +# define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp)) +# define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st) +# define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func)) +# define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func)) +# define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) +# define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp)) +# define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) +# define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i)) +# define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val)) +# define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i)) +# define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr)) +# define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i)) +# define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp)) +# define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st) +# define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func)) +# define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func)) +# define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) +# define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp)) +# define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID) +# define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i)) +# define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val)) +# define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i)) +# define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr)) +# define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i)) +# define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp)) +# define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st) +# define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func)) +# define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func)) +# define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st)) +# define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp)) +# define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) +# define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i)) +# define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val)) +# define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i)) +# define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr)) +# define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i)) +# define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp)) +# define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st) +# define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func)) +# define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func)) +# define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) +# define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp)) +# define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) +# define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i)) +# define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val)) +# define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i)) +# define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr)) +# define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i)) +# define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp)) +# define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st) +# define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func)) +# define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func)) +# define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) +# define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp)) +# define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) +# define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st)) +# define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st)) +# define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i)) +# define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val)) +# define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st)) +# define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val)) +# define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val)) +# define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val)) +# define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val)) +# define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i)) +# define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr)) +# define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i)) +# define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp)) +# define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st) +# define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func)) +# define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func)) +# define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) +# define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) +# define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) +# define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) +# define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp)) +# define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) +# define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i)) +# define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val)) +# define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i)) +# define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr)) +# define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i)) +# define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp)) +# define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st) +# define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func)) +# define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func)) +# define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp)) +# define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) +# define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i)) +# define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val)) +# define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i)) +# define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr)) +# define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i)) +# define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp)) +# define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st) +# define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func)) +# define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func)) +# define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) +# define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp)) +# define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) +# define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st)) +# define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st)) +# define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i)) +# define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val)) +# define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st)) +# define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i)) +# define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr)) +# define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i)) +# define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp)) +# define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st) +# define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func)) +# define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func)) +# define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) +# define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) +# define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) +# define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) +# define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp)) +# define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) +# define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i)) +# define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val)) +# define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i)) +# define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr)) +# define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i)) +# define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp)) +# define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st) +# define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func)) +# define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func)) +# define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) +# define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp)) +# define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING) +# define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i)) +# define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val)) +# define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i)) +# define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr)) +# define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i)) +# define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp)) +# define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st) +# define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func)) +# define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func)) +# define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st)) +# define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp)) +# define sk_SCT_new_null() SKM_sk_new_null(SCT) +# define sk_SCT_free(st) SKM_sk_free(SCT, (st)) +# define sk_SCT_num(st) SKM_sk_num(SCT, (st)) +# define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i)) +# define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val)) +# define sk_SCT_zero(st) SKM_sk_zero(SCT, (st)) +# define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val)) +# define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val)) +# define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val)) +# define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val)) +# define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i)) +# define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr)) +# define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i)) +# define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp)) +# define sk_SCT_dup(st) SKM_sk_dup(SCT, st) +# define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func)) +# define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func)) +# define sk_SCT_shift(st) SKM_sk_shift(SCT, (st)) +# define sk_SCT_pop(st) SKM_sk_pop(SCT, (st)) +# define sk_SCT_sort(st) SKM_sk_sort(SCT, (st)) +# define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st)) +# define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp)) +# define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN) +# define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st)) +# define sk_SRP_gN_num(st) SKM_sk_num(SRP_gN, (st)) +# define sk_SRP_gN_value(st, i) SKM_sk_value(SRP_gN, (st), (i)) +# define sk_SRP_gN_set(st, i, val) SKM_sk_set(SRP_gN, (st), (i), (val)) +# define sk_SRP_gN_zero(st) SKM_sk_zero(SRP_gN, (st)) +# define sk_SRP_gN_push(st, val) SKM_sk_push(SRP_gN, (st), (val)) +# define sk_SRP_gN_unshift(st, val) SKM_sk_unshift(SRP_gN, (st), (val)) +# define sk_SRP_gN_find(st, val) SKM_sk_find(SRP_gN, (st), (val)) +# define sk_SRP_gN_find_ex(st, val) SKM_sk_find_ex(SRP_gN, (st), (val)) +# define sk_SRP_gN_delete(st, i) SKM_sk_delete(SRP_gN, (st), (i)) +# define sk_SRP_gN_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN, (st), (ptr)) +# define sk_SRP_gN_insert(st, val, i) SKM_sk_insert(SRP_gN, (st), (val), (i)) +# define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp)) +# define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st) +# define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func)) +# define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func)) +# define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st)) +# define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st)) +# define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st)) +# define sk_SRP_gN_is_sorted(st) SKM_sk_is_sorted(SRP_gN, (st)) +# define sk_SRP_gN_cache_new(cmp) SKM_sk_new(SRP_gN_cache, (cmp)) +# define sk_SRP_gN_cache_new_null() SKM_sk_new_null(SRP_gN_cache) +# define sk_SRP_gN_cache_free(st) SKM_sk_free(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_num(st) SKM_sk_num(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_value(st, i) SKM_sk_value(SRP_gN_cache, (st), (i)) +# define sk_SRP_gN_cache_set(st, i, val) SKM_sk_set(SRP_gN_cache, (st), (i), (val)) +# define sk_SRP_gN_cache_zero(st) SKM_sk_zero(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_push(st, val) SKM_sk_push(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_unshift(st, val) SKM_sk_unshift(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_find(st, val) SKM_sk_find(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_find_ex(st, val) SKM_sk_find_ex(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_delete(st, i) SKM_sk_delete(SRP_gN_cache, (st), (i)) +# define sk_SRP_gN_cache_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN_cache, (st), (ptr)) +# define sk_SRP_gN_cache_insert(st, val, i) SKM_sk_insert(SRP_gN_cache, (st), (val), (i)) +# define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp)) +# define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st) +# define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func)) +# define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func)) +# define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_is_sorted(st) SKM_sk_is_sorted(SRP_gN_cache, (st)) +# define sk_SRP_user_pwd_new(cmp) SKM_sk_new(SRP_user_pwd, (cmp)) +# define sk_SRP_user_pwd_new_null() SKM_sk_new_null(SRP_user_pwd) +# define sk_SRP_user_pwd_free(st) SKM_sk_free(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_num(st) SKM_sk_num(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_value(st, i) SKM_sk_value(SRP_user_pwd, (st), (i)) +# define sk_SRP_user_pwd_set(st, i, val) SKM_sk_set(SRP_user_pwd, (st), (i), (val)) +# define sk_SRP_user_pwd_zero(st) SKM_sk_zero(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_push(st, val) SKM_sk_push(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_unshift(st, val) SKM_sk_unshift(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_find(st, val) SKM_sk_find(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_find_ex(st, val) SKM_sk_find_ex(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_delete(st, i) SKM_sk_delete(SRP_user_pwd, (st), (i)) +# define sk_SRP_user_pwd_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_user_pwd, (st), (ptr)) +# define sk_SRP_user_pwd_insert(st, val, i) SKM_sk_insert(SRP_user_pwd, (st), (val), (i)) +# define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp)) +# define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st) +# define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func)) +# define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func)) +# define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_is_sorted(st) SKM_sk_is_sorted(SRP_user_pwd, (st)) +# define sk_SRTP_PROTECTION_PROFILE_new(cmp) SKM_sk_new(SRTP_PROTECTION_PROFILE, (cmp)) +# define sk_SRTP_PROTECTION_PROFILE_new_null() SKM_sk_new_null(SRTP_PROTECTION_PROFILE) +# define sk_SRTP_PROTECTION_PROFILE_free(st) SKM_sk_free(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_num(st) SKM_sk_num(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_value(st, i) SKM_sk_value(SRTP_PROTECTION_PROFILE, (st), (i)) +# define sk_SRTP_PROTECTION_PROFILE_set(st, i, val) SKM_sk_set(SRTP_PROTECTION_PROFILE, (st), (i), (val)) +# define sk_SRTP_PROTECTION_PROFILE_zero(st) SKM_sk_zero(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_push(st, val) SKM_sk_push(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_unshift(st, val) SKM_sk_unshift(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_find(st, val) SKM_sk_find(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_find_ex(st, val) SKM_sk_find_ex(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_delete(st, i) SKM_sk_delete(SRTP_PROTECTION_PROFILE, (st), (i)) +# define sk_SRTP_PROTECTION_PROFILE_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRTP_PROTECTION_PROFILE, (st), (ptr)) +# define sk_SRTP_PROTECTION_PROFILE_insert(st, val, i) SKM_sk_insert(SRTP_PROTECTION_PROFILE, (st), (val), (i)) +# define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp)) +# define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st) +# define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func)) +# define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func)) +# define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_is_sorted(st) SKM_sk_is_sorted(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp)) +# define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) +# define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i)) +# define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val)) +# define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i)) +# define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr)) +# define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i)) +# define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp)) +# define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st) +# define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func)) +# define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func)) +# define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) +# define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp)) +# define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) +# define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st)) +# define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st)) +# define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i)) +# define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val)) +# define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st)) +# define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i)) +# define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr)) +# define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i)) +# define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp)) +# define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st) +# define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func)) +# define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func)) +# define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) +# define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) +# define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) +# define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp)) +# define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY) +# define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i)) +# define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i)) +# define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr)) +# define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i)) +# define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp)) +# define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st) +# define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func)) +# define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func)) +# define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp)) +# define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO) +# define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i)) +# define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val)) +# define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i)) +# define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr)) +# define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i)) +# define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp)) +# define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st) +# define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func)) +# define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func)) +# define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st)) +# define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp)) +# define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT) +# define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i)) +# define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val)) +# define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i)) +# define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr)) +# define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i)) +# define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp)) +# define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st) +# define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func)) +# define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func)) +# define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st)) +# define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp)) +# define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) +# define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st)) +# define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st)) +# define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i)) +# define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val)) +# define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st)) +# define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val)) +# define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val)) +# define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val)) +# define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val)) +# define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i)) +# define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr)) +# define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i)) +# define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp)) +# define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st) +# define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func)) +# define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func)) +# define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) +# define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) +# define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) +# define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) +# define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp)) +# define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) +# define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st)) +# define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st)) +# define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i)) +# define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val)) +# define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st)) +# define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val)) +# define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val)) +# define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val)) +# define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val)) +# define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i)) +# define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr)) +# define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i)) +# define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp)) +# define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st) +# define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func)) +# define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func)) +# define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) +# define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) +# define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) +# define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) +# define sk_X509_new(cmp) SKM_sk_new(X509, (cmp)) +# define sk_X509_new_null() SKM_sk_new_null(X509) +# define sk_X509_free(st) SKM_sk_free(X509, (st)) +# define sk_X509_num(st) SKM_sk_num(X509, (st)) +# define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i)) +# define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val)) +# define sk_X509_zero(st) SKM_sk_zero(X509, (st)) +# define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val)) +# define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val)) +# define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val)) +# define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val)) +# define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i)) +# define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr)) +# define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i)) +# define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) +# define sk_X509_dup(st) SKM_sk_dup(X509, st) +# define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func)) +# define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func)) +# define sk_X509_shift(st) SKM_sk_shift(X509, (st)) +# define sk_X509_pop(st) SKM_sk_pop(X509, (st)) +# define sk_X509_sort(st) SKM_sk_sort(X509, (st)) +# define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) +# define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp)) +# define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) +# define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i)) +# define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val)) +# define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i)) +# define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr)) +# define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i)) +# define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp)) +# define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st) +# define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func)) +# define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func)) +# define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) +# define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp)) +# define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) +# define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st)) +# define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st)) +# define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i)) +# define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val)) +# define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st)) +# define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i)) +# define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr)) +# define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i)) +# define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp)) +# define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st) +# define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func)) +# define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func)) +# define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) +# define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) +# define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) +# define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) +# define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp)) +# define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) +# define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i)) +# define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val)) +# define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i)) +# define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr)) +# define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i)) +# define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp)) +# define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st) +# define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func)) +# define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func)) +# define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) +# define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp)) +# define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) +# define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st)) +# define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st)) +# define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i)) +# define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val)) +# define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st)) +# define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)) +# define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val)) +# define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val)) +# define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val)) +# define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i)) +# define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr)) +# define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i)) +# define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp)) +# define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st) +# define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func)) +# define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func)) +# define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) +# define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) +# define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) +# define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) +# define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp)) +# define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) +# define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i)) +# define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val)) +# define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i)) +# define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr)) +# define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i)) +# define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp)) +# define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st) +# define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func)) +# define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func)) +# define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) +# define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp)) +# define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) +# define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st)) +# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st)) +# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i)) +# define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val)) +# define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st)) +# define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val)) +# define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val)) +# define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val)) +# define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val)) +# define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i)) +# define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr)) +# define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i)) +# define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp)) +# define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st) +# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func)) +# define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func)) +# define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) +# define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) +# define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) +# define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) +# define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp)) +# define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) +# define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i)) +# define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val)) +# define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i)) +# define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr)) +# define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i)) +# define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp)) +# define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st) +# define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func)) +# define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func)) +# define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) +# define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp)) +# define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) +# define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st)) +# define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st)) +# define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i)) +# define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val)) +# define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st)) +# define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val)) +# define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val)) +# define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val)) +# define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val)) +# define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i)) +# define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr)) +# define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i)) +# define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp)) +# define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st) +# define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func)) +# define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func)) +# define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) +# define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) +# define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) +# define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) +# define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp)) +# define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) +# define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i)) +# define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val)) +# define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i)) +# define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr)) +# define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i)) +# define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp)) +# define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st) +# define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func)) +# define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func)) +# define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) +# define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp)) +# define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) +# define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st)) +# define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st)) +# define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i)) +# define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val)) +# define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st)) +# define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i)) +# define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr)) +# define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i)) +# define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp)) +# define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st) +# define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func)) +# define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func)) +# define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) +# define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) +# define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) +# define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) +# define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp)) +# define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA) +# define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i)) +# define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val)) +# define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i)) +# define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr)) +# define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i)) +# define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp)) +# define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st) +# define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func)) +# define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func)) +# define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp)) +# define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE) +# define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i)) +# define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val)) +# define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i)) +# define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr)) +# define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i)) +# define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp)) +# define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st) +# define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func)) +# define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func)) +# define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st)) +# define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp)) +# define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) +# define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i)) +# define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val)) +# define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i)) +# define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr)) +# define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i)) +# define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp)) +# define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st) +# define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func)) +# define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func)) +# define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) +# define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp)) +# define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) +# define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st)) +# define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st)) +# define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i)) +# define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val)) +# define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st)) +# define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i)) +# define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr)) +# define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i)) +# define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp)) +# define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st) +# define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func)) +# define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func)) +# define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) +# define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) +# define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) +# define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) +# define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp)) +# define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) +# define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st)) +# define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st)) +# define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i)) +# define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val)) +# define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st)) +# define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i)) +# define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr)) +# define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i)) +# define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp)) +# define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st) +# define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func)) +# define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func)) +# define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) +# define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) +# define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) +# define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) +# define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp)) +# define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM) +# define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i)) +# define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val)) +# define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i)) +# define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr)) +# define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i)) +# define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp)) +# define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st) +# define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func)) +# define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func)) +# define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st)) +# define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp)) +# define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple) +# define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st)) +# define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st)) +# define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i)) +# define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val)) +# define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st)) +# define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val)) +# define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val)) +# define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val)) +# define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val)) +# define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i)) +# define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr)) +# define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i)) +# define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp)) +# define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st) +# define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func)) +# define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func)) +# define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st)) +# define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st)) +# define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st)) +# define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st)) +# define sk_void_new(cmp) SKM_sk_new(void, (cmp)) +# define sk_void_new_null() SKM_sk_new_null(void) +# define sk_void_free(st) SKM_sk_free(void, (st)) +# define sk_void_num(st) SKM_sk_num(void, (st)) +# define sk_void_value(st, i) SKM_sk_value(void, (st), (i)) +# define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val)) +# define sk_void_zero(st) SKM_sk_zero(void, (st)) +# define sk_void_push(st, val) SKM_sk_push(void, (st), (val)) +# define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val)) +# define sk_void_find(st, val) SKM_sk_find(void, (st), (val)) +# define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val)) +# define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i)) +# define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr)) +# define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i)) +# define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp)) +# define sk_void_dup(st) SKM_sk_dup(void, st) +# define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func)) +# define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func)) +# define sk_void_shift(st) SKM_sk_shift(void, (st)) +# define sk_void_pop(st) SKM_sk_pop(void, (st)) +# define sk_void_sort(st) SKM_sk_sort(void, (st)) +# define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st)) +# define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp))) +# define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null()) +# define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i)) +# define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st) +# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func)) +# define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func))) +# define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i) +# define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st) +# define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st)) +# define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i)) +# define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr)) +# define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \ + ((int (*)(const char * const *,const char * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp))) +# define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st) +# define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st)) +# define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st)) +# define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st)) +# define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st)) +# define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp))) +# define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null()) +# define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i)) +# define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st) +# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func)) +# define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func))) +# define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i) +# define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st) +# define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i)) +# define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr)) +# define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp) \ + ((int (*)(const void * const *,const void * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp))) +# define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st) +# define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st)) +# define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) +# define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null()) +# define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i)) +# define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st) +# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)) +# define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))) +# define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i) +# define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st) +# define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st)) +# define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i)) +# define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr)) +# define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp) \ + ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) +# define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st) +# define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st)) +# define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st)) +# define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st)) +# define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st)) +# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func)) +# define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \ + SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) +# define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \ + SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) +# define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj) +# define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst) +# define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst) +# define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst) +# define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn) +# define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg) +# define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh) +# define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh) +# define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh) +# define lh_ADDED_OBJ_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ADDED_OBJ,lh,out) +# define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out) +# define lh_ADDED_OBJ_stats_bio(lh,out) \ + LHM_lh_stats_bio(ADDED_OBJ,lh,out) +# define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh) +# define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info) +# define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst) +# define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst) +# define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst) +# define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn) +# define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg) +# define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh) +# define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh) +# define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh) +# define lh_APP_INFO_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(APP_INFO,lh,out) +# define lh_APP_INFO_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(APP_INFO,lh,out) +# define lh_APP_INFO_stats_bio(lh,out) \ + LHM_lh_stats_bio(APP_INFO,lh,out) +# define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh) +# define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value) +# define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst) +# define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst) +# define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst) +# define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn) +# define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg) +# define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh) +# define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh) +# define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh) +# define lh_CONF_VALUE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(CONF_VALUE,lh,out) +# define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out) +# define lh_CONF_VALUE_stats_bio(lh,out) \ + LHM_lh_stats_bio(CONF_VALUE,lh,out) +# define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh) +# define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile) +# define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst) +# define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst) +# define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst) +# define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn) +# define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg) +# define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh) +# define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh) +# define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh) +# define lh_ENGINE_PILE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ENGINE_PILE,lh,out) +# define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out) +# define lh_ENGINE_PILE_stats_bio(lh,out) \ + LHM_lh_stats_bio(ENGINE_PILE,lh,out) +# define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh) +# define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state) +# define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst) +# define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst) +# define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst) +# define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn) +# define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg) +# define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh) +# define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh) +# define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh) +# define lh_ERR_STATE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ERR_STATE,lh,out) +# define lh_ERR_STATE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out) +# define lh_ERR_STATE_stats_bio(lh,out) \ + LHM_lh_stats_bio(ERR_STATE,lh,out) +# define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh) +# define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data) +# define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst) +# define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst) +# define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst) +# define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn) +# define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg) +# define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh) +# define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh) +# define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh) +# define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out) +# define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out) +# define lh_ERR_STRING_DATA_stats_bio(lh,out) \ + LHM_lh_stats_bio(ERR_STRING_DATA,lh,out) +# define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh) +# define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item) +# define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst) +# define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst) +# define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst) +# define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn) +# define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg) +# define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh) +# define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh) +# define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh) +# define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out) +# define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out) +# define lh_EX_CLASS_ITEM_stats_bio(lh,out) \ + LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out) +# define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh) +# define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function) +# define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst) +# define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst) +# define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst) +# define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn) +# define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg) +# define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh) +# define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh) +# define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh) +# define lh_FUNCTION_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(FUNCTION,lh,out) +# define lh_FUNCTION_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(FUNCTION,lh,out) +# define lh_FUNCTION_stats_bio(lh,out) \ + LHM_lh_stats_bio(FUNCTION,lh,out) +# define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh) +# define lh_MEM_new() LHM_lh_new(MEM,mem) +# define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst) +# define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst) +# define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst) +# define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn) +# define lh_MEM_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg) +# define lh_MEM_error(lh) LHM_lh_error(MEM,lh) +# define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh) +# define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh) +# define lh_MEM_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(MEM,lh,out) +# define lh_MEM_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(MEM,lh,out) +# define lh_MEM_stats_bio(lh,out) \ + LHM_lh_stats_bio(MEM,lh,out) +# define lh_MEM_free(lh) LHM_lh_free(MEM,lh) +# define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name) +# define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst) +# define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst) +# define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst) +# define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn) +# define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg) +# define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh) +# define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh) +# define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh) +# define lh_OBJ_NAME_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OBJ_NAME,lh,out) +# define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out) +# define lh_OBJ_NAME_stats_bio(lh,out) \ + LHM_lh_stats_bio(OBJ_NAME,lh,out) +# define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh) +# define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring) +# define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst) +# define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst) +# define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst) +# define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn) +# define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg) +# define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out) +# define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out) +# define lh_OPENSSL_CSTRING_stats_bio(lh,out) \ + LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out) +# define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string) +# define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst) +# define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst) +# define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst) +# define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn) +# define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg) +# define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh) +# define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh) +# define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh) +# define lh_OPENSSL_STRING_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out) +# define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out) +# define lh_OPENSSL_STRING_stats_bio(lh,out) \ + LHM_lh_stats_bio(OPENSSL_STRING,lh,out) +# define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh) +# define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session) +# define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst) +# define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst) +# define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst) +# define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn) +# define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg) +# define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh) +# define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh) +# define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh) +# define lh_SSL_SESSION_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(SSL_SESSION,lh,out) +# define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out) +# define lh_SSL_SESSION_stats_bio(lh,out) \ + LHM_lh_stats_bio(SSL_SESSION,lh,out) +# define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh) +#ifdef __cplusplus +} +#endif +#endif /* !defined HEADER_SAFESTACK_H */ diff --git a/src/components/openssl/seed.h b/src/components/openssl/seed.h new file mode 100644 index 0000000..c9bf997 --- /dev/null +++ b/src/components/openssl/seed.h @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). 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. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + */ +/* ==================================================================== + * Copyright (c) 1998-2007 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_SEED_H +# define HEADER_SEED_H + +# include +# include +# include + +# ifdef OPENSSL_NO_SEED +# error SEED is disabled. +# endif + +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif + +# if !defined(NO_SYS_TYPES_H) +# include +# endif + +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; + +# ifdef OPENSSL_FIPS +void private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); +# endif +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); + +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); + +void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, + const SEED_KEY_SCHEDULE *ks, int enc); +void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int enc); +void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num, + int enc); +void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num); + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_SEED_H */ diff --git a/src/components/openssl/sha.h b/src/components/openssl/sha.h new file mode 100644 index 0000000..c5b687f --- /dev/null +++ b/src/components/openssl/sha.h @@ -0,0 +1,214 @@ +/* crypto/sha/sha.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) +# error SHA is disabled. +# endif + +# if defined(OPENSSL_FIPS) +# define FIPS_SHA_SIZE_T size_t +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! SHA_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define SHA_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define SHA_LONG unsigned long +# define SHA_LONG_LOG2 3 +# else +# define SHA_LONG unsigned int +# endif + +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) +# define SHA_DIGEST_LENGTH 20 + +typedef struct SHAstate_st { + SHA_LONG h0, h1, h2, h3, h4; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num; +} SHA_CTX; + +# ifndef OPENSSL_NO_SHA0 +# ifdef OPENSSL_FIPS +int private_SHA_Init(SHA_CTX *c); +# endif +int SHA_Init(SHA_CTX *c); +int SHA_Update(SHA_CTX *c, const void *data, size_t len); +int SHA_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md); +void SHA_Transform(SHA_CTX *c, const unsigned char *data); +# endif +# ifndef OPENSSL_NO_SHA1 +# ifdef OPENSSL_FIPS +int private_SHA1_Init(SHA_CTX *c); +# endif +int SHA1_Init(SHA_CTX *c); +int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +int SHA1_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); +void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +# ifndef OPENSSL_NO_SHA256 +# ifdef OPENSSL_FIPS +int private_SHA224_Init(SHA256_CTX *c); +int private_SHA256_Init(SHA256_CTX *c); +# endif +int SHA224_Init(SHA256_CTX *c); +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA224_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); +int SHA256_Init(SHA256_CTX *c); +int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA256_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); +void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); +# endif + +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +# ifndef OPENSSL_NO_SHA512 +/* + * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 + * being exactly 64-bit wide. See Implementation Notes in sha512.c + * for further details. + */ +/* + * SHA-512 treats input data as a + * contiguous array of 64 bit + * wide big-endian values. + */ +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# define U64(C) C##UI64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# define U64(C) C##UL +# else +# define SHA_LONG64 unsigned long long +# define U64(C) C##ULL +# endif + +typedef struct SHA512state_st { + SHA_LONG64 h[8]; + SHA_LONG64 Nl, Nh; + union { + SHA_LONG64 d[SHA_LBLOCK]; + unsigned char p[SHA512_CBLOCK]; + } u; + unsigned int num, md_len; +} SHA512_CTX; +# endif + +# ifndef OPENSSL_NO_SHA512 +# ifdef OPENSSL_FIPS +int private_SHA384_Init(SHA512_CTX *c); +int private_SHA512_Init(SHA512_CTX *c); +# endif +int SHA384_Init(SHA512_CTX *c); +int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA384_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); +int SHA512_Init(SHA512_CTX *c); +int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA512_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); +void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/srp.h b/src/components/openssl/srp.h new file mode 100644 index 0000000..c8beae0 --- /dev/null +++ b/src/components/openssl/srp.h @@ -0,0 +1,179 @@ +/* crypto/srp/srp.h */ +/* + * Written by Christophe Renou (christophe.renou@edelweb.fr) with the + * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the + * EdelKey project and contributed to the OpenSSL project 2004. + */ +/* ==================================================================== + * Copyright (c) 2004 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 + * licensing@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 __SRP_H__ +# define __SRP_H__ + +# ifndef OPENSSL_NO_SRP + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# include +# include +# include + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; + + +DECLARE_STACK_OF(SRP_gN_cache) + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; + +DECLARE_STACK_OF(SRP_user_pwd) + +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + BIGNUM *default_g; + BIGNUM *default_N; +} SRP_VBASE; + +/* + * Structure interne pour retenir les couples N et g + */ +typedef struct SRP_gN_st { + char *id; + BIGNUM *g; + BIGNUM *N; +} SRP_gN; + +DECLARE_STACK_OF(SRP_gN) + +SRP_VBASE *SRP_VBASE_new(char *seed_key); +int SRP_VBASE_free(SRP_VBASE *vb); +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +/* This method ignores the configured seed and fails for an unknown user. */ +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, BIGNUM *N, BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N); +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, + BIGNUM *N); +BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v); +int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N); +BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N); + +/* client side .... */ +BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass); +BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g); +BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, + BIGNUM *a, BIGNUM *u); +int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +#ifdef __cplusplus +} +#endif + +# endif +#endif diff --git a/src/components/openssl/srtp.h b/src/components/openssl/srtp.h new file mode 100644 index 0000000..9835521 --- /dev/null +++ b/src/components/openssl/srtp.h @@ -0,0 +1,147 @@ +/* ssl/srtp.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 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). + * + */ +/* + * DTLS code by Eric Rescorla + * + * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. + */ + +#ifndef HEADER_D1_SRTP_H +# define HEADER_D1_SRTP_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define SRTP_AES128_CM_SHA1_80 0x0001 +# define SRTP_AES128_CM_SHA1_32 0x0002 +# define SRTP_AES128_F8_SHA1_80 0x0003 +# define SRTP_AES128_F8_SHA1_32 0x0004 +# define SRTP_NULL_SHA1_80 0x0005 +# define SRTP_NULL_SHA1_32 0x0006 + +# ifndef OPENSSL_NO_SRTP + +int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); + +STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); + +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/ssl.h b/src/components/openssl/ssl.h new file mode 100644 index 0000000..1dbcb23 --- /dev/null +++ b/src/components/openssl/ssl.h @@ -0,0 +1,3163 @@ +/* ssl/ssl.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2007 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). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECC cipher suite support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ +/* ==================================================================== + * Copyright 2005 Nokia. All rights reserved. + * + * The portions of the attached software ("Contribution") is developed by + * Nokia Corporation and is licensed pursuant to the OpenSSL open source + * license. + * + * The Contribution, originally written by Mika Kousa and Pasi Eronen of + * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites + * support (see RFC 4279) to OpenSSL. + * + * No patent licenses or other rights except those expressly stated in + * the OpenSSL open source license shall be deemed granted or received + * expressly, by implication, estoppel, or otherwise. + * + * No assurances are provided by Nokia that the Contribution does not + * infringe the patent or other intellectual property rights of any third + * party or that the license provides you with all the necessary rights + * to make use of the Contribution. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN + * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA + * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY + * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR + * OTHERWISE. + */ + +#ifndef HEADER_SSL_H +# define HEADER_SSL_H + +# include + +# ifndef OPENSSL_NO_COMP +# include +# endif +# ifndef OPENSSL_NO_BIO +# include +# endif +# ifndef OPENSSL_NO_DEPRECATED +# ifndef OPENSSL_NO_X509 +# include +# endif +# include +# include +# include +# endif +# include +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SSLeay version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +/* text strings for the ciphers */ +# define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5 +# define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5 +# define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 +# define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5 +# define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 +# define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5 +# define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5 +# define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA +# define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 +# define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA + +/* + * VRS Additional Kerberos5 entries + */ +# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA +# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA +# define SSL_TXT_KRB5_RC4_128_SHA SSL3_TXT_KRB5_RC4_128_SHA +# define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA +# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 +# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 +# define SSL_TXT_KRB5_RC4_128_MD5 SSL3_TXT_KRB5_RC4_128_MD5 +# define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 + +# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA +# define SSL_TXT_KRB5_RC2_40_CBC_SHA SSL3_TXT_KRB5_RC2_40_CBC_SHA +# define SSL_TXT_KRB5_RC4_40_SHA SSL3_TXT_KRB5_RC4_40_SHA +# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 +# define SSL_TXT_KRB5_RC2_40_CBC_MD5 SSL3_TXT_KRB5_RC2_40_CBC_MD5 +# define SSL_TXT_KRB5_RC4_40_MD5 SSL3_TXT_KRB5_RC4_40_MD5 + +# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA +# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 +# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA +# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 +# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA +# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 +# define SSL_MAX_KRB5_PRINCIPAL_LENGTH 256 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_EXP40 "EXPORT40" +# define SSL_TXT_EXP56 "EXPORT56" +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_kFZA "kFZA"/* unused! */ +# define SSL_TXT_aFZA "aFZA"/* unused! */ +# define SSL_TXT_eFZA "eFZA"/* unused! */ +# define SSL_TXT_FZA "FZA"/* unused! */ + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr" +# define SSL_TXT_kDHd "kDHd" +# define SSL_TXT_kDH "kDH" +# define SSL_TXT_kEDH "kEDH" +# define SSL_TXT_kDHE "kDHE"/* alias for kEDH */ +# define SSL_TXT_kKRB5 "kKRB5" +# define SSL_TXT_kECDHr "kECDHr" +# define SSL_TXT_kECDHe "kECDHe" +# define SSL_TXT_kECDH "kECDH" +# define SSL_TXT_kEECDH "kEECDH" +# define SSL_TXT_kECDHE "kECDHE"/* alias for kEECDH */ +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH" +# define SSL_TXT_aECDH "aECDH" +# define SSL_TXT_aKRB5 "aKRB5" +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_EDH "EDH"/* same as "kEDH:-ADH" */ +# define SSL_TXT_DHE "DHE"/* alias for EDH */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* same as "kEECDH:-AECDH" */ +# define SSL_TXT_ECDHE "ECDHE"/* alias for ECDHE" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_KRB5 "KRB5" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV2 "SSLv2" +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_EXP "EXP" +# define SSL_TXT_EXPORT "EXPORT" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + */ +# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2" +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2) +# define OPENSSL_NO_SSL2 +# endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; + +DECLARE_STACK_OF(SSL_CIPHER) + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; + +DECLARE_STACK_OF(SRTP_PROTECTION_PROFILE) + +typedef int (*tls_session_ticket_ext_cb_fn) (SSL *s, + const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret, + int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + SSL_CIPHER **cipher, void *arg); + +# ifndef OPENSSL_NO_TLSEXT + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type, + const unsigned char **out, + size_t *outlen, int *al, void *add_arg); + +typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type, + const unsigned char *in, + size_t inlen, int *al, void *parse_arg); + +# endif + +# ifndef OPENSSL_NO_SSL_INTERN + +/* used to hold info on the particular ciphers used */ +struct ssl_cipher_st { + int valid; + const char *name; /* text name */ + unsigned long id; /* id, 4 bytes, first is version */ + /* + * changed in 0.9.9: these four used to be portions of a single value + * 'algorithms' + */ + unsigned long algorithm_mkey; /* key exchange algorithm */ + unsigned long algorithm_auth; /* server authentication */ + unsigned long algorithm_enc; /* symmetric encryption */ + unsigned long algorithm_mac; /* symmetric authentication */ + unsigned long algorithm_ssl; /* (major) protocol version */ + unsigned long algo_strength; /* strength and export flags */ + unsigned long algorithm2; /* Extra flags */ + int strength_bits; /* Number of bits really used */ + int alg_bits; /* Number of bits for algorithm */ +}; + +/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ +struct ssl_method_st { + int version; + int (*ssl_new) (SSL *s); + void (*ssl_clear) (SSL *s); + void (*ssl_free) (SSL *s); + int (*ssl_accept) (SSL *s); + int (*ssl_connect) (SSL *s); + int (*ssl_read) (SSL *s, void *buf, int len); + int (*ssl_peek) (SSL *s, void *buf, int len); + int (*ssl_write) (SSL *s, const void *buf, int len); + int (*ssl_shutdown) (SSL *s); + int (*ssl_renegotiate) (SSL *s); + int (*ssl_renegotiate_check) (SSL *s); + long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long + max, int *ok); + int (*ssl_read_bytes) (SSL *s, int type, unsigned char *buf, int len, + int peek); + int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len); + int (*ssl_dispatch_alert) (SSL *s); + long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg); + long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg); + const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr); + int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr); + int (*ssl_pending) (const SSL *s); + int (*num_ciphers) (void); + const SSL_CIPHER *(*get_cipher) (unsigned ncipher); + const struct ssl_method_st *(*get_ssl_method) (int version); + long (*get_timeout) (void); + struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */ + int (*ssl_version) (void); + long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void)); + long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void)); +}; + +/*- + * Lets make this into an ASN.1 type structure as follows + * SSL_SESSION_ID ::= SEQUENCE { + * version INTEGER, -- structure version number + * SSLversion INTEGER, -- SSL version number + * Cipher OCTET STRING, -- the 3 byte cipher ID + * Session_ID OCTET STRING, -- the Session ID + * Master_key OCTET STRING, -- the master key + * KRB5_principal OCTET STRING -- optional Kerberos principal + * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument + * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time + * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds + * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate + * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context + * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer' + * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension + * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint + * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity + * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket + * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only) + * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method + * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username + * } + * Look in ssl/ssl_asn1.c for more details + * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). + */ +struct ssl_session_st { + int ssl_version; /* what ssl version session info is being + * kept in here? */ + /* only really used in SSLv2 */ + unsigned int key_arg_length; + unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; + int master_key_length; + unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH]; + /* session_id - valid? */ + unsigned int session_id_length; + unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; + /* + * this is used to determine whether the session is being reused in the + * appropriate context. It is up to the application to set this, via + * SSL_new + */ + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; +# ifndef OPENSSL_NO_KRB5 + unsigned int krb5_client_princ_len; + unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH]; +# endif /* OPENSSL_NO_KRB5 */ +# ifndef OPENSSL_NO_PSK + char *psk_identity_hint; + char *psk_identity; +# endif + /* + * Used to indicate that session resumption is not allowed. Applications + * can also set this bit for a new session via not_resumable_session_cb + * to disable session caching and tickets. + */ + int not_resumable; + /* The cert is the certificate used to establish this connection */ + struct sess_cert_st /* SESS_CERT */ *sess_cert; + /* + * This is the cert for the other end. On clients, it will be the same as + * sess_cert->peer_key->x509 (the latter is not enough as sess_cert is + * not retained in the external representation of sessions, see + * ssl_asn1.c). + */ + X509 *peer; + /* + * when app_verify_callback accepts a session where the peer's + * certificate is not ok, we must remember the error for session reuse: + */ + long verify_result; /* only for servers */ + int references; + long timeout; + long time; + unsigned int compress_meth; /* Need to lookup the method */ + const SSL_CIPHER *cipher; + unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used + * to load the 'cipher' structure */ + STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ + CRYPTO_EX_DATA ex_data; /* application specific data */ + /* + * These are used to make removal of session-ids more efficient and to + * implement a maximum cache size. + */ + struct ssl_session_st *prev, *next; +# ifndef OPENSSL_NO_TLSEXT + char *tlsext_hostname; +# ifndef OPENSSL_NO_EC + size_t tlsext_ecpointformatlist_length; + unsigned char *tlsext_ecpointformatlist; /* peer's list */ + size_t tlsext_ellipticcurvelist_length; + unsigned char *tlsext_ellipticcurvelist; /* peer's list */ +# endif /* OPENSSL_NO_EC */ + /* RFC4507 info */ + unsigned char *tlsext_tick; /* Session ticket */ + size_t tlsext_ticklen; /* Session ticket length */ + long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ +# endif +# ifndef OPENSSL_NO_SRP + char *srp_username; +# endif +}; + +# endif + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L +/* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L +# define SSL_OP_TLSEXT_PADDING 0x00000010L +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L +# define SSL_OP_TLS_D5_BUG 0x00000100L +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L + +/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +/* Refers to ancient SSLREF and SSLv2, retained for compatibility */ +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 + +/* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in + * OpenSSL 0.9.6d. Usually (depending on the application protocol) the + * workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it in + * SSL_OP_ALL. + */ +/* added in 0.9.6e */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L + +/* + * SSL_OP_ALL: various bug workarounds that should be rather harmless. This + * used to be 0x000FFFFFL before 0.9.7. + */ +# define SSL_OP_ALL 0x80000BFFL + +/* DTLS options */ +# define SSL_OP_NO_QUERY_MTU 0x00001000L +/* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE 0x00002000L +/* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET 0x00004000L +/* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ +# define SSL_OP_CISCO_ANYCONNECT 0x00008000L + +/* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L +/* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION 0x00020000L +/* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L +/* If set, always create a new key when using tmp_ecdh parameters */ +# define SSL_OP_SINGLE_ECDH_USE 0x00080000L +/* Does nothing: retained for compatibility */ +# define SSL_OP_SINGLE_DH_USE 0x00100000L +/* Does nothing: retained for compatibiity */ +# define SSL_OP_EPHEMERAL_RSA 0x0 +/* + * Set on servers to choose the cipher according to the server's preferences + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L +/* + * If set, a server will allow a client to issue a SSLv3.0 version number as + * latest version supported in the premaster secret, even when TLSv1.0 + * (version 3.1) was announced in the client hello. Normally this is + * forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L + +# define SSL_OP_NO_SSLv2 0x01000000L +# define SSL_OP_NO_SSLv3 0x02000000L +# define SSL_OP_NO_TLSv1 0x04000000L +# define SSL_OP_NO_TLSv1_2 0x08000000L +# define SSL_OP_NO_TLSv1_1 0x10000000L + +# define SSL_OP_NO_DTLSv1 0x04000000L +# define SSL_OP_NO_DTLSv1_2 0x08000000L + +# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\ + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) + +/* + * These next two were never actually used for anything since SSLeay zap so + * we have some more flags. + */ +/* + * The next flag deliberately changes the ciphertest, this is a check for the + * PKCS#1 attack + */ +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 + +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L +/* + * Make server add server-hello extension from early version of cryptopro + * draft, when GOST ciphersuite is negotiated. Required for interoperability + * with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004L +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008L +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) "Released" buffers are put onto a free-list in the context or + * just freed (depending on the context's setting for freelist_max_len). + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010L +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certifcate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001L + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +# define SSL_CTX_set_options(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) +# define SSL_CTX_clear_options(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) +# define SSL_CTX_get_options(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL) +# define SSL_set_options(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL) +# define SSL_clear_options(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) +# define SSL_get_options(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL) + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_heartbeat(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) +# endif + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# ifndef OPENSSL_NO_SRP + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct srp_ctx_st { + /* param for all the callbacks */ + void *SRP_cb_arg; + /* set client Hello login callback */ + int (*TLS_ext_srp_username_callback) (SSL *, int *, void *); + /* set SRP N/g param callback for verification */ + int (*SRP_verify_param_callback) (SSL *, void *); + /* set SRP client passwd callback */ + char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *); + char *login; + BIGNUM *N, *g, *s, *B, *A; + BIGNUM *a, *b, *v; + char *info; + int strength; + unsigned long srp_Mask; +} SRP_CTX; + +# endif + +/* see tls_srp.c */ +int SSL_SRP_CTX_init(SSL *s); +int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +int SSL_SRP_CTX_free(SSL *ctx); +int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +int SSL_srp_server_param_with_username(SSL *s, int *ad); +int SRP_generate_server_master_secret(SSL *s, unsigned char *master_key); +int SRP_Calc_A_param(SSL *s); +int SRP_generate_client_master_secret(SSL *s, unsigned char *master_key); + +# endif + +# if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) +# define SSL_MAX_CERT_LIST_DEFAULT 1024*30 + /* 30k max cert list :-) */ +# else +# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 + /* 100k max cert list :-) */ +# endif + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv2 this is 16 + * bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback can alter this + * length to be less if desired, but under SSLv2 session IDs are supposed to + * be fixed at 16 bytes so the id will be padded after the callback returns + * in this case. It is also an error for the callback to set the size to + * zero. + */ +typedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id, + unsigned int *id_len); + +typedef struct ssl_comp_st SSL_COMP; + +# ifndef OPENSSL_NO_SSL_INTERN + +struct ssl_comp_st { + int id; + const char *name; +# ifndef OPENSSL_NO_COMP + COMP_METHOD *method; +# else + char *method; +# endif +}; + +DECLARE_STACK_OF(SSL_COMP) +DECLARE_LHASH_OF(SSL_SESSION); + +struct ssl_ctx_st { + const SSL_METHOD *method; + STACK_OF(SSL_CIPHER) *cipher_list; + /* same as above but sorted for lookup */ + STACK_OF(SSL_CIPHER) *cipher_list_by_id; + struct x509_store_st /* X509_STORE */ *cert_store; + LHASH_OF(SSL_SESSION) *sessions; + /* + * Most session-ids that will be cached, default is + * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. + */ + unsigned long session_cache_size; + struct ssl_session_st *session_cache_head; + struct ssl_session_st *session_cache_tail; + /* + * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT, + * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which + * means only SSL_accept which cache SSL_SESSIONS. + */ + int session_cache_mode; + /* + * If timeout is not 0, it is the default timeout value set when + * SSL_new() is called. This has been put in to make life easier to set + * things up + */ + long session_timeout; + /* + * If this callback is not null, it will be called each time a session id + * is added to the cache. If this function returns 1, it means that the + * callback will do a SSL_SESSION_free() when it has finished using it. + * Otherwise, on 0, it means the callback has finished with it. If + * remove_session_cb is not null, it will be called when a session-id is + * removed from the cache. After the call, OpenSSL will + * SSL_SESSION_free() it. + */ + int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess); + void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); + SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl, + unsigned char *data, int len, int *copy); + struct { + int sess_connect; /* SSL new conn - started */ + int sess_connect_renegotiate; /* SSL reneg - requested */ + int sess_connect_good; /* SSL new conne/reneg - finished */ + int sess_accept; /* SSL new accept - started */ + int sess_accept_renegotiate; /* SSL reneg - requested */ + int sess_accept_good; /* SSL accept/reneg - finished */ + int sess_miss; /* session lookup misses */ + int sess_timeout; /* reuse attempt on timeouted session */ + int sess_cache_full; /* session removed due to full cache */ + int sess_hit; /* session reuse actually done */ + int sess_cb_hit; /* session-id that was not in the cache was + * passed back via the callback. This + * indicates that the application is + * supplying session-id's from other + * processes - spooky :-) */ + } stats; + + int references; + + /* if defined, these override the X509_verify_cert() calls */ + int (*app_verify_callback) (X509_STORE_CTX *, void *); + void *app_verify_arg; + /* + * before OpenSSL 0.9.7, 'app_verify_arg' was ignored + * ('app_verify_callback' was called with just one argument) + */ + + /* Default password callback. */ + pem_password_cb *default_passwd_callback; + + /* Default password callback user data. */ + void *default_passwd_callback_userdata; + + /* get client cert callback */ + int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey); + + /* cookie generate callback */ + int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie, + unsigned int *cookie_len); + + /* verify cookie callback */ + int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie, + unsigned int cookie_len); + + CRYPTO_EX_DATA ex_data; + + const EVP_MD *rsa_md5; /* For SSLv2 - name is 'ssl2-md5' */ + const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ + const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */ + + STACK_OF(X509) *extra_certs; + STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */ + + /* Default values used when no per-SSL value is defined follow */ + + /* used if SSL's info_callback is NULL */ + void (*info_callback) (const SSL *ssl, int type, int val); + + /* what we put in client cert requests */ + STACK_OF(X509_NAME) *client_CA; + + /* + * Default values to use in SSL structures follow (these are copied by + * SSL_new) + */ + + unsigned long options; + unsigned long mode; + long max_cert_list; + + struct cert_st /* CERT */ *cert; + int read_ahead; + + /* callback that allows applications to peek at protocol messages */ + void (*msg_callback) (int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); + void *msg_callback_arg; + + int verify_mode; + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + /* called 'verify_callback' in the SSL */ + int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx); + + /* Default generate session ID callback. */ + GEN_SESSION_CB generate_session_id; + + X509_VERIFY_PARAM *param; + +# if 0 + int purpose; /* Purpose setting */ + int trust; /* Trust setting */ +# endif + + int quiet_shutdown; + + /* + * Maximum amount of data to send in one fragment. actual record size can + * be more than this due to padding and MAC overheads. + */ + unsigned int max_send_fragment; + +# ifndef OPENSSL_NO_ENGINE + /* + * Engine to pass requests for client certs to + */ + ENGINE *client_cert_engine; +# endif + +# ifndef OPENSSL_NO_TLSEXT + /* TLS extensions servername callback */ + int (*tlsext_servername_callback) (SSL *, int *, void *); + void *tlsext_servername_arg; + /* RFC 4507 session ticket keys */ + unsigned char tlsext_tick_key_name[16]; + unsigned char tlsext_tick_hmac_key[16]; + unsigned char tlsext_tick_aes_key[16]; + /* Callback to support customisation of ticket key setting */ + int (*tlsext_ticket_key_cb) (SSL *ssl, + unsigned char *name, unsigned char *iv, + EVP_CIPHER_CTX *ectx, + HMAC_CTX *hctx, int enc); + + /* certificate status request info */ + /* Callback for status request */ + int (*tlsext_status_cb) (SSL *ssl, void *arg); + void *tlsext_status_arg; + + /* draft-rescorla-tls-opaque-prf-input-00.txt information */ + int (*tlsext_opaque_prf_input_callback) (SSL *, void *peerinput, + size_t len, void *arg); + void *tlsext_opaque_prf_input_callback_arg; +# endif + +# ifndef OPENSSL_NO_PSK + char *psk_identity_hint; + unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); + unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +# endif + +# ifndef OPENSSL_NO_BUF_FREELISTS +# define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 + unsigned int freelist_max_len; + struct ssl3_buf_freelist_st *wbuf_freelist; + struct ssl3_buf_freelist_st *rbuf_freelist; +# endif +# ifndef OPENSSL_NO_SRP + SRP_CTX srp_ctx; /* ctx for SRP authentication */ +# endif + +# ifndef OPENSSL_NO_TLSEXT + +# ifndef OPENSSL_NO_NEXTPROTONEG + /* Next protocol negotiation information */ + /* (for experimental NPN extension). */ + + /* + * For a server, this contains a callback function by which the set of + * advertised protocols can be provided. + */ + int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf, + unsigned int *len, void *arg); + void *next_protos_advertised_cb_arg; + /* + * For a client, this contains a callback function that selects the next + * protocol from the list provided by the server. + */ + int (*next_proto_select_cb) (SSL *s, unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, void *arg); + void *next_proto_select_cb_arg; +# endif + /* SRTP profiles we are willing to do from RFC 5764 */ + STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; + + /* + * ALPN information (we are in the process of transitioning from NPN to + * ALPN.) + */ + + /*- + * For a server, this contains a callback function that allows the + * server to select the protocol for the connection. + * out: on successful return, this must point to the raw protocol + * name (without the length prefix). + * outlen: on successful return, this contains the length of |*out|. + * in: points to the client's list of supported protocols in + * wire-format. + * inlen: the length of |in|. + */ + int (*alpn_select_cb) (SSL *s, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, void *arg); + void *alpn_select_cb_arg; + + /* + * For a client, this contains the list of supported protocols in wire + * format. + */ + unsigned char *alpn_client_proto_list; + unsigned alpn_client_proto_list_len; + +# ifndef OPENSSL_NO_EC + /* EC extension values inherited by SSL structure */ + size_t tlsext_ecpointformatlist_length; + unsigned char *tlsext_ecpointformatlist; + size_t tlsext_ellipticcurvelist_length; + unsigned char *tlsext_ellipticcurvelist; +# endif /* OPENSSL_NO_EC */ +# endif +}; + +# endif + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION + *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + unsigned char *Data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, + int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + int (*cb) (SSL *ssl, + const unsigned char + **out, + unsigned int *outlen, + void *arg), void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + int (*cb) (SSL *ssl, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg), void *arg); +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# endif + +# ifndef OPENSSL_NO_TLSEXT +int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); +# endif + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned protos_len); +int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned protos_len); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg), void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 128 +# define PSK_MAX_PSK_LEN 256 +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, + unsigned int (*psk_client_callback) (SSL + *ssl, + const + char + *hint, + char + *identity, + unsigned + int + max_identity_len, + unsigned + char + *psk, + unsigned + int + max_psk_len)); +void SSL_set_psk_client_callback(SSL *ssl, + unsigned int (*psk_client_callback) (SSL + *ssl, + const + char + *hint, + char + *identity, + unsigned + int + max_identity_len, + unsigned + char + *psk, + unsigned + int + max_psk_len)); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, + unsigned int (*psk_server_callback) (SSL + *ssl, + const + char + *identity, + unsigned + char + *psk, + unsigned + int + max_psk_len)); +void SSL_set_psk_server_callback(SSL *ssl, + unsigned int (*psk_server_callback) (SSL + *ssl, + const + char + *identity, + unsigned + char + *psk, + unsigned + int + max_psk_len)); +int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +# ifndef OPENSSL_NO_TLSEXT +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +int SSL_extension_supported(unsigned int ext_type); + +# endif + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +# ifndef OPENSSL_NO_SSL_INTERN + +struct ssl_st { + /* + * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, + * DTLS1_VERSION) + */ + int version; + /* SSL_ST_CONNECT or SSL_ST_ACCEPT */ + int type; + /* SSLv3 */ + const SSL_METHOD *method; + /* + * There are 2 BIO's even though they are normally both the same. This + * is so data can be read and written to different handlers + */ +# ifndef OPENSSL_NO_BIO + /* used by SSL_read */ + BIO *rbio; + /* used by SSL_write */ + BIO *wbio; + /* used during session-id reuse to concatenate messages */ + BIO *bbio; +# else + /* used by SSL_read */ + char *rbio; + /* used by SSL_write */ + char *wbio; + char *bbio; +# endif + /* + * This holds a variable that indicates what we were doing when a 0 or -1 + * is returned. This is needed for non-blocking IO so we know what + * request needs re-doing when in SSL_accept or SSL_connect + */ + int rwstate; + /* true when we are actually in SSL_accept() or SSL_connect() */ + int in_handshake; + int (*handshake_func) (SSL *); + /* + * Imagine that here's a boolean member "init" that is switched as soon + * as SSL_set_{accept/connect}_state is called for the first time, so + * that "state" and "handshake_func" are properly initialized. But as + * handshake_func is == 0 until then, we use this test instead of an + * "init" member. + */ + /* are we the server side? - mostly used by SSL_clear */ + int server; + /* + * Generate a new session or reuse an old one. + * NB: For servers, the 'new' session may actually be a previously + * cached session or even the previous session unless + * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set + */ + int new_session; + /* don't send shutdown packets */ + int quiet_shutdown; + /* we have shut things down, 0x01 sent, 0x02 for received */ + int shutdown; + /* where we are */ + int state; + /* where we are when reading */ + int rstate; + BUF_MEM *init_buf; /* buffer used during init */ + void *init_msg; /* pointer to handshake message body, set by + * ssl3_get_message() */ + int init_num; /* amount read/written */ + int init_off; /* amount read/written */ + /* used internally to point at a raw packet */ + unsigned char *packet; + unsigned int packet_length; + struct ssl2_state_st *s2; /* SSLv2 variables */ + struct ssl3_state_st *s3; /* SSLv3 variables */ + struct dtls1_state_st *d1; /* DTLSv1 variables */ + int read_ahead; /* Read as many input bytes as possible (for + * non-blocking reads) */ + /* callback that allows applications to peek at protocol messages */ + void (*msg_callback) (int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); + void *msg_callback_arg; + int hit; /* reusing a previous session */ + X509_VERIFY_PARAM *param; +# if 0 + int purpose; /* Purpose setting */ + int trust; /* Trust setting */ +# endif + /* crypto */ + STACK_OF(SSL_CIPHER) *cipher_list; + STACK_OF(SSL_CIPHER) *cipher_list_by_id; + /* + * These are the ones being used, the ones in SSL_SESSION are the ones to + * be 'copied' into these ones + */ + int mac_flags; + EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ + EVP_MD_CTX *read_hash; /* used for mac generation */ +# ifndef OPENSSL_NO_COMP + COMP_CTX *expand; /* uncompress */ +# else + char *expand; +# endif + EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ + EVP_MD_CTX *write_hash; /* used for mac generation */ +# ifndef OPENSSL_NO_COMP + COMP_CTX *compress; /* compression */ +# else + char *compress; +# endif + /* session info */ + /* client cert? */ + /* This is used to hold the server certificate used */ + struct cert_st /* CERT */ *cert; + /* + * the session_id_context is used to ensure sessions are only reused in + * the appropriate context + */ + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + /* This can also be in the session once a session is established */ + SSL_SESSION *session; + /* Default generate session ID callback. */ + GEN_SESSION_CB generate_session_id; + /* Used in SSL2 and SSL3 */ + /* + * 0 don't care about verify failure. + * 1 fail if verify fails + */ + int verify_mode; + /* fail if callback returns 0 */ + int (*verify_callback) (int ok, X509_STORE_CTX *ctx); + /* optional informational callback */ + void (*info_callback) (const SSL *ssl, int type, int val); + /* error bytes to be written */ + int error; + /* actual code */ + int error_code; +# ifndef OPENSSL_NO_KRB5 + /* Kerberos 5 context */ + KSSL_CTX *kssl_ctx; +# endif /* OPENSSL_NO_KRB5 */ +# ifndef OPENSSL_NO_PSK + unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); + unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +# endif + SSL_CTX *ctx; + /* + * set this flag to 1 and a sleep(1) is put into all SSL_read() and + * SSL_write() calls, good for nbio debuging :-) + */ + int debug; + /* extra application data */ + long verify_result; + CRYPTO_EX_DATA ex_data; + /* for server side, keep the list of CA_dn we can use */ + STACK_OF(X509_NAME) *client_CA; + int references; + /* protocol behaviour */ + unsigned long options; + /* API behaviour */ + unsigned long mode; + long max_cert_list; + int first_packet; + /* what was passed, used for SSLv3/TLS rollback check */ + int client_version; + unsigned int max_send_fragment; +# ifndef OPENSSL_NO_TLSEXT + /* TLS extension debug callback */ + void (*tlsext_debug_cb) (SSL *s, int client_server, int type, + unsigned char *data, int len, void *arg); + void *tlsext_debug_arg; + char *tlsext_hostname; + /*- + * no further mod of servername + * 0 : call the servername extension callback. + * 1 : prepare 2, allow last ack just after in server callback. + * 2 : don't call servername callback, no ack in server hello + */ + int servername_done; + /* certificate status request info */ + /* Status type or -1 if no status type */ + int tlsext_status_type; + /* Expect OCSP CertificateStatus message */ + int tlsext_status_expected; + /* OCSP status request only */ + STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids; + X509_EXTENSIONS *tlsext_ocsp_exts; + /* OCSP response received or to be sent */ + unsigned char *tlsext_ocsp_resp; + int tlsext_ocsp_resplen; + /* RFC4507 session ticket expected to be received or sent */ + int tlsext_ticket_expected; +# ifndef OPENSSL_NO_EC + size_t tlsext_ecpointformatlist_length; + /* our list */ + unsigned char *tlsext_ecpointformatlist; + size_t tlsext_ellipticcurvelist_length; + /* our list */ + unsigned char *tlsext_ellipticcurvelist; +# endif /* OPENSSL_NO_EC */ + /* + * draft-rescorla-tls-opaque-prf-input-00.txt information to be used for + * handshakes + */ + void *tlsext_opaque_prf_input; + size_t tlsext_opaque_prf_input_len; + /* TLS Session Ticket extension override */ + TLS_SESSION_TICKET_EXT *tlsext_session_ticket; + /* TLS Session Ticket extension callback */ + tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb; + void *tls_session_ticket_ext_cb_arg; + /* TLS pre-shared secret session resumption */ + tls_session_secret_cb_fn tls_session_secret_cb; + void *tls_session_secret_cb_arg; + SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */ +# ifndef OPENSSL_NO_NEXTPROTONEG + /* + * Next protocol negotiation. For the client, this is the protocol that + * we sent in NextProtocol and is set when handling ServerHello + * extensions. For a server, this is the client's selected_protocol from + * NextProtocol and is set when handling the NextProtocol message, before + * the Finished message. + */ + unsigned char *next_proto_negotiated; + unsigned char next_proto_negotiated_len; +# endif +# define session_ctx initial_ctx + /* What we'll do */ + STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; + /* What's been chosen */ + SRTP_PROTECTION_PROFILE *srtp_profile; + /*- + * Is use of the Heartbeat extension negotiated? + * 0: disabled + * 1: enabled + * 2: enabled, but not allowed to send Requests + */ + unsigned int tlsext_heartbeat; + /* Indicates if a HeartbeatRequest is in flight */ + unsigned int tlsext_hb_pending; + /* HeartbeatRequest sequence number */ + unsigned int tlsext_hb_seq; +# else +# define session_ctx ctx +# endif /* OPENSSL_NO_TLSEXT */ + /*- + * 1 if we are renegotiating. + * 2 if we are a server and are inside a handshake + * (i.e. not just sending a HelloRequest) + */ + int renegotiate; +# ifndef OPENSSL_NO_SRP + /* ctx for SRP authentication */ + SRP_CTX srp_ctx; +# endif +# ifndef OPENSSL_NO_TLSEXT + /* + * For a client, this contains the list of supported protocols in wire + * format. + */ + unsigned char *alpn_client_proto_list; + unsigned alpn_client_proto_list_len; +# endif /* OPENSSL_NO_TLSEXT */ +}; + +# endif + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg)) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a)) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg)) + +/* + * The following are the possible values for ssl->state are are used to + * indicate where we are up to in the SSL connection establishment. The + * macros that follow are about the only things you should need to use and + * even then, only when using non-blocking IO. It can also be useful to work + * out where you were when the connection failed + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 +# define SSL_ST_MASK 0x0FFF +# define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT) +# define SSL_ST_BEFORE 0x4000 +# define SSL_ST_OK 0x03 +# define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) +# define SSL_ST_ERR 0x05 + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_get_state(a) SSL_state(a) +# define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK) +# define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT) +# define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE) +# define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT) +# define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) + +/* + * The following 2 states are kept in ssl->rstate when reads fail, you should + * not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 + +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() + +/* this is for backward compatibility */ +# if 0 /* NEW_SSLEAY */ +# define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c) +# define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n) +# define SSL_add_session(a,b) SSL_CTX_add_session((a),(b)) +# define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b)) +# define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b)) +# endif +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_CTRL_NEED_TMP_RSA 1 +# define SSL_CTRL_SET_TMP_RSA 2 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_RSA_CB 5 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_CTRL_SET_TMP_ECDH_CB 7 +# define SSL_CTRL_GET_SESSION_REUSED 8 +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_OPTIONS 32 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# ifndef OPENSSL_NO_TLSEXT +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 +# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 +# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT 85 +# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86 +# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87 +# endif +# endif /* OPENSSL_NO_TLSEXT */ +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define DTLS_CTRL_LISTEN 75 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_OPTIONS 77 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_CURVES 90 +# define SSL_CTRL_SET_CURVES 91 +# define SSL_CTRL_SET_CURVES_LIST 92 +# define SSL_CTRL_GET_SHARED_CURVE 93 +# define SSL_CTRL_SET_ECDH_AUTO 94 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_SERVER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_CHECK_PROTO_VERSION 119 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define DTLSv1_listen(ssl, peer) \ + SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer) +# define SSL_session_reused(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# define SSL_CTX_need_tmp_RSA(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL) +# define SSL_CTX_set_tmp_rsa(ctx,rsa) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh) +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) +# define SSL_need_tmp_RSA(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL) +# define SSL_set_tmp_rsa(ssl,rsa) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) +# define SSL_set0_chain(ctx,sk) \ + SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) +# define SSL_set1_chain(ctx,sk) \ + SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) +# define SSL_add0_chain_cert(ctx,x509) \ + SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) +# define SSL_add1_chain_cert(ctx,x509) \ + SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) +# define SSL_get0_chain_certs(ctx,px509) \ + SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(ctx) \ + SSL_set0_chain(ctx,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(ctx,x509) \ + SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) +# define SSL_set_current_cert(ctx,op) \ + SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) +# define SSL_get1_curves(ctx, s) \ + SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s) +# define SSL_CTX_set1_curves(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) +# define SSL_CTX_set1_curves_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) +# define SSL_set1_curves(ctx, clist, clistlen) \ + SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) +# define SSL_set1_curves_list(ctx, s) \ + SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) +# define SSL_get_shared_curve(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL) +# define SSL_CTX_set_ecdh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) +# define SSL_set_ecdh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) +# define SSL_set1_sigalgs(ctx, slist, slistlen) \ + SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) +# define SSL_set1_sigalgs_list(ctx, s) \ + SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) +# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist) +# define SSL_set1_client_sigalgs_list(ctx, s) \ + SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_server_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst) +# ifndef OPENSSL_NO_BIO +BIO_METHOD *BIO_f_ssl(void); +BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +# endif + +int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +void SSL_CTX_free(SSL_CTX *); +long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +long SSL_CTX_get_timeout(const SSL_CTX *ctx); +X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +int SSL_want(const SSL *s); +int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c); + +int SSL_get_fd(const SSL *s); +int SSL_get_rfd(const SSL *s); +int SSL_get_wfd(const SSL *s); +const char *SSL_get_cipher_list(const SSL *s, int n); +char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); +int SSL_get_read_ahead(const SSL *s); +int SSL_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +int SSL_set_fd(SSL *s, int fd); +int SSL_set_rfd(SSL *s, int fd); +int SSL_set_wfd(SSL *s, int fd); +# endif +# ifndef OPENSSL_NO_BIO +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +BIO *SSL_get_rbio(const SSL *s); +BIO *SSL_get_wbio(const SSL *s); +# endif +int SSL_set_cipher_list(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +int SSL_get_verify_mode(const SSL *s); +int SSL_get_verify_depth(const SSL *s); +int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *); +void SSL_set_verify(SSL *s, int mode, + int (*callback) (int ok, X509_STORE_CTX *ctx)); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_RSA +int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +# endif +int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); +int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +int SSL_use_certificate(SSL *ssl, X509 *x); +int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); + +# ifndef OPENSSL_NO_TLSEXT +/* Set serverinfo data for the current active cert. */ +int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +# ifndef OPENSSL_NO_STDIO +int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); +# endif /* NO_STDIO */ + +# endif + +# ifndef OPENSSL_NO_STDIO +int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +int SSL_use_certificate_file(SSL *ssl, const char *file, int type); +int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +/* PEM type */ +int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +# ifndef OPENSSL_SYS_VMS +/* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */ +# ifndef OPENSSL_SYS_MACINTOSH_CLASSIC +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +# endif +# endif + +# endif + +void SSL_load_error_strings(void); +const char *SSL_state_string(const SSL *s); +const char *SSL_rstate_string(const SSL *s); +const char *SSL_state_string_long(const SSL *s); +const char *SSL_rstate_string_long(const SSL *s); +long SSL_SESSION_get_time(const SSL_SESSION *s); +long SSL_SESSION_set_time(SSL_SESSION *s, long t); +long SSL_SESSION_get_timeout(const SSL_SESSION *s); +long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +void SSL_copy_session_id(SSL *to, const SSL *from); +X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL_SESSION *SSL_SESSION_new(void); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_FP_API +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +# ifndef OPENSSL_NO_BIO +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +# endif +void SSL_SESSION_free(SSL_SESSION *ses); +int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); +int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); +int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); +int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); +int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef HEADER_X509_H +X509 *SSL_get_peer_certificate(const SSL *s); +# endif + +STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, + X509_STORE_CTX *); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, + int (*callback) (int, X509_STORE_CTX *)); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_RSA +int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +# endif +int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); + +int SSL_CTX_check_private_key(const SSL_CTX *ctx); +int SSL_check_private_key(const SSL *ctx); + +int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); +int SSL_set_purpose(SSL *s, int purpose); +int SSL_CTX_set_trust(SSL_CTX *s, int trust); +int SSL_set_trust(SSL *s, int trust); + +int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +BIGNUM *SSL_get_srp_g(SSL *s); +BIGNUM *SSL_get_srp_N(SSL *s); + +char *SSL_get_srp_username(SSL *s); +char *SSL_get_srp_userinfo(SSL *s); +# endif + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +int SSL_accept(SSL *ssl); +int SSL_connect(SSL *ssl); +int SSL_read(SSL *ssl, void *buf, int num); +int SSL_peek(SSL *ssl, void *buf, int num); +int SSL_write(SSL *ssl, const void *buf, int num); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +int SSL_get_error(const SSL *s, int ret_code); +const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +# ifndef OPENSSL_NO_SSL2_METHOD +const SSL_METHOD *SSLv2_method(void); /* SSLv2 */ +const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ +const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +const SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ +const SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ +# endif + +const SSL_METHOD *SSLv23_method(void); /* Negotiate highest available SSL/TLS + * version */ +const SSL_METHOD *SSLv23_server_method(void); /* Negotiate highest available + * SSL/TLS version */ +const SSL_METHOD *SSLv23_client_method(void); /* Negotiate highest available + * SSL/TLS version */ + +const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ +const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ + +const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +const SSL_METHOD *TLSv1_1_server_method(void); /* TLSv1.1 */ +const SSL_METHOD *TLSv1_1_client_method(void); /* TLSv1.1 */ + +const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +const SSL_METHOD *TLSv1_2_server_method(void); /* TLSv1.2 */ +const SSL_METHOD *TLSv1_2_client_method(void); /* TLSv1.2 */ + +const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ +const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */ + +const SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */ +const SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */ +const SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */ + +const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); + +int SSL_do_handshake(SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +int SSL_renegotiate_pending(SSL *s); +int SSL_shutdown(SSL *s); + +const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); +const SSL_METHOD *SSL_get_ssl_method(SSL *s); +int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +const char *SSL_alert_type_string_long(int value); +const char *SSL_alert_type_string(int value); +const char *SSL_alert_desc_string_long(int value); +const char *SSL_alert_desc_string(int value); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +int SSL_add_client_CA(SSL *ssl, X509 *x); +int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +long SSL_get_default_timeout(const SSL *s); + +int SSL_library_init(void); + +char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); + +SSL *SSL_dup(SSL *ssl); + +X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +int SSL_get_shutdown(const SSL *ssl); +int SSL_version(const SSL *ssl); +int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +SSL_SESSION *SSL_get_session(const SSL *ssl); +SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +int SSL_state(const SSL *ssl); +void SSL_set_state(SSL *ssl, int state); + +void SSL_set_verify_result(SSL *ssl, long v); +long SSL_get_verify_result(const SSL *ssl); + +int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); + +int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +int SSL_SESSION_get_ex_new_index(long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); + +int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); +int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); + +int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) + + /* NB: the keylength is only applicable when is_export is true */ +# ifndef OPENSSL_NO_RSA +void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, + RSA *(*cb) (SSL *ssl, int is_export, + int keylength)); + +void SSL_set_tmp_rsa_callback(SSL *ssl, + RSA *(*cb) (SSL *ssl, int is_export, + int keylength)); +# endif +# ifndef OPENSSL_NO_DH +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# ifndef OPENSSL_NO_ECDH +void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, + EC_KEY *(*ecdh) (SSL *ssl, int is_export, + int keylength)); +void SSL_set_tmp_ecdh_callback(SSL *ssl, + EC_KEY *(*ecdh) (SSL *ssl, int is_export, + int keylength)); +# endif + +const COMP_METHOD *SSL_get_current_compression(SSL *s); +const COMP_METHOD *SSL_get_current_expansion(SSL *s); +const char *SSL_COMP_get_name(const COMP_METHOD *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +void SSL_COMP_free_compression_methods(void); +int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); + +/* TLS extensions functions */ +int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn tls_session_secret_cb, + void *arg); + +void SSL_set_debug(SSL *s, int debug); +int SSL_cache_hit(SSL *s); +int SSL_is_server(SSL *s); + +SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); +int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +# endif + +# ifndef OPENSSL_NO_UNIT_TEST +const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_SSL_strings(void); + +/* Error codes for the SSL functions. */ + +/* Function codes. */ +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CLIENT_CERTIFICATE 100 +# define SSL_F_CLIENT_FINISHED 167 +# define SSL_F_CLIENT_HELLO 101 +# define SSL_F_CLIENT_MASTER_KEY 102 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_ACCEPT 246 +# define SSL_F_DTLS1_ADD_CERT_TO_BUF 295 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 316 +# define SSL_F_DTLS1_CLIENT_HELLO 248 +# define SSL_F_DTLS1_CONNECT 249 +# define SSL_F_DTLS1_ENC 250 +# define SSL_F_DTLS1_GET_HELLO_VERIFY 251 +# define SSL_F_DTLS1_GET_MESSAGE 252 +# define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT 253 +# define SSL_F_DTLS1_GET_RECORD 254 +# define SSL_F_DTLS1_HANDLE_TIMEOUT 297 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 +# define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 259 +# define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST 260 +# define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE 261 +# define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE 262 +# define SSL_F_DTLS1_SEND_CLIENT_VERIFY 263 +# define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST 264 +# define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE 265 +# define SSL_F_DTLS1_SEND_SERVER_HELLO 266 +# define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE 267 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_GET_CLIENT_FINISHED 105 +# define SSL_F_GET_CLIENT_HELLO 106 +# define SSL_F_GET_CLIENT_MASTER_KEY 107 +# define SSL_F_GET_SERVER_FINISHED 108 +# define SSL_F_GET_SERVER_HELLO 109 +# define SSL_F_GET_SERVER_STATIC_DH_KEY 340 +# define SSL_F_GET_SERVER_VERIFY 110 +# define SSL_F_I2D_SSL_SESSION 111 +# define SSL_F_READ_N 112 +# define SSL_F_REQUEST_CERTIFICATE 113 +# define SSL_F_SERVER_FINISH 239 +# define SSL_F_SERVER_HELLO 114 +# define SSL_F_SERVER_VERIFY 240 +# define SSL_F_SSL23_ACCEPT 115 +# define SSL_F_SSL23_CLIENT_HELLO 116 +# define SSL_F_SSL23_CONNECT 117 +# define SSL_F_SSL23_GET_CLIENT_HELLO 118 +# define SSL_F_SSL23_GET_SERVER_HELLO 119 +# define SSL_F_SSL23_PEEK 237 +# define SSL_F_SSL23_READ 120 +# define SSL_F_SSL23_WRITE 121 +# define SSL_F_SSL2_ACCEPT 122 +# define SSL_F_SSL2_CONNECT 123 +# define SSL_F_SSL2_ENC_INIT 124 +# define SSL_F_SSL2_GENERATE_KEY_MATERIAL 241 +# define SSL_F_SSL2_PEEK 234 +# define SSL_F_SSL2_READ 125 +# define SSL_F_SSL2_READ_INTERNAL 236 +# define SSL_F_SSL2_SET_CERTIFICATE 126 +# define SSL_F_SSL2_WRITE 127 +# define SSL_F_SSL3_ACCEPT 128 +# define SSL_F_SSL3_ADD_CERT_TO_BUF 296 +# define SSL_F_SSL3_CALLBACK_CTRL 233 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# define SSL_F_SSL3_CHECK_CLIENT_HELLO 304 +# define SSL_F_SSL3_CHECK_FINISHED 339 +# define SSL_F_SSL3_CLIENT_HELLO 131 +# define SSL_F_SSL3_CONNECT 132 +# define SSL_F_SSL3_CTRL 213 +# define SSL_F_SSL3_CTX_CTRL 133 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 +# define SSL_F_SSL3_ENC 134 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 +# define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 +# define SSL_F_SSL3_GET_CERT_STATUS 289 +# define SSL_F_SSL3_GET_CERT_VERIFY 136 +# define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137 +# define SSL_F_SSL3_GET_CLIENT_HELLO 138 +# define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139 +# define SSL_F_SSL3_GET_FINISHED 140 +# define SSL_F_SSL3_GET_KEY_EXCHANGE 141 +# define SSL_F_SSL3_GET_MESSAGE 142 +# define SSL_F_SSL3_GET_NEW_SESSION_TICKET 283 +# define SSL_F_SSL3_GET_NEXT_PROTO 306 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144 +# define SSL_F_SSL3_GET_SERVER_DONE 145 +# define SSL_F_SSL3_GET_SERVER_HELLO 146 +# define SSL_F_SSL3_HANDSHAKE_MAC 285 +# define SSL_F_SSL3_NEW_SESSION_TICKET 287 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_PEEK 235 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150 +# define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151 +# define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152 +# define SSL_F_SSL3_SEND_CLIENT_VERIFY 153 +# define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154 +# define SSL_F_SSL3_SEND_SERVER_HELLO 242 +# define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 +# define SSL_F_SSL3_SETUP_READ_BUFFER 156 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 +# define SSL_F_SSL3_WRITE_BYTES 158 +# define SSL_F_SSL3_WRITE_PENDING 159 +# define SSL_F_SSL_ADD_CERT_CHAIN 318 +# define SSL_F_SSL_ADD_CERT_TO_BUF 319 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 +# define SSL_F_SSL_BAD_METHOD 160 +# define SSL_F_SSL_BUILD_CERT_CHAIN 332 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 +# define SSL_F_SSL_CERT_DUP 221 +# define SSL_F_SSL_CERT_INST 222 +# define SSL_F_SSL_CERT_INSTANTIATE 214 +# define SSL_F_SSL_CERT_NEW 162 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 +# define SSL_F_SSL_CLEAR 164 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 +# define SSL_F_SSL_CONF_CMD 334 +# define SSL_F_SSL_CREATE_CIPHER_LIST 166 +# define SSL_F_SSL_CTRL 232 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 +# define SSL_F_SSL_CTX_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 +# define SSL_F_SSL_CTX_SET_PURPOSE 226 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +# define SSL_F_SSL_CTX_SET_TRUST 229 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE 220 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 +# define SSL_F_SSL_CTX_USE_SERVERINFO 336 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 +# define SSL_F_SSL_DO_HANDSHAKE 180 +# define SSL_F_SSL_GET_NEW_SESSION 181 +# define SSL_F_SSL_GET_PREV_SESSION 217 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 +# define SSL_F_SSL_GET_SERVER_SEND_CERT 182 +# define SSL_F_SSL_GET_SERVER_SEND_PKEY 317 +# define SSL_F_SSL_GET_SIGN_PKEY 183 +# define SSL_F_SSL_INIT_WBIO_BUFFER 184 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +# define SSL_F_SSL_NEW 186 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 +# define SSL_F_SSL_PEEK 270 +# define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT 281 +# define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT 282 +# define SSL_F_SSL_READ 223 +# define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187 +# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 +# define SSL_F_SSL_SESSION_DUP 348 +# define SSL_F_SSL_SESSION_NEW 189 +# define SSL_F_SSL_SESSION_PRINT_FP 190 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 +# define SSL_F_SSL_SESS_CERT_NEW 225 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# define SSL_F_SSL_SET_PURPOSE 227 +# define SSL_F_SSL_SET_RFD 194 +# define SSL_F_SSL_SET_SESSION 195 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 +# define SSL_F_SSL_SET_TRUST 228 +# define SSL_F_SSL_SET_WFD 196 +# define SSL_F_SSL_SHUTDOWN 224 +# define SSL_F_SSL_SRP_CTX_INIT 313 +# define SSL_F_SSL_UNDEFINED_CONST_FUNCTION 243 +# define SSL_F_SSL_UNDEFINED_FUNCTION 197 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 +# define SSL_F_SSL_USE_CERTIFICATE 198 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 +# define SSL_F_SSL_USE_PRIVATEKEY 201 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS1_CERT_VERIFY_MAC 286 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274 +# define SSL_F_TLS1_ENC 210 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# define SSL_F_TLS1_HEARTBEAT 315 +# define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275 +# define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276 +# define SSL_F_TLS1_PRF 284 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 +# define SSL_F_WRITE_PENDING 212 + +/* Reason codes. */ +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_BAD_ALERT_RECORD 101 +# define SSL_R_BAD_AUTHENTICATION_TYPE 102 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# define SSL_R_BAD_CHECKSUM 104 +# define SSL_R_BAD_DATA 390 +# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 +# define SSL_R_BAD_DECOMPRESSION 107 +# define SSL_R_BAD_DH_G_LENGTH 108 +# define SSL_R_BAD_DH_G_VALUE 375 +# define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 +# define SSL_R_BAD_DH_PUB_KEY_VALUE 393 +# define SSL_R_BAD_DH_P_LENGTH 110 +# define SSL_R_BAD_DH_P_VALUE 395 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_DSA_SIGNATURE 112 +# define SSL_R_BAD_ECC_CERT 304 +# define SSL_R_BAD_ECDSA_SIGNATURE 305 +# define SSL_R_BAD_ECPOINT 306 +# define SSL_R_BAD_HANDSHAKE_LENGTH 332 +# define SSL_R_BAD_HELLO_REQUEST 105 +# define SSL_R_BAD_LENGTH 271 +# define SSL_R_BAD_MAC_DECODE 113 +# define SSL_R_BAD_MAC_LENGTH 333 +# define SSL_R_BAD_MESSAGE_TYPE 114 +# define SSL_R_BAD_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 316 +# define SSL_R_BAD_RESPONSE_ARGUMENT 117 +# define SSL_R_BAD_RSA_DECRYPT 118 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_RSA_E_LENGTH 120 +# define SSL_R_BAD_RSA_MODULUS_LENGTH 121 +# define SSL_R_BAD_RSA_SIGNATURE 122 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_B_LENGTH 348 +# define SSL_R_BAD_SRP_G_LENGTH 349 +# define SSL_R_BAD_SRP_N_LENGTH 350 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# define SSL_R_BAD_SRP_S_LENGTH 351 +# define SSL_R_BAD_SRTP_MKI_VALUE 352 +# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 +# define SSL_R_BAD_SSL_FILETYPE 124 +# define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125 +# define SSL_R_BAD_STATE 126 +# define SSL_R_BAD_VALUE 384 +# define SSL_R_BAD_WRITE_RETRY 127 +# define SSL_R_BIO_NOT_SET 128 +# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 +# define SSL_R_BN_LIB 130 +# define SSL_R_CA_DN_LENGTH_MISMATCH 131 +# define SSL_R_CA_DN_TOO_LONG 132 +# define SSL_R_CCS_RECEIVED_EARLY 133 +# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 +# define SSL_R_CERT_CB_ERROR 377 +# define SSL_R_CERT_LENGTH_MISMATCH 135 +# define SSL_R_CHALLENGE_IS_DIFFERENT 136 +# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# define SSL_R_CIPHER_TABLE_SRC_ERROR 139 +# define SSL_R_CLIENTHELLO_TLSEXT 226 +# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 +# define SSL_R_COMPRESSION_DISABLED 343 +# define SSL_R_COMPRESSION_FAILURE 141 +# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 +# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 +# define SSL_R_CONNECTION_ID_IS_DIFFERENT 143 +# define SSL_R_CONNECTION_TYPE_NOT_SET 144 +# define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +# define SSL_R_DATA_LENGTH_TOO_LONG 146 +# define SSL_R_DECRYPTION_FAILED 147 +# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +# define SSL_R_DH_KEY_TOO_SMALL 372 +# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 +# define SSL_R_DIGEST_CHECK_FAILED 149 +# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 +# define SSL_R_DUPLICATE_COMPRESSION_ID 309 +# define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT 317 +# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 +# define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322 +# define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS 355 +# define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION 356 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_PADDING 283 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INVALID_CHALLENGE_LENGTH 158 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_PURPOSE 278 +# define SSL_R_INVALID_SERVERINFO_DATA 388 +# define SSL_R_INVALID_SRP_USERNAME 357 +# define SSL_R_INVALID_STATUS_RESPONSE 328 +# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_INVALID_TRUST 279 +# define SSL_R_KEY_ARG_TOO_LONG 284 +# define SSL_R_KRB5 285 +# define SSL_R_KRB5_C_CC_PRINC 286 +# define SSL_R_KRB5_C_GET_CRED 287 +# define SSL_R_KRB5_C_INIT 288 +# define SSL_R_KRB5_C_MK_REQ 289 +# define SSL_R_KRB5_S_BAD_TICKET 290 +# define SSL_R_KRB5_S_INIT 291 +# define SSL_R_KRB5_S_RD_REQ 292 +# define SSL_R_KRB5_S_TKT_EXPIRED 293 +# define SSL_R_KRB5_S_TKT_NYV 294 +# define SSL_R_KRB5_S_TKT_SKEW 295 +# define SSL_R_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MESSAGE_TOO_LONG 296 +# define SSL_R_MISSING_DH_DSA_CERT 162 +# define SSL_R_MISSING_DH_KEY 163 +# define SSL_R_MISSING_DH_RSA_CERT 164 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDH_CERT 382 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166 +# define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167 +# define SSL_R_MISSING_RSA_CERTIFICATE 168 +# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 +# define SSL_R_MISSING_RSA_SIGNING_CERT 170 +# define SSL_R_MISSING_SRP_PARAM 358 +# define SSL_R_MISSING_TMP_DH_KEY 171 +# define SSL_R_MISSING_TMP_ECDH_KEY 311 +# define SSL_R_MISSING_TMP_RSA_KEY 172 +# define SSL_R_MISSING_TMP_RSA_PKEY 173 +# define SSL_R_MISSING_VERIFY_MESSAGE 174 +# define SSL_R_MULTIPLE_SGC_RESTARTS 346 +# define SSL_R_NON_SSLV2_INITIAL_PACKET 175 +# define SSL_R_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_RETURNED 178 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CERTIFICATE_SPECIFIED 180 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_PASSED 182 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_LIST 184 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# define SSL_R_NO_CLIENT_CERT_RECEIVED 186 +# define SSL_R_NO_COMPRESSION_SPECIFIED 187 +# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 +# define SSL_R_NO_METHOD_SPECIFIED 188 +# define SSL_R_NO_PEM_EXTENSIONS 389 +# define SSL_R_NO_PRIVATEKEY 189 +# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# define SSL_R_NO_PUBLICKEY 192 +# define SSL_R_NO_RENEGOTIATION 339 +# define SSL_R_NO_REQUIRED_DIGEST 324 +# define SSL_R_NO_SHARED_CIPHER 193 +# define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_VERIFY_CALLBACK 194 +# define SSL_R_NULL_SSL_CTX 195 +# define SSL_R_NULL_SSL_METHOD_PASSED 196 +# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 +# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 +# define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 387 +# define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 379 +# define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 +# define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 +# define SSL_R_PACKET_LENGTH_TOO_LONG 198 +# define SSL_R_PARSE_TLSEXT 227 +# define SSL_R_PATH_TOO_LONG 270 +# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 +# define SSL_R_PEER_ERROR 200 +# define SSL_R_PEER_ERROR_CERTIFICATE 201 +# define SSL_R_PEER_ERROR_NO_CERTIFICATE 202 +# define SSL_R_PEER_ERROR_NO_CIPHER 203 +# define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204 +# define SSL_R_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205 +# define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206 +# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 +# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 +# define SSL_R_PSK_NO_CLIENT_CB 224 +# define SSL_R_PSK_NO_SERVER_CB 225 +# define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 208 +# define SSL_R_PUBLIC_KEY_IS_NOT_RSA 209 +# define SSL_R_PUBLIC_KEY_NOT_RSA 210 +# define SSL_R_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_READ_WRONG_PACKET_TYPE 212 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# define SSL_R_RECORD_TOO_LARGE 214 +# define SSL_R_RECORD_TOO_SMALL 298 +# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 +# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 +# define SSL_R_RENEGOTIATION_MISMATCH 337 +# define SSL_R_REQUIRED_CIPHER_MISSING 215 +# define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING 342 +# define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 216 +# define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 217 +# define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 218 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHORT_READ 219 +# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 +# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 +# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +# define SSL_R_SRP_A_CALC 361 +# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 +# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 +# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 +# define SSL_R_SSL23_DOING_SESSION_ID_REUSE 221 +# define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 299 +# define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 321 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 +# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 +# define SSL_R_SSL3_SESSION_ID_TOO_SHORT 222 +# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 +# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 +# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 +# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 +# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 +# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 +# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 +# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 +# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 +# define SSL_R_SSL_HANDSHAKE_FAILURE 229 +# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 +# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +# define SSL_R_SSL_SESSION_ID_CONFLICT 302 +# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 +# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 +# define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 231 +# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 +# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 +# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 +# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 +# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 +# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 +# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 +# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 +# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 +# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 +# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 +# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 +# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 +# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 +# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 +# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 +# define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 232 +# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 +# define SSL_R_TLS_HEARTBEAT_PENDING 366 +# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 +# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 +# define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 +# define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 +# define SSL_R_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 +# define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 +# define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 +# define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 237 +# define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 238 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# define SSL_R_UNABLE_TO_FIND_SSL_METHOD 240 +# define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 241 +# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 +# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 +# define SSL_R_UNEXPECTED_MESSAGE 244 +# define SSL_R_UNEXPECTED_RECORD 245 +# define SSL_R_UNINITIALIZED 276 +# define SSL_R_UNKNOWN_ALERT_TYPE 246 +# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 +# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 +# define SSL_R_UNKNOWN_CIPHER_TYPE 249 +# define SSL_R_UNKNOWN_CMD_NAME 386 +# define SSL_R_UNKNOWN_DIGEST 368 +# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 +# define SSL_R_UNKNOWN_PKEY_TYPE 251 +# define SSL_R_UNKNOWN_PROTOCOL 252 +# define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 253 +# define SSL_R_UNKNOWN_SSL_VERSION 254 +# define SSL_R_UNKNOWN_STATE 255 +# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +# define SSL_R_UNSUPPORTED_CIPHER 256 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# define SSL_R_UNSUPPORTED_DIGEST_TYPE 326 +# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 +# define SSL_R_UNSUPPORTED_PROTOCOL 258 +# define SSL_R_UNSUPPORTED_SSL_VERSION 259 +# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 +# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 +# define SSL_R_WRITE_BIO_NOT_SET 260 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# define SSL_R_WRONG_MESSAGE_TYPE 262 +# define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263 +# define SSL_R_WRONG_SIGNATURE_LENGTH 264 +# define SSL_R_WRONG_SIGNATURE_SIZE 265 +# define SSL_R_WRONG_SIGNATURE_TYPE 370 +# define SSL_R_WRONG_SSL_VERSION 266 +# define SSL_R_WRONG_VERSION_NUMBER 267 +# define SSL_R_X509_LIB 268 +# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ssl2.h b/src/components/openssl/ssl2.h new file mode 100644 index 0000000..03c7dd8 --- /dev/null +++ b/src/components/openssl/ssl2.h @@ -0,0 +1,265 @@ +/* ssl/ssl2.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SSL2_H +# define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Protocol Version Codes */ +# define SSL2_VERSION 0x0002 +# define SSL2_VERSION_MAJOR 0x00 +# define SSL2_VERSION_MINOR 0x02 +/* #define SSL2_CLIENT_VERSION 0x0002 */ +/* #define SSL2_SERVER_VERSION 0x0002 */ + +/* Protocol Message Codes */ +# define SSL2_MT_ERROR 0 +# define SSL2_MT_CLIENT_HELLO 1 +# define SSL2_MT_CLIENT_MASTER_KEY 2 +# define SSL2_MT_CLIENT_FINISHED 3 +# define SSL2_MT_SERVER_HELLO 4 +# define SSL2_MT_SERVER_VERIFY 5 +# define SSL2_MT_SERVER_FINISHED 6 +# define SSL2_MT_REQUEST_CERTIFICATE 7 +# define SSL2_MT_CLIENT_CERTIFICATE 8 + +/* Error Message Codes */ +# define SSL2_PE_UNDEFINED_ERROR 0x0000 +# define SSL2_PE_NO_CIPHER 0x0001 +# define SSL2_PE_NO_CERTIFICATE 0x0002 +# define SSL2_PE_BAD_CERTIFICATE 0x0004 +# define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 + +/* Cipher Kind Values */ +# define SSL2_CK_NULL_WITH_MD5 0x02000000/* v3 */ +# define SSL2_CK_RC4_128_WITH_MD5 0x02010080 +# define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080 +# define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080 +# define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080 +# define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080 +# define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040 +# define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140/* v3 */ +# define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0 +# define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0/* v3 */ +# define SSL2_CK_RC4_64_WITH_MD5 0x02080080/* MS hack */ + +# define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800/* SSLeay */ +# define SSL2_CK_NULL 0x02ff0810/* SSLeay */ + +# define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1" +# define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5" +# define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5" +# define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5" +# define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5" +# define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5" +# define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5" +# define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5" +# define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA" +# define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5" +# define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA" +# define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5" + +# define SSL2_TXT_NULL "NULL" + +/* Flags for the SSL_CIPHER.algorithm2 field */ +# define SSL2_CF_5_BYTE_ENC 0x01 +# define SSL2_CF_8_BYTE_ENC 0x02 + +/* Certificate Type Codes */ +# define SSL2_CT_X509_CERTIFICATE 0x01 + +/* Authentication Type Code */ +# define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01 + +# define SSL2_MAX_SSL_SESSION_ID_LENGTH 32 + +/* Upper/Lower Bounds */ +# define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256 +# ifdef OPENSSL_SYS_MPE +# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u +# else +# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u + /* 2^15-1 */ +# endif +# define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383/* 2^14-1 */ + +# define SSL2_CHALLENGE_LENGTH 16 +/* + * #define SSL2_CHALLENGE_LENGTH 32 + */ +# define SSL2_MIN_CHALLENGE_LENGTH 16 +# define SSL2_MAX_CHALLENGE_LENGTH 32 +# define SSL2_CONNECTION_ID_LENGTH 16 +# define SSL2_MAX_CONNECTION_ID_LENGTH 16 +# define SSL2_SSL_SESSION_ID_LENGTH 16 +# define SSL2_MAX_CERT_CHALLENGE_LENGTH 32 +# define SSL2_MIN_CERT_CHALLENGE_LENGTH 16 +# define SSL2_MAX_KEY_MATERIAL_LENGTH 24 + +# ifndef HEADER_SSL_LOCL_H +# define CERT char +# endif + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct ssl2_state_st { + int three_byte_header; + int clear_text; /* clear text */ + int escape; /* not used in SSLv2 */ + int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */ + /* + * non-blocking io info, used to make sure the same args were passwd + */ + unsigned int wnum; /* number of bytes sent so far */ + int wpend_tot; + const unsigned char *wpend_buf; + int wpend_off; /* offset to data to write */ + int wpend_len; /* number of bytes passwd to write */ + int wpend_ret; /* number of bytes to return to caller */ + /* buffer raw data */ + int rbuf_left; + int rbuf_offs; + unsigned char *rbuf; + unsigned char *wbuf; + unsigned char *write_ptr; /* used to point to the start due to 2/3 byte + * header. */ + unsigned int padding; + unsigned int rlength; /* passed to ssl2_enc */ + int ract_data_length; /* Set when things are encrypted. */ + unsigned int wlength; /* passed to ssl2_enc */ + int wact_data_length; /* Set when things are decrypted. */ + unsigned char *ract_data; + unsigned char *wact_data; + unsigned char *mac_data; + unsigned char *read_key; + unsigned char *write_key; + /* Stuff specifically to do with this SSL session */ + unsigned int challenge_length; + unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH]; + unsigned int conn_id_length; + unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH]; + unsigned int key_material_length; + unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2]; + unsigned long read_sequence; + unsigned long write_sequence; + struct { + unsigned int conn_id_length; + unsigned int cert_type; + unsigned int cert_length; + unsigned int csl; + unsigned int clear; + unsigned int enc; + unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH]; + unsigned int cipher_spec_length; + unsigned int session_id_length; + unsigned int clen; + unsigned int rlen; + } tmp; +} SSL2_STATE; + +# endif + +/* SSLv2 */ +/* client */ +# define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT) +# define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT) +# define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT) +/* server */ +# define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT) +# define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT) +# define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ssl23.h b/src/components/openssl/ssl23.h new file mode 100644 index 0000000..9de4685 --- /dev/null +++ b/src/components/openssl/ssl23.h @@ -0,0 +1,84 @@ +/* ssl/ssl23.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SSL23_H +# define HEADER_SSL23_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * client + */ +/* write to server */ +# define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) +# define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) +/* read from server */ +# define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) +# define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) + +/* server */ +/* read from client */ +# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) +# define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ssl3.h b/src/components/openssl/ssl3.h new file mode 100644 index 0000000..5a2ffb2 --- /dev/null +++ b/src/components/openssl/ssl3.h @@ -0,0 +1,774 @@ +/* ssl/ssl3.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2002 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). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECC cipher suite support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_SSL3_H +# define HEADER_SSL3_H + +# ifndef OPENSSL_NO_COMP +# include +# endif +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Signalling cipher suite value from RFC 5746 + * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) + */ +# define SSL3_CK_SCSV 0x030000FF + +/* + * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 + * (TLS_FALLBACK_SCSV) + */ +# define SSL3_CK_FALLBACK_SCSV 0x03005600 + +# define SSL3_CK_RSA_NULL_MD5 0x03000001 +# define SSL3_CK_RSA_NULL_SHA 0x03000002 +# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 +# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 +# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 +# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 +# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 +# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 +# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 +# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A + +# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B +# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C +# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D +# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E +# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F +# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 + +# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011 +# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA +# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012 +# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA +# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013 +# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA +# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014 +# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA +# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015 +# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA +# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016 +# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA + +# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 +# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 +# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 +# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A +# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B + +# if 0 +# define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C +# define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D +# if 0 /* Because it clashes with KRB5, is never + * used any more, and is safe to remove + * according to David Hopwood + * of the + * ietf-tls list */ +# define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E +# endif +# endif + +/* + * VRS Additional Kerberos5 entries + */ +# define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E +# define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F +# define SSL3_CK_KRB5_RC4_128_SHA 0x03000020 +# define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021 +# define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022 +# define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023 +# define SSL3_CK_KRB5_RC4_128_MD5 0x03000024 +# define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025 + +# define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026 +# define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027 +# define SSL3_CK_KRB5_RC4_40_SHA 0x03000028 +# define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029 +# define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A +# define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B + +# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" +# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" +# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" +# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" +# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" +# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" + +# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" + +/* + * This next block of six "EDH" labels is for backward compatibility with + * older versions of OpenSSL. New code should use the six "DHE" labels above + * instead: + */ +# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" +# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" +# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" + +# if 0 +# define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA" +# define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA" +# define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA" +# endif + +# define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA" +# define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA" +# define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA" +# define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA" +# define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5" +# define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5" +# define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5" +# define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5" + +# define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA" +# define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA" +# define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA" +# define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5" +# define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5" +# define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5" + +# define SSL3_SSL_SESSION_ID_LENGTH 32 +# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 + +# define SSL3_MASTER_SECRET_SIZE 48 +# define SSL3_RANDOM_SIZE 32 +# define SSL3_SESSION_ID_SIZE 32 +# define SSL3_RT_HEADER_LENGTH 5 + +# define SSL3_HM_HEADER_LENGTH 4 + +# ifndef SSL3_ALIGN_PAYLOAD + /* + * Some will argue that this increases memory footprint, but it's not + * actually true. Point is that malloc has to return at least 64-bit aligned + * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. + * Suggested pre-gaping simply moves these wasted bytes from the end of + * allocated region to its front, but makes data payload aligned, which + * improves performance:-) + */ +# define SSL3_ALIGN_PAYLOAD 8 +# else +# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 +# error "insane SSL3_ALIGN_PAYLOAD" +# undef SSL3_ALIGN_PAYLOAD +# endif +# endif + +/* + * This is the maximum MAC (digest) size used by the SSL library. Currently + * maximum of 20 is used by SHA1, but we reserve for future extension for + * 512-bit hashes. + */ + +# define SSL3_RT_MAX_MD_SIZE 64 + +/* + * Maximum block size used in all ciphersuites. Currently 16 for AES. + */ + +# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 + +# define SSL3_RT_MAX_EXTRA (16384) + +/* Maximum plaintext length: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_PLAIN_LENGTH 16384 +/* Maximum compression overhead: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 + +/* + * The standards give a maximum encryption overhead of 1024 bytes. In + * practice the value is lower than this. The overhead is the maximum number + * of padding bytes (256) plus the mac size. + */ +# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) + +/* + * OpenSSL currently only uses a padding length of at most one block so the + * send overhead is smaller. + */ + +# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ + (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) + +/* If compression isn't used don't include the compression overhead */ + +# ifdef OPENSSL_NO_COMP +# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH +# else +# define SSL3_RT_MAX_COMPRESSED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) +# endif +# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) +# define SSL3_RT_MAX_PACKET_SIZE \ + (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) + +# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" +# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" + +# define SSL3_VERSION 0x0300 +# define SSL3_VERSION_MAJOR 0x03 +# define SSL3_VERSION_MINOR 0x00 + +# define SSL3_RT_CHANGE_CIPHER_SPEC 20 +# define SSL3_RT_ALERT 21 +# define SSL3_RT_HANDSHAKE 22 +# define SSL3_RT_APPLICATION_DATA 23 +# define TLS1_RT_HEARTBEAT 24 + +/* Pseudo content types to indicate additional parameters */ +# define TLS1_RT_CRYPTO 0x1000 +# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) +# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) +# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) +# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) + +# define TLS1_RT_CRYPTO_READ 0x0000 +# define TLS1_RT_CRYPTO_WRITE 0x0100 +# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) +# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) +# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) +# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) + +/* Pseudo content type for SSL/TLS header info */ +# define SSL3_RT_HEADER 0x100 + +# define SSL3_AL_WARNING 1 +# define SSL3_AL_FATAL 2 + +# define SSL3_AD_CLOSE_NOTIFY 0 +# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ +# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ +# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ +# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ +# define SSL3_AD_NO_CERTIFICATE 41 +# define SSL3_AD_BAD_CERTIFICATE 42 +# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 +# define SSL3_AD_CERTIFICATE_REVOKED 44 +# define SSL3_AD_CERTIFICATE_EXPIRED 45 +# define SSL3_AD_CERTIFICATE_UNKNOWN 46 +# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ + +# define TLS1_HB_REQUEST 1 +# define TLS1_HB_RESPONSE 2 + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct ssl3_record_st { + /* type of record */ + /* + * r + */ int type; + /* How many bytes available */ + /* + * rw + */ unsigned int length; + /* read/write offset into 'buf' */ + /* + * r + */ unsigned int off; + /* pointer to the record data */ + /* + * rw + */ unsigned char *data; + /* where the decode bytes are */ + /* + * rw + */ unsigned char *input; + /* only used with decompression - malloc()ed */ + /* + * r + */ unsigned char *comp; + /* epoch number, needed by DTLS1 */ + /* + * r + */ unsigned long epoch; + /* sequence number, needed by DTLS1 */ + /* + * r + */ unsigned char seq_num[8]; +} SSL3_RECORD; + +typedef struct ssl3_buffer_st { + /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */ + unsigned char *buf; + /* buffer size */ + size_t len; + /* where to 'copy from' */ + int offset; + /* how many bytes left */ + int left; +} SSL3_BUFFER; + +# endif + +# define SSL3_CT_RSA_SIGN 1 +# define SSL3_CT_DSS_SIGN 2 +# define SSL3_CT_RSA_FIXED_DH 3 +# define SSL3_CT_DSS_FIXED_DH 4 +# define SSL3_CT_RSA_EPHEMERAL_DH 5 +# define SSL3_CT_DSS_EPHEMERAL_DH 6 +# define SSL3_CT_FORTEZZA_DMS 20 +/* + * SSL3_CT_NUMBER is used to size arrays and it must be large enough to + * contain all of the cert types defined either for SSLv3 and TLSv1. + */ +# define SSL3_CT_NUMBER 9 + +# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 +# define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 +# define SSL3_FLAGS_POP_BUFFER 0x0004 +# define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 +# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 +# define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 +/* + * Set when the handshake is ready to process peer's ChangeCipherSpec message. + * Cleared after the message has been processed. + */ +# define SSL3_FLAGS_CCS_OK 0x0080 + +/* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */ +# define SSL3_FLAGS_SGC_RESTART_DONE 0x0040 + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct ssl3_state_st { + long flags; + int delay_buf_pop_ret; + unsigned char read_sequence[8]; + int read_mac_secret_size; + unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; + unsigned char write_sequence[8]; + int write_mac_secret_size; + unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; + unsigned char server_random[SSL3_RANDOM_SIZE]; + unsigned char client_random[SSL3_RANDOM_SIZE]; + /* flags for countermeasure against known-IV weakness */ + int need_empty_fragments; + int empty_fragment_done; + /* The value of 'extra' when the buffers were initialized */ + int init_extra; + SSL3_BUFFER rbuf; /* read IO goes into here */ + SSL3_BUFFER wbuf; /* write IO goes into here */ + SSL3_RECORD rrec; /* each decoded record goes in here */ + SSL3_RECORD wrec; /* goes out from here */ + /* + * storage for Alert/Handshake protocol data received but not yet + * processed by ssl3_read_bytes: + */ + unsigned char alert_fragment[2]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[4]; + unsigned int handshake_fragment_len; + /* partial write - check the numbers match */ + unsigned int wnum; /* number of bytes sent so far */ + int wpend_tot; /* number bytes written */ + int wpend_type; + int wpend_ret; /* number of bytes submitted */ + const unsigned char *wpend_buf; + /* used during startup, digest all incoming/outgoing packets */ + BIO *handshake_buffer; + /* + * When set of handshake digests is determined, buffer is hashed and + * freed and MD_CTX-es for all required digests are stored in this array + */ + EVP_MD_CTX **handshake_dgst; + /* + * Set whenever an expected ChangeCipherSpec message is processed. + * Unset when the peer's Finished message is received. + * Unexpected ChangeCipherSpec messages trigger a fatal alert. + */ + int change_cipher_spec; + int warn_alert; + int fatal_alert; + /* + * we allow one fatal and one warning alert to be outstanding, send close + * alert via the warning alert + */ + int alert_dispatch; + unsigned char send_alert[2]; + /* + * This flag is set when we should renegotiate ASAP, basically when there + * is no more data in the read or write buffers + */ + int renegotiate; + int total_renegotiations; + int num_renegotiations; + int in_read_app_data; + /* + * Opaque PRF input as used for the current handshake. These fields are + * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they + * are merely present to improve binary compatibility) + */ + void *client_opaque_prf_input; + size_t client_opaque_prf_input_len; + void *server_opaque_prf_input; + size_t server_opaque_prf_input_len; + struct { + /* actually only needs to be 16+20 */ + unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2]; + /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ + unsigned char finish_md[EVP_MAX_MD_SIZE * 2]; + int finish_md_len; + unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2]; + int peer_finish_md_len; + unsigned long message_size; + int message_type; + /* used to hold the new cipher we are going to use */ + const SSL_CIPHER *new_cipher; +# ifndef OPENSSL_NO_DH + DH *dh; +# endif +# ifndef OPENSSL_NO_ECDH + EC_KEY *ecdh; /* holds short lived ECDH key */ +# endif + /* used when SSL_ST_FLUSH_DATA is entered */ + int next_state; + int reuse_message; + /* used for certificate requests */ + int cert_req; + int ctype_num; + char ctype[SSL3_CT_NUMBER]; + STACK_OF(X509_NAME) *ca_names; + int use_rsa_tmp; + int key_block_length; + unsigned char *key_block; + const EVP_CIPHER *new_sym_enc; + const EVP_MD *new_hash; + int new_mac_pkey_type; + int new_mac_secret_size; +# ifndef OPENSSL_NO_COMP + const SSL_COMP *new_compression; +# else + char *new_compression; +# endif + int cert_request; + } tmp; + + /* Connection binding to prevent renegotiation attacks */ + unsigned char previous_client_finished[EVP_MAX_MD_SIZE]; + unsigned char previous_client_finished_len; + unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; + unsigned char previous_server_finished_len; + int send_connection_binding; /* TODOEKR */ + +# ifndef OPENSSL_NO_NEXTPROTONEG + /* + * Set if we saw the Next Protocol Negotiation extension from our peer. + */ + int next_proto_neg_seen; +# endif + +# ifndef OPENSSL_NO_TLSEXT +# ifndef OPENSSL_NO_EC + /* + * This is set to true if we believe that this is a version of Safari + * running on OS X 10.6 or newer. We wish to know this because Safari on + * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. + */ + char is_probably_safari; +# endif /* !OPENSSL_NO_EC */ + + /* + * ALPN information (we are in the process of transitioning from NPN to + * ALPN.) + */ + + /* + * In a server these point to the selected ALPN protocol after the + * ClientHello has been processed. In a client these contain the protocol + * that the server selected once the ServerHello has been processed. + */ + unsigned char *alpn_selected; + unsigned alpn_selected_len; +# endif /* OPENSSL_NO_TLSEXT */ +} SSL3_STATE; + +# endif + +/* SSLv3 */ +/* + * client + */ +/* extra state */ +# define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT) +# ifndef OPENSSL_NO_SCTP +# define DTLS1_SCTP_ST_CW_WRITE_SOCK (0x310|SSL_ST_CONNECT) +# define DTLS1_SCTP_ST_CR_READ_SOCK (0x320|SSL_ST_CONNECT) +# endif +/* write to server */ +# define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT) +# define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT) +/* read from server */ +# define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT) +# define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT) +# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT) +# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT) +# define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT) +# define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT) +# define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT) +# define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT) +/* write to server */ +# define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT) +# define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT) +# define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) +# define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) +# define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) +# define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) +# endif +# define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) +# define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) +/* read from server */ +# define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT) +# define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT) +# define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT) +# define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT) +# define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT) +# define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT) + +/* server */ +/* extra state */ +# define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT) +# ifndef OPENSSL_NO_SCTP +# define DTLS1_SCTP_ST_SW_WRITE_SOCK (0x310|SSL_ST_ACCEPT) +# define DTLS1_SCTP_ST_SR_READ_SOCK (0x320|SSL_ST_ACCEPT) +# endif +/* read from client */ +/* Do not change the number values, they do matter */ +# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT) +/* write to client */ +# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT) +# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT) +# define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT) +# define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT) +# define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT) +# define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT) +# define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT) +/* read from client */ +# define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT) +# define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT) +# define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) +# define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) +# endif +# define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) +# define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) +/* write to client */ +# define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT) +# define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT) +# define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT) + +# define SSL3_MT_HELLO_REQUEST 0 +# define SSL3_MT_CLIENT_HELLO 1 +# define SSL3_MT_SERVER_HELLO 2 +# define SSL3_MT_NEWSESSION_TICKET 4 +# define SSL3_MT_CERTIFICATE 11 +# define SSL3_MT_SERVER_KEY_EXCHANGE 12 +# define SSL3_MT_CERTIFICATE_REQUEST 13 +# define SSL3_MT_SERVER_DONE 14 +# define SSL3_MT_CERTIFICATE_VERIFY 15 +# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 +# define SSL3_MT_FINISHED 20 +# define SSL3_MT_CERTIFICATE_STATUS 22 +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_MT_NEXT_PROTO 67 +# endif +# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 + +# define SSL3_MT_CCS 1 + +/* These are used when changing over to a new cipher */ +# define SSL3_CC_READ 0x01 +# define SSL3_CC_WRITE 0x02 +# define SSL3_CC_CLIENT 0x10 +# define SSL3_CC_SERVER 0x20 +# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) +# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) +# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) +# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/stack.h b/src/components/openssl/stack.h new file mode 100644 index 0000000..eb07216 --- /dev/null +++ b/src/components/openssl/stack.h @@ -0,0 +1,107 @@ +/* crypto/stack/stack.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_STACK_H +# define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st { + int num; + char **data; + int sorted; + int num_alloc; + int (*comp) (const void *, const void *); +} _STACK; /* Use STACK_OF(...) instead */ + +# define M_sk_num(sk) ((sk) ? (sk)->num:-1) +# define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) + +int sk_num(const _STACK *); +void *sk_value(const _STACK *, int); + +void *sk_set(_STACK *, int, void *); + +_STACK *sk_new(int (*cmp) (const void *, const void *)); +_STACK *sk_new_null(void); +void sk_free(_STACK *); +void sk_pop_free(_STACK *st, void (*func) (void *)); +_STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *)); +int sk_insert(_STACK *sk, void *data, int where); +void *sk_delete(_STACK *st, int loc); +void *sk_delete_ptr(_STACK *st, void *p); +int sk_find(_STACK *st, void *data); +int sk_find_ex(_STACK *st, void *data); +int sk_push(_STACK *st, void *data); +int sk_unshift(_STACK *st, void *data); +void *sk_shift(_STACK *st); +void *sk_pop(_STACK *st); +void sk_zero(_STACK *st); +int (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *))) + (const void *, const void *); +_STACK *sk_dup(_STACK *st); +void sk_sort(_STACK *st); +int sk_is_sorted(const _STACK *st); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/symhacks.h b/src/components/openssl/symhacks.h new file mode 100644 index 0000000..e0613ee --- /dev/null +++ b/src/components/openssl/symhacks.h @@ -0,0 +1,516 @@ +/* ==================================================================== + * Copyright (c) 1999 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_SYMHACKS_H +# define HEADER_SYMHACKS_H + +# include + +/* + * Hacks to solve the problem with linkers incapable of handling very long + * symbol names. In the case of VMS, the limit is 31 characters on VMS for + * VAX. + */ +/* + * Note that this affects util/libeay.num and util/ssleay.num... you may + * change those manually, but that's not recommended, as those files are + * controlled centrally and updated on Unix, and the central definition may + * disagree with yours, which in turn may come with shareable library + * incompatibilities. + */ +# ifdef OPENSSL_SYS_VMS + +/* Hack a long name in crypto/ex_data.c */ +# undef CRYPTO_get_ex_data_implementation +# define CRYPTO_get_ex_data_implementation CRYPTO_get_ex_data_impl +# undef CRYPTO_set_ex_data_implementation +# define CRYPTO_set_ex_data_implementation CRYPTO_set_ex_data_impl + +/* Hack a long name in crypto/asn1/a_mbstr.c */ +# undef ASN1_STRING_set_default_mask_asc +# define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc + +# if 0 /* No longer needed, since safestack macro + * magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */ +# undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO +# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF +# undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO +# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF +# endif + +# if 0 /* No longer needed, since safestack macro + * magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */ +# undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO +# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECINF +# undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO +# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECINF +# endif + +# if 0 /* No longer needed, since safestack macro + * magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */ +# undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION +# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION i2d_ASN1_SET_OF_ACC_DESC +# undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION +# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION d2i_ASN1_SET_OF_ACC_DESC +# endif + +/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */ +# undef PEM_read_NETSCAPE_CERT_SEQUENCE +# define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ +# undef PEM_write_NETSCAPE_CERT_SEQUENCE +# define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ +# undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE +# define PEM_read_bio_NETSCAPE_CERT_SEQUENCE PEM_read_bio_NS_CERT_SEQ +# undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE +# define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ +# undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE +# define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ + +/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */ +# undef PEM_read_PKCS8_PRIV_KEY_INFO +# define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO +# undef PEM_write_PKCS8_PRIV_KEY_INFO +# define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO +# undef PEM_read_bio_PKCS8_PRIV_KEY_INFO +# define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO +# undef PEM_write_bio_PKCS8_PRIV_KEY_INFO +# define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO +# undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO +# define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO PEM_wrt_cb_bio_P8_PRIV_KEY_INFO + +/* Hack other PEM names */ +# undef PEM_write_bio_PKCS8PrivateKey_nid +# define PEM_write_bio_PKCS8PrivateKey_nid PEM_write_bio_PKCS8PrivKey_nid + +/* Hack some long X509 names */ +# undef X509_REVOKED_get_ext_by_critical +# define X509_REVOKED_get_ext_by_critical X509_REVOKED_get_ext_by_critic +# undef X509_policy_tree_get0_user_policies +# define X509_policy_tree_get0_user_policies X509_pcy_tree_get0_usr_policies +# undef X509_policy_node_get0_qualifiers +# define X509_policy_node_get0_qualifiers X509_pcy_node_get0_qualifiers +# undef X509_STORE_CTX_get_explicit_policy +# define X509_STORE_CTX_get_explicit_policy X509_STORE_CTX_get_expl_policy +# undef X509_STORE_CTX_get0_current_issuer +# define X509_STORE_CTX_get0_current_issuer X509_STORE_CTX_get0_cur_issuer + +/* Hack some long CRYPTO names */ +# undef CRYPTO_set_dynlock_destroy_callback +# define CRYPTO_set_dynlock_destroy_callback CRYPTO_set_dynlock_destroy_cb +# undef CRYPTO_set_dynlock_create_callback +# define CRYPTO_set_dynlock_create_callback CRYPTO_set_dynlock_create_cb +# undef CRYPTO_set_dynlock_lock_callback +# define CRYPTO_set_dynlock_lock_callback CRYPTO_set_dynlock_lock_cb +# undef CRYPTO_get_dynlock_lock_callback +# define CRYPTO_get_dynlock_lock_callback CRYPTO_get_dynlock_lock_cb +# undef CRYPTO_get_dynlock_destroy_callback +# define CRYPTO_get_dynlock_destroy_callback CRYPTO_get_dynlock_destroy_cb +# undef CRYPTO_get_dynlock_create_callback +# define CRYPTO_get_dynlock_create_callback CRYPTO_get_dynlock_create_cb +# undef CRYPTO_set_locked_mem_ex_functions +# define CRYPTO_set_locked_mem_ex_functions CRYPTO_set_locked_mem_ex_funcs +# undef CRYPTO_get_locked_mem_ex_functions +# define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs + +/* Hack some long SSL/TLS names */ +# undef SSL_CTX_set_default_verify_paths +# define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths +# undef SSL_get_ex_data_X509_STORE_CTX_idx +# define SSL_get_ex_data_X509_STORE_CTX_idx SSL_get_ex_d_X509_STORE_CTX_idx +# undef SSL_add_file_cert_subjects_to_stack +# define SSL_add_file_cert_subjects_to_stack SSL_add_file_cert_subjs_to_stk +# undef SSL_add_dir_cert_subjects_to_stack +# define SSL_add_dir_cert_subjects_to_stack SSL_add_dir_cert_subjs_to_stk +# undef SSL_CTX_use_certificate_chain_file +# define SSL_CTX_use_certificate_chain_file SSL_CTX_use_cert_chain_file +# undef SSL_CTX_set_cert_verify_callback +# define SSL_CTX_set_cert_verify_callback SSL_CTX_set_cert_verify_cb +# undef SSL_CTX_set_default_passwd_cb_userdata +# define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud +# undef SSL_COMP_get_compression_methods +# define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods +# undef SSL_COMP_set0_compression_methods +# define SSL_COMP_set0_compression_methods SSL_COMP_set0_compress_methods +# undef SSL_COMP_free_compression_methods +# define SSL_COMP_free_compression_methods SSL_COMP_free_compress_methods +# undef ssl_add_clienthello_renegotiate_ext +# define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext +# undef ssl_add_serverhello_renegotiate_ext +# define ssl_add_serverhello_renegotiate_ext ssl_add_serverhello_reneg_ext +# undef ssl_parse_clienthello_renegotiate_ext +# define ssl_parse_clienthello_renegotiate_ext ssl_parse_clienthello_reneg_ext +# undef ssl_parse_serverhello_renegotiate_ext +# define ssl_parse_serverhello_renegotiate_ext ssl_parse_serverhello_reneg_ext +# undef SSL_srp_server_param_with_username +# define SSL_srp_server_param_with_username SSL_srp_server_param_with_un +# undef SSL_CTX_set_srp_client_pwd_callback +# define SSL_CTX_set_srp_client_pwd_callback SSL_CTX_set_srp_client_pwd_cb +# undef SSL_CTX_set_srp_verify_param_callback +# define SSL_CTX_set_srp_verify_param_callback SSL_CTX_set_srp_vfy_param_cb +# undef SSL_CTX_set_srp_username_callback +# define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb +# undef ssl_add_clienthello_use_srtp_ext +# define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext +# undef ssl_add_serverhello_use_srtp_ext +# define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext +# undef ssl_parse_clienthello_use_srtp_ext +# define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext +# undef ssl_parse_serverhello_use_srtp_ext +# define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext +# undef SSL_CTX_set_next_protos_advertised_cb +# define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb +# undef SSL_CTX_set_next_proto_select_cb +# define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb + +# undef tls1_send_server_supplemental_data +# define tls1_send_server_supplemental_data tls1_send_server_suppl_data +# undef tls1_send_client_supplemental_data +# define tls1_send_client_supplemental_data tls1_send_client_suppl_data +# undef tls1_get_server_supplemental_data +# define tls1_get_server_supplemental_data tls1_get_server_suppl_data +# undef tls1_get_client_supplemental_data +# define tls1_get_client_supplemental_data tls1_get_client_suppl_data + +# undef ssl3_cbc_record_digest_supported +# define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support +# undef ssl_check_clienthello_tlsext_late +# define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late +# undef ssl_check_clienthello_tlsext_early +# define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early + +/* Hack some RSA long names */ +# undef RSA_padding_check_PKCS1_OAEP_mgf1 +# define RSA_padding_check_PKCS1_OAEP_mgf1 RSA_pad_check_PKCS1_OAEP_mgf1 + +/* Hack some ENGINE long names */ +# undef ENGINE_get_default_BN_mod_exp_crt +# define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt +# undef ENGINE_set_default_BN_mod_exp_crt +# define ENGINE_set_default_BN_mod_exp_crt ENGINE_set_def_BN_mod_exp_crt +# undef ENGINE_set_load_privkey_function +# define ENGINE_set_load_privkey_function ENGINE_set_load_privkey_fn +# undef ENGINE_get_load_privkey_function +# define ENGINE_get_load_privkey_function ENGINE_get_load_privkey_fn +# undef ENGINE_unregister_pkey_asn1_meths +# define ENGINE_unregister_pkey_asn1_meths ENGINE_unreg_pkey_asn1_meths +# undef ENGINE_register_all_pkey_asn1_meths +# define ENGINE_register_all_pkey_asn1_meths ENGINE_reg_all_pkey_asn1_meths +# undef ENGINE_set_default_pkey_asn1_meths +# define ENGINE_set_default_pkey_asn1_meths ENGINE_set_def_pkey_asn1_meths +# undef ENGINE_get_pkey_asn1_meth_engine +# define ENGINE_get_pkey_asn1_meth_engine ENGINE_get_pkey_asn1_meth_eng +# undef ENGINE_set_load_ssl_client_cert_function +# define ENGINE_set_load_ssl_client_cert_function \ + ENGINE_set_ld_ssl_clnt_cert_fn +# undef ENGINE_get_ssl_client_cert_function +# define ENGINE_get_ssl_client_cert_function ENGINE_get_ssl_client_cert_fn + +/* Hack some long OCSP names */ +# undef OCSP_REQUEST_get_ext_by_critical +# define OCSP_REQUEST_get_ext_by_critical OCSP_REQUEST_get_ext_by_crit +# undef OCSP_BASICRESP_get_ext_by_critical +# define OCSP_BASICRESP_get_ext_by_critical OCSP_BASICRESP_get_ext_by_crit +# undef OCSP_SINGLERESP_get_ext_by_critical +# define OCSP_SINGLERESP_get_ext_by_critical OCSP_SINGLERESP_get_ext_by_crit + +/* Hack some long DES names */ +# undef _ossl_old_des_ede3_cfb64_encrypt +# define _ossl_old_des_ede3_cfb64_encrypt _ossl_odes_ede3_cfb64_encrypt +# undef _ossl_old_des_ede3_ofb64_encrypt +# define _ossl_old_des_ede3_ofb64_encrypt _ossl_odes_ede3_ofb64_encrypt + +/* Hack some long EVP names */ +# undef OPENSSL_add_all_algorithms_noconf +# define OPENSSL_add_all_algorithms_noconf OPENSSL_add_all_algo_noconf +# undef OPENSSL_add_all_algorithms_conf +# define OPENSSL_add_all_algorithms_conf OPENSSL_add_all_algo_conf +# undef EVP_PKEY_meth_set_verify_recover +# define EVP_PKEY_meth_set_verify_recover EVP_PKEY_meth_set_vrfy_recover + +/* Hack some long EC names */ +# undef EC_GROUP_set_point_conversion_form +# define EC_GROUP_set_point_conversion_form EC_GROUP_set_point_conv_form +# undef EC_GROUP_get_point_conversion_form +# define EC_GROUP_get_point_conversion_form EC_GROUP_get_point_conv_form +# undef EC_GROUP_clear_free_all_extra_data +# define EC_GROUP_clear_free_all_extra_data EC_GROUP_clr_free_all_xtra_data +# undef EC_KEY_set_public_key_affine_coordinates +# define EC_KEY_set_public_key_affine_coordinates \ + EC_KEY_set_pub_key_aff_coords +# undef EC_POINT_set_Jprojective_coordinates_GFp +# define EC_POINT_set_Jprojective_coordinates_GFp \ + EC_POINT_set_Jproj_coords_GFp +# undef EC_POINT_get_Jprojective_coordinates_GFp +# define EC_POINT_get_Jprojective_coordinates_GFp \ + EC_POINT_get_Jproj_coords_GFp +# undef EC_POINT_set_affine_coordinates_GFp +# define EC_POINT_set_affine_coordinates_GFp EC_POINT_set_affine_coords_GFp +# undef EC_POINT_get_affine_coordinates_GFp +# define EC_POINT_get_affine_coordinates_GFp EC_POINT_get_affine_coords_GFp +# undef EC_POINT_set_compressed_coordinates_GFp +# define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp +# undef EC_POINT_set_affine_coordinates_GF2m +# define EC_POINT_set_affine_coordinates_GF2m EC_POINT_set_affine_coords_GF2m +# undef EC_POINT_get_affine_coordinates_GF2m +# define EC_POINT_get_affine_coordinates_GF2m EC_POINT_get_affine_coords_GF2m +# undef EC_POINT_set_compressed_coordinates_GF2m +# define EC_POINT_set_compressed_coordinates_GF2m \ + EC_POINT_set_compr_coords_GF2m +# undef ec_GF2m_simple_group_clear_finish +# define ec_GF2m_simple_group_clear_finish ec_GF2m_simple_grp_clr_finish +# undef ec_GF2m_simple_group_check_discriminant +# define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim +# undef ec_GF2m_simple_point_clear_finish +# define ec_GF2m_simple_point_clear_finish ec_GF2m_simple_pt_clr_finish +# undef ec_GF2m_simple_point_set_to_infinity +# define ec_GF2m_simple_point_set_to_infinity ec_GF2m_simple_pt_set_to_inf +# undef ec_GF2m_simple_points_make_affine +# define ec_GF2m_simple_points_make_affine ec_GF2m_simple_pts_make_affine +# undef ec_GF2m_simple_point_set_affine_coordinates +# define ec_GF2m_simple_point_set_affine_coordinates \ + ec_GF2m_smp_pt_set_af_coords +# undef ec_GF2m_simple_point_get_affine_coordinates +# define ec_GF2m_simple_point_get_affine_coordinates \ + ec_GF2m_smp_pt_get_af_coords +# undef ec_GF2m_simple_set_compressed_coordinates +# define ec_GF2m_simple_set_compressed_coordinates \ + ec_GF2m_smp_set_compr_coords +# undef ec_GFp_simple_group_set_curve_GFp +# define ec_GFp_simple_group_set_curve_GFp ec_GFp_simple_grp_set_curve_GFp +# undef ec_GFp_simple_group_get_curve_GFp +# define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp +# undef ec_GFp_simple_group_clear_finish +# define ec_GFp_simple_group_clear_finish ec_GFp_simple_grp_clear_finish +# undef ec_GFp_simple_group_set_generator +# define ec_GFp_simple_group_set_generator ec_GFp_simple_grp_set_generator +# undef ec_GFp_simple_group_get0_generator +# define ec_GFp_simple_group_get0_generator ec_GFp_simple_grp_gt0_generator +# undef ec_GFp_simple_group_get_cofactor +# define ec_GFp_simple_group_get_cofactor ec_GFp_simple_grp_get_cofactor +# undef ec_GFp_simple_point_clear_finish +# define ec_GFp_simple_point_clear_finish ec_GFp_simple_pt_clear_finish +# undef ec_GFp_simple_point_set_to_infinity +# define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf +# undef ec_GFp_simple_points_make_affine +# define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine +# undef ec_GFp_simple_set_Jprojective_coordinates_GFp +# define ec_GFp_simple_set_Jprojective_coordinates_GFp \ + ec_GFp_smp_set_Jproj_coords_GFp +# undef ec_GFp_simple_get_Jprojective_coordinates_GFp +# define ec_GFp_simple_get_Jprojective_coordinates_GFp \ + ec_GFp_smp_get_Jproj_coords_GFp +# undef ec_GFp_simple_point_set_affine_coordinates_GFp +# define ec_GFp_simple_point_set_affine_coordinates_GFp \ + ec_GFp_smp_pt_set_af_coords_GFp +# undef ec_GFp_simple_point_get_affine_coordinates_GFp +# define ec_GFp_simple_point_get_affine_coordinates_GFp \ + ec_GFp_smp_pt_get_af_coords_GFp +# undef ec_GFp_simple_set_compressed_coordinates_GFp +# define ec_GFp_simple_set_compressed_coordinates_GFp \ + ec_GFp_smp_set_compr_coords_GFp +# undef ec_GFp_simple_point_set_affine_coordinates +# define ec_GFp_simple_point_set_affine_coordinates \ + ec_GFp_smp_pt_set_af_coords +# undef ec_GFp_simple_point_get_affine_coordinates +# define ec_GFp_simple_point_get_affine_coordinates \ + ec_GFp_smp_pt_get_af_coords +# undef ec_GFp_simple_set_compressed_coordinates +# define ec_GFp_simple_set_compressed_coordinates \ + ec_GFp_smp_set_compr_coords +# undef ec_GFp_simple_group_check_discriminant +# define ec_GFp_simple_group_check_discriminant ec_GFp_simple_grp_chk_discrim + +/* Hack som long STORE names */ +# undef STORE_method_set_initialise_function +# define STORE_method_set_initialise_function STORE_meth_set_initialise_fn +# undef STORE_method_set_cleanup_function +# define STORE_method_set_cleanup_function STORE_meth_set_cleanup_fn +# undef STORE_method_set_generate_function +# define STORE_method_set_generate_function STORE_meth_set_generate_fn +# undef STORE_method_set_modify_function +# define STORE_method_set_modify_function STORE_meth_set_modify_fn +# undef STORE_method_set_revoke_function +# define STORE_method_set_revoke_function STORE_meth_set_revoke_fn +# undef STORE_method_set_delete_function +# define STORE_method_set_delete_function STORE_meth_set_delete_fn +# undef STORE_method_set_list_start_function +# define STORE_method_set_list_start_function STORE_meth_set_list_start_fn +# undef STORE_method_set_list_next_function +# define STORE_method_set_list_next_function STORE_meth_set_list_next_fn +# undef STORE_method_set_list_end_function +# define STORE_method_set_list_end_function STORE_meth_set_list_end_fn +# undef STORE_method_set_update_store_function +# define STORE_method_set_update_store_function STORE_meth_set_update_store_fn +# undef STORE_method_set_lock_store_function +# define STORE_method_set_lock_store_function STORE_meth_set_lock_store_fn +# undef STORE_method_set_unlock_store_function +# define STORE_method_set_unlock_store_function STORE_meth_set_unlock_store_fn +# undef STORE_method_get_initialise_function +# define STORE_method_get_initialise_function STORE_meth_get_initialise_fn +# undef STORE_method_get_cleanup_function +# define STORE_method_get_cleanup_function STORE_meth_get_cleanup_fn +# undef STORE_method_get_generate_function +# define STORE_method_get_generate_function STORE_meth_get_generate_fn +# undef STORE_method_get_modify_function +# define STORE_method_get_modify_function STORE_meth_get_modify_fn +# undef STORE_method_get_revoke_function +# define STORE_method_get_revoke_function STORE_meth_get_revoke_fn +# undef STORE_method_get_delete_function +# define STORE_method_get_delete_function STORE_meth_get_delete_fn +# undef STORE_method_get_list_start_function +# define STORE_method_get_list_start_function STORE_meth_get_list_start_fn +# undef STORE_method_get_list_next_function +# define STORE_method_get_list_next_function STORE_meth_get_list_next_fn +# undef STORE_method_get_list_end_function +# define STORE_method_get_list_end_function STORE_meth_get_list_end_fn +# undef STORE_method_get_update_store_function +# define STORE_method_get_update_store_function STORE_meth_get_update_store_fn +# undef STORE_method_get_lock_store_function +# define STORE_method_get_lock_store_function STORE_meth_get_lock_store_fn +# undef STORE_method_get_unlock_store_function +# define STORE_method_get_unlock_store_function STORE_meth_get_unlock_store_fn + +/* Hack some long TS names */ +# undef TS_RESP_CTX_set_status_info_cond +# define TS_RESP_CTX_set_status_info_cond TS_RESP_CTX_set_stat_info_cond +# undef TS_RESP_CTX_set_clock_precision_digits +# define TS_RESP_CTX_set_clock_precision_digits TS_RESP_CTX_set_clk_prec_digits +# undef TS_CONF_set_clock_precision_digits +# define TS_CONF_set_clock_precision_digits TS_CONF_set_clk_prec_digits + +/* Hack some long CMS names */ +# undef CMS_RecipientInfo_ktri_get0_algs +# define CMS_RecipientInfo_ktri_get0_algs CMS_RecipInfo_ktri_get0_algs +# undef CMS_RecipientInfo_ktri_get0_signer_id +# define CMS_RecipientInfo_ktri_get0_signer_id CMS_RecipInfo_ktri_get0_sigr_id +# undef CMS_OtherRevocationInfoFormat_it +# define CMS_OtherRevocationInfoFormat_it CMS_OtherRevocInfoFormat_it +# undef CMS_KeyAgreeRecipientIdentifier_it +# define CMS_KeyAgreeRecipientIdentifier_it CMS_KeyAgreeRecipIdentifier_it +# undef CMS_OriginatorIdentifierOrKey_it +# define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it +# undef cms_SignerIdentifier_get0_signer_id +# define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id +# undef CMS_RecipientInfo_kari_get0_orig_id +# define CMS_RecipientInfo_kari_get0_orig_id CMS_RecipInfo_kari_get0_orig_id +# undef CMS_RecipientInfo_kari_get0_reks +# define CMS_RecipientInfo_kari_get0_reks CMS_RecipInfo_kari_get0_reks +# undef CMS_RecipientEncryptedKey_cert_cmp +# define CMS_RecipientEncryptedKey_cert_cmp CMS_RecipEncryptedKey_cert_cmp +# undef CMS_RecipientInfo_kari_set0_pkey +# define CMS_RecipientInfo_kari_set0_pkey CMS_RecipInfo_kari_set0_pkey +# undef CMS_RecipientEncryptedKey_get0_id +# define CMS_RecipientEncryptedKey_get0_id CMS_RecipEncryptedKey_get0_id +# undef CMS_RecipientInfo_kari_orig_id_cmp +# define CMS_RecipientInfo_kari_orig_id_cmp CMS_RecipInfo_kari_orig_id_cmp + +/* Hack some long DTLS1 names */ +# undef dtls1_retransmit_buffered_messages +# define dtls1_retransmit_buffered_messages dtls1_retransmit_buffered_msgs + +/* Hack some long SRP names */ +# undef SRP_generate_server_master_secret +# define SRP_generate_server_master_secret SRP_gen_server_master_secret +# undef SRP_generate_client_master_secret +# define SRP_generate_client_master_secret SRP_gen_client_master_secret + +/* Hack some long UI names */ +# undef UI_method_get_prompt_constructor +# define UI_method_get_prompt_constructor UI_method_get_prompt_constructr +# undef UI_method_set_prompt_constructor +# define UI_method_set_prompt_constructor UI_method_set_prompt_constructr + +# endif /* defined OPENSSL_SYS_VMS */ + +/* Case insensitive linking causes problems.... */ +# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) +# undef ERR_load_CRYPTO_strings +# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings +# undef OCSP_crlID_new +# define OCSP_crlID_new OCSP_crlID2_new + +# undef d2i_ECPARAMETERS +# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS +# undef i2d_ECPARAMETERS +# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS +# undef d2i_ECPKPARAMETERS +# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS +# undef i2d_ECPKPARAMETERS +# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS + +/* + * These functions do not seem to exist! However, I'm paranoid... Original + * command in x509v3.h: These functions are being redefined in another + * directory, and clash when the linker is case-insensitive, so let's hide + * them a little, by giving them an extra 'o' at the beginning of the name... + */ +# undef X509v3_cleanup_extensions +# define X509v3_cleanup_extensions oX509v3_cleanup_extensions +# undef X509v3_add_extension +# define X509v3_add_extension oX509v3_add_extension +# undef X509v3_add_netscape_extensions +# define X509v3_add_netscape_extensions oX509v3_add_netscape_extensions +# undef X509v3_add_standard_extensions +# define X509v3_add_standard_extensions oX509v3_add_standard_extensions + +/* This one clashes with CMS_data_create */ +# undef cms_Data_create +# define cms_Data_create priv_cms_Data_create + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/src/components/openssl/tls1.h b/src/components/openssl/tls1.h new file mode 100644 index 0000000..239211a --- /dev/null +++ b/src/components/openssl/tls1.h @@ -0,0 +1,810 @@ +/* ssl/tls1.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 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). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the OpenSSL open source + * license provided above. + * + * ECC cipher suite support in OpenSSL originally written by + * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. + * + */ +/* ==================================================================== + * Copyright 2005 Nokia. All rights reserved. + * + * The portions of the attached software ("Contribution") is developed by + * Nokia Corporation and is licensed pursuant to the OpenSSL open source + * license. + * + * The Contribution, originally written by Mika Kousa and Pasi Eronen of + * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites + * support (see RFC 4279) to OpenSSL. + * + * No patent licenses or other rights except those expressly stated in + * the OpenSSL open source license shall be deemed granted or received + * expressly, by implication, estoppel, or otherwise. + * + * No assurances are provided by Nokia that the Contribution does not + * infringe the patent or other intellectual property rights of any third + * party or that the license provides you with all the necessary rights + * to make use of the Contribution. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN + * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA + * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY + * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR + * OTHERWISE. + */ + +#ifndef HEADER_TLS1_H +# define HEADER_TLS1_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 0 + +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS_MAX_VERSION TLS1_2_VERSION + +# define TLS1_VERSION_MAJOR 0x03 +# define TLS1_VERSION_MINOR 0x01 + +# define TLS1_1_VERSION_MAJOR 0x03 +# define TLS1_1_VERSION_MINOR 0x02 + +# define TLS1_2_VERSION_MAJOR 0x03 +# define TLS1_2_VERSION_MINOR 0x03 + +# define TLS1_get_version(s) \ + ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0) + +# define TLS1_get_client_version(s) \ + ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) + +# define TLS1_AD_DECRYPTION_FAILED 21 +# define TLS1_AD_RECORD_OVERFLOW 22 +# define TLS1_AD_UNKNOWN_CA 48/* fatal */ +# define TLS1_AD_ACCESS_DENIED 49/* fatal */ +# define TLS1_AD_DECODE_ERROR 50/* fatal */ +# define TLS1_AD_DECRYPT_ERROR 51 +# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ +# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ +# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ +# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ +# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ +# define TLS1_AD_USER_CANCELLED 90 +# define TLS1_AD_NO_RENEGOTIATION 100 +/* codes 110-114 are from RFC3546 */ +# define TLS1_AD_UNSUPPORTED_EXTENSION 110 +# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 +# define TLS1_AD_UNRECOGNIZED_NAME 112 +# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 +# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 +# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ +# define TLSEXT_TYPE_server_name 0 +# define TLSEXT_TYPE_max_fragment_length 1 +# define TLSEXT_TYPE_client_certificate_url 2 +# define TLSEXT_TYPE_trusted_ca_keys 3 +# define TLSEXT_TYPE_truncated_hmac 4 +# define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4681 */ +# define TLSEXT_TYPE_user_mapping 6 +/* ExtensionType values from RFC5878 */ +# define TLSEXT_TYPE_client_authz 7 +# define TLSEXT_TYPE_server_authz 8 +/* ExtensionType values from RFC6091 */ +# define TLSEXT_TYPE_cert_type 9 + +/* ExtensionType values from RFC4492 */ +# define TLSEXT_TYPE_elliptic_curves 10 +# define TLSEXT_TYPE_ec_point_formats 11 + +/* ExtensionType value from RFC5054 */ +# define TLSEXT_TYPE_srp 12 + +/* ExtensionType values from RFC5246 */ +# define TLSEXT_TYPE_signature_algorithms 13 + +/* ExtensionType value from RFC5764 */ +# define TLSEXT_TYPE_use_srtp 14 + +/* ExtensionType value from RFC5620 */ +# define TLSEXT_TYPE_heartbeat 15 + +/* ExtensionType value from RFC7301 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * ExtensionType value for TLS padding extension. + * http://tools.ietf.org/html/draft-agl-tls-padding + */ +# define TLSEXT_TYPE_padding 21 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */ +# if 0 +/* + * will have to be provided externally for now , + * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183 + * using whatever extension number you'd like to try + */ +# define TLSEXT_TYPE_opaque_prf_input ?? +# endif + +/* Temporary extension type */ +# define TLSEXT_TYPE_renegotiate 0xff01 + +# ifndef OPENSSL_NO_NEXTPROTONEG +/* This is not an IANA defined extension number */ +# define TLSEXT_TYPE_next_proto_neg 13172 +# endif + +/* NameType value from RFC3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from RFC4492 */ +# define TLSEXT_ECPOINTFORMAT_first 0 +# define TLSEXT_ECPOINTFORMAT_uncompressed 0 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +# define TLSEXT_ECPOINTFORMAT_last 2 + +/* Signature and hash algorithms from RFC5246 */ +# define TLSEXT_signature_anonymous 0 +# define TLSEXT_signature_rsa 1 +# define TLSEXT_signature_dsa 2 +# define TLSEXT_signature_ecdsa 3 + +/* Total number of different signature algorithms */ +# define TLSEXT_signature_num 4 + +# define TLSEXT_hash_none 0 +# define TLSEXT_hash_md5 1 +# define TLSEXT_hash_sha1 2 +# define TLSEXT_hash_sha224 3 +# define TLSEXT_hash_sha256 4 +# define TLSEXT_hash_sha384 5 +# define TLSEXT_hash_sha512 6 + +/* Total number of different digest algorithms */ + +# define TLSEXT_hash_num 7 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +# ifndef OPENSSL_NO_TLSEXT + +# define TLSEXT_MAXLEN_host_name 255 + +const char *SSL_get_servername(const SSL *s, const int type); +int SSL_get_servername_type(const SSL *s); +/* + * SSL_export_keying_material exports a value derived from the master secret, + * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and + * optional context. (Since a zero length context is allowed, the |use_context| + * flag controls whether a context is included.) It returns 1 on success and + * zero otherwise. + */ +int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, + const char *label, size_t llen, + const unsigned char *p, size_t plen, + int use_context); + +int SSL_get_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +int SSL_get_shared_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); + +# define SSL_set_tlsext_host_name(s,name) \ +SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name) + +# define SSL_set_tlsext_debug_callback(ssl, cb) \ +SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb) + +# define SSL_set_tlsext_debug_arg(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg) + +# define SSL_set_tlsext_status_type(ssl, type) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL) + +# define SSL_get_tlsext_status_exts(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + +# define SSL_set_tlsext_status_exts(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + +# define SSL_get_tlsext_status_ids(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + +# define SSL_set_tlsext_status_ids(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + +# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg) + +# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg) + +# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ +SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) + +# define SSL_TLSEXT_ERR_OK 0 +# define SSL_TLSEXT_ERR_ALERT_WARNING 1 +# define SSL_TLSEXT_ERR_ALERT_FATAL 2 +# define SSL_TLSEXT_ERR_NOACK 3 + +# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ +SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg) + +# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys)) +# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys)) + +# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ +SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) + +# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) + +# define SSL_set_tlsext_opaque_prf_input(s, src, len) \ +SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) +# define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ +SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) +# define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ +SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) + +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ +SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_TLSEXT_HB_ENABLED 0x01 +# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS 0x02 +# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS 0x04 + +# define SSL_get_tlsext_heartbeat_pending(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL) +# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ + SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) +# endif +# endif + +/* PSK ciphersuites from 4279 */ +# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A +# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D + +/* + * Additional TLS ciphersuites from expired Internet Draft + * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if + * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c). We + * actually treat them like SSL 3.0 ciphers, which we probably shouldn't. + * Note that the first two are actually not in the IDs. + */ +# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060/* not in + * ID */ +# define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061/* not in + * ID */ +# define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062 +# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063 +# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064 +# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065 +# define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 + +/* AES ciphersuites from RFC3268 */ +# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 +# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 + +# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 +# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B +# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C +# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B +# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C +# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 +# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 +# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 +# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 +# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A +# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C +# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D +# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E +# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F +# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 +# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 +# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 +# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 +# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 +# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 +# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 +# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 + +/* + * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in + * draft 13 + */ +# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 +# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 +# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 + +# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 +# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 +# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A + +# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B +# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C +# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D +# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E +# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F + +# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 +# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 +# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 + +# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 +# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 +# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 +# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 +# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 + +/* SRP ciphersuites from RFC 5054 */ +# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A +# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B +# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C +# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F +# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 + +/* ECDH HMAC based ciphersuites from RFC5289 */ + +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 + +/* + * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave + * some DHE ciphers names with "EDH" + * instead of "DHE". Going forward, we + * should be using DHE + * everywhere, though we may indefinitely maintain + * aliases for users + * or configurations that used "EDH" + + */ +# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" +# define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" +# define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" +# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" +# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" +# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" +# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +/* AES ciphersuites from RFC3268 */ +# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +/* SRP ciphersuite from RFC 5054 */ +# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" +# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" +# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" +# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" +# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" +# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" + +/* TLS v1.2 ciphersuites */ +# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" +# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" +# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" + +/* ECDH HMAC based ciphersuites from RFC5289 */ + +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" + +# define TLS_CT_RSA_SIGN 1 +# define TLS_CT_DSS_SIGN 2 +# define TLS_CT_RSA_FIXED_DH 3 +# define TLS_CT_DSS_FIXED_DH 4 +# define TLS_CT_ECDSA_SIGN 64 +# define TLS_CT_RSA_FIXED_ECDH 65 +# define TLS_CT_ECDSA_FIXED_ECDH 66 +# define TLS_CT_GOST94_SIGN 21 +# define TLS_CT_GOST01_SIGN 22 +/* + * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see + * comment there) + */ +# define TLS_CT_NUMBER 9 + +# define TLS1_FINISH_MAC_LENGTH 12 + +# define TLS_MD_MAX_CONST_SIZE 20 +# define TLS_MD_CLIENT_FINISH_CONST "client finished" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +# define TLS_MD_SERVER_FINISH_CONST "server finished" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_KEY_EXPANSION_CONST "key expansion" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_IV_BLOCK_CONST "IV block" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +# define TLS_MD_MASTER_SECRET_CONST "master secret" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 + +# ifdef CHARSET_EBCDIC +# undef TLS_MD_CLIENT_FINISH_CONST +/* + * client finished + */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_FINISH_CONST +/* + * server finished + */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_KEY_EXPANSION_CONST +/* + * key expansion + */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" + +# undef TLS_MD_CLIENT_WRITE_KEY_CONST +/* + * client write key + */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_IV_BLOCK_CONST +/* + * IV block + */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" + +# undef TLS_MD_MASTER_SECRET_CONST +/* + * master secret + */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# endif + +/* TLS Session Ticket extension struct */ +struct tls_session_ticket_ext_st { + unsigned short length; + void *data; +}; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ts.h b/src/components/openssl/ts.h new file mode 100644 index 0000000..d9d7330 --- /dev/null +++ b/src/components/openssl/ts.h @@ -0,0 +1,865 @@ +/* crypto/ts/ts.h */ +/* + * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project + * 2002, 2003, 2004. + */ +/* ==================================================================== + * Copyright (c) 2006 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 + * licensing@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_TS_H +# define HEADER_TS_H + +# include +# include +# ifndef OPENSSL_NO_BUFFER +# include +# endif +# ifndef OPENSSL_NO_EVP +# include +# endif +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# include +# include + +# ifndef OPENSSL_NO_RSA +# include +# endif + +# ifndef OPENSSL_NO_DSA +# include +# endif + +# ifndef OPENSSL_NO_DH +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef WIN32 +/* Under Win32 this is defined in wincrypt.h */ +# undef X509_NAME +# endif + +# include +# include + +/*- +MessageImprint ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashedMessage OCTET STRING } +*/ + +typedef struct TS_msg_imprint_st { + X509_ALGOR *hash_algo; + ASN1_OCTET_STRING *hashed_msg; +} TS_MSG_IMPRINT; + +/*- +TimeStampReq ::= SEQUENCE { + version INTEGER { v1(1) }, + messageImprint MessageImprint, + --a hash algorithm OID and the hash value of the data to be + --time-stamped + reqPolicy TSAPolicyId OPTIONAL, + nonce INTEGER OPTIONAL, + certReq BOOLEAN DEFAULT FALSE, + extensions [0] IMPLICIT Extensions OPTIONAL } +*/ + +typedef struct TS_req_st { + ASN1_INTEGER *version; + TS_MSG_IMPRINT *msg_imprint; + ASN1_OBJECT *policy_id; /* OPTIONAL */ + ASN1_INTEGER *nonce; /* OPTIONAL */ + ASN1_BOOLEAN cert_req; /* DEFAULT FALSE */ + STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */ +} TS_REQ; + +/*- +Accuracy ::= SEQUENCE { + seconds INTEGER OPTIONAL, + millis [0] INTEGER (1..999) OPTIONAL, + micros [1] INTEGER (1..999) OPTIONAL } +*/ + +typedef struct TS_accuracy_st { + ASN1_INTEGER *seconds; + ASN1_INTEGER *millis; + ASN1_INTEGER *micros; +} TS_ACCURACY; + +/*- +TSTInfo ::= SEQUENCE { + version INTEGER { v1(1) }, + policy TSAPolicyId, + messageImprint MessageImprint, + -- MUST have the same value as the similar field in + -- TimeStampReq + serialNumber INTEGER, + -- Time-Stamping users MUST be ready to accommodate integers + -- up to 160 bits. + genTime GeneralizedTime, + accuracy Accuracy OPTIONAL, + ordering BOOLEAN DEFAULT FALSE, + nonce INTEGER OPTIONAL, + -- MUST be present if the similar field was present + -- in TimeStampReq. In that case it MUST have the same value. + tsa [0] GeneralName OPTIONAL, + extensions [1] IMPLICIT Extensions OPTIONAL } +*/ + +typedef struct TS_tst_info_st { + ASN1_INTEGER *version; + ASN1_OBJECT *policy_id; + TS_MSG_IMPRINT *msg_imprint; + ASN1_INTEGER *serial; + ASN1_GENERALIZEDTIME *time; + TS_ACCURACY *accuracy; + ASN1_BOOLEAN ordering; + ASN1_INTEGER *nonce; + GENERAL_NAME *tsa; + STACK_OF(X509_EXTENSION) *extensions; +} TS_TST_INFO; + +/*- +PKIStatusInfo ::= SEQUENCE { + status PKIStatus, + statusString PKIFreeText OPTIONAL, + failInfo PKIFailureInfo OPTIONAL } + +From RFC 1510 - section 3.1.1: +PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String + -- text encoded as UTF-8 String (note: each UTF8String SHOULD + -- include an RFC 1766 language tag to indicate the language + -- of the contained text) +*/ + +/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */ + +# define TS_STATUS_GRANTED 0 +# define TS_STATUS_GRANTED_WITH_MODS 1 +# define TS_STATUS_REJECTION 2 +# define TS_STATUS_WAITING 3 +# define TS_STATUS_REVOCATION_WARNING 4 +# define TS_STATUS_REVOCATION_NOTIFICATION 5 + +/* + * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c + */ + +# define TS_INFO_BAD_ALG 0 +# define TS_INFO_BAD_REQUEST 2 +# define TS_INFO_BAD_DATA_FORMAT 5 +# define TS_INFO_TIME_NOT_AVAILABLE 14 +# define TS_INFO_UNACCEPTED_POLICY 15 +# define TS_INFO_UNACCEPTED_EXTENSION 16 +# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 +# define TS_INFO_SYSTEM_FAILURE 25 + +typedef struct TS_status_info_st { + ASN1_INTEGER *status; + STACK_OF(ASN1_UTF8STRING) *text; + ASN1_BIT_STRING *failure_info; +} TS_STATUS_INFO; + +DECLARE_STACK_OF(ASN1_UTF8STRING) +DECLARE_ASN1_SET_OF(ASN1_UTF8STRING) + +/*- +TimeStampResp ::= SEQUENCE { + status PKIStatusInfo, + timeStampToken TimeStampToken OPTIONAL } +*/ + +typedef struct TS_resp_st { + TS_STATUS_INFO *status_info; + PKCS7 *token; + TS_TST_INFO *tst_info; +} TS_RESP; + +/* The structure below would belong to the ESS component. */ + +/*- +IssuerSerial ::= SEQUENCE { + issuer GeneralNames, + serialNumber CertificateSerialNumber + } +*/ + +typedef struct ESS_issuer_serial { + STACK_OF(GENERAL_NAME) *issuer; + ASN1_INTEGER *serial; +} ESS_ISSUER_SERIAL; + +/*- +ESSCertID ::= SEQUENCE { + certHash Hash, + issuerSerial IssuerSerial OPTIONAL +} +*/ + +typedef struct ESS_cert_id { + ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ + ESS_ISSUER_SERIAL *issuer_serial; +} ESS_CERT_ID; + +DECLARE_STACK_OF(ESS_CERT_ID) +DECLARE_ASN1_SET_OF(ESS_CERT_ID) + +/*- +SigningCertificate ::= SEQUENCE { + certs SEQUENCE OF ESSCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL +} +*/ + +typedef struct ESS_signing_cert { + STACK_OF(ESS_CERT_ID) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +} ESS_SIGNING_CERT; + +TS_REQ *TS_REQ_new(void); +void TS_REQ_free(TS_REQ *a); +int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); +TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); + +TS_REQ *TS_REQ_dup(TS_REQ *a); + +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); +int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); +void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, + const unsigned char **pp, long length); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); + +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a); + +TS_RESP *TS_RESP_new(void); +void TS_RESP_free(TS_RESP *a); +int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); +TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); +TS_RESP *TS_RESP_dup(TS_RESP *a); + +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +TS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *fp, TS_RESP *a); + +TS_STATUS_INFO *TS_STATUS_INFO_new(void); +void TS_STATUS_INFO_free(TS_STATUS_INFO *a); +int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); +TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, + const unsigned char **pp, long length); +TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); + +TS_TST_INFO *TS_TST_INFO_new(void); +void TS_TST_INFO_free(TS_TST_INFO *a); +int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); +TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, + long length); +TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); + +TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); +int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a); +int i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a); + +TS_ACCURACY *TS_ACCURACY_new(void); +void TS_ACCURACY_free(TS_ACCURACY *a); +int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); +TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, + long length); +TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); + +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); +void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); +int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); +ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, + const unsigned char **pp, + long length); +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); + +ESS_CERT_ID *ESS_CERT_ID_new(void); +void ESS_CERT_ID_free(ESS_CERT_ID *a); +int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); +ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, + long length); +ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); + +ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); +void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); +int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); +ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, + const unsigned char **pp, long length); +ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); + +void ERR_load_TS_strings(void); + +int TS_REQ_set_version(TS_REQ *a, long version); +long TS_REQ_get_version(const TS_REQ *a); + +int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); + +int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); +X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); + +int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); +ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); + +int TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy); +ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); + +int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); + +int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); +int TS_REQ_get_cert_req(const TS_REQ *a); + +STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); +void TS_REQ_ext_free(TS_REQ *a); +int TS_REQ_get_ext_count(TS_REQ *a); +int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); +int TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos); +int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); +X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); +X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); +int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); +void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); + +/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ + +int TS_REQ_print_bio(BIO *bio, TS_REQ *a); + +/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ + +int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); +TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); + +/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ +void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); +PKCS7 *TS_RESP_get_token(TS_RESP *a); +TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); + +int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); +long TS_TST_INFO_get_version(const TS_TST_INFO *a); + +int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); +ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); + +int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); + +int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); +const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); + +int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); +const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); + +int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); +TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); + +int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); +const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); + +int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); +const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); + +int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); +const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); + +int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); +int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); + +int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); + +int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); +GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); + +STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); +void TS_TST_INFO_ext_free(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); +int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos); +int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); +X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); +X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); +int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); +void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); + +/* + * Declarations related to response generation, defined in ts/ts_resp_sign.c. + */ + +/* Optional flags for response generation. */ + +/* Don't include the TSA name in response. */ +# define TS_TSA_NAME 0x01 + +/* Set ordering to true in response. */ +# define TS_ORDERING 0x02 + +/* + * Include the signer certificate and the other specified certificates in + * the ESS signing certificate attribute beside the PKCS7 signed data. + * Only the signer certificates is included by default. + */ +# define TS_ESS_CERT_ID_CHAIN 0x04 + +/* Forward declaration. */ +struct TS_resp_ctx; + +/* This must return a unique number less than 160 bits long. */ +typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); + +/* + * This must return the seconds and microseconds since Jan 1, 1970 in the sec + * and usec variables allocated by the caller. Return non-zero for success + * and zero for failure. + */ +typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, + long *usec); + +/* + * This must process the given extension. It can modify the TS_TST_INFO + * object of the context. Return values: !0 (processed), 0 (error, it must + * set the status info/failure info of the response). + */ +typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, + void *); + +typedef struct TS_resp_ctx { + X509 *signer_cert; + EVP_PKEY *signer_key; + STACK_OF(X509) *certs; /* Certs to include in signed data. */ + STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ + ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ + STACK_OF(EVP_MD) *mds; /* Acceptable message digests. */ + ASN1_INTEGER *seconds; /* accuracy, 0 means not specified. */ + ASN1_INTEGER *millis; /* accuracy, 0 means not specified. */ + ASN1_INTEGER *micros; /* accuracy, 0 means not specified. */ + unsigned clock_precision_digits; /* fraction of seconds in time stamp + * token. */ + unsigned flags; /* Optional info, see values above. */ + /* Callback functions. */ + TS_serial_cb serial_cb; + void *serial_cb_data; /* User data for serial_cb. */ + TS_time_cb time_cb; + void *time_cb_data; /* User data for time_cb. */ + TS_extension_cb extension_cb; + void *extension_cb_data; /* User data for extension_cb. */ + /* These members are used only while creating the response. */ + TS_REQ *request; + TS_RESP *response; + TS_TST_INFO *tst_info; +} TS_RESP_CTX; + +DECLARE_STACK_OF(EVP_MD) +DECLARE_ASN1_SET_OF(EVP_MD) + +/* Creates a response context that can be used for generating responses. */ +TS_RESP_CTX *TS_RESP_CTX_new(void); +void TS_RESP_CTX_free(TS_RESP_CTX *ctx); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy); + +/* No additional certs are included in the response by default. */ +int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); + +/* + * Adds a new acceptable policy, only the default policy is accepted by + * default. + */ +int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy); + +/* + * Adds a new acceptable message digest. Note that no message digests are + * accepted by default. The md argument is shared with the caller. + */ +int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* Accuracy is not included by default. */ +int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, + int secs, int millis, int micros); + +/* + * Clock precision digits, i.e. the number of decimal digits: '0' means sec, + * '3' msec, '6' usec, and so on. Default is 0. + */ +int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, + unsigned clock_precision_digits); +/* At most we accept usec precision. */ +# define TS_MAX_CLOCK_PRECISION_DIGITS 6 + +/* Maximum status message length */ +# define TS_MAX_STATUS_LENGTH (1024 * 1024) + +/* No flags are set by default. */ +void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); + +/* Default callback always returns a constant. */ +void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); + +/* Default callback uses the gettimeofday() and gmtime() system calls. */ +void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); + +/* + * Default callback rejects all extensions. The extension callback is called + * when the TS_TST_INFO object is already set up and not signed yet. + */ +/* FIXME: extension handling is not tested yet. */ +void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, + TS_extension_cb cb, void *data); + +/* The following methods can be used in the callbacks. */ +int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, + int status, const char *text); + +/* Sets the status info only if it is still TS_STATUS_GRANTED. */ +int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, + int status, const char *text); + +int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); + +/* The get methods below can be used in the extension callback. */ +TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); + +TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); + +/* + * Creates the signed TS_TST_INFO and puts it in TS_RESP. + * In case of errors it sets the status info properly. + * Returns NULL only in case of memory allocation/fatal error. + */ +TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); + +/* + * Declarations related to response verification, + * they are defined in ts/ts_resp_verify.c. + */ + +int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, + X509_STORE *store, X509 **signer_out); + +/* Context structure for the generic verify method. */ + +/* Verify the signer's certificate and the signature of the response. */ +# define TS_VFY_SIGNATURE (1u << 0) +/* Verify the version number of the response. */ +# define TS_VFY_VERSION (1u << 1) +/* Verify if the policy supplied by the user matches the policy of the TSA. */ +# define TS_VFY_POLICY (1u << 2) +/* + * Verify the message imprint provided by the user. This flag should not be + * specified with TS_VFY_DATA. + */ +# define TS_VFY_IMPRINT (1u << 3) +/* + * Verify the message imprint computed by the verify method from the user + * provided data and the MD algorithm of the response. This flag should not + * be specified with TS_VFY_IMPRINT. + */ +# define TS_VFY_DATA (1u << 4) +/* Verify the nonce value. */ +# define TS_VFY_NONCE (1u << 5) +/* Verify if the TSA name field matches the signer certificate. */ +# define TS_VFY_SIGNER (1u << 6) +/* Verify if the TSA name field equals to the user provided name. */ +# define TS_VFY_TSA_NAME (1u << 7) + +/* You can use the following convenience constants. */ +# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_IMPRINT \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) +# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_DATA \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) + +typedef struct TS_verify_ctx { + /* Set this to the union of TS_VFY_... flags you want to carry out. */ + unsigned flags; + /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */ + X509_STORE *store; + STACK_OF(X509) *certs; + /* Must be set only with TS_VFY_POLICY. */ + ASN1_OBJECT *policy; + /* + * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the + * algorithm from the response is used. + */ + X509_ALGOR *md_alg; + unsigned char *imprint; + unsigned imprint_len; + /* Must be set only with TS_VFY_DATA. */ + BIO *data; + /* Must be set only with TS_VFY_TSA_NAME. */ + ASN1_INTEGER *nonce; + /* Must be set only with TS_VFY_TSA_NAME. */ + GENERAL_NAME *tsa_name; +} TS_VERIFY_CTX; + +int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); +int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); + +/* + * Declarations related to response verification context, + * they are defined in ts/ts_verify_ctx.c. + */ + +/* Set all fields to zero. */ +TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); +void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); + +/*- + * If ctx is NULL, it allocates and returns a new object, otherwise + * it returns ctx. It initialises all the members as follows: + * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) + * certs = NULL + * store = NULL + * policy = policy from the request or NULL if absent (in this case + * TS_VFY_POLICY is cleared from flags as well) + * md_alg = MD algorithm from request + * imprint, imprint_len = imprint from request + * data = NULL + * nonce, nonce_len = nonce from the request or NULL if absent (in this case + * TS_VFY_NONCE is cleared from flags as well) + * tsa_name = NULL + * Important: after calling this method TS_VFY_SIGNATURE should be added! + */ +TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); + +/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ + +int TS_RESP_print_bio(BIO *bio, TS_RESP *a); +int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); +int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); + +/* Common utility functions defined in ts/ts_lib.c */ + +int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); +int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); +int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); +int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); +int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); + +/* + * Function declarations for handling configuration options, defined in + * ts/ts_conf.c + */ + +X509 *TS_CONF_load_cert(const char *file); +STACK_OF(X509) *TS_CONF_load_certs(const char *file); +EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); +const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); +int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, + TS_RESP_CTX *ctx); +int TS_CONF_set_crypto_device(CONF *conf, const char *section, + const char *device); +int TS_CONF_set_default_engine(const char *name); +int TS_CONF_set_signer_cert(CONF *conf, const char *section, + const char *cert, TS_RESP_CTX *ctx); +int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, + TS_RESP_CTX *ctx); +int TS_CONF_set_signer_key(CONF *conf, const char *section, + const char *key, const char *pass, + TS_RESP_CTX *ctx); +int TS_CONF_set_def_policy(CONF *conf, const char *section, + const char *policy, TS_RESP_CTX *ctx); +int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, + TS_RESP_CTX *ctx); +int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, + TS_RESP_CTX *ctx); + +/* -------------------------------------------------- */ +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_TS_strings(void); + +/* Error codes for the TS functions. */ + +/* Function codes. */ +# define TS_F_D2I_TS_RESP 147 +# define TS_F_DEF_SERIAL_CB 110 +# define TS_F_DEF_TIME_CB 111 +# define TS_F_ESS_ADD_SIGNING_CERT 112 +# define TS_F_ESS_CERT_ID_NEW_INIT 113 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 +# define TS_F_PKCS7_TO_TS_TST_INFO 148 +# define TS_F_TS_ACCURACY_SET_MICROS 115 +# define TS_F_TS_ACCURACY_SET_MILLIS 116 +# define TS_F_TS_ACCURACY_SET_SECONDS 117 +# define TS_F_TS_CHECK_IMPRINTS 100 +# define TS_F_TS_CHECK_NONCES 101 +# define TS_F_TS_CHECK_POLICY 102 +# define TS_F_TS_CHECK_SIGNING_CERTS 103 +# define TS_F_TS_CHECK_STATUS_INFO 104 +# define TS_F_TS_COMPUTE_IMPRINT 145 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 +# define TS_F_TS_GET_STATUS_TEXT 105 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 +# define TS_F_TS_REQ_SET_NONCE 120 +# define TS_F_TS_REQ_SET_POLICY_ID 121 +# define TS_F_TS_RESP_CREATE_RESPONSE 122 +# define TS_F_TS_RESP_CREATE_TST_INFO 123 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 +# define TS_F_TS_RESP_CTX_ADD_MD 125 +# define TS_F_TS_RESP_CTX_ADD_POLICY 126 +# define TS_F_TS_RESP_CTX_NEW 127 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 +# define TS_F_TS_RESP_CTX_SET_CERTS 129 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 +# define TS_F_TS_RESP_GET_POLICY 133 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 +# define TS_F_TS_RESP_SET_STATUS_INFO 135 +# define TS_F_TS_RESP_SET_TST_INFO 150 +# define TS_F_TS_RESP_SIGN 136 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 +# define TS_F_TS_RESP_VERIFY_TOKEN 107 +# define TS_F_TS_TST_INFO_SET_ACCURACY 137 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 +# define TS_F_TS_TST_INFO_SET_NONCE 139 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 +# define TS_F_TS_TST_INFO_SET_SERIAL 141 +# define TS_F_TS_TST_INFO_SET_TIME 142 +# define TS_F_TS_TST_INFO_SET_TSA 143 +# define TS_F_TS_VERIFY 108 +# define TS_F_TS_VERIFY_CERT 109 +# define TS_F_TS_VERIFY_CTX_NEW 144 + +/* Reason codes. */ +# define TS_R_BAD_PKCS7_TYPE 132 +# define TS_R_BAD_TYPE 133 +# define TS_R_CERTIFICATE_VERIFY_ERROR 100 +# define TS_R_COULD_NOT_SET_ENGINE 127 +# define TS_R_COULD_NOT_SET_TIME 115 +# define TS_R_D2I_TS_RESP_INT_FAILED 128 +# define TS_R_DETACHED_CONTENT 134 +# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 +# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 +# define TS_R_INVALID_NULL_POINTER 102 +# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 +# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 +# define TS_R_NONCE_MISMATCH 104 +# define TS_R_NONCE_NOT_RETURNED 105 +# define TS_R_NO_CONTENT 106 +# define TS_R_NO_TIME_STAMP_TOKEN 107 +# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 +# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 +# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 +# define TS_R_POLICY_MISMATCH 108 +# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 +# define TS_R_RESPONSE_SETUP_ERROR 121 +# define TS_R_SIGNATURE_FAILURE 109 +# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 +# define TS_R_TIME_SYSCALL_ERROR 122 +# define TS_R_TOKEN_NOT_PRESENT 130 +# define TS_R_TOKEN_PRESENT 131 +# define TS_R_TSA_NAME_MISMATCH 111 +# define TS_R_TSA_UNTRUSTED 112 +# define TS_R_TST_INFO_SETUP_ERROR 123 +# define TS_R_TS_DATASIGN 124 +# define TS_R_UNACCEPTABLE_POLICY 125 +# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 +# define TS_R_UNSUPPORTED_VERSION 113 +# define TS_R_WRONG_CONTENT_TYPE 114 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/txt_db.h b/src/components/openssl/txt_db.h new file mode 100644 index 0000000..8c65679 --- /dev/null +++ b/src/components/openssl/txt_db.h @@ -0,0 +1,112 @@ +/* crypto/txt_db/txt_db.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_TXT_DB_H +# define HEADER_TXT_DB_H + +# include +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# include + +# define DB_ERROR_OK 0 +# define DB_ERROR_MALLOC 1 +# define DB_ERROR_INDEX_CLASH 2 +# define DB_ERROR_INDEX_OUT_OF_RANGE 3 +# define DB_ERROR_NO_INDEX 4 +# define DB_ERROR_INSERT_INDEX_CLASH 5 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OPENSSL_STRING *OPENSSL_PSTRING; +DECLARE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) + +typedef struct txt_db_st { + int num_fields; + STACK_OF(OPENSSL_PSTRING) *data; + LHASH_OF(OPENSSL_STRING) **index; + int (**qual) (OPENSSL_STRING *); + long error; + long arg1; + long arg2; + OPENSSL_STRING *arg_row; +} TXT_DB; + +# ifndef OPENSSL_NO_BIO +TXT_DB *TXT_DB_read(BIO *in, int num); +long TXT_DB_write(BIO *out, TXT_DB *db); +# else +TXT_DB *TXT_DB_read(char *in, int num); +long TXT_DB_write(char *out, TXT_DB *db); +# endif +int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), + LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp); +void TXT_DB_free(TXT_DB *db); +OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, + OPENSSL_STRING *value); +int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/ui.h b/src/components/openssl/ui.h new file mode 100644 index 0000000..30e7a7d --- /dev/null +++ b/src/components/openssl/ui.h @@ -0,0 +1,415 @@ +/* crypto/ui/ui.h */ +/* + * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project + * 2001. + */ +/* ==================================================================== + * Copyright (c) 2001 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_UI_H +# define HEADER_UI_H + +# ifndef OPENSSL_NO_DEPRECATED +# include +# endif +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Declared already in ossl_typ.h */ +/* typedef struct ui_st UI; */ +/* typedef struct ui_method_st UI_METHOD; */ + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is usefull when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. object_desc is a + * textual short description of the object, for example "pass phrase", + * and object_name is the name of the object (might be a card name or + * a file name. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {object_desc} for {object_name}:" + * + * So, if object_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *object_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parametrised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) +int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called wth all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; +DECLARE_STACK_OF(UI_STRING) + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *object_desc, + const char + *object_name)); +int (*UI_method_get_opener(UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *, + const char *, + const char *); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean promtp + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_UI_strings(void); + +/* Error codes for the UI functions. */ + +/* Function codes. */ +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 +# define UI_F_GENERAL_ALLOCATE_PROMPT 109 +# define UI_F_GENERAL_ALLOCATE_STRING 100 +# define UI_F_UI_CTRL 111 +# define UI_F_UI_DUP_ERROR_STRING 101 +# define UI_F_UI_DUP_INFO_STRING 102 +# define UI_F_UI_DUP_INPUT_BOOLEAN 110 +# define UI_F_UI_DUP_INPUT_STRING 103 +# define UI_F_UI_DUP_VERIFY_STRING 106 +# define UI_F_UI_GET0_RESULT 107 +# define UI_F_UI_NEW_METHOD 104 +# define UI_F_UI_SET_RESULT 105 + +/* Reason codes. */ +# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 +# define UI_R_INDEX_TOO_LARGE 102 +# define UI_R_INDEX_TOO_SMALL 103 +# define UI_R_NO_RESULT_BUFFER 105 +# define UI_R_RESULT_TOO_LARGE 100 +# define UI_R_RESULT_TOO_SMALL 101 +# define UI_R_UNKNOWN_CONTROL_COMMAND 106 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/ui_compat.h b/src/components/openssl/ui_compat.h new file mode 100644 index 0000000..a7a5832 --- /dev/null +++ b/src/components/openssl/ui_compat.h @@ -0,0 +1,88 @@ +/* crypto/ui/ui.h */ +/* + * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project + * 2001. + */ +/* ==================================================================== + * Copyright (c) 2001 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_UI_COMPAT_H +# define HEADER_UI_COMPAT_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The following functions were previously part of the DES section, and are + * provided here for backward compatibility reasons. + */ + +# define des_read_pw_string(b,l,p,v) \ + _ossl_old_des_read_pw_string((b),(l),(p),(v)) +# define des_read_pw(b,bf,s,p,v) \ + _ossl_old_des_read_pw((b),(bf),(s),(p),(v)) + +int _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/whrlpool.h b/src/components/openssl/whrlpool.h new file mode 100644 index 0000000..65721d3 --- /dev/null +++ b/src/components/openssl/whrlpool.h @@ -0,0 +1,41 @@ +#ifndef HEADER_WHRLPOOL_H +# define HEADER_WHRLPOOL_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) + +typedef struct { + union { + unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; + /* double q is here to ensure 64-bit alignment */ + double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; + } H; + unsigned char data[WHIRLPOOL_BBLOCK / 8]; + unsigned int bitoff; + size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; +} WHIRLPOOL_CTX; + +# ifndef OPENSSL_NO_WHIRLPOOL +# ifdef OPENSSL_FIPS +int private_WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +# endif +int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); +void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); +int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/openssl/x509.h b/src/components/openssl/x509.h new file mode 100644 index 0000000..df9ca51 --- /dev/null +++ b/src/components/openssl/x509.h @@ -0,0 +1,1330 @@ +/* crypto/x509/x509.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECDH support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_X509_H +# define HEADER_X509_H + +# include +# include +# ifndef OPENSSL_NO_BUFFER +# include +# endif +# ifndef OPENSSL_NO_EVP +# include +# endif +# ifndef OPENSSL_NO_BIO +# include +# endif +# include +# include +# include + +# ifndef OPENSSL_NO_EC +# include +# endif + +# ifndef OPENSSL_NO_ECDSA +# include +# endif + +# ifndef OPENSSL_NO_ECDH +# include +# endif + +# ifndef OPENSSL_NO_DEPRECATED +# ifndef OPENSSL_NO_RSA +# include +# endif +# ifndef OPENSSL_NO_DSA +# include +# endif +# ifndef OPENSSL_NO_DH +# include +# endif +# endif + +# ifndef OPENSSL_NO_SHA +# include +# endif +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_SYS_WIN32 +/* Under Win32 these are defined in wincrypt.h */ +# undef X509_NAME +# undef X509_CERT_PAIR +# undef X509_EXTENSIONS +# endif + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +typedef struct X509_objects_st { + int nid; + int (*a2i) (void); + int (*i2a) (void); +} X509_OBJECTS; + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +DECLARE_ASN1_SET_OF(X509_ALGOR) + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +struct X509_pubkey_st { + X509_ALGOR *algor; + ASN1_BIT_STRING *public_key; + EVP_PKEY *pkey; +}; + +typedef struct X509_sig_st { + X509_ALGOR *algor; + ASN1_OCTET_STRING *digest; +} X509_SIG; + +typedef struct X509_name_entry_st { + ASN1_OBJECT *object; + ASN1_STRING *value; + int set; + int size; /* temp variable */ +} X509_NAME_ENTRY; + +DECLARE_STACK_OF(X509_NAME_ENTRY) +DECLARE_ASN1_SET_OF(X509_NAME_ENTRY) + +/* we always keep X509_NAMEs in 2 forms. */ +struct X509_name_st { + STACK_OF(X509_NAME_ENTRY) *entries; + int modified; /* true if 'bytes' needs to be built */ +# ifndef OPENSSL_NO_BUFFER + BUF_MEM *bytes; +# else + char *bytes; +# endif +/* unsigned long hash; Keep the hash around for lookups */ + unsigned char *canon_enc; + int canon_enclen; +} /* X509_NAME */ ; + +DECLARE_STACK_OF(X509_NAME) + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st { + ASN1_OBJECT *object; + ASN1_BOOLEAN critical; + ASN1_OCTET_STRING *value; +} X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DECLARE_STACK_OF(X509_EXTENSION) +DECLARE_ASN1_SET_OF(X509_EXTENSION) + +/* a sequence of these are used */ +typedef struct x509_attributes_st { + ASN1_OBJECT *object; + int single; /* 0 for a set, 1 for a single item (which is + * wrong) */ + union { + char *ptr; + /* + * 0 + */ STACK_OF(ASN1_TYPE) *set; + /* + * 1 + */ ASN1_TYPE *single; + } value; +} X509_ATTRIBUTE; + +DECLARE_STACK_OF(X509_ATTRIBUTE) +DECLARE_ASN1_SET_OF(X509_ATTRIBUTE) + +typedef struct X509_req_info_st { + ASN1_ENCODING enc; + ASN1_INTEGER *version; + X509_NAME *subject; + X509_PUBKEY *pubkey; + /* d=2 hl=2 l= 0 cons: cont: 00 */ + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ +} X509_REQ_INFO; + +typedef struct X509_req_st { + X509_REQ_INFO *req_info; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int references; +} X509_REQ; + +typedef struct x509_cinf_st { + ASN1_INTEGER *version; /* [ 0 ] default of v1 */ + ASN1_INTEGER *serialNumber; + X509_ALGOR *signature; + X509_NAME *issuer; + X509_VAL *validity; + X509_NAME *subject; + X509_PUBKEY *key; + ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ + ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ + STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ + ASN1_ENCODING enc; +} X509_CINF; + +/* + * This stuff is certificate "auxiliary info" it contains details which are + * useful in certificate stores and databases. When used this is tagged onto + * the end of the certificate itself + */ + +typedef struct x509_cert_aux_st { + STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ + STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ + ASN1_UTF8STRING *alias; /* "friendly name" */ + ASN1_OCTET_STRING *keyid; /* key id of private key */ + STACK_OF(X509_ALGOR) *other; /* other unspecified info */ +} X509_CERT_AUX; + +struct x509_st { + X509_CINF *cert_info; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int valid; + int references; + char *name; + CRYPTO_EX_DATA ex_data; + /* These contain copies of various extension values */ + long ex_pathlen; + long ex_pcpathlen; + unsigned long ex_flags; + unsigned long ex_kusage; + unsigned long ex_xkusage; + unsigned long ex_nscert; + ASN1_OCTET_STRING *skid; + AUTHORITY_KEYID *akid; + X509_POLICY_CACHE *policy_cache; + STACK_OF(DIST_POINT) *crldp; + STACK_OF(GENERAL_NAME) *altname; + NAME_CONSTRAINTS *nc; +# ifndef OPENSSL_NO_RFC3779 + STACK_OF(IPAddressFamily) *rfc3779_addr; + struct ASIdentifiers_st *rfc3779_asid; +# endif +# ifndef OPENSSL_NO_SHA + unsigned char sha1_hash[SHA_DIGEST_LENGTH]; +# endif + X509_CERT_AUX *aux; +} /* X509 */ ; + +DECLARE_STACK_OF(X509) +DECLARE_ASN1_SET_OF(X509) + +/* This is used for a table of trust checking functions */ + +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; + +DECLARE_STACK_OF(X509_TRUST) + +typedef struct x509_cert_pair_st { + X509 *forward; + X509 *reverse; +} X509_CERT_PAIR; + +/* standard trust ids */ + +# define X509_TRUST_DEFAULT -1/* Only valid in purpose settings */ + +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 + +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC 1 +# define X509_TRUST_DYNAMIC_NAME 2 + +/* check_trust return codes */ + +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional SSLeay: use old + * X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +struct x509_revoked_st { + ASN1_INTEGER *serialNumber; + ASN1_TIME *revocationDate; + STACK_OF(X509_EXTENSION) /* optional */ *extensions; + /* Set up if indirect CRL */ + STACK_OF(GENERAL_NAME) *issuer; + /* Revocation reason */ + int reason; + int sequence; /* load sequence */ +}; + +DECLARE_STACK_OF(X509_REVOKED) +DECLARE_ASN1_SET_OF(X509_REVOKED) + +typedef struct X509_crl_info_st { + ASN1_INTEGER *version; + X509_ALGOR *sig_alg; + X509_NAME *issuer; + ASN1_TIME *lastUpdate; + ASN1_TIME *nextUpdate; + STACK_OF(X509_REVOKED) *revoked; + STACK_OF(X509_EXTENSION) /* [0] */ *extensions; + ASN1_ENCODING enc; +} X509_CRL_INFO; + +struct X509_crl_st { + /* actual signature */ + X509_CRL_INFO *crl; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int references; + int flags; + /* Copies of various extensions */ + AUTHORITY_KEYID *akid; + ISSUING_DIST_POINT *idp; + /* Convenient breakdown of IDP */ + int idp_flags; + int idp_reasons; + /* CRL and base CRL numbers for delta processing */ + ASN1_INTEGER *crl_number; + ASN1_INTEGER *base_crl_number; +# ifndef OPENSSL_NO_SHA + unsigned char sha1_hash[SHA_DIGEST_LENGTH]; +# endif + STACK_OF(GENERAL_NAMES) *issuers; + const X509_CRL_METHOD *meth; + void *meth_data; +} /* X509_CRL */ ; + +DECLARE_STACK_OF(X509_CRL) +DECLARE_ASN1_SET_OF(X509_CRL) + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; + int references; +} X509_PKEY; + +# ifndef OPENSSL_NO_EVP +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; + int references; +} X509_INFO; + +DECLARE_STACK_OF(X509_INFO) +# endif + +/* + * The next 2 structures and their 8 routines were sent to me by Pat Richard + * and are used to manipulate Netscapes spki structures - + * useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR *sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +/* PKCS#8 private key info structure */ + +struct pkcs8_priv_key_info_st { + /* Flag for various broken formats */ + int broken; +# define PKCS8_OK 0 +# define PKCS8_NO_OCTET 1 +# define PKCS8_EMBEDDED_PARAM 2 +# define PKCS8_NS_DB 3 +# define PKCS8_NEG_PRIVKEY 4 + ASN1_INTEGER *version; + X509_ALGOR *pkeyalg; + /* Should be OCTET STRING but some are broken */ + ASN1_TYPE *pkey; + STACK_OF(X509_ATTRIBUTE) *attributes; +}; + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version) +/* #define X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */ +# define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore) +# define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter) +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version) +# define X509_REQ_get_subject_name(x) ((x)->req_info->subject) +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) +# define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) + +# define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version) +# define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate) +# define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate) +# define X509_CRL_get_issuer(x) ((x)->crl->issuer) +# define X509_CRL_get_REVOKED(x) ((x)->crl->revoked) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + ASN1_INTEGER *ser, + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) + */ +# define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) + +const char *X509_verify_cert_error_string(long n); + +# ifndef OPENSSL_NO_EVP +int X509_verify(X509 *a, EVP_PKEY *r); + +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +# endif + +# ifndef OPENSSL_NO_FP_API +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); +DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +# ifndef OPENSSL_NO_BIO +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); +DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); +# endif + +X509 *X509_dup(X509 *x509); +X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); +X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); +X509_CRL *X509_CRL_dup(X509_CRL *crl); +X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); +X509_REQ *X509_REQ_dup(X509_REQ *req); +X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, + X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); + +X509_NAME *X509_NAME_dup(X509_NAME *xn); +X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_RSA +int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); +RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_DSA +int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); +DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_EC +int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); +EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) + +DECLARE_ASN1_FUNCTIONS(X509) +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR) + +int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(X509 *r, int idx); +int i2d_X509_AUX(X509 *a, unsigned char **pp); +X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, + const X509 *x); +int X509_get_signature_nid(const X509 *x); + +int X509_alias_set1(X509 *x, unsigned char *name, int len); +int X509_keyid_set1(X509 *x, unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_TRUST_set(int *t, int trust); +int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); +int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp); +X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +# ifndef OPENSSL_NO_EVP +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(X509_NAME *a, char *buf, int size); + +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); + +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); + +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + char *data, EVP_PKEY *pkey, const EVP_MD *type); + +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); + +int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); + +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, + EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + void *asn, EVP_MD_CTX *ctx); +# endif + +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_issuer_name(X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_subject_name(X509 *a); +int X509_set_notBefore(X509 *x, const ASN1_TIME *tm); +int X509_set_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ ); + +int X509_REQ_set_version(X509_REQ *x, long version); +int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, + int nid); +int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); + +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(X509 *x509, EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +unsigned long X509_NAME_hash(X509_NAME *x); +unsigned long X509_NAME_hash_old(X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +# ifndef OPENSSL_NO_FP_API +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, + unsigned long flags); +# endif + +# ifndef OPENSSL_NO_BIO +int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); +# endif + +int X509_NAME_entry_count(X509_NAME *name); +int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); +int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passsing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, + unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); +ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(X509 *x); +int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(X509_CRL *x); +int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos); +int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj, + int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_verify_cert(X509_STORE_CTX *ctx); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, + ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken); +PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8); + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, X509_PUBKEY *pub); + +int X509_check_trust(X509 *x, int id, int flags); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(X509_TRUST *xp); +char *X509_TRUST_get0_name(X509_TRUST *xp); +int X509_TRUST_get_trust(X509_TRUST *xp); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ + +void ERR_load_X509_strings(void); + +/* Error codes for the X509 functions. */ + +/* Function codes. */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 106 +# define X509_F_CHECK_POLICY 145 +# define X509_F_DIR_CTRL 102 +# define X509_F_GET_CERT_BY_SUBJECT 103 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 +# define X509_F_X509AT_ADD1_ATTR 135 +# define X509_F_X509V3_ADD_EXT 104 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 +# define X509_F_X509_CHECK_PRIVATE_KEY 128 +# define X509_F_X509_CRL_DIFF 105 +# define X509_F_X509_CRL_PRINT_FP 147 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 +# define X509_F_X509_LOAD_CERT_CRL_FILE 132 +# define X509_F_X509_LOAD_CERT_FILE 111 +# define X509_F_X509_LOAD_CRL_FILE 112 +# define X509_F_X509_NAME_ADD_ENTRY 113 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 +# define X509_F_X509_NAME_ONELINE 116 +# define X509_F_X509_NAME_PRINT 117 +# define X509_F_X509_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_GET 119 +# define X509_F_X509_PUBKEY_SET 120 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 +# define X509_F_X509_REQ_PRINT_EX 121 +# define X509_F_X509_REQ_PRINT_FP 122 +# define X509_F_X509_REQ_TO_X509 123 +# define X509_F_X509_STORE_ADD_CERT 124 +# define X509_F_X509_STORE_ADD_CRL 125 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 +# define X509_F_X509_STORE_CTX_INIT 143 +# define X509_F_X509_STORE_CTX_NEW 142 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 +# define X509_F_X509_TO_X509_REQ 126 +# define X509_F_X509_TRUST_ADD 133 +# define X509_F_X509_TRUST_SET 141 +# define X509_F_X509_VERIFY_CERT 127 + +/* Reason codes. */ +# define X509_R_AKID_MISMATCH 110 +# define X509_R_BAD_X509_FILETYPE 100 +# define X509_R_BASE64_DECODE_ERROR 118 +# define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 +# define X509_R_CRL_ALREADY_DELTA 127 +# define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_ERR_ASN1_LIB 102 +# define X509_R_IDP_MISMATCH 128 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_FIELD_NAME 119 +# define X509_R_INVALID_TRUST 123 +# define X509_R_ISSUER_MISMATCH 129 +# define X509_R_KEY_TYPE_MISMATCH 115 +# define X509_R_KEY_VALUES_MISMATCH 116 +# define X509_R_LOADING_CERT_DIR 103 +# define X509_R_LOADING_DEFAULTS 104 +# define X509_R_METHOD_NOT_SUPPORTED 124 +# define X509_R_NAME_TOO_LONG 134 +# define X509_R_NEWER_CRL_NOT_NEWER 132 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_NUMBER 130 +# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +# define X509_R_SHOULD_RETRY 106 +# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +# define X509_R_UNKNOWN_KEY_TYPE 117 +# define X509_R_UNKNOWN_NID 109 +# define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/src/components/openssl/x509_vfy.h b/src/components/openssl/x509_vfy.h new file mode 100644 index 0000000..b68553e --- /dev/null +++ b/src/components/openssl/x509_vfy.h @@ -0,0 +1,652 @@ +/* crypto/x509/x509_vfy.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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 acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS 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 AUTHOR OR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_X509_H +# include +/* + * openssl/x509.h ends up #include-ing this file at about the only + * appropriate moment. + */ +#endif + +#ifndef HEADER_X509_VFY_H +# define HEADER_X509_VFY_H + +# include +# ifndef OPENSSL_NO_LHASH +# include +# endif +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# if 0 +/* Outer object */ +typedef struct x509_hash_dir_st { + int num_dirs; + char **dirs; + int *dirs_type; + int num_dirs_alloced; +} X509_HASH_DIR_CTX; +# endif + +typedef struct x509_file_st { + int num_paths; /* number of paths to files or directories */ + int num_alloced; + char **paths; /* the list of paths or directories */ + int *path_type; +} X509_CERT_FILE_CTX; + +/*******************************/ +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +# define X509_LU_RETRY -1 +# define X509_LU_FAIL 0 +# define X509_LU_X509 1 +# define X509_LU_CRL 2 +# define X509_LU_PKEY 3 + +typedef struct x509_object_st { + /* one of the above types */ + int type; + union { + char *ptr; + X509 *x509; + X509_CRL *crl; + EVP_PKEY *pkey; + } data; +} X509_OBJECT; + +typedef struct x509_lookup_st X509_LOOKUP; + +DECLARE_STACK_OF(X509_LOOKUP) +DECLARE_STACK_OF(X509_OBJECT) + +/* This is a static that defines the function interface */ +typedef struct x509_lookup_method_st { + const char *name; + int (*new_item) (X509_LOOKUP *ctx); + void (*free) (X509_LOOKUP *ctx); + int (*init) (X509_LOOKUP *ctx); + int (*shutdown) (X509_LOOKUP *ctx); + int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret); + int (*get_by_subject) (X509_LOOKUP *ctx, int type, X509_NAME *name, + X509_OBJECT *ret); + int (*get_by_issuer_serial) (X509_LOOKUP *ctx, int type, X509_NAME *name, + ASN1_INTEGER *serial, X509_OBJECT *ret); + int (*get_by_fingerprint) (X509_LOOKUP *ctx, int type, + unsigned char *bytes, int len, + X509_OBJECT *ret); + int (*get_by_alias) (X509_LOOKUP *ctx, int type, char *str, int len, + X509_OBJECT *ret); +} X509_LOOKUP_METHOD; + +typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; + +/* + * This structure hold all parameters associated with a verify operation by + * including an X509_VERIFY_PARAM structure in related structures the + * parameters used can be customized + */ + +typedef struct X509_VERIFY_PARAM_st { + char *name; + time_t check_time; /* Time to use */ + unsigned long inh_flags; /* Inheritance flags */ + unsigned long flags; /* Various verify flags */ + int purpose; /* purpose to check untrusted certificates */ + int trust; /* trust setting to check */ + int depth; /* Verify depth */ + STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ + X509_VERIFY_PARAM_ID *id; /* opaque ID data */ +} X509_VERIFY_PARAM; + +DECLARE_STACK_OF(X509_VERIFY_PARAM) + +/* + * This is used to hold everything. It is used for all certificate + * validation. Once we have a certificate chain, the 'verify' function is + * then called to actually check the cert chain. + */ +struct x509_store_st { + /* The following is a cache of trusted certs */ + int cache; /* if true, stash any hits */ + STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */ + /* These are external lookup methods */ + STACK_OF(X509_LOOKUP) *get_cert_methods; + X509_VERIFY_PARAM *param; + /* Callbacks for various operations */ + /* called to verify a certificate */ + int (*verify) (X509_STORE_CTX *ctx); + /* error callback */ + int (*verify_cb) (int ok, X509_STORE_CTX *ctx); + /* get issuers cert from ctx */ + int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + /* check issued */ + int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); + /* Check revocation status of chain */ + int (*check_revocation) (X509_STORE_CTX *ctx); + /* retrieve CRL */ + int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); + /* Check CRL validity */ + int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); + /* Check certificate against CRL */ + int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + int (*cleanup) (X509_STORE_CTX *ctx); + CRYPTO_EX_DATA ex_data; + int references; +} /* X509_STORE */ ; + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +# define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) +# define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) + +/* This is the functions plus an instance of the local variables. */ +struct x509_lookup_st { + int init; /* have we been started */ + int skip; /* don't use us. */ + X509_LOOKUP_METHOD *method; /* the functions */ + char *method_data; /* method data */ + X509_STORE *store_ctx; /* who owns us */ +} /* X509_LOOKUP */ ; + +/* + * This is a used when verifying cert chains. Since the gathering of the + * cert chain can take some time (and have to be 'retried', this needs to be + * kept and passed around. + */ +struct x509_store_ctx_st { /* X509_STORE_CTX */ + X509_STORE *ctx; + /* used when looking up certs */ + int current_method; + /* The following are set by the caller */ + /* The cert to check */ + X509 *cert; + /* chain of X509s - untrusted - passed in */ + STACK_OF(X509) *untrusted; + /* set of CRLs passed in */ + STACK_OF(X509_CRL) *crls; + X509_VERIFY_PARAM *param; + /* Other info for use with get_issuer() */ + void *other_ctx; + /* Callbacks for various operations */ + /* called to verify a certificate */ + int (*verify) (X509_STORE_CTX *ctx); + /* error callback */ + int (*verify_cb) (int ok, X509_STORE_CTX *ctx); + /* get issuers cert from ctx */ + int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + /* check issued */ + int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); + /* Check revocation status of chain */ + int (*check_revocation) (X509_STORE_CTX *ctx); + /* retrieve CRL */ + int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); + /* Check CRL validity */ + int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); + /* Check certificate against CRL */ + int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); + int (*check_policy) (X509_STORE_CTX *ctx); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + int (*cleanup) (X509_STORE_CTX *ctx); + /* The following is built up */ + /* if 0, rebuild chain */ + int valid; + /* index of last untrusted cert */ + int last_untrusted; + /* chain of X509s - built up and trusted */ + STACK_OF(X509) *chain; + /* Valid policy tree */ + X509_POLICY_TREE *tree; + /* Require explicit policy value */ + int explicit_policy; + /* When something goes wrong, this is why */ + int error_depth; + int error; + X509 *current_cert; + /* cert currently being tested as valid issuer */ + X509 *current_issuer; + /* current CRL */ + X509_CRL *current_crl; + /* score of current CRL */ + int current_crl_score; + /* Reason mask */ + unsigned int current_reasons; + /* For CRL path validation: parent context */ + X509_STORE_CTX *parent; + CRYPTO_EX_DATA ex_data; +} /* X509_STORE_CTX */ ; + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 + +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_INVALID_CA 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 + +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 + +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 + +# define X509_V_ERR_UNNESTED_RESOURCE 46 + +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 + +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 + +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 + +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 65 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 66 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 67 + +/* Certificate verify flags */ + +/* Send issuer+subject checks to verify_cb */ +# define X509_V_FLAG_CB_ISSUER_CHECK 0x1 +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check selfsigned CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 + +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + int type, X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +void X509_OBJECT_up_ref_count(X509_OBJECT *a); +void X509_OBJECT_free_contents(X509_OBJECT *a); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); + +STACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); + +void X509_STORE_set_verify_cb(X509_STORE *ctx, + int (*verify_cb) (int, X509_STORE_CTX *)); + +void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, + STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX + *ctx, + X509_NAME *nm)); + +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, + X509 *x509, STACK_OF(X509) *chain); +void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); + +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, + X509_OBJECT *ret); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +# ifndef OPENSSL_NO_STDIO +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +# endif + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name, + X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name, + ASN1_INTEGER *serial, X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type, + unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len, + X509_OBJECT *ret); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +# ifndef OPENSSL_NO_STDIO +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); +# endif + +int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +void X509_STORE_CTX_set_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + int (*verify_cb) (int, X509_STORE_CTX *)); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const + X509_POLICY_TREE + *tree); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const + X509_POLICY_TREE + *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const + X509_POLICY_NODE + *node); +const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE + *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/openssl/x509v3.h b/src/components/openssl/x509v3.h new file mode 100644 index 0000000..2d29ae4 --- /dev/null +++ b/src/components/openssl/x509v3.h @@ -0,0 +1,1055 @@ +/* x509v3.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 1999. + */ +/* ==================================================================== + * Copyright (c) 1999-2004 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 + * licensing@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_X509V3_H +# define HEADER_X509V3_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_SYS_WIN32 +/* Under Win32 these are defined in wincrypt.h */ +# undef X509_NAME +# undef X509_CERT_PAIR +# undef X509_EXTENSIONS +# endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, char *section, char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info */ +struct v3_ext_ctx { +# define CTX_TEST 0x1 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +DECLARE_STACK_OF(X509V3_EXT_METHOD) + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_TYPE *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; + +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; + +DECLARE_STACK_OF(GENERAL_NAME) +DECLARE_ASN1_SET_OF(GENERAL_NAME) + +DECLARE_STACK_OF(ACCESS_DESCRIPTION) +DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +DECLARE_STACK_OF(DIST_POINT) +DECLARE_ASN1_SET_OF(DIST_POINT) + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +DECLARE_STACK_OF(SXNETID) +DECLARE_ASN1_SET_OF(SXNETID) + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +DECLARE_STACK_OF(POLICYQUALINFO) +DECLARE_ASN1_SET_OF(POLICYQUALINFO) + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +DECLARE_STACK_OF(POLICYINFO) +DECLARE_ASN1_SET_OF(POLICYINFO) + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +DECLARE_STACK_OF(POLICY_MAPPING) + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +DECLARE_STACK_OF(GENERAL_SUBTREE) + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ +",name:", val->name, ",value:", val->value); + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +/* Really self issued not necessarily self signed */ +# define EXFLAG_SI 0x20 +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +/* Self signed */ +# define EXFLAG_SS 0x2000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_STACK_OF(X509_PURPOSE) + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, char *value, + int is_nc); + +# ifdef HEADER_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, + char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *name, char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); +int X509V3_EXT_free(int nid, void *ext_data); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +char *hex_to_string(const unsigned char *buffer, long len); +unsigned char *string_to_hex(const char *str, long *len); +int name_cmp(const char *name, const char *cmp); + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); + +int X509V3_extensions_print(BIO *out, char *title, + STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + char *name, char *sname, void *arg); +char *X509_PURPOSE_get0_name(X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int a2i_ipadd(unsigned char *ipout, const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +DECLARE_STACK_OF(X509_POLICY_NODE) + +# ifndef OPENSSL_NO_RFC3779 + +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; +DECLARE_STACK_OF(ASIdOrRange) + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; +DECLARE_STACK_OF(IPAddressOrRange) + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; +DECLARE_STACK_OF(IPAddressFamily) + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int v3_asid_add_inherit(ASIdentifiers *asid, int which); +int v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned v3_addr_get_afi(const IPAddressFamily *f); +int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int v3_asid_is_canonical(ASIdentifiers *asid); +int v3_addr_is_canonical(IPAddrBlocks *addr); +int v3_asid_canonize(ASIdentifiers *asid); +int v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int v3_asid_inherits(ASIdentifiers *asid); +int v3_addr_inherits(IPAddrBlocks *addr); +int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int v3_asid_validate_path(X509_STORE_CTX *); +int v3_addr_validate_path(X509_STORE_CTX *); +int v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, int allow_inheritance); +int v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +# endif /* OPENSSL_NO_RFC3779 */ + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_X509V3_strings(void); + +/* Error codes for the X509V3 functions. */ + +/* Function codes. */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 +# define X509V3_F_COPY_EMAIL 122 +# define X509V3_F_COPY_ISSUER 123 +# define X509V3_F_DO_DIRNAME 144 +# define X509V3_F_DO_EXT_CONF 124 +# define X509V3_F_DO_EXT_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# define X509V3_F_HEX_TO_STRING 111 +# define X509V3_F_I2S_ASN1_ENUMERATED 121 +# define X509V3_F_I2S_ASN1_IA5STRING 149 +# define X509V3_F_I2S_ASN1_INTEGER 120 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 +# define X509V3_F_NOTICE_SECTION 132 +# define X509V3_F_NREF_NOS 133 +# define X509V3_F_POLICY_SECTION 131 +# define X509V3_F_PROCESS_PCI_VALUE 150 +# define X509V3_F_R2I_CERTPOL 130 +# define X509V3_F_R2I_PCI 155 +# define X509V3_F_S2I_ASN1_IA5STRING 100 +# define X509V3_F_S2I_ASN1_INTEGER 108 +# define X509V3_F_S2I_ASN1_OCTET_STRING 112 +# define X509V3_F_S2I_ASN1_SKEY_ID 114 +# define X509V3_F_S2I_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# define X509V3_F_STRING_TO_HEX 113 +# define X509V3_F_SXNET_ADD_ID_ASC 125 +# define X509V3_F_SXNET_ADD_ID_INTEGER 126 +# define X509V3_F_SXNET_ADD_ID_ULONG 127 +# define X509V3_F_SXNET_GET_ID_ASC 128 +# define X509V3_F_SXNET_GET_ID_ULONG 129 +# define X509V3_F_V2I_ASIDENTIFIERS 163 +# define X509V3_F_V2I_ASN1_BIT_STRING 101 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 +# define X509V3_F_V2I_AUTHORITY_KEYID 119 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 +# define X509V3_F_V2I_CRLD 134 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 +# define X509V3_F_V2I_GENERAL_NAMES 118 +# define X509V3_F_V2I_GENERAL_NAME_EX 117 +# define X509V3_F_V2I_IDP 157 +# define X509V3_F_V2I_IPADDRBLOCKS 159 +# define X509V3_F_V2I_ISSUER_ALT 153 +# define X509V3_F_V2I_NAME_CONSTRAINTS 147 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 +# define X509V3_F_V2I_POLICY_MAPPINGS 145 +# define X509V3_F_V2I_SUBJECT_ALT 154 +# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL 160 +# define X509V3_F_V3_GENERIC_EXTENSION 116 +# define X509V3_F_X509V3_ADD1_I2D 140 +# define X509V3_F_X509V3_ADD_VALUE 105 +# define X509V3_F_X509V3_EXT_ADD 104 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 +# define X509V3_F_X509V3_EXT_CONF 107 +# define X509V3_F_X509V3_EXT_FREE 165 +# define X509V3_F_X509V3_EXT_I2D 136 +# define X509V3_F_X509V3_EXT_NCONF 152 +# define X509V3_F_X509V3_GET_SECTION 142 +# define X509V3_F_X509V3_GET_STRING 143 +# define X509V3_F_X509V3_GET_VALUE_BOOL 110 +# define X509V3_F_X509V3_PARSE_LIST 109 +# define X509V3_F_X509_PURPOSE_ADD 137 +# define X509V3_F_X509_PURPOSE_SET 141 + +/* Reason codes. */ +# define X509V3_R_BAD_IP_ADDRESS 118 +# define X509V3_R_BAD_OBJECT 119 +# define X509V3_R_BN_DEC2BN_ERROR 100 +# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 +# define X509V3_R_CANNOT_FIND_FREE_FUNCTION 168 +# define X509V3_R_DIRNAME_ERROR 149 +# define X509V3_R_DISTPOINT_ALREADY_SET 160 +# define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_ERROR_CONVERTING_ZONE 131 +# define X509V3_R_ERROR_CREATING_EXTENSION 144 +# define X509V3_R_ERROR_IN_EXTENSION 128 +# define X509V3_R_EXPECTED_A_SECTION_NAME 137 +# define X509V3_R_EXTENSION_EXISTS 145 +# define X509V3_R_EXTENSION_NAME_ERROR 115 +# define X509V3_R_EXTENSION_NOT_FOUND 102 +# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 +# define X509V3_R_EXTENSION_VALUE_ERROR 116 +# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 +# define X509V3_R_ILLEGAL_HEX_DIGIT 113 +# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 +# define X509V3_R_INVALID_ASNUMBER 162 +# define X509V3_R_INVALID_ASRANGE 163 +# define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_EXTENSION_STRING 105 +# define X509V3_R_INVALID_INHERITANCE 165 +# define X509V3_R_INVALID_IPADDRESS 166 +# define X509V3_R_INVALID_MULTIPLE_RDNS 161 +# define X509V3_R_INVALID_NAME 106 +# define X509V3_R_INVALID_NULL_ARGUMENT 107 +# define X509V3_R_INVALID_NULL_NAME 108 +# define X509V3_R_INVALID_NULL_VALUE 109 +# define X509V3_R_INVALID_NUMBER 140 +# define X509V3_R_INVALID_NUMBERS 141 +# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 +# define X509V3_R_INVALID_OPTION 138 +# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 +# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 +# define X509V3_R_INVALID_PURPOSE 146 +# define X509V3_R_INVALID_SAFI 164 +# define X509V3_R_INVALID_SECTION 135 +# define X509V3_R_INVALID_SYNTAX 143 +# define X509V3_R_ISSUER_DECODE_ERROR 126 +# define X509V3_R_MISSING_VALUE 124 +# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NO_CONFIG_DATABASE 136 +# define X509V3_R_NO_ISSUER_CERTIFICATE 121 +# define X509V3_R_NO_ISSUER_DETAILS 127 +# define X509V3_R_NO_POLICY_IDENTIFIER 139 +# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 +# define X509V3_R_NO_PUBLIC_KEY 114 +# define X509V3_R_NO_SUBJECT_DETAILS 125 +# define X509V3_R_ODD_NUMBER_OF_DIGITS 112 +# define X509V3_R_OPERATION_NOT_DEFINED 148 +# define X509V3_R_OTHERNAME_ERROR 147 +# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 +# define X509V3_R_POLICY_PATH_LENGTH 156 +# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 +# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 158 +# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 +# define X509V3_R_SECTION_NOT_FOUND 150 +# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 +# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 +# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 +# define X509V3_R_UNKNOWN_EXTENSION 129 +# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 +# define X509V3_R_UNKNOWN_OPTION 120 +# define X509V3_R_UNSUPPORTED_OPTION 117 +# define X509V3_R_UNSUPPORTED_TYPE 167 +# define X509V3_R_USER_TOO_LONG 132 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/redis/async.h b/src/components/redis/async.h new file mode 100644 index 0000000..e69d840 --- /dev/null +++ b/src/components/redis/async.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2009-2011, Salvatore Sanfilippo + * Copyright (c) 2010-2011, Pieter Noordhuis + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Redis nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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. + */ + +#ifndef __HIREDIS_ASYNC_H +#define __HIREDIS_ASYNC_H +#include "hiredis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct redisAsyncContext; /* need forward declaration of redisAsyncContext */ +struct dict; /* dictionary header is included in async.c */ + +/* Reply callback prototype and container */ +typedef void (redisCallbackFn)(struct redisAsyncContext*, void*, void*); +typedef struct redisCallback { + struct redisCallback *next; /* simple singly linked list */ + redisCallbackFn *fn; + int pending_subs; + void *privdata; +} redisCallback; + +/* List of callbacks for either regular replies or pub/sub */ +typedef struct redisCallbackList { + redisCallback *head, *tail; +} redisCallbackList; + +/* Connection callback prototypes */ +typedef void (redisDisconnectCallback)(const struct redisAsyncContext*, int status); +typedef void (redisConnectCallback)(const struct redisAsyncContext*, int status); + +/* Context for an async connection to Redis */ +typedef struct redisAsyncContext { + /* Hold the regular context, so it can be realloc'ed. */ + redisContext c; + + /* Setup error flags so they can be used directly. */ + int err; + char *errstr; + + /* Not used by hiredis */ + void *data; + + /* Event library data and hooks */ + struct { + void *data; + + /* Hooks that are called when the library expects to start + * reading/writing. These functions should be idempotent. */ + void (*addRead)(void *privdata); + void (*delRead)(void *privdata); + void (*addWrite)(void *privdata); + void (*delWrite)(void *privdata); + void (*cleanup)(void *privdata); + } ev; + + /* Called when either the connection is terminated due to an error or per + * user request. The status is set accordingly (REDIS_OK, REDIS_ERR). */ + redisDisconnectCallback *onDisconnect; + + /* Called when the first write event was received. */ + redisConnectCallback *onConnect; + + /* Regular command callbacks */ + redisCallbackList replies; + + /* Subscription callbacks */ + struct { + redisCallbackList invalid; + struct dict *channels; + struct dict *patterns; + } sub; +} redisAsyncContext; + +/* Functions that proxy to hiredis */ +redisAsyncContext *redisAsyncConnect(const char *ip, int port); +redisAsyncContext *redisAsyncConnectBind(const char *ip, int port, const char *source_addr); +redisAsyncContext *redisAsyncConnectBindWithReuse(const char *ip, int port, + const char *source_addr); +redisAsyncContext *redisAsyncConnectUnix(const char *path); +int redisAsyncSetConnectCallback(redisAsyncContext *ac, redisConnectCallback *fn); +int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn); +void redisAsyncDisconnect(redisAsyncContext *ac); +void redisAsyncFree(redisAsyncContext *ac); + +/* Handle read/write events */ +void redisAsyncHandleRead(redisAsyncContext *ac); +void redisAsyncHandleWrite(redisAsyncContext *ac); + +/* Command functions for an async context. Write the command to the + * output buffer and register the provided callback. */ +int redisvAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, const char *format, va_list ap); +int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, const char *format, ...); +int redisAsyncCommandArgv(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, int argc, const char **argv, const size_t *argvlen); +int redisAsyncFormattedCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, const char *cmd, size_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/redis/hiredis.h b/src/components/redis/hiredis.h new file mode 100644 index 0000000..a743760 --- /dev/null +++ b/src/components/redis/hiredis.h @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2009-2011, Salvatore Sanfilippo + * Copyright (c) 2010-2014, Pieter Noordhuis + * Copyright (c) 2015, Matt Stancliff , + * Jan-Erik Rediger + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Redis nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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. + */ + +#ifndef __HIREDIS_H +#define __HIREDIS_H +#include "read.h" +#include /* for va_list */ +#include /* for struct timeval */ +#include /* uintXX_t, etc */ +#include "sds.h" /* for sds */ + +#define HIREDIS_MAJOR 0 +#define HIREDIS_MINOR 13 +#define HIREDIS_PATCH 3 +#define HIREDIS_SONAME 0.13 + +/* Connection type can be blocking or non-blocking and is set in the + * least significant bit of the flags field in redisContext. */ +#define REDIS_BLOCK 0x1 + +/* Connection may be disconnected before being free'd. The second bit + * in the flags field is set when the context is connected. */ +#define REDIS_CONNECTED 0x2 + +/* The async API might try to disconnect cleanly and flush the output + * buffer and read all subsequent replies before disconnecting. + * This flag means no new commands can come in and the connection + * should be terminated once all replies have been read. */ +#define REDIS_DISCONNECTING 0x4 + +/* Flag specific to the async API which means that the context should be clean + * up as soon as possible. */ +#define REDIS_FREEING 0x8 + +/* Flag that is set when an async callback is executed. */ +#define REDIS_IN_CALLBACK 0x10 + +/* Flag that is set when the async context has one or more subscriptions. */ +#define REDIS_SUBSCRIBED 0x20 + +/* Flag that is set when monitor mode is active */ +#define REDIS_MONITORING 0x40 + +/* Flag that is set when we should set SO_REUSEADDR before calling bind() */ +#define REDIS_REUSEADDR 0x80 + +#define REDIS_KEEPALIVE_INTERVAL 15 /* seconds */ + +/* number of times we retry to connect in the case of EADDRNOTAVAIL and + * SO_REUSEADDR is being used. */ +#define REDIS_CONNECT_RETRIES 10 + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is the reply object returned by redisCommand() */ +typedef struct redisReply { + int type; /* REDIS_REPLY_* */ + long long integer; /* The integer when type is REDIS_REPLY_INTEGER */ + size_t len; /* Length of string */ + char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */ + size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */ + struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */ +} redisReply; + +redisReader *redisReaderCreate(void); + +/* Function to free the reply objects hiredis returns by default. */ +void freeReplyObject(void *reply); + +/* Functions to format a command according to the protocol. */ +int redisvFormatCommand(char **target, const char *format, va_list ap); +int redisFormatCommand(char **target, const char *format, ...); +int redisFormatCommandArgv(char **target, int argc, const char **argv, const size_t *argvlen); +int redisFormatSdsCommandArgv(sds *target, int argc, const char ** argv, const size_t *argvlen); +void redisFreeCommand(char *cmd); +void redisFreeSdsCommand(sds cmd); + +enum redisConnectionType { + REDIS_CONN_TCP, + REDIS_CONN_UNIX +}; + +/* Context for a connection to Redis */ +typedef struct redisContext { + int err; /* Error flags, 0 when there is no error */ + char errstr[128]; /* String representation of error when applicable */ + int fd; + int flags; + char *obuf; /* Write buffer */ + redisReader *reader; /* Protocol reader */ + + enum redisConnectionType connection_type; + struct timeval *timeout; + + struct { + char *host; + char *source_addr; + int port; + } tcp; + + struct { + char *path; + } unix_sock; + +} redisContext; + +redisContext *redisConnect(const char *ip, int port); +redisContext *redisConnectWithTimeout(const char *ip, int port, const struct timeval tv); +redisContext *redisConnectNonBlock(const char *ip, int port); +redisContext *redisConnectBindNonBlock(const char *ip, int port, + const char *source_addr); +redisContext *redisConnectBindNonBlockWithReuse(const char *ip, int port, + const char *source_addr); +redisContext *redisConnectUnix(const char *path); +redisContext *redisConnectUnixWithTimeout(const char *path, const struct timeval tv); +redisContext *redisConnectUnixNonBlock(const char *path); +redisContext *redisConnectFd(int fd); + +/** + * Reconnect the given context using the saved information. + * + * This re-uses the exact same connect options as in the initial connection. + * host, ip (or path), timeout and bind address are reused, + * flags are used unmodified from the existing context. + * + * Returns REDIS_OK on successful connect or REDIS_ERR otherwise. + */ +int redisReconnect(redisContext *c); + +int redisSetTimeout(redisContext *c, const struct timeval tv); +int redisEnableKeepAlive(redisContext *c); +void redisFree(redisContext *c); +int redisFreeKeepFd(redisContext *c); +int redisBufferRead(redisContext *c); +int redisBufferWrite(redisContext *c, int *done); + +/* In a blocking context, this function first checks if there are unconsumed + * replies to return and returns one if so. Otherwise, it flushes the output + * buffer to the socket and reads until it has a reply. In a non-blocking + * context, it will return unconsumed replies until there are no more. */ +int redisGetReply(redisContext *c, void **reply); +int redisGetReplyFromReader(redisContext *c, void **reply); + +/* Write a formatted command to the output buffer. Use these functions in blocking mode + * to get a pipeline of commands. */ +int redisAppendFormattedCommand(redisContext *c, const char *cmd, size_t len); + +/* Write a command to the output buffer. Use these functions in blocking mode + * to get a pipeline of commands. */ +int redisvAppendCommand(redisContext *c, const char *format, va_list ap); +int redisAppendCommand(redisContext *c, const char *format, ...); +int redisAppendCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen); + +/* Issue a command to Redis. In a blocking context, it is identical to calling + * redisAppendCommand, followed by redisGetReply. The function will return + * NULL if there was an error in performing the request, otherwise it will + * return the reply. In a non-blocking context, it is identical to calling + * only redisAppendCommand and will always return NULL. */ +void *redisvCommand(redisContext *c, const char *format, va_list ap); +void *redisCommand(redisContext *c, const char *format, ...); +void *redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/redis/libevent.h b/src/components/redis/libevent.h new file mode 100644 index 0000000..69e9533 --- /dev/null +++ b/src/components/redis/libevent.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2010-2011, Pieter Noordhuis + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Redis nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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. + */ + +#ifndef __HIREDIS_LIBEVENT_H__ +#define __HIREDIS_LIBEVENT_H__ +#include +#include "hiredis.h" +#include "async.h" + +typedef struct redisLibeventEvents { + redisAsyncContext *context; + struct event *rev, *wev; +} redisLibeventEvents; + +static void redisLibeventReadEvent(int fd, short event, void *arg) { + ((void)fd); ((void)event); + redisLibeventEvents *e = (redisLibeventEvents*)arg; + redisAsyncHandleRead(e->context); +} + +static void redisLibeventWriteEvent(int fd, short event, void *arg) { + ((void)fd); ((void)event); + redisLibeventEvents *e = (redisLibeventEvents*)arg; + redisAsyncHandleWrite(e->context); +} + +static void redisLibeventAddRead(void *privdata) { + redisLibeventEvents *e = (redisLibeventEvents*)privdata; + event_add(e->rev,NULL); +} + +static void redisLibeventDelRead(void *privdata) { + redisLibeventEvents *e = (redisLibeventEvents*)privdata; + event_del(e->rev); +} + +static void redisLibeventAddWrite(void *privdata) { + redisLibeventEvents *e = (redisLibeventEvents*)privdata; + event_add(e->wev,NULL); +} + +static void redisLibeventDelWrite(void *privdata) { + redisLibeventEvents *e = (redisLibeventEvents*)privdata; + event_del(e->wev); +} + +static void redisLibeventCleanup(void *privdata) { + redisLibeventEvents *e = (redisLibeventEvents*)privdata; + event_free(e->rev); + event_free(e->wev); + free(e); +} + +static int redisLibeventAttach(redisAsyncContext *ac, struct event_base *base) { + redisContext *c = &(ac->c); + redisLibeventEvents *e; + + /* Nothing should be attached when something is already attached */ + if (ac->ev.data != NULL) + return REDIS_ERR; + + /* Create container for context and r/w events */ + e = (redisLibeventEvents*)malloc(sizeof(*e)); + e->context = ac; + + /* Register functions to start/stop listening for events */ + ac->ev.addRead = redisLibeventAddRead; + ac->ev.delRead = redisLibeventDelRead; + ac->ev.addWrite = redisLibeventAddWrite; + ac->ev.delWrite = redisLibeventDelWrite; + ac->ev.cleanup = redisLibeventCleanup; + ac->ev.data = e; + + /* Initialize and install read/write events */ + e->rev = event_new(base, c->fd, EV_READ, redisLibeventReadEvent, e); + e->wev = event_new(base, c->fd, EV_WRITE, redisLibeventWriteEvent, e); + event_add(e->rev, NULL); + event_add(e->wev, NULL); + return REDIS_OK; +} +#endif diff --git a/src/components/redis/read.h b/src/components/redis/read.h new file mode 100644 index 0000000..2988aa4 --- /dev/null +++ b/src/components/redis/read.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2009-2011, Salvatore Sanfilippo + * Copyright (c) 2010-2011, Pieter Noordhuis + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Redis nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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. + */ + + +#ifndef __HIREDIS_READ_H +#define __HIREDIS_READ_H +#include /* for size_t */ + +#define REDIS_ERR -1 +#define REDIS_OK 0 + +/* When an error occurs, the err flag in a context is set to hold the type of + * error that occurred. REDIS_ERR_IO means there was an I/O error and you + * should use the "errno" variable to find out what is wrong. + * For other values, the "errstr" field will hold a description. */ +#define REDIS_ERR_IO 1 /* Error in read or write */ +#define REDIS_ERR_EOF 3 /* End of file */ +#define REDIS_ERR_PROTOCOL 4 /* Protocol error */ +#define REDIS_ERR_OOM 5 /* Out of memory */ +#define REDIS_ERR_OTHER 2 /* Everything else... */ + +#define REDIS_REPLY_STRING 1 +#define REDIS_REPLY_ARRAY 2 +#define REDIS_REPLY_INTEGER 3 +#define REDIS_REPLY_NIL 4 +#define REDIS_REPLY_STATUS 5 +#define REDIS_REPLY_ERROR 6 + +#define REDIS_READER_MAX_BUF (1024*16) /* Default max unused reader buffer. */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct redisReadTask { + int type; + int elements; /* number of elements in multibulk container */ + int idx; /* index in parent (array) object */ + void *obj; /* holds user-generated value for a read task */ + struct redisReadTask *parent; /* parent task */ + void *privdata; /* user-settable arbitrary field */ +} redisReadTask; + +typedef struct redisReplyObjectFunctions { + void *(*createString)(const redisReadTask*, char*, size_t); + void *(*createArray)(const redisReadTask*, int); + void *(*createInteger)(const redisReadTask*, long long); + void *(*createNil)(const redisReadTask*); + void (*freeObject)(void*); +} redisReplyObjectFunctions; + +typedef struct redisReader { + int err; /* Error flags, 0 when there is no error */ + char errstr[128]; /* String representation of error when applicable */ + + char *buf; /* Read buffer */ + size_t pos; /* Buffer cursor */ + size_t len; /* Buffer length */ + size_t maxbuf; /* Max length of unused buffer */ + + redisReadTask rstack[9]; + int ridx; /* Index of current read task */ + void *reply; /* Temporary reply pointer */ + + redisReplyObjectFunctions *fn; + void *privdata; +} redisReader; + +/* Public API for the protocol parser. */ +redisReader *redisReaderCreateWithFunctions(redisReplyObjectFunctions *fn); +void redisReaderFree(redisReader *r); +int redisReaderFeed(redisReader *r, const char *buf, size_t len); +int redisReaderGetReply(redisReader *r, void **reply); + +#define redisReaderSetPrivdata(_r, _p) (int)(((redisReader*)(_r))->privdata = (_p)) +#define redisReaderGetObject(_r) (((redisReader*)(_r))->reply) +#define redisReaderGetError(_r) (((redisReader*)(_r))->errstr) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/redis/sds.h b/src/components/redis/sds.h new file mode 100644 index 0000000..13be75a --- /dev/null +++ b/src/components/redis/sds.h @@ -0,0 +1,273 @@ +/* SDSLib 2.0 -- A C dynamic strings library + * + * Copyright (c) 2006-2015, Salvatore Sanfilippo + * Copyright (c) 2015, Oran Agra + * Copyright (c) 2015, Redis Labs, Inc + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Redis nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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. + */ + +#ifndef __SDS_H +#define __SDS_H + +#define SDS_MAX_PREALLOC (1024*1024) + +#include +#include +#include + +typedef char *sds; + +/* Note: sdshdr5 is never used, we just access the flags byte directly. + * However is here to document the layout of type 5 SDS strings. */ +struct __attribute__ ((__packed__)) sdshdr5 { + unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ + char buf[]; +}; +struct __attribute__ ((__packed__)) sdshdr8 { + uint8_t len; /* used */ + uint8_t alloc; /* excluding the header and null terminator */ + unsigned char flags; /* 3 lsb of type, 5 unused bits */ + char buf[]; +}; +struct __attribute__ ((__packed__)) sdshdr16 { + uint16_t len; /* used */ + uint16_t alloc; /* excluding the header and null terminator */ + unsigned char flags; /* 3 lsb of type, 5 unused bits */ + char buf[]; +}; +struct __attribute__ ((__packed__)) sdshdr32 { + uint32_t len; /* used */ + uint32_t alloc; /* excluding the header and null terminator */ + unsigned char flags; /* 3 lsb of type, 5 unused bits */ + char buf[]; +}; +struct __attribute__ ((__packed__)) sdshdr64 { + uint64_t len; /* used */ + uint64_t alloc; /* excluding the header and null terminator */ + unsigned char flags; /* 3 lsb of type, 5 unused bits */ + char buf[]; +}; + +#define SDS_TYPE_5 0 +#define SDS_TYPE_8 1 +#define SDS_TYPE_16 2 +#define SDS_TYPE_32 3 +#define SDS_TYPE_64 4 +#define SDS_TYPE_MASK 7 +#define SDS_TYPE_BITS 3 +#define SDS_HDR_VAR(T,s) struct sdshdr##T *sh = (struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T))); +#define SDS_HDR(T,s) ((struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T)))) +#define SDS_TYPE_5_LEN(f) ((f)>>SDS_TYPE_BITS) + +static inline size_t sdslen(const sds s) { + unsigned char flags = s[-1]; + switch(flags&SDS_TYPE_MASK) { + case SDS_TYPE_5: + return SDS_TYPE_5_LEN(flags); + case SDS_TYPE_8: + return SDS_HDR(8,s)->len; + case SDS_TYPE_16: + return SDS_HDR(16,s)->len; + case SDS_TYPE_32: + return SDS_HDR(32,s)->len; + case SDS_TYPE_64: + return SDS_HDR(64,s)->len; + } + return 0; +} + +static inline size_t sdsavail(const sds s) { + unsigned char flags = s[-1]; + switch(flags&SDS_TYPE_MASK) { + case SDS_TYPE_5: { + return 0; + } + case SDS_TYPE_8: { + SDS_HDR_VAR(8,s); + return sh->alloc - sh->len; + } + case SDS_TYPE_16: { + SDS_HDR_VAR(16,s); + return sh->alloc - sh->len; + } + case SDS_TYPE_32: { + SDS_HDR_VAR(32,s); + return sh->alloc - sh->len; + } + case SDS_TYPE_64: { + SDS_HDR_VAR(64,s); + return sh->alloc - sh->len; + } + } + return 0; +} + +static inline void sdssetlen(sds s, size_t newlen) { + unsigned char flags = s[-1]; + switch(flags&SDS_TYPE_MASK) { + case SDS_TYPE_5: + { + unsigned char *fp = ((unsigned char*)s)-1; + *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); + } + break; + case SDS_TYPE_8: + SDS_HDR(8,s)->len = newlen; + break; + case SDS_TYPE_16: + SDS_HDR(16,s)->len = newlen; + break; + case SDS_TYPE_32: + SDS_HDR(32,s)->len = newlen; + break; + case SDS_TYPE_64: + SDS_HDR(64,s)->len = newlen; + break; + } +} + +static inline void sdsinclen(sds s, size_t inc) { + unsigned char flags = s[-1]; + switch(flags&SDS_TYPE_MASK) { + case SDS_TYPE_5: + { + unsigned char *fp = ((unsigned char*)s)-1; + unsigned char newlen = SDS_TYPE_5_LEN(flags)+inc; + *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); + } + break; + case SDS_TYPE_8: + SDS_HDR(8,s)->len += inc; + break; + case SDS_TYPE_16: + SDS_HDR(16,s)->len += inc; + break; + case SDS_TYPE_32: + SDS_HDR(32,s)->len += inc; + break; + case SDS_TYPE_64: + SDS_HDR(64,s)->len += inc; + break; + } +} + +/* sdsalloc() = sdsavail() + sdslen() */ +static inline size_t sdsalloc(const sds s) { + unsigned char flags = s[-1]; + switch(flags&SDS_TYPE_MASK) { + case SDS_TYPE_5: + return SDS_TYPE_5_LEN(flags); + case SDS_TYPE_8: + return SDS_HDR(8,s)->alloc; + case SDS_TYPE_16: + return SDS_HDR(16,s)->alloc; + case SDS_TYPE_32: + return SDS_HDR(32,s)->alloc; + case SDS_TYPE_64: + return SDS_HDR(64,s)->alloc; + } + return 0; +} + +static inline void sdssetalloc(sds s, size_t newlen) { + unsigned char flags = s[-1]; + switch(flags&SDS_TYPE_MASK) { + case SDS_TYPE_5: + /* Nothing to do, this type has no total allocation info. */ + break; + case SDS_TYPE_8: + SDS_HDR(8,s)->alloc = newlen; + break; + case SDS_TYPE_16: + SDS_HDR(16,s)->alloc = newlen; + break; + case SDS_TYPE_32: + SDS_HDR(32,s)->alloc = newlen; + break; + case SDS_TYPE_64: + SDS_HDR(64,s)->alloc = newlen; + break; + } +} + +sds sdsnewlen(const void *init, size_t initlen); +sds sdsnew(const char *init); +sds sdsempty(void); +sds sdsdup(const sds s); +void sdsfree(sds s); +sds sdsgrowzero(sds s, size_t len); +sds sdscatlen(sds s, const void *t, size_t len); +sds sdscat(sds s, const char *t); +sds sdscatsds(sds s, const sds t); +sds sdscpylen(sds s, const char *t, size_t len); +sds sdscpy(sds s, const char *t); + +sds sdscatvprintf(sds s, const char *fmt, va_list ap); +#ifdef __GNUC__ +sds sdscatprintf(sds s, const char *fmt, ...) + __attribute__((format(printf, 2, 3))); +#else +sds sdscatprintf(sds s, const char *fmt, ...); +#endif + +sds sdscatfmt(sds s, char const *fmt, ...); +sds sdstrim(sds s, const char *cset); +void sdsrange(sds s, int start, int end); +void sdsupdatelen(sds s); +void sdsclear(sds s); +int sdscmp(const sds s1, const sds s2); +sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count); +void sdsfreesplitres(sds *tokens, int count); +void sdstolower(sds s); +void sdstoupper(sds s); +sds sdsfromlonglong(long long value); +sds sdscatrepr(sds s, const char *p, size_t len); +sds *sdssplitargs(const char *line, int *argc); +sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen); +sds sdsjoin(char **argv, int argc, char *sep); +sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen); + +/* Low level functions exposed to the user API */ +sds sdsMakeRoomFor(sds s, size_t addlen); +void sdsIncrLen(sds s, int incr); +sds sdsRemoveFreeSpace(sds s); +size_t sdsAllocSize(sds s); +void *sdsAllocPtr(sds s); + +/* Export the allocator used by SDS to the program using SDS. + * Sometimes the program SDS is linked to, may use a different set of + * allocators, but may want to allocate or free things that SDS will + * respectively free or allocate. */ +void *sds_malloc(size_t size); +void *sds_realloc(void *ptr, size_t size); +void sds_free(void *ptr); + +#ifdef REDIS_TEST +int sdsTest(int argc, char *argv[]); +#endif + +#endif diff --git a/src/components/syslogd/logging.c b/src/components/syslogd/logging.c new file mode 100644 index 0000000..40a679d --- /dev/null +++ b/src/components/syslogd/logging.c @@ -0,0 +1,73 @@ +/************************************************************************* + > File Name: logging.c + > Author: + > Mail: + > Created Time: 2018å¹´06月18æ—¥ 星期一 22æ—¶45分43ç§’ + ************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include "rt_common.h" +#include "rt_time.h" +#include "rt_util.h" +#include "rt_string.h" +#include "logging.h" +#include "MESA_prof_load.h" +#include "MESA_handle_logger.h" + +void mesa_logging_print(int log_level, char *module, char *msg) +{ + + MESA_handle_runtime_log(logging_sc_lid.run_log_handle, log_level, module, msg); + + return; +} + +int mesa_logging_mkfile(char *file, size_t size) +{ + char tm[64] = {0}; + char pname[64]= {0}; + + assert(file); + + if (size < 32) + return -1; + + rt_curr_tms2str(EVAL_TM_STYLE, tm, 63); + rt_get_pname_by_pid(getpid(), &pname[0]); + snprintf(file, 255, "%s-%s-%d-%d-%s.log", pname, getpwuid(getuid())->pw_name, getpwuid(getuid())->pw_uid, getpwuid(getuid())->pw_gid, tm); + + return 0; +} + +void cert_syslog_init(char *config) +{ + MESA_load_profile_int_def(config, (const char *)"SYSTEM",(const char *)"DEBUG_SWITCH", + &logging_sc_lid.debug_switch, 1); + MESA_load_profile_int_def(config, (const char *)"SYSTEM",(const char *)"RUN_LOG_LEVEL", + &logging_sc_lid.run_log_level, 10); + MESA_load_profile_string_def(config, (const char *)"SYSTEM",(const char *)"RUN_LOG_PATH", + logging_sc_lid.run_log_path, 128, NULL); + + char file[32] = {0}; + mesa_logging_mkfile(file, 32); + STRCAT(logging_sc_lid.run_log_path, file); + + logging_sc_lid.run_log_handle = MESA_create_runtime_log_handle(logging_sc_lid.run_log_path, logging_sc_lid.run_log_level); + if(logging_sc_lid.run_log_handle == NULL){ + printf("Create log runtime_log_handle error, init failed!"); + goto finish; + }else{ + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Log module initialization"); + } +finish: + return; +} + + diff --git a/src/components/syslogd/logging.h b/src/components/syslogd/logging.h new file mode 100644 index 0000000..7e9a338 --- /dev/null +++ b/src/components/syslogd/logging.h @@ -0,0 +1,51 @@ +/************************************************************************* + > File Name: logging.h + > Author: + > Mail: + > Created Time: 2018å¹´06月18æ—¥ 星期一 22æ—¶45分58ç§’ + ************************************************************************/ + +#ifndef _LOGGING_H +#define _LOGGING_H + +#define MODULE_NAME "CA" + +#define RLOG_LV_DEBUG 10 +#define RLOG_LV_INFO 20 +#define RLOG_LV_FATAL 30 + +typedef struct RTLogInit2Data_ { + int debug_switch; + + int run_log_level; + + char run_log_path[256]; + + void *run_log_handle; +} RTLogInit2Data; + +RTLogInit2Data logging_sc_lid; + +/* The maximum length of the log message */ +#define RT_LOG_MAX_LOG_MSG_LEN 2048 + +extern void mesa_logging_print(int log_level, char *module, char *msg); + +#define mesa_log(x, y, z, ...) do { \ + char _sc_log_msg[RT_LOG_MAX_LOG_MSG_LEN] = ""; \ + char *_sc_log_temp = _sc_log_msg; \ + if ( !x ) \ + { } else { \ + snprintf(_sc_log_temp, \ + (RT_LOG_MAX_LOG_MSG_LEN - \ + (_sc_log_temp - _sc_log_msg)), \ + __VA_ARGS__); \ + mesa_logging_print(y, z, _sc_log_msg); \ + } \ + } while(0) + +#define mesa_runtime_log(level, module, ...) mesa_log(logging_sc_lid.debug_switch, level, module, __VA_ARGS__) + +extern void cert_syslog_init(char *config); + +#endif diff --git a/src/components/syslogd/syslog.mk b/src/components/syslogd/syslog.mk new file mode 100644 index 0000000..58ae5e1 --- /dev/null +++ b/src/components/syslogd/syslog.mk @@ -0,0 +1,40 @@ + + +# standard component Makefile header +sp := $(sp).x +dirstack_$(sp) := $(d) +d := $(dir) + +# component specification + +OBJS_$(d) :=\ + $(OBJ_DIR)/logging.o\ + +CFLAGS_LOCAL += -I$(d) +$(OBJS_$(d)): CFLAGS_LOCAL := -std=gnu99 -W -Wall -Wunused-parameter -g -O3 \ + -I$(d)\ + -I$(d)/../../rt\ + -I$(d)/../../inc\ + + +# standard component Makefile rules + +DEPS_$(d) := $(OBJS_$(d):.o=.d) + +#LIBS_LIST := $(LIBS_LIST) $(LIBRARY) +LIBS_LIST := $(LIBS_LIST) + +CLEAN_LIST := $(CLEAN_LIST) $(OBJS_$(d)) $(DEPS_$(d)) + +-include $(DEPS_$(d)) + +#$(LIBRARY): $(OBJS) +# $(MYARCHIVE) + +$(OBJ_DIR)/%.o: $(d)/%.c + $(COMPILE) + +# standard component Makefile footer + +d := $(dirstack_$(sp)) +sp := $(basename $(sp)) diff --git a/src/inc/MESA_atomic.h b/src/inc/MESA_atomic.h new file mode 100644 index 0000000..76e5b80 --- /dev/null +++ b/src/inc/MESA_atomic.h @@ -0,0 +1,38 @@ +#ifndef _MESA_ATOMIC_H_ +#define _MESA_ATOMIC_H_ + + +#if(__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__ >= 411) +typedef unsigned long MESA_ATOMIC_T; +#define MESA_ATOMIC_SET(v, i) __sync_lock_test_and_set((&v), i) +#define MESA_ATOMIC_READ(v) __sync_or_and_fetch((&v), 0) +#define MESA_ATOMIC_INC(v) __sync_add_and_fetch((&v),1) +#define MESA_ATOMIC_DEC(v) __sync_sub_and_fetch((&v),1) +#define MESA_ATOMIC_ADD(v,add) __sync_add_and_fetch((&v),(add)) +#define MESA_ATOMIC_SUB(v,sub) __sync_sub_and_fetch((&v),(sub)) +#else +#include +typedef atomic_t MESA_ATOMIC_T; +#define MESA_ATOMIC_SET(v, i) atomic_set((&v), i) +#define MESA_ATOMIC_READ(v) atomic_read((&v)) +#define MESA_ATOMIC_INC(v) atomic_inc((&v)) +#define MESA_ATOMIC_DEC(v) atomic_dec((&v)) +#define MESA_ATOMIC_ADD(v, add) atomic_add((add),(&v)) +#define MESA_ATOMIC_SUB(v, sub) atomic_sub((sub),(&v)) +#endif + + +#ifdef __tilegx__ +#include +typedef int MESA_ATOMIC_T; +#define MESA_ATOMIC_SET(v, i) arch_atomic_exchange((&v), i) +#define MESA_ATOMIC_READ(v) arch_atomic_or((&v), 0) +#define MESA_ATOMIC_INC(v) arch_atomic_add((&v), 1) +#define MESA_ATOMIC_DEC(v) arch_atomic_sub((&v), 1) +#define MESA_ATOMIC_ADD(v, add) arch_atomic_add((&v), add) +#define MESA_ATOMIC_SUB(v, sub) arch_atomic_sub((&v), sub) +#endif + + +#endif + diff --git a/src/inc/MESA_handle_logger.h b/src/inc/MESA_handle_logger.h new file mode 100644 index 0000000..735a9f1 --- /dev/null +++ b/src/inc/MESA_handle_logger.h @@ -0,0 +1,63 @@ +#ifndef MESA_HANDLE__LOGGER_H +#define MESA_HANDLE__LOGGER_H + +/* + * runtime_log with handle, + * based on runtime_log. + * yang wei + * create time:2014-03-24 + * version:20140324 + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define MESA_HANDLE_RUNTIME_LOG(handle, lv, mod, fmt, args...) \ + MESA_handle_runtime_log((handle), (lv), (mod), "file %s, line %d, " fmt, \ + __FILE__, __LINE__, ##args) + +/* + * name: MESA_create_runtime_log_handle + * functionality: get runtime_log handle; + * params: + * file_path: path of log file, like "./log/runtime_log"; + * level: level of log; + * returns: + * not NULL, if succeeded; + * NULL, if file is not absolute path, or failed to create log file; + */ +void *MESA_create_runtime_log_handle(const char *file_path, int level); + +/* + * name: MESA_handle_runtime_log + * functionality: appends log message to runtime log file; + * params: + * handle:handle of runtime log, which is created by MESA_create_runtime_log_handle; + * level: log level, messages with level value smaller the global var + * "runtime_log_level" are ignored; + * module: name of loggin module; + * fmt: format string; + * returns: + * none; + */ +void MESA_handle_runtime_log(void *handle, int level, const char *module, const char *fmt, ...); + +/* + * name: MESA_destroy_runtime_log_handle + * functionality: release runtime log handle memory. + * params: + * handle: runtime log handle which is going to be released; + * returns: + * none; + */ +void MESA_destroy_runtime_log_handle(void *handle); + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/src/inc/MESA_htable.h b/src/inc/MESA_htable.h new file mode 100644 index 0000000..ac7c2b2 --- /dev/null +++ b/src/inc/MESA_htable.h @@ -0,0 +1,419 @@ +#ifndef __MESA_HTABLE_H_ +#define __MESA_HTABLE_H_ +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include +#include + +/* + * general purpose hash table implementation. + * + * xiang hong + * 2002-07-28 + *History: + * 2012-03-23 zhengchao add thread safe option and link expire feature; + * 2014-01-27 lijia add reentrant feature. + */ +#define MESA_HTABLE_VERSION_MACRO (20170104) +extern const unsigned int MESA_HTABLE_VERSION_INT; + +#define MESA_HASH_DEBUG (0) + +#define COMPLEX_KEY_SWITCH (1) + +#define ELIMINATE_TYPE_NUM (1) +#define ELIMINATE_TYPE_TIME (2) +#define ELIMINATE_TYPE_MANUAL (3) /* delete oldest item by manual */ + +typedef void * MESA_htable_handle; + + +#define HASH_MALLOC(_n_) malloc(_n_) +#define HASH_FREE(_p_) free(_p_) + + +#ifndef uchar +#define uchar unsigned char +#endif +#ifndef uint +#define uint unsigned int +#endif + +/* eliminate algorithm */ +#define HASH_ELIMINATE_ALGO_FIFO (0) /* by default */ +#define HASH_ELIMINATE_ALGO_LRU (1) + +/* + * hash key compare function prototype, see hash_key_comp(). + * return value: + * 0:key1 and key2 are equal; + * other:key1 and key2 not equal. + */ +typedef int key_comp_fun_t(const uchar * key1, uint size1, const uchar * key2, uint size2); + +/* + * hash key->index computing function prototype, see hash_key2index(). + */ +typedef uint key2index_fun_t(const MESA_htable_handle table, const uchar * key, uint size); + +typedef void MESA_htable_data_free_cbfun_t(void *data); + +typedef int MESA_htable_expire_notify_cbfun_t(void *data, int eliminate_type); + +typedef uchar* MESA_htable_complex_key_dup_cbfun_t(const uchar *key, uint key_size); + +typedef void MESA_htable_complex_key_free_cbfun_t(uchar *key, uint key_size); + +typedef long hash_cb_fun_t(void *data, const uchar *key, uint size, void *user_arg); + +/* + * thread_safe: 0:create hash table without thread safe features; + * positive:the bigger number has more performance, less collide, but less timeout accuracy. + * max number is 1024. + * recursive: 0:can't recursive call MESA_htable_xxx series function + * 1:can recursive call MESA_htable_xxx series function. + * hash_slot_size: how big do you want the table to be, must be 2^N; + * max_elem_num: the maximum elements of the HASH-table,0 means infinite; + * key_comp: hash key compare function, use default function if NULL; + * suggest implement by yourself. + * key2index: hash key->index computing function, use default function if NULL; + * suggest use MESA_htable built-in function. + * data_free: release resources function; + * data_expire_with_condition: + * if expire_time > 0 and data_expire_with_condition != NULL, + * then call this function when an element expired, and give the reason by the 'type' + * if expire_time > 0 and data_expire_with_condition is NULL, + * eliminate the item immediately; + * args: + * data: pointer to attached data; + * type: item eliminate reason, ELIMINATE_TYPE_NUM or ELIMINATE_TYPE_TIME; + * return value of 'data_expire_with_condition': + * 1: the item can be eliminated; + * 0: the item can't be eliminated, renew the item. + * eliminate_type: the algorithm of elimanate a expired element, 0:FIFO; 1:LRU. + * expire_time: the element expire time in second, 0 means infinite. + */ +typedef struct{ + unsigned int thread_safe; + int recursive; + unsigned int hash_slot_size; + unsigned int max_elem_num; + int eliminate_type; + int expire_time; + key_comp_fun_t * key_comp; + key2index_fun_t * key2index; + void (* data_free)(void *data); + int (*data_expire_with_condition)(void *data, int eliminate_type); +#if COMPLEX_KEY_SWITCH + uchar* (*complex_key_dup)(const uchar *key, uint key_size); + void (* complex_key_free)(uchar *key, uint key_size); +#endif +}MESA_htable_create_args_t; + + +/* All of the following functions return value */ +typedef enum{ + MESA_HTABLE_RET_OK = 0, /* success */ + MESA_HTABLE_RET_COMMON_ERR = -1, /* general¡¢undefined errors */ + MESA_HTABLE_RET_ARG_ERR = -2, /* invalid args */ + MESA_HTABLE_RET_NUM_FULL = -3, /* htable number full */ + MESA_HTABLE_RET_QEMPTY = -4, /* htable empty */ + MESA_HTABLE_RET_DUP_ITEM = -5, /* duplicate item */ + MESA_HTABLE_RET_NOT_FOUND = -6, /* not found item */ + MESA_HTABLE_RET_LEN_ERR = -7, /* length error */ + MESA_HTABLE_RET_CANT_GET_LOCK = -8, /* can't get lock in non-block mode */ + MESA_HTABLE_RET_GET_LOCK_TMOUT = -9, /* get lock timeout */ +}MESA_htable_errno_t; + +/* + * You should never use this API to create a hash table, use MESA_htable_born() instead. + * name: MESA_htable_create + * functionality: allocats memory for hash slots, and initialize hash structure; + * param: + * args: argments set; + * args_len: length of argment set; + * returns: + * NULL : error; + * Non-NULL : success; + */ +MESA_htable_handle MESA_htable_create(const MESA_htable_create_args_t *args, int args_struct_len); + +/* + * get total number of HASH element. +*/ +unsigned int MESA_htable_get_elem_num(const MESA_htable_handle table); + +/* + * name: MESA_htable_destroy + * functionality: cleans up hash structure, frees memory occupied; + * param: + * table: who is the victim; + * func: callback function to clean up data attached to hash items, has higher priority level than MESA_htable_data_free_cbfun_t in initialization. + + * returns: + * always returns 0; + */ +int MESA_htable_destroy(MESA_htable_handle table, void (* func)(void *)); + +/* + * name: MESA_htable_add + * functionality: adds item to table, call hash_expire() if elem_count gets + * bigger than threshold_hi, and adjust threshold; + * param: + * table: to which table do you want to add; + * key: what is the label; + * size: how long is the label; + * data: what data do you want to attach; + * returns: + * >0: success,return hash elems' linklist size; + * 0: success. + * <0: error, refer to MESA_htable_errno_t. + */ +int MESA_htable_add(MESA_htable_handle table, const uchar * key, uint size, const void *data); + +/* + TODO, + sturct hash_status{ + uint hlist_max; + uint hlist_max_slot_index; + uint cur_index_hlist_num; + uint hash_value; + }; + + ÐÂÔöMESA_htable_add_feedback(MESA_htable_handle table, const uchar * key, uint size, const void *data, sturct hash_status *hstat); + ÓÃÓÚ·µ»ØHASH±íµÄһЩ¹Ø¼üÐÅÏ¢, + +*/ + +#if 0 +/* + * name: hash_add_with_expire + * functionality: adds item to table, than call hash_expire() on its list + * param: + * table: to which table do you want to add; + * key: what is the label; + * size: how long is the label; + * data: what data do you want to attach; + * returns: + * >0 success,return hash elems' linklist size + * -1, duplicates found and can't add this one; + * -2, memory failure; + */ +int MESA_hash_add_with_expire_v3(MESA_htable_inner_t * table, uchar * key, uint size, void * data); + +#endif + + +/* + * name: MESA_htable_del + * functionality: deletes item from table. + * param: + * table: from which table do you want to delete; + * key : what is the label; + * size : how long is the label; + * func : callback function to clean up data attached to hash items, + if this pointer is NULL will call "data_free" in MESA_hash_create(), + * returns: + * 0 : success; + * <0: error, refer to MESA_htable_errno_t. + */ +int MESA_htable_del(MESA_htable_handle table, const uchar * key, uint size, + void (* func)(void *)); +/* + TODO: + ÐÂÔöMESA_htable_del_with_hash(MESA_htable_handle table, const uchar * key, uint size, uint hash_value, + void (* func)(void *)); + ɾ³ýʱ´øÈë֮ǰµÄhash_value, ¼õÉÙÒ»´Îhash¼ÆË㿪Ïú, +*/ + + +/* + * name: MESA_htable_del_oldest_manual + * functionality: deletes oldest item from table. + * param: + * table: from which table do you want to delete; + * func : callback function to clean up data attached to hash items, + if this pointer is NULL will call "data_free" in MESA_hash_create(), + * batch_num: delete oldest items. + * returns: + * 0, do nothing ; + * >0, delete items; + */ +int MESA_htable_del_oldest_manual(MESA_htable_handle table, void (* func)(void *), int batch_num); + +/* + * name: MESA_htable_search + * functionality: selects item from table; + * param: + * table: from which table do you want to select; + * key : what is the label; + * size : how long is the label; + * + * return: + * not NULL :pointer to attached data; + * NULL :not found(thus be careful if you are attaching NULL data on purpose). + */ +void *MESA_htable_search(const MESA_htable_handle table, const uchar * key, uint size); + +/* + * name: MESA_htable_search_cb + * functionality: selects item from table, and then call 'cb', reentrant; + * in param: + * table: from which table do you want to select; + * key : what is the label; + * size : how long is the label; + * cb : call this function when found the attached data; + * arg : the argument of "cb" function. + * out param: + * cb_ret: the return value of the function "cb". + * return: + * not NULL :pointer to attached data; + * NULL :not found(thus be careful if you are attaching NULL data on purpose). + */ +void *MESA_htable_search_cb(const MESA_htable_handle table, const uchar * key, uint size, + hash_cb_fun_t *cb, void *arg, long *cb_ret); + +/* + * name: MESA_htable_iterate + * functionality: iterates each hash item; + * params: + * table: what table is to be iterated; + * func: what do you want to do to each attached data item; + * returns: + * 0: iterates all items; + * -1: error; + */ +int MESA_htable_iterate(MESA_htable_handle table, + void (* func)(const uchar * key, uint size, void * data, void *user), void * user); + + +/* + * name: MESA_htable_iterate_bytime + * functionality: iterates each hash item by your demand; + * note: + * if 'thread_safe' more than one, this function is not correct. + * params: + * table: what table is to be iterated; + * iterate_type: 1: newest item first; 2: oldest item first; + * iterate_cb: what do you want to do to each attached data item; + * return value of iterate_cb: + * refer to ITERATE_CB_RET_xxx; + * returns: + * 0: iterates all items; + * -1: uncomplete break. + * -2: error; + */ +#define ITERATE_CB_RET_CONTINUE_FLAG (0) /* default, like MESA_htable_iterate() */ +#define ITERATE_CB_RET_BREAK_FLAG (1<<1) /* break iterate, return from MESA_htable_iterate_bytime() immediately */ +#define ITERATE_CB_RET_DEL_FLAG (1<<2) /* del this item, like but faster than call MESA_htable_del() */ +#define ITERATE_CB_RET_REVERSE_FLAG (1<<3) /* if the item is newest item, it will become the oldest item, and vice versa */ +#define ITERATE_CB_RET_REMOVE_BUT_NOT_FREE (1<<4) /* only remove the item from Hash table, but don't free the attached data, be careful */ + +#define ITERATE_TYPE_NEWEST_FIRST (1) +#define ITERATE_TYPE_OLDEST_FIRST (2) +int MESA_htable_iterate_bytime(MESA_htable_handle table, int iterate_type, + int (*iterate_cb)(const uchar * key, uint size, void * data, void *user), void * user); + +/* + args: + print_switch: + 0: disable print message; + 1: enable print message; +*/ +void MESA_htable_print_crtl(MESA_htable_handle table, int print_switch); + + +/* + Create a htable handle and Alloc memory, and set default option, + but can't running before call MESA_htable_mature(). + + return value: + not NULL: success. + NULL : error. +*/ +MESA_htable_handle MESA_htable_born(void); + +/* + MESA_htable option definition. +*/ +enum MESA_htable_opt{ + MHO_THREAD_SAFE = 0, /* must be int, 1:create hash table with thread safe features, default is 0 */ + MHO_MUTEX_NUM, /* must be int, valid only if MHO_THREAD_SAFE is not zero, max value is 1024, defalut is 1. the bigger number has more performance and less mutex collide, but less timeout accuracy */ + MHO_HASH_SLOT_SIZE, /* must be unsigned int, default is 1048576. */ + MHO_HASH_MAX_ELEMENT_NUM, /* must be unsigned int, defalut is 0, means infinite */ + MHO_EXPIRE_TIME, /* must be int, defalut is 0, means infinite */ + MHO_ELIMIMINATE_TYPE, /* must be int, valid only if MHO_EXPIRE_TIME is not zero. HASH_ELIMINATE_ALGO_FIFO or HASH_ELIMINATE_ALGO_LRU, defalut HASH_ELIMINATE_ALGO_FIFO */ + MHO_CBFUN_KEY_COMPARE, /* must be key_comp_fun_t, hash key compare function, use default function if NULL */ + MHO_CBFUN_KEY_TO_INDEX, /* must be key2index_fun_t, hash key->index computing function, use default function if NULL */ + MHO_CBFUN_DATA_FREE, /* must be MESA_htable_data_free_cbfun_t, release resources function */ + /* data_expire_notify, must be MESA_htable_expire_notify_cbfun_t, + * if expire_time > 0 and data_expire_notify != NULL, + * then call this function when an element expired, and give the reason by the 'type' + * if expire_time > 0 and data_expire_notify is NULL, + * eliminate the item immediately; + * args: + * data: pointer to attached data; + * type: item eliminate reason, ELIMINATE_TYPE_NUM or ELIMINATE_TYPE_TIME; + * return value of 'data_expire_with_condition': + * 1: the item can be eliminated; + * 0: the item can't be eliminated, renew the item. + */ + MHO_CBFUN_DATA_EXPIRE_NOTIFY, + MHO_CBFUN_COMPLEX_KEY_DUP, /* must be MESA_htable_complex_key_dup_cbfun_t, if key store in a complex struct, caller must be implement this duplicate function. */ + MHO_CBFUN_COMPLEX_KEY_FREE, /* must be MESA_htable_complex_key_free_cbfun_t, if key store in a complex struct, caller must be implement this duplicate function. */ + MHO_AUTO_UPDATE_TIME, /* must be int, create a background thread used to update current_time instead of time(NULL). 1:enable; 0:disable; default value is 0; */ + MHO_SCREEN_PRINT_CTRL, /* must be int, 1:enable screen print; 0:disable screen print; default is 1. */ + MHO_HASH_LIST_COLLIDE_THRESHOLD, /* must be int, write log when hash collide number more than this, default is 100, 0 means infinite. */ + MHO_HASH_LOG_FILE, /* must be char * with EOF, default is "./hash_list_collide.log", opt_len is strlen(optval) */ + MHO_HASH_SEARCH_MAX_TIMES, /* must be int, max compare items in once MESA_htable_search() */ + MHO_HASH_SEARCH_AVG_TIMES, /* must be double, average compare items in all previous MESA_htable_search() */ + __MHO_MAX_VAL, /* caller can't use this definition, it's value maybe changed in next version!! */ +}; + + +/* + to set features of specified MESA_htable handle. + opt_type: option type, refer to enum MESA_htable_opt; + opt_val : option value, depend on opt type; + opt_len : opt_val size, depend on opt type; + + return value: + 0 :success; + <0:error; +*/ +int MESA_htable_set_opt(MESA_htable_handle table, enum MESA_htable_opt opt_type, void *opt_val, int opt_len); + +/* + to get features of specified MESA_htable handle. + opt_type: option type, refer to enum MESA_htable_opt; + opt_val : option value, depend on opt type; + opt_len : value-result argument, opt_val size, depend on opt type; + + return value: + 0 :success; + <0:error; +*/ +int MESA_htable_get_opt(MESA_htable_handle api_table, enum MESA_htable_opt opt_type, void *opt_val, int *opt_len); + +/* + Construct htable and ready to running. + + return value: + 0 : success; + <0: error. +*/ +int MESA_htable_mature(MESA_htable_handle table); + + +#ifdef __cplusplus +} +#endif + +#endif /* _LIB_HASH_H_INCLUDED_ */ + + diff --git a/src/inc/MESA_list.h b/src/inc/MESA_list.h new file mode 100644 index 0000000..6ad7c45 --- /dev/null +++ b/src/inc/MESA_list.h @@ -0,0 +1,34 @@ +#ifndef _MESA_LIST_H_ +#define _MESA_LIST_H_ + +typedef struct MESA_list{ + struct MESA_list *nextele; + struct MESA_list *preele; + void *quiddity; +}MESA_list_t; + + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define MESA_LIST_VERSION_MACRO (20150529) +extern const unsigned int MESA_LIST_VERSION_INT; + +void MESA_list_init_head(struct MESA_list *head); +int MESA_list_is_empty(const struct MESA_list *head); +void MESA_list_add(struct MESA_list *head, struct MESA_list *new_list); +void MESA_list_add_tail(struct MESA_list *head, struct MESA_list *new_list); +void MESA_list_del(struct MESA_list *head, struct MESA_list *del_list); +void MESA_list_move(struct MESA_list *head, struct MESA_list *list); +void MESA_list_move_tail(struct MESA_list *head, struct MESA_list *list); +struct MESA_list *MESA_list_join_n(struct MESA_list *head, struct MESA_list *op_place, struct MESA_list *new_obj); +struct MESA_list *MESA_list_join_p(struct MESA_list *head, struct MESA_list *new_obj, struct MESA_list *op_place); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/inc/MESA_list_count.h b/src/inc/MESA_list_count.h new file mode 100644 index 0000000..884ee74 --- /dev/null +++ b/src/inc/MESA_list_count.h @@ -0,0 +1,31 @@ +#ifndef _MESA_LIST_COUNT_H_ +#define _MESA_LIST_COUNT_H_ + +typedef struct MESA_list_count{ + struct MESA_list_count *nextele; + struct MESA_list_count *preele; + void *quiddity; +}MESA_list_count_t; + +#ifdef __cplusplus +extern "C" +{ +#endif + +void MESA_list_count_init_head(struct MESA_list_count *head); +long MESA_list_count_get_count(const struct MESA_list_count *head); +int MESA_list_count_is_empty(const struct MESA_list_count *head); +void MESA_list_count_add(struct MESA_list_count *head, struct MESA_list_count *new_list); +void MESA_list_count_add_tail(struct MESA_list_count *head, struct MESA_list_count *new_list); +void MESA_list_count_del(struct MESA_list_count *head, struct MESA_list_count *del_list); +void MESA_list_count_move(struct MESA_list_count *head, struct MESA_list_count *list); +void MESA_list_count_move_tail(struct MESA_list_count *head, struct MESA_list_count *list); +struct MESA_list_count *MESA_list_count_join_n(struct MESA_list_count *head, struct MESA_list_count *op_place, struct MESA_list_count *new_obj); +struct MESA_list_count *MESA_list_count_join_p(struct MESA_list_count *head, struct MESA_list_count *new_obj, struct MESA_list_count *op_place); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/inc/MESA_list_queue.h b/src/inc/MESA_list_queue.h new file mode 100644 index 0000000..08ce32b --- /dev/null +++ b/src/inc/MESA_list_queue.h @@ -0,0 +1,115 @@ +#ifndef _MESA_LIST_QUEUE_H_ +#define _MESA_LIST_QUEUE_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* + MESA_list µÚÈý°æ£¬ + 1-Ôö¼ÓḬ̈߳²È«ÌØÐÔ; + 2-Òþ²ØÄÚ²¿½á¹¹, ¸ü°²È«¡¢½Ó¿Ú¸ü¼ò½à; + 3-µ÷ÓÃÕßÎÞÐè×ÔÐйÜÀí½Úµã½á¹¹£¬Ê¹Óøü·½±ã; +*/ + +#define MESA_LIST_QUEUE_VERSION_MACRO (20160308) +extern const unsigned int MESA_LIST_QUEUE_VERSION_INT; + +#define MESA_LIST_OP_PLACE_HEAD (0x1) +#define MESA_LIST_OP_PLACE_TAIL (0x2) + +#define MESA_list_GET (0x1) +#define MESA_list_JOIN (0x2) + +#define MESA_list_BOLCK (0x4) +#define MESA_list_NONBOLCK (0x8) + +#define MESA_list_JOIN_BLOCK (MESA_list_JOIN|MESA_list_BOLCK) +#define MESA_list_JOIN_NONBLOCK (MESA_list_JOIN|MESA_list_NONBOLCK) +#define MESA_list_GET_BLOCK (MESA_list_GET|MESA_list_BOLCK) +#define MESA_list_GET_NONBLOCK (MESA_list_GET|MESA_list_NONBOLCK) + +typedef void * MESA_lqueue_head; +typedef int (* MESA_lqueue_cb_t)(void *data, long data_len, void *arg); + +/* All of the following functions return value */ +typedef enum{ + MESA_QUEUE_RET_OK = 0, /* success */ + MESA_QUEUE_RET_COMMON_ERR = -1, /* general¡¢undefined errors */ + MESA_QUEUE_RET_ARG_ERR = -2, /* invalid args */ + MESA_QUEUE_RET_NUM_FULL = -3, /* queue number full */ + MESA_QUEUE_RET_MEM_FULL = -4, /* queue memory full */ + MESA_QUEUE_RET_QEMPTY = -5, /* queue empty */ + MESA_QUEUE_RET_LEN_ERR = -6, /* length error */ + MESA_QUEUE_RET_CANT_GET_LOCK = -7, /* can't get lock in non-block mode */ + MESA_QUEUE_RET_GET_LOCK_TMOUT = -8, /* get lock timeout */ +}MESA_queue_errno_t; + +/* + args description: + [IN] + thread_safe : 1:create thread safe queue; 0:without thread safe insurance. + max_item_num: maximum queue items of the queue, 0 means infinity. +*/ +MESA_lqueue_head MESA_lqueue_create(int thread_safe, long max_item_num); + +/* + attention: + The follow two functions is get some value of queue in a moment, + however, the value you got is not exactly, + because it's maybe changed immediately by other thread when this functions is return. +*/ +long MESA_lqueue_get_mem_used(MESA_lqueue_head head); +long MESA_lqueue_get_count(MESA_lqueue_head head); + + +/* + args description: + [IN]: + lq_head : the handler of MESA_lqueue. + + [OUT]: + data : receive buffer. + + [IN && OUT]: + data_len: + is value-result argument, like "addrlen of recvfrom(2)", + the caller should initialize the size of the 'data', + will modified on return to indicate the actual size of the queue item. + +*/ +int MESA_lqueue_read_head(MESA_lqueue_head lq_head, void *data, long *data_len); +int MESA_lqueue_get_head(MESA_lqueue_head lqhead, void *data, long *data_len); + +/* + if return value of "cb" is 0, the behaviour is like MESA_lqueue_read_head(), + else if return value of "cb" is not 0, the behaviour is like MESA_lqueue_get_head(). +*/ +int MESA_lqueue_detect_get_head(MESA_lqueue_head lq_head, MESA_lqueue_cb_t cb, void *data, long *data_len, void *cb_arg); +int MESA_lqueue_get_tail(MESA_lqueue_head lq_head, void *data, long *data_len); + +int MESA_lqueue_join_head(MESA_lqueue_head lq_head, const void *data, long data_len); +int MESA_lqueue_join_tail(MESA_lqueue_head lq_head, const void *data, long data_len); + + +/* these functions features same with above no "try", + except shall return immediately, in other word is "Non-block mode"! + */ +int MESA_lqueue_try_read_head(MESA_lqueue_head lq_head, void *data, long *data_len); +int MESA_lqueue_try_get_head(MESA_lqueue_head lq_head, void *data, long *data_len); +int MESA_lqueue_try_get_tail(MESA_lqueue_head lq_head, void *data, long *data_len); +int MESA_lqueue_try_join_head(MESA_lqueue_head lq_head, const void *data, long data_len); +int MESA_lqueue_try_join_tail(MESA_lqueue_head lq_head, const void *data, long data_len); + + +void MESA_lqueue_destroy(MESA_lqueue_head head, MESA_lqueue_cb_t cb, void *cb_arg); + +const char *MESA_lqueue_strerror(MESA_queue_errno_t error_num); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/inc/MESA_prof_load.h b/src/inc/MESA_prof_load.h new file mode 100644 index 0000000..ecfc50f --- /dev/null +++ b/src/inc/MESA_prof_load.h @@ -0,0 +1,189 @@ +#ifndef SLIB_LOADPROF_H +#define SLIB_LOADPROF_H +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +// Read in specified integer value +// +// Return: +// 0 : success +// < 0 : error, val is set to default +int MESA_load_profile_int_def( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + int *val, // [OUT] returned value + const int dval); // [IN] default value + + + +// Read in specified integer value +// +// Return: +// 0 : success +// -1 : failed to get the key,may be have no thie section, key or the val which the key pointed error +// -2 : error ,the val if out of range +int MESA_load_profile_int_nodef( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + int *val); // [OUT] returned value + + + + +// Read in specified unsigned integer value +// +// Return: +// 0 : success +// < 0 : error, val is set to default +int MESA_load_profile_uint_def( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + unsigned int *val, // [OUT] returned value + const unsigned int dval); // [IN] default value + + + +// Read in specified unsigned integer value +// +// Return: +// 0 : success +// -1 : failed to get the key,may be have no thie section, key or the val which the key pointed error +// -2 : error ,the val if out of range +int MESA_load_profile_uint_nodef( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + unsigned int *val); // [OUT] returned value + + + +// Read in specified short integer value +// +// Return: +// 0 : success +// < 0 : error, val is set to default +int MESA_load_profile_short_def( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + short *val, // [OUT] returned value + const short dval); // [IN] default value + + + +// Read in specified short integer value +// +// Return: +// 0 : success +// -1 : failed to get the key,may be have no thie section, key or the val which the key pointed error +// -2 : error ,the val if out of range +int MESA_load_profile_short_nodef( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + short *val); // [OUT] returned value + + + +// Read in specified string value, +// if value string is too long to return, extra chars truncated. +// prefix/postfix space chars cutted, +// space chars: ' ', '\t' '\n' '\r' +// +// Return: +// >= 0 : length of val +// -1 : failed to get the key,may be have no thie section, key or the val which the key pointed error + +int MESA_load_profile_string_nodef( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + char *str, // [OUT] returned string + const size_t size); // [IN] buffer size(bytes) + + + +// Read in specified string value, +// if value string is too long to return, extra chars truncated. +// prefix/postfix space chars cutted, +// space chars: ' ', '\t' '\n' '\r' +// +// Return: +// >= 0 : length of val +// < 0 : error, str is set to default +int MESA_load_profile_string_def( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + char *str, // [OUT] returned string + const size_t size, // [IN] buffer size(bytes) + const char *dstr); // [IN] default string + +//read muti unint number from config file, e.g "1-3,5-9" +//return : +// >=0 : success,return the number of uint read from file successfully +// -1 : failed to get the key,may be have no thie section, key or the val which the key pointed error +// -2 : error,invalid uint +int MESA_load_profile_uint_range( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + const size_t size, // [IN] the number of unit memory out pointed + unsigned int *out); // [OUT] return ipset network bytes order + +//read ips from config file +//return : +// >=0 : success,return the number of ip read from file successfully +// -1 : failed to get the key,may be have no thie section, key or the val which the key pointed error +// -2 : error,invalid ip + +#if 0 +int MESA_load_profile_ipset( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + const size_t size, // [IN] the size of memory ips point,it must equel or greater than ip_num*sizeof(unsigned int) + unsigned int *ipset); // [OUT] return ipset network bytes order + +// Write the a int into specified position of the config file,the position is decided by section and key +// Return: +// >= 0 : success +// -1 : failed to write profile,maybe fopen failed, or malloc failed +int MESA_write_profile_int( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + const int value); // [IN] the integer need write + +// Write the a float into specified position of the config file,the position is decided by section and key +// Return: +// >= 0 : success +// -1 : failed to write profile,maybe fopen failed, or malloc failed +int MESA_write_profile_float( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + const float value); // [IN] the float need write + +// Write the a string into specified position of the config file,the position is decided by section and key +// Return: +// >= 0 : success +// -1 : failed to write profile,maybe fopen failed, or malloc failed +int MESA_write_profile_string( + const char *file, // [IN] initialization file path + const char *section, // [IN] section name in initialization file + const char *key, // [IN] keyword name in initialization file + const char *value); // [IN] the string need write +#endif +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef SLIB_LOADPROF_H */ diff --git a/src/inc/MESA_ring_queue.h b/src/inc/MESA_ring_queue.h new file mode 100644 index 0000000..cc1efe8 --- /dev/null +++ b/src/inc/MESA_ring_queue.h @@ -0,0 +1,107 @@ +#ifndef __MESA_RING_QUEUE_H_ +#define __MESA_RING_QUEUE_H_ 1 + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef void * MESA_ring_queue_head; + +#define MESA_RING_QUEUE_VERSION_MACRO (20160708) +extern const unsigned int MESA_RING_QUEUE_VERSION_INT; + +/* All of the following functions return value */ +typedef enum{ + MESA_RQUEUE_RET_OK = 0, /* success */ + MESA_RQUEUE_RET_COMMON_ERR = -1, /* general¡¢undefined errors */ + MESA_RQUEUE_RET_ARG_ERR = -2, /* invalid args */ + MESA_RQUEUE_RET_NUM_FULL = -3, /* queue number full */ + MESA_RQUEUE_RET_MEM_FULL = -4, /* queue memory full */ + MESA_RQUEUE_RET_QEMPTY = -5, /* queue empty */ + MESA_RQUEUE_RET_LEN_ERR = -6, /* length error */ + MESA_RQUEUE_RET_CANT_GET_LOCK = -7, /* can't get lock in non-block mode */ + MESA_RQUEUE_RET_GET_LOCK_TMOUT = -8, /* get lock timeout */ +}MESA_ring_queue_errno_t; + + +/* + args description: + [IN] + thread_safe : 1:create thread safe queue; 0:without thread safe insurance. + max_item_num: maximum queue items of the queue, must more than zero. +*/ +MESA_ring_queue_head MESA_ring_queue_born(void); + + +enum MESA_rq_opt{ + RQO_THREAD_SAFE = 0, /* must be int, 1:create ring qqueue with thread safe features, default is 1 */ + RQO_RING_ELEMENT_NUM, /* must be unsigned int, defalut is 1000. */ + RQO_PRE_ALLOC_BUF_LEN, /* must be unsigned int, Ô¤ÏÈ·ÖÅäÿ¸öitemµÄÄÚ´æ, ÒÔºóÖ»ÓÃmemcpy */ + RQO_MULTI_THREAD_LOCK_FREE, /* must be int, default is 0, conflict with RQO_THREAD_SAFE */ +}; + +/* + to set features of specified MESA_ring_queue_headhandle. + opt_type: option type, refer to enum MESA_htable_opt; + opt_val : option value, depend on opt type; + opt_len : opt_val size, depend on opt type; + + return value: + 0 :success; + <0:error; +*/ +int MESA_ring_queue_set_opt(MESA_ring_queue_head rq, enum MESA_rq_opt opt_type, void *opt_val, int opt_len); + + +/* + Construct ring queue and ready to running. + + return value: + 0 : success; + <0: error. +*/ +int MESA_ring_queue_mature(MESA_ring_queue_head rq); + + + +int MESA_ring_queue_get_count(MESA_ring_queue_head head); + +/* + args description: + [IN]: + lq_head : the handler of MESA_ring_queue. + + [OUT]: + data : receive buffer. + + [IN && OUT]: + data_len: + is value-result argument, like "addrlen of recvfrom(2)", + the caller should initialize the size of the 'data', + will modified on return to indicate the actual size of the queue item. + +*/ +int MESA_ring_queue_read(MESA_ring_queue_head rq_head, void *data, int *data_len); +int MESA_ring_queue_get(MESA_ring_queue_head rqhead, void *data, int *data_len); +int MESA_ring_queue_join(MESA_ring_queue_head rq_head, const void *data, int data_len); + + +/* these functions features same with above no "try", + except shall return immediately, in other word is "Non-block mode"! + */ +int MESA_ring_queue_try_read(MESA_ring_queue_head rq_head, void *data, int *data_len); +int MESA_ring_queue_try_get(MESA_ring_queue_head rqhead, void *data, int *data_len); +int MESA_ring_queue_try_join(MESA_ring_queue_head rq_head, const void *data, int data_len); + + +typedef int (* MESA_rqueue_cb_t)(void *data, long data_len, void *arg); +void MESA_ring_queue_destroy(MESA_ring_queue_head rq_head, MESA_rqueue_cb_t cb, void *cb_arg); +const char *MESA_ring_queue_strerror(MESA_ring_queue_errno_t error_num); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/lib/libMESA_handle_logger.a b/src/lib/libMESA_handle_logger.a new file mode 100644 index 0000000000000000000000000000000000000000..19f576a9fe17e6d7d3dc9e9c15f0e3056d9d023d GIT binary patch literal 60466 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

l%5ku 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%0DJ3IRXbf3OyO>KHFF@abthuiu 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

wnXUb$CUZ9_5q3c*Q@(e&xj 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

B5#(`6pCcc~Ng0H`zX;g<&?*Qu-* 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

*}FK)w7{ZD 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 z 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 z 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%0D%01D^!=WB-}Jo-sVaz0 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�JyxVA)nA_hnbaFOOdlzcOCG!%Ka4 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

VyBv2jA+0KjDM_-Uol) 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%0D?N{_}z#zFcu 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%0ArC~;9lH>#eaj-|2jv=__L2H{w4oL&0FdsQ#kf> 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ν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

o-Hcgh#hp!puen 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≀8QbfmchoWXAX?}|wcQkC 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 z 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

_1d-cXZBmoJyqK zN@Wk37Tpft`Ig|VeUt3yVV*Sn-QZWv~_R+$LQ4wth2dq zfJ$A2A5h#Kee<}p&gM>pzLjm&)t#=+=Ej-s{3wsF(&~B_4`pG|^<wnJeq@<_8J~E51$|D% zR&I&ejPbF26e0u|y?#{e^grSSdw(ta9BeTJ#-UsU&t%LBb^0DI5V}CdK3f%Y$q?_} zVGG}#S>`qon&%~BqbU>FoukZ+BOObljCmHOI1b)FY1L2bw!!@3; z{o##?@#92Ko(>5t?NnD&?v5+-Aw#G;&>a%4p~ExqFNNI>39$oAOu%PpvFHINCh&Ct zy_XCps7IvXxQ^#e3F^ULQ}3J*^H3gk?1$m$_Cr$1*a;N3N5Ys%5W_$CDJgn(MO`Y6 zv0O2TQI;DJYq>KC-(clTwDe}e?d!1^-*0OChb>Ym2{K6i@%n0@*bJ}*sQ1Ifrv6~D z=l>Y7-H#;JEZgeg7xe&ix$;n-1atNRbugnU?vDABIjs7Ku<9eis!sy)V$osMC!w6` zI;@TtVb#}!kx5T9&*(g)pNdO;PNHd(qWHQz<^{-|81IQ;jAA{Qj0Ao-36Dc!RmI(L z3n;Wi&5;Z>7`L=a?RkeQ)y$rERE#aIH_b;)<*|)Q;7zU`YqqhCtk1wCF**U01QvaG zj9?#YOj(Ic?zjX@L6Bl}b$kM5Ad_QGPtXY{MQ@*T6Y#kVe3DA%oIGP^eV#WZ0cB!| zc~GOP#vFHQ!lP4QZXV&uG&2KnA^H-SA;jsb1!QK-<#>8k4A5MdDBgAlo^YJ&Z4W2< zyF^^rrc;m3K(HfD;??kpOSO>@T5oME)nhsRv5i}lfcGHW7ogn$0x+d%dR7AdtuWIV z3QVKbG+nGrrs)!kzeG8Lai2eufPclT@lxds{jm3Jr3gh?O-z`)h>Aght>HBGb4>!@ zztVoMF@Dzd+62D!#&uL5i>}uxRqZ+-*MU(-fkAOnPk}*eQG;p?YmsJdP-6{k@5NOe zRO!09QjIvYeSoeuQUqq`aW|`R7vco4i`$&A9R{0oKjAsMnb^TZD-&CpSi?jO6N{OM zFfo;g66|flUaFZm#1q7F=oo^CP7>Gnc^DVcwfbOaWAFmLUR*64?;~S0;x)&JI*Rd# zQCY0kADvP*nHi5NLGY>K?)V6L(kW#VClS3ypO-*97V{~vL}=#oh*?|vd?noMjW0D# zk2d|(nWmRgQ?>orrZS5g(Q+jXo0>+YF$KG-+p(|1~QQ^?3pd&IEx{=kyA z+h^&KZMcs)-EenHa96Na$0@=;)X6n1j&1YdRtx^nhZlH0{WE`f-I_gL$~8XAuYAq= z%=F=R{PFc(l3-f)nBcfw-G0ewNnY}?$z9#ljwwAMxu5JLC7lisWO5?I@E}4D$4efQ zG&ZRK*02so0}HHk_=WY3X|9)?l!S*}sD`^3-fUp&AzeGDgQ=&0UDJBHey`p9ULoMH0ruGg z(6H7UMfXgzTJ%a#Y8Rxz@eat`djKfZ2iT5LL>I?7))$(T)FtVtBoxv|9fi<6&Jv(T ze!Mb72R1}szjZdSr(3!}^@O3&J+k7^(pCEtI~dEspOis`REIwl8fhKrmjrw5QvflC z`;)8=zN`Tx3ycbvQ>nSCoa!^{ZU<3M>gZsSt13gVT|wH&-hCh(h7NUedfO_GR3;wQ zS*r#^%8(pr)l36|cDlpiHpGJ;VcP?vF}K&%6I2f)eY1ohLQkW?K%z^h)78y{ zu15JIixB|US9-&ku*GQK8dx2}gADb8Jv&H)S&^wCcHBiEI@D|X1UN9B55Vr_I5>_S z%t@N70wGx z1cP8`k-3U2b3v!G*x%S+aS|ws!b^~FoQUoYZV&+hULi}A`CV(rP{*?^d!dv$CNR{j zh;iavQj*+0kCde9e7j{#y9K@%sMm#PKb+@_O!wG%6paY4hB1;LUSqT^w~w$1DMpuA zCIll@*sL+?R9dkJj8&Gcp}Lf84Wr8Gjk$5zPzQ;+WIgd5XL%MxB)n(L$Kh#kzk+Ua zoE0%ZQXQZE;$k#Stw^vvbV`|AKv05%Px^9=7Z6~iwC_an@8icTex`vHi%TJCc($-0M}7CPvE@tuGROtVrZ-#1VhlYb&e+lFf? z5c^obHca*;NHglg{wJTu9wf+hO8kSGN+$s$ec4Qw8mNTHc?K$F5?>RECB6okbTrR2 zEYs}%XB{27->|3?JD&j_#HB;e8J1Ee@dcV#T&Ijl{z-DJ5!Z(JjJk#Y`38yo$cQgu zlK+|!EXU*kBPgKft0drcBdCTkk9Blz&=kWpU3x}72EoE}Ifl8Qsh@gCo@?(A3ZrB44>64GDH1ikMwl!!vdWlTXvvDSagBR`{4B-uAIvN^BgklD zdZX#Gh{U| zqe~ILEWuYVF!uL}`&b$~oF?!f15;1(#tF$FOCUs;rLXZ(faQ=-3RYWIioZD)FC-}; zCzwuxJi&A#dE%s#L)1kUY|*j6lF8)h1nE4%wRt|HZsC7^PO`=umPoKwV6*+*kJVs; z5nnou$RjAl;*T+{idZRMP{0F=iThsDs+7qdiF(A4D49HlAZ;nGZSxs@8)=Hg-)6)| znB>-aE#g{#BP+sWmepybjcX-7Ba^I$mMB%(^6wofi|=XlD&sM+UU6m`x9V+LEeN&> zq#ADZAPvcLI(^^9l_!j;i&zxgM^;7gapgkOWgsY6{>3CJ-n0zz1gE9si8C!*NsFHt zZAzJZjvyUu(w*G!r>0?q$z4{%NE_Fl@EMu3dkAi3xra8>a2As+6IGjKdf4MLGHLfP zE0Bu+{XMWPS#ijEtozeO+fpX?6Vw5RbyB)CIk)7&xy~#mk37zoNbc|aE}7)Z4X}4% z@+P_hq5aOa#|Z^SCVv&f$Tj`yKuqv~dBb{qX!M9MdA$)|#w7Qw(+Sre^%9iTZ8{#)!rv--Drlnh>h_}9}12!upwYUMbrwAtR}XCB0&?G5wm) z#^eEuO-AfdbgZ{&RwA3lImrpODhsv>cre(ih+Dm7x-WX0NY*;ers!m1iDPfyN{d*4 zA5#H)vmmy2oO9eDOJLFjSpq{3vIO?ELupXsd{ay((pN9A5G^H^o9O#U`&#DZ=?kkZ zliXa-Mj0gB(6YB=!IwE=VL@@c#(wA<)~t|enOtw6GA1_=q;s5Z;eQULqa#hjA|}r^ zPzjSPD~?i|i2Ekfs+7t9AxLY$wSzt*lU?As5-ggLYZ-*XFqs?`!>AkipR7uo=^?@- zcdp&THSQm-Z!^iAYeudOGO9$Fv{eZ%?5xUeqslBMe`BBpOtL=M>8v)cu}ZK8GRgYD z!o%b#MzvW?vTAXbr=VWNtk)|>uQDcC6V$6Xj$Xw_YndUy@EQHC_ z>@p*%geBeJLp&Z|P+-@&g1A?iRz=+XZ+*xzuObi8p}!lJQYKU3flw^41TdLKkmsyw zXyZyx!&k~=FM{IFs04T<0!ugghG@$rve1V#kNk?;CYXHtfh zgE;b~YKq?jx74&M#b4*ave}0;;D2_fLt_m~U{l{phb*Q2_L^drYlt;o29-QN%ry(er`s1FL!hu_XDeWQ;S*5W^C3SsdS`i`*!YnODiNI(JM2~SU^1Vwe-xw*SOb(zw9f1_aVdPqaVJu~Gbqpidt}%>(Ve%OC4<+Mr9AT36(bPj13krpSX7FWfxLhA%vcN#4L01K44jYzP zlG2(~H zzIsJ+m`%iTBYhufX_LHhVmrtZ(34qiq8=fuN~P8arQ)o9MdU&Cla6XamNNN-@pB22 zdkNBWRCdQlUoZ_zne3dVnL$Y=lL%55ezE}cq)qX2Jbc)Y1h)7lgx|e-zA(qQbtH^&5`Lqu`Pvjdu6rzE%A>v$Qx`4PX z*|K|PX(iTp>y6}z6H3g&s>fk@IXDEV470pxlnGu7k~~M~i7j*l7VatTwIB{HerXkW zkIC&O5X+dnDkc!QhQG^+1tu|*hYVE8czOoj-(0Au&@;4-qC? z4OGJ9l?EzhlC{Rk6lvocD-L#K@*~qW!X#_0+j6Y~DGY6yw8s#RKIb7im@KLYQlcs8)`JeMi z%qAnQ#6PI1Ryy>CVJT&@LwC&rA;n}OL3%)3JH}^hPy8!Je1u7ErTy4m!?#SsSxnju z&@e={I965Mx8Z{rG^3D%PIHm$-UVR|EBkh<2iapfEWbs%u<9$%syP!=89WLV0AtpfX` zdx?9mX;sQ(RS(^T>qMDcN|08HYnyyVsT7NU+lY@aSz%f&Vv+^wfaRJmKCn>^il4>e z%Z>PjOtL@}KdX&vzWBgaG$_89#d9mqf!9y{^HI;?c2T3&0w!4zRBKKgwF2AUpjvZT z{6ZtXj7eMk+&JRPr1rlhUv)IHikO^jpb{3_XrQ8IBH1=^CJP_>nQ2wZU>}-UWFv%)} zoK<1gfqxhYPSKcT+roTdlGTd0iGPRs{>bPMuzQdt5FgC)p^*|Wz`Zo0x6H^&nH&Ir z-j793R;~>tG|tIUP*#LxC7V`dOr}}lBW+we$!BDedqzDXZCvy9h-fwa&!8T&SdUaA zej$_Gv!0t=>+dr%$vtaEuK9Y*@-@&@P>*8PBgKecz$EvK;){(v`uU7Za?hHPYrY=E z|6Gs%y^nuQ@q)q2bQhy*2@mE(ACij33;QBs-)5SXGWjt=1jjaHB+_>`*TiSsvFhp3Cr@JeZiVy@y8okvzX-HOoixY(iT4}j`*^FF20z>-)wqZ zz@#m{IF9(hGzn@yhsED!#4lpf7C$GB_`sGfD1I)BztxCe$fPZPZXEG}X>tt7xQf1E zYn#DB?zb>$)Hv-1#A!F+2eeC%(=Po7wCfe89nAy3bsRlY;H0-6;(u;QnQQoyGmE52((!AKT+kCcZTKKAFDxj%Iu9&m_Kj`sQ11 ze3MW1x0h~f?4xgaD?{@0rSOaC`ZwQc*hTfd^!*Zj%l6-hEYN}G8E-E*Z%rqBCViLC z_gwnsna-2^VZvp9J>kLqkTViyo$G#++yy>eoU!oF9oEv+IIOy^qNb&?YS^0WtZ3HA zAvM)?Eo+7>t7{pyq`JAuQ7kppONK40s0gy0#;rA9yP}%bk|gG+t7@)>e=*IRp)74! z)vBtx=Hc+Rx>fid)(RX_Q*&c=-Lerwm!sy*Ya6PXG}+W#Sy{CdXc!>F@Dh&Z>e?z| zsIOR2URl}b*Q%N|U0ny?F#CxYTERf8>j8v!0D#=;I%EV|sS^baS}G8MzYT`h%daZ0 zSs8<&s_GyRF$b16H#fupYFI-+d{tvzc?~pzf=qEBEfJL=y=rR(S55sgfoM}fOIBSA zX)a%;i6t#dmsX)YU?57jiu&4yavIsVB`wu8%^>k~)CyjwO6eM2&w7>XPT%5$5<=g5 zoi=-G?*!6K+zg)y>LalQ$+7q`9zW*d$3plBd28p~ah!#-%V+r1O$H#Uq@^fX1!0s1!gK()7av-i0dzVm?B=`(L_YhhvWBV)&B zUf8(3a6x$3*zxnc&P##+z`D>$F0{C=!)BAH18#6XWRV3t=@eb!>tSd)|LfATF(ldj3Pfy zK#^CR6>f&gUlLkdmTmDGcY2S7Lj7IumG!TApSt0pX*0aN>s!Oayr)7t(GH2N@JUui z5BOFNg{!<7pWR(J1%&Qf`x(f5Dsl7Z`OB{ekM}yYhWDTM$hlj*>hNn`r)IAuyxB`? zelEPB5#!@JN8w|cAh{W|lwoRwbWHE-}x?_+r1BRcNVjjzFXC~;1r z_w-sA+T804=Z+meeBL8>ZJIuP>*VR@dnfMcaq10?UgtTP2j>+QhOh7%Hy2LEz;V4! zbMPxPAlW++eA|6y{%n9Uy~aIW(ljpF~M8LA^U~*ytCPRa3f9zY~VfZfU4f(8#jCVoK|m-IS}gC9fSCy z(7tYCrVp<;!}}&-&KB>yvo>#^i~o%;@S2;w5*T^UQ8R~EP9HR@Wo%()I14_9-|wxN zw(#8Jcj0JUuY9LB8Q9Lx&l}_o9=B!JCWX#cA@j!t2gi=jD1;!~*Woqqk#*C&XFGs1 zA6vKCyJ+LiaN%L^O9wFTHSh7W=Xk&Lrp?8G-G4TCbnU*Vx3<|^cc=GYhtM$B`@>n` z&DHZOrwy!{DtE(c<>*ScYI_~2phkUPzLKD5(&c>Nr2Ur2ZS%=&QaGcd5m<=)zK z?*5Sk?EW?AKCSTav_kKcJtxc_-!}h|ty}90XMnbAr%f;N)-|7Tf!Af|)j0Np@WIZx z3u$r=P9Hb%ZR@DYJM21j^sDxcCVuH%0Mq;Hka6s$_2}3w-ezyh`d06Ib0E~O2Rb%s z&a&6Tf8Ktzap$fIy-GapH6K7_LTFl5U;deQEO-^})uYnbX(-&B823y5UqWX{gsSXQm3laKQzO-d$!I#ZStZffEYwV;Fpdp85NNOA5~j=d62l zOgLk{*YcUyGc>@xYj!w&?!2o?TUxek8QU^^UQ0_$eajP%j`wQAn`dqD9&@LKXFk?8 zcKom{V+)5B!Ut%-Yt2#^%O5+w7Di=UZ*_PmeuoCASrZ!2-CGkH;(96Jojo>$PaA`J zgcA29ZaKW=0!U2bz-V4evv>4n#h$o%bK)>B>9z3YFT(RKzW~HodozoCBXby~?F?-}vvbg(J(nW2Sk_#(BM`dCQj;ZpY%K?wL2tTYSLl zvj^6#w8AIS{+`wn3d2SyzpS`uVsz@vnT65f{F2h?5m@PIL9DB*s%WmRuZu1%udazY z@M9S*RZY!&oT|~Kja5}n6Kyb}``qes_H7E-0QNc zx~j(N3a4Uuc_Z$NYO3mp4I8Wev}P4c${UwC4fwksHPubc*vy$SqcnYDW@h?nLq`tH zNFSb&nU#^1F*O&bI3#Oi`jBPmLuL+7AF{Nreh6+ZDw>Cs z*Ho9oP~pJRrsndB6+;>t>zl!3^^M3;U$@L@(wdNFaJZtXsY#8q2{2{m+VT}uJSr!@ zY~sur;D@|P1v92Zr^0uBafvamLjtsYn=0xXs-o4EB%BPh(rKw{s$N!CRhbTZE7LSu z*W}byt!aiHrbZ$~(8a81q&RP4zSF!eS_|9V=BlRE=v;7H`LZVEBnJ$kt+%|ssX1Cv zUa`CiI;&U`ty;CT8a8d!>#7{(Gu(4J(P&E+dap6tsi?051HeYHsxsQrSnWi?k}Ikj zn{)(dzi6MTkcd{+*HuL;YU-O>8mq_#vx^HNU;{^mh#HD+p!!oTuB%!dwTCmaC{i$U zMhQSTI5o;id6B$mWaiB1^qC+^Z%NCWK~)GX2)if*lvCB%Sla%;)Whbrt~shkuUpy9jAF=vu`v8Bs~45x48txs zlvg*FH#ESEP!q`?B^iQ)VZzKwbA20UX8EqIZdl`(podY`L|f{>;7!ZRYt%>^VZue1 zls8p5Ef5kThMNhstg4xnaGFDC$dtuY89Pe zI5jYp($z;yY*TYg7&@n5+)>J6H-hXar;4godeaX;Gj_AAc{%1ZwmZ7Ayb0$HC`NvR zu)rUIv)wnd1pTKoWNjro9~(m?t>HsFrWIfdP^-4K9;F8IDyB}wqTSB%X1vk_xdf6c zSZ`^0Z8ap%Rcb22i3*-Jfkcd>mb%6&atTx&@LoepGnoXZ+)A8&DjNLYioyh@JR4N2 z3GAa>pymlAww4B6x7uSab)xl4mjbf``ZYi%hrnV@XyWSzYz(wJ&MVM6T3zqdmDgg{ zsKm5WQx#R|2~H?m09;xP{;5a4rIouHpDUaWEN;h+>H(Pm|?}4kv}n_PxjH3*fmUC2|7 zYpJ!DMYJy{3QIz1J`K8|9CV4QIMi0q0C}F6U|nu*X>uy-nsfxK@WYj+%0!0B^lA*$ zv|H=rh?nK{m7Ggd^lKSn&|GW4nH38OW3nTK__V0wNr zXbf2==&;Hfy~wKWO-DGeDhdoRa3!wH*artbhJx~r?hoxZvoxX?9~DL_0Z`sVFY6`R zpHgbw0%_J_0uhBl5nWx~yc||POlncQZp7<_ayG_^+U-%e;`+~nYQmiwE&{&ga7oIB zsiI9nv8Wb)?Ku-F<;~8KY)*@)umWqh1a0f+^sm<*Smq!c?RkK^EoiQ1ET#>ZK9C~N z`!q@Ql&DzVQn#WCw_RfAit9bEF>3wP6Ndr-<}w_`1nnFZn}+K}uVpDLzpxj> z)ZG9ZyEXnItYl!?qZEgMLfa+oQKdm+t*W@|4F)Eggu{ha4qhb9E^fqd6+RU;Rj|Rf z7QiX_xc-@NR$=6?yKqPuki)RLDO$f8HlzNOZy__l6-@|@XjM&BZ4+i4l}^A-u!Ng^ zx|$IU5I``~8+Ali)xs7VQWUHiwa^k$AZ~c@;$2M@?Cf+HO)4m%NXnlC5v`gi%R!`4 zdV>L|^+zqJO)JsvY8wds^Bh_UzQGfj7Pa7zeleqiq3P8rQ-2NDTSQ$MslQGmYw67v zo&c#)>20=NIEwO0OE9Y`*)Y;ou(?uuO-#6$Z>#I7o2$!fKrvhbeGlR;1Hz{e%Bw$`ja=ykO^ z;9^9ZDV_ashX(sb=v{3xGqZ5fMB^#5tE{0c4MVXvC%nh=2d^?`c{T5M{IQZMwV0bL zqDtj;D#xikfC+$Tv|_oVjjQb3R8_MSraopkm7Z|RuWSq3I&d|&Q>&6XYt{QKGjvE; zm9YJRC{icCRyM4|y;*ssx_Vr(WF-s%&BJ^+)zo66W;;%F%w9U*Hu0hXSEC`qsxkW+ z*8owPUlNH<%$qSWf4T!ga1*W0FJWja)VVnIrPe-JDjVQ*3(lWl5rE|o)4n!|nz^i1 zZ9PN@`p(KsXba50YOiAL++ZA*^D%j&#kC~0FTq&0<~)xXmKwEcK*Fr9*CA9+sp=a&hKA0Alt2~ZftHTufaTk+jC>RNWmHTu+FJLf_S~?o9tCm z1Sg2rOas~a^p8hiZv(`xSveEWlGId-vAUzKQ@|wLT181QuzY6kLvUgI=}?2 z%oFcS217@6j?M7Ai5DVsMuQ=Mr>^xil{~>Qs3*hL!JLuC2{FzVDvs1(G1S$pjNOGy zE+{UEOfQ&`uWyHd!sKzaYXP-vk8@Pv_FLs;+ES_UX+?1bjtw_2_Fhe%=~&B| zeX61Q#sm(*YXuzSf=0}vm=n~}sBCOb4%IaweH7PtxWZA{)Qp(~t~iM`8&3G@E2?oT zr8Fd&l~pxxVF{Lbv=vOg#tLWka@c?XnW@(5+VV4DwSX#ahwJMqo6LCuPopS|8YUv< zYgpBz$_>C|4MNXS|5P2rr=}dDhj&XNKknEUfpY=2dId9Zr$=Xk zG|i$IHcC(2JuER-aA3A_mZb|v`kES_^1x;dPB<_cqI88sUz0KB#^hGD%51So7$i1a zyWmn%d0ize3$R*OG|=J)3bfS0g++VjPAHu`IlnlXUtB!1ST96iwWTd}6;Zs(1Iu}| zU=oCS?EXT>s$Mc3waLS)Ejl_eWL3fgo7-2TlmltQq0LcW$FZ)GF$cF!_|{en@^3lh zDBN)HT#i+TvdOUJ^|e*QmckW=)m7EY%j<`&u5Vn?)KFegH4JX9s=ypFd}!v-Y`9E_ z3wC^zF2xO};m|Bl`4=p%?waDNq(XtzfVfo=ThRj7SLx_splt&79wvo&YR#EE0l2b3;pscUZ0ms5viwWwO=hRm#?86$^| z9w;ueI`mgbj=Qedao41{#~#%&+zL0e`@o%6{DPQ;+p;>U#KluNL`^RT}y384br;{;R=4(GzZ-@-pE zU*HGuZwpOG?scg*Avyh$guLVd=XJCL)j7P8SrlnVM9qSjRiE=k}xGXH*|aF5g=eWGu|26PyEYbbs*dF z=`8SRDLV>%kxh5uA3{Fx((vjFy!TKZ_~lac?Ij-A?>zMFmJZN1v>C<-O~H=Zr<0N<0Wvu`eIg^^ zW&PvQVfvkv0cgjV`1HEFJa9OKV;@Pp=L7BJn>bXy3(YiRSF&-OmBg>+iR7PU`16x6 zh6|O)Vb(a#V)(a<+P1{;uOGuv;ofOUp?3r{DJf5n-FRHR(r_g7kw6ceJq)xpc8HD* zppc%NQ1Jq4L+ zW>Tn<^BcB-fAEu}s*KQIs^0~Kp=2zmYZD@abSH{DK3S_$+- zoy5QAE17&$A0`=;rCON zJf}E$abEKBNy!Z*$wlQlU`^V<1qJOlm>#Hnk>nh~e#KzFOXJ!Pgkij_Az9=Sgk&DC^kCK%<-n!fvJS(eUj$VTXTYl>U6wnL_;OG&KG}`Xz)fCS2_!09#FR?j@Y% zoJ;(B30G?oVAm3V1L57Ejs^8XJ^9xe)!qWIXBnq_t@aCmy+b(1WiHA4E8sY;P4JC{ z{;J9O7HE{uzm&!H#PK7(m|URt4Zu5)@K!Q4+aU*Vl%EbfSm+P&oHGbttWd|H_mw#K z)2YZGrgfF$t(x#d@QsC@Np)63UFky)>8kY!j$c6hMa0i`zKZZ(Bp=r|EH@FJA^6dL zD4*ZM$?@B&pv(I!3Va3j{`gvBAtIRMeX;&;8WV+ zpVJOrL2@=x=&JJpkkd#wzx%(CoVk^7e&IalTl@vec;mX6`1$qc?~$B6?eIU@4*nv^ z;n#|*eLl!~i*SCS^Z6wIlXm2M*A9L(ESd52KdBu&s~vo5JNP`n(O>*-KDFltU2EIn zUq}2Iln8m{zJ%~xf$t!k-{jRmcDRG^y~NLX{Sm<9jrSGePoadT_R%2gFYWMm1jXXX z=?A!qPf8IZNFV$aMZ}8;A4&LJ!dnSf`)D{;M>xMoMeUOTKL_x5{ca(1i z`0)q-P#^w#ezhNlHv3r)E$nKK3;6E|&%l!wD7-HGo$w;U)m{~jcY}2u<@4VNs=X)R zg9zVC3m`OCWdh+Z34AW$?-I`IyS@Si_y71po4Gdu*9_^xmOiAe$*PAj)U|QG9ym06 z#K;WOT3@DX=OHS6Sr@O?nX8G|I=h{#VETIF(Cm!UnBxc+s`0wEJZ!WwSH^v%hmT;P z>asRB4K%T?g<}_dZ-Ot<`T|FcIL#ha<_N0>&otV#5m}}izN~2<&K~90Mvcz4n`RCl z8E9%W^mWP1%=SfOXJ$(O#5|f}H9O5#I&(x!Eqk~vat-vU?BOqhR1K;7EI z`)sHW-hvRV@NTo77j&7LhUMR&GxrlUo4EoWm}n#?=4J);hPUY|_^B!JXc;}dL7a58 zSqrBjQNXHOK<2iwz5$`{Z<$`qy*G0w*?KIGxYWZ1^o)w#P~AFV^Qcj(XNt|Jbcm}P zQ%1UW59+7y#48?ZVc(la4mCgh2CCYg&+rjGZ34xH+W0PI9eo7uiO@YO8jv`|v)mFH z=l+-f{Dpm2mE9ck?34y$B3Vb6dDam}Y#&z-u9`{1H^8+Vb^8IwXg!UjFy$%_gVNTOP}9ZxUJ`53%B|4yc!FBWy3$V z1E2TvxEiSaam0@}>Nx=ZVHs%284Y!obESokvGCm%j@Lk#{}&c+`{e}K$78|6cpr=T za|lO$@EBjWSzz&xxA^~J;kJG7JOK-yp`#qWUUWO`gR!t3HmRE9+-u=zha$rFShyXZ zPguC^-{%O&KJEDYorT-u{WEPGkstrSlI`$?h38oKMX-;=g8a6eTL|ZIr6UuRJ1rdb zKSiOA^Ps>vZXdC5dtARFT#oBc7M=&PS^p*285HE70RI@Tv2fd8>j`In@pZP32wQ$>C-&i=3JTAVpgL3R~9Yqy6u9Gc%60~9cGc7#d!f&>4oBu;o^|ioR|L-lFNF}EeU7C{mrxGsv?PcL8XSb5#I44@TZMXgwZudKaaM|xti+>=< zK16w@#=`A>S6R5-?^zaZ_j^9!vfp1@{CJFiO6GlwzW{Ld<6kY@&Py3+FeoSkubD9a zG7HE1zKl0nxGm@GcJQt3;ExiHUjyM^5!vmR7LNA8IfmtVfpeU^Y~i-u-XUDttt(DA zD2Pvke>|>Z3CCur53e65Sh%gvAc3neaPIe83%C1Cq)WxJ-$@p3+o8_FXTmtyUz-VM ze`QeoTwvj-C;Ax6azg;VVNLs z)@O=^+xnCcF7;Vs;kG_ETKFvJkM(@W!tK1BpRCkU^TJ-I$_PhyV&8m!&-;p>TR7T*$NP|l+v9zTa5>&@Eq;`<6#ijx=>ik-7sEduZz|!aC-Pqc|FHD2 z_)DP9{FxR$!@`R#IXEx)I^7%#xBa_B;5^=C7H*HXiEugIb1i<9-vs}#TqJO|!)2D7 z2=MW^ZngMP|3fGQ$~_it>;HR8P8smAoaPkOED$H>63%hL_rLD9_-%WBMmWdMAuZPV zn}yr)6Qb+E>_@g|M+>*@nMSy@XVk*&_&;C}ZQvcsu{OHHMB>$j=+x>nbaH=|=Te#itKM0ro&Y}y)h%bbH91r(d z_#z8`g>bgdE;xqe4GYJ9-$fA0A1oa8XFdO9;kKTK372}-byMP0eA@c_-NJ4EX45T1 z)Dva#eeKDFBUSv#kcHcFp0{wD|4$ZfpLZWa_aE5rT06%{w{Wz>Wpv%YM(a`0aihEFAm2oBCZRaPD`b zh1>mJNVx3xkcAh5Z1(%by>v&&UuoexEPRQD|JlOr^Xp^jz75K;^JJ!l+i`NWg-^BQ z-)rG^9L}csf%0v9hjo6PYsu+m?Z<5Xb?xB&t$j|BCFins@X6MCXY)Tt>k;Z{<40Nf z$JU3`SJztxK^rclrouA-{G1NZa%Au(Vx;MA@Dc*ZoN$Lu=PQ=av4`_+7=!SQePKZy z>HQRNqY#9`_=s-0j@M+cF#a<63D5npFy2UtPuH-)k0LoG0&hbDLMhi@hJP{Ho%b&+ z|IcLKm4d$m<(&-zUr73F5qK5J*(UI@gx@IeC#b$#;K$=6hVl#jW%Q2_{pv0r?IdTHz)vPS^E2!$ z=NB|VpBDVTr}@R_G0fkY;`1HBKac$Tp}-?rP3J3tk0k#l&^%!I_Y8s;ZzlO?2>f>>f1$vaQJ$$4crTh?XHY+^C!eRy6}Z|ofxcA&{{!Wj^#Xr{ z=IMn3KbrKoQs7fi0VqEc`1@r4y9E9_sI{IkIM zWv*WcdEdu|Z_vV zBK#A97f_skEpVRa9jG1K=V>10v|$p_7`|Z8t+Jf^N(ET3Y^!u zIRf8Cdao4twIrYKbFu!@NS_M@|An+4+bM9?|8{}1{tpSfj_OYdd=L5kMS(XG{0B$d=M%I<$8f%M)7%{z|SMUKPK=gRDVU_CA4n-PT(BRhXu~^?fZbZFJk%K$bM|k z6G_i>fe$3V3>J7Itm-fcQ2GezZN7D+E4? z;^|s}-$eFm6Zm@4=N5s#LHs`#I6QQ(%Hsl0rF`<7!0#b@zAkXi4}TQ+Qu50u0{;!g z`8NWuC%hxYBm4Jdnn!5@znkW1UxB|zIL9^1Ihp3sD8Y}<=VF;C@Mp*lGX;Jd#q)fD zw@{t$lVTP9eirG&>o()3QJh>X$uEHb_52GD=5q~#6po|C0hgRf}<6 z5cmqh4+@;~)u#eqLi`CdpLksJsNWQUS5O|{eIoNePI+&D;1833^90WOl`{m+@iSN8 zACaC*1wNAWSuOB>G)~U0~w%PC~!V+=j);@Cq(Pcm4g3q%AY?K_$PFo z;b#K>lH}Yf@H~o#djvj{^xrG+y)?g`75E>?{x1mpbUJVSoxq7H_!|?+DHTnHyfuB$QJyqa0k^BsSe@*hU z1b!*`ah$-fqkKL=;LS9TrV4yJjd!-dIS*F|obzylz!y;b@OcT_jpxx%1pkGUe|8Cc z0maXq0xzaGd|2SmQoem!;FpozUK02hg#T9H)s)Xa5cnPBug?X}`yz+h@pyL<-%$d; zjr8m#@bk%TCky;0ipvav7t=mxyudl{O%r$$`MpBmyk0a2ocH(Z1wNVjwV!9mfIPK` z=Hu0ZpVyt61b&eC?-Mx3$8!SjLUwpv;Cz1iM}hPC>6Zfki2UeMUSWToOmWpk;FaXZ z-U6RPcIYSYN|K)`@aIYXc!57i^#Xw(rhZEWemCXYa)EQa)e8J+iu1JsA4c)O&w;QV zIG(o){^68Qt`|6;*YW?U0kf8oFj0D*0oCo&T)IKz&UR37C4VmaF(-8;4J5-0{@=ud8@!#&MySca`p;*5Y3C{11kQ5cXG&CI`TvCklx+g%^SkQ=&UU*+;D2R*37oGZasK9h`TF5& zf`1*w&&LAi{Rux0#&S;8>N_1MzcRjp@U8++rMz~Wz+WZ53>5fUikk@nKau3j5ICQQ z&J#GVQ%eQT`+-J*^E$pk;JkmkLg1VS?B~-mzy_QL_P4|Tn!uU=j{-lL_6eT|oa3P* z^Do-79hm=+;GawO8Du>_hW@IedCkwuv78>XUs@peM^k=VCh)(IpUxBbNXl1N z3!LZgjRLQu_~)OBXMMJlANLFX+eptp3H+xtpFa^e^LM7_*;xK^;y*^<8_B=?Tl36+ z0_n-`OJIB(?YAcjIiHe!$^{-F{c8mN2hwM?z=FvgPPy6QY1kV2LP7kQD9FB(*1bz)NK*<+4-;bCt@WZ6fa)H0E z#W>9Z=lOVrz@Mh|=XEh zr02T=XZarpoaG!A_~Vpkj-nTDvHiDEJogef_nRSb?l)WDEPuSfO*{)clk{05aGoz) z1VTQNqs?cu$i5GYhBG zrdr%>;TUQ(Ea#U3C-KgU7H;c*kZ`ttGwpx=V)5g+(n%lhI4zO+Po)l$EgbFnGve<_ zI95?kCgCFlKL>BN;2%x=MFP(wyh`BsK0+*w0>}3eV!1@%iwVD#a2yxve-cfmpIiKB zw|j~I5erAwR>I%5aGU>tg(Lq1#Q(j8+x|W3cwmBpY_@;X1x{(u8Dimfzu6X!{nk;x zMFQVT_zJ?=4wK0a%>uuf@bv=!E8!Pd@=>1#l7FRzBkQ|_UvJ473OJWLEgbzamg4gP zfkz2{T;S&uzK?M14*TWjcmF8(ALIBJ_`8IEA#jiOjb97-iDZZFef3DV-)@9wwu2X2 zxNW!j7LFqLx#5)-j`1@_~GYJ zzZ3X9WVgh0tuXU{K={!DpF-EMdkK64;U@_E0m6p~oZnfTE$}QlU&tez{q-*SYns3} z5x!jD_n+@tbDo8xoMStobjP`v zaJIv5$PPONelO{{N64upIZp|EC*jWv{7J(9N8kqte~WO|hx`3R@bmLMPLPs@t#=>zb@_zVD3rGGUE#7(G!UqDjiSREhJOmieqwfeu zwJ{F&!aposPS)RuV;u7H-aQ1)?+58C@Wn~GeLuq4o{K$=j}bV(KWdu5$0TU}Wdgs7 z@UsNYe~)p6!2dw}4-$^!!uj5n^m$D1^LxdABltPL{ocaSK3izKp9uU#!auig?3b^f zB=my{6t>TI3A&z6INQI&Q5x^p4*wXzUrGFVg8%dmTFy+1AN5&-K>?*q@bmkf)>!;F z-s?#IdJ9K6oIfwHaOD3x@n0kGt#qGsx4{2M_+1u`^4b0mTR6(^oeUpP9kDaHwfHK)cRc@@J7OS2%PUX-7j$d`-o=+&hHs`k8rlbF?9dvLxGnNepujqAMjg& z_e|0HcjzB$XMS!Yg>bYd=C^ds=Jd934CR{=^?}Jk&a))HupRyy3%BLBSUAdmj^wvm zxShAJxA2a@&w2Ykfz$Av$1U9McfW;Wzq_d4-x1Dv>@@1&py21c+Hruk2m9-LvO`aS zpHKJo`V0I-l0VqOaenc99A)7+zaAt0aTbpJoFArGIPxdbb?oUDj{Ll@DS zsjzUgPeMlpJ1Z)&qZHo;kKO1Ega<>AURhP&hwrBKIe9U zpG)0;}d==qu2>e>Y-xK(wguhQX>%;wiBlv$${AyCcc$j}2>De8F5(>vp zh_2HfLpbwKC;ssQUrP8~A&1{%vP9sOB!7j#uP3~r9r@?B!@o`7dr8g}LQVted7HpL zqIvhEzrpaP{c{6l;j z;i(pma`-uoJ{FGrr_g=J6D-`e+aL=^{>ObejjGJg=75OM)uzz@GhO;Ae8GZoLCipyM^0v{+Pf=DsFiH zhlShv{KmpjpHbBBCl+q^`>loB{T_`*fx`1~x2`&UEZpul*TS)1{{4>mgmauMqYK%U z0)K$;T7mbZ`$?+=zLxNf0{<1^7ZJ|>I)nt2D=ZxK?Mc z*6SsLpMP&EYUw#CA6h+D~SmkazQ!gmS058W5J*}_pD&KvhwILcp6{P$Zp^7C^V zk6SqM-%tEc5sr37JKRNfcuC+N68@3E`Ms>)2>dhRPr=O)6t?H1bUtzn;oPrc0KQDY z&-NT^;i&(Iq<^l3<9PWzWtxQ}e*xW}m}%k2KZDlmxfYK6d>>`Gz=zRw{1$<)A$*;M zqkPVjTM5VU4upS2NI<#N;zu%r@T)8wp@|3_A5dOBn zR}g+!;HwEw8m8s3{7r=S68Hs#X9)Z~!V4|j&bM6oy=r6Pnzwb8@nV_&A`R_bWARO(6{dPG4 zxg6(IfoBjtLf{d?v;Pl!?;amzb+rx8gaF~>od`-ms-q1WR4}nx2`3Yi$Q=z51w1?+ zAdti$fyCq<4k8krnZk4$O{-Sg>Qh>6OKV$gt$u8n-6!jJP%vAEzjc?PI*R-RvBKlaJ$@I z3%ASt)Q6jLN1dtonf5aM>lh1Xx%s->3LkF%KH6f9n|@b)lH%Lw!(Y&No5hFqHRDCQ zg|po0y4<^cd_K^8zU8AY)%1_}a988M@!{dUH?jSqmrqRDDkHiVuHT<8S%!VSO?);d)_Z^bi=L@S`+NGV0SjXFlGCo97Tu_u=_t6rTzoewxOY`tZv%zQMw6 zJNcr8+jjEbKKv?GY~X$ir=6Jk{!-(nzGh$afJM*xntAVg7CqbL8m;H-vsFRlL;NJY zfjiEJKd^|b(R`ls;lrpTeE#6Wr)c~yKD=7vJsLOim~uby(Kl=Qtk0`* z481wG8n1Cb zo}Go;{MT4G`5XFnA3j6#iD}&Ep-RjD4IkdE@$D9#Ba*1Ey%ui!hu>K^>1%YJ*DRb> zHT~i(3#XmmsO^0CIVz)(^LCA&?!(P{B1(MtE=_-_5C4j;SDOzv@1MU_vRrzyF=@55WzIQaZb8kA+hY=6U;H`0yG>W%!Ga|F1OvH+=Zp z8vo}Ye8x{#{QUBSES&PJ(dEvxaN8bS3%BjzDj#mfi{%z>>mh96EO)3b_lp)z{tZg( zz#SG&`jDo7*uqKwB~Aahg_C}ora$Pz&(`=~eYknA!H^QgFlC>bew>Bda-QhJ+q68V zYn=8*|NqPgmGC)>o^o#0{4em)oB7Nl3ulv?{kwV}eyli;Kp^bHw`lwZ3#UA0T#IVl z*vZ>U%s_{a-i(`fSoD$CP`KkNyHpzraUdt>tX=(XZ6>D}D4=Y5Gndex1g*SbV6@ zt-4*dSvd81ujc;~A8yv|kNWU;H2vciZu5WI!pZ*_z0Q2jhfmk|Z#8c8wpPpkh7TXF z+jsa(FvW-Tw%;3P;kMs9!NREm^L~)iefUmYZiNqjR^v;3_@6a?i^h%LFz*rW@X?#U zul~*(A8X-7z|DPz z0*#w?S*GXYMa z7yk3}YYV4+Za!MzK+@tv{uA^%_8lKSOXDB=@Ff}#%vStNI~xASXx#Y2h^9Z@hZ{aq zEIyR~Z8F5?Obe&{om&2CAKs<$g%*GMjs4m$)mb>}`&}*1N+14=##j6BH#NTA!fpOh z3n%|vy}s@6;h)p^7LA+sGWGqIg;Vt3>w4|*;cx5y@}v(xMbkg$!xwA(Wgq^C#y_!e z+wYB>10nFCoVMRP-iNzFg}(=H;kF%~ZQ-m})>xHcp@rM!)>^n-ZrF#La&NJ4yWB5X zILpn|;Vk#py4({rPX5%-SG9i5@!^X!KHrBwtnq7o z_y-!l#lr3Oz0Jby_Py7_Nq-3c`FYU7*}hu|;B%Wv%N0Xa#mP4>E~PjhwBTzh}{t&uzMKHu~s0HT_q8^ydE0w=A6HzM#wfi4XsrUYG9i z;Y}LfXW^8`%qyO=aPt3-rvI&lliu9hdDX&6pRLz*f3tAXn{oM{7EbyVn*OlHjox0; zdKgs(B76+~iN;U$;h|#`U8TlpKji;2&Ho}FK1;7FuCVyf&P(y1pQRQ~d)}=1-!usR zbqlxo+-u?F^MK~F+rsUB`b!J9`{^qdF7!c4iTR6#+vOgyaF%<4F8BEJBwI?K=Kk|E zAHG)8muuYg$GLi6{URUzgPOkHM{oLLi-ogYTDAVe7EU`kRf!j9w{X%wr|DxBPWly^ zzSF`O?cUm~#RzH~a81J%9azg|oiqJwji$aPrxw>Az~>q&M#u`j&;0{z5%}`iT$U zukq~`PCobOcHCp(%q7H;e94;IdP)$4LUv~auJVU>y@^HOQ{;i4`si!&Rl+kqdNV%0VBxIqr1KR0?=775I#t1e*DRd$i!^=G!bxw&$M-Cp z^gq+|L*^=mrd`HrKb2$QL|Zrb-_-M-IR^xV%W9fB`>UbS%6_lU0V z>pr|l_s@5Ic%#Pu<-@mXeCP#IOzOFtgBm}|hv#ZL8}GwijfZ@AyT+&Z@MkoBrVl?_ z%Xf~2+j=OqaO&YoO<$>Tqt6p2sQN7R;b&|71|R-2jeo_5e?#NDG(Hk+X;)VdQ~dY& z=({xi8$S9fN729Qqu;OT^Dk8ChQAqqPx0ZEBNW{OdbS3-G?8g$D^V_@aaB$sy_Fe zH3(ke!}D`h1>8aK`9Ayx-LDr6g8!Ef|AMyXYX-p^eE2He@2>OVi*-A;_;5oX_Tf+I zdCR&%@SA=3IaU^8i6EsuyhX>Ge0Ycq@wr3& z2oLgEqVWfPc$dZx`EaA30-bK;Dbo6F^x@|HIXC)nqt6F@xY<`Xf8X5jH}|y7`vnbd zo?D+q03U;!=fRtNxOqOe-G`g!J%8@QrQyJLw634wZ=Nrk?!(P*FC3~u)EUhv^&->JukoBgGt z;bJ~1`!Va;8-2K$KX>|YGf%$HhnsnCU|QR{m0s;q{CchGx6y=J>zit)dG%|(z_hwr zuQo7kXL&r5MY-nHGux@I;;XM z+K$PF<>=){Kred(Cu>}HUzG{pXG}~5GXmPJrLfZxBG3P~`FSmDp!)w$%P-aW&HNWp z`I!8B44{9F{N{H)aEAT)-`4dnG=w_8(Vu~@(fQd=?N4ZuikbHjn>2s>tw4g|WoYK9PuVeUWe-0Wy#(aBs^E>^1Ocm=-y8{UW$^W31 z-?TI3=N7GB{-=Sld{a*Z<@0j4`kk%!OEsL5)yVuj5(dhD+{-G**(Rg@HTlf%A9a2o zS)fMe_v0p?!T+iA`}?2C|DYbX485tpiNArsK>B-H>#s|*q%CC7F3HYq?4J`ih8$GXOTJsqp z^C>a`{Hn0}{`^^INy_Jni#~tOnG7x&xv{eP{H$P_V=yo$Wgn_^^1;huT1*Szd` z@zV?3$dfrcDgTvMmt9qMHHvE|O;zIRQZgCO^x`g^nBtdoA9h=uMeXC zt@mL{nvgjjWqNNBMUpo*_ZgxvU3I%y~L)>jd)5A;6d zoDg`N9Uxf)s6puC-J&wBt@y#-Tcz|)x8wsSvKh2W#nf-_0_1mgzb)z&DwtAuUTOO$ zGrYO@o*Z82c9dsTl{~rnLTC5-ppc+Z<{*+~BE@cG?~tmJKdwGrmG5jH(!P`Rg=(Mj zzJ=5vQrGlcDYn9jURm75ABpcpCS|XdSUI!@W~2emuP*sZ+XWe1!++@~^m8KaR9niB zE#+8BNwfS(KRLABs{ZiaB3j7q5X66+?OLUJhEa|eu8#lRjqf#aH(s9Wl~u>zvVeT= z6t`Qvikql}63Wr9_?z#>uZ9t`Tj)-~uB9^SmM!i|o4X`PQ}_OA5d3Eio$3A!`$pGU zAPms9F!E4_k>?k8Rd-YrI5gjJZpXp`RdnP?mUouwdymnsU;veF!Yjy!iJm1U8t(~T z4533}r0Mb!6$QDGBf*V(%QjaOv>-OF_)P|{@9h#hoCm0=I{vB~|3kV`+A4eRk=nuf z()^@s(z3blZcHCG{>g@Q9v^A3Q+1&WeJrTdERiLRHx5Fza zh0mhHVrH2C$6UDHd2X0g33U&E8Lqr4TwnAyTjQ&eAc;Z#<`EO;c^0j zcGtQ03Fnp(ph#nBeknf4^e#!;-ptgFNRg(8BjAu&@@eZL?;KdAv-?~({=U?jHqa^l zspL3s}IdO&HEz@;1CGkPSZ5QC8DK)G8wVT#8p0W8D>Ia zq^hg@=;a^1tWCl4k0Me3p3yOPh+DF+HK+aDDvEzi*dlN#In^D@vQSE2RmmG|XVN>Dw)ag7PwXwG zKB^*52CGZ{>P>)!%_?AuH^J!jFUeEDqpW>a!89i}2|-P~`rLGT!A7zRQX|ja@Nxad zh!O1{&v0UY`ZSe2{L7s(c>W5I6lMEUwElFrd($CQl^+BTst{&g8}pSi;(yEVQ-x4s zcXk0+!)a$jmtqi^_bO$=I~Jmevc-9Yhr&9h@0AqOKD55wPlJ_=Ln;%sc^jZdPmm%? zTkwOTN*npx5bxZ=Xh%&hptaCapWEHu4oC+(5#+~>*FgT75U6q`-d!5fzeVyJuPH=& z5zRGH_i|dbT5YABLUC7bPeUgM(ih$MFUuYYA@d_aOg-J3-zde8 zrL$;35rE>Z>xOV_%B5C|q^hy5|GL7PMMryrcC>n6dqUKqI|uDX^%(kq6xfak^Z)}^ zYU7YyseO8Uh?|HO6p9!|`y<_(pPUW^9aS=jC%||lbH%5EsK~qUlYOPpKCc*td8&6& z>5Q4)F^YEg%(D2C5-gkkWVpnIyCN~&12Tl4E$(Wc3C?9#p^u0kh`-Fy;2tyz#@Y#_ z13|b)&x%t0Jv~oR{;}-RG7RvCWtjgLbzAlrE8TO}d&0=AN?cV?T3P%iCpn{fi_QGK z5R;50oWGwg1$sT0jH#U7n5y_6B^R?CoEJOn4Vf1|`O1oT52P)-y6l?08T}#F=R}vI zNTrwsO0~4eQh+F-x}$Drp!h)V(Mn!7vM*R2e4?u4J+H#qKCDcJhz|GV_75km8Rcw$ zraF=RYiXzWbM6PvRhR5(`*pu*j#@rIYZWLV@(~1J7PsTSf@V0z*yBWBA{c+G3N!TW zC%ExXI~Kg${?R07)7OAI+Yj^=yvTy|JWuT95wvzd$r*d5EdGplZ1I7z`2NTf!SkK% zs^Vi{787?C=pTVtRj=j!XL8 z={U>n{SxDku=RRxF78U^qh&HWxtD{g^xjt7wRabZ;8pB7lqeqAUWM1P=6`PNu-n}w zUEOitcH=v`kacg`KlV$1Iy3#|+x7#%GiCv$Z#DiUHU%I840SpuW{JnQf&#-JmP_7H zWdZiwH^OA^Y&r$>C2hC%IQI_fKkzt*@$|_Y)tA8oisoDt}*%p0$uk>|CC<#ATn))UpMS#Tc)jac| z>5Ru;>Dw>MK(n5)^k@MdU8izxD0Uz`t9@fj z@TRkjuqp8iG7v1QCUlWuq$>-ZQPtNw3IcGn)$QB9@%q5V?Y*y?bhzaOD5?>L;h|2A z`CNO9bk*b^o*Zc*F`92c{;K%DGD<`OR_ji5BhsLBC0EB)L;Kv4KeZm!`-se6dxMC1 zKeFe$0NUqYalT!Lk4XiYB@Dw9Iy0_8jSMP^i-rvs0y0HUZjhna-a$NwK zAYWn>>Ob0zj~rY!=wdY5)9n3leUK}wN3(tfpQ`x6f}GwTNxc(e&^EGp^Dn(W_HOK% z@QJ$#Tce?O?UllXJ1k0H@#i>zydz2$bxZ5|^QloZaSRJVbsp_E7N^-Nf3TbVz$!Sr z2@8eZ@hN{2IWp2aEplXxce0CN)!CiJ^;;DtWzZ5<(=W4{$xZ+0>(llO3Q))Qc|(yi ze1h9?UQpzBb|b?RZlo(1`EX?XH{M&3565_~m$rWz@_vBt5#D`j_kt6FV1`BM`Czh_ zKCII(uM=}XEw(1*lwHOdmh>WeCRzd7dL#Bhterwv^Q?+LnW$uMip{3)O>8JkYc^3? z9XSI3`C04%Ih)=@I`&w~9;0HtQ=Kog0FE5V*1&|wksK9tVjqGuJziHhyXVOufxw2A z>O^=+MI0NC(s&hE;ANv%RmP8CS110@>iFxv^0S=iLs;8@yA%BZ0@#8obQACiFL{$y z`@vrGVXN38k*wI)QoUZ>dHB^wxiZQ~DL%}3>tyU=z(0BL_m6S8p)$eeIBw!$0%=AS z1#W7EnjpruNu|P zK}S$kujckCc79a#-!AT|h$qu^Z{N^@&5%71BT?zi{uO?`(`R$I#HLM8UF68J)t`xM zsLuArXEqsIGCE$=6b>ae5rW50hnrPQXiA0ZpnbCt9&qWtb^cYya(ueZ}?w3#}PP7l?cB`gJu8Qxo z3y*CDp*D@w#-|heBD14^=fWV>T!TkG%09T=n2{rS6{uCelb(?r^NEgUs#W^fxk$4G zlTzIHo^&a?TQaY#%+nT;%tB@utkLy%uydHa4TVRJgbem&V(TeB@~5XsB6{)|!6P|P ztefcUM3vy~o#+9P$?o^b$2H{Rz-CG|k_(lCLj~>z2=B;|Go9$?C8eK!P5>-KX8bYZ z;RCsp1Y`R}G9$+XmOV8hGscePfpE5AFHmQU7`VX!}ndu}rT{G-vKWb9;mvL&pDbDByOI%)>--v^F-^ohbh< zwTl4~P6kIPLn?79bpT8F8gGm{^Oi2u#M#7Nh26F&Iw@}-&kA`r%^Km|uzLnltx?H| z@=ON?ypLO(``{cnzi(d~426%wn39$Dx1ix5)4sMZHE^SA;g+!#zT7K&d^#@FFz-bjvlnkqx;4?|3)CMoL^=qr_lq1P|&qSThkD zJv$9YS>E@4|1tD|zTPc6<>wocOX~;o&-}gCdd^L3VxLOQZ{s`GGMbV%{&wWh-@_9U zcX25c`SagL{5HOWK{NlA0`2uJXN!@?8^I)VZ}nCj(uHTFmXFvV*g+yU{S`r$ha4n=t;4<{U`g-|Jtm zBY)yjsCSsj5x?t@u#v4s|2N7MhCT zz*e-IR;hAMm>Q&s6t!7|VAekLO4JBieW;Ypme|GCyHeC*ueZ29<Omd#<3r9ob>ff+u90V>B?l-$A8jC z+AV`Uys>h|hYy+Y-}0wYsl~aNygAVrWx^RYW=J^htBU^yCzK*T+y`7tswzv&!0%nE zCP4FL;!~xkL1l+yo!}G((5Y{|UFz;RG^A|G3vLHh5~!HDH0Q=CZeklFz27$VB~z)JETnX=tU#%W^K$1cd+mb6 z>4%c7B7T$^r9UXK66>wi0fh7l+V5papQ@$g%RM*0%c;kD%ngbUUzvROWf_m#*JG#P zyhOR4#{NpR;#0c)9*eBUG0u64@dFY5ar z(sPU!F%?8cT=d|cz-C@jstW#*hxo<4m!Sgp-{^e0knpQ1jPHcYsU z(m;RC$!pL|oo3*2AH^ui&qlXo|C$li9R)*@+}p$8_Hc%M9&pvJUh)YJtDWqhRq@~H zC1d0btaYq~;`HLK$cGr`@7RYOASe1&dan43Rq-QL@%M3lc^FOoQf2XLy)#q#oOPNL z+YC)sl71rs9SeeGvhlbxgqRzDesg7@43h_*FjSSixOy6A5xKL@4L=3S*fStl_oqw} zm3__c)VyQalN`;bW6Yl=hfZbtvWExIEu2^urHef2rh7W}i)KykXv+!@ttxqc%{UYQ z_Q~~7OG;i~SeS)4qr-iiih`V~j_h14(+XUCyD{tX8z$G)X#IE{AH1jWFMyTpS?aWJwMbU#)7 z@qPBkf6>PcSn>_rd@R%BbZ{Qg_UR0{sr_lCr)R)P`F4E%DaqPjcS2 z;PHI4CCEiRYCYghbJcyy>i810+w0iN$QMnDGUR#B zS=?28K+O{#??PF)I>xK1raTYxL$;*RGTS>h)tvD6XtKAB??Cu9Gd@6mXUFSoJ?-H> zz-IU%bGWY1doC#BJQQd)vb>|>{}3B7-ZWJqlplX3J>k&l zdQxBf652LZb5_yWalq6IyVR@&PU$~5sO%tRVA$x$Or)$B*EZ(rQBKF_=4Q_ShM|YN zE904(gATkWiwT6VaTDibo;o+b_YW{B)PwV*p7F1u^Pu*_-T0O+6l(47L!Z#)0$jOx z2eS?mO?7s>D65`syK$U!rInmo8~*cDH*&+0K)4D&xqMbPvh#dds_2$zsY^j8Z~LL&v|73`~3g3|Eh zy}5hNUGK|rzlTpK`s)pyAhVz3Dq|U9*cR!-~+0yt35rq^$_+ zfi{f6D{wo6t1@h1aFoR*MjgPa*1}azZ<`68-B1Jj_-I- z#km;X+ZmakpKbd?Y;Wx8$-;HF)H$u+UvA>UHPzmlpB)#*#vYK~#e%H()2jUaQa<)m zmWb=r<)w~p-a;S#2+q~t0EzM?@HHuWFlU9s|L6G|efdkJd|ot1Pff1>OUC|2Vs3TD z{gK36FC&if*V_6+JmiZPX2v(QXXqobDWkv8jmvcT@lufW;6GddMiyLdk|`Pnzl`$Z z=Rj_&zj8dnn1?HysjCe<(Y9kaKC#jYGh#&wu-CeD9n-ot(G zaIIS2X7MQmoH$7xFegxTR5zTFMb_|oayOS#{Lc*8gnJjg1e)BjH8afFHUy%L6oh;;z81< zh~Yk64JE?w<^0{9i?8ld+1!vk*0cs5H{^MG-iuS~kPvICQoSY-mtE-1OOwG<+li5O zl;ABgVz}`L+uWREkQ?BrtRFIT)b}AEcuX!O8pQ zU;XGcf$?vt^_H91k%OkTh7Kz5M-(*im~z4P#HYx^ygRlN$&m~5u}pnSTZkKn>8LTR zAznV+O~mrK%$4i-I*7T^Jp{YUU1V3Sm73uVR6B2?(gG)eGI+@vPmSNKcOedv)P(9$ zH9zeAX=?o>_VFwBdet1-vRz}@m;GnUz5=slpJng+mDw-+-(}BrI3uDxvpr;2D6%oP z&&!KEuCGL$1%)vkoll)a_3>z8IDD-WWxKhF%W~BHjJcTij>n{zo+LZ`>^2-l|BlTh zjwGEujFtTDk`wn1aN@w58o2r`tomK`=)lB8FQ`EkdlvlQHZmNu><{bRVo|la*TutN zlBVx_!M&$1b}>n)x8aPaQ)qW><&WiNcZv0-0a$@}0a@SloQ5;(8R6oLahSUh{ zEBQ81?5E5AIxE*DaqHgJ1L8#5Q64PR>>{Y&B=0-ZU+GIONnV{tJSDKXuXQ2tZoc2PD$@{1;iuBcuoT8?7i^PMQS zrTU*3r1aAfq5a7&<%)c@n@-Mdx8M>~>Id>RqCAN}@CZ}z@o<86ZzIdn3ddtk-e_C~ z!|Yct%S}sk?BdCTvmNXH-^*wqGFQj%ZvosLS&MIe=oR#0G;y3u;` ztR4IU9B4Ved+&&{d>XHdyY{_LE4z?Wm9N7KhkBlSQLf;3l>MBZp!cgXk5o3jN&NqL zP(jAL^2dYDE5TgNC(ys(nB7D(x(b}(25{zp%-cy6&)I%^Cw?No$l9y|e-4JRFP%OB zyw>fO2Y*P6V4>xtcg048YV>?aNRr3kY)j3n*}lJ90Ber_raF!%)7}X2st&Gza5o-L$>dPdj6)PW zvdDy7CiML9*BnEcf!A-ofa>rH1C;ZO6Qv(c4`JVywAh2lg)LFo2)2P9=4gfaV;6q< z;E!<=l$UW1%WYm!s63aeDbS^g55xO)=@hxNs3)Dwr(hn(j*+q|*JAV{Ys@m+`4boW zJS+z~!9;`x>clv7aMX@G9h777xZvp%@QU~{&6(4bY*6dsaT(4maUvTU1L3Q1JEJ9l zI~(!)W!|K>E3vVjsGRPq2Tt*e>Fw3id+vkH%EguYrFh&Cu`cD^M=bShr?T6Qa3gIU zDS_U5()}~?bSODTy0UKH`0rBMK`WSbWkvk&a1rS>lXgFVg*wTHzNMVX_@VR=rKysY zVnFRI+sKe~kwfxkjz9XgruYo(Ahmyw-QklA`@wLET?jXRRsknnACqZh;}T3U-bT>b z@l|@O*nTJaEv6(EmCCd9FfP8v%7w<`m|R1pjn#>>3f#oyg+?SE235tMQq|{O=O@+E zl*KrN!{G+bzSVYIRpOcu2aEh9pCd?(7u-j6qBlyR>v3kKR<9U)UP}$~iM9~jPv3(4 z-V=>KQ1^dv<##pu==&m}o+x66F2`z9RZn%XSnUCdzHyTh=N@`W)BB6mdA*w$hsxcu zmExeUxNhR7+Zaai`+M(Aw|{(J#uR1^T7}$V&*7JIk|&(#ezcyOm{pK`Tml=G7!7f! z@d^`xy1WWxRW@=5YNAr~GcM49wuY3tqCi*z=g$0@#MnuLSPdx43`x=FeJXt9I+)c<12_HZNjP|Ret9&VZ zUT>|EqyId`9CN^al-G~|+{RS^G&@XNKBK2CkEtO|7SHP9*Yr2p;FAi(ps%4mWZ32@ zh;LGaZUHA>o-3jy9@>WAzT3Cro1=1e_)(0?Kh|q&@az3C=WATQK%(A9MZ@;(Y>XWh zi5*;!Rwo{K5L|dsYQT0jPx3_nMXLBKFh12@;(M{yi@m_El-NaCB2Q;IJ480+n&H)) z=r}h2fu5`Ph#SRA82D@q*Rgcv@qNOLK~9v-YDIyOT?auH2p{D}b{%5Ki8?H-<00bA zgDYOC{Aq`OSY*pl0|PPyyb0Xy8i$occ0v4!$e%xGhm`1TZ+y=54$@^XpVnK9q``-s8z@uUpO+kFf9@q=kf^45Oq zoz(pFrX@JbtBU`s`+S$w@k^`Iqo46l;t|W2IME^C*$`RZ67ZT`>_cRpx|d-V=)`^q zCKZWgP{NAbvdC*N$vA~DopXR~tH@&%6?d$oG9-a_(j#2j8vVM_yMzq5Cf*0Xl~ z@bOsV$eG<$zB3d&$O;a4YQ>%hXXvqf(0MD?i*NN@{yenLkpb^2|Mq?}Z9`>0 zN3t>%>H1ELPy3+zk5b(~IUP~9oi34xT)^j^r`zc@_2^Y*`Am99v2K1ymtGV z6XnQQ1#ckRJZ3|+?C_@j&?!`lYrsg37Hq?B3XA*L8frtK?@)R?j(jrIiQNUBWtbv+ z_lRgW7A&DH9wkOy1$+t8QKK6R#Y)2Vjj0EZZ|J2Mp z)m@X%qo=0UFOg4zB3UOSb2cqOLzW$m7IdPVtng_mm2N`3ith&StCZ5`B2mhR($Y#u zF2zOI2ARL?#MSlW7Udr@?DQpU_N3>a_P%{eKAvads97!0&HxVrxmuP7W!csQp;PqA z@VErSvP{`iC_E9`f#|R7=3+{Tm|P&P1NP7Bzwb*^U|p7)FD4$|%vzPa?K*S!xxvcI z-6{JpDk-+;lk4(q{p^?p-w*Lwyv0Z?kboC+zQuzRn>6SB$;Inh^{A@ewwGs=-> z!q6=v75DG>CYr~jCppmsbHVBSiYv~!HKTMcj9&q2a%7kam{_9 z$VWrNCz-3fc)x(Mopnw_DVr(-k8rjFE#72e!em(aq2j~Ryq!v( z$ytHiz-)dwv0s27E&AQ^*bVlFZLtnPtYjVC4xdlen)(VlTtnyg1A$N=e1*A|ZsvDN ztJqI5TR+B}x!$24#XGSdKz>f5yCWh4VpvD0**|@r*hkt{g$7+wtu5ft)Y<|s9UEX>0bM=$493W3 z(Uz(G2h6vz@rK8U~Yn-#3EoQZAvs8U^HwuEr>6zdLKV;1Gw?u+8aOds( zLA^?z#t6U14VGhs$H~eQZd@pom@q3hA*W?-N%`f@rvFAJU2OOm_&(tkJFs>HE~PuS z2+PDS{;2F2=W*dq4$L^_&%n_)l$sg?_eYlHe}F}8I)e%ukHDEXyzMa&KGu$ttp7NZ9gY-ZcScdf|3!P;oTP43b#*p# z-mB05SnJ<`D6LPeH&y5E2!)1~$;Ht7{MG;WRhK37w%qsv%=jC?g5&HIvO;fZ_#=AD zBt$x~Hw^L8?aO^WydmK{2-Q9vVshCgYg^f;Q9I~m?Hky6_c_t?rE1v)hXb!Tu@Xe8 z@wnNZo^$cMV(e6jn$5cfm%H)(?g#s;OWsD6St4wsI{1z|v-4@hoK3v>fF}yw_=3x; z;}5akPK@WpW!=#N4*bKIM>WnCj19|4`R zD{B9K#JF_20ix+;;1($f{o5RD_3l>mGPz3exgKO<8FF4mAM-9Jn3yIdR%bqufzFNB z2bLwu@pL}!{m28@-kE&;;Z*kFsqiPV0<(5fqsp%3b`WmQtMb)kl=FRfo{)HY5rF;h z7>OFq(9pTwgr*gpsS18E<4&ev;D|`!%V4|_RdVT&bF%XENl9BYoNhWwHvw!+xdMA3(2vl7Pr*a%kd97u(2n; zVlLpF#Xa%%8G-O=blZDgKR0?H9Kx9nb(m}xm6Wo}k>6kc34VKFg=RkBjjPu3+6^IA zOM0*fByR`3RLNKbO=T1qn-@9QS$oyNlk7je&r3NKiEE+d{v#;;+9#2ZJ_#2jX0sUV zUdC98E?Zq!dsyDMfqumzw;&ap-7?>%`C_+w8zJuf$GXH$*6vd;x`^I^1Q?4GV|ykR zd6AFmoajdg-~7?9@U7k+dGkj_Fds+e+a2fKjTbIBU*I}Ty89ackO|>SjJQH6X~wxNuYTcyJ!7KUSSbC3uy66W$ovl z;VrC)zg~QpJ5UeY5B+V=EqKs#P}W-x8p)QIrpp+ZAS?*qh3>#WLWvJ(FHhO9_{Q7c8vQ<$HJQZ zH)Dkw2&_5L#mS6hTSU^`B{-nLt9?eRgCF>@r@AZUigA+fk%Y5R?HzjwDjDv??nXss zo#8~^pa78#Ip`hBAt_oR#RK)jvs#62VswEMy^od=dj_2`{;X+tq+&(=MWpa8eR-B% zkTTuFD^mWhNM+5~LvvRfhSvNUHlfVGiMSY|l-4 zV42dV+u<5|XcC70tmyBr+tT#YZTfk5-}NorcYvXlwa>ZIyGbTVAN1V*9rbRP<3U|L z#2JSUd{I+D5PIFv2j%CLx@*( zoS)^E>~(GlL%;3o`>u9kD-hB`9sdK>TL~qjAjf|CKHjd2yx)l+gSBng6C${fxsOqd4PV_V|pe=4>)#D%aj>0^V@n*#3Elu0; zmL?~-b*P!RYpQ>pT&b{GS z#<(S&T~L~H%SYK5p2}TJv};Jqb95Q-o_GF6hR$8EELfYGf#9i7oCb0Yr%nT%*g0UxEhp7au^;TOv9~)_k0-sK`fKWKO{G5N z-O(>~jEm(xD4ZCrzZ!>3Q+nJ;Pd4D}HD~t~JO$HvXNt{goczmG4^S+T$vNQNJ7C&oEXQQou%YA z4yedMZq$voY;F3%7O&1ODI_5#10{} zGsH5I2r2&oIY6@yagltk6P?78K>bsdZ_&;i-rS=|}Yoy3Um- z^e);qtx12uqLPhBHsuY0zAqKt)Iha_f|c@zBk0wZIwGw7<6(QNRs#9D{W)S4!;XJ3Ca1yyY9{VN|6J87~4_mB7S0( zI`U5>D0t+<=UBNOG{l%M35mX=SQXCKzbiWs=?imUEnQlt24%(I%nmDd+>1%-3*_HzSHl+RvN z;?Exl6-WGv0_>Ws0*cuMG~QGI#bp=to=ks(i&z*5ck*S78QPRmxUVmvdDz`g9kz2|Q;){$ zX)*MJS7pn4Cyf0SA66W=&)1DtJS5f@@hp7=6)*3$D}Jf>0p!Ea*V3{`o(vIsW2#@u zv?O^f8eGM(A2&ipqO4z_>{2`-TowPVbH@{y)R!&7Gx%8I=R5(2_kFYo%Em^P6P1Jg zjMpLHegK;<7arMM!UR|aSUq;x)Ni*UY+RuG`?k!SukxG zs2qr0gqJw>uMhGS4Vq>8fLYwc%IPU1r-S)->e7m=!k<r-VfK9?*Dov}$ z*l1Uo&y(`BJ@ffh|MS3^??dC`ul9Kb^822Dom=GNH{Fh#`;NFma@e~-_CeJosa!9(3tzWrW!Iks?71`$ReK?zKtJM&%}n0ce^WdXt;D}T+iwD+X-d# z_5M;iLhnnyo}m(d%<=O-%6H{mDfz7X#F_Ht4k#bVMLteb{++K=lqO%_;lL)3#Dtk*2jJx z2k%F?aa4Rw2ycxSe<`f3^*_u)wh%vA;4S21dGGRluCMfb=WARQr0zw!9pi>b&Z?3Z z!gxLh@6#NlmWAF~`e9Jz-ylC}@pr$vD+?*VPBs2j39WW=#ls7r6tI)ym0!NpHg(p2 z5K;W}P+^y8Ek#~&N(kzggd$(j|Dt^OOI!oU$Jqc2T)O4ot1$Cna3!ZK*QfjBBcaGQ z{eM+H(*NJj|4|K0ZkrKmX{~RmZC$?V+K|^ATGP7Rs}C&=H#F3@;@TwBm)6#WR@b+- zEpJ{Gn%ow`_saUVw%Tj!Lz7!V4Xw>9ftpHyesbN6P+41BeXFN4G}JC{s;>(zXKq7R zzj|5os;P7EM|M%#?Af8pOUvh9w78;b0e&v3EMHiOwF*Bhzpk~prG?@xZ)&Q)wzetM zSYKOL-x^v`zYY?r&%dKvUE36{*Occqhga3Ho-NI-UTAV%XlkfzP3>}z>><&r`el^5 zEi`S~v=BLyZ)^Sa;rcdEw}cvN+d`|FL*drtq57u!mF6$52LcPrs;Vzue16p>3l{c}n^9tMT`U7q>MpTT$;VURA#)q|`_z_{?$_ z&a0j?%dIS{m@{(L!m5SUm2*&=$!)XFP?3?d&XB}e=gqIU0wiwn946uiDS{zF9!fC~ zZ|a;P-j>y_ z!e3JkU0d&2s-^i%t_xgJe;ri~t=BDYt8Hp(UIPnRS?@JAqY`UFg&LZH$Q1IN)#$Bk znlpl zmsCS(p*7O3UZ_FL10s5j%iBV*Vc7k&S!cA&nRSNZc!tO^GH_y{Ze*X%XvI|*mCv77 zbv8yB6!Wsp{C|l*Pb3~s&9Y^HZ|1=o#;1ZuOV;w%KGLo zZR!mX>IhN;CC9nxra%`N|dpYAW(F#DH{#!K~g zOI{QQd(V(k+5MXO(6wk!^e=GsVEw4`s%yQ*)8URhv`D>f5VY1RkE($OsBe*kbk_|v zx74p<$+*-2O~oF9Bpa|4la z%l(qhs;Bm2ECT*j`kVML=wALBI+W~%+G@S!Z4Jw7mp0W0l%ENlSa9+wg;P#F?ev+m zMZ{(7hs(6It#x6%H3gpGjLCJ=Cf7{{UKfC|)YjEu^uS+ex5A>``sTLKoY|qafc(YT zWdZ(Oc=GCta<9VQSSKgr>-s~&_v9vTX5i#&`E`A` znLnQ``dkTqYFD<*6k*v*7h_m!s$EteYDOn+fQONkl~SX^$xY!YffMUnTSF(G96G74 zwHED-4%8C%PV&RcR|#6v+Prq%)bdoH3()wc);29)T_3Q}Wlha(_zQ$w5Yl|P*b+B+zn{A8(4TrS$Sn(e$7HS;01w- z%IeC6m4TW?3j_4;ftvXX76#^4E(AL=N;l7#kra#FXlk`|qW}!qYCc#6GJvWACXymu zxUQu>0Fd@1sS9B*ZI}y8ty~4`h1CZJ9=fY4sw+*>(%Lo|)TJ^o*3gNwLlPc1>t&Zz zErh!aOkRtE7p+>cs(H<-&;nR)xGhxPRNK}TSk@R`wW1!L@3g?=$&-uDygaaqhE*hD zHZ5;MEhT7mjPyu7GBE$bwCM?5{c6>>Ij#zz?A(~0>YOxpgA|P!3E5I(iR97K8n~gQ z%hj9$KJ6sME@dU!)tzJ*LBgqXL=Bu2*h*m^S*%8!RMI7bj0S;nv9feyhhS+THa9Iz zWHpXM&y|{%uc{Z{LGR;BQzNqOtjk&?dF9H*ZJu;^$|W7REtRjezO4n5q0hwEF{g=%VBYgdYSPn{E@anA^xaR!)_1~5kqoE!M8FjU19P6Lx znM>>P8<0>_yN<<$mj!7EdG)Cle|IH?UZ~ zOq7x4WXvHYA6mSjX*nFt+~!sF0oBdZd;_E~6QNLEH`#kuRhUL)GBAAoZKCloI_zAe+kYzncmA-&dQ7w!zsTeHMTMjGHjxk_*Okly9<=(PJj_HuWYhKpe zl$yEdiP8W4`Ts=&a+H9QuvaV}|F0YuBjrEQ`Sbmsif8-kVd5Ibh$(&_3rhHYZ*fCw z?X~nCCfT2k&fB^!m56{Ze@m^`XeayA8#xEDKfe573_voKGc>;RHq3oj)|*89V&kB# zezA6c-nxJySlqlq(^&ZxDLPu?Vp%i^g-&l(ZfP+le2X(=93VZ-5*!9dhc0#D{nI(# z%SY#<&X+AslN)}ZTim>qOH?b3L7k6s8kyl^^>ll{^h^diKW7YPZ7&*WtX)-yX}IC9 zbS165csWL}6ce2vb*zJPud|y%Xmq+tT%4f_JKc=ni^*egihHVjOuCwvEr-wL3@KGp zku;;aM&7o1)TfSvkp5^nh#N?LHNLWTMZIA=PuN*fw~sD zJd=NcK?JJJKX31q_W`g9H_fGN>~uB#}<+U~p)T!hgufu$=ozuS!t(V>5wB zaM-1^Efrk(brT$Z@H`V7_7r)DkhwX>AB7o_)FLNz3t$~Skq7NLMkFov2$sqVP9xVN zaDrlyGvb_!4T}*ammxv17%_w4Y{<$Sqevq%jXd$Ez(uXul=v z`OcQ_q4GUUzDFKKN|xd1U*S4x(piYAI*t6=pN&8xzd`0oppkbI&I(8^-a$}mF(!~J zVua4lgQ-ao8NxvR$3Q!Zskl8#-A_Vr)QRc%>5LbrQuTg)J_`8gMhVeHgJ_Pz1JC*TIBtDk$*^G}tXjsl?8K1}a zXAr_a*i6w>e5+tFtxyF&m+FvX&NJM#D^Fwd|sIqx&Lu9 zQppHkqu`))#$h?%0dOpnijF!bYZFq$a*is=l5VadGbEx6?5LR%Q3iI@EQyR(WV5rb zLO04)kvUoHPWdWwZWfCPsYt05QwUAxp}1i=x8r*(-Hzz&p!3gT5D=X?@1%W=^8s1p zDEtV+xhni2!}%)w5yK%B{+QuH75*2)MJoIW!_!sxQ-(`LEGH0T#8r`?L~2wdOCp!6 zNOo`@#9N{w!-5MCX;hJ%Af;_lkP`iqZ4OSs?i;9d3UIA_q z70C}SM`W{#oEU5YS*MCj3GzvvEh=)VM7FBPX%g9{BBx8_K^2)6d>(mrs>m54TbGIy z2b)pOlY#L_4>(^%7}|91W+j!5?qN`e|C`m-ZSZZ@HW%$T3D~flEkj{lY(M1d^YXD`qKQx!=AA(1ai1YodIynjm}#0RDkG@5X}&h*)_WK0g+a z3UB;AMvUCRaU>E?pW7Qe5lQ0e?GZ z`%;C`0K*&Vu^yxoI`K7;3Yb{KFI~m2GU>Zak}r+^5P(#?eeC)PBXniQ-Z+P1A_=|b zmb_eJ<6|S_s_c4f?61H}C)KZB92k4&K7?IGe-{gFRN*ZQU#G%fOCsE&#)7mK$9*|? z5sH;6>B{%79xApFL^6y>Gaj?44)I|**Wr7@4fvWUU%F2106v4l0-J-!o<9$VV;Q${xa zDt6Lpg6h1WBDy$WATIXx9_WZtzZ zd>xyV?419A4UxD#WGBO8G=v2{_DtdgUqHJcaEt8fl4UBJXL*ZK$+{TvQrouN6 ze^7;Q?m&2_3diq7xJ!j^BhAw)+{wKAVFGNJVL8;in0b3J@AK5RQ00|e$$m1ap)Qa& zlQqg!@GSNa)e3oYXyqY=m$IfxxV$oIUI~|1PFx9>S3z6}mv=rjtc1&(dl7IYTwWE+ z+OK#nNFsbtg%=XRj&%63d7&LNpWbrLX$qk+eHRjcR z8wtACv`-N>zbr515A(~$Bg}d9&yg&%n$qCs^Jrf(*agqYqaonIn6KGZw zIn)^X+W`#Ac>v$kKZ1{%;0d|;GY=u6sz1}J{!CSU(NQRW22(WAQ8a z3@?8U!(1MaALe7oa6<0bCN_*@9NTm|f+qYmfrWeF*cD9CM4w3$iCa|M$FAb6^=L)Y z%39R zyHOxnpfc^FU|6c$b`Gv4tl(ie#Kz^0-B<)NRZRQq$f<%iv%$#aix;Q3e9_|aMaAWW z(Aaount-fyF$wmhTyp5VJw?!Iap+8OxUDNqKxUf5mutvDRp54#u(^nh3ys~xPNO9K z5(QMjJ6IBkIAwqVVoJnXj)WY0T=u1d)5Oashpghnmg zhoho-B{w3Y$eUL}&u7949+pE)_2Rt6-%F7$PLE=Fi>*=Y>Abl39Lk!PcpyFJyY;sS zE4}1(evEKPm3ey}!bK{4XK0)mq4MskM7T!bU#HnGQQ^DULX9f?-_IkwR)xPw|Jkm> zTdBa!D*UaEp_qlJ@OS8Yx2W*<+2gmW@DFIz+f?}en^5k9D*Qv@J5~6{Y`ZQr6Lm0w zPI4kOW32Zp0HDm4XYi{svJp;_admtqTd%-3d_%n zFhvy>y*f?w1rZu@k;kwc5`kl4e~LIkbI=(zJS>NpuEedh1;zJPOU7H3=$fdLhM|Z$ zEwy%9YR%2NlNO_h?z9TMQ^}$^-F01x=q{_Scd5Fb#DSd#Fp;fo+Ll=)d*Ot|zc<+@ zEEQiP!`!eOa-YCFQnW$; z0YHW#<`U3ImJMK7P658hvRkM+9$Rt|fJwYmb?l7i0V|~(JCk8;gzm&oWY*5qiGA!M zYLJ~cGWZy&*k*x=xxo?)%4(3Ec&tR!AUknl@B*Z$L3UzDB5IJG_}SoMq^Lo5;>p3A z5SgyHO$pwMNGSwZ!(A`w|K3AiSJW)lQA=! zcvu=j6hv{;Q+bp``UwcR;O}}lE{z`Q@KWEr*n;xp-yp7VZ~vL z&0)OaFgM?nJKo|j-r~?dthi0Exm9P=V-3NRYq}QI7Po4Pn+oGr8_6$Ix%j7qRoySM za$RQS>L1o^^3~x~Q1GY;M(bZ4E^9W<@q%{^Pw7O5Me^X+hI5KHl_DIEjPe=5{Wr#B z(`I5|ELp0ST{29{*pw<`$uRO&Hn3zEZ9wr|Dui};+Ooz#aM>^};ijz$1nY!A3cf3& zV8*2234yUJN2%ulrJe%-lzJY>=BA};*ax!7RSFyO6Cu>O9#OeYnrL!8V&!^7aw!ff ztT^nFOlPRbZpBXXdr|SbDaG$ai{FbDzy4vx?sqotKiIspkCjd{0e8Wk?F!ZU9heM2v;#HG{pxUSf$FEU`uBp%RbOq!3a8SghQN+xW9QX-bvTM4Cu{m4}V6=w%q^d zAe6Gm59r-(L+BdNduQTPp}ctTA`2}H!o0J;B|WzZ?8eeNRP7Eoh`Hp(QgzV4g3^}D zMbnP79l@F|k7yFS-3WSCAqXGr#Vq3gL%p6PwIdEaYR4e_RWH7=pxd~O#Ntd$2u3k6 zT*FZdk0A06JmS~zWa8o(uHiG1`tXdLB7Q+^(rzID^Taj!I&^H*bWeNe*sETNk4Hw8*4*dSp@*>|!{~?Q@W;E{0rk4eS*(uo}s;o5S!3 z(|L0w&u($nC1|%fN7d_9PC%o!7)tx9zHXWD7Sq=)!zV>)O;yHEsx=wTEtSYrgm0Tf z#*Kjy?o?b}!4j?|e;7eptS1e4nurNO*q5Em()bg^FJ*QFSVMVmOI7tuxSwfw48^ZI9n|D&AYsucj27l zEa(n*3XrtD!mVP$mrdstwHyv{>Z%C7+F@}z#A)o#fld##Q`rc6~m!{dyps;8fit9tTmpSd9BV3;fmxOU6R}uEw4591i z2(Ix=bcf4y89`Uexn&kriOs7c=a#G8`2=)smvqOqJ=~R+c)zS?cq~avJ}>LZU7$Jq zL?&EedY_17{Sz+h<*XYX<&rXd!#Izs=8Gq>dQ>%U4GLaR?dRkL?vAKxc)5Bm-MtO} zZW>;8D%FciD#EP?L&qg1-Jg~x{sBG-*a#8YO#|AEhdvGQ1+=n|hFs4h0 zsr1pnd!52KTo{iu#^J&!wV$~B4jp0pP314u0;>e5L*@)nm zx?f}XiGt|h~8Jvcjg7(UvEq4P_Q)kfqE7d z{9rx5c}Va>^=wM+;x-b;jwf@mJlKgp!VSv!gAb%(SiF|F#xjX&c>{!xaqe8OK^dP5 z_!!Us!j0U3VCa@U40Z_%WuJ%nK=m&nKjfgGx+5(9-SjV!D@~${{w407H?!^PcXyrlN!UTzxXvb3V1huitFavzhQ zz)XBxL0+6j2FR1l3A|~c2RDUUoLT5<7SsP$uGhx%+jixcub*M@BuZ~_>rmf#PUOQv z-bCa>VsV(oVj>fNKyuaAS?1WyQncRxB%^>zzvIJ&q zELFz}YWbv?aBg%YO*v=iYo+}zroT0D;~5hx(s|M^VSAm4G*sqzG=%q)&{ zDARwW^iv`cn@x1n%!NCZi3XF=4rI}fM0 zjMl2Atb(a~5y&iWnL5jT=BFOuK4&y90KVFaPj-Fj@k;p+>UfN=oeo^%i2;8&5clee=41Gy4y< zuIc*L%ORR8bSd;CjS9Y!#qmo8Veuz)G1m09 zRyBPD@OOanErfMyJ%O_2s~1h}@4#(~nzz)d3D8>e9L@dI0-pOn4-1^RG|^MCdu|gIaIpEYVH|A;l6SD`UPU&Sy@g|8iwqU@`hS+cglU&x>rneS~%;#wv%~#Ueb3R$^uD`FE}u z?`q4}QLZrklV~H#mnO0_8}aGkV(`q4(A-^bS75EzBYc9`+xW%_4qDN=BkU1gNpel| zwXUfhOj+ev=g@P;_aXz*tbt}+cFi_*#-~S(v*vKqa1)X#VYoedrlD!h9pRv`mCrKi zGfZUs@cI7$QYvZY(|#-^gFfLyiBFS;-TY^v7b0*t`J8*b&mva*=5~{#OSlm#(C_jk>{8XNIKaGJh^2_ zp6Khh5c-VgOm8i|5ZaY};$!WdMeg$5K=#{h_Y4UdxUmv+{v`uBcGu6aIE0c|n*L29 z6#p!DH&KYwg<=O{^v-2fLGT|f^}bzO3&nFb<2)Y}G_Y^t`6kpRIrvx7_y~)4?F`R1 zk=xTmopjuhe6v?>BygF&w;hB7E1VW8yOumgg1#kf%^OmM9+a}~2uD@?ii|hyjXE1b zyVDSQg{o+R40rS+YX*@&R`T}#guweqCOU_B_;xeTt<~Rorh|!YObe;7QwgReNv00Z zG+Vt6=;d544Wnb8JLp=WuQLt3Pv??3=@5>V>yV9t1`fHL3wCk$bz!$zL0BBQ3p!<& zZjAXD=N^yo5)>xtzunvu2@JFRj}P9k<=~t^xUyfXq?I_Cb|!sgTul|bSi7})mqhji-OoSXPvTzHT8>F(Ry5SUL|pN zOHMgylb{@&YTHCy@f@wz*Xy+$FaezNu)UEYsqPHGE|C(kQhmD{SDlu(4 zQZa33{@29H__0BVbP`p8<9#ufb` zrf7VyHyX+JmwHiVk?R$-H87-#Jj3R|=V9v{zQ@CR27dO?-6^>(z-I{=C)>J{Pgo#b zGETM)`8$ro*-*HhoSEpJ3>7}07c&^w2ksoEj}3g}DkzP482ylV+(Kr1y>b6l7(Q%r zUpYCk^tHQC-A*p&{;3a@?c{8=W%z@S73K077O$U*DW%O_w=iAKV{LXGqh^t(`HcJG z7(po)GVX~NDo-Cyqb+)b9hoy4DeuN9y=k%n8EdUtn$Dv*dW3g}XVV7;mmU~C|d>6MsLFQ)yqenO|^RH$K z);UV|;3B0+_^!}W8$Yp+qrZZ1>&zG2Q@d!L0eaW0ggH0R5mNnUa}GN?^2^S+Se^^q$z<|As>7PJvGby9!R?YLOz ze2d?p)Sp$Fi3h+a&&iiD$1A71$48^1bkqM#IxjVyo=G-^`59pxmnaB}89K{1{Zgx% zpHMLMMFPI5ZTxi{9K9f0TQQWzdDC&29ssi7#M4rA>%b<2VOseBQKqonFh?H9fx2nz zM#6^w#Ck589xkVo8Q^7IrfFlbcB!4Grs;FUW9J}lf(bWJPk@=VoV z>LEa1>&gfYix1IED<{p2`yxNn$MU~0Q-zbHoHWZ#gOn?(u3&iP<@dqDn?_d@=B8s{v6#KGc%uNI1Q1{v})*ynuEUOhM&ns@sEdB_G zRyEzHw5FRC$O-4yTFQbuwn)lUIXjjtn<>{b+05VAZSBDaH3ydee~#q%kLIsd*W|a)8SfOpk7Xv(oUN-A-YZ z>wVE%s9t{klFB8);30IQmGAFU)>STFxukMP7@2_hGS{ZH&uAXFl8nd%JIW|xn*a)8l_)ZYHMyCQV%a@PaC=Xr1nog$g z?&;=8^lI0btDdKCy$W;r@)b)e$&@}?L0kRC#iAE`l}6`t!)+1i#H=V|cfV>pS;`@) z;D2<4#ZO3ZmV^7rbL0gb?1xnIGx<0$&cfm#8bBg&2n1$2`Qxg=+)Y7PoMX(#DYJ+k zU(GV~)T%glk}E=-rXqKQ#T!igBo&uwUgl)7SLeYI>fHx$s;yKba0i&s8%YDXOgE zn?H^Gg%BK28W!Ipo~FNO)xM}7MClzg@)wi$jbFcHPSQ^p~~n(zWkW;0ZNXn1^J=rtAy;wA?0MWkbZc2GK}%P7Ax?~7&Oj^H0#I8 z7Zx9;si&z!tC|i`(0m-gQUz1bBjAnO5X4Guc}YEX5(e8eRy>WBCKP7j`TEZ!zJYut z6Kk#Y2KS{7M4NSLV9G5)s1Oz>x7(~EUrr{pBB<2W8To7Bdi*x$r`rItBegTeu|?)!CC9%$mR>tnn4 zA6EM}YDS6cV+(2QN|Cc^1M-!Z1B)YJ;%k!8O6UCy_k^NNW4yBF_eK$&R@beR$@J0Y zgUniwD4~_NPnJiu`W*CUAHKw5cbr+zKt|~DN@tWY7IHre44}D3LOv!D@-Y@OOC`<` zO(kgrKP|)$x3=-@-pJoL#Br~JusC`)MfQ(c)$~_@Zxl?e926Z@(>o(dSVwqYZIOIz zx=rabnArS)mYSb5b{mg@GWljEaY_1@%Zn+fTsnWNYj5YqruTOyuq8gYZ(b!H z_R3xKQSP~Cy(klX3i39_SB@*P`{b+n%CU}|=FDCg`0ZlO?5&0FzTQIFkabq+-@5h{ zXwsxud{%o61n6_~PzqsjN4nY@=f3UrnT24S`&!#)wNI*qgy=I1*(CR+>@O^R`8lL7 zO?nc)Yd=yR&sxH-%)X`3AXPtL4rY~d_x&{{XSFWis|*QgWcuBS&VLqo9=$V2g`@*T z&JRw{#H07vC{t!3ZP2zx*Zj;rk^(o!Y$ob_PD~v9}f{Srn?dJ zz=fM|unjTVed!M>U$LyYU@o#|jH#3?8Dm{Y1CPGHG{&4ly&JBiauR(*a3}eOAeRmc z!m(yea%P;B`8m1q-FH?;EQ1=Aa2UC>yL+Z(a(8x(ujsN`7tE%Ratr0@dl^1dY4b|z zfncj~J6-Ok$d#nj-4w}atP9pGHgl-j3X4CThrkppFq2#$W}3uA=4M9UkJkU3?mekW z``=uNr4}=d_Dm+s9X-qF)RAr?YU8J9jE7~9HXc9D)-?~i$J%5nImlYV4SAUV(GeE= z%tzY~vbIa7A7mYgGV}5wu{p#vPNMI}9ctVzQd`gOGE(FAkw`6$c4u@Da%<;#CW`_` zYO&EJQa(n!JbY1V*ZC|Eotn#Pj_#vg8yOFZEaOSJZOGcb`gA4+;l%u4(Pu-hqsa-yJB4L^LwCyL0H z*)nqedEt@uPo`?AZ#d_}$670oO;aN+hJ3HSH<>2=-nv-vO#G$NJ%mXNL|G%(tU;Dr z!bdep@I=b-bi;?6=Z4R~pn*f!xWQ(Q(fy+~x+5&UOjS+8w5n+bfC&nk_f(KoiGY(! zViS4DpT5-9>b}&aefgw?p2ap+*|50#0qDyotuI|>dI8DAr>(EDDjaZFM%^XszT~1^X?*fH>$!KCvOiB*XyX(aZLhY zvG0LsTD^O<2WyeEtT*F!isS6xRqX`2ck4!vdbFddV5SX~Gb|oxMs}>@w{h?x0UK)) zX5`O#sb^YKq^V~nntqnm zXH^=PV9_pG5wqhqu!uV>RvnCxt}s1f$Cs^(*nRDyYh(J3Qp@x{1k-nILf^IKw{+3< zb$I`QO*Z^Zpc6;|jT`rEAUefZ9bZ=dNa}dsA*&Wkg!KNHYs<~G?G8ax?@zdPf5No~ z(ysA?b3I6bPJOYEl=MZ;|IgUa+sgb{LuzJmDSXEH5f)HlnJ{l_=mr(Jj|ANQ_UgJ1 zl+?b}AVu^6zVOAmrb$X~+R+$dyuDN`e6B9%c&9KUO%*|7RHgT}=1{tSD?C$Jz;0K( z9SieN=q=770cp_N+C0f8&%Y1zhVMA}FlbywT5(uYif6FhXQ?VIG`&tA?r6Leh>9Bs zjgt5_=Dm)pi1$u#G#&>;d{y+vM_7D=dA~o1d8ho4Kk`B2bo#{MIm-_t&N);?oCos< zZq(HE;qkqx4(JcwM*=|YDBWU2z%7i&Q7W~Up zIxOyV1fn@S5&Yp6e3^JgSakPyiWaGqNr1m4UnbMPAAq+iJ;(D$#Jr(L$Sp0(Y z%y&<(U*}%4M3aJq{N`B5YfNB^BO!2eT;R^0*n(zWZ=u};?u-lE*AvSF7VtyxEE13q z-RD%=lIBq=pDiIdhR%Ev zvuC4{&-LUt^P42UR9+5%uy~3|z7&;wIoA6xqt~P()>tO9wjEVxSo|C5lFigLJsI=i zW{&O)qBBRyT$M^@&>;|4*)zoBNgL7m+(7smi|jkaypFNPO+VR@Wq;ATwrV$0%J{JY+PWH`#lZT&d28R zL6g^MB(S^Nw9qt#Q_7aE7)V6^6x)7E;n4s8#D>np?ge zZ2T>t(rjJV@P@a^aA7?fvY|DkE!q&1duTa3Kq(^}YG+b~Zn(SwHIGP0=SJ*AQ4sLAtPwNVsr>Q3w`JxNSHvOak@$4riIiXHCc;@TsE7LfJ3 zftGV8Py}(TWzo<@ltsLx%Gr8bUUHYS^)_vC(~Ic~reGp#*^%VDH~TXwJhf*!QI_`H zkru`_TC>c^hbFn(+_Gl#Y?dQ-zt(=u$Al{vL@L8QmgZ z+LZMR4two_GdyVErq5*Q@Ea_vgPT+vZFil7S@0Y8LRYRB%m0YmNkz(7Qb_$j-AiAY zH9bpySF&TH1# zE@#Os$DR+KC0RE0+<|_DYgMM~Fj6lsm|Z2`wvvqCA9j`FS)0)grU_hn_zrv5feeki z+&i+FKlVBRtd+uh%b(+3x7Pto=eI3KkMNQ5NhcG>5~Vktt6(0dVe|-}&NR(c+Pu`+ z^U;hAIGdR`C+KM5e;s6GJcID@a*S?2vTmda?KtAlk!2cwL3A5_k5J)K$CNKyxGLi- z_))Ffr6T!igC~_7d9}f_q{a;J?nA7wH~Yv3*U+oW*d@LdAIugq{kDw|IU&ro*GcDS zrPIt{^mmEAm#3R0z7Jvr_sW6-s}BdeM;u{kql}=i_=i)G0E6v`T}g<+?j6_6H*UWJ z>7mZS_NcSe4{`6k=6aOlJLX%M#fi-H2^sQptDFNns;xbI!Ww*v3yRyREvs1?`quJf zIbLdGkBReBjZ2iCeq6$vqxDU+;9d-CrvFBvyu_4vqx^94txBgz8~?XNf1(6`_39w_ zT-sdp&W=hrf(Rc+ex$H?+E0x8`!AoeOxB(Nz z-2e{*JgZ<=l?Zs=((yx6DBqWG%Sm3xx~BnWQ3%_jcjWq8HnIv_wuQy|rO4m@iG1!a z?{X*Z_Ndc6S)Pt?V09DRYJ#IV=X%byBNJ+KmaDH2B_}B?`|~cP_O~H74$8D=BOboyyn;XIsJ;XIsJ;XGV}6^=aO z_Oz{V+M-WQ&WGyX*8Gv&vL`3^QhES}QcqD@6Jrmt@fo~<{NyIe_g~ztzS#W054ufN zp7g}#hBZ$plt3{tzD7PIrkc(f`@&Ve}$PJ4n`u5~(V zR;WTrsVgk7vT(T40zZ-YSdpKl(rfBlYqlm1JH=;JckG(S&XBtit7e8}48JF)y##&d zML}?s(kTjiLoqk}ETOy8uXPfCnbpkyM_10bto6z{^7PJl+nRVr-3g0p&OpkJx2*|@ z>@JB1uXpuZ6{%HHw)Qa6V_~#zb}J=oV(P(miy}XCcs*&LIm-7Ibl(B{SIZ%Xlu z^b1%XfNq|{Zvk9PzXh-iFD$s&U4L!K&*EI{F5cWv1Y8pNiGWMoPXr9-=!8FYS8v-g zW)<#mmw&?;hI_c`@E+4X*=uj~+8ZO<8zb7MIB~JmTz?H|jN%b)%`>&0zux6MU^DJ; zJH!Vt42wO4M0Zm&g2LjPXJg4-DgYl<*2xUfVbGjKWT=;E-dEMPdJOL{#fg>V321! z^$bb_#8Q{vih4MS$mxN;3c%}uHp*Rcf!AI1dR61)b;H??R}}H=IoT}GIVM&xG5%7` zeJU3DQVm}otX6X5J^TDtv-gF}8)Pw+v4XX2UH4CBv7Shid2X9ZeUqFE`5R$}8l59? z!ut_1eyr*Wt#(gl`MyZ4R>`0>pD!xzGdVv=MwffOneI{Ao!H;7%?8K-8zA355A$7H z55CF3ha`NPC42`H!@Ns)dVlUD-g7JTz*1+pt8I5rzfF(6q{`6`>G9KZD1Y#VDoM>Q zUQ?B22|oCK4F{7>6tu;`zvU7=!Xtb9`Uj-*Q>8ckOMxh_+FY2M8vr&{Fl`$G(;rT% zd#!s7t9t=-+ttu;1iMl7w6P>RZ4dgFg)g{K%*kM#!;hM_6Mr%n_{qwnlzvL&T8f{C zy~Ow_N8BQ$Rn`==BWsFz$#ttTl11}EmtvBV?h^dPb8!j2q{lVttgNb*_P~80OMHH} zs})iUqtT>FI)bye=0g77q|Z|C950aeQQmYa#}-BG?;>T5URv{F>7uAPZjrT~7fUyr z0Z(UbzxLX!C2l=s()?Q6zc?;_$+N%2|IX}rjl8-aLW3gG>@T_5(Y|1wY=nm^ZB>-F z3a^xBl!Zc%gwMQ8ZV^3o2F-Un}oFmD+o1bi>XGS4?u;de zKF|izj1rH!?8p4hzJ1K9I&5});e15?cXq`p&3n@%r2Lj$ua4l~S^9(fwJ}N;BtuE(}3nx_qX}OTjw>wv#Ks~@}EQzc-N8n6*r!p2V^hm2x>&s zW@NSPdAS8!IbQc#RBHjBzY9W->L@uu@@e)+u@{>S`NHNgp|9T;9^R`?4oh!4k=pLN z_;Ti-ZL^BsYni&7&h)$zo^5l2tbAuzv}lURLSS}9{1S7HO+s{uCI`<@6iVLh!GjjV zEghNVM4QaYeu5!2++WJN+jQI7rK&W=BUa?wKD~KE^+i9zDK&3X z3;mY3YgEq*+&5q7myMduzbpi`6>izl7M+@gLFZ022a|#+JUxZE_UL6FCBHkuM>A7+ zk_vNKrNpNx8_s;@vQ*+7)$>R*kEz8GI;Y1YLSJWkcy0WKpf^+-O?c)A?;Wls;pK<7 zTwB9s?uDk|D2lP%yIAJ#U2Mf|3eU_;sG`pUUEu|tEa|Ln)8>^Ip^sm%7tTqaz9^z3 zDU;UA8U9WOAF^HXioKA|tukND;7Lkhe=QSF#n&_ZAQm4||Ay7O6k$IiDU!M;@@;1B zg_I&osK5C5U$`fdb&BX8&P~*tbWE?JKt_-7{mhkYdJCmDZLA=cA6DSUK>X;A{Sp{o z^*m0hXn_{JDZ;b#TaL_Moc6iFIsTQW9|WgpcI->h;skU%T;FfPCHDD&CB%Ao&e3g`z0FGkY+%YHym zo>2SN{i-H2&f_2Xj2>Z7-n6^Y47Bb1>p%b<4D%-`NgI+EHh|Y>tZ)6u#*5sgu^ge-&lDNHfnQJTwN_iVAyP5nPnhB(0JFAG@8>OuxcZ9o@eaP*zd!udqYvecv zDF~a&hLgsod$i6#7M#4o;O32rj3(ag+=Ik;*es0Dc?RxK`Uw#_kILgb-E>FKJn2Po zN7YWdvgUJe63VN-J+SC{PH38rEjee_8>SuBPc8$e;Io7 z)(X6OX)ITUwLBP&dTi#4ezlHA?&enMXHg!xyOf~MCS|jY&e;L=z>E5@)Fh_0`_eIC}PqM$<~6yJeNF6?k6wja2vukttvBN_g4%ZYd=^EpI|G zCV$qwu!#9IPNdi;Zr=`m&g1*r#>z>xk7xC>1kY2FX|z;ycO|*6-CfC^K?5h$POf*$ zD-nq?mTuE&wwLrOuZ*W#d8L~aNJQ4G<&~7^?ikPi!^%qBiR*CXZk0T_l+jsD%2k#8 zTexM*Z_;<}O*iW<9p{l@A78uJcAk=+lZ&{N+P#v0B%Lp%MDHH1Oc&o-Hp_=zS;?2; zX;U=Y)rp;F$~#Cgr;OWE;h(h}xp~#dp?r-_sbU$yfq&XKJ)JY9i4KSFVjZzU0sSBovArozWa|RP7`C($B4Rhnr7b1*OQm88h3V`7aSKc@@d?b|30%9j3A7WQ86z8y#~tyU4o>_;x#IjZ5r4K?A35BmZDHj^h-B z#o?Vai!IcurX>oR&sE?O`y&#!Dr0tQlxfUpp7L_=W#=iMsdj}mKk5oZGGAlM6n=$h zFY<*OPbV#tmGe4YR6(m8eF64~W&Ebh@In%iYlIWs8GK9kj*=7Iub1maYC1wpt77f`1pe^D8k~US79cov?rxxu~%tNO39vQ zRXO%NZP@N8+JaFl>9T`fdoaA5-Q&Z;$P@p7l@^OESMsr#l3e3Muf(R7M~|?!yz>g` zr)H%$?W#c5lI>b@9Xf#+oA*~r^8y7^Pb5HdLh~{uOn`oVd*Zz-VVq}Pw`mgj8u;1d z+V7M@Ze+XPvkSAnRea6)xv|9Qwd4@D?373pcw}xZbf5M?Hqe9BsfgFbk(;TyqDvo+ z+yYOx?b6egMiZK)CF`&PpKIx{x9Iiw2I@e#arxIIZY!hM(zOmuk7m}gZ5Y!#2qKN; z6Rzw^??zyXEQurTrrynFEj^M{a=6yoQtNOY$Uk!uJdlmd1Nj%KXmO;guDgidM`U!$ zkJuT4C!Wu`tmSam(16m!Hd{;|T!PMzoR4?(_?8~?x0T@M31orN-I*+U8=EW7i&c*D zeedQ{*^xM;Y9<9fyq8#I7vhjAw>>1a6Qy>ut1%Z%bT8?Zxn+0vf?dITRPlo*f+st? zE%zr2@}YB7dzGJ=W>)chMGuMam!f1wI+eFS+_5GjpY)CU>oFspT7|WS%t)u&`+{XH zvecPnxi+50aP(0So>6rvdDHZB)J^9$N00DFRXblx98W1-rk9ts)ciKU#|ozYgMc5v zZvJVf22Slpc6hdF(AHbe^IS5FI5;C*k7Z;o86RZf2+s{v?bXH>7Q95E^z?bluirXZ zHM-f!3&xpNcEL0mhEoH~yk?jFEaF~!%q?$HqiFfY29iq%Zyf2_xMPV5zUBeyU7>OHAV3^^w>ctshD=UIm3-BS8L8OY**nJPro>dOtvT zN@$UaE}P?=%fi&!CrUc6@Kl)(N^1ua# zN9<2a=w}>xxRVy_PG_va9qxi!l%Ffgd;Xl%kdkwI@rh6r3KlItbZq)<+1d7;N!B)= z1o)sA?B0g#pWU0)@F5rGv-t-E-61(Sr#Jh}$N#L{k&sW8=k}f{>VruxV*8lKZg_o7 zj{1H&)cxAx>fUbLTzw0CI@4@S|7fsk(~t0+-otL9vG*DI5PuIVFX*h{S%S96B?laI;r5d{2; zXmn1BzOcSd>%y@2W;c_z^?qqReq(nbDX`JTulk=rYIxe@pWw~&?}f+A8|z_P(e`4D zl{8r`KNEAB*3!?l8J&MMePx$YpKcihzlzqDEeaw(SHic_UbSkkly|&FP?wX}>)i3; zEsmPcdadPVg!#(mriohLpWZ6payv0u9h?39d3#;A=crSwhiFgIM^<5YSMR6ELQ_A~ znQ#0pj`zg4{`z*-d&Z7`CzY{NCim`uTcvkp=~p%0OZ|+xX6IOKv_lW2+Id>*-q!0b zQe&5td?)J!Wr;2@_*(Kurq~-~H?K97ar&=>UZVe1;M7R6v4KyzFwl)=3C?C(v0CuB zH+B%Z@7Q?H#d!BwPhO7EX==}no{)bjDHbDUxmH-XZDiDKy~TLgy%*MQ5(yG;%(;2I z(sMhmJS)15sZD|gp2{0%ZLY~gAKetvs|0VSv^rF)Y~jEs5YonHe)eo6PF@$gE!8l4 z2c1>i{rrn7`GG>30qBfzaV4JyhC95%;Sp}S{%M4MX#`(Z=`YiY5qx>&i>Bvim3#rX zE$d{Xe2o5tTox-=RPw~w6%IykOd?Wyb%ZmGaY=Yxge#5dG=A2`h{UlHiBByO$3`M? zY^0UPMey+ve1dDSYZ)uyWAszz@Ao2}q%r(GIl`63;{y;bGUOuG!plR%2V)(0W+--EJIeoIWhsk`KHrN^fdcFoSEGkJ3`}NdRXmn0f&LKQeLFwAcIXbr*?W4XN7{OnZPpd-R8HC<^Wf zzgL<5v75cL(zG^r`NKDI@liF1B~s43&dxjyXI_Cbf9%qklm9zsbmDf-#GdQ!$?nk+ zo>n=4!`{Vn-Fnq8dyLej(~JE?4*$c`D<`o0&7j*{ID`T^m#SpKp&5eDF19-0S=d;4 zZa+;~=>pd1ykfpf=)QwvQ?G6>WZ}*_Po2|wE{h)FOWk&%^lqA^^rpQONZuWwrRJjn z7Au%`Hi2mu(!b`FsJltQ)O!hdmn{wYs^vAm;52~LD+;Flkw7db!5?0+wlo0Of0&aH zJMtcK<_kCzASb&ga}xaF)&HF{(VT4IfV{;H^i#XdL*c+E0_mTkx~_zA>8dVAq-=uA zh-{mI)e#vk*X{^Mb}PS^a$r8{O8-vs_T7dOSF8J-WXn-b^F4^nX)cDM3n9+z4y}zY zD)`*F(9!wMuqos1lNH7u%XH7g4>8}Zvb^^nTMqD$d0RC2{Odvy^KMMJPp)^t%i4K9 zbKjE9YP9s%&vk0>l2mOC;ky+3i0atBVWh1*11wUO=mL;8kAG~UUM2Hi=lN|War-k{ zvv1*jRpA%JAuEmh+;)ttK<;;2F(ceI%mZ#4W?L3uW_L978H6p}IY^3NQ`_Tt>X*2x zol}n6&2oErPWcK|L6akSFxPHE$?V}E3Vodv`G8I5^J?@64=Nu>98J$Dz3CAJ zlHhM>Y3iQ|cr_M@*q+UoGIAB@DAOfr7HNQ#A&4}_$isoA{ANK(1*#~#f%RGWveexg!tAg zN8GJ&>w*UE#+_J2c!70twWO&i?d`mJ7;%(o?8ol{wzW7g`@%p#DJ}LJ@N9 z)wiIWX0K3ZC2v?R9kPndxSs+zE%A!>)4JpJUt;%k(;&IE%wEwhvL!<`dSPEY#RbWbnIWK489>FY9VDC@QJ@5WrB%0u-br-7NF9660#Awe3v=v} zmA`xRg3_alF5YJ`OU(4OXEHi}5vd<_HF-cQHd$cN86bL^;yGlpu=pII{5Mx^Phy>~ z%9$R$;^f$cKkj}bskY0_ECQOo+-y5RFG-mNBRagG`)Zay3w1U<^0{~dwDGH|z9c?w z<*5-mhqUJ^N0%pGO@c3;he=IlNkoE|oH?P#g5e838f;Z9%2TWb_9y(cjZH4r@IN}j z;%`^cT;VQ{e{G{#=7wL}Tw!w%&tIH1ayc$@HoqQTukD_W+3?r)V;+W$rxP}wUSAt@ z@jBkBR)Xcl`SD6RVdAf^M{9lG()fsu4AwKRYtG31 zd%ll%dTCCdrR?ry%9M2XzNm1_T~_^8wAQ=pRr43=zA`3HXOnf0mX6SHrI(ISd$iV@ zOhkzFAJv8a^P(DJP2#xzB3ipv{m&_9bXmz7K8kAKT`(KmT)P2fDd&Z2U6=ZKc{;*4 zy@p8?&%KP!lOe75v&cq{w&W_D^9O<78u(v+z%D^tnbn4d-SbN=I)O6E3T0V7k#Tr)9|xtY;-qIEQ< z-^XNBJHzO_pIt#BN}sF--CLoIiO(Qgcfpi}#JaX1+_i=@@}MpnIr#}R@}NW`4~jRE z8M|oY3*JxjpYND_=;>WIvM1>+6^Zq4b zj$xJJKS4PE7oA6JPukf_Y9NnCHZU$&B7lYbxJqsHQ4uDz$~S z^R1GDvYA!J+h$BWHX6HNTK}{;X&BPxf-YKm(9>w?1&Nkk5N|0ncG1$$%};J=WKV)y zT1#@JazED6kzFvYe@po}VCmCKyJ%_4Gid3hiI!d(Zz(f&(b6}~Pi|>s`N1vy(kj=| zr~OEIsc@`+OL;1AUy44ERJm*MP`{Brv$ha(-Eo}@u1e+Vs69Ex)xlXG9+aRu*(V^| zOJ$F)y(cE?xIP9~g>o&ceKXG0Ko>at=e#W^NCQ>OuBaVBbRX@8GA{B?!|ve!PFY{9 zogHW0fr^K*^P60s>jrp(hc_DRKWcY6H9Ot`qtBoR0uN^~KKi~98XkCB<_MwEOA03$ zx$o|trSJ0|Z~Cjy*a!X5!;?*N;N_lUvr(S>fG79g?MRqB3V=@ZbeO_Tz3#zdjXHRe zhm#HV-^HwKa=UkRU{l8E1N)SD+`r6=W<7ah&obl(5oaeD_oi=o_=kk&Ue6qFwr}8Z z-8B*1843E%Ug>)V2ahm?{pR^L4XW_C?*S3~n8$tY@`n1}?dg3F_jur08S4VGx#`;m z`+R8T`&{hR4V>v!^l6FU$9=pu{flWCyocBF3(wuRyT|>m^^#loNcUOcCHL_heL78d z`8@`QUhm-|50@Jp^nt;lS9R5I!^TyZ&A!`vn_G-Ca=)v*1S>et1InU#PV>3b6E8L>4p|-4U zle%7E?{4)Q(kAZaL2d1BM53=5DXgLu{RTl<-T2y_Yn$mxxS}Vq(63ta2ba4wgk^QL zwOk!iv8sphjwQD0Fl=sMdd+4*bHjE-sojYHeJifqi8VJsu*a4p*q<2c9H^u%69;G( ztS=AQ7C3t~5a%wmW7b=3RWvuSt%jjabDs@~8@zqJJ9IH-u2!&18=_f3u+dPOY&Py2 z4%?V3`c*hZn?zi60{ux@6>AoI1Dv`Fm>TF!jU}fyZHTxr$k)}@_NeV%%l>W_QAYxU z*}Md6h--Nd`g-7ovEXjuCFr#(#8kxr8#aQN$cqXVALM#r%L?(7B15+>sNm|ku(f9v z)@??F6E;rD4<8*7*_I2<4Wl>iPiZlN3LFEcdAnNLju~kRYQ=%kE{NN!RhJ~A)T(lD zkatiQUH$0VkZEH~6}3g&+tK9>g=Z)4IA?2iqe~_^I}~fQE<+hSPSuisTpaHk!o{7> zIW45Lzi1L=&n`bWEetXnEuXXzJ-BN0?a7VZys74fn6U}Mx4ld0EDH3rEkcwbWs`h} z*yiq$BGv9uqXFziv71aPf?gpTZ5%-#F=I^?!S=2ZQyd`K=Fv)->Htyptfl7k?#98} zOCa4p=1RJ)K7bUqg@p}g)y{V5JEN8gbRUI3SfG{F(sN(T$4bDLV>%~Ro)s}DMEfNX zlJ=-LeLE-08f(t1NJo+9vn6`$$ld~}S0u1=xM#L+a6Quz=|Ga2OVM+=%+Z?{Z6Vzo z^sMak{75E{3z40;}=VY9hhzsdwr0o_{pS=xOA|!K?#Q> zwK3PB=zLm;skfB>6E^1A?C=o*gQM!CfwcIE5vWB+dO{E!7QZ(Jcy7HYU!9p11wLbL$ox}nNo&Sw`+ADU)X#FHz zfV(NFbh9Bi&II#-QNesFURf2GXMzR5^NlnYaJiDi36yU3jDWYq7*YC-XH;Y#Sw%2T zfd%}LR?&44AS_G2q4aal2nfr1c$@I0*wgLXhzX7#O|DBa*0 z0byAfQSyGYtB8HfRP=q*m4o`CCmFi}R9){`(zbF*sntsOn@JS_x1`C5k1)sqj#Lsi zB|ZM2>m!jP!93tLrmF)mswO&C$?p;Q{afLj}>9dNstthUiU;P9blG!FrTByb@G@~tm_R|eP4z9s6B^E4hW=^yK!Xj~5U=-Z0W`5z# zC0UYf){T`Y+eo!J*=!d8Z#PozeucmEq=ywgVI;R*wRYWk=)TXSIsjoqItHaxo)Hk1 zg%Kt1N9vrlT6O&1bQJ){m5IX?-$@F0_oQfJ7^fBGp=hE>bpS%4_=(aK&j{G8Bw^A5 zHBt_WKJp~MzZ$6}sk>gyHk$bY;IT%^0iK{Fj&h+BrAIwuSL*v4OCIoeBXs~mp>!fj zUVZ9B+oU@7GF>f@I>VEaPOa3c2aF}9IL(rpJ65aozf4QPAYGvGK_enmI8Z+&awy&J z837-UF{1RAX9RpF#wZ5;e|Yzed6x%-afvcY)67C1a9<;}0Y;6cXKxtAjZ|9q01hx+ z9e}XRezbO?L>J2LAXz{dEiv*CwTDcq1rVVtG41~qK~bqpFw*Q_9HFgLd`*M~wQoge zKJ0@2zFw)(l@$7kRy_vQm~>fJf{1k_>`1>7p+msY+hh(9y&VSD@d%4}kPM7alc6c? zE$l)g^-oeAk&?Pf^x`57%9;8Z1}$ktEl~8T=Ss$JyjErPvy9&TlUn;FnK)4otm5W zAaw$sug)zrCkudhr6%Pk;2FwQ7Ay=qQMlSfb2lrz-;*9txW-5Y!1t6SJuAKJ|HHGB zOfV1VEw%%~vUCtizckr)K=>n!DE-bD^MFzB(&qyRqAiq%fKkEp1t0`rhUO-~s9@US zr|ROyv`^0mSp*!bBnc!+mDOO(0p^udI^t;y`BE10ov<*&T*(7o6mccriPANm5pagO zQWh-#`>7~I{Yyunpjx1{#2hq7S&lJ-sc8x<`zVXcWfYD!xjZ0LIX;P~{|{vcs9brl z{QM=IC_x2v6(F<;qgN#83RQ!6bmQPuZr?vO9sfodKQn(jLJcTnOPm+yE6b_+Nqzyo zrliuDu|{h@*H1n}0H3KFk93YYSK&`RDcQnaTD7@;mIc+{rCOI{BGpMfkl$`?dXh{f z^gw>R>Y;60m`b^ooh z;zVmFN^q^jfP(rvO??|+-qhy+p^)3yRziL1O5-h6`-!P>GT`&g|y(^v}d8wx4cl2V^4cWrm6Ar`<*jnn~nfRajQXj)euy7o6+^8ll|(n*`v z)e2p6O;QLVMOVVo)Pd} zBNYHE>P(#g|9_dhbpZyINm8o`3R*u<;Rn9Gp)sv;6# zUnS83YDp*Df;+?qxISJWf7lCPct)pVsCw1BXhD0?)>3V(RCYK=nqE^9#EAqAA9>}; zU_lX@Oj3Ye_niNkZZs3afg6I6@F(qvQjG)8lQvpDOS`1NM%?koHu2pcp)}Ca71;CX?$^l*((N*X~ z=}BWO06rgMMClL4m;-z_#+Zx;ygSnb^MF?vsT~mhNQh8+)EM)C@JAR?T4RjufKl(# zLH|?*hW8Y|X~_k+gOcQ&nrs#XhnZj=Fe;d~m{ox(CRhOcn~`#WpD9V4Kh*_xkg)svp(HHENAljFu}c9NM-UFdbF)G||)g91pG7<@unyz-hpGS1%J5jpVGXh49rh9O)3fy3VIq15_lae7`rB#m`O9AjH zBjo^x^%D8g&4#YkCYT3&-ADz%ua(5Q@|`GEs0G^50<1Pt0Wj)EIug&Q=FcM*(tBv& zf{SDk5H8ZN1B~iQTYN(;eXO69mB~QYXe$O-Yf>yDwQ6T$DFE(cq#WRUC6(@rX07e; zf=Q2{;7DUB0A9FO-N$I{LKAEOJkv<2%gB{l^_XV?d|ye@6qG*mjDY`$F``t}Tbfql z+7(70HeGo@n34QL36>}u0AWTLQSwGp>x8G&*c)av)zx=s)svnj?LkZ0R!UL5wtc9N z0pJKFNmNmq;u!&7Hc|)RA7Zk}%-Kw9VTmsJa!Q(Sx>^7qHd6cJ3Sp+iUeN$$fsGPF z=^$mfz!ay>H>mQ4QY_b~^qpO6NwcIjg28f!X-Rd_8m;==SPFm>8j!i|fK5u0UQ0&) z1JyCv1XJy5(W*m?r2zOFBXs~it0Xap(wm+U@U0jlN`LW;NmtW;H5i^>27mT2U_9pih;%XCHK00dTO9Isk_#Ndk+~7-K8| zo@k^Fz>{LKC_UyG0iRS-S#bRKI#GBkCXLdbec^R#9|;ZXZU*vz{fv|YL{p>#P&&pl z0>W=$MCoDA2nfe%&IN?mB8!r5LzkV?VCq`|2N|gy5MHzT)=rd08e=QqA|tf}q9G!S z(j%S`5N)B|2|zSNWKr_XN+s__s`f@x-wJq(lFEW(!cG+K_I!Y_!k6{H?|3%A&y3Up zxTU2`YjP~WuMx_U3Gn+Oo-@reKD99f9yE$#1&Ahf)jn@X5Zd-{ZAhtYj2d+pZkM>d zm1arhTAC%*Z!K!*5DQ@eaLfkcFI{i|KB^>6i$W(#@6c2Jd=Mkx`$`f!D z1Kw{&+W}#Qb>+<{ER;Ai!`u5zSIVyv7g0;qnbXaw7QhEgQ3ssy=2NrOxvF47D)Yu|ol zecS@*o!lp_d!MxKeUhymtVx3JrBH?+p}lmm^;XKGk5sBsJ2njF-l5z+AgMmyTDg4~ zQ;LsLmg7xv3!s<6w<4@92c;CJY=5fmRreDqx+(&kWTYJ6UPdYaPE(RhGAPaTjDTku zDK$lYt4{20EbUO#?n!`9NXwY>GbniNso4ED?MbUoIsgAy{rMUIeu*X@)Ioq_`h(OC zI8RB^8z^1o838YkF`{&}X9T<<#wZ5;|Fm~`cn3jx+GfQPFCpk|Z4LZ(&t#x5!Fz!g zz?+iKZoHw&-n9_50D4t9s5;iPx16OA%`Y)o!BHsUbpkX&oN2%pt4h9=3Jm8JdPiM3UhfwTV#9(a#c&Z=h8}JPY7(BeekTsHC#s=&%!oM&p||SK%3+l=KM( z;S)XgnO?yqnM#EOJZR)v6@jU%yC_LzB_g$pwh7HGU{W1P zsmqkxv!rJ6kCdg}w6p+1ipJRWsWFzeo;u6DuB!iHKDPiyRIf~_4%C(I`sr5PD8M;d zodfn#K621AMO*NJRU`|Og0i*Oi&j`3A#@LmGCKJp9wi&4f5N4zSC@nO`JYdvl zdS7~}3S47?1;Cq>R3036{i&TO-E3685<%%MFAjKjj4|0**uBC8^MJ6#cZPvsM_P*# zOi_0MMy;k>yG*T}t)D%~MAe|ps|F42{0Tj={*x+Hz?W`8UMfI^9fsW(O)w7#osthIK`rG2VAMi7AC?Xjn`h`Jg#_>%CCQ*px^}+S zuJD3@9~mhJ_;E}ZO5b@#z_Lxn5OwRSQ#!3=R1Rm-mH%aR^=fQ${iKip?ro$TV26?< zN+>PxjDW`(sQ`F;S~!?t8az+1*U#3;36aC0bzqJ zwsxZAEzVuH#kQWR_83z?4-jT(i3A86Y_Y9`#d%4KpJ@*rX6kc*&`F*4J*{2lxnRk+ zCY6F4D0e@TY5`nmqnB+R?7x{X)3piUASH`S&0Z)%HqO`&@cI8L8vE%{iHCpbV z#Wx@wx{bD`jkZJmwx+%v@DL@j`qs{5GliNo3UzRingtkDmoKR< z-GRHR3wxS(Er3wlFIcQg$nKji`%CMhzrUqZNJ( zG4*o+H;<@q?L^6|Po0ZrXat$o4^0yb?C&32Spl}e{m!1fs9x-H~kVTa9ynKoPj=P60X07@`U zjDRpsmz#i5Kho0(TDrU-oT6cWf z-~<%1#kNkApp#y200{NMn6vLRO#eM9Hg9oki2?TcLhC zQ{N5Lo}Fsdtkrbs){n%31`N>_Rfdc7Kd+MGz8-dAhY?~SDZ zxalxyC!Lr82P>&`7@+GN)0GF@%ye}CMs=mb@S*DXx9MsD9B8_7fY4RqgfLRMr71L0PL@%(rE;vSDS@A;Ppl- z07iACLkeA;CfEx2sgc?Nqq@?g=>`?}r3tnGzG$Qzn%&!)of>n`DEI3o)dKj5k#c}g zSR%Ivsf}&SRsnFAwT3t?m@g%mj%Ql1wUl5wc*E77QRZrD9?xpk6k{m>&Q?nL zO9`f1)2wP|n8lP+^R?;#V<`Y0s-)6RE!Em9y&&LiF+r5>_l(IQ4qew8OCIp&M#=%+ zYNP@nY_O~OPL#aGREn-r9Zz~)fUg)S2l%RzN=E{^o>DGe<=n}Z6p@<>`yW@&;-V= zp5ICG(Vj(8Rg2o%Pd{mP0X$Sm5-F5U@Qg`aOSS4po(1qHF$o+v8hS51H!Td7NzfdMnG5= zMwGlCsa#F_(F#AdF!l2QVVTvpcA|8aX9R?0VMNLMk$OxZ?MEB@7-H(@0>Uz@Z!f2(7v6j-QCo;1Hv*pobN=*`;p4f z-)bC2nywtwPx7R+qEujm5z@qM^poZ`!0n9G3OL3{Ilvv2B(YA$E338i8#eAB^?(bE z)CzdKk#c}1D5B&0s4Im|xPtB^MnJ?tQUE1%Couw^Yk^wN zp8Y@rwUr6B18!%e0$iJ6q;^0!Q^E88ka`rCc}_t1mI;opPbL@)put_XeTnKtga4bh z!&m4eT}i*vEU62c^VOqHYjFXvb(H9%>;r655`A%KWr)IJ&j)yllBCB`y4EuSUKe9T z=?TvW_+*SR*-*6NYHLLvaE9q>2ZZC)itDWvCwV?V_$^}%rK>$7Ap90alz#0Q0i&%* z4|}xY25kjzlmWkCEo%XsZu)b8Xc_Ir0G{Z%(1I&G3BKN8q?TlC57nxOqUB18C`wAL zR+e{7aRG3j9gtV;fb*3k`GV3}o)Pfu7$Zv8dB(2%_^tXuUn4y`lVti3PMV&UP~mJN z<>1zto&*OvJqhp{Bc&p`K&#fSDCy*FD)o>lE&%@BNIAfo(IPJqMQNZ?X|4bq9AiW& z?->E-7^whAzo_UAF|uxl^KdvSm>vh|mbR7>Oy6Wk3${V9!o2SQL{QlKwoa5b^NfH9 ziZG%y(=!4_o7I+jBJfw*OR!J#DjB&HAY1-V66aA3RGCG%9kAL+ z1vt8?k=g;#MS5085kKWf`-_0cMvDznConCh#se3`XiBRxcQVXF4}O|K;a20z1HNgbxq$GH z-N<*Mw7dB`7clB?`iz$ja4Y=1%#60fwVRC83i!H_+5zDVyVh#1ed`$kdz!Z`fD??= zzV6Vr!PP5F_dGzj%ucj*qIAD8wgLXZNb>-r4QR6lOg7i%0Y+n+KJBJsI|~lOANFom z3GZgXyQqa(sS`Ua9IeBH*X_W+u_4m}c&Rlt2M9-K-43`)xmX$SBPQ7b_?nS&h}Uiw zq15!(qE&N^r2sfjNgRvxX(=t3FD01HYzWRai>-iAK#vjwMx976@1Sd@>1qRnf-sl` z7}b@|iutPJNYhmSJjO_EfX6DSba0^Sa1+b}LIL>&7}b@I*Z!&l3h1^FAQb$^y3jCM zgaCS7>)FPo>eq$V#sc8$<1jn71HNgb0^nOpDjmX4Rc(U_<~CG#k|!nSqE}SvPu{5y z6ha}jIVttS6iaHHj8L16X1lPb!XrEh@OUNB`e{|tSOE85Gr5$tHCpwxu@nHC#*0G! z?t#L+^iu+f(nFpR@X;7!(y_GBJd92@T^)ch!$$L+C_UgA0i#CK*_}4p3Zs)uR}Sju zdJ^ExN@71+J5jpNGXh5aNY5mH*GN~JU<=^xMrsG#(?|ulmNQZdAe^DA3&2M_S2Fxi z1XfxXKnK8Bl-e#l%;HySTty0i{p2m^~ghEMWl%SL5TR^B6#$<@LSIx7`LI+xY zuqUBGCwWp*eTklbOT%9q*cJKTBM=j8*PQX({hfdOlL_Z%nEHxXUg`h#cT< zN|N43=_t<#cyx>rr8A7N0C<6sa)2vhvMAkXj0M1-#~72H_Mx_DR}*Z9!wWnKuAS~l zfN+ub3xI#(*#IvwQUShRYovBS_*`o9;XCzo6BBEJr>&lpY#%&_Ycy_QAI69Txb|4x zre=O&<_dtH?Iwn$%acw(@BtId1GcIlROLIF((fKgrP6(w|mo0e&SGpyO|fM_WDHLFCkQ#0D1)kWz1f3Dt|Jtopa zZRYCxF={dg(%xE+MAfyHRG022sDmt}1p){^N@NP8N`%ZSYELU#kJwvqzTDLhg|^Ov zG$@zEg7Zr)y&j|f2O*0ZX)S4_wX>9wt^)~;6t$$!L`v%V&tmI!x2JWtr*)^oeXPdx z1pTC|VnDAu2i@P(sFpbWeWGJ#f-2%`X~+94}eh!JoXC1rv|0WjPaVU&*b!hoklgn>_2nh2xx z11}7S2nb`4IJVWs|6V^i70}*lRmL1v*p$Ks=F%h6Or>Qiz82C)3(JTY#mCsEppPOvk4^_dHUJ;;I)R9)ykyHdP7kWiW zmRqwzxm!QUX+XrkMDrg|?&rM}U`BI*rg*?=Beek57%AoSAg$WfSPFnWCW*7ujevDZ z;*nP9MCnt{C=&kvk5uhd`pG>9{I;2F^8$jlQH=+g<{aSRO3DPwrvNYYY)MTQY1K6* zwkUW@@n0geq#WARYj>%kQ4P4)9w6la^GcGqptRRyV@#^ARJA$NH7_kSFDcbSrCLpD zZdxjp;KP)AJCka8P~jt<^s&Mo=5*?02=fR;Bql>GOsUJ!m8$q&{mcZ}PT&X3e(I)G zi~2Fw{3!tLrzDAXGDr~I*97x`QNi@?R$8#Nlwf*Q_CFRpT3tNZTrB`@+=$$12kfsT zX*NppJR{(~F-DX=@Qlfj!H)~gk38T;{~vqr9vIbC?T??#rtv^%N(n8s&-9_9mJlAL z(1w;20^|V+LQ2VoQLa2a5?m!wkA5|@_4Il~y6u}VsiCPR!BQtU*9Ru0_7d8F_pW9l?!k&GBrzL1bB zp);RhmJiGoN2?U_O$&vEe48Polw8%%le}ReBMccvx$5>9h3tuAl&e2`j6(j+LX|@P zXIx&nYAUqa1RXrFvK3O<*KK91gp}%09V!OoYN^$uN=T`mVU(*jk5Ndeo?(=$KY5Ho zN?i=2TzNH1nBtFS^@nUVmW#r5R{U~NE$Ts{#5*38SX{ygB*p!~7FR39Ewh4Zg>0}; zrD)J$p<2=44G&7xAYsC?noE{q^=axNT|{b7gq_QNp~361SWEG9foJghQ0R zmL?ZI^FEra>W^+pRIMzi8Z7>(wML1xIEs-AUo$+KU?OP-2|_pkOGr_V`bp)07*1jf z7=;uq4P#J2FechA9JHP2@fB;k+C)LMiGmV*cLxhNyP#n4cmG4V#6l9QFmMPd<}yJ> zTu>R?aV#wq5RLhiOuxsdl;s8Yx;Fk~8C zuKvR^mJ8_=8DkqpxyocT$x`?S_P@$9 zL;zY>NXh+wMApNs*FW1jmI?Wug_enmUIi24)pwZthc;K)PnrBz4-)ck7OG8@o#0=i zxP5DFJ68(1EY2b1s@G!_^42)UV3!@kcXMpUG9f21L{E)G{sxaNC@GI`iGt`0LP~CS z-ayV-oNM~qo<7X_LzOsiuLp@= zKH)*)X}|R#ahdZtmY~E1OnP3FFm(Q7xulE>ZCPbPN|{Llbq90z*<6)EURo-_vsTE< z7^2QpIUrYG;mxij&%H(bgI0WnkVhCISrr3v^|Z$*q=+|+!9bi?!opw)=%|U}7mD}~ z+G>^yDHSs@L#{-RB>jFjYb_-sN(m_?|IaINkelI%ZH`JIPg|&5$X6LMO(|D@^B9E; z@uLC^jY2AhOkTOV+%lF6d9{Tqg}f#%Z?H9`4o_JOVb3Aw@;Q zC|6fl?W%D+UogtS}~V1%<(b`c`rZvLthp0 zeuhkI%GG)NB6yNcE#jA0@fAYuvEs{x6oJO}a^;CnnDRwf>~<@@Ovt;f_$m?fkcG;G zoKYcxt4hdX3zZ4E&O%i}ZnsdGke;3iVfrrC@2j4k-(>PJ5As~YP-oG*h)sbo9Tw7R zRCO7XQYCPGj-i7d*RPoz@}N{2c*T_`7FV8FTzO(~<%z{5H0Pt-KyP{tCB?N#EuAtc z?ju(3gsyczb3f?ivZT$mJW|CMWv9f7OE1m zlOYpmQ8Ow!y&_b0$el;#{ zum!|+>9(>JLQb(zm5^c@)5GQJ-#kVk#WaRdu5zq)RYHn&@T#SdVj7cIuI74qg%mp& zM!6dF7=`qkAaR~Kn$`c9twx#Dtki>k&g45D6tv}kvL8;hEVUx&vw@k>b z3>ovw)s== zEowzEu`?DfLW(LRUudy1*o53-4PGYXP7BovDQ!W*g!byl`glzvb^M#JjzUYt@CK2P z*LrmnGT%aBA(vXHOe}Gqg~CGKyHs3qxfo}%XD=adwoq8e*%qo@#^eSMI-6CWvTS8S z{@g;#g?!UOWkQayhF&CO21E3MyU=4TTbYp3dTGvbA*ETUi4Jm(OStQRO~`8)q5@Vi z?X@HWi7hGJo1_bUwY7ekkU17A7wda=Elad(c`~~utC6RXp~S;Vxj@oOXwOj=iKB>D z5L-|&!h)I+mP|G2NH5vOTqNXg7$U<8Ee%cLgqD`Zkp@Cat5Q~>lQpN;cDVz=wxc3a z8EJ~oNJ7`!mI{lJ{?*4O2K$h$XgHbOq;bW5c-KWp={)aeN~tiiCTn=HgSa%<#0+8r zKzFg@?y}yU+8W{>q?pj2HI|Dt!~(=7^wriHHn@ldh)rlQ0lJ-#$*l2|^_biNp~Z8M zRYrvfaDe`KbwW5yHQr5J%1?| zQmjI3LW@~w#=+50tU_!;i&?-X9rFFc@~v9pabAwOX|RFxR$GHZ+~A*B;x^b=Cz z3}%T!e$HkrlWL1rNwx=)41Ho5=}~Yev4RW)|M-|7dFa;0Y4%9ROuv#myz)Jzn|;3?$ewhm>%I)F>GmG($7>VBL{ zmbRs55<+__l#2=?DcPfoHWu{>TbU{$w_2!7$U7OrQG{s&axv)f3HgA9YK8o|h028d zreB&|9P;=~vwGj6Ysgx;TpT{fgT#KHunth(%}p$ZK>zWi8frTi>&dQ4lx^F_lUKduxMmZbmg z2{?o}831FH4lYEK%=-xG0SwdVj#_ zcCt4(R}BP9us4F`*c-vp>H_l0MZc2GaN{%QBV= zd69)Gh5TS#Ubz})8OwznZ=p&dbK>&K)jG>qF62fFRSLN&F0Wkew~XaN`t6>$SpC0t zANW6F_kUu?eAPN=m5}1mc;Q9d_^%$9kk)sd3USymw(+Zk6fcD=am|lLHDqL|B|3`5hRX}$)u3t_~^Gnin6B9ONrw6$SdU8`#@ra%4W0n z71j)8B3@)AiGBx}`w^R~QpoQzlsx)L#z$?&3L*U&6T9y}obd>k^cP!VrI7QQ{DE4o zsu+d&h5TF`W6(_!OQ?_%Zm_bJ3pv9lt71T|q;PD)3%SVVtq@Z5Nb-OtQHh13gb1V- zSvVk9Qa9|_3Mt|ZW2$Ppjph!G`$CUq46Y*N6|BBK8X{Ot4T>f)<|KhaZ}8`qi#x1E z%7nbr&nFjB4-y!x#bvDNEUR(VY9=qR;;Y_2*D?{X#1kZBlZDEJ^kgp!+9FB!I?cZN zp69dmtehB#2KB&4TtLcF&hYmJ`Schw^p~BLJ%NQcI zL{-azEraKK!2**sOrO}%mY1?&t`}CPT$;1TLRCU;wosXn+Zoc^7;^DhkI#};hlCx| zM9pg-VgV0(f`t6Ng=&TTtA)xeX^Tr(s|Sn2{P@EI^I3#6w+5x5rI9rFes-r83`!#` zD2%Y6EXgNL@b_yG%qjEvV5x$?U&&Zv2D2tvbtW<8i~&*JXUZ7~H4Ww@YXmbUvykwJ zYr{f`!h=kyDjnoYQbTEa3Gu!`Z5g{*@_{@sLRekMA24K0Dp%JxTSg&wGnCx+ ziG@}q7FwIE(24;m^mbclt&sjgQ`huaThoO?e&5z~xsXzfnJUQDE?ekwA^n9W9_J@D z{WBLzT}J5hY^h~Je#b)PQlwNa$!4qw7ekS7$=1Z05+?LIt9{ufCbxS~FybVWE+u`> z>RBtK6pVf( zkgGkGu~NvdSg1xesZ^U~St^9wW}$K+MHy2~x%#YStPoO4HjHxhh{q`8 zcNj8^a^)$U;JwE=!*8vuN+CbiYQ0Fv@eCPT%GDIhSSe(Ig{p*{7nfJAT0O>~Ek(6g zt!foQe$?hF7gCflHJ7XDma#%eDcLZ}RfWeWC>DBV zzQ^gXD}tJs>+CB{+QI4VoZiQ2FxM-&2DxmaNiXMg9H$@WG?&wvoX+R8n$tc`w{yCK z(_neQ{G0!a`I{#hiQSy;G|2x1hVvXwFXMC^ zr{$b3=Cqd6p!`vcOa3yx{(JMwkF-C*`Q#Vc<#*kK<;icc2l)rD3v!xk`4#rRmtTH= z{Vmofd#aHmziA&VCHPy79XA?|&721LJMs*2E2j@~D!=L%0@69hi$<@L6JT<%ehF zM`qrS|7p&5iqrSw|H=FCpF7J)kRNNglCR~LT7vTbQecqK9FxkAR%GyXkUy94Do$%S zt>tu(Q~BYFVE)x}4I*cuJB8+Y6sI#emGi=b`GaSv2lEH{gQuv!AHOrtNLa+_VosNE zI>@OUn=X3Fnd!mu@8J6E;`BaF-{RCMGC49i4dy@0__@XA&OA;#IPK^32&cjPassX# zTr2rDGyh3WU*a@)7H&}9N0={_ydb~3&>$CbdNHS$aT+}FE|`CCkwN4vsTJksI<3N_ z*__VgGKi=KNlr7`yx7!C&K8ohoaE3VIiV<6{{qgJ zDu0k)&PCZ74nmyhF?8(jW$O#U7)mApMHSN`(# zAYXrr(<7Y9-@MA7f(GRY9@J0%J~Wkn@@Iy@zsU^Bmp^+5tuS{+ahl6%2fv}cnNxW! zTmB};!OhJa>#Mg(*BZpF22*!z=MBj6JlMR6PnxVTVf57 z3BA*%hNn&$-_qO`>mA?J7MrlLIojp;S>i4d`McIJdrR}m2~G9&i5%BSVeyjMBGG32 zb8_VNgh+R!EsFKWs%W$$NBd=0w6nRbX>!ggQruijl8Xiu2pTnvuIq?&8CXa~>_s(cBtg21C*P_WCuEs6mOYYiQ^+SIuom&(RW^+lT{YK+^^;4&^qt8&qq$%1Jjm zj|X?8v#qWLH}NqAgh?d;sDQ3t7}bc?lT_qd8Eb5eP^p&IJPANtCMq-zSQA;-UDvWU z4vVhpjMOzG2nwngZIG(8v^NEAM!JoV033@pQw5d=90P|7zq^DijF|$UU-rx>pshwko z+(}MoSSbBy`qnpU)VW0}TBJr+tMw=DDV#tz)cXEDb!?Rz&5G=u0U#~CC|wPAN2~Qk z>#twuUbM4NoxZ&K#Gj{a(>ELOJuHvD(jTMm8|W){jr;1dnv*Ics@mPt>fE9I-HVG= zWA$4n)z~8Sn$wtd7ueE%!a>Z)weHjvroJ;phot?1`jTGPk`moD-Wq?HLjmu z-mfnkpSrED#@)J9UEo%$j=k!<>ZJ#6$X%l9VV}!SsNbcz+3MnbsA=(XHNwqPW45TC z6YiB?*s9j`4;(vLbyL+%?$!s~m}(vBD|F|CCS(<=OHZp^8{I>zYL>i7CP+K{n(8T1 z!*jk+qhe9@v=hor+wun8NbgVY)0%%cC*38JhtgGzJ9?G6tnucLmq5$6Y8#>DU01u+ zzpjBwIqu@c#q-^gd2jsuK=CVXmOD6Sg&Mh6z1$9MhZngus{7EN0bjL5{mu-q1(V))Zvtt8-5;`IG9bR-?D5wxT6!Otoq$Qe*N|M-kfh z{Av};Rv9^}^MuN*R=Imm+!DFljs1DrYSmkC5Z&BB} zTlS+h$L6TEy)Te4RQe(Pt%}GXO68ekcAooK4J>ke<33pA^)z>AT6n&iv#;hrjas*_ z=4&-7bDtU=Rp&(qs2Q)wQERhn+?&*kAvb%B`};BK_ru)NS?@L-dj%*2r#%@OH@0wK z{JUA&5uYchSX~jCl9sK`%X>k+-n&=b|AC{&`nq4-`HEY-^Ocgp0o7ufjqIXY(Tcln zxJi9_m^*qma);7Sr}w?F;7=3Ow%Fe6nk6-hYuxQW)WUJDAvN|U`kqK%mGrgj+3cI# z;_re??=CHVm7w(Mbhk;p-3Hu})lZV&`YwE7cF$wltGa_iB6( zOW&fuNx@;{rRHlRQS+!nhSImBe^U(~dQsDEc6#4`fJ!sjOx}~k?B(4`m&NIa(zUl! zoe_GX>f#}aJ0)tQn@s{#=V?mZRqhf>)A#Cc^sUhm!sjNe4UFgGU>baPE+P!Jso42cz8~3UAHlA=x>mE_PjVc2^*r;w#8wyPy ztG<-x7D2pnuhid>ZSGZ6nvOc(UH+>2{HD;jw4I-vLA=K|9#zk#x%;3=qdVi|pnCUK zw~<`CrBRKAa?Oo84m7IU(i+vz(L{Z!rbvx<``wx9sf|PG$+Xb5X{u^SeXLql<+)i; z?{-(I?{9>_&1pmbx;yltG3pN+-RMmX>iiR`y-{rs?Nc!~iuPXP=BNsHpSx3iG7UxU zIp=6okNSyosH$6icT@G<^$#p9tQmhy^$w}G&VkdpV+-7`xUVglS8_v%wp~v8Prd~+ z-MwxL%=A{eTaAky>+*2%W_ljzU-aw+{WaGe+Uho|f8ONg9o+5CEPQ6`R(ArL=<$wf z-2UNtdqE%8^wZ~|zSmT%+B|hlk!pZ?)2jO>sBZTJl^3Hg_ln2V$|AM?w7Mp`L4753 zD69DKteDE^&w6KUuRG?}<=-rJ2L=XWg~WV+XxznFh^%gL=)>n_)x^3^!Wm9v)wqNE z-Gy22X2tHw8gQ3osfW^rvS*xp$*me(;nr5Zc$vC0>W+U-d_H8ty-5eORd{7>zK-NN6%HAi0voQKG`#Bpj=M(;l3+Kb+wjU zJ)~Z2=}$kAuD+3V!p&7ZLv$-WCtdwM&8>DP)ZYDs8bx6$?JeC~V3wV)e7&Sfji`37 zeDj8zCb&y(ovqfMR&8!{s~Ubx`J z&0MK2*!wR_p_G+(}DME4&`RH%{tMN4)SVDhBXiV>L&ZPG zfLZ)aHPs!R^$xkijoD_lL6KmXi5OnAp<8$+f$CJL4-IACT(hL-k?6!4_0q;_cZ}MX zw&mN~FP)^O932CewDf3t=kIE6ES{(*0sU%twd%=M=kCqwnRbo7?HL z+H$`d*%-a~m8JV{ES^kKVtaf0)QEmBx|so4t7&xgq8n9rSSjXLI3|_a34_^4w?7MG zoSW-*z>jm?br)){KS)CjobH{hcVC=K!Iq+EpSoa3wPe#^+3se$Yv6>Fi%ZGos#1QqJn0nbkzsuU$t2^P{=uz}v z?7pnsoh0af`nrm~+^yfs+Osx*-S+qe>WY51Icvsq^gkNT{2$u`$+w64i(jefb}!6Q zpH@TJw@_ZpTF4H6PrBr$%hld>ZeI4Roi+U5lAXJD?mE2W@RAumRXg1Y>h6thPRX*}JvF~kFQ@HOU)h+gex9}$X`cFNT6MAd{s#`l)G-A7 z&m#W+CN1>wG}ZTkqtTh}y1v^M$Bv<&AGp5+E;H#>cdR=$)_ser+o!H^N5|B<#tEuz z3&r$bT`@r|KB_+Ijs`K5c4)V|+g;bAGK*+#(i>GHFqMv~kwxx-o+T61s;Jtr@pMex z8ERCki`0eHYPFkltJ)evc)|RTl^wZHb!TI)qq_6d&f)uF>fLUz?^73&hTrNsx<~!n zx<>W2bVS(OH()SxkE$PjFxscSySnl5$Fx;x`ZH`x`U7tM&L!@|FP=Q+j)l3FQuzDz zC)^_SM>X_@8to#_s3Em}2y+l*2*I^RtC!s&_j@n6Uy9wK*5~a%;9{!dmfq{`S*LpQ zN(S7k_8*uKJNCq8cTMa;O#XFas=24#9_q7&6VU5Ny91bvtvjSXe0nQ@QEpC_+P7&a zO+D}AsoxBD58X#9QWTQ;!ywVS=<8M;#Nh8(TjW&{-@`sWujg-KKH^9};$zXGDn-gW zJN5iP58YB&qL6g=7Bb9{UQAkR?%wu-+kJ2zhS+0i{fP0E2=El-i>|}JS%;rd0~n{z zD^hFss&Y5GTMuM9Q zwu1cfroj@d!LC2_a;*CXj6-j%JE69whptXjPi(@BboEdlrVXbt?RaDpRxQ79uuvOX zw?#dSo4>_6bv3rSl&v)g^nY4y(fA@xGW7WGe9G5%{tk-E35sIPE_JLWC-jWhC$qejolG%E4F#7Gsz@s|cLtV#6AbEdWL%ZK0h$5)F zojfcqBK8vZH2Tsb$!$cbZ?4z9$+XOEEhoOEj=I&apvy-~{~a^KXAivC`R2~<8F&Q^K>cjETirWnRcuC0jk|E2d!Vp*P(9yfhqjZJaaB^8G#4JGI?36FsZ8T@jfd1&%yRYT9S7VlZ6()5b#LEBO#x1uEpl;J|o-lB-rf|X+)VmuG z?NZtO12ww_YVO5yV@N%?sTyhCT{SA=M(@JB*lnD?TV*sJ2wiodI^*=K>LN8RPgU#5 zI%Xq{stwMLS?g%^zeDbcV|!G05vDH+v94>&V>jGX^I~Cheb4;;Dr2u&yHEZ5$f2y_ zCF)$7#7LFX)p4xT5c^DP{Vs+%OwW*dV(n0AN3Z%w&KD7VMq^!xMWUH*n7Bx$NnfuG zv_6Lt-TZo}e_-M-)z~fScj)9l{NUbV^)mh(jLNG{e?XOP*{V)$*sC5?{fPI6F2Csp z^@{4JHC9MR)qhvxqdMnr5$NvSv_<{loD+NIbvLVX^}0N5ryApK8JO|OrZqc1r7k?7 zI)?@+7?JSXm(9EBTJ^n6{dxxjvm*7BLw#~)kvallGjr4>hbX6JHyXKP)y3}7FV5R~ zEoS(KR37G@=%-__1JPQfvhq|b)hrDmL|u-4U09^9&r^jtsw%p^d*|XAeeQ&3`Y`7k zU9(vI#&N6Px&E!KOIsc|siHYs=fTQ3-1T&UYKmLkrxs$hbX;a_@QqyKq<4eTXmvQ;xPd!5{c!Q&Vt4T2 zfmi#mv{o1HQ(xbREu25Q7p+#4hF*KMYky7gVRx`^{0uC{8r6?6+5XM+o16E%S#?wB zsxhC!{C4&Y#WD3ur}6N9bpVZ4J*4hT8*;bn0Oby-Et{a}?_i>5)V^Ey!7H}(sk>JV zVF@>MOyyLo18(En)85v$ZYn}A&r=h(s6|j=fF^&`xM&}@Xu+`?XAItO(<|zNeQHwZ z24lM@DslpCw)Yja6jKpQCn#E_r4Oawqh4O?R-eSYe%^r__p1lVT=#7nLI8Th{gQgd zLEQT$`rB0Z=rOoW_0zZMR#cZ%M{g=|XAG*zC$`N|3-{iB_~hd2^q$k}9f#Dwd077H z0^ney%t}lZlGB`K6q_AaHmY!uI(N&U8l8vz88tFW_t0NYtMzWq&R5h$d1_UW`t|4& zKQ7NNFRj@VyJ`Q8Gt~KwsGye8n2uehYBerLWi~#m3i8yAIciS7`o5EQkD9P$Yah*~ z)6_RMVM%z~rl|UxQ?2?o6(NP2_F;7Rn{$-X`E%8*y$GDg)VU`@LwbXH-8tH~)$K0WuO31fcc)Q^e|lpcHp7}|FgQ&6 zUnd-QUzU1x_0T<7DcynzR~i1jTl0frz2=4Q9KWFitM5~ouDdm`+K&`1#=pDasJ=R; z@}5PI|7`3uZhe2mY4y<@wKz}Z=IpFd4~NjXp1$>jdLiVVUfMSS*?zVTQ@bm{`bRCL ze*pIlcet^|w2G!29~v_3Poy2{Q*Ye57wjeb)W3${1Apml zT-IK?cK%ZJstXtWVb5MwTcoaORJA$kn!T#7NL|sW>T=W-hg2i>xEfVsj=K1e9%}Mb zcaHilwolMse$sDmKoM5A8kBf^eF zCw~RY0PXdMu<5Ao>e%bnbm_Kv`#e4LVx6bIhcr)p=iD6ivrf!2q0ax=&lgc=n^>&teVB`?yqj?CK zjhyCu#GQ}Tck@n6*st2}UWpCIoiVc^*q^SNkE-kPwq1UcT6qFHAu$By-TDhtu4V3Y z3c|GD$Z;2B6@QQapYg2F>ik1Ap{6OH+vA>`@Vq;waKesmK27J(k{O$qKAd%PUTb zq9fEKOHFpdjm<5QwsxnrZcQXikHwnX8ryNdG1gWe4uj~L7zP8LXX!^#vCigjQzRNj z35K()epRG3BDd??+uBf6b9-C33taRlu00mjPsd1hxVfucSm}{fcon`Poet6UE9FjO zb6Z2WuBExIOWz2$ws%It`cYA5q#+Ex#?DA2jOw;qwR9F17U?!m+F%D_#KT_JU01O) zvNjg!iUJF_MS7#*p62MPaD97gD^wPBncvgM%cPAEsAY3obF{gx1!j(Rt_w%IooKhA zop9Hx_Rc8O5fxUp$51zZSV(r1r(MF()7c!2Kp!z9bRceHyf&w+F5Fnx+T4O-_<5pv z&e%{Fts~2nm(D5<&z?1_%xP$Ei#SFaG%Bc?S5Z+GUR1C!Tv}F9Sh}EG3T%k9P)1`i zBMf>qHt1rh;r(~&qn$0`_6}#ls`l2%gvLl)Q%|IMRbBgpp7zc)T^)7xkqLNUs-=vd zlru4B+W4+$-O82}DAk4(7gahVt?k_rI8JAGq>~+BRXf@$hG(r4r=rSr&EbyD_Go*3 zdkZo(v~`77)^$akZq4QM(ADkDuvK$gczvX^-9g%cW7Iha;D_uW>3nUI5l@_?)2>Ot%T>wzsr+&Mzf)MbMc#BOT}tpd9i}C%SeOLRzQp;c*eGv9qqJ z74IB4-OZiRSX~SG3|t{xzpAdY%Yk9M?oLLI^FlVhzX`oAYTPf3iqZ=Kq8kOu4oHre z2xAsvdV)<|o8$2za~w~;Rf!;kLe zt<7!io$&IwD8!N1-+LRHyQnjUQQ?MgT)#H`9tJ=MBad@XJ3NF(crsnXhL7?xgpL9l zK62?x4=ET;3QNN#)KD|vRRHbQ1y#3H&Y4rNC|pol5-yqJbQ#gUZc0N0cU_|=aUfRt z@-3(=aj2Es8^d+6D57a|be)d>PNcU3{^&GBsIYJcEE}$mwm5Bdtr7H`_Eu9G*%}cq zTrrP2N_qaAf+SWXJ>IX|QfHK`tr2K~ikjwV?t%~MLB$uh!}Trgh)nT)^p?`uHIhsF zE=+}%TiM>QE@`OH;~c8(8#7HE|tE$uy!Wm>AsiMFr7P)2X((3?ep`3!~hSR3AoLJ+0~fvOZ#Fq-+>*z54& zHIYaMB33s!1Pv8ZvbX^{8lpk{svu6rZ*KF|rl5*OWIZ$&l%j|5Naf5gT~rXBonMh3 zE~qXmm{ox|(GkIz*k#8`6I$SPh{3246!r!z-H0@<*VWfYI*b$G-79W5V-ooLIs^g? zx7vxi>WodyOF()+3O8bSbtpVyERD2LNR zj?a|3Tj{o5P`coj5=>u^iGu;n3R~LDoMzGN`M5zYP2Sw=g~eDK+ODg)sV&lwO`%-M z^p&AUD#86)>)6xPRbSWE$TO$8i}L5|a7IHi#wE-;>tZcY>exCSY7g=$ND~&33>#n& zp#hyOO@`6d#f)MlX1V^JV@56Xzs_iUz?-$GWKOueVo~9&3WRi@uRt30=JpQTlD;ZZ z_YHGbk#cAh*VCNS>jMPwEt#?^sKgz&U3 zP8BN647>>L9dTokZ{5)4m>F4gEdqRJq}!8-r9-q6b%s@GY6k=B*Zyd&5m2SQ#}3In zR8ZOS@}6*WC_yO4%XQ7LTU|>mqNgWQr@#&HdLcT&s^%t|C8E1^MLNP0>zyw0bm@7B zTXkI&3WCcBu`DSXS5un1(u|4L3z#(3J2Y)Y(9*NUrglUzJK{kqP07v7*mS3kRh`Ih zV-J-=rZeq_9z?oXWhd2>VjY-Vw6t_lb&^;Lm4~qq^HxSM$M5ou>KzC$rt`J7QuP~R z9W=mjH*G*eSR0E6kSiJYHKv6)G2G;Or-x?Pbq$13#oOC3n86H~y1|CF3F8(^jaUTM z)njgFi}JaDU|2GptA14s5#3H*5N9z1a1iD(;|_OC(yLm%XvS2F#&a^I9!2#4WY%b8 zwdQucQUs~HkM6TteX;=>s|hcGB6NE*eS}t+kh&jMH<)grrn>i2^ztoZ!!#Feh@mSw zn86WSN4UA6*J*EQ(7Krkc0FdSS_vo(1db`5ZcK>5OV3?=lL$SjAcbI4(^0kS1v&<` zP|~s0XIFA4L_(}>wFH{3PlHgs^u~Z`UettjdgA=rldPw@H2tbvK%qT6E5D@Vmi$@8 z<@&~g(na(0F}*W(MZ+}FoHABES}MPsxRp=Si9bGAjX2(~?f%5AU5Scz$HmmX4S zQR*ApG00aIlvkko3uYCR$jVw9lKT)jO9v_+ZKNqU^uPuHCbIt7Ej-uQTMQ;$%}gTo zfK}Jg9LCzY3;QqN(#~ub7P79e+X=msu5+4D8alKQf$7IotdQG#^cGN;iGg9PVz8IQ zdV^gi9+y(ycXpu(5&;&}|)N3p|g{4Ib!6 z)Nc^wjS}L_alQ;|c%e?l6+Mg5rFuPA2NCjII~mb!#X${2XIobbZqj1QZVZ)`mWu^= zEr}4KV>HJS)Vi}CyNa!})unp_bT#jzJERO^4NYdOKx|Jez~mLyicQt4v1!&Gc7Kby z7q(^^utcbj%9^RNqOc@fSe{=}HZLDR)-3;MBLVq&=Rj{5VDyVyEYjRbJEaaUdM5#` zir|Btk&+thk|Zl1M%U%Su;jheoW_-W6IL6wbwtojpgWgdhM0aSn|hrQjA(kYthZ*gEZl{f zh#Wmg*!T^PlN+2(_k%Vw4>Gd=@=Dy)(M6c`dW!cYxMVR6wSib4`-fO5$hA0x&7e0y z<0cJylhcMf8g8ZEtwraeU28p-XvN@En7_uit?s|R8K3TRqBLnnn;+f;!q7Uj<> z&<_%*H&CR(;Dl*QppC#*Sb~)y6~s#uV}zv#DQz@O1hcGB zF$=OQNS_N+OyC{8Fz+Ifp-jt@nG7`P8sII0pXvQ%85P(*DVcqp; zur)^VZ->Uk$*`jr&t@Lul^Mn^B5lRfKB+wN(LRO^88LuqZap#JJ{dnu>NcgnfDCs; z(cWF{vCjI4*)@xQY~UMz!_C+_b-X=*&IneT2=#bk#p^aRNOWP|Vx}$H=H&$ot=VNN zMyn5}YgG*Eer$(GwpC~+TLWL~>wO6tWn}YwR!M1jK^PC4<}4~GKx^{+ta^6g+`+XI69V4giCk?fdabVEff<`HFP_~fHo|eup-xC zgY^_a@@$QELCH8Y_e8X)>+GPN<*C?jXzz$%i-C7@?Horh4eU4!%W~I`-@ey#M%tm) zQ(7+C*R*65vq2RX)y+_(XRXAnb7Q$=R?8Gwd2*v&$Zur_MukBu3#hHl*d}_lH0XiM zjxfIYnr{Mt=elOskoe|cej5>Pgi{ z$TknCj3Z*6hi5iJv?BO0Du!u=4D{hmvb{6>+1kMKap=fMJZNPV+xmxiyS z^}Q|5_ekANBza?&mE~gSQD~HUik618Os8HtvmmpU2i`DmWOnHBmO#DY zGCqtESq}}^a-`9X8$r9TSw3RS#d8n6vgb;g8)gE$n0agd@jilr*V zI z-Ph%Y5t&RGdP!wxv}V$Q(W;=jU{OSS`~m>_~QEV-hviF&QJczr!O4VcSQ) zBN1+-7lfqR6rIctwH-(FLk7L;Pj!)?ZFWe-1zNGSMo&5sH?{p~>PN>Am{EX(s1CJu zEb@-$)aUz|;Z&!MVAvW=?CH=c%)~;q1 zj?vN_>VP1C2M%ZwxCQNg^RpI&E_&~wPEUr-dk?hXjK?AVfNh3;-5+E#78?*ftJ={a zsQ24(%j_qZ`98un3~x4dWGs?Sg&Toa)A$)4Z+YrY0lm08>&DkhnU0m6c)ZW+8gnsO zOyb)Rj9bLn;Q?Ckeu`xAc?tDiQd4fpU}=5wH`+F5RG7Ivp*n!_=%2o@HH$R!n8JH zk4)w%?HzGDlW=i8@nBXRVCmfr4*v{GIVQmI3mf_+746p~p?>9B+Rf6hn4uTo{S|#H zAb_eIKL_)5Dq3UdMI>jEcMh;WW1fQW%WjikRJ;a&8J9RQo}@N5_u|Q0BPBZQAbiPE zA&f1US@Ymbczr?M7lj2e3So95rXY|N8bFT&4e_>?wEd=D~ZXZQ)qwVL0a$cp%ePv+@PmqcrEg8xidMk(*nGANFx!{6A5u)3?Ny-j=W?C?M2jp z^5TG1y1Ap*k>`zmN8=^9*%!j-OfUSIy-3o>w!2+moAD*wt>31Vh(+;N&(dutzyPYf zUJohy;d5tW{ltlrY|z&a#q@-p7M#2*<&S9;^o?@fSeWR-RB3S$%#f2a=pixKU)VdX zFH2|9p-e(omt)p@*cQW_I2Mg`_0aAWroUPyHfXUBpy!#UG1i)ijTYg|oi*!*>~WPV zV{Orxc?ov>)R?}SxN+jtoZKln(?1$`IaUr88pA}|`bAD!@2Ip(Mt;EU$ALz4s`aIO z?CVfT4`h}PnUygP+51`63QFf?j@l8Loq5qVlGQgXG%xd_e4X3q@fh>IM=8Ya z2thpa&dtmXeP)CfZ?eqGaHfIn4ClF*(qbz=U&~)R;>pa5=KKgnJeTR_XXN8*7GF&P z`?atOeb&*JE>G)b@~#|#tXer_L_XG&%530#k8r*O`&2;LQkVmhtby_~w5sV~^JkNQuC{3_Sf7&Pfd1htklQ~^JW~z?!Bkf@$(I-Pswljm1D07`=CJK5Z{gZ*AY%nE|~EGaNe6 z`v~XhrLtzjAZ;V4>GZu{@V&>)y-}eD%{|ibUA}ji?s+;^XTIQ8W}b2vAxrE+T(0uHk4OjIxX<%lHiSmrtvL z%F_xE@agQj-;YUxjbkjsuxsDUW9&AjMeX1CjN=47BR z8qd;k>jloEPZ88IV-Q)C(Fi@rZ{FqmB;SX=AzZneKZ>wc9zMdYFq+2p*^BJE zndRwt?6ob$iaACTc+PwsD{vQdk%?E2a=s5zKR&x2b2B^C!^zdi&!9dq>;w41hfSpY z^diQ{C+I_b*D}V5#%A)xhc%a@eXD}8cEaF4>$T?@86A92PE{wlTa#e-F?K!6CBA)( zaiYsV!WZZH_?~Bsf4M>Py~fyZ=A(Z1SH^T4(tRYf6spe7D9v=KZ7$`?-$i-6wn4um z&*!jMkWma8wM5&X7f|1-;Cwf5zP=FkAjesOe;s`9G~GLUyHPa9v|$=%4*~Dd{*c70 zZpqMfeV)sZx=uq;uQB#0m+PM^ATm&85M%Q*LJRFh1^Fn|=NcBYi}Gqa_2@27a%b|r zYp7qLJ_+L{v=2QK7~3)4QG0ISy#BdVKVv6Y9``Sd4GH~gcIM`^&<~P!FEf|=1uWwUCb=Vs$#K3!@s)wWINWUTPY7(;TYk@3-UU3l>#cq-u+F|L1Q z1UR~cZnIp**|Zv)&6vaw@|kMJbRR(eJ`Bz@(V=@$zBd-M@uy1NKd8_3^S!xrFJPZW zTa9@ch29j?xfZNPIiEiLxzx_N=4WQNp~6q1d;TcXEyT#LwuQ36|1R^Ffu?yxA0|#u z(wJL>IRYS(dFe>HiKAiZE1*jVqaJq}9m{8erG)u+CgG=Xs?I-76;Mp~#wkqMv@QEt z#z#p8KGaX-r-1y}qs%99m-wDzEQ>PYL)aGodJ8A587Fo(EYc zf4qMx3HAbG;*(^H*BRrkqUFg#&d)c71CrQ+@{UV_7=kOX_3F@IehR?3f!NrH`I%x{yt07h}6j4_(u z(bym6xUq_HML0fWgAI(;5unEv%=y^{_wl{YdiQqIJ+i?gd{4&@T+hV6ql}H@aU(AN z-HX18K8^vdAY-}hw|Z)BoXyPbMv`!RrX`c{9bZ0lWcJe88AO}KZc)Y}Ax%uKWqBt_ zs29I!{;<_Zz?>mJV+CkTKS5(nHxsOTINv_X7mPdk;5KzB&cNcA^@yv>IAnW)W&D`x z5?8jmEDhPvG$^njqZhY_osTbkE{dN^dSfm+C(mi;XUzu+we-08HO7`F)~7g4sssLc`1d^X{+jZ`eo5yfn6RKLHjtARdX6WB+9kAe{@~WA)HdT386ZNIf%`8(TNy;nG>yrCf z2CJ^y;~-<}lC{SJMho4~Z?&{uo9=;5uXElW*6A#B%Q=}VLa!us=aP&N*0Ix|{_OZA zogT0V5A=(oj8IF`4x`uiG|q0Nz=_XZ`ttl04Z!<{m^{#KA*L^ARWP7}^D;u%VF~V- znLhPA%WEZh_{_$?*BEP$x0{}$LOl*61sS1F*^Aj3w2k5O=?2Kj<$)(gHuQX&rZ;z* zobcVE3@phx#1v*=vA{HJN8z_nJNvv0tP3qut)=H?kdNQTjp8DVRBVADN3jvM{O7PD8db zmT`*p=Gf!4Wf4|&6nlW!#)KzSBkvB*`>8?45aW145`& zT6F_tzs9ol&t{@-?EBung%{%&W|oEi$+&pHl?yUdKWaWLG5BNBhYpuC`Wv5I#e+33 zxpiOOz}Q_h`SAQ6^<}>=g{f~wfpNx~m9YZsk8<8C;$zW*%xntEbG3&R>9#g>Ndj#e z9-|Yj<&8tkq0KrIifQ<~lqM7q(AHK}kzi^qK2`z}5<8cIf;15rah_i|X|z%k$6qT)ohX-vhcd z36{&4f37(@314**tR;X=fi9aFyC1Z#&(a);9UJjvUIvYqW_J^Ph4MZ659T|=`5sOz z5373{Bxp;-l!vto*=*d!l)>94o(4LPu`ke#g1}n7#7IMjotsf%X+1ZfyuD}3i)SGm zkY@+;Qk;9_AIwW?ruvX;4RijaA0-8O6#c?Sl8T!&Ye(1KuV$jRW}HYZ7NCQYv?ah~j*-Cf0f~|2pP>knu7$^&^ZQ zMXL4ZDqq6*3FaTg9rRm_pJDzp+yv}G&aGHC>2jH0KQjaGf3lo293=E}F<>L0FY&M7 za<>Dc&lupOPd4i*G3{#RKg0a;EO4^O;o#b9#5lE#pJH4;yTZLTmVb)n%bain^AB=? zhgr^jBA+JX_}pO<=evxbVLZzCvn+oFQu@4R5{LF7wVk=Wq+GhKP~YI^H1nV0`d-5f zLyQkHex+nYdy{)-XQE_$mWC z8yO$P75XXTdx4Wa;&0Rs>9bF8)?e&!h~<>=+)FC`6a-~KK%_wfSw0{{223>1^j#(<0}IGR>=4f_J5uxIg1$| zWL)YSVSF>=Y*wcWIO%hc0yI8)ZH9C!^Uq{{uC}v_@uNuTBk^sJ@qWg6n&TW`yo2$} zO*ZE-Tx&m>V1Umu{sQC2Z!myfzk>WN%NfV^9LfCeFn$mzeR!$loCCc{{_#l$KWP$Y z664Oz2GHwDkn@03d!6F?j%WVG%zrRq0O>jH%sH4ex-86Q7)#-$y1GF}#t zPyHkfBhLzqC-f1!{WIg)j88MSogXoNimwHKiSe0?_jCG3#`)6Dzvx=Y!y>uKsd9K@ zJpq@f7Joxot%JDq!XPf*6vV|^L0r5wh)XL4acNZ#r)T0~TMva_q`-4i;6*9$>J<3u z6!@(v@Es}edsE=|r@)V-z<-tkKb-=9GX;JQ;$Sj+j!c1HmIBX7f!~}0UyuT?NrBV6 zJei*K+&&rJmjb^x1^%TJ_;*s^kEg(Yk^=u_3jDVz@V8UoA3#V=R^RLt_#G+aT$_S_ zY6^S~@X?5H9Xv77?|GpER;S=^X8uteYNRLAdjupWH-JCFxICxhWq|V{<13i|HtzI) zWBd%`vlzb|>kX1WlLr?4?iTJ{4?LOO7N)?Lq`+HJ;C(6ZT`BOdrN9pX*LG%Q3%OoD zPQm|b3jFO9_}^ImDGupPEPpf%PUV(yNdG+JA7T6qS1MFfvhw+(L89=``1@dO#$?8>-0g&QWNPg}|3}ZF(e-wB!etHKX8BXsZkeq&&vxDWdr{M2q{_Jsvk-L-gDaL0q zF8eck8DGJ;_``Qo$p0zxcQC*7_cM%dW?cMmI4VW@A7NZ(v||`Q#rRyV*OiRte$)WV z7@y8~KjUSLSBM(j2~fK>=uG!==KfZ zS2KPpfEO@+hHHC*4j8K22GZ%;U1XS|H@I_5vb_=;QuNI(4v z`#ADnFPeI{|v!3F}^VZ{^!==XU*UJ5*!Kj);tZ%%>N zq`*5<;2TolJAsp)x$HRlT_WiDXbS!xr@&uLf&XU;`~o;0m0QLe8<}i3dQU;yjd8e{ z{>))~GvoSwBHUTT_^IiJ@7E@A8U(-50M9bM9(XeQZ%={mWI1PUF#_~^F(CJ);6I)M z|2@m;C@^yLdoUp16ZvxtuHSJ1ITnGG>@cdx;H@Tc#sg2L|II1z(iHe-(4msaS(1W( zZ3=udaMJT&jZsj)rvUPP#?LG_xXdT_Gwy^9uHPX5`9sDBn+z`T_63p8xXAe<<3||R z&)AXmJ(1IFRPOX)yq*uRpIdp3C?b7^e+VvcvHJegWeh>}Zys{@^r+ zPNXJ+Px7db|78LEjcwFBxRp5@y&ndO%WM9~6n{5uezYiO+O%oci*$WL2>n&;O7CDi zIxbWG$efO{pg%%2r;+>4*y0kB{6TC^b600w4xMhpl2O(Vc~(lzxMtFHwVQ=b0$K%(SrWEmk%hklBZukeRAOEF>)ZV zD~j{8I&yFZPm+TH{0#Pwh;=iV^9g5_FUDyBIg@hfkRNOP>-@Hvn0viFgV0!O3*IhqUT+G=z6GIoBSi zcssCJM{)H>-E?9TVxtM)Vnu*n!hEdd%a4kOJ^Av%T1ahRrdbI+!J)& zB!5k(Pqrrk|Ci2q4E%C|6^}kM*)~qXS-qBR`V@2!@9MgV*LhbEF~wI`Tu!o`$!k4W z&Ytbb4ez_DPm~iY`0zM$PnqU#n<;TFhH6Omz^Mg^h3P-y_bM}S>Qt{X(-mCcIF>*AVy z($siSQ?E;L_D}E_m1KuHCq3BLoWa4T|H>gO{&NxJfQVElw)+mmz_~d7LlS*=a8!n0 zCQfL8+xZcDCUo3+L*S#sD(F{5Xn=(K>Dy;L*gDBMggTRs$Rthw*bE( zxZfJ0LoaX^uRZF*J4}*K+^UZ|a4YVICj!Tb(WO4rlYh#E>)<;=RjUUl_nnwwAUa0U zJB?ig(NCJ``xM@69x&3;uU6xHb3D24nh$9qF_?Dr!s~n|hq6fT5Kw>P_zu*FKY-6W zZj8&Zr{Qte^_{wDczvhWCq@k_C*k0p)NJ12E{QxzjS+Kv~ zX8nQ>aWSqS@jd<*0oW*fAfuJ63-czRp4Nof^MSc0z&r-3sy&s;WAM)N((aw?gczQ` z%2`a-P&5eO$C$Xf2|qLjuLFl1k*5{+wV)nf^y!M)N39XOQ`v}v4=YOUA$)9Iikm5p zS|ayLIEID*lx2?#_UTFdJgH8iqwg*qb(vh1z|ZidV)IVe3)+fG;WI0f6hU^KX*OReG$KoeBY z9?jWsS~tP5Mzg=J#STpex%vE)e~XK6Qh1WQiKmu&C&zoo93j5@4lVXLL<%&BKTs~| znRi@iz1oyRq9B2sOfJd!%sEY_gX4HM`zvjMqxj;onfk^-{#yDMxcZQEK9$`RE4A=( z2^6NKE;Qbf#X~7I95ZQ7-OR!`QYQCX?NwEIi+e zJKl`5B)jG7)uO2n@^y4V&AC+8u~QGG#GLd*Il3Vyfx(*oUzIZ!zpE9N5%n_o@AuBiE@1hBWb+-8dumCHyGc~;V1rsUQL$rJ7FdN87 zg~y%7r)wz1(Oo`j47Ey<)o$G+x#yjqr+->9z(E?Ly9R|4%$zCi>hpw?2$NqmNpdSL zj3p~EjzLbpi?amj6@S`vl5!G`eoi66#J^;Uu!ML97y?HsQXtjx=#m;H&d~|QaaF_CYUc}O94D$c}kWtr+O+FU?FvUMJ5;yRXO?`*WnURf-5HwWW z?XhIw4UL)r946c8{ z!sx`m4#5|C+Nj&!S2mM@HKktKNht7+)K5|)&M#`{*&DxQ%%K zuemcqRmVx(usYe1mau`@Kw!FS2KcyRB+YDBkCq7@ukVSrhSB$%60EJk^(I9;tJ$|e zkpfdE(!Wd2Iq8}lhELoKpt3#f&rRI^03{Oq%O;DNU(2$6n)1eJDU9}HQ=bA9020+A zG?`jDj$;SauPR|dwKNt`i?9T>2()V98AAs@XQ0=gd-3nD@0rj4^5N@z_-l;Q^B#J| zB{$sw|L((wGfl~xOq2Ze_$Ts5rI{NfhwjPWfn5;54VU9w%sBCW0{=wLY9D^958vs- zH~R4XK75l8|G5v}?8ATS!$0Z6-}d2KeE21#AU;&Db2VkYu40^$KKv8?Kkmb~`f&O? zBl?IOd5*Tw$A25{i=3zr-{!+VnF9X;;~C(kc9g%9dm{y&roeF+$9?>M{3PR4udDHo-Y=)mFMK$)BfswE z{BNI}JAjLxfAsPD<-F;`Ne*5=(4Rl2kaH0~xD-2ol=){dPW8GI|D@anKHT3=_xa?I zK4-X}e$$6jKh4HJ`aJ5Bm(|x$# z&x=#w9gGM2-3G?Rp3>hx>63GtuiPGHAbocE@K5{j-9G#WjFWuwhivx0qduJcvl9R4 z^S=T(zZT$}^x@<`Wt!V@e$6=Pvj_jAU0V4?Aj0qV;oE%pJwE)4K75-GeBIeT;~vII|2yzc^m)mL-{-?$_u-%Q;eTSB5|U4Cpg*J_KEZYz&baXR88+tv zAOGioi9R3p;kWznNh$EfKHP85J|9l+42t~!hpsb$w|aWN|7q0RZP280o9DWQ=ID|V zQJ1L9S44%n4Jav%8l*BbkjRiGnkhp`LK$yV`ik5TMJR;6h5vreUQeyx`hU-Uz0SG! zyw5soKl|CkXE?)WS_(d=Zg_1#t7d4{*dsu!Jihs7JQ{}|NO~zaEK^e;nyw z2!7tb>qXxU@w`oX_WxM)J)r-L^c??rWs~8bi2o+&F9O&6Tu1yNigP6K7m3d%&g=Pd z;>$??F1XK&tO7B<4~Sbo_C=iA$Y%=ql*R#q#Xp&Nr4&3p1s_eE^R|>Y`>#pCUr)h* zCCv2flMmNBnK;*5B77d$inW*Ptqgu*JfL0GiCeu}?8TwfAs?={HF2(YIB{OLXOKUy zOEXEoBGl*ovO@IsyDe7U6ut)BfBVh*aRvBa;RCL&-vs@s;Fh;l;pXvl5q+8o zLg}7D-$(Q%p}&LltHbNve-iOE#O?FXR_x_3g`4YtBhKwA5k9YL#oM(X?J5JV?dl-< zWJTfiok`E@;Q-P5`agv9+>iH*-nT~&q|nb3{anPqM))J(Zwr4Ae4Fq|;6DjJ27UzG z^26=DzLI4#=AZlJR&dX=e?N3E>Dgzr=y#yrNh$PCir#)#$jTzpPYsWKJggGE`@c&1 zm85@9^o!yDrEvH8ntZrje-h{X6s&B~o*aiBe;T;und7f6dat(@={f#0M85&?cNG3K z_*KGvKjeDhKAvv^w>Y`pNuu}p@?Z-6T+#df$$a5n?}8LQZxDYu#N_?{iTL<<{+#q2 z|F^{Xc(y{7U>b_G_wI0W{|mrvoZEB$yG^}`+xF4VAN3_}>%5;w9xUAVhwmnC+nua% zvoa3c>U=cZJf2+Q>xiFzT6hqO>3Mr}Bk@MVmcv`361Bvr|e1JInEFjL~p?b9tNGR6t*1z)$*`shR2;$bi zoh;x`t|rd5Bj@&ZOHbmYp7)m?CC>WCz%9>~hw;e60@Cw-;LD=-{kjdL=l!~THG*j< zW;;3De4Lab&gY#PfO|ZX5zm$2#e;|SW43idD7{ngJITlN8w)1oiF=4!doe5%3&5?q zkHXF4Tqb(oF0Up%?++BK8SC-*?e_$&losy$OXa~$#_RAE#J7d#Jf7*|v)Eo3%44MG z{#pipB5y^a{%z88e{Bc%_@B=o^B1ob@k(TYjwR^D+KkCvM|^U$|L$lYFLx$KI}QiL?Jt#5w-IiL<_3 z-DEY%{^j`32lqHfBhJpmEzT9_-^+#j`rMN^ug^Du+shxNb`2%YagHP(%bUkDo;c@i zGWl@c@`!VO{v{ua$$u}iLcQ=H6l1%?&GVl{{7d3D5&xX{XySW_uOpsE{9WQ-5Z^(3 zIPpAi>o3dmp>VVEJ?ZZWk3Iflq_=!#qJI!0(OLEPp`xp1>GlYFLx z$6oK#q-US!iJOmaua~CqSxubtaELg!_p~M!Rm=nHYo*|2o1WD3yr>E8d6-ck>go}< z_%~TchtimQc)natoc()~kL4!^{a}VcB$%p+g(fq7}-%Y(#yDiLRW4dSeCNSyU; ziSz!MDOR3z7X!` zbM~h2DRo9L4aLHEDcn5IwZW~u_MHEI^VP&{{QK`WXA>_PcxR0N{=_YBzMn9VxaqUP z&B_RHtCRN=77*w8@>vT0PYQn8naOIBZQ2(8_4YPS!LI@L^<)L+dp2=vm#?dR$Y%=q zk0ZV1&3z^jH=iFc9v)2LvzqkmvyM2&vp$8-UeYJ4Y#%BQ&#EX}gwI_I_w#AT$)C@sUD`6f(!A}n*4|&&6W5s-#~*dK+&!;W;a7NzeNgZ;{^C2m76FD_e-$cs^zg3FSlbnGzm*{J#;eM)4GE zm3-NWdF1{@iCdgA5N8^=Rmc7{NY8QBC2n!rbr-BOO5qcJ%_CXNzbwVMocNyboVRN& zaUTDBiL=istxx*1zH|!Sfw=7hdcA{*v(Hm0_`($YcjCPLD%a*@oV-rf2DkBM{jv`I z(unk{0{1vu5HC&fUqwFFFMd973iyfhT2@IYvr_O?ZR7J6kM+A>S79A-vnYb`xrsQh z!|xI|z3)GK3T`jwb@&+Zh2c4GZ>4tOK`5qQ6K>AygIl}oIp2 zczJ$?f?FP}4!=Ik6w=!@tz5sKcx~bb&krvS#XPv)njMlj$+v`m-KPz4j%N~aUI*rY zdz^l~nt7xjLH=8a&nCW;IIl~!E;t!yU250W#Ce?e2e)`?h1=*t@%00V+q&JXK;(Ck z50BeNh;w^iAzqK-`Ib1h>lnDkb4tfpzj2G_V#HGl-1=)=xOurkHigR4&tacfsLeC{F6dAN@_=ivcx&BHR%TmC)%)x^!edJH?UfqbR}=6Nf4 zVHBAE7~=Jb^Y(W!@n=c@8gb4~wazE~xnG(S=ks!9FN%84=ZWh?5w~{v`};M8Umstd zs7JhLU_P$S0@r*lBEC52JwL07^ZwX2;ymBKC%%Y$@?9JQvvw5?H$M+t1l;1``F=^4 zs5j1ezLhxV`Dx<3UJbb9fBWPT|3C4Ad;Vt>j;}vN+~Qw{@%$(GaQtUo8egYAt%+Md zj(|@G;ogs(iCewik5_EK5$ADImpG4yvxqk)pSHxeQoRd_^E};5oZI_3aqi!5z`b9xvF`0BZh791e))xb zxPO~>3!+dgKTRn9&cwOi%ZN86{cYeHPY!X5r&U3#Eqs=Vd^n!5#JS#iaUQo5!95=ToYhp)FQxX*61{(3>q*iNBmHvG`{%*dlAirHiQeBAdpCvtC*qvv ze~9xuD%|5_e%4T&r-J+Xuo3Hj72-whrQkKlhx;p=I3K^SBF^!=N}S{QkT~zRW_GQF* z{yt2c`|(Ngx9ybo%d^C-U;KTmCFH~XvX(f{i#N%~=HqhYZ7b<{JpYIE9M2x&7SAMX zNA{7=^uT=`J4l@8V}V{l6pH1I$4M#TYr}KyQ=K^H?UfXKE4YvIJdEd$h+F)_z;}=j z=kp-xEf4Nqpan>Xsj`)-N9Ca^jqym&u3ovxD^P^Eq+z=^OUR ztn5wU)A)w?ytQjxxOuzoCeHI{UJAaQ_)hXUK%B?_Vd9*hvf1Iqp;$b_!_DKVo*f>9 z;{BV8^Bc9Yjh_76X&v-$!|WtZ`rH%#b)VM6Ii7yRxxEup@C7OON8rU1@x1Z=@YhQI z8}T>%;dV74&Uv_y_!*%OJ^ow3Ef3beRnXqSq#qWz>t7?z`)^+p=Xic0|KzwjC76Zs zJ8`SG1nNCXKAh)ry^}9H(O+rssYKl7*Ze|JcRINBJNpd2>7+@@j@Y4~`WN`E0 zJX~>e^fAu;emA&|t9yxCz18E(6Jy9{N?@Mn2Z)a+{sM9S9L{ENA17(~Vg=3n#J?8j zV)Dr(Zr{1|db5agKVA#&?Mh(2+(_Ko<@-N<$%pelhV(Wb{QC3v6SsccQYhSo@-X@E zI(eKpkMpx`iLcXs=|Ox#ka&BCq~NoNKScVch|eRwoH*+@5#K@jEyOv`yTN@v`tQVj zO?uAfVbWVZvkQj1Q2rop{gMg(H~H{*D|2h|Wy$qzdHC1!a~g3T=kIsX(0l>w&xfQ1~}Xp>Io^`PY}0xcNg;cH2F*k+}DA(iE}=`AcYxso{7`wDT6^DuGN z{{`-GW+BeMiI=1}^A9+gAC9w4#L2wf9sc+6Z0`wLG245?&H3I^Mk8mRZq-imjp1L{ zFD5>l_<Gd>?ov;fKM~g%`s9 zEz)qJ-U{HEqCW$?v+#4k{k($5c`n8R=yQbo`BFP3vf}klgno3A zp5zO_CkcNUe1`Bhz~>0x3_f4@cJM{Q_k*txp098O>x5SX-$=Y@_}_iD5VvvC6#6{j z=Yj7RemVFd;WvZ-CA>d)GQr_F&+}05A_j<$0r%rS*FONBE_(mISbgD7LT~R`u>bSm zt%NTJ&lLV4xbIKd)0Veg;8~*o4m?}!8@nmSt)q06g)cx@0)_>q~OC+@X;ywq!fHc3O*+V zpPzy+O2Jp8;OkQGjVbt+6g*dWEA;y=;ok3g!dF1QUwFn%5gZb}D?5U}gpck`ApGm& zKLecC2b&kU;JiKC>T~LEQ9@K|i0k>GQ(P$|B;XUjY3&;-=3G zH!B;7n|>Aaxx`KH#g{YNpTw?W@~ILK7#|XDCE-&>cqKeORrp{_b|{tOpJYCPlB5B+ z`47hb_9p}Xd%ejYLJzE^@U}2MSNPdYBIqc*J@z9n5#AL(-G#pkpBsfwts22C!Y@Qp z2MJHF62U0pQ;@iE!vC%q!8GCid)9M>Utd0gWx`9RN3dG>;Bpac5bnQYzE$|&wIbLq z{M57vz7pOI`X7YXz<&Q9!l&1bAV21Z_xqbRcta^8d=~V+Zn*wO3@H0dpcUr_>&M5f zh5x5%q7Z#53j}o4a_W1sS`^?9B{)Fi7K)nlvud5mTzY%^B z`tcXxlaaTw$hX(~7y9dT;d$xNzp?PH;H`!Kjy!Y{?!V{IU3g!t8`;ABx;S?T{|M{w zJ;Ezt{68i<9eMNf0p8w*$p1>wuc#N>yI%NTXzy0xv#>tw5IzI#+AF+gsp$Wca6gVd zD*R>CTL|OGHmX|-aU9fe$@sJ0Jpt10|1wD&CGm5~3| z!h2&pWePupd|oDeBKC873is<*T_^l+=x-9f8QYhB!e^o0fx@50_1fX_DJ-(Y+FrSQF2H;xGZ1mip(_RGBAN8oWu;Sa*Uityc-N2d#4gS=%3?^-*y zxP|cJ7$@z7Z^V2*U-)eFduQPvgI_89I?TJPh5w25bByqr*bkp3-1GUk@GPtY&kG-n z_O22>75*E955s!+zVMJnXrw?ID*6`mjCYP|5Pus%!?UKQ)z4B;1J-Sg|j z+0#S9Z7%ko=ZSt*g&5~D;cK8@BYY+1+pEG?VE<;T@bBQWL-=0w``5y+!MOcdxNl$n zEBw7iG5*4sPxiF6_tU14mlfU<`;FCw|B7+jQ22O^+ZMu`VLNrc@P1g|x(eS}H^y_d z@CF!%w+Me7<7%*Q-|kKkei_F3Ea6A$$9kU;?w`9`CcGua!>htyZV-Lm5&j=M{zUkG z>=*43ehTvTlkjVxKQ4R^##=dz7w_NIIQ}_Z_~qDsH4=U^d|C=`-YB-KgYd_o?X9s=PkmIq93;lpN8#- zU*FL4yaVgcLDBpC`b&6WY)=c~ulsz4^)pSlf9|5H@WNOp>kIFJ`Pf`|g~l;I=L_$I zadnMwA3uGCKZf<;PT|$DUolqr?pSSNy70R(AD<9@06vR_cTJB*>xKV@{gAD~OJcp< zA$$wAoBM^ogZ@1t-1{*w+g=+`rm|m-u@Ntd8>l`3(tRZ>_5~Iz6q~yEqo5fTSwuQunt@;{95?j zBHWK7MhJKRiNf9g3E|(OzZMBUgmujK%e=jHF)lwA{a(cRxp2Qe=t1F^;rQ;j@DGun z{CM8${RI0hMT8&0cqk?OMvUk3!gr(JPZM4h+q*`>$76h+A^dxc|CYjk#dteMcrNyH zItc%>K%6fZ37?Do?QX({V*R;NxL^0>X5l`bbAQ9c?S*^0 zx(N4n-6Gue{=T=zlKZbrUi0!ub%WF99ULxE-=ebe%XX(jwCf*U=A9?;z z_$VANeJ=bLJpNvIH|#(BF1#T8i{N<9;~$UlS6TQw*snNU_&E625uT3yw8p}}!G6od z!mq^RYlQpxw7$YSVg0#Nxa-FXKNI_bPYGX+b$F@pTx_q`2|pJ;JA_|{dAe8lt>Aq9 z*&(6J-T%L$zZm`%k#Fx8_pc?~{hJ9NgnHWw_j)@EKNaJ-k8rPdkZ`Yel<=DHnJe6V z77BNt)xtggjlw%(`@T(h2F?o|5bnpnM}(h+@skhRAJ235I2{v3g?qiVg-^!1+Fba% zIRA60a6kXa*QK@b;O9T@5xvJVR=C$YPxu{JA6^xHRm0e@cZ7eB{lHI!S1A?shlFD@ zn>a2U=}Z*C`sev{|5JtkgLR;m@aIu)rf{$K65(ENFX3m!@Dn!+_jm>g_jv9TJ_p;2 z8NzSDyqzb!Fvgj`|L=LY8QW{$J~-csJboZP4e@xF@P26Ux57JOy*(s6AJ*sN!Vjg# z1Qo%0*pWecKUJnr71mpG|;XbeL z7w-EL4-5YoK2HkIhdeA5z7*|RC)~F?ZwtQze zQLlf`(c^T!R`kQLuI>=N4|)4exYzrSaNlkg!*0=Sx$q{~ z55Gb9c+At0!VeaS<9~{9_kTuseT-ZGoRPO{Y|-fRy6D|!yKv9L7sB1=PvP0vZz+fk znb+(7RfP}3ygT0S94p*?rU~zZ{e-!~TVlUuk#P4}Bi!GIeN*^t z4HL=ok#P662jf5qVVciSL+LR|Febr_AyhqZyzra z{-^~O%2mR9V0|7Ud>s05v~Zt~{ywm`_gt(mOGNMIXVvC%@h7lgIMoj;af4@%A^0iT`%IipPwIceg@`aW6}Hj@~wqm8>>zDagY1> z``K5C{%Wiz{e`c>_Tp~g=VDyV6yB_1toV81>*2FXxSyBXAp8*WvqN}EtPej4?_doK z<*4xgVw@Gi{;cO=HI5(32p^31x2g$$9p^V22(OI&<_m@2i}rQ}&lh6LpNufx^%1>) zz9@(IK+=yE-WtzMAU-58pN}($o6j8RXM%e?*sLWMlHPnuV}30YeFl8q7QNS-OWf-H z6Z$;i{ypJ+;(spmM@et-Yy~ff`Qhe)hsp8WA^tKX1^2xaki= z-uR~xanIK2zQ~}2JU$n8gXKr@OQwU zBOmi`i}h%!=yRdpBzo`P4~bhmcOafGgueoQPc)zY*RDK1YOSfu}VL zFAl}?T&zfZTv@n(AEv4BEzq|Hw>&4;2ej*a;uhy%)O&;QvEX+Le*}EG@DISB5WXFJ zjc`9-w3WE!6Nfd4oy2Peo`LxDh+F)B!~ZaG^C=f@R{kN*J|%Jfz{jUwAIHxR6$`Jm zaZbJ7q<|%_~&Ciyia^8Sw*2t65ba4!4y90h;zMf z61RF^N4=jAx6sqW&B|BA+2>E<=5rx@%HsII=XHamOZXir;->fggm&Q89Gkx#p}$nP zAD><&+>cLlgtx)~x>vaG-%b+#9L|S72JYh_7wz)zS9!l*kNmGE9~&pf!QT-+sCaDH z$HKn>-zB_qiKzb)+~fHR@%$nB;n4ppd^vcLCehF1-w$3AT>a|{&xh@7C*kSfUCDn? ztSWhbJ#ouV^^)<)TZPX8znwVy%ph()UqSyExX17DJWYD@$&A$|RuVU#`laF%uL{2u z{4L>wz_)^Xy}gl#ABmR?)-6zP0>^o-zZ?3-!u|KC(09r zo5g?JzZ}jN6$ke`pM&+blJIWeb%ajSf4AXD;#TiQ_^%b8F=fJ&_Pp>{!QW2d^96CPcOP-9_j^x7MzWgZ?=0E& zA}c;jlq7C>yB@rT@GHTa66bo`5Vv|qpxz6GKLmc2aQ~k6P;k%xZ^*+);aB2)=dt2* z3HGC&6a5kBUl#o}(0?NOO4t$EE!@9X{;lvy&>s;0LGUkgMogfO^C{qG37-Rg3ApFM zKM#7P@C44kT`fM(!{=7v2f&94Z;Jh&3B-9GJwe?1_X_Bj3HRSe+Y0XSw?Leq6CV_O z=Et-oeiI-6-fyWhqrmgF3-zW8&jW7@?)45ty`4yJ<2J8A^zBaE+I1X0*N~6JnH%Ma zyF_2rDhlOc(hm%eUqQWdh3^4hAU?I>^QP$Y;r!lv!s~)>7oTSEIV5`jy_ciH?}X34 z;`0D}PCqNzyyUvUd8<#{^7c6Nt%=+C!L&$pBF;XS5jUUTkpF?g=fi&rxIMHy&q4f; z2;T<&gz#ecoW=s-{lGU0-va(NxR1jHYi01BCncjqexk-&2?)JR9|{2KPLd!RI1g7d{jGZQ+N(bH#rm z{J#|bF!&F`-vTe%JU0A9p22H_dz|%f;<$b{9zX9HbxXt%uhlW4BiQ9N9j`t&O zCC>UB;-`r*Rw1|KVYBltvcZ|~XI|DPwk1o#H>84~IpjpM1UqR)XoPxJ-LhZlwN zBXNtr7>=`!3SS5Q4{@uvIrjgGwlKGo=R^E+MWu+F{wciQQJJ{adkF7eR3~ow`^$y9 zP#O?7eOH`EYAJj+cst_e)7?x$=>%?hwsk23+sAICxBm6>sJ)0MeXw5LMBL)}4fXaV zZu&lD!d)oCz`cL{xbIQYn@=P3<2>Qr!JieMZ_&SNh}*jHzEv8^o5Z=jACSMbH`@XW zWe0I?Zys@r^KQg*g#2w?I@Kx<#gL~dO!~Y!7 zKM#E;;r@A)OT}jb^43SVe_w2*@Lj0)QQ`l9FCcDcUu-l0hv2r3S)Q9=KY2Up zEuU$nqS23{_xC}L3g3)86l@h==j-G_@M6TR-kTanT^VrCa|Y_IFM6-Hh48;iN1yYE z+c>F{9{GjDt=@T!BJT?B_4@a>`-tA_9V)y*jp#E%e6kV$!=iVedBiQw>(ispGsG=U zKd<#7anm1%eid=kcMmr!uY+5=tl#s{zi$(_{+)<8KM_71{0HG5gBNWbUL1<~+me)J z4??Lx+{WScNgDPSh?{;GcuV3O=Xt~}&V8u&a^mKXWgu|_arU_n+{bz6v{>=|q&NRV z@Si7o@2^F~E&q?B-(Mtd`Sxi5FQ|Q+d=l*&Z-1}=j`YV^X#d%iga2Lvt#5wT`#eWhX7(CK#FotqUyZG0)BUgc!Aa3KqKhIy0xcPhpeO2%i`A0mN!Z(6n zBR&Od$2e{lo(0~Ixb1J`T1BDUMcm@q1^s=({{bIQoP8c7Zax>+G52sD0NmTiKc)lSYlNKvu>O|r%;^u!Y z{PUlad^))uF@1ID%MmyIMbOtGZu$)9&jt5!;-CBJAbS6Oglk3r1>(O^^#1z@1BGXz z-jU>E08weccHuiZt1f83_!iR ziF5w<5jXur=>H(jpEb{Q}~qPb(Yl zLfHuJ<8w3O*($ts{ixqgKDLDU`~G{0n}0R<|1CZ<;ZvY}^z-&+LSG5o<5>rN4dJ`N z8;Z{Y_;eEeKhSp*UZX*bqnGdtz^@bk)$kuC{8I1-iCg|}LjGqHxBT1){c_=Bz+V?W z7ks<$9pL+jTfP4K`@a(B{`v>p=gZu3F%N|@<6rNWJor}ycfGF<^@!UzzZH3FOx)&$ zZwFfvH~nhp+ktz%tcW|8pg z8-^!Cc`-Bj=fwKs?OjLQe7=KzJ-D}bJmT3Qd^z~n!u@wNei6PA`hw>rlEw4T&IUy& zrwaG)No5G{k9DA(@PXi+g%1VqA>4g>3wNIZ!rf;yc)k#`%@_YX`CQUlKAU0x|2g4B zaQyzF@DIS(f#(Yz$$4=~_$QRNiCew?JM$ls&!E6F?a5H~q~PBZw>Y0|l9VS7rtmLx zeth2g%k*uV#>b_E-vC|}JYSGmC?4mzq8|r+N73ivJZHZYd}<2*wD^An|D~cYc4~}& zv*>??{zKuXHjDb5!drpwPT~J6aqh=s#PbL128gFbhggs0t!TJyi4PN%iL*}~;^yPO z3v<5k_Q+>X;x^@mSVf`SOuSZjoQ3gr4{`Iq1U|Ec=YYRJ+~S`fZdP6)UMoCy|F?*n zzyHp5p75>kFMENxoqQkX9OSJrxUVPu5&t>D{r6Zd67JuN>>+$|=~&-Q!hIdi5q@9o zsGlbM)vA%t74AL@g?Gp2B{m5!R3rLq1^4-tg*@bm-p?oeNZjV{H5j+Ygy(|$2Vgv( zzP%{kG1l+vK(mbaIF0y_fc*Q6rxCY$`#@hC+~a@1`;qjvj^)^(2&Ely^H~O;j>7*0 zznD1tbSG{;nP-@LIQ{_lcpgJMH32Y%zmvV{r-@ts6KC38 zBC#X|UoHG1=+_Zv|2K)7zkkl)J#g>en%Lj_PV_&+|Cbc}sQ4U&PreJ2%}DOoSv;9& zZyDkiPwlg!t^&BnvkK$kY~gQ#_Y%Gbd?0b_mt*M1F~qH3jv~%E#96?cs|3M1AQ+#fL&mPiSesYkXpNU(3M#BG3;j6)qi~mgcSLqyH9E#`j1@N}St-U@U zyAZebZh*cwaUSPGiJSf|=%*7mePw$xl*fo0nhO02;_Uw#anopRL3>51$e@{bK09CC>F87VhUE|0Zre zBe6agyEr@u#rvfv`nL{o^Y`l8l9a8Wch;y8MiCdf#;WLhS(ZI7}IEfj=t-r1Ze@=KK^y5n6 zTAiZrL=VSZ0jJWyx^?P0+Zt+Y- zJR69cz6Z|BZ6$8{<`pTX#tuZf#adaH03%J;-ge>e2M5;uKE=>H^c z`g@^2<!dvK2XXfKm$>=#fWAoA_&Q&=hl7_9z7o8O@a^EWz`b7%Bma#^Z}DWHU2Tb5 zJpOrt3xr?SCdPNE@X_FxgL}RHdt{@8uRuHx2;T<&tnmMUzb5=3_%7jnzz+%c-;pTa zEw;ns^y}#~7G4wU&jrG#gI^_lJJz@Rgr5WbY~e$|R|;PY{sy>jcY0Nbala?}70~Y$ zy`NV(Bz$Ok^f@Lz8{tzH8)C25eQF5LguXtw=Q9_)z3AQNQsD;>&$YsHE5$f(75_Z= zj}pE6PZjRJw>F#jz+n9b#_bctZC%QTeq17aOw$<8N^oy)TD8cxh~DG*l(^MfylvF) zBA(nX)QS8X;-ic7tfcrQZA8ixeNpJOzhJSz2dw%XDZteXV?Y)P1vb~LC1rvyy{_1v-PXYIK zO+dYiMV|}(sucS7MBn3_=>MtkQQ*78=S9?;xIDhj<5>Y-9o*OX58+cw^e;i*QTRsi zZ1M5;@B0ZKb#9DffcX3bpGSos0bfEsmjC|NkWf~N-an|fMfBdk-wJP6H~Rc2KAF`c z&yRuag^=L}yJ|IzT@L3$hidFRHweJ=XR&>s{&1N@XL;_G}IR>u3;C5R6Sl5FfJR3>iq zJ_mhuaL=>5<_n_XD!oLH5 zOSm5o?g96_{f0bzFML{NjOdW?cfpSePdhK_3tk!jT0U((&%*wHN#eGy`tL*51^0M5 z!KazGo8_&~`pF`ra3iY1SBU#Ofznu zE_@jHmBQzM-ywW4_$1;s{>NM6LV1|Dp-t&V!+BHUruXxcuYmhF@$0&6B)$3MriZ&w zz9zlp`9tLAd*VD!ekE@D!g#;!Px1dxdU!IFn!Vy*&s$!4e0&bLuRrbK(@FTd;N66` z>lA&iCjVLiZ7dl1t;DUp=`|uBNItfmngRWN#I0Q`;Xj@@>mMX;`UKubnI(KF_&jjW z!%)QYvgpg;{f0M$UktuAg-;%F&cgxXmWOeu_rJt#{9yByIOQs9Ogvx2KIMp;kH24^ zF1#%Kn}ho}TvR-1n`kHc`Osfaddp`H+Itgm8;AaTyaR}v{$uEe5I4R5PVXq@=3(VSe0P#F4`tzWFAq8J0K8xYAOZZywpNL!j{e9{`iCa7$Ltpyp@F0|Y;b#0x z@J7Nb)ihQ3TmfnVB_t$9j*A1jMX(s%~klylnGxGD0@VCHc5x0JM zph&n2o#r@p4{0CulrnhDYW-5;T6Est_?2=#q-k!ydH6jb0Okv z3GUk(wj5~J~xxz`lT`YrJv|WK|h7`*1t8-zcWQY8v3=QH-CR$QQMLeGg?{;Z;GL$cfo6q0apZ}h?`Fs!k5#bl%JZ6FG%Wd+lceH z`hvLWAA)`_ansj8KOQ7*`a{qk7v9a!6WtK&_jPzFcxmF?kCnl#Un~!!(T_EWTYL8- z&uxSs2ER~vzPd4v8-!N`A1VA+@F$2D4Hg)NiN(aNAJP28dg1>0z4wT7yS5Xzb`3+l z2ZcWf{x@+RKgF`ci$l@8Wn?GuiO=DWtREk@1o!bjAO2lM@4riY6>;nL-_eiP6SsbR z<+N}YO26#npJctJZ_+(J9zfjmzcq|}IC0Ythkg`s)BEr6PbO~qx1pZ~?(KRL?OIBD z^J$$P?m~GvJNf6t_AVFt55aBRn%?uUi@4RhAN77o-1Og<33s9F&rbe1k%zN!p6Dmy zruTOJMcn*HL;p9px9eNPS^mZ#3dMPqdhu~1;Varj-VWT`)wfFI7mD70cldhIdmj1` zw>Y;V&SApq0+UL1<&tr_Ogso?JKzo*<-^q#kt#4Y~9IIq!;xW(`1lP@H0`Vr7yLfrIz zp1CJ+)BAauTZEUxd4b!An~#sfyNH|5wa||sZu;)wW@Q4n<-yjsOsw0}i02P{G4i=e zxc{znuJHGv|5^Bt;0109rlDB9wmu)S2ceWBZuJ&Ne>Ej;>*rc~GL*K&YlX)ie@Egb zEeoF^!qdU0f!jE-ye&Z9W((f~K3{l69RDvCo&~-P+{asE)Vq`P)-P8z33s9F6@4c3 ze~I45XMvmJ>pcD;sJE=}7r-kL=kZgMxaDCV^!30!{)-UL1*A70zm8Ei(Pu+{i|Bpa z4kB*#7Qu1*UE~1SZt?t! zcsdie_`SW|iJQI)j^}%Ud;D8b?=7TH`c#T>4ibGH^piyI>*^!Kt=_SycMfs$_jUDI z;->!-`bEUKU8{+kJ_ELfrKEFrJ?zZu)jOK71D3^Kd!he1-JpGY9S3EczMH?-sqc>pS9BuOAQpNSx#R zgShGci#U&gdz>3kZ_!(WC={Q+7Z-|;%Y(Z<5Bf%;_c&V+w|f2fwk>gs(|`B76LHh8 z!+}s2;-+ujINXKOgShD{;&|p7aF5gH-QB{AHcZ+irVGCi{5kTsdf&wMeYxnfpnpg7 zo`-G3EzTi`b0=}m!(QU1KL-7G#5oU#iJN|0cDM`W4{*=Jc*I$%Z+zbQa`4lHuLaKl zFBV>A_5P<`e0@vNAA-KC=sgeD3h$17>@Pk?;4_)@)~*k-W4#Zj&@T~vg&U)OweWMn zH;7M>Mp3^{csh9Te(`zFgMTlq0=VZh3;HIa_dK)}?#CCMh+BJaM4VlSTmJoXXxD*z zy`xd@eWW*^7vVEm^z)%#D*ErBe@XNkq5n#FE_k8-|2IE->c_`v;2vil^z}sV`8kug z#eaJ5=ySgCh2WP7Z-)KR9>gtg{<)nSiJSjg=x-rz`WtE&ZdOKv zTYGDT+ZJpuCKI=%#J@-Xr1)U7lUO3$uV41E_>{*ydS7^Z@cqKOfhTSYL4@M{;@3Gi zmAD<(luN3@`@F=tU5$xbyOzWMJmTh49X?%&vrjML=Cc+)W5J6BW_fO5PlocK=r=~EZuLs@=-19b~YV>U{`fTWXh~D!yNVw0V(ZWBe6a6QOe-8Yg6utYu zBHaDA2rpGK`hP6`qv3x<^sP!oed3Pz*YoMuji?Lm`RR@QoHIl}AO1Z>U#NEU?JfEh z&<_{=%Q!zaN%--G(Pz5&Y=qAy(SKMr>bHtM7y9F(pII^L3k-;VJr8-%w*dD%Y;6#A z=ZO9g^aDk|x?t3g5}sp*p-dJZzwX6S(%U?$g8k7I#BIKGH&9N<>{Hf)2*va8s681cCj8rz-u@kq_%9&N@pmO3v(7>M zJ&9Y0Iq>gGylCL*7C5@(;Mh?~!7_`C{k?XrJ&AO1p#Mztk6R~%^0nv>L0@E0eBRqzFD*VU2kz}nG>g2o=$pg;0@0^I-%ofg@Nwef z*M*uQ`b_ATi{AG?HwfQ}_}>CgD}VKNemG{0rfJos|Q^+e80{@GS5GHu*#G{_^XrR1=;JeJgO!=f}wBIikNE z`tGE+e+LvvR+qS1^rNA_m-GXJ)Q@Aw5VwE*bFfp1oBjhF@681FcI|`zJkr|`-iYnp zi^R=mWWR71%FDuw^pE^C;_S1TxcNK}{m0-IkFC%3v48Rfaa*7LcVNCHAM?+E{&(W$ z-vs-eN5yCA8R5xLN)L^HJrBLW>w|kgJ_DaKgue~mB8AW8#JOG95Vv;ShkEZKZcAiV z3@eHc{lx_}BC4 z*9U4q+~WVzDi7r>;)dS9ILs98*Au#uxcMaCoD6?@3(tf9?ZgfFI3G#eeEjz)rU>`n zg_sF$tjIqT z{sZ!JPjQ;^W+Z`H))5Qa2LvK;->e{lRrb;^!Gx)khtl6zhV_})4v4$ zYv7)@HxU0@q__UfMgM+E+(g^})M}&oE1BC_RPG1-~|h&oJUPuDo4ih}-z- zhI*eM&ifUMiQBmK{fhO(dB5U4;#}`e;#TiL^!v}k{{$~_PY{LT`7eezs|ol0il)MS zTwMn4^XR=(qVH|OmzW@w!QzvRdMAtC*Uv|ZTfc8WzdR?r-33e;WEv zML!k#-K4j1o`Z4tBXNu8Gx+>2yd?Gm{uciw@GmqX#_QvJKK#oNH~${+sRHi(wGuux zNuQjL@M%iie5S(ZEb*DyJjT(1^vS7?e!PUZrQWwwJ&BwDCiq_`{`ug4r|^p4V}&;a zpDX-)@KwUQfo~Pw3w)>WLEzsA_v@A&5IQ`+m%; z#LZ_^x#;sYar3E+?ZJD*P4DlU?;vja_n`lrxaoa;*hk#-jj`VSK-~1*!_CU?;MR|} ze)_!oTl6RP+eg}~POg*vk>^^%KLl?pJkc_~zK3xC{`gJ8qdKfN!u|W>qlI4v|2e{Y zgRcxA;QbIO4=kQ5x02!x@zS!yTB7;l6EKdZ=VG(DSRn-9pQVx+k*S}S%&?h^F^Nr z{mrDeyxoqx^&@V1_U+41;-=pV{cz%@_v6Iz#7*C0RJaS}QQ>>Q=Yi)78e5mL+L$_g z-$nG_$Aj2y)Ih$z6h0FCYvSh9J>0Au1h;hAb}9|W`$viA5B$V+;Kqdqp;#Vl|33rcybN)R z=N;5r0o?q}XIR^C7fK`H<-ywvZv@^`csKBY!fywkBz!vfOyQq_uOM#YCo36c_#7^A zKJMN|-1J4PaiQ!XUMoEIeEtmX4(DSK))B<`>PJ--Os{(yPq~8*6;cb z_D?8Ph5I^CU%1c54B=jHTj9%VNB>KNdprY#dp!3D_jv9X-Vy!}3xB9=tapiUkAIbL zk8{27$LdF)&EP)X{Cj-6MepA?{EoPdxBTdjKZLghKStcf|2~_np%lJ9{io z@D0L01AkX|`lRUd0db4p>)k=z>b)2GpM}2-eiYo>n?QRDqkiwN_UFWUYl8c@sy#XK zdZN#QK2!Mb==a-&_lJJ6@Vmih2_FOgtZ={n;;X_BK)+4+5%2@TC!HJH^@s4;;02IB z&yQb6usm^_iWxRoLa9OA#+B#!EaE0@4F4{|ZwBu#d>Qxz;#O}j)cY`T9?#DZH|fjp zc~$s+@Lb`)g6{#h@nGvf{Sx6WlzpQ2_qk5Nc=7Sm8ILOpFFYmsR3*;qOmpHk&Wk?~ z^=*io-q-ny!M(ryx`~&Q-sVwyk?7N#xcT1(|67T(K8LvJ*FZl4+~=2n-fui{%l`wJ z;VzUXh2Ppf^5?-VZ&q(M;(VF7)ti`Vcj5C3!n=WQCeA(|5;vbY(C-xf5%^ca8$Fn; zHt`d<=h@>wLVBxrKH@Kge)jP&6h6hl-DflM&`@|TczfX^zzex08KexC4~!LJlP3cNpY%g-?6XDD$))e!$!@M3}4 zco?JP!19||4Hya zEI!lVQxW6TUT*Ep>KN`qsVCg86L~(k<-z7l@??4V(}lRj{|M$w58@Wj8;Ivx;^vcK zoe)YN;_Q<{+JN;qxzu{;!jd#o5Cu59M9r=KlcvKMytEmznr+~TOpp;h;uw|6SsISLA|@ceZH3}9xM1t^uBH<9*WPKeqgw5g02v8 z8;6sv@=(%B7&(<2uC6$Jd_>;^uP)9yiBdALqT%t}diEpBg3zrHANqpm#sd zgV#HZe5~H*@pzK(rVl6W6Au!%dj0yabBLSI%g`?p{tNhv#LcIBv`?%B_wk%rC_b^7 zxb^QbwCe-%85H;-tZ!csw|E|WB>H?!-1O;|kWl_0Zu*1J9|QONx9XIXC(5H8&NqR# z6#gOj<-)%O?<;&J+I6S!dEgHUpAMfFi1Ykc-P4nCjwkRbK%GcF}={^!n)J}ZcuzImg_ zUn6e%XQ1Cm-1H4AME(23O0B=N5S|Cz#DgFh?0 z2->?scw_K)g}(^?mGC#f{}jFryaMKd_tzibErkDrIJ*gNc~Q(mf8xB3-A$a=u?K`- zZG$nCImB)0@o~Ed+`4;6xK(Tt?m}5kdb7wuJnx9!*O_g^tsmE;zxE36HP_t3c>?jD z0{>r0Z{s8j)p-0B@$H}cuU&1VesPY^f#;V4fmByRfS z(7!<3#_bG@|Cfj-`>RMa+DP1du9+YCR&dY%)m+G&2z4@e>Y!AI3PY16fydn5G!drr0ExbK=j_|>k#CA;*z8U;!;m5#VCT`oEb=dB_ zMV#~eA#uxdQRMkM;l02MVY_X4F#oJ@vr?9L$?*94Bn_V@A#VO7;nPO=Wbg}x`}JkB zh5row1K>W74wZ@(KP-AbueDh8K9ANAw{i6f#>p$hc^+*hZu&|KW4+sj-vj<1;yjPO zC2l_dLVtj`>HYZbsPK2o#(Illf5-DM2>qT0?&J0^jJL|7_xV_h^fpeiv0e84GWThP zjz3R){JLqE39n+EZ+_%&Xdry<6}}X4P8Plae6{c`;O`6n4Lpyyjobam&rig;y?+u< zhThGh5B-4sBhN!?@Ycew1n(q#1o$PsRS4=W{N2L*mx1zGzoV;@qzD zh+DfBz^AY972xB*ZN3Z)xABX@T_{t9cU~O%OyS>wKTh2CE3&X(v5>g=7hMv4RtP^I z{3YV-^9H!*r^02?XQ%Mm;6Dj}8}0qC@LX`;FLwU|@M(hmSzk{M){FJ_6ke`W*L%bd_D4Wzi?mQW(xnNdh~w++~dqZoU29e#|0aRTmGjZ&mRf@34D+6OP0oZzXA7p zC!*eb^W*cDAM^hm`oiF@pALO>;p@R$3ZH*@Fbk#q{N$e#pIe@RymcdP^)`GV>Us%( z0sK1RgM#!Bd~P9bKBv7H?n1e3e)7+Wdb3K#$HR!5{$}XM2;T_)u<-Mjg%^b~dw%jy z!t*l_8=hB$KMMYZ@OQv}7vAcM=v(6H_}BecfY%^yO`268>KYNZb;GYGnkjr8`lXlf zBj7p0t0KV)}r4IeWvKI!8pHE_;K*7g;zs92MBKhK0OV{Wv7t>e)Y` zydd1)=Xyo>paxODQ+Ni};je{v$MM?F!i$!VKK~VtVVKDOTzuZ+^m>a3_w7Y_;l6#T zC;Xw}(YGnM_e&b`(^2%ky~rYN>)W3g&)LHJEsy?vh+CeUoE~`&ar4;%{cv!PrzPT< zDf%Cwe@gUzU6qBTxAlBJ*5|dvt=_a1F`n0nv;J-3roSEfkAzPL|4jHl;9rAVyK05o zMjS8vNP4UH5aLYWe1NYrkE{$&hEfRJ^W)crtuK68&!}%r-1ZOi3P#?EILFhIc>W-L z4f!8T+(Pv0OWsS|^zTDIo4D!y_nn?5Zu*$Y(?1TyG|E^LY#LUkmR2yA}Q0 zCj}oM{2=s0#D5$7rwIQRe75kT;4cujJiLTFY$9&)H$)yj74FADdBVd>lI17iejN0V z@a`Bt6>xm-<9r5qBjOgPUx&0gaf|aA=r1O2`V-eDC2sl)k%vLTZw8+!{AKWGg!^@- zmkV!;ynQJA0q`G%zXo0e$6KC@-Tm=5VwAr+$-FL@;v!ioP}RX;>2>{eZXHL zZtH4#si@yT+~V=?&21%a{+r?R5xD1n>Q&KaxA3{(`-LwA|3~;KXjk#Y(a-(Mg4Yt> z7QCJCZ161M{{inqylALu81g)rIOl&Xam)X4_{=75^Jp8^hv$g1&l=+9Qx|#IO1x;` z8Hi^marW`^2c93l4s_uq;l-gi?+X9Zh2IQ*HgSvpC&Ygqajy3=;uilH`1B@j@%KXf z1BtWGec;7{*2dcq99OOv?!S|;Rk+WWZNlB>3*lAMLM5RTz;Sl5@W0jj59&=5J`M4o z2JZP>f%cv$`c>7;J&`zvxXqXEF<;InZuNfJ)YReq2jZrm@NyC-E+=mK%bG-f9dXmQ zSQ~k7;-;Tw$qwZX;-;^%E{PL^iJQKbby_GRiT}US?gYB3^4bIV0fI6U2b4((gE9yq zC~dJ7O`oVx3xepqH+PLK>=g2 zfC@Ix0o3~Bef#eJPB;ITv({Vdowag@-~FF`zVn^&p4{9>{==7&9R0$%0JP_1ig@I$xnqSE_RWb$YtI)Un@dWIC5RSG3Lq@&oW9xb%bcb1M4zLFclc$sDG2o}oHDwy8fClix)7`N(gj{6nb!Hu;FV zw0;%Usq?D(*W_2iYd^2A+j8#*KOZjhEAy3$`t8U+!E($bzYOi{Pu?4KCXo+>&nDjo zUrcWQciFDPSv#AI(D|vLy#1f!GtOmKlBMw|Q`9<5AHzWTV|0PD}?cK00lqwr16efxJg_tV|)T&DXZ>ePBs8*Kekh4rm9+}5{e zu)ejW{2Ao0b9p(gJ=Im~{+zs9Q}rD7ZtAnhcc9L%$?flRpCF&5WunF89b4%O&y!bQ zpCq^A`&M$BuifNR&eQtukWYgjC7%iZlHBUl!uv?+f9X%F)0o`qv?8}U9m%cEHRM+3 zX7b;t2oZR~VX>x1NGIE>W7s+jYHeRz^9b4`LUf1?qKwb#H1kU|@73H5sK7;c2W4ZJvUjQFVbzVlDeDZd?wVktK z>O4XDUm*W`^5@`7V(P4?{2t^tQ+_epe}sG&{2QuM_YH0TS;|)+-wyA;t)I=iz#D|o zWj!p#`us!ZvL1Fq{Y~ik1=(&P<|=$uTp+;w$}fE{NLf8xPJLYG zvpSQJ??~PjeiL~Q_+8|;!i&hK!sk1e{ZC8m$DVX9+t(uG|3d!X@ZHX(P9xN*a4!2X z+kXG%T0Ii}8xwBA(8Ia3rw!WE+qvX3u%FK+ z@0}f948wHtEtuaD@}bzDFDIW5{|j8U)57pmex+0ozegpv-)9{sAEfcsYiERZu5vEzyf#PkTgdys-yzS1pL8zkv;E%cYv;0E*mUb`)agijWV#QaP8;$v z^jk0TPv8T|YoX3W@)q#fFbi0TJjR z)Bcn%M?T->rGDFk;U)}4&ZUlhUh4tplAn$I9Osf>(lOkGVZL+8*Lyd~(E{g^xA(Ju za4z|Y$S-v+`Omv(9sB){^?$~D>YH6&>WqcI;#}(d1pV`-bIBh-exGy6pSUF4gyFDr z$u~TdC0rjT*siKaicGFEn#`*`JhQztq{e zv~w5QlkQyF)A=H;bFFj9pGE$9=aQe(P4oSnOMdoY^#RVMJymGW5a&|IuEUIWE_FUb zopH`3Z`Wt0IG6m7kA#~rOmi-IyKeIk+_sngW0Ub{zRUY|KJ8rU&qMvC$Lj8}+|-?)xp}Wu3llFVm2(@7(uW3%Iq@ z+S9}3Wx6X-=ZEBP!*7VGGnn$GzaoDP z-fD~Xr}fVZSRH7rA`*=+z*%KE9+s} z1>q(P4?CCT)uvK3oUc)xA*i#Gd?b7~)frluEEDaee1v{DLf#B@PLsERr(8$6 zPUH{6dpnnYyIe<)e&XEs+hFI?ZwpZ;4{rP0o3Nk1kMgC+Kkf3;pZ8aWn=q7?C-0Jf z?;zWe9XJ2vT=Huw!%Y~<%9D51zo+{n>hFVFdrry8OBfE9C-18BWyqg}+jf1bQgbO= z_1@}Od+hi5mcQ}?&0UPV_5V85|31|@zmDdAO!;!;$GE)A@5m1{Ur7Eoe7bY#w>p<; zeztR|)9-KUkCVR)U+7%w?2?rt3`?9#omNMa94&V)dHbB(YUh%_5BV+dTES%fd0~9G z3BykE&(RMD$WxI&MSeNF;VW9t>Sw^ObS|@$gZ;zzoJ)K9BcJ75^5c*n>0I(T$j@*t z`H9HSaW46LkY7ap0DJ@a6L9-{hs>AM&qMw9DgPJb&yXL4H{BLS4ukd2aduN}M*^7-T~;q%C^fiHJ1^@~t{opY&w1M+*w`@>I>kA&BIHH;hvncw!| z$Nq2frOu`PIOMyN&w%$Qp9>#LUJCyu-1ZxIyAYL7z6|*d#RA-@dQW!p@d;<9< z+x2x@zLoGEzlWPJEOah)5?zuU zEpaaSuaIBv-1qY;xb<@a{k+k+&@QxRKluUpC*;TBUy=UmnHx#TAv*Ze%^ zzMuaCZv9+_I;GBq^3b03L%1#95-i_S&V_D8dm8N0>0AHb0dGe>1>T)}2K*NCweZ2@ zufcPi`{g*rxhzL(|1aRSyuOo>!Z6R}Wxf)qztZKU-)4Ly>2O}}T>8yE7rn)~G1ax&V4_>1-E`KKtI3ZT}&}_0kZ$W+;ya)O1@axIP!f$il zIFz>I!f@x(&({82c!OXvzk{y|H({9O@-klqsQ;wPOTWGLv82P_Cpnio_WAG?&LuzU z6G?~tqI2KR>*3bVS?K4j&V_!9_8cL95`LO|ExgX|1!l`IqocI(-bpNagZl>bO(It>4$ylVLSwm0;V&F|4G^!b%=TfX)^?R_Y}x{>Awa=xDW zNXm~!dnS_iXrlRh$#>y;LNWP9T(EeUyr0ZS7=B0I9@lf8it%U2FS$_bJR9RLknicL z`BgFg68VvfG`~5kiR0vyO6hNsqIN8Z_`4(C%NUX zCC|rt-aE$okWa&U-Z#c?BhSHhHz>yMBrolt?H>{2Ipm#jJ!(RX7m#1yQ0o`P_)PLQ zTWP*H#^;iM(^m73#P|a8SKDcRVT_lOpTPcSX^j7g+e@3PPrkRC)_*a^*OT8XC%IwR6yw{-H{dw3BgXfTr>1ND{W1O? z`72o8-jDI)Hu9F(z6Qnko#c;Ue=;J* zbI9|s{!fVU0`hyXKPigw`^mq+`tU%E|BAdmwy)pB_@m@6VgLL@j4vWD$NZL(f6!W& z`?KVh{}cI7aeQAHDvB%G5#+3a=Z^Z6643nQ_w#j z$M|RD+i-q(I>x^vzYqD^37rqyZ#Q0e9W7v;PjPZNO%dnl^ z8{@OcyW>3V!5IHF`9b`CXI_jC$NOgK7CD6ENauv%dh9P{eVZJ9hJ0T%TwjM<{$=Ip z4f5^q6XfgQDOhe+XBGTLxJ~zMOm|p}AMc?fTAda0APkFp>Alt2{8N2Cq4&A|`+@qr z^Qd$E-^c6o*6#YP^pE}B`iL0+)$3GewLaglyJny7mW%ZB>9v~Mw)fn;d4v5m`@2WZ z_0^m7`DZbH{QYzD-8SoUoHivtCnN2#Ar%j#dvU6ol#lU*Jq>wz+2?zbXW)5X@=QEm zK#uN;%E>dZ+`nMQ#O-x!PXcb=2VkBh7hl7$6!pyQ`<5%n6WG2Qp`PWd>S`VPf6nIF z=c|`+9{wu1T^Fq+uf+TGZ^=t#g%3kd%!j-zKiSwXO((B{uOTnM``HxCpVdiiBGtp^ zvdJ^xUCHfxS2D@7k+;ufSbh8c6Z>8|^US6?-Q`rL04wGp@^bjM?vS&mphE^}S8xCAc0~59^WDDZ}|m zYw~h<26+PBhrAL#lspyJNs7pe;d9B$;fu)a1A=AbnK*vDN}dI;AkT)MBrk?XI3Kb8 zDS@Yvr{Z`sl)MyPL|zH6AWx*}dV7+*65a{hv9+hPt>*iXXSP!>CNF5OzJREz|`1>}|RH^?(OYdgOsFM-?tnX&n*glAztYM#|a>ntFzf-fgeyGrw$$g|)H z@?!Xh(+oc`>|-yab+t^k+6f-2QK`o!40Xs+)DX zb1&9=^MZc*yn@{RFWyOV`#*6#aeicV?E82Zkrxcm`U!IT{~)Qj-eYy_|4j@gx9=4% zA-C_dJxOlgKbec`pjO|$->I0~zL#bbx&7U4TJv-J&Hm1@C%OIoU@^J`HgR(QS35%kQ}O|43xd`({kg+*`dRpc5}AI(@Wa!8Fc{Yi6iptY zy05N0``5tP1>q$&N#Agn>V+r&HLg73?EGLgwZCGCc3dhJjI_T=_~G_1t)XV1Xkb4b zF+-lXfv5k6@LEmNKe0@wZ{y4KQ^OBWe|0df87O)X)6c?rnV1ZmeXRzQ++O@6=d&_l zH}Lpd!)rCQzxlJ;ep}C^jGSU|`}YNtnl_)|VRA@J)&6VL-9+zg`gVUfa82VMTBhTF z@7&R==ikOZhVdyDU0@f;=>;3l_@5XbtBG;c9OGBv_-QZL{M+->;XzIPmtp;f_Y2a0 z(w8>A^{Xsi-ggFy`mWXfuS*T4r^)`{w#)eSwyI9YbtSoMHceb!41-Ny_9-<@zxaI} OzncY-?|%TyCm~q? literal 0 HcmV?d00001 diff --git a/src/lib/libhiredis.a b/src/lib/libhiredis.a new file mode 100644 index 0000000000000000000000000000000000000000..f92d33b59511bfba8459d35ad331e8937a840d58 GIT binary patch literal 507652 zcmd443wRVo);Hcg6JWSyqJW~J1PvHeLIQ}Opc#@tj|2!L;i6y+$pj)H$tDvn3J4}a z+A#{c-hBn{cw1R@5z)mUXuL10>t(%PSan1}MFB6E|2b9X^wiYMWbu9e-}8O_z;xBG zPMtdE)TvX|)t&AEV@m7F=AYYbXlnG4sbpnZ{Y_0BmX$S9l3d))FpLVr@T`gdfB$a7 z_3zS#ZPYeWVeN~l<0*1)u%ny_;D6A=45D4bg z)z#DyT2mbiED06{f<=`J12ql7C^)C4x;ju6EGnyw2al_)E>BQYTwS@usHh7BrUh!N zmQI;_32>1t7LBi|TUZ**sad$Nw7Ohk38BLBdLs1I&09poz%_!$VGvEq4V9D#D}bVk z_R|8T<$=1KxwcGDgt$AFR6sg�?p z!%YYTMPHAvt63<`DhU}kr~`bpwSnq#?iHbggrpM$1JPxR64J+E5#uY1qKM*UgtOF_ z*H;G?R|TpKNCg(w2A5(2AUu^f)Zz)98P5&1<=`wtTUHe)twVHD>4Lztnwo{61ZJlN z7S=2Zpf45HmX?WnzAEs5!pch{nS!98^;ehG<;$k$)zvJ%G*DNAEXqoQ+(>DV0DwiR zb}1Lt3Q4P~hSf`E4UuF8bVOB6^*sDf^%vFFRaOTpC>NEfSST6^)>SUV;=0o6c|y`) zO;yd}fDklT(*S)Zl4T2pP3mi_Dp^XjkI2^rq>!b-xE z!I}~f1)CC;O6%r{S_?~S%jTEXiS#8km7+uNOq!Q0EJZV7H5ks3wCEh^OZ7{u%c91n zPeE|ZNw?HdZJ?>ek#X4dFoB6V@M%k%QbyG#?7 zA@VSdbB#!jQN#EIRw8_4i$u0@oNkL2k z$GJ8z5p>P1-ZeI0x%O9ErxzC&`?eqMfAH%q$lR&Pl?H$9&D~`er6q0c1jST+$z+Fa zD>5fyl+dkErRQZGutNE1o^oq=4=#5XG%7yPbpo!)@b*Wmfi}gyB4L8!Ld!lZjk@Za zjZhMLR@xPW%Wug|>j9#Bu!dsXrnH*@$ZCb69%x3v8%!L$G&DQS)BJuzmKAzJ(13a) zgnIV7-sUzSwN~xKMx>HEBJv0p`7PyXDOSs}v=qDVQz@c}tt;WQ-+CzD{=)wFX~zip z_GeONd!MMe=NeJh-XU^=MQ$iPzojSC20`;%u!{`A6PRtq{(NdB{D2X+;aOI@S+tgG z@AJ2eNU{b$Cxz0Q3a4^URIH82kM=}U{$$y|TGEhl3>LZ)ZEGi`3D2$oFO_bW8!~*2 zhw6h%h2-edDVqM4y*JlxlVaK*TlUvNeUT46jZB-{mv}|Ctr4?mslVfo6}p;xLOPoL zmAAPaD5879{@Malpk4g-PQeHI(|$fUqq((Vc#KrOwxqObpyl2H>7K=W_(Et=_^oAs zob|2X)7+Zvz2W(TABO9otb+Y7FLXwlU@Q6!dq{MZ+EJpHMDIYCac>EhR@{z)CfO|n z72CzTX8-RrcI=1HHsP;0uk_yx-}Fg#8+Ic^n_>tzZ(H_$%YF?yGaby*cI5`BiAQee z(KT?gZ)$~KEA;FpI7M}JUm%Cr1A`+QiVSP?!C)ULHU%TU-IRv4tmbdMO)rCI`a?}= z8wKg}!NC^9pr-y1JFHLx{9o>|>`cpE;&F(u{1K>Sg$g{@s$a6lc@6KiRS*@dP^Puz zK;h^2-nKIpntj20?Q}$2uKE%}kG1t52W62}dEhGq>=&)=Kc8nE{My?7OBZYK%T`O$ zFw5RTN(w1dqGyKAObhC>|ZQ9&A~JVGqtT z(MLs1utW2?Nx(2vm6k1R`6HA;+O#O zMyR+)sKFCjF2^DI{0?u^df?*&eb8C#wrv==vsy))Vjj5}03Qe^il5sCA{Z-Qhv_Cl z@iqvH;tPW`w+ClqtWU8*MKCKJaD?v%HS@p+nxBRC@GXnquU$Woa5{^V_X7=(lf<88Vg_%$9X^ENL5 z3T(Zp2GwbN!Spr$-qm|;nrKfd2fe=LeI6@5`*xvm_$5HrS}lEmqnwR-CPJTq(Z3Q4 zP`qq=hXu-a5^`W1!ja)jcsL^*hi<%TCk`;4_IxEU@nt*qg|OCJ)aT|M{tMHw&zsL- z`9hh#g0Mxbn+`S*;)&5F=s__E!<^ zoe2ps(60Zrz1?n$EIjnpS2#_yY-F{E?|>8z`i)%Q-zLL4MudzukloCNE(|0>Oqdr~$x zoyWptFoM$;#*qJwZRAokvN*9?f}M;g&sJ7#s%LKkClhw%AQ!%a5neCh!o;@)yId^T zX^BZ|b$djb1s5W)QuuUhZy*ulCu&V{GoX5fKSOd*qc*9z?Oe z2QWyW;xHPzLq=V{!}X@$J|HeO-zv;{1D5f^9$;v^Zp{tdzXodIL>;}@I|Kk3*4Mb( zM9V?^`~c#oE!N>N%Lgo;0>yH5YR6eVAjJ}BD1Y?hF9P?r#tra`4F|pX_Ccw#-H1h# zaQYqw%&bu3M#%d|KOcly5yDm;fPPp%`XlQ{q7lV?L>*`OxFSnLQ|xKf$C;wN&0+z$ zY9}_&6STZ8%@3tV)|$}n<$sS^XHKg8HhP_jja*KPO~3h;e-%Wr_RI6V6TZSL0oNAP zaq9y3$+r(wz(tZ!RoZDQUR_xB7Xkt!dz;<|Ag_6M!!eDaHIT$vY7DUB{*~4ANfRvl zCJ;y4{tK8nnXmnP!=oaN64k1{Tb@=MajN(;8!rta5kPg|#FrI8EfjPh_8BAsXZd8<22dmP@mrTej8lOMd$rj3NPHFY2 z!Bk+BT3TLScXsMP*qw}UEy^hhOL-Dz+O43VMI_qSC6$^35!Ok8tjmiZF40nmI2pyh6d_1_vNu z3gP9is-{#>s^$?iJ;d)(;`bQwd!qOqAbtmn-wg3PRQwJTzr)4vZ1H=M_?;_$=ZW7c z@!KSR*N9(R{I*LQng)(OBeVNiuJ=Jy;ZNO1yJjFLGiQrTlFXbVG9H;3BQiZ?W~}QK zsFETx=L%+hW#&BBtx%FGGuf_Bp_z1}v*!#jR%Z{|M|9o0J-#o8?i5|u;|I~cOdrJB z9+^Ib=@gm%8Pk1b`WMlHO#h1MbeaAQ)0r}T7}KL<`gcrc3yFFdCT1*|F-4|8W?UjO zQ)ZIP+d;gGWu~)v7i8wkjK@T2Yh|W~$OL63*$hC*5}7&LL^oY2GrdedWUi2z-sVQ& z)+jT5P2A#JBQpccS|D31GlNZBjNL3Vr-{r4nK@l#HpXDCk_2fw0WPtQ|(Lon)HQEv1c9O?U>rxhTvkf-PAnC=W* zjt9y+W3YkGq3W^X z2R-gs>=|e>3}~-K@YC6Y%?L_lEGdOjojpHt2{t23cFO9>0Ejx+s3-wO>5%S=Egy^R z0x%ZRQm@IYfYot`X1bCK_5$8JP*-OpPgTq}4dJBTa~mp*;im+p;8(mhDuo^4FztSvKZke+0YV9uaW7c z$Y-rgUy59$%~F=7K~vIZDa(5TzOi?(tky_rL?t#!`YTcP7eVpfaPI8EiA$)TVxycV z0b|4b8@6T60tWrdAcu)mSx^GW0V4Tiz)5bw`5Sok0;IDCGcb@L-3ytYjAgE|$kBZ_ zfc;BK>LE|bYDi*7r^0_oZUll;jDDzIKOE(02%BTf9as@W8H1vbkn@C)`>AAJL`YE} zg`AHx#z6cr_Xzq^V7^CAdysw*da3yh7D)PUUqMnKvO5i7cQMeXBIr(2lK%$T2o)`K z_Ur~k)JqzM9^`J}dP&3jgIxu2(l7-@t&M&dp=7nmqS{WUn#jv)ld%m-ifXdPWoRb% z0jI`gXj4gc85)w3qJ}hNj+p~9G^(EyF;|Ym-ONFo4*;%)nTzNk9Ia*^I^-Z6pyqhN zOghO-q%i+P3};3dih@D);6O-WoQgl@N|DAS9MesCHgEq0qG3A7vl6T0F&KX$)ThB> z*f3XNW!Jjg(_v7UVq_uJ8Tf-oE>t=QattwxUG?x=WM&O9r<$XOnA2Q~AU_jk$tdD9 zXf;AS5{XA7B%T^ed}c!86|uy?J|aejl-Mv}g>E>R3n1eNSOJ;85u0T~n_&^kj;no> zsM?=^r!f@A3Lm*n7tBb8uZ0SWiI))gbpBE-@3(!nxXL65mm)2S}cO5;p!3+;fNggq#G6o}v$ z$pm;6j>ple0%u9gFt~ISYBUP98Leu<#pZV%XcEJ$1FeSDD%M3IO#jPp7cuijf-^&$ zSV;*-)2m2R(c54H^hfaEX(BnZD{QRGV~9B`l2P0Tog&Jp`=DVo-E!lKi74rtvJ8dxz?AMUY zy>8QrbJUK)1uh=u7sI_Bx}DQmT%&`|%8)z_16|PR2llu~3<2kZ2MX+fph=2VG4Sy{ZK~Yns1K+T{__F^aI!EpdaE4ns$`>|JL^*+&0l^^VJC~p_;yZ!UWf*tmbfXPg$7#e6>WOQJ2Z0}5@yKcR0rVI1 z9{}UL{Q!=jK}*q*9>fA;4E~s1#Z?$4@wl0M(!Bj&{S9L*RO>1hb69pR{y-jQdOSEU zm^t}wCa&)AkmcPS`tzV=c|D4y=hZDzv)QmjkcIAb?=JTth1t_YA>8XWtdM!Qesy8~ zJ1S2$KNa~;wES1g&#N^|St^>EtLDZD-d;y-nNQL3M``(^&5N)e969)7-fGHoftd>r zni}Tq6tQ44_d*(XNCzWR9Oh}}MZKWASMlIn#EAt=J^m!J8&xsPEb~sRBez%}aTXEC z;Wv(QBPKcZ#>Y$~=bAlwL(M-hDCC?e7B)DMn2?H|N8J0(sfIEBI+mL?JkQL=rnazR zk8t8HrksGJ+xi%WH2F-&#Lm2Y5;5BjoU+9Vvd+XMB!>1_Tha+HKI`CLfK7QzSe0d0x!jTl$#*TfM zY!uo%YMsd?X7!QSnW_Jno%f?6iK9crh0ua{I4-ysfB~SIoSo1Gheu3_g$Rv+8hNVu zP7zGNgjblAXqWgljH;5#RW3DePh3UB77JEbayb9FgW-IGnGAFtXniD}ra6~0)bM)D zsn4rIx)x)PiXDkpna%w`q(3qe7qVHF-g-P#J%W+QHU5}~6e0J-9^&YFq@(hPuSAwY z!--Z{`Vfs;VV%sDx%5?(J-&-M!*nfC7sl-XXP7dX7^YDnv6`E!J_T7EK}T?nKh_Z+ zp76&yLQLcxgvTT92p6bz1Rb#m?J!y$>`q72B=@&5nX4Y=)#f0W z&oj3YE@rQ+9guUc`(SxgSMgkAKK%NLN7hwbK zA>~@3w3h-+IPIMPnWy8l7qt?=`1}JAMM8?QQR0O4sMQy4d-aDa6VydiOIr7$x}HOE zCsMgwq$Cy^7mSY3C{KgR*i`oKqAZ0X+@(@#A`AlcpOWQfcC@t}o#d6{1{h1bfl^#K zcA_oU!!wi-mhEiDoD3rxH)9Utr6eByAY8;9#tr+J%@=2;Z+{~7$i^Di(8pTqicz@# z7iX1tFL2gYi4k4piX~6oh^R)H;V|9i3j>Z!D6SGKl(Q)rN3dnc{SO2H;YA(9YQ;xz z+v(51o+5IT?>tGkyoM7i*k#H9krr`k;3)o9)SzAOT--Rs&7qm#Gf`x{q2ryaj69Vr z+MCW7*1gBMu){353S1&T23&AU;T~;E;T~s;;9RY~%-`#5DNMw2JaAJ3ECAP{#UK}) ziXbZBl_|&ur)j7|reR2V9*B|$Zkve1yuAoK4&`}3lji|Vo=ANu&x4LUGXIc6|3~Bl zF=w)bk48zj$juUFKo_Bek7^P=>a-{&c+`<-99A_qIsCHgOAYg{CO%Q(UbkzxEPl+{ z%ovY%b=1Rr!hAOkoOd?inT3>)7lrdE7d5SpAqM7!Phr&~SOIa34n~#ZSWyuhz5ixt z1UkKgeSdue&Y8GyiU7C4EpqaCa1tX=y)woJf$%Ulo73R#U+kLPSrRhk2)4JboY+lA1AhwA4qv_?)EzWxEp`$c;L@wn0RQFs1sxcVnz(j$oR!I9 zw;8zP$hH}nx&vFEqwYfXkkY{|t&32=#B-uPaVt|E4yV;n8wYKIf#eK5TxUKmXp3=i z=-{{>{HNq0rZ{le>gXmNQe0d8Ml9s=4Q_@x{T#In!(~<~NQW^+S!RiqRX%Ed)JA+% zNhTk_5f;V1KCedm_fGRS)%fZy+A^)aZ(1ThZ$@kRT!gxCr1QuPRKZR956!3oSb2v zcbr;xgplYI*kUu%B3vcUfjTh?KM2^7uJEWvGzIo?=(0nk>;vL$12QG+cexjRU$2C@`=9o=(VsQ&fwYos6tr$UJKVCV+g{ zi9j>WEIxK-_gTVB!@ENU9ySmJkT{bYf?KfNp~a)SppIwBBs>Oybg;jHY_Jg77{=KV zL;0g6I7cN!PGg9)6ZTY;uw%(Q;8ZB`xnv&7o=5heY_^gGwS17p{>4(rj#IM03Kn;= z6drVeBz9J(qac9fDZ&ZA9MSJX&PTcKB%tXKFTzI2m%-&*5Z?0~K%*pDxA&TP#}7IeZEn57U^# zNfts9%Hqf`%u3?;mCmM77%P1t6*{MjshO2dbH$we)PbgR@(Y5baX5F6OR_VK=?-5? zm{gQSXP1$+{=d^?{#Tj~n({bJ)f${W-jT47lP5V)u`W;w6-9)O6=)RE-0HB2(OoBr zr@KxABax+vu>tJC6d~l~$*}gsLvrNY3_^h; zCt2C}u`E{KsjTmAScu_a8W(Z$D+ijzNmd%!PmN=Oi`WFLizMV6s{@U2l68@UoMUx> zkdvxrQ)32ftY*_#v+a%=(>bZCF)fZ7)8nZzZGEg7)8nZzZGEg7)8nZz?FiJE$!f3{ znnnpHRW)YDQKN*_U>8Iq&s@*BM;t#Z;UsG)2|33~LerdN4J9GxSV)b63(OBfZyNkh08;)=SaK$S$pC^<5m zBzffb6q0XDM9xnr`F#XpbMJCQFW}@q9mo-#pT07Uf)I(!D&P{2d#TZpy`YJbH$@

rH2A9*;n5&_YLo>9Gcl85GcBeGh5Om2{4? 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 z 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

Y4Ka0UI1k+nmVc=FR{%(~<+ z^f`dsbPVMWNQqPqV?KLa$eEBcabv}gexzzRWl=*PqPYAi=UGa485?5j$%ts#o2>t} z$lAL4Q*?h>H~e5^-Izl;>c_s~*&d3ltIK>dr(%Cfk4WbVlIO8E%{Zf8 z_#0XB6lJS%Cf^=sC^59-?wp2qau&amQg^Eok?jp2GY3+~uRl%4nHoQGW3vwNI7ije zL!GLUvXjT1+-0+V3TNx`G;UGpgW+tkx2Clo$3`^PZ6On=kd9X#ck^Sj8o~v&+??3f z9O^I8s(s~`WbWqhTv|uv?QY$Exf;bae{EedIk)Z=RZZ%jG`?L-G=%}R`5zcvcj3Xh z2boxV;i0-&L~y9r-Ofa8f8FWyJ$ZT1pV5EvV*gfMr~`K)F-o<}(t9{i^(aFfVmplw zwmrGkiyHE3#`u|y%)RJn8A^258E|8?VMpHL#?E;)JqJXV@H!~(#zr;sEg3>#!wG8S z$kKmNLQg3#@ggTjHTcl}yCRj_DH*L9&@LJ)PEQSb&mk%httN;fIY0IZHqZomBMMSHk@btkAf z$0PseM%ErsP%1%`Sae9GepH^#jjUUAP^G_A>7kjshi2~kGwGs%U{|E7H@u4#RU>gFw@z#q^4AWh^@ znhnCGc>b6EyFXYbaqC>C8VKGUEZst(&3c*FQkx8pZwj27;7AV$i8kWX1#e)VNrGry5;s{$MI! zbd=rAW%l0BvunU_X0@%VPLZYjXeRN{_Dt*U*ot&wHVlLb7%Wc-Du!->hiof<(Ws9*W-v<<~YXZ$CZzLOOrj%V%sA(MYzjR{r$~(u^D?dr=0Ck zOsDGjU_Rz~h=S1HoD-YTkRbn!$W2j_LHWyO9LlCupW!k7rrDPy#J(k8X@T#sz`g!A z(XzekKTghB7Hu?z)cTqAl3X4~{LPa|F-@<5Tw2!_Q%(>+_S$G-W9)s2qE4zoLaW!w z%d00gM6>=$GsWCfxU#Y%2;@bpC(=G*Kk>}j!S>|Ee#nb`pO^6w?G`XRM`N!AME z{FfV>M5Fhvx(gMM?a`n$iIzjV>IN#n%Uw3<5GT)&{G9clB~zNgZk_J+}kBZRB_!mhd0JH=!JA-X_9iQSxjRoO+C7LdIQZ< zfrmEg^(c9#dw%Q_a$dgwxj0F$%Mx!dmh)s@|EItnH7f0@e-QmQvUd8R`a6RB$hzqV z>#Kq^tz%R_3Ge#!_{Hm_`cDFWUKiEB8KikVQ@5X~pKs5H2Zcekki!4n`+)0%Gcpk~xIOi1F@2NDeAY!jaGxpN{ zF=*xWkxD*e;+)tAQS^}5`pqdFXl%mTO*)=zB6O0|)kLvFX`A;K#oyrG<6@YqGv6kB!IRx?fPB3aaK9Xp=(Z_6%{6*4C& zZr6WG-DT^ti+Jrpqrt{#?4mtP5~%ny_eHDTj8q+>PEvOacbwY#2Pm)pKIy;zY5PZG zd-Gxk@}A%JSA9j-?;jMUy+!6X(Tw%=Da%LlK4a_1njAl`;gjh4FOz9!_N%C0OSy~J z_a<9-#Eiz?nEfs-sjth*t0`#AkJaXErbfu1QR}@~Y2u%?k;vLU(ZyTnjO9x|d)eH^ zW#{{pKl5LD$4nZMayIAqr`Nv_KOfu1kv;jbSIOl3nmpK(Pxg%TYx6TUFW#)}xt8pC zclNvav8^Oen{i;y$r#_(9v4}gsqLuKb`+8wufq=NKD560DlHoO;__&9$|>DdIOV2y z$gI_27W;x`3Qf{_xWnbqGutbs+0Ch$(#CF7SwVm0^?qLLJw1&5K&^A*SJ4!X&;_)X zjx|_1D%1JC0@T#>q@$lhe2f@b`o0R+-1OcraylAINsq=h=GR=F-l6`K=((NJ%Snatjtjo#V@?FsyswWFovxSlz9}hQv#qOxA8+i%*g=YiyNNf>fYQub zHekC_Lbc#pUY8%MOs^m$KXyy{GL^%QBD*djgSxX}Y-xW!4+`eTCsPT=piT>JIcg%0 zM$5)D#NNrN801ANzf()x1?kzeSjpE5)&WWRHK&kF5=yNeseFruW>u5O68_as-Y9M0 zZ`#-KTPUK{LmHwzhU`(htMvrXeze7aQzBJwXnKr4vSzwpbN;%D13e>4vq_&?t>?Y0 z-Zw_ZN8j3+ck-4<760UI^f@Y|4t=91ua8vC-)!s;DBQaD{trzbSH67oI?k*7t#&pP=swXp$n3B3X*Hf#wmmoY zO5F|`V`;n}L&q*(*1bsyj#paY(gN_yx($-fp}~&U1jNsq^~Ileu6u-XhE~sOz_>Sr z)GtVH%L_p|`+1sdiY%E!pX|d*{w5#(fxe^FBgls%_T*)~9$9)K17(NuV?XA{-i`XY zcSqKaXpHH737;W`R+HqCw*C-3KPFF2Z_D=PRNUZuBWrH(Bb6=5Yr!d0RUfXwx*>-m z>xvF$Y^Q@rI^?d(Rn^KR<*^;s`FCuiG-%}+#E@V1O3g@r@Uj$|`iro7h%C({n`y_E zSC+CQ-{0G~b8@af|6tuL8f|jD`G?e^l6EVDYf`fGVWwJC=KJ&asKw;a$hvt4>$b7; zB5UUzs@q6Z4y`^Zb+B$NB}P`y+f(-h5h@O0L;H9e?xS;ZZ9`?gzq4`Y^2I|M{Ma^j zfbvA7ijNIc{J+BkS}6@x15~%&oYIae{eGmXkVH@q=3Z%yT3GK*UOeO=39RFN2>Z8U z$RSSN0lR2D6x&wQ{vGOg-m)UvCktP6@sK^tI91YoUUoOrYlr+qUOdDtQ1{}$S!e|n z^~CPjp}KR3D;PgS|47O>nKG7Z{hU0S`IamFl(bAZKwEVR#!41TJ1S)d7x9Fnxmfit?p)F8K58;hqjP@Qeh#Yq*a3;~ z)2Lu%$zQ1yM>s!g#Sz|T()eRhUzZ(7nponB z{}u38{5VDX<5RL%`D5PC`y*PmmHm-N$KtxjpQHT2X9DbxPRbv%Q}e6mH{|!A)3B@q zk);zYUqoYnAz$Ru>_*co%`3{u?2%krZWx!OSuWw($L#2G{URCwvb|jYojQ+e=8rg7 z|7}n|Z^WVcPdWbm5qs)Cn7o|*QIpa}_sIHJX}`nMYRzC;QqcTTcNB*x-s3C`PGPaB?Yh?E>xnG(2H?ox7N=Iu5G;RGzy~~X+#~NT$HgsTJ~z)EmWX-#K9gT8tQK3vJ|{SGaG49!D|Xn z1@Y`ok#!@K6}rep#HS{;x(kV#(`i6*`HOsJnnfuTBpG$*P&uU+-Nk#0Q6RM^w%3pkrI^7(Wv zT2o5mDp?%GeSKbR_pD>;#!{anKjkfc#m~>GkKDxP<2jL+X43-8+`O6nF=fp?roL;? zKGDVXeqPo`v)V>pI@9L-Vrb@PgwJh}pHZJ*Q${j(m$%U;4Oo#6-keKIst68c=5|bA z_i}xnqBeZHu%igZ27Cowp>w2iJ7^T-7(WYuR|&Ov=sX3dYqrOoDRie#hUr zmUVA%yz}{xO7VP5{)*7~kV-$T(|mr#%$N_!4Rszh5`VYipyT!E`o$l&s5p=^w=*A~ z>Z8!e+E?lP_qM42dgB*7PUOW(_l*5+;_tilz(5fuPCyNZ(Y!KciBJbJM+V= zcNg`Jy_NAD->5J9Fk1Ct`N>(EBQ<>ZkhLLl%K`dcyvrxP&5>I_qXf&%;jKR{US#h- z_ud3fSNf~7_tY<$yqsC}ftdDhPGnuSJ`mGseJWjd5m$}J#hh4a!`QkZl+^ijLRflm zY+WCdzpV7o*t)JJzb54)vdqg_mfbkEuC?N-V8Gw-9DhZkZ`8HZ%sO8E&4PbZ_Z_zf z9h7C*`5AlZ@H<-ee$~E6B_9HjS0a@ym?+zqPeV-XgM42fkmSW`>%LZvMyGaWy-OWS z-N&8Y7~92tJ!NiD0uKfJbgovld*KAC0^eiB`Ae4R&?=o0pBD zXA~M{e<_C<6hC~N_7Z((*Y4)~^1JK*sLQEywBPc4K<8)o1^WKKvoEsrTWZHdK2-5S z{)?=g5F8AzXp&jCfAs`9AFhwazKlkOy`@Ics@mBpv0WMR012HLRgehkmlF=sy%XxM z6AsmH3;d_gZ|nbT#=q(bd+6SYX@53`&p5F|S~8ttC-Xydo`iO)8%8+ye>(4!hf757 z^n-P$ahcsJ%Bxy=yE<3Wj$#%i)J@OW>v}Aw`<^d%CyUhqrP{ow(S+PR z8f%{(D^KsK>PRC%UTiZxb3=tWpcm5MOn0PWf2aPPvA*h6D$qJ|>j{)gXy%7B*JSQq zyx-S%fG1|lN?H67Y=Eio@Fxx-3W`1K1#e43#3&^S(ZvNbwYy8}- zsp+YUZhPbM^wfMhk1gY+?)rZvqkfUfqeu+ZQay)5oj|vD)9jy+Tw;$_wEAk~ynA^!qx*(=M(@IP@qDx2Kl}=o&sP#-yK`d)>mQc*ic*EscpXQvy?7Hf+upd% zkw+`}o}_{tII^baW^!M~KgofpY+h`rS5C)6B!lMLSocICbp7cusS|64(xU0Ryqc+- zQ)#_*E1>Kt<8OZ6XGqn) zoZ^~cjU{wbzNoxgv}}8Mc9Ql4N>(OHRJM@8tO!dNPLY z&(IjE@B78xQFlyfjMYoOXcZmMZJ9l!exCTX;vk)_@N>nH+xV%sii0g8RnM}MwSea- z#N`>Z*cLTUE#5>YsJs30ESjl0rB@t0qC9`$^A!iXluxQSIIjGXii1bao^KbTXkAL@Mbbd2G#R|5 zc8dFQ3;pc!vV?_s@CeC|t9KpGXNbcD_SJo%rZuf!=SSAs_VE)UQod%)c6Ibr@ng$5 zk;Px^pvS!SL$MM*cniqMgbLEG#vqn~ZmLJ<0sa!$lTrwVwQ)h>r)FDKq zYBe8#E#A~UE}C;q4DcDNw=cKUPb)t%kH#F+Kb6ZVBqB6K@PN2m>N}J=)X<6p|k^1*XsE_dUsy+fK5tIb%|FqxUuR@8WU#kLjN2|59IJTsW`R_WpDBx@FUf7 zRR4+tr$&~pB2cwn^d-NW91*^?Gg`GbQuPoSMW=*xRnUJ0-Omtj<-8OH?JvJf9@*#| z#1l2laKEy){OD+PC-QB(eYu1EG#cWGgKJ(rl=lNQGiZsmFBrYcN@yhB6pd{k8SDEt zt-q)yb;m19i94ZF>mFCx*}N1T?hm*wQrV8IqxrFN4rSC7tm5<0iXYoWmR7T^iH>Y5 zxhCFbil~+}538dSC`0p6YsEH?jO~$X_9xNIe`Ng|X1wF{5%ufi(y3|@7RYZ=f4|9J zM*Q`^3i@YG#UlUINL5P`omVrF?l!A&E}ei?|tCnB+YNU#vma2PzKByj= z<5uF(aY9?LMM*}^rIcCxmDeV+KR7I$ zLpWO&f6;;lj+D8l=j-OfcN=r7 zOB+T~@1h&~8}fXaN1|1)mVZb)^&^I6*5;nmX7-Wwuc+~2SpU||%b(Aqpv%u%Kl>Yq z*TtX68?trs!T} z^eao_PAT)oP4mXh^v0EY<1Y2aUFI=z-6_5MT<4vt%XObZrP2n{--UGRmNtFr!F|lX=nDyNL#QVO>+#eInoB6m)3puv{_TGm^SJ1v?bJ|rJO-lD+eX4Pxsm6fqs1_mS-G> zF0dMh@k`=TRMk?sZPg$2sU$v*k+<%0ns*~!v-kVcXL2gtN~JG9RedGtREmIVIh>rt zQR1bfG$XB4K&6z3=8LCLh9)bS6lu*;o2TBvNnZ(2!rpK3O-JHXYFd1I8RZJya2t~v z-_LYgO&?&ogQkCEI!)6DneMLXe>2@%(}$Suuj!wd&Q_hHh39i3suR9S6zD{fN|fqE zihl>0cZp6k_wS{|l{%5?v$ZpHqP0qt>qHxW2IX9*6G!{QC{dvk?fha&+@urj{rgGU zVx8#V|B({QbmC-xKCvy=i44Dn5_jvwX)3W=Cwi#FBRbJjCD!OfFaLBZ^Q=ysp=_(w ziA;YT>Di?IveawYU9|yub3B2{N2%UODrwUxg0mI6JyJcU+iDpt?$k0`tYk-NKi|is z(7$1qNjpApnJU*j^>V_Rr>>+_D-H;*dg~=bFv_MVbPLdSgl?n6kt%p}pfyk3K}efO z3Y!}_<2>3}sXH2;ufLM?SBm~h)n9G(SDOCH)?XEBkn`1NlKM6TVBTTN&o1t zaeEJ4V*lj3%AvUqg?nX z{kjxCOEukZNWihg;rUso^Vf0wk#qq^Q}TA?>9k@?y5KU(64ENsN0s35N9XmiNdEa$ zK~;$k%-iAb)IP@$;rSUXGPygr{0z2C=OvHk63HVeuOqeKXeN&5+~hG_FYm~5s?iAw zxH0)=;kuDQr7-zMF0KpQ#05H?IC+Mbyo5P9uo=>&HzmIyr8fnoHwC3%QR5H7g(>H&N}bf4m?ln~<)xf2A7t(vFu2&LP$8V$lVYQrCN`70Na@C==x>5*cED%sLR0ZZ-; z3CnE>J*14kvL#JOIvkdB1oEZZdv-RLu5BUbE6&UL59-%wZ@ab^GiYoF&Jmc zowh00h zz$YP4w+ddL>vb7rs;$fTYko&Xx?Ul0*9mb>nklJtQQ+~w!&k3`fgBT|+|ts@V&OW? zP0KDJ{FP_5qSHgF@;bKAFX}H!k)G-f79RSl^|V* z3am`(b%CT#0VkYVO}xEsh6t05QQ}d~UWjatN$*95CIHgnry-eWtbhB6Bgvk_8SCT5 z@ran}e|{;K|BuJ#jx z1yroq6q9M=2Rpd`D&xDqauUt79NZ>bMf1KIF+_)=N$OB+;6T+miez4$v!8=h$N2%S zTi9_2PNJr6+Hs+^!@q|S|5+SQ%2$f=yngl?fYtlW{JWWv1Lv?OfA&*h%8F+f(FoWt z6gDmW&sieJP5cOYHjkj`td%dURP1=^7i#}j{t3i*76-uLHGY3$*NxBib%}5M0-ee0 z7Bf(z@p&!NpAGYmReMe*`C6gBXr-`?N@r1%AM5Mk`W(*jk5k;|@;cbQ2=Dq=!F05~ z6L4rfC#sDu3Uw92U-@s*bE4?+25^?&pE{|&`k5#^xt-^oM<(@GteiWLKPb%s#TO6p zo}cBbZz8kRV0w`;%a^}$ZhIX)LH>Cv zIwqUw&>?<>O7{ybC9m+GCLK)^E$_!*EiwL>-{8>*Q7hcWA_by0T(#zNgvxbn)?#CaH0QOmiB+ug{(=( z;L0eJrCh-&2*?PhXd*d$uVP=k7#GS3Tkb~{@g*tpB zZ}`9V_j7^&AWr8{lNQoZL!vlc>5ruP9(J74hE!cY)7AB+R-F7moRfn zFiwsO)aQuV4O9-h#DV&RnXTE<|I+qS-zcQFu5sUZLY?C?tY`Np{5NF`VNthJ;(F^;IkCIvZs3f8WRJ!mC>KG{B3a-Ol6ENf8~0yV4Kl#9?9Gm$Rz!L zGkIG7-;Dktr15p7(Jv71(i36WHIag0N)0O-L+fB&x!tC6L-^3x|Jvugq!k5v<+8_E zY8=ijlSw@6@VWHKeWoN>`0+_bp2_xdMW?rm1{8g+eFf#JS+l)Z`9qwQ{K!3D{>l!W zbb|!>=S{wbqTmM;1?OE#9{IsnhmureNZE|*J%69ir~1h&?w&hT$!YLeQ1Xg3bF)++j<|=Eh`c!PAoLIQt_zi!OiV6U50~D#+I@ zcv=!BoZ&;b340{zCR@EQo0_C&(rsEmP)UxNRm!MB3OdIqssy#~J;{5CfzMp-VPiVd zZBHV3H|JU5U`e^+(ymHm(D!o$I{c=cLH8Nx@^H<)IuB#E`>uL-Ms*z27C)Xsi zr+EI*By0*)6^BU`-(MIW;`5SfPIQNO>y(fh%JUYI4LU+cB$*M1Ux4h7Fz(_pCm+A# z>t#=yeU0ajOv31;OJ9(L5lV?&-kG|M>J~R7anDa)v3Fs=(DBWpq=)J3>6gxL=tNar zBZxP_`3;@XsOu`uHitE*2x{JQ9OGRlk}7rh^Iu7; zIbLd7dTLrXz3`>2_Co3{g-MG@UOx_D`|=kjjb-upS@o{Z34`8tZi`F(T~fV14WyWk zTS}w-Y!XEsO{okv$$CkQ!+&K)s7VTwveFK}N&ZQCex^wdaklY!s7X4Jrl7@swn@VN zx-F@i4gGKXD=aaV^wIxJVrXkMKB>*gWMkYK%j$sP4lyBV9T)h815I>@am1Uz`?Seb z*L=D!uQ}VCcN*^_qJnm#`%noNgqJ2A-Gz)j>;<9IA)4w4mnF?$vA@u;#$MF6 zSE5d##-g6YtH+|LKQk6hOX@?1H;3!`_sGNquE+j(A7_VMkHO{`(v-mUv;tCBldh-H zTwVUPNq4ca|6SJ?V=PKpv2`IWHo|>jX3`I=;BXrO6-(F%W@O?eUW6Ls7e=O(6}4=X zDaONAo-Rf!4O(x|T|$$|%bGICPzBqVg$8LIV4)O@5CH9UJinKXh%%q9nq!M(^wxac@s zUH(%^4|1Vm$?KX2VxSPlJ>FSZi}4Ch-w9qoLc&ME&m?`tGJoMnLC;gxO*GR)5z>^> zO=}|!#sbE9HON{Au=)PhB>v*-SEeCKh@aPbTTMghhS+M>LFXyQ2Wj0fuNv1zm8*3+ z?B-XKo+8_tbaU7pA1AdSlYYq^6q5SFaBJ^e^X#^hjh*N3NIIX}%`f`pR@3JsdT%Yh z``q~MPSNbIY)czo_TA^kciI>KQohT+%JVhF1qR!*mugG`DgPf_S2bcBx-#z{i_6~zb2-C<(R(Pn69a&P2Zh#7s>eVnf{_NeNO_@GuU)J zd>jh036r1PpdHEwbOLnVtW3{8l!ODR^Jew2lhLV^`;!XN=v2zlr1qDlxoX*E*U+%h zXtadm*H4~Fx=b~7Hw+#H2p337e(>iCnC{tEb?!g?%EqR~DTP>13$pUp4 zpFG#&ElJ9XN9Zn~sSlsEY!m)jar{(#me)yFES~?+f5_jP+L7#R6)(TdiWkUnfeKS! zHi@gHZtk{HTw(=19mMdKwvF+VOm8J~{&LdCRSF7VF z>Gh?_tPhSal z8iaXnO3Xveq%Y=qI1!JvxMH5aB;v7j@u|%Z33yVeW&5Y6_U{%9`GY79O_jM^U-B1M zc||E7BLz1aDI|m9rUYA4s!GJO`j$1!vmh~#i6z$Ts%u8pHqtqT9@S@=-p9T=Nj&DS ze3RR^%=2d@-yxV3m={-o#UWDI?L zT>Oy9)dSyelX14C(+?-JB);+|&7{Me)RexQIEKLNDbuc{^JQbPF7O8@y~dlPVzvdg(^szFVSB-DKTAfGBYxHr8PjaB>4C9@_jYWf-bGcNJVLJj+X zR4bU+hMA~YsE9c9F6<^1DWcuym=~ziVpPSQ|y84F>WWi{FP_- z(F0kKKT>5JpThIEUz}Awou*TrC`1+w0`&AOPqZhbFwGawWkD)R2Z=g$uD#l1M#7t1 z!-%n`#Th$+OVQ=8e3y*XedM$hL_N|N+V%3{w3PT>(!)q(t9zz^+cW|PnMv@;w+T>A z@WzR}F6Q+!!q}`U_=7HgW%ZdbuU`sQN7}r8Mxi#ZpK>UdLO$H6`{>z51Do65lr|Q| znalTNjk&s$vboeP)Cr^xfMF>$tWU0H^6jsD%NRY(w56F5Il6e*<{LCp`Qc5-=|imN z&EVtYfJ0Yqcv!A1k7Ndwd3RwkWb$9{k(QuqV>sMUb{0W^T=*Q&?DKjnf4+n zK8uG`+J+{#=|nAelp=`vXp)o)OWUys`XdrjCKxL_rWaYpET?wNYnP_1JGPmzj{Z2H zmp`bZ&C$0b+tcA}C9ET{8U@GqwaT3k$kkFi@sBW^NGyi`q3Qec@@QbN#l#6Y&k{nl9Y{$IB$i3ZL4iz8W=jJ~ZVu<>wd>oF)ep8B zMAcx3#Z39R+I?K9p_Ww28K!y#Mf`9|c+sF3on+cVJ@0%K5yUm(2r-l2)RRvM4o8we z#|OrIV!J>TQTH0uaR8kiUD(TGVp<#S=>~TzzC9mY>6)t2h#j8jyGQCg+DPw`d%@}KM0rajRpy|Y(#MaBSwdf zC=MGj+Eq{UnY!l6x9=6;0iA12Z3_4WQGD@BPWU1&O$47;3Hf{Z_PrvQ49f_DMG#0( zAVO2a1gJEE#=)Y%nd972P>)i{-mFEdP!8G@=$1sfx6xM&gJCVT47l)p7%VX5b}2*J zr>{bJe20A$YN9YpD3ro1A-AF~ouvuMnz+XOBEjAKOVvw#sK?%inBNbL?7 zL4F-4Q7a5S?~&Y1reFc8@nHbL4#-L{dqEKYAv|9#y%};0yb93&H64MVA{YxtlPf{O z%i2Ro!O{N@`8Q@uLciv)bXh1>SN4R$e62S z4KxvCsey_>&M{C4$Quk)0CJguNk4+2$j8pYZ-!RPA|Qn1qZ#vu%X z1|CPJ0P0$4T3{TSPW`+mWl}-3(+2?;8l|0a^xN=*Yp$A=9aj|lmVF=0FmeKCMw=syAoh8|-K9UnF-w7)u4xWVdsrKmy>WTkFZ z&{tNPW+*|e%1nEfApY?R3mQcZO779d?odCRDKZ1uqr$RBg=LQl%Qk1Mu>Wq6{U`aR zK{>o}g*FVR#58vm5@@kxYV*)={&%U}KKZ7S;Y}vYJW*UgOyN!D|2IL6euc125cg@~ zjdbIcIsPgnf)Sw*k& z6ODmyxBt+Y*`iwZ!&I@=ZMwofA<& z5W?J=4-p8~e26f&=0k)zCP9(~(w+}>ErQRmRYhT|ieMF1mb4iJiQYkh14FU0BrcGM zVB&)9SXmMmNJK1gp*mPu5*J8Rhq!`zXv(b(@73JuFcvB&P5Gs15(nKa+RzOjO+Ffj9hXU;d36w%3s1%{l*%(=hs>}%> z7zwA+x(@aRo(rw(pl(+XpHK%6(kLAk6l#L7pivO?mZ{1pkUIt9@e*{PZ&X-cXwWMY z3Db=5&>ker5}G&{O6doTlp?sa#<;fVk3!Z45Tc|ZfP!Gq6j=5OOTt+aimjf1rtpsp zM8g(zQR-nJ5y2E)AYm?X!D94Uf!4NIR^Rh+YeSu(*4;!cyB)_4IFW#Y- ztU~HD!&m}xw}DDQejQg9sm^jEm%19r?glCanIVwYi`1otu>|B*1}X)4bzE7b?l+7j zARjeQDagm-$|5zVwe|wptcl`IbPM5vhL#j3B>@V??UC@nA8?;{?(Yks1&%g3OO& zL~2672y%KHBU0A}j3CjTT6NHvnu1Jj zqo;6DH2Zf!QIO~-Tog1q3KvBn^fj$93M9G-7X^)e!bK4p6K=Z4+5m}v9!BAMIB)Do&2th$i(^nyZ2q87oS0RB= zQEGBJtwKw{KT3kD289qn#I$G?5{M>JvuG6(2rJxMfkV-HN`k8fF?*D0qfsECtOaSl z-9Ph`koFd&U1dO1mNXK@0!W0B5#kyEs}b#Fn#0R(cdfeJu2 z2*g8O$tt8;9jO)3f(T?U1C0hb)<7j7A2-lwkWU$?0OUFYjRyIWfl5GbHc)7b5w3PI zJb>!!u^XwcOwEfyq87C01c_QuX9sz^F=8CZ)dFb^NTDJm4kRi<;y?y<3N6u5r>Bjn zrYYYJps=YWVRfNZ$gLtEkX;1N1hR`DyRWHp5y&ioc*F*s8?b@Qv)Div1#BSUT$Tpw zp9|PP!fDLr2L2(qM2aPQH~6c3Ng!r@uMlKwo3ANhU`q5*5EM2OLCxt=0(u|DDx{%^ z)_@=(uDSZd!!Dr{bL7MC6guz>VvQh>2(gNhZoRrBu#u_eW3%Y&LSbx2oKdQ%o4hV0G6&Ig+~^8kNhg6 z5vmDxmr#sa(rFxO@L$HJ(P#q1X@WDmu%M!_phU5+dtUJA3gY7oR}y2e=}R#)(Xq!) z$%EYqPmR2YR-P)~@JWVDuS8_CAsZP!D5h|4O9dYGO0^~w8a;P zhOpiuV~mki0#ALLKG=5Ui~XAlP+#03C(}eT6%)pfGGfAuO0>WEX;jQAu9; zqOetkVXF#Z)xCi*kZ=_X3!*|(tA+hjQ>+B!eglmH*(eY} z#W+T!UJn>SZjWO`>Z5=WBwV9yMCw4m*i-{1()JsvQEM5Wn| z!c|E9Iba0&Vw^;zHU^9!QE4p^sec5FAW><$gFYSfUc*)hGVn?0HUPrnedCjod=XG; z1cicWr*I?wX~-QW+$c?F9#aIG83?*jNGrnKRzklx)|3hv9cBq_0Kj7PE?3dzPIJUac)v@)uClBrh#$e{M4!nGfT+9SBARm18+;o+*|2RxwfTE>{$=;(DQpG-WVRgZU+E|x0ayk-+J%|N3;o@$^Hklh91 z4qVct_;#jXG04saDgp_aG|hvw#V1&^iHrw~tP+rq3Pfjhi&i1AG2nB()myTDWmt+q zJ|mDGeUS=eg_as4rND(oRtd-=1C@fj*gzM7tT9k2$cGJ72=WPmlD%vFRY<@*I&c9Q zSQ@&~ey@ml%194I_(;h@4X9s$L=8w6$g2ZE*9p1UK!qUTS&|htve0cBxB#rQqHtNZ zi;mNd);Sc$Ao~cU0s)Bu0bf(1b{MmZL4InWLXZayRGca@I~v)Azbv~XEc+tJ{?f=E z1+u-7eG$lB1{wwOEP<%U`>T)$syxaytE=#zV?>24&z7tahNT4LL<1FrTq027LE#d~ zy~-2}wdZol`h#I90r^%tZGN&xuZnhSf^wTpxnhv_NjW-a0r`MHx?>{+1;qHv;tL`E zej|P&NC;%{g{zPX#7}g^ZxE|LlJ69c-UPl1sX9}q0+11-vO|Zk?_W?(2e5Aa4*T$qTik_nK7p6I1EYdxgBmNE(gm z1o}g(qYH(**pvz#41uM{u#|!fN`+zpr2>}2&|T!ZXQ$|#)n4b&zy)%JK#4n1xL|Rj zg5f!{T*NLn8biHrwPf`=#ux>%l-_T^7d>VJa-4w*Kn|m~3J4d-QUeu$T&muNu4I9{ z#Xtoh&+24kog?HR0~LVuPBdH~n;ED8Zsib3`}R$HJ4 z6Qq_1N=q7$&x?4?h*Y4oSj!1Mw@7n96UhR((%3N(BsA0T1rnMqBRZN!8xOMDKodb8 zZyIep$T0?*h<1F)K;uE4D{mmB$KpZ4;ba%cmB!H%LH^D_<3YkhBn#xvIIBcFg1YlL zthB*Zrh=nEqN21A0r_>n1@c%^!BHT47-)3Z4WriGmK|Of$XN<@6Y{UbUz{C zA%fr;)SXNXLPIF2Gdd{^BB(yGtocRA!`DP6CKGQaZAlr+Jo6#-6>%1;#j7jnER7sY{!}BG1TReQbB=3ud z5y|{Ee7Jd4(X01Y$M}gZBn(AfL3@J{0=% zfDPn#78{1k5oQD}1UXS4RtkDjzy@-*#RmGpfDI$SWR*)m~n1F4TkU{7d zBJ?p5NE>VK2cPr~DRm*TeD7ie)@vsIE_UOJxR#3Df&CYQTq{|$%B)@ZnIsxaJue1{ z`V!yPg{Warg^L3#HHAoj-WWDa`=X8&BN z9J&t8VHb;yh*E-FH(w#XM871K--}C7d4jGML5Sl7g3ve*nZ_xCkFPX7E`rR!p`oD_ zf)*M<1t1}tZ@js}8FQs4xn(&S>n4lxoEBDSkWf9$R2Ld-AL0b8NL(bEl2tKjo zTPTYT@=;e=D4b&!3`OBJSrHasnAoXcAXQTk)XfMg0NG2RMBQ))(?N*4HSV(A!{wTH|d1u;XXE&A;&a$yz4KzL;WMg3%vNKD~T4w(!I}cghlV8-1z>qkSmIY4Km!3KAfYzCfNKG`l1=!Sa~VVyt)YLp zR1pUJpj2p@+bLBDbeZ#z`;GchARjZ)J8RJzp#$NeMKA&XoR?i8L_ z%)bfB7cqr91+?MU{D>*sDUgX>8!?4D#b3pycTANFLB1=H+U06vf=`sQn8FKoFhL?M z*g>M)&-Vs!rI>9AZMfS?0%s`+&c@twGy;Z8g_{2ZsW7zB&Jd;gicW$+o+nVEmhSDC zNUjeDKbRm;uY+gOS{DdZAow{iXaY@bm!a?UlXRMV4DxRV8V&L-0~LV$+(4s2erccr zkcSL38e~#uXe+ zi~|X^`hXrOXr^`tx!7nN2NK5UvPcD{h4x7uM1NQLZtl%if6RdNXk%Xy)CST*ar-kN z@TL(o9_?KhKxkawRB1d~GA)46Y*_&mc29yf8XtBW{U6%Vr(e}VS z2#PNP2tm;pKnRMHOkKwzD0&7^Q|d7G&}|KnP)iSWfW+8CTp(cyae>6xLtG$X9C3l{ zWQ_W`VJI-YNl(FE{u3F{Fqj|u0u76q4>U|>KG4Qy;xn{~mKlpsfnyCeXOZjaM1QV> za;Uiaa~&igfZiGwo`f*0JYrl{0`eIHm4bX(ARg#SRw30oO*cKg<^yD3fixphR|kwB z{}{)JRL7HzM37ws(h_xc@QG@`P#Ukp))j~CD2B!@Vh0rj`KCb4>3nJi&Ado|5U_&W zAy5nQOEL2TIL1^YGzWxDE`-TRMnfS;IF_P3T#G`~;(258waR3qHv|GfqLyrOA)5@~ zi+~s8w+1Tkoa;+OgkdR45fUc1p@WoiuTxiFAIuuxd=eA^xnCf+2yg^Jf*mc~iRh() z9b^y`rSR~kAhyHqEcKl0cHs^L6@&$ub{SymRRD6JK>T<4poa!*AkVkhK$iq;ATPGq zK$it3#M19omRPJ zVH#vm_d5)Y=ZMsx)M%7?P_k&I2l-oL*X%{09}n0-K4r0iej#83`I5y3dQ-p#68=i` zN6@Zw+R`%qc3=NmVW0FFUh^(++X@j(9CSy+=5QUkT{zox(K+Nuko^o)1oAwAbQ>cz z*)WFMI9alemv3%k&^-ies*Pb9WRPixq45K$P*7?#N)0h~js`i@*fo0*==^{U%7TGc+C~ZKaxS%5Nb(vvCRCF9g+@dI;<7iw4aoo^h91s^oR7TPK z&Z+vG?xK=7^E}V%xBT(DN~-Sre(tGLr3R7$?8;Qh zehs7>RMu+G(>qYabtdw+wXK}CY~^ffZL8J9^cD*L6lnroly*Dmg}ps{7^?%+D|=f_ z1)o?}=#(YmuFi?m_d-hb>Vql{i&QlO*mm%??(k?gl&G)1zP!wI@&`t%A}nHTnK zie$wXrIQu$hT2lH5yx8H^l9zb<>J^}6v$t(mb}E1N^D#qD}OYEl9zZYp{yJ?gpwDx zl~7j1ar&fCvQme(zVO|;5|gD8$HURhm2A%h=``7rl^Bx~+rt45h6A1}S@BQlWJNrr zdoq$0XWRIUrM0iq#aA&%*0-&Y6){PttdbS$O4r_KISaMqBXbGz3&S;^CE1U|XxjJ4 zo)ND1v~*-8KJ@)t$x7q1eaUZ#>?zs%faq3&XOpZv9MMTux(NSVU`4c4UTVsP{O5{Z zv`H#`E2=^fTEF6Mto%>7syUK<(bT<)mF9>}vQlYfPgbPXUgx4#5m3U`wYccNs72DI zYB&&Sn<=f^X3Ax)+Ga{?&)RC6DXsl#9o@fU+(<;Z1zPu++}3{O+P$=`wtE%UKM0S` zY{@Wx2N1g<`7^?@R$WPAeM2~eIg&jsT;5E{N+?}t>55IVa&bf_ag7w%`g8^b-4-tJ za>+__(gn9<4?v}EC(Fvg2wc8NR(=gHlu}m2MY3qSrgU}}_9IY9;ebt*>}Vj}^Xwf{ zuyt%?N6F6o#U1mo_4de)k}d78OKH2r);s3Nj<1AmO_S_fh7&oPWbF!+K;e;Wp;2hg zCRr0#NNCr5ZTl5?GwesMl$g~|?@wnplAQ|VIx9SzWaa4#!aB)zxlqt7$;O3Iu4Jc$ z(JaYUgi)?!*M-p($({(KT*+RHSdeGSHjTteZa8MSt)r9MUUVKnD0rrpSVW=X%p~6_ z9G`5-jtQgLk`07Wwq)0Y(QL`y97fraT@()MY{@PIVlO0rdqgJL4PlfmS#LOEvn4C7 zK(nr78zL&nt`DPZ$x5i{5Gh#+IN6e{1iY=|o!t*vBLm{qa7Uae!Jikd&rHddhf%g< zrC_>9lhPG9^L@`$y^6Ig!%Df=k-uPm*se*+$|F60Mm54*Nv`8}gF z$;-ZNd}8toL6S(&u>TW`N|gwS&0h#*4fcu{n%>&b^wx%2eXQe0a}5bM+f>Oe38Pt( zT@KXt(Ym#*9I-VfY-^fiO`sj+*|#8Tvk{MA<1wVvh?4ylsO=VW5_R8-LP|SIwu5X^ zU;ePWVCx-o+S;*oyT-w6k4TA`jO=w1q?I^;B&5wq<2=Y%iTzq` z6y`+fLY+9I^6qOt))SB>AsvErI8u4NwN;!WFH3$Ax@M$rA>D^mUh%sh>;FJ{5b5Vg zZTm;S#IfHW^kE99k&^47!;zz-pnH#9mO zv_1-H98!5*qg|f7@UUHb)(!{Y*9oM4MgW+wziOJqy_KU`T@+Phk zmYpuJmxr_#X2mC!gH+0C#QH5rZ%4WXsqM#$;Cqn%1*!P;1J-{=>S-t5^46t? zvHb_6^2#Nx+BnUgYK1f^rB0`c7IoGQC@jr+ZSCW^v99P z3s7vm=(a(Z4g1ANZT`%X z{owNS@9Y?@Xhdp1(A(Z$p2OV_`u<4ek=C|exLwYA?6(c+5v2D1_OpTW@X$|rFmNT- zm1peQR%M@&v{p8`Go5Alxx&`S2NVg&V6VfM;?m*gvR32;DjP zQv30it^Dn-$v~t-kq$>{Kbyc}V3UN_qIPt^96sGs=^4+beGr%FRY9zkHX+U3`llE<5=7QZ~}*XK9O#NVg%~ zkJK(N2s?|A%EK$}!@Ag$M_~LXd-mfG#6Nk|LLB^*=PdZKE>8iFCnTkT+y1tvPiaRl zaZHhRM4Dm6ReruN?I({D*n;-kgER?oNkMA+XP0CDd|vFl3VW|1{U_3YAw7olJEZb^ z^bRPuH`4QwieHcZhyEqMins0g+o_MlN&2DuK)nb2lKw4EVX6cVBCSO#zwlm#b$Q^D z9l!SU>#?7$m!E^%*b+1T`+#*kftC#F6(FOJ)4joL~7fs$2eJyRDS&`KTj2V@*CR!WKVu{>1)S7 zyZrYNzkeY87g9fdcx3D4=SweP`#z-aBRzuj7*gLk+Cm)C?nvdwHGQ!zzXP(%`%nAZ z`bOB>j{MKNYU++?dC^JPv#9*|GO;>aEE!q{or|fYjF8pE1ej3+wx7<*)IX zf_%1Ci*@GxQxU)JpjbEf4GV{@;N2?yt98h*Um8v-NV@U2c&tf_^hn`#!mS zliaqKPv?bRC!X$Jc|1SHoI-y+d?$<72i8v@AHFw0t!7&99oP_0_?`((<5IaUMJ9 zLc^F$>3n{5bx{@M1zeWKj?)RZyy$22&5p+{JzC=H<(|3HH}jwCF1f`$+qWk(^V-ds zqoTa-Ln{tMdE8FE;8R5d|v7YDoFcEWqlpvTPCIDjcPsYZ+ae{I?gkUR=k_34@8R04T*3a{ z>hTWs_pK*;N0xK^n?2JhzfHyP z4bN8E^QYz98ml~9?2pSQxTpFKz?0$JYJXeqD|QzhJ$8&lvyP5%U-YcJ=_w9vIySVCX|yIZi^SF(ysfglIZ-C919geF8Wd~Ih74u%EBM0 z!QIXrMc#QNqcq+)a-{pG<>Z>j8}Ja@w>;=}lJ=6EHd&b_(EcbM3IT|e9=&kfOdQY^sZ@gOF!K=Q+Xt&sRl*gDix{=A=Xm6i0 z)aqWWCTP80CDtL@?dnbN_y#V{5zBi^$Pg7;@5eDH~G4c;MwAJ(BdJWk)lqUl6#>*+?Tx@ z$=(yoIJ~bp)7@O(Ue(I(U^e!pXC=)}uDf=*uiIB{r=xB)({EJ~2bZx^_j-5C7*R7L zWA1=|lWxy4%sJb* z9bUGxXIY~=nCGOm%8?_=kw#Vc5mlc?<@guMk#)#(J$3$&D)x3S_x10VaeS{=`+leP zyyChjBAVYOjXI7rl?&nUf%I)TTRtp0B1znAbI?hBq#19QiX%1C{1)acCd znZxrKxs}CkcVEzx#w*cB)nA{zTQcqR6m}}BzvS3&9`yD;%~yQoa9{E*JKavx-G$TL z9^Cmn)cNX0Q4eqz6-Pz6yO(mrpLBf_GHGqsQl6G}xFc2G$D5vUr&CXU8G9aci@g_m ze#^U`d6cGTzjs=?pxrchz(v5Cs z-twWl3-I2_aXz%|~ zHTyuhw^`-)EAKX_T81k@wPbJJp-2_%Xv3is%AtDY&*EB14es$qTN$@#p4$Ef}BQ9u%4pw?p*2};`x%ce(vhcbk24_ z#V^YJ?Nai^*VnDunx5)*KHx6!ZS_sLj7G52{~d^fwBwq`y(oHPnWoB|KJ-tIpcI zq?pdTxQH!L+#latqB`CED&Buv;^QIyfLeJ&uRI*Z)8rdVc*Da{+*LnZLI(|xdr#B^ zZ_X+1>Fnr@OFWtGNIKdOe@*TE^EEs#9*&wY>+4QG8hTxQo2$p6gU6^|)+&#NS`*uY8W_T|-jW!+*Z@kgm=$_)eg!lcs-s~6g2UN4lpa zW;~VQRyF!Q@s0AGK`x(nitkh3Av*0i(4ESP_B}Ld6dh`c-P4L69)4@S+gBZI+`NtM zK4&G(j;izV8I?MFa_LNogAn~X|9yi047hKGdwS!olic3E9qx`5d))J;XRf2wKGbg> zc%@FMr$^V-xO2RdJ#?z!SEMo8z0l{M=*!F)RWskMT^zjz&@JGM?_8T=4+}NWJX8Il&<@#yvUd-LWdU+wDAoCV}F+FS~O5jEtHY z(?-{hpZ8}Hc-+6xPx(3Rs%sfkotI7}6%1~q97T`%!!wJx&+qKWW9ivNJV^F*#H{fI z9a)L)Sj4mXGaZ!$Uw57`yuRP=rY$cm3es`*l?Al<)s8#%jJnddNgqmC>W%(n*2BKK zD}B98=KJ+5-xAL^^q;o_T~gDf?c}1XbLg7V$<3`OF3t@)xfz$`Ru$zJ=2ix)ocZ}> zWfcWZZb3XK}E|nOn&vRTptlQ>rWT3yPeIvO>17AV0UPv^uD+r>U@l z5~sAhH0UfSDhO6oDaXiK?wtJUBB!jPe6C;psVT26om*a1=qI<>2fmos-jo+DXi=`-l?rE5<0nn^j~zbTe^KI)#3cWqq~xJVLz9O42h0!FloySf zTU1_DRa!u+`Beoaqv-C%fT2VD1Lo5Ia|`GA2V6GTKY;EDj4B`t1B$aV#?s&FV1B{8 z0hLu1K@|zwUPaYc0Z}bgR9;9m()B1VB_Ap{5P`y~Dbzr^MqHWP;|Y19;Knf$0O;k_zr$_s){ z0r!;rLe)XoZa#Ic$|~wBWi>^-b1FNSO?{Q?MM0fcL^k;bi*s_%2&zt+OI4@4GNt9Y z^NZ%suUMc=OfKTwIO@Dpbaz}(R8?G7u`rkJ*wDYCd>zA+>~U!et4f1KYMfBj3QAO6 zYAOr!gGC6I8Vj7yt>$q+-qw_r4I(jBz4~f3ejGJQ{3qGg)zkw`RjWFGL6PqF6r5ni zyrS~zaMe{C(;h|hD}#%fQoJx~DKPWU>Vurz`4xq#w#q50S+!GKRWYCUpnG2Qw<^DU zt`bblpI0=wqGJ9y8g$%Pe9Ot9j-o1(tL{MM1}i8&MOC>xI}9wTm|rxoxTt*Y!lKfW z{EC4KE2`$HfjzLKw5q7Ew3<45b&%R6H84-EjpQ}sz(D2VMuc=ff$7N)tbKSVtI@M(rbZ3w%QdPv=GTamF zX)Qd-Ik}Y;)YEAc&|lrPcvatz%Pr0?Eu%hGqe7U=Q=eh8KsQ0SS=9_ej$oKljz-GR zA?zEs0?#`9&rt)8r!Ss6WlG~3$v{~k-69u#j2zQ*^nzgioU$SrlVrGHekIwPo2z<{ z>c;SjW<;J*cn;UKAaNl@jKe;7kRJNlC?-DL=5thQlQx6KZ5BDHqDlj`pqvI554wsP zHQX0P=0n}vNu#=pqpi}=W8ZSsRIH9Wy0NJZ)qJLAcoxwd!VRk`pr)(b{7McPjRGe; z?^0jPRnuE;@%*4e<4kvu%KXA)Y7k1O?{hL(Cqr~{5!<0Q80O?s8&(&Qia`DXZd59o zCmlZcAjs(M1O#b;_~U; zb+qn`iHTe59TOA3#!ZXyUmKMg)3>g}_?RT`-JN6lrpEYFW8z6MCdQZE#o=#NOov_h z1`OLO15=+~q{YP5c`xrAbog^gH6;AEqeTg=twc0SQOIDkFe3#5Nd7w*Sn|yp1a&HU$ z+sf@g%d7m^LRjq02n_o6ehZ8ecTf7j{-|rBWONgoi;h7IDPbNe_>mNM9Tu zQ`^aVg!)SB&N#kHJlU#;tw*@L@iF^7-uqNrXVI#BmAD^&1vAp;BjrTK=!BSNk9(Wj zW_C5LxtV<^ z;rT0lXN>PM&UnjWd^;B@)R`E~jhsyAlCIaXILYF=a36dcc5b7*(Wl6BFU=(3KBcts zmGJ*Y+XG*dRzFXO^i{UIC~P;-#aU0qra=399+Ovu=g>&|MEXHyOr`q-&!K5MX|CKw zv*@cdjsBJ9(bwq6@j7?^s$bZe(PdH0u(9pzIzFbduH&`QYdWlry1~7XeBt=K58ozG z-pPoGTjNcOiNBVQUv*KXJ85w3qHfF`NmmHgiThq#eK-=M@iBRPP;6tUjO*eq;=Vnu)p3T7xOyzV zigF&HbzXSB+YhFWl~nc(e2iP`Qv0moWB9cl#>OPoMSC;UK|Fj+qp6toJ=@1t9A_^7 z`DMQ|Vp6j|4jm4Eo z(Awt8?;%=obgWh!6)-r5-{V9(@{<-h-(rdD;CtnU{#59v!&PouUicd#Y)7g)`v+VWKmxBWG(TZ*cXI;$%o`uDs3N+TuF+UTiCl?>n~QJuTum zLlkKp&*9*93ty^uCuf^wDIMHz?T`s>$(_r=v#kwRsCA!%;S}CF3*4?j0XX-6b179T zzE&+z0dDt*8gQ9U#MTmUJJP=ex4%hw9XP(>C1#wp;C;d*l5xXV2NA~S4&99LrLGN# z-A(`Oy7FFsYKQM=hd)o8?ejGVFVZ7lp*-`=;1{Z`j`IekZI!zZdig1xoQr(~o`Q48 zF|gyI@z$1|e?i{}y_!df9Rrv1$r9N42|N$uS6y2W`;7K)%l^0R@UB!(RbNas>YShK zoC7XDQMn1__6Lu{RB#^nFz^&`b)HSz_`Izxe=di<7E^~h$0q%(cJzhNH)Bds=hdVy z2Y2ujg1+#l23&puA?>mPd^7awJel?hi5;F8X%RczKR7-~;M^~Hxf8q@T+VCn2T#FU zy~k;}^Jn61#bFop@`iVHo=f|@-H!eM^zxqUM_~VJaCwunI*+AoKZ45}6q;zA7q^}M z(77Gnjkp>w7})BZlI)xXp43a3b<}wuW&5;a=Mw1UNvonyZ%01^dU>9vI#(q7dF|-u zLN8zGROgGNuLhTgNKMf0I(4GQ#H7y4Xxk0#*xvxXA00%_$^HPI0xt9D4)8p1b#6xX zcZ17UCgog;e+tWS_7Bhw$~^EMxcshrF8u!#Tz(EM=RRM9%a4|Y{{$|-Nfyp`dFUSS z*eO@!j143XxtQ(-wfd+dad2`{vPgyvb`rD3CaXV#)ZdHL-=XTS-Z+HwgD>X4LzHGn zk|M*^-(iX?%@Ad0h}vt2vNL2jdxXy;a>r*~HYPPI_p)*0rljZO=A@3vO3!t0Clfab zNgclZ&G!cBrWtPB@oi1oD!0x~x;r1ft$NZ8Z~jE=4%JL3Zn>9QI>(#vF#+Y|69dYgbf>tjo48~!a(_5{8(V)? zr;5YPV=gCre^1?D#BFrBtx1CL#{uDcpW!>4kz4v6tV8gVC{gF5ixE0*Cv&GW$H5)HKTRcl+XFKfK_T$(vEu0Ldf8zgz1~=m{ z*x&;VeE?kS=g~G^LWZ8t&BgvDTzOhVAJnVP%NAb^{*A>YK9g`_&Bd7hUuAI9|0;u< z{>wEh+cEvD#fi1}xdHy%XL0eT7tWVNFMPVix4}+>#pNF0%?9Ud1c}=n2IpVl2)`Gc z{pV{P;cpsx4x!k8*Wjl8{RWRW?0nXa{ZnwEDfJcmJq&KzKg-~Jts#E)2Dkmc%+Q?B9p$ zMB(%;OSL5Ubt+sQE!4A@=IoDYe;l~z`@_yWLqCc3k@|jW=~JNZa&E+awxPcsoMmc0 zhyDqRmw9gWxT()$Cs3|AzSbDrjOQM3t|r%aDeC)OJNl{% z*}CqZ36x5GSAg5~-DPmT_b>Xx?eL!rKHbot!UqXj*uKg88{Di{k-^hwA1U`baH+4{ z4^GDYD7Md47yS%_o98Db?eIGdZrXX$;G+%ue=)e}Ki_}lh5g~FLi~BW9lpCAeyknd z0qtztKcgMqyB&T}JNycRoBg(?9i9-&wQW6Ka@yfV?eK-|@Kx>bTif9Y#(DLnq=dsC)=;cw4DT+q;0oYHoxO~19u=xAXXIZ=%oX_QW zk#bXT-zrDrFqiub(=8qk{Y;C?cd+s-F7^v8F5i18vA8^9u*~9(9W!~2i#K=FpwZ$7z;Chmad7FU(q5m#{sv1g z_BUI6PbUrTv-kn_294c{JX3ix26d!P6FB1m0xvrJXf+(c(?u zdn}%PiUzM*dsU+`zaQ0f}J#rKL#GKxIB_C%i>yv!O4s^nbzl-)wPt^xJ(Fmq)2>vA8^%ZL7sg zV1Jv%&jx?Y;#BFixxkD`;U7pE{{5V)#6FGpV(~i1n{>l z9uL0H;$6YtxA-vd{T5HbeZ2z~&jCMZ@e=UQExr`|h{fg6XvZurk19KEad{Nl35)N+ zeMvQ8Qx}u*asXWJM+zSXe|!uKeV$*fI$bTE1}^8nVrM#d4@>_l?92U5(FdSE+tP0a z_gnlHa5;Y$JFCI_TKc8na^F<+d*Dx!rQg!aQHwm%UG(x!X}LZSz6bh|mYp*26pL>I zPqTR7TwQL!;xoasEM5YhZSk()ITp_bpKf#9x1DKmc`a_9#TP+eXz{J*YX9XvF>mI7 zDbSZ$`Z(}Pi_2STgBDje=g8h7i@$%aE_bQLlVHEr;wiX)RB!Pi;Hxb@9ej<&XM#6c zTplHNi^U6}UvKde@C_C(1K(`%O7QzE9t7WF@kQWUExr_do5gFvAG3H4_;!o027lV( zYrvZ<-U$Ap#l`*}i_2?*UbT3C*lD)7GeGx;w=I4u_&$rD4gS8xpX;yf?6-Jl=yBPm zz7c+kma4zFoKT!U0?qO0jksMD=5CbcIGqafbZ{IF9o`)-s2%$0-IQKzGDHQS24gIqhwJVPi`PM)ZSfD_)D;%@qrS5(eh2KASzL~zS6jRb)|Xnm4uKC@ zycgoO-r|1f@3#2+(Eq{WU%>xATO1!BJI`DE8R-9N@wF)TU5g*WeSm*j{1U|ZYm3YG zfqt_1R;+hI`F#1z?JnmHr&;`7*gx0e#qejK#qWXtBQ1V`^b?Dp4}Ydv{0*!ZSo|OG zr_$p5{a9X>SzHFe^%j>`RNQXync9pa=gAVE4^ZwSmVO+{eb(adA`XAC_&q29=vv@be@e7NmB5ublJ{RTw zXz|Z<^&KzTLE<3et&_#4z)qaSm&4BK7I)AtzqWWW^t~-E=UW$Ad@RaMw)mZ>&&3u` zLL5e0{05YpVe#3}%l%`CLwDHEwe&IY=PHZej{b0?#ZN&0dy7|s|H35c1>^x#|vGa_@Pe(lEl}ch? z^q*Mz)37eDToV1Ou+tr>@Q1NJ(Bi|ng`C!gf6SL zthDr-p_f-(vH!T0thU@_>E%^T(jP^?3U>Zr=-EzZ^pnReJ_Y+d2f>3Dm+Q2}mi=9@f2YOc5V!4?oo`_OSxcV; z{ri?)KHvPr(g&cIfquNDZ-o8X7T*Y7VQ{#nN?2jp ze+>N~Wav2rn_*|OrQfWqIL;pp&i!W&{CwEp?7xhoCk@W}pP+vhT;lK$%H3=69pGPC zJbd2VNjoNS>xg>w02lksurt`uvp?f;{21AeKF!ecI7-sRIa3VIb}q*JDX)NIe@uP8 zrGFCo602Of4_jmLPUxRESo~MucUin2_+u8A^YT}~C2s4{S(+_<3haDk=()ZHi1RT^ ze*VoxxF^iKVB*f&UQ{k|66478t`QXH|<<&aJD1;Onz@7{>c5K&6fUK#CHq0=*9nM z3_Zu;Ui7P-mi`Fpd#D}$wPA<-R}DwW34^o$gRtHKH&S?&`R_z$aMMnAgR}lLtj8mj zddc@d23YzK)`uFL>w5~?SAL(uZZMbgoZBsZH;niH0he;~&<~poJ^T3()?YF>+n4*H zuN$28m*A$|2Nw76Mp`~GINOo?xt|-HrME%MS^om`^TDOu^=RK~E&Z=?vvZB5&qF`C-_nnT{sDt?k#c<5ZgBQz z8T8K@ob_^?-EDBz-vj+y;Nrhrf4*nvRaG&rKQlPn*$q2iS$5==uuW%a!BW8wTfc*Tc?UgPZz~49@zF zxWWG!xcDj8Sw{^$+mZQS<{@c!FTVfKnT^sSd_B1QevP?lC*IN*<9iG8Do*i7o<%ki zdf^wNeRC|n7F@oU#N~3Aaxs3FTl&p7AGq7{N4}@=fW@Qm0f@ZfQ|!w;yu;F83;lBj zXMbe=e8u82Prhw%&b|&i?;4!#$UONCxWq?ZY5b$1=lE|%96Dp3mi8Kr??1#E+|A7Urjh( zybCV=$a8jnvh;&7pG4vKDSEjMk?-frxJyI1{h*gPEJwLR49TtT~3B{X7akt1Nz~H(PO>g$8GrFTiopI!oV-^Y42NJ^S+&>_1}hrVF&8=PfSZ6We8QvtR86mwN3-xgQ#Oj!z!q z{H4L!pC>NV<$hyuQ-8wXtd}1=$@PbnE9d>OxGs_Q-HdY2F*w_i=X3S7_`3eupJaM@A;HI5=gR`AF=tJP*kNi$y zqoscx`rldl?x@#OhMwDHE~svx#G{f6U@j5|tU}-ooBG=f&iWq7T7NgVlsg^u{iDT8!FO7G33#)`L*R!jeg}99xEzlj!ttUruBXKx zd9LCG;H+o=pN0R!EWUJ*u2;a~D+X&W&-W1f55u1shMwbAi#V4WoXcG|MB9;9)5~}l z{c`BV{(jiM*096&x555x250*(!~R_cH}wx#_B-%KTIBa15})1|Y2IwuVfz8_cP%~- z{6ourci8{Q;%9<)!0#9&4so4yxu+SN%e?{ie{J!_L$&@qgR^O|)8F81=OFaS;1cI1 z_%qJZ*IlgbPqOs?M!OUmdLGyEJL(EcFOLkq(a^I$TVVfgi+3ER%e}|4(*x(_J1pK8 z{2jv%`!fsYMW0xDd48xD_gAFdi-+lQI~ttr@N*-1>1J^D{}Jf@7XJxcejg+De?MHA zaYkGESHQC@o^^@V=NO#*c~WC%hQ;MRc_Fy8uRIsE-q5rE6|jG^#dm;jws_AGy5MaV ze-QiygR`H%#dYFe!Ns2x-bl*bFOF82+bZ+v2Kwtvwm`a{bR zi+92otiLrl+j$fHUp@SV)+KH!(09UpBZ=FYI4?gHob^04G+|!qWpMT<1Una4d@J~1 zi+=(>(&8O1C1bRtf{Q;n@Tc11yU|_^7XKOiUW<2vou@257yLboF9!d{;&NTo zUu%03&!Ei9;4EXkANO0%G&tMe1N-L~+|>6qIO|W%pg*(>0GDz%pj>%Qn$))v`YcO7 z6XUkXvVSY|^DO-~=<6;04(PA9^v%$3vh*K8|A3``5dQDB^idOZeVZ+Q3HZAf&jtU` zvi~CN$DE_>N!*0@1n0PM{43F3eGJa=-wgW$EgqYx?G7=xX=jwd+0Jt4#~7UT%_uk1 z;H>v#Y5VfKRrZs4AMlybOTDf}eHU1~7VUDY#YbTtxZ5a~{c*bTAIEvn;9PDQ%6-(} zrv52|vwjcsP2l3E+!uJ)(zihWk)=<>b;5B=pD>ZVr0-!``fWI`J>9Q1hmY?W(Ekct z{E_p~L6*K8`q7p?1#uf^=vBKTZqp3TaaadCxfcHjywKpLo%sf5JAEh7A6lyXDpB=f zecUN}eTl(YzaIK}i$4S22rhBRK)u!*dbXbe`&$go_C1%;A6g#qt0WxfiQtbL+_dwY z!P(Aj(7$MK)^9_(e>FJkqqFG`Eqnbc372~z_$S~}uQ=Qn_{`9=eYwB)gTdK;1?;pK z+|>Jek%$%_Gel81RUoUSo(p`FSYbTp}*DA=Rkj#rN07t`CYZdZ87xnyKN8r{|o%z zXW8Ef{l^x69{e+l9{~Rf+yndX!~W^#>Uh}v9B}rNQj(;B7 z>oJ3K{4a<7XDl89f5G6Uoxd2I?K}s4Gq}V}p6~HbOW)}VU9T@Ko(TS(W#_l3ZyY`k z6#E0vE(0t+^>l52g2nHHzR=>w!B<#(1Lmc*;N0%r=%0Mfvfk3mb;Wi=&+!SOUe6eu z?cD37KeX&IIO}hiuCVi0gR_1Y?r-cfxM}~O#rw_BcD}dxLh$I`db{-JLBG-KJuO}f zeh#?A|9!;gd_&Luq!In?VuQ1v_rlIdgPZzvgR}l!=(EA4+_gB5FSGPRuhjn6SbPTf za*Hnoue0pm1^Zhp{y*T`3_I+96YAS!aQ1%_?7wXBn3>wo*9>mjdB@;v=Vj>MH#qC% z`@r(tV`<05v$Xv$pqIE!fd3uv`L^&N_?h6+&*gWOy)1nr&ZkoiJ^T45lsnGgX1~4M z;H2qChDR(>K^PHh)JDXAN>jq~#f6QkqWY6OL=V<y^+!>whvh z`+o#>+E?!<<8FDBUXKSCeKYj(JrQZgv?8saY}ny)?*+fova=U<7Fzm` zpkLaK{w7O*TCpy7y`}e`tNDY5-i*(7gR`G+!_Kpoomkj;)zGt@za!4?So%unj~jZn z-*>L|r(-{zO5B3r=Ng>t_w{Ps0E4rgCg?|5Ji0{d$AL?GEr36h3_XwEIDGCl+u&@! zAM6wu+|-vDob^@EF9erz??t&Q3_aV)M!7c{ob9BQ(jQuGF}SI}+u*EU3;liIQtl@x z_dP?;@tocb`Q8G9 zv;K4F>n&biq3whW&USu}a&Iv>+xZ0gI}FbHx1rw*F6}GlH-E7BO$oZ(XDvIApxs|K zIG4MvQtMx{?EDUPzPI?_z<+h2-mfzy+&>%9p9dP8?SBgUL%_vkZEF>3p>|bfdx9zV!b)4bJ+d&~E}4KMUdKR*TnwzhKy5`wwGY{i~&~h5ide&*i>^ za(}dVay4zFrON=Fa(q~S4|p87__+!8`x~5xE{3l&!r<)UyU=GFoV7jaA1}EEXZ@My zE9?Xf&U)^nyvX;|#GjGSuebEP4==wrINQG*`lk)f+EZ9ei@aYz>|YK2eoNm;%bo8G z&i1c|-c8g3vGWl4IR@u)ak=bVWN^0g2J{mQ&id}!tTV<p6JNa)YxTA5%EX49U`N zXA$f~4P7Y5lDR zXZwp0x6KA;{hY;Gf4{+5|0?3J&ETw$xkl^%Y;g7`j(4KvRd8vSA1=`ROG}>({r3iE zRH5Zg$0VH*J08qmJuH4IcrS}5fseKLPdKm5w)hB~S5;fQ9{e_o7ouJdS-cVa4U5;| zxb?ZgImDPIogWR(UG^2|eaR=s;VbZ-7XJYCI?v+w!hd>UuUaIY+ra}Ce+fL#;)RIk zLW`GzH-O8$QH%a_o28fUQ9o|zxnHeBzk15x+#h~Mzujx`SGXdyd|`05vmJJRw0Pwb zC3j*5=~Ut%{`3TA|KsRiEf-G9xdvzZzlWXk4Q}d_49;J_3Fcw_= z@#DDi8%r#=?^Wp8l3GUEmPRJ z*W!!8w}4B%E<(NjZ1Gv(FIc<`{2jx7H!5-<=JQW1eJ%9=w)7IWsKMG_ZeRBQCHUFN z;A~&w*2CbeKXp0%p(VlMv%vcqobAYU6TQn?EmH0updW5<)=Qkz49?|#3;kq^k6xke zUI8v~-iSC9TKpOCt1T|y=U-#kXMdV-f8cgYe*|_Ovh>R_PM#`XNa!1#B(R?M;n~&h(D(qoc%cgeNS+STZcq#cd(&nJL3?CODw&- zH+`m|XZsh`YCHLs{xsNMXz1DgJE-qUi)Ufnt+lv3=j*0+_-z*d3jW_|@yozBTU_+_ zTl_Ql`Go3nwftde22VP!b1ueq9HPe~tF)VsX*OSv-L8 z+r#49;m?^C7yUUFPlo=ycK8JrpMZXn*bcwQ;tMb?hPT60EZ!UXw01Z)tM8d~MIYpZ zkLkR~{Giw9zB>b2Z0=W7e>Vi7S7fHe<#}k87T*lJjTV>ZwA^R$6cn=E;_|$X&n+&` z(@>7nHr}28<)PiTp?u++5tx}MN4WehzS83I`*izx@+sU=X|bP|F27fm=g^9M`5j^s z{1WcOYCH0~aN$YdWtM(3xIC9m^zwTUc@C=Zq*Jy1DD+?9&EWACPvJ?3mXQ{h@8_?! zxP0&WK8wrulaEd9pkQLb#jDZt9vAN{I{{qV~zbT@83jJ#udV%$VE^BW5Ei6-!F-&Qe7F$G$aPF6 zj_b0`*3P31ZPh<6TPvIJ{TQx4AF8B$=|6l~Y}+K{JYB+n=^f>mxAj_U?e(;wt^GUB z*L#%L%APv4wRaM>87phP(E22ug#X&wTWL#M^>6;8R?7Zd{}}pb*Z&X1Y@39f`%!)~ zj)Tm2v9(XP!B|%VWf6|k%y_Z)e}Y(B{yPt7rL+_K&t2K}e-CU*J!w@fe~;DsUm!bx zOZk$%MV#~Y{!#H-VRgT-|FZx4*dOM@$#Co+2FS>M!oQ{rGkg4}VE@gQ|JJI*=Yeg- zFCOvRhxvo!$Dhr}{t{P?sWrtAq3>hh0k}V^wa6da|F(Q*^?pB;o%FtEQo?h!T|RGa ztNi`_^#0M-M!Wp{>c!;+i4_C=Sdt_|sm|-aLx&7eTat$)4Y_y_XY)F*NY5JQ^+YUs z=xs8QHSIV5-7YsRD4)WB{`%>y^s$eRZwb9n_esavAEIKfyMcIM?J2xD_VG6Z1wC#G zc;0CFIQAT;Vf^=Nvs+d*1H z|Gwt4Z+6C>Q_ohMK*JSZg_`R=^Bg9W<~U6U-Pp&Q$kgFKsdXy#CTY#ff2iq3;hV9qgx0P0g7)B@p^4Q1`hn&@etOu&ODx{&A87>Q?xj*!l-J z+i+=m@)xSS2@Pj|6qD!jvj*VB`m4v&=WO^2xcUOxPQtdlQ49lkr_Z|oD3emuN3vYys3 z=KJKPwBgSOPvctdOpASD%#RAxd=-06iW4Y!IY2!s^nD=oN+7gL1&mtomL^tHg{arm za){E%v7ZkAxsm!0Wt-Rm%^Svib$DZ>JXP7}>pt#S`|qfQrv=uI;+@IkKtb0V1D@BD zUvBwV^2>+UgzG!yIX?*kp>K3kHFOVzs4q;8Wr#<@I<<a@W2 z7QL)M@2mTKSRj;^;0tX385;t_cP;D{sQWo8_F8`HLFzL+zj1vhdcMdS{^i2sS)nr0 zH;nfOLND;Xaoc&+28Qpg<~R-0y&-jWYVJ;QmBtN8`(}iGQjhp%eLMkjGA+R$XyB69 z23i84-GR_w0->ygzN#`A4K?KcOT3*%#dpDl+>;k(PzOs-{w_82{-lPH-%niC5}d|< zWl(R=XvmGrXt=Z`F0I%8z}mEzsL-U0(89Q^(6EfqN2Krv>JEBn^kjt6{WX7O`x$k+ zsKb9(eHPn3i*3Vd%|pB?Yxs8y*VCq&8N3N0CZ97x^Bpom0U+NgLm^H}p!%g#wa8nx z&zX42^yP3QHyHs5?53SKo`;^MaAUd(tW`%jH24m_Bdv-{ot8S4;-)5vy3bPz0}WBV z`*NfybY%AMsPH_{kr6qf!^-ic=&AUQr`9L;!tTdYjbc~Lqz21qc&0BU0g7T?#)xN< zIN#7QBeaTX%>x;`S25z{@J3om!3xc%B>P_~ucjB3HH__3S)-^dwx!ErTJ!MXO{sNj zS5rxG$=_v#z6vztB+zVyol@)W=S?*8wbbmK*zjk5qQ2_*sZVo z!H>{?$5J@CeaBL(2Yi85F9-i59@FF-ue@$~Lp(ivTVx~EL~m`Dt%vHkS)LcRJqq(DDf>l52KECAd0u7Vnsc9mWRNepZ8XCB$$ldHL z9bpdkRu%aOcvT!@8eyHNJ(+RCuHv&RhUcd?+`5|JcQ1H@XVrb;tGR?gGXWK}Rd1%m z-n#4i59!E7BWhS-V6YwlHNT>Pl|t^w$Wn(@#QE@Bs$}Y?Jl}<9x#=ejpFna`!*yJ6 z77v`d{aq>P8oP?0YEe5pAtQ7mBlKDz6inzF2<0RUqd}|2LTo)h*8kZA+Ak1#T@^!> z2!wXV*5}iPz}h9A0e5c(NLe@AnKhn8lFyI%7M*F2vA_Vs+onNOi|dyyVt!qU7|}9xgH04p4!3Z zjFFOK>-m{>;nG!ijjiYVk*ZvtZ|W#&(QTKELk9j(wpg(Me4^=q{N%~ktvF3wS zY(3xR&SOwYic%Lc2e`{wxj8&V4rAX>+h%Y;lSFm_^80zMPAi@>(p@m zP)X{RCip5d8rCG}v9L2EHhoQk8sK${WiA*hcoo?Y(?LUhN%=B>iHDDTbt^eYI;p)-?V4n=0<{MIYCa-xrWB4qG zx=DRgkPmXchLpIvCJ)s%iB$T0vJVxQF=9M*iyY3WV+4v0y%35@$Y|(D&_97rr>HR|tc^NICoh3e6&-Zq*y*f>6yHQ1Mh&W?_n;=D%7s2m<>A|d zcJrcY+~C0(fe;j``jCwAWz>!Ldk!5}KGc&T?uJpleU!#_(e-|o1|0>j<=|W2wzSk8 z_r$Jxjbd^ri5$gokk8#hV|=*&353o(9OCl<`Vf_O+d#V=-W@rg<++7UgC_b8tx{v; zFNgmALu6#8L=J2`N36PqG>69h*wR9?ZC5@B9?GK?9`qdBL%(Aa`tr^?Un-NShP6Do z9D0FvR8dub!u^@9wde{&F*Pd{lJ?o@^hce2z9bvee9jY3-R9L4ke{C8dlP}(wfiaI zg|bSjvquzD^mru8Gc7Nq^+mFAk*q(Gaa}$RpZr?T|L=$UzljyXeNw>w?+W*o6lo_i-v0mi z$^`MtBjUgA&Q^T?|M}zp<@qB}_newHpW?$q&94Iu*YP~d7k^JM=c8YzK*Mu9v$Qma z_Hpy27~_L>S97hp1ya+A_Tts#rf+bcLSGTk9mQ9CTjD~uuO>6WE^4DbULKlvq@|@X zGTtKkDACt+rb5 _++75^KqZ)6g+=ot`Vl(_DES&y|P#WXiZc3H?ZirjnB`QKs{~ zHad}G3!E9onXI*i34LiLg;$scB%_+<@G`D3uFsR?e!wufACN*Bbw41$AtD`F4K$R| zRSutByg;a~fomPdr{sY^=u19Hr4xv{^}Oj`-b5GYOG)2Q>!+h`OSb>JI;K84>82zr z^r>-OuxbM#n5XNU7(R1uc#4C=_W{lijChKVamv{`rm?HWQnLnj*U6#p&|q4p^WeH4 zqGRj5baK+53fqzwTVF;OO@O+%5 zHM)C!Hmz~^^jeJWyB}dZQbd%8s&5{8CVbvcy^~M1sCUNJ|DGuIP(I(%J(Rb^)_bVe z|M$a-M%JO(WC-QfT@~j!bd=6xWnR$TIVw1sN^Yc(#Xi2UC3IAOpt10*Ha^T~xZ-=d zs;G$x)Twbq4s9W~wxq-LpHSCla}_9f!$d7-dAR0Ik!x-m>3q%ogR1K~H7IfE zLT7fodZ+`LDsEJLE4F?K)gaulLeHn3H;KAdG z{VjIYd1Rk1U+7i^_aScNv)F!UHy0t7xi9IyclfoewFOauhKcb3ed_ycEtyYl+U-)a z(Cnk{bjS>F@Ac=*R;quKc2fOC{o(7K-F4hA zcscYHH}4Zy{CKF4+x77)emZm|Wm1~Hbm>Eiy@w`o9Oz@DL+O;E8}w^4X)0+@ZoC;< z#|MSj`ptB;Qnx26q(ys_#{`TOjkOxnp+naQtdlQEjZ*Zs_#c0=HDfOo#)C@Sgc#3V(L6NR> zNOk2bb?Z_0Z(RL^uQzq+!>VgywB^J1LDx_xrz>4?j8*=hbQqFu8azV|LE#b){ENFt z3Qa`PcY~j_>bJqps(AIsXzRm=BF86*SNuum9lqoy#E-@=9bV`L{cK$mj$>^7?}+^O zv8*{)-6%E=nI~v}id4LDowzobppLLy7>9fT9c80v?oXu9JJecM=p*fMFNJ`8YiT~b zo<7fQsPk!c&6|hcEpF6aN8*2IzB=$z-2S)XPp1G^eM+|_E>u?1$gTga_$#ked(#Iy z8KJkS(|$|+Hj6(?dyRT8jktf=4Wjm0)wF0-fbZecr?>@8S)otp1npq_A)XsXCWLk> zO=zDwTvE7us2jR9-6+&?e0D;g|Ecrd!}?C8>Oa5zoM)nXvPDPUESkIn!HZ-2r6pv? z_RC7hi|v<_P#N2ALqaWyV*A~fpbk;}wkB*=>yIUDQ|Z$QO_ZMGaXg*6uB}hlPdp>E zU!B^h+pxQ%68yxtUnNn>8{(AP>@@X4aoQL7?ThT0u2XnCofNOoYZS4p(98cJVk25b z>{A*&zZ9{!aKv=H_M^d4oI?-ru6nA=wr)b@P{-3%X?y!bIzp-KRIUG~mvZ_FWop&j z8ug__D!j0?Aeg?WGQYg=WKVK)tBMLst5f+a9b@S`jJ5#V#}@^s)Xb?as4AUPG&aAi zYz}|7kr%ahc2z||QFXO!s5Xi)?WdJi7gUs&7Zn7RJBbBONpQgEn(CrL|EN*^Bu9U* zq=0M&8B9)3%b1dzK6$cJ=~ViAjq*>Lnw8~LiyQQI;hJ)DZGJ_0X|SS-c<*YmQCYTl z!04i~B91_{fAlE-AX6W)qn+(rFkp0XS^nH=e;*V)W$KtIV<%^fNl)`HUFvVOdE#Z0 zGIB1PoH1#9KOG0NyepGt4Hz9?vtQomea(E9Fx0CeA|BL!T?dUTm<)n{K zpKLV1|6z7_s{XDMUGGtE4?kkHwN*YFbE5b0Pb^$tM_!4F>QGAGh;^gXn(L!0A>O7F zk58@XR}H!z{+guYdet^%sbgIR5uL5)ER1T>5ZSnvvmJcVzK2)@L)w98-wVV#s*?8k zzD}WiI}vbvM@Mj?^WSe_qVvZ&uiv)d`#0y~HUEM0ex3i3^L=&x1m}}<{wK~4)A^q{ zufL`5b3D8f;138XglZ*QuXxqUbiESgd79kI(<{-Q7igtKulPLdZKYo6s#bz}CC0-e zZINE-=9x_^wR)wyr-)Wo>XjazJ!Gv;uf%)!Ez_&@N-xiHk~Qj;ejYx`uh%OVsFlrn zc4WO6$9uv&e7ckf9y#;fTdK(Y^*^(Y~Fu)|I;lSN)U_ zWtg%nihe1yJ5m1aL=0;wr6)OD#+^nL+_&qcGw8xo72Gu?(t*0Bay}}yv~ZErbqwcy zu@!T!a=MOH&TD-d@2Wdf*L3E7Dk_SYDy8c<&Z3mSpTebNyhB-(IDvnpudCNJvkRS~ z>2BIJ%TIY&p2(k|`kgo~;8l{Js{U-DwNv}iA1d-qqA|JjC)&rwC?y-#N>!<7-v_dV zi_u%M_3q!x7A{n6Aw#E9z8jZ(Dwj*359M{eCS654bZ466?V9}#@z|oOs{f0<^MJ3S z%=-V#9SB!~Ngy-@X+%O2Qz$M342oq%gP@|KU_np;MX{ob zZ57mY(N*kdJt+c09Nc;_ zPwE9zlq&rA5FQ%Qa;IxxF=(_#>nc-B68^TLy_k#x(_ZY8?ko<#nX*k)L6s3W6|1d0 z!f&Ruy%5&y@~lAbyMd@61p4%bMZ3H}UtBhoAAx?VBo)9w{}SMqow;#f;1MVDpp7F>_-(^KpS;iBVkg@G;@cskm$p)j%3%4%#KBW9H-R%*_KMN}bFj zr-n0+!ezS?2S#J&I6Lzg%-r10oD`e$2xM07#m)?Ol-OC=34jaCWoJmp=l0TWocHg%P_7D{+U-&qv?)L7jhujvE!k zJ+58z3(-%t7}xU+SZr|wUYe_yo1r)!!1(-PHEMIrxM5X6s6oCFm--}7yDo7V=;#4e zSlkG7^ksW_G+H?n3ty~>%kBl}BQ+Z1a-v|L(AKn9PHzS)AzGR9FRvmYM?Iz%&5euU^F7a+yv>PBU3EhaZCCONHTc|Di3lkkUYge>40?cm2 z#r69X7HoZgT-29w%_bUYe^HEEKdI0K{OV>(GYk<-BD-Zow8si{UN2`CXtb(5SshRW2$R0ASZ)a4raZnPW64y%F=&M9rNLEMBpQ>&j^#Qmq$56kJORQ*u}mR|>53{Jr+b3pB3ttj}mZU@*QO~(bL56nP~ z5i6x*xD&CAD7i){ybd70o9o#<3P~`1WnD!umr`mP_g+-6fWaL(iMe` zdSgJX3qf+Sy^ecVTGZ$%xUn_1rCrlWSRHdOWK%(ygh5cbtV!6(X;C$nogoty=3y?! z$_&dgQPvG(IabB8JFLQqhvhX4M(!Dtg2-Gpd{ueZ1xAo?2mRM*){KN;v8VMh+)5N z(51w%`lwB0ZbSeNo6TI-nKtNzyJT2K-U<62EEmFZmkPrisj?{d{{Tp(s34kw5d>?> zdEBC$Z)U_SfMwND8mC~3TX(^FhuqvMqj3r?mcb%sRZZSF@2@8gq znvQRjRIh+#b7MJtOR5)6T4pMCElde-Lz8k!panC%7bp||MVs&6)@Lu^#NE;W3zDA-=fdC{=ILxh%^pZLJ`6sn`);N>wnafNoMpqS{W;UcsfIDY zoMwG)X2bpzsr4epj}zYH!(?t;5C>MUf4``DEwDk*&Igqfure4`nC94T#!%1?nqO#G zuks_SmEG{_P!byGgORc(Trsu5`gk^2NW6-1L%Ch|>1-lg_Xi=9UH9qSe0IY*t4`fF zK)Fuc?dH$Y>pogt#K5|5f^T8jMzh!`t#WS=tAk3D4Rbsj>sH#E)>8CNgU*|irhsjy z!wf^FbrQFJa@{ZKhhu(BH>Nsu8(?Nb^G@a-u1+bH241*dni~he_XzDuID%ePl`xTv z>Jb~)Vbl$TZxcf3Kc&zgz*K1}w0YZh+9-l-Olr{T*V!PIeZ>Sm`DoZa+f z&3Xg9|DLej6is4Sq9%rTFrhm2f`*;iSyj2Z%{Qz{dm_o;><^^EcX%N;bht)qH>`+) zRxt+}4LY?GoF_mFy0EVx)>kG6g0%z8DPctOAy!b$hfR$bjN1s@ac~OJg1IrirD2S` z05*+U4lhyP;p?W+m%(e;qN>Np&A=k}%4(Wz3b%|AxO3nXq6Kp!KIMAkXxKDr2)smn zhp(GPC8}k7-88C;TE^E+qbI{_*tLJhq45FXkm{=Dx7gRr7r+U%Gcdo^7O{VK!=se% z)KPy_5D%p7{arH?TiyHy@^!|lSk3JH^cY+*PHmGEFF;}6XPkGyTy{%Ly1)bT|{362oU~{O%d6R#o?Z)HL zEGOv2Dw!vn32nix4BF<@=;BnnMvFj})ltid+01Tc4dyzHxHEU+@k}vn!CnJ78+Om} zdT>ugJCMvC=2K{j1MF0b1<6Mf>{HCcXw*B{J?)YW^HehrE*M2JI2^Ay@6iSOG;=)` z$iWuj(W4y4KK3*}z$~7Teh#)^q^q>KpW6+XF_DZI-;r=R{3<)M=ThNv5KMYt01i5) zg~dH>=!|;D%hw?XovVGWrdNF8t~x#X9QXJg@TlAR{6P?P!=uSBP=hz%;MY=%9Wj%2JsP1!JQF7~=PNU2J1YPDu$lA2X4Imc_X5=0ix;9r z+D)X|XHUbyjyfSsRVRdYl;m@?HF+q8f>M}u|TuT2lA^HNw-`?VPXd%sq{Vk+h^a{_p| z36t8n%?x1B>`k)*%4yhSub=Mt?Y(}6vB$vX+9;IyD8Ys>R6W)t5c zocIDSJVgt(kxyVPnV+hif|G)ttTpS@!mj9%X66={8 zt-W9c&J_uG0Ly7UEm+&eguwM|jvGHx-PxV7Fgceb$tASl>^u5{1+0mu(_Ws8*GHb3 z+rS%hQJ_sHaK(T0IX-cgjKj| zdzJ1q2`iI%=5S)zU>b0`aMLvS%mSFSBLFQEo|kbpObK`PR-nWOJEC$Kyk@I8b#kM% zE1_36uy?@U-k^rc@BEcR!pabo+@cGXtj3g6)`nEP{>r|G^?0g}k46Mf_1ZM7n$@&a zoX0v1@H*tTFNWfdN}c@28!@yhS+3wZ4JBFZQRA|9=DyhVvpO=pvUcW^*H?2xhivK zJXm-4INttCJ#GeE@ArOadI*P8f5wrbQy4DP=+R;sBX_)ocJL&X=NV?X&H-i(Ab*=Hg z*0uKNT`Rm}Y}<=(mF&@b&w~wm&qJ=>!@D~3u{(Q0oQ`T&c=)tmZyb+_=~c{j>>I{o zV!9lwc67Z5pZxV3I4OEhB)h`>pMWb3`;gzRFbDdO1^t1hsPHj^z7L$P_D6r=nFrVS z2*BJp9dh@=L$becZ|j8@V*Y|3eNxGu=3dov)7capq}4<28JPQ3%xzAafq7rW&rrb) z-5ktsX3!3it{EZP_zGlGmwz%E+?N>P+?SZCiiQ`w*+GVi97CzJ)!cY*0vRf5V5rzJ zG)un+#Yg<+nPwv1b;9HvZSclqyfuYM+>#ovAGYxB!klPs0v8hTxCN7AjRnc}u?ueN zk1v?8PTXLy3OhuI$wK?O+l)lG?uG$fs44^p{c0P2NQIa2N)>*@qD)m1_GF+aS6At} z;N6@G_30LMh3hPJVb4}nD*N_wmHITdywesZln8F^()R$*|w{Xds}erV5(Z*K^36;uQgyae3Ik7>GNlE zJ2czL(RyN+GfD-hckHGxOjD>OU z^nCjaCX(LX9MrhV*Db`U=C4J1C|bZ|N6c`J|8e|$ z4VGaHHMmPq4}&fn$F+U!DGMhDJ(+Kr55rMd;#XSo8*2);8K{8)5|ALloCZ2c=FVxe5W2g)|5%x3t0%33^oL7ch7cOe*(>L5bSIK!tslIgDVWNgY1|HL_&`Mz&SSv5+kDcqa26b+!ktdM93u2Sl!#HX zcWleF`wrjI7TDP}$k7IN^9^!1Td`Blu(yUI?H*Kbh>pqCGhT=M_Qg&-lu$=Qt&A8v zRT{DqcmPIA(_-&HxsN z8%{U74(fRYlt_Vb;){pLz|`jwsK<17ddwf39`hyyOr0BbZ_s0UI6dYJ45N99x@{U* zo9*sEy#l-7xZI}$fn#=ROYdjtTIc+Qx2ld6QD3+a?8v@wgTp-gLW4Q3i2O181@43p zIQ_wKi3NVsj91@CLQB8cH|juf%=(7Y2XHK14VEb&zuISRfj)D<(L=DHVZ$Tm^;C$> z9E^{-#kpIKtIO~OlDYBi6zVlwoL-|oP_adPpkj;jfr=?A;}++m2$^|suVqUB4PhFm zK5ubzU>ht4)=nC$K5ntqDSawx%x%uPQ}f+WlN-PW)_gI%;-@nfKQezmcH6vKIG&=@50Ts4SIwcN!DnkR`e}_CVc+J6%(tgJc^c*fnsAO);OQk67Zy2ThB1-$6DA}J9+V8Zb z{VAdS&ZlwgD;rO#@|=koJ0nyVCuY09X45r(yS~tSb6{HzJhUGDGUwvgrosmha}h>w z!>@GPi?`rn9#Tv#-ZkghOE8Y!a2Dg!!iwk3@bU{`b<2^CI`*b~wo$+f$EgKJ(&Aoc zvDIW}v30exXr?%efmgx>9tsy2yT(z(UJ_oc4==8F7F$>NITE|W5w+>zEVk|KEXLj( zUfdd9EDkT8X_(E;lVjqet(bN()7msQJMMVL%s|jKrPaon@wghzg}{NHX=cV_j^jHS zneq57te9@F0AG!REJ525%o5ki?0$l+Y~EN2S|Guk@v7*?Ty#sVXz1jvG&```dVtE@ z20S3^@V!AS8omJBNL3*-o-Li&11ixT3U3#0hO5>-0c0rYenLpqwL@dg)=A;5neq1a zj(we2z*pvIdt=VsiE=||;Nl~!pl!9%1@fVfYNcy}Is61J7cKWybw8OhsD|i98PrPm za6#-y4{}5qgcEfuCNsY83GJbEPsL}joQ6juJ$3(^n=P88w!Jc46$RhKO0TUp^!FpU7kw8&$!Z;FxqMmpR z(Sm%VRghp|Ot``9a8O+`Dell}=j@Dqlf06U`u z0~g9-Z2N{WuK|F0BtHz`_m{#eIGdEgFmxr;{$z#D8yTj{s{jZU+L;M~=ts5Cl8@KWZvMUyBlixjTdp8(o;CIu==0$$TjM*+Hcq_kq zlxP~$c`LtrI}ur4w!!ZKBgy5JY0T!${O%>=ZTxQ9pHAjgeE0Nes;=-_HjOhR_OR`i zxB}&tOq0kvmQr;r8`Qf*k4XIw3L~h$kHhXh?h!k;`N?kN8lD)B$sV26mDg=co$2Y= zv`_wY6j>K{4Q!9()#}2uRb2Yrj{^&PGZl{jj z#NjcOVb69C9O(r7@Keau{iVpmx?AFkuv_A)ug6Xy;t9$lue(Io$nuVg$Kdi7$`V?@ zo^D-m(z+mgmwR0hm)FHfO}x@95B{RaHspw=_#0Y#2b83Wo9ZQMVW2m^rkVb$nwCZb z&D#5*RCnDXQ^|;U&5EY;ixE=otb4SQ2Xf@J5HR|>I=DyQ@sdeXrhVl}#{u}EQJEqd zE)g8CL^51__LyGB|E}XNx8MKm5*r!tWp`KW{5w?Ep^>qCTfoEOze8(0EHuHBsxBTI zybF|Wc{Gy;lDRx5XHO_|MqvCui*n@cCSCIy{9a7v^BA)pNap%?YU!shXAkqB zGOtIoM24gx&raY8WloRsq{KT8-t<`J_38y)OqS`<4Lp!Lm%8a8vA*tcK&WrVWsfsy zx8zq3jgGRG?vf%nTXjhy=n)<#&+f8+wU!Zu({&OMF!0wHe>okq_(f2MquX)2EnOtG5Y_Yi`smGhm+P)WjzrKnD?J-0$5o5}RB9UkrP5^`kMTe_#^$i;+(+H+I(T%y zT(`=Fq$FT0|J7MB2F^`_p{`lM&RtIl{(PdVCp0tGep9=?QLy5F)mB;4Xk(GF-VAzI zL5eM-!hLLJ8C7oRagz2MBk8M02XsqZduz8Of*n!>R$P0&$f63mFO|8`Z7EqP}2mke+C+Z&5op+hXsZk@ti^{wn zhm0Ob=8EV<$h%6?R79o0H=SfYXp{({%o*9Z^H8}Bx%MI+7qC2#G}Odc7tDdHf36)) z5H>7^Klc{jEYf!5aq?73a~@%d47m**qu_aTAdjQmfU#J50H>C&b0MjTtZp7Ex1ryz zx?Xj2mmk5^$z$eX1ba+ZSx4b<&{)xSeWMD)edHyLMY?y3ROfM3!m}T`jte|g(pL{j zL>XT-JQ^XxpE%Iu92PqMR-e2hSRg#dGucw zI$A@ngRh8s`O)NxBt(FfcskRM+8;$Ekqqh@O4W z!;nXDzfb%!n7r;0RNlnzzxQvBgy;Kza2L__Ii^TYPJYkm*%Syp<|(Q5kQ{a3JrKcW!>3=J7 zyBV!#~Eu6*TTm&JU(tBr5;Df9u4MK6VK|oVMK+x?mc@CZ-vhaGx$dfYoIQJg z-`og+L!^B9=p=5~>4YJ6b_vmu6w14OB5qP#Tf_rza4}i-uJr1@0 z2PLj6CLZp2^x%k3wj&l=##zf;;f*-AJA(hmE9N>6a7XB9B*(gyTt58f1w;^sW9x(0 z-pPwe$Gm4*Zz}V8j93p8Q7%^t{l;VRH#YAvy}85Ss`GCn@#+O$OqTB52fV4w>(LE7 zP(-<0QHr?fyoK&UUB@;a*J03>`*#vNgl_Y$b9^ z3*CkOe>N^W&UG+kzv)n!DWi%d&U77sN|onmiJ+UfBp$8rF3Z)qynB*6qpO2pM)xe~ z&iLOSV-ZevL&4X8^0(pF7-~WdE0Nl8_4l>kBk+3!eviQK5%@gc#_-y`sQ z1b&ae?-BSfM<5%Xvk@@x@l2-qea!LjYQi#nD%CI(YpN;}OUm*~YYGYzmkjKm+rMwG z(vq^8CB2HvY7*y_R96{FQd%-Eu{b~9E$PR(Z5^3{-)pa0T9%)n9{EvKP?azrt6Wf$ zUrngGvZSoI4`6Vjs=A=0ytlJlP*?=ZaK2f+w4xAmf&_{$DThV)BHz$?H6^9hy-Lc4 zp-IS_S6OW9l^t7DS(sMGHEYq>;G!?S_ySaw zV;5}6JXQ_NWF4Rfq@W9@bD zeqC@_aM<8k)|T3wJu|FsIo9mp*u~RcUOQyf9P8|{>A~}??&*F16IpwYhj($JqH}ks|HaBm*y5ZO9{iPhOPQ!PS)ToYiYu` z%yCIK44kkSwno=k#dR}R?bx_#4`hhn*T_5{-ZQIL!L~s|VR1A@U?5sMz54o^mBU{r z8!0nVlJ2l=G_SMr>SpfWfd<}FHeo44nHXM&^^1BSYCXO0IXyTVB7TmwH0Mg|szBXA zE9Qt*S!BiJSo!;`Q2orA)||TH{XVfu@T-h*b&#jvuk7NhZ?8O)i#KSjm*$3U<} z5Pf}U8AkaEYr9k2WizZEW7nSh#4yUeIGbzUAlaq^<7|}wR(B*ptTE&{OS(}&zxyZsQ-LON*P$6hS?HxcJ9Em6aMYM zFr;svYgJU&tXg&cTpR-Z>wu+I6SI!5LpY$$imqN|#UHfJKDg?lPS)NPInYGM#Adtg z!7iPwdyk#LF582hq1M}19J6ZoQ`Nq(lXYC3wK%75jdgayQq>1@qSgmH$FI&#tVy=s zHR@XK=vBPm>Uad-)%JuaYdbXCD(gveJG50!u*Db9A=W{=uU?KrQ;l%zEi-544C~g~ z`Wovca~~{JTL;bR53Mo#f{E5swFhyS7sI9_kG{0pia7|u4-U27SspA}pLiSe?4k>o zT3182IA=wmm$`OFFn-TNXO)dyF?T>(F|_27S{TySB_?*`BemF#HwCjsuLV{QJ#gCi zdrt>%Ze6Z=)Ej}JuyW&aoMhez1Wq>BejRL8^U_PNz|0$2MwgeY|Weu0V%|l~0yo@f)l<>!IbroJ4DnS#3RDn}Bh!Zdp-;PL@6f z)Bd5_BbQuq0Hl5DQM8>!3!y03I~>`xI=D8Nh_hUu>u^V5S=kRXf~WrgxDuWWYi(Tt zgJ@CkVDLrjCj%C*Uy);dX9T*M>#Q^Dt>_1et5Sv(Te0s=ct+Lwfv9z3hV|TOopA)F zsI?Hz28H&s{sL~^S3B0)XAXt;1nb%rYF6)im32!XSXBR2<+)aNf)#zlHhc1WR@_*t zI?x$@ylfTPe{da@@@H$5cL__uWH5wX1#CVFv%vetb#|Ot{CeBO@UbXbH zKvs({R}Bg7KRwW`HF!Y0;YAGX)Ug{jtg0b%^77;)>kzqN1w8YNM#Ua$#Pz z+6I<#3(E?$%o*inWrg|G=_NqR3YS!;RTkGQEG(-w3aYB}=h?zVs+f%Og$to18%We!h#TNR+fz#SnAUoT+7Xs&XX4nwu~sL z%D0^}a_xfVV-;0a(r4tAmd=BK8E}+XR=5}+(U^xXc&s>bNdEHV2ZQ)pSXzj+uQKuq3RFbP%hl@V~fVUZ~f^KA~Q4^qP_n7J3y;%FKXQ)hByZRF+pmM=7s_ z?Um(a#m1t%(h)TkMs7uUm640Cj4NE4SyoWE1dprBYwQkJmAA<54%Ft8YO3bztv0`) za-dzaMRpW8W_mMYpeK}HKnN2-rlem0nX+R9LC{5jr-yuxw0T)%;O4W%;T_se41?=Bmzz zqZhk#O$EF`m!i&S@IY2kw)=Hv(S*Xnf)n_kR{)M88I1OdaIMVG9wq~Bcpmz zE_jk}6jc@$sy?SrnlN}q7pn1%lV^B@jzV!oUiEx?Dk!V2#O*~3tL=)Y*=ypwGoe3o zV>Fx;xVIUVs`DF(^UD_&CKeTz6)!FK~)7zDv5M92m`7L2DOntKM!U? zZ0*dl5(xdma)<~vtUdRH>sdaKK=oM=Bq}G+CDVR2^u|?Gwg*d^Er?kqbhPH>DlnPk}3@V5UxHJX&J`RD( zk^-1dRENn`XUw_PO&*tjt?#mprMmJioB2iiK7BOgC*p zW{w(qlx+eWK47;=?hpM2FJ$193{!VmKEySDVFg&sE5Hs*y$)w4qpA!JG0LhTD$xFF zc;e9ljTltMhx2oFHoMNWgr*^?~xo2v4f%KXAy*tOb? zoK{d^KwY6&XkZvW3!pPVcp8|ok2xT&+@IOs>GtlYa0%@D;6P zIk!5mSam72m&f9G$U9X>Q{h>q$T@Jb{WU5e25`YCw+i|gj=)NYK|z5%FdNj^>D?os z_rm@L8z1_nv$MxIQt;JL8qRGvwPE$u4!~niR9;%Z-38lZRA$yl>R$c(LZHAa+{3D! zneqj@HneI595zDNvM)H<$C3?P#bZA1dhVk;?qH+J40~!)-r+H7NnsTX2RgD-bDc7q zF~2Z>!BiL_h1K@HGPerHR=7x<3`=02gflbvVf%dfb)yC+IjKQHE z)8^HbRoB>unZ5egsI}zU+qA`U?wx1B+hKttVysQE^o#G zZ%^B9rgvmXv>c@Of$%xqrV%d8_};sSe`qJAN~j)Uid8g1e4KGG!Mds!rpLvN(_)fVN2SFKT-9VmOhsT~)0lxkz|-`Y z5GZZ`Mn?yJf(;q24QbIBhk@!6uwjH?*%%WOhb&95RA6(7rNCum^yL!tWsNm5CUh~z zW;Ob=yW7h-zz94(c z@Eu~eIsmP*${G<9vgSh8wt&)Nf@7jF&LO(UJ(aYp0@h>`B8}UI`fS58a%fv5Wt>ae z-jL63%L>(&7}L$P?L^!L3E6I9Co5vJeZ*3UVccFPHV&Sytn~x0xQ&k4Y+4U^$4&J) zwA&Ng5K^~>aT^^I3KT=wpr=CE#zl{CLO3=$FvZ!B8I5tNARBn|MvFa;kQyi7m}oW5 zHj;K377BgmVr-|?*iNe&O@a(yI|Kxp3&vAMv}%(BlxHjE869)T3|y@SPZF$t_6zo= zNP9FsLygc7JjUF9^L@qYG&276vzNfK@0YkXS$J>7BUxa{D_I_1;1lNqnth(DFu!GB z!#7N=VHNdv5XLzJQ&0Fq{xGgUQga!+4}d@9o3VnBSU(5`}pv|K0M8b zPxIkKzMb$0dc;}N59pF-%fV!peaHf?|_{@`{>^!eOz;FRl{KY zk3Ra2Fu$Xp6*Q%=pZ$P)wbumFAC9-}t79WrTtGaDCR(0BzJ+aQe-d#%Hu@v!R}xRP z%^91CKTKR5Bf++NfP4A#xDWrU4}Y2L$I*nXj+wyz-+lBJ>~FlvjrZYQfn$ABX`rg( zDX>4-M?a4A51(WQKpj)T;v64+Qy5>$en(rcj;CO;lI$EN&UP;Fv2z3ID?+v%=QxVb zg7fujJ-pKJ>W6k6jsvnyi+S zp?;&YCZ?xl)hcRk95fo z-t5aP?rX2G$+?usfo*U}2OOb$a^a??D;NzffjE~x_$rJ`j`x2WWI>>1gKNul4a>Qg z8NN-VtWmjoKB3SJsH>KGJ_H`+{o*B=U%17h$_n>-yK1g$yUGFQ?glmpT|0Cxb%g_^ z-2%4#me=DHweKk46+-B@UUwIjWBLsqEt__|)8l@y*WEh`sk(xzu1qOwo;N$y7NvLH zJcX%@j|X9Q2S@*g@x#w{;_D(X?HL0#o(uCSCdu~^XFI$Pz~dfF%)8pFMm+*ZXa|o~ zx!kvjvmVRF)D-qNm{30i{#gH##)oQrAqpYko9_SP#MyqeQW?h68pnMu+kal;-8B9> zaePbBcu(3fAlJ*?=)eE;BW*`@heJ z|Cvsy(T=YFf;iR}yT--vhv|Ebp9`&787>)m+alKv^od=+w?KJ&x;xZ1SeDpVIdi;Ph$Kg(mkJb2Ijq83cpovkI zTS;8{xzk5~w~xLBoyVa4EX|*e8rS`KTH|`$o+mE-iJ|iz>3=KYQomT!Ptg3S*SPM_ zP&!YN_A`h}`zw6(t9|tEX?ndKhtiG^%hl)G4I0nZ{7<4wM5x#K^BPar^l@|{5B2)E zK94xotEZ;FTGLO{_%2P~OXF|)=!doi5hN^EpEs`2xL)6Ph@(F^4`3g{)S51hpdG!R z{6rk}3Gm0`BA!lYQ9oVdr5e}EJ&QQn!TEvhB;ufjgm!d&8FBXW8Kp9e8jb7o)iRAI zf|l*C*6i!^)f!EYaoA4w*K1t2e~reIH2Yh8>~Gify8XK}uG@b=)D z#^-3|#&(1iNU~l7HLlxvLgTX`AN&8V#&vy%5L&nG=fOMc(?YNU3Cq>znfW24HrMU! zwz11kzDFwULDj>(*ozb<1;(EbEg60toK9O9VvZZ%?_DYex_)= z3)$oOr-0V+SO}A}k7EiG@_z8g{trb63G1cXR}fxMkAD>eP=|^6x%R4aKa2SW;?3xt zIo1sm9X>dA*nUfUv%`}xBc!(Wo5M#C=lHOFzF!;?`p@V*u&dx9veQHGJBarbd^>TR zV=-~LONev*n3odAv4)BH0pc8g=3H*7Qit_i?g+uTTs(%s#CEvcEE_wV%bg_n)wKW1 z7W{JJIfB;{KSS`JsG;TxelO_>!xdNCS6=7-;BXp1-0sZzzGjFrGT)2~khmS0-(h2e zPEXYxLz*(x7Ve)-VXZU#asQ#iPo+m*M7Id(aLnO5@L&NF9fl|#g7rys-f}W-goO4x zsU`ab$37-5_Z=Eo18nT@mMDOP$84Bbe@Lx`kB^vtLh}^PMVOfHpa9IWvBMuA`+0&t zL-n06_`}4@1>Z~MRttU~=~oC|Pl3N!@M!X9t>ClC&PKtLi0=~oC2E)Z1V4}Z)#HNq zrg9Gm-jn*(>wM-B z34RvohYG%*%FPrU?~`DfF8Dh*u|Ucfyo%N<1n)@xEEjwM*|+Z#hvUH45v~;aZqzQk zU*`CflKovm{{5^{gX;UrOcvEcg|~n^FAO z|7(e#Aoxwhy9xdQ^*6k4iiz#qNO4FLoUb#E5j>abn=SZUWz{g|3Vs#od4Iy?R?#@( z{SWgIxB%%qVF%A4F5Zf_ElgSEgU)Haq_H8cs z4zk}t@GGcY(*(bh#`}1|ucmgHD>#>n_g^uwKZ~ipiv|Cf{9Gk?7b^Es!S_&ouMvC} z>9-306!o`(RF3o~L+~jSpECqsLiN2^@N>xi2ElLU_7%Jv>30cEm)DG^1m`&aBslwd z9F@cMx|wvX1aCz3>Lhp%TJIxxFN*Up!3!wPnSvj&o7>11d^(MEuppU(=;c3u^n?R+ly>(nmMWRK&?cG?Kec9H}iLUA4=INQk~gX zob;^)pF{CHP4Ictegg&nJC!#{a2~(Kf^+<<1n19(t`Phj^7D^^IXneJ&ayXt`-yVWDqWBCK{7!0@EWz#1of*bV!S5u0ss*1< z_W6Dm`}21@JjRtme=GTaqu@O6Jt#Qae^T&d+Asc1@IJI(drR=s==k%9;B4nd!LK5H z7xI_u#rJXh3(j#)7km@>GePjB)ULAxe~8wL1V5A7t5Wd2#LpL;_h;(_|C!orli;1H zzS{-=j`a5l-ip>A7o6v-1A_B-eqHcpwEmIc*VFj=LU8UU@zfu=U3graBzQ5+8|i{` z|C}Z`>*or-ko+hWd=c>_g1<=Zd#>P*P`|AgycgNoC^!uxW1Haps9q;fyW!@}@W+1k z7o6J>KEAFJ>lf2{j^Ow?J4^+FZzVq}1izU2$tuCw{w0F%r}4H$@PAUdPYd3J;`5H+ zlPR9x3(oU=Gdhmr`Ua`oM8WxZEJyIS$nJc>3#flq2_8fGTEWLqy)G5}b!x|31m|(I zTX4P}_pso3w0=Nvw)2|cZ0BEsze{mGp04+B+}2aQLV}-2{d|Dnd_FlsaJDm9aQ;rm zS%SBs`E#A%ACN!S2+sP)1^?de&c>&Lzfb=EAUMxg@zgOm4(rHHSHbV4xJ?n9{hTE@ z+c`(@%c*~E75psfCw~(B0@Cjzj^Uyqp*;Oq)6*>u#gF*tkEi?WSYOm-G$DvJLiVTZ4mt`U0Pk6fv7tS?`GxmoZ} zsNCCxeZC&|h^9w>VyRy}E%Xn=HcX#tdMvjKHQG0VUrzi-Vdt>20-wQ%vlqC%4v{{j zar9>wjh9n3j^&<0^HL&lZePB>mL@n~FU!>IglreoYmUazelFRc<71~()1#j+(SC$K zzrp_S_3#UYp4)Mq#YGvAW)SCc-=%VMH9gv?fIm!S8b>?#lAS7zhk&zwnZ{Ai z*IQN*=W^EvU?Zf>njYghkmikBg&w}lq|zfo&+W^f^WpgKq4EBzrbmDH`t4z1KZfi_ z(~VNLlS=b>OTi0?cMzQC|1QM2zHEP>rpNl8LGe!)dj6i>JWY@O-$vyYYaH$H{_!l0 zqrL;hvsUmG#8+t??R-W3{0fbuox3q0kgm}<>Un>gckN#m&J^QJd7j`}!?^I?snej&}nUuqod#q;ye8b|%T zq;C`tE0EB=5d5W*{g%XW73=#N)whq}XHlF}1wTZ5vc~aHh`O^eM{wAr(pehU$ z>OY?e&d1^33O<<|jU48F#r>ocar6`W=c{BtQSdA}ub3_D1j&A(rVoJ~-oMvq9PR&! z?9>V#N5|`{G_KpZSmS7CE9oyM&h=t{b_x9(q<=v0Hgw$lnBaqn?-%xysJ^cY&gbv% zX?D>61Lzo}FEoz+FCzOt`tT_FoFuo)ourQy{1f6WH68-{Ty6)AW4WyFOq}DkllIFg zf}ctC9jVzt`)YE6w`m$j`yo26og;W9@qCSkK+kqcHI8<6lD>vG`?-YtSu6Bklm2SK zljE=u!?;oKY~r^F`FU_&xYi^3jhI`Wo`HNbqxs*9kl0soe90{$kQ!CHOkx zcMCfeWaj~)zlQYB3w|T<4+Z~}`1gXx@_7(_&W_{Lns_h4I}jg29NVii{AEyot`@u) z4MMs}aK65MyWq!BzuF`C&s6TGg7fwBuLNiN0s5Ra`}r60Gga_DbR0Na@PCqiq2PRc zxJ2+9>HO;w!B?RJkgg)maSl=ULK! ztm)M}L&rDY3eLwv{5f{E^C|7m+O@}8gg<|hP3J+~G>-Ofr}?zM#?jBw6rVJWqy8Jx zkJ32mpCtQ}HIDlBG>=TzIO^L`Jo7Y;dj5V$k;YM<2!EK)(m3j4X`C$5IO_TS%{dxJ z{T|Zu=ejX&sDG9GUn}%)lKu*fqkaaB7ykS|$KRy>eY>W|a=Q}Wt#Pz-0v*rq)i~-$ zlm39lQP1c5uM$T$aLTBMKTIELJOJy{DbD}Y?1WHA_5E4nST29=H%KRvT(1MvEf z9Cm3O;~Y=z@}S1i|JTU>M}+;qQn`N<{BjycuW5F$+?7=Bry585#nc{O2!12+Z#Ayl z31DVO++J^yKAJej8RNN={E64}A>a>_Kbi>;`<(*z$(yszMMi4P{uD z`=ebN$3_1AkOu_k@6S9Ycn*CZW}n7&`v*0Si`SF>E#lJ84>dj7SxJ6=rEy&RiR}C= z_-M=osS$1G@xpeF*EnXa51|^q$0zucA%%^O#HF9zH9blnCO-#g9PNLC8zBu9c4pIc ziJ5}0CtfCa3bkXM;Cvl&z2MK#JaC)f7TMn`csJrN34RTgdxSWT(>|T-dVMeWbmB(H z-p+AjJFSSbou#BdN$`!ty9hhClRpClf01~m;N2+>d4ea=_+3t%{dt1QT`l-Oh+ir= z?;qFu*uO>STjL}RX?IAy8792pesI3MYCIIO7m(w;mqC8MCU`FK9|bQb-k$trJGT+< zN*q^JR=N(*SL4`kE6L9k!M71l*SKzHoW{}4o21Vc-0T7yATi!}`VjEB z6zAtPj&`mlJFf}8m-u^vzfb%V;wIR@a%WSyKMKB=#`Ou*4j3OSH`oAw;DW8%^D z&hZ&R{&ype?xCIDC&LS*(|q))LVpSAGljmG>`&J8A+TFd<8H3TvE0YWPKn?j5iirY zZfCK^(N4>5@B(Qiajq}_6z2t+J_Nc0_+^&St?+Cw`0IT<)F3x!fjnJ$%2= zpHFrU2tE7xiQwJH&JoQH`p;ijG$~Hpj<=Hirh-39JXYhnowgdsIDAL?PQF*VM7V(D#XZzgW+5Y`x|B%qHCOaPzXFdD#qu`HGKWt0= zi}jz9{k}dtOK=`96~voDOmIB%=N``%dj1{Pt2I5w^A_@dlg9OV;1-Re{vFcq)VMwm z+^2EWw>u49ApKeJY~n8y=Qy;c`);2L{bJI8{2C zXQAM0h%XYH%Uwa7%RNZtULo}NlbvgYp8dR6@Gr^EUd;~rpV|aoAU&&b^#66T|B~QF zFC{l#*LVmJ+j(E(Xs0LX|3RGV)q?Kp9Y_6?+i@c4TL@l7yq(}|zbkRJe*)PbBJ`Wc zPP)*uKRJSTp}18EK91~P>ch7R&g122;!PnoI38aJ!V9Dqg}#F9eSfV5K>NtQC*GPk$LCzKpDgqv5+D<#{yzF~Lcf{xJWsIwtz`cUO&&$>P>pO(qWyz!*q3JUIdhze!->2y@o+BupF9;q(ejXBhGx4tkZ$bT`EzJkqZ}~oZ zSHbJiF-S>*^Zn(ag7bak5rVV-V+H5?p*+8`KQA9=m%Byi|3>|Pm*9!CKfRB*jOQzw z9{c$d6#oweKe>-x?)MtU_;Z}2XLM*UPAh>iF4eFTfs(1@iad%Pvy_m5J!JP@K-_Ydz!}4{w}hgq;Xw8 zNaMPG1aT}^pWh~H9QzylvryRikjky}(Vs8$9r}YYNSA0l1nc}cip|2#2>KkzHXr?N zjbpu1$^JuvFCqS@#`SWa);QYPP5J}Gxm_yApF@IIwT4WPct6AX8q&96A(zhqh z?R$vYx2ML@pHIl2euA$bpo%qy2|jV4%`-F}0>t*SG>-OJKTYuW$j%(WHx07wmkM4_ zH)d)C-$T4s@T4KOoePO`KfJ@n#$}p51Z*zN|C=<9{{NZm+@#sTetVGOe2?HQ>2qa& z((Iu9db0nl#?k&qWd9|>PZ|mvA-%5g5UjJE_ce}o(n$Xg!3&6gPMrJ6Y2;@U+HWw= zBHlsp+lcf2iu={WRIh%d=lSgtDtDORcM%^g_{+p6i*osM$ul)Q#^ErPTcUA{!%t+V zQt-hkuo2Q?jfY^J?X1)|+F3;U3yE`l7Srbdw+Q`q((e@fIpX&U{sr-eg#Arq|A62X z^!dG)H9P2k2m=o3BaNf~Ck|8C_?O`M#J|#b2&8Q1XN{ws?W7OV{*&AHAo1pcj~s57 z+nPAX?OgKzRKXu4K1}dF^!c=G!Fhb;34R^*&t)1v9$cxj-7!{c9LMiFq`zL{s9!|- z+cd8BQ`9bx34ROt`Lf1QT0wT+*Ergz-Lmnm#&Q41^O8mTJ&xNxvfozYXg?MHFrBP% z-Tokr>-IA=j`jMG?B{44?c||xNQHv8vazvLp>gcb2dIC(qwx@M)_NIa%ZA&ugjh0x5ww`@`Q)=&$KRpnI6& zFjC`ar+FH@K$;+Uf8sL)KZE#e;#@9&Ut+P~UsHTmXm&zS-eL0RQjMcOE6Dx^!EYme zz2FCk-%OnSX+y_Fk7*qH)g1W4^t{Hg|M2$>{vqstPWC_d(FX@8a|X9B>*I-|KiF>% z+cG1halPCgnw=16L(z7Iz8c5)v`)AAAdQCru|8ensAqpB66g5bLGf82^n=KLg^&I` zAAP;1*Xw(&#<9L!?iS4s`ag;4yG!Hf{~6@ZJsQ{bdo_-F_J1F7uJ6WHuo2P+f}hgb z=HCh4mw4NO_I9>&5zUjmG)_~G5)Rh5K95b%IL7CIZPv)qIL7BQvi}F-*snUnUn=}z zsuOyC&ftxj9^5mDDcJYaHz-kFf2$q;Xw;NaMQx zeT}335ZOPXanzqp_P^G+u5UaDM3A^$_URdyO!eiq{cB0tUsV})c-{K z*N9_0^*DT_af}1|b6B$z0zQ}g;SbL7e3&~DHbQDl=V$Cc>ti&I{?w7amBvHB`S-WG z6X$m49|%bF(GSr$+JBeqj}W}wDA))oQ{y36=W?fL9PP{?{S4ylPuC8x5mK?>rx0Hu z_&n|pf?q^@2XTyBXZYLM2(82Q1EEhP`!8yG^m7gQ`L5uf5&uZzXy2mi1K$h#XOewu z2$mlHoeKV)vUrVSx#LDFnbB6`AwaC}q;Xx}jX1}1AZ~;-T7cELMqgF z2-dmWGL561vq)b>oc+0p{8=UVBI4HwehYEFKEZZgr2g=n(C;DrTf}*s-V8or`b6j- zCVg~@y`B5XR`UNu!P{rrx{eyhamwGjJXPap`VXW})Hv$Tw9OcN{e#PWmGqgK9__@B zwKL2YJd5~3jiY_OAF)K^Xs3?!%ZYP5|4DJUQScyrZ{$hAe5`TQA0hoeG>-adw4eG`@hO5m^ zyDuhv55eys-b>?Xhx_?JjbphVkUoVtw@arGY=m^C;DbX78`)`=eX5`Z2dgqT;CN@HZLQN`gS%_uZxMZzCHD;I>BEHD7mplaQATiRxgw|)2rg7fdueIodZX11Zjg0uch!G}@1eCxxFG}|8clO#OI zg4D=|M+;s<^G~b~Z!P$@6z3CtcqhTfo3=kE`|zHEUrhB)^5Fvo=jSvG_2C(U&!zZ` z_Tdu*?`YZnPx0Y11^5l!INk@kl4kzqID%`sF_STEW?$TLkC&?h?F+)*tlYj|;wl*7-Um$AS6FLSIGe@A~jh z1^)xBf9=D67W`aVZ;FmUVt<&o5d1=0W}M{1y9vIY^vOPakl@_D{QK6p8T%)<%WR?N zcH!T*mim=K&;9%oAI{H#VLNPpm(brq^}1j1yNEyT!=DlSKGJ_8INLuW_`Rh6(T6vt zc>*`%BHQQR$!7jA**Q(x}1fN6xJSaH(|G41n&mqCTpg4ad_yDs1xexzd@FAp+qWuZi zH;p*|o-uRwpMSrcd64wU!prR6}$7^vov+KArS4eR!VWPmsRchc6cVebU$Y@QVcJal+4)<9adQ zEc9QKeg2(z)^mG3CiIt*{#hS>Q1Er6f7^%ibNsm6>q-B$&@<=fg|eRg=ijYo&i?cB z5}EUJ7JJe0wdDMJy3E=CRH0`+MsW6Xx(}ZtIQ!4Pug~Saiwls>5qjSLT`YK8irad@ zc|W&FaPEg&1!sTwcly~Mj_1=t&wd^hoX6>#g0r6=3(n)~UxM@a;^zRcKlf35TGDw2 zbM~jB;OtL#!P%eQg0nw^1@A*~9_ho!3qFwaGktiT;QajVQXgI|_$ac!(uZFlI6vQX zoe#f8aE?DeKS9QMuh4Ux`FCMi&vEA8d1cOVenZ&da^Dxcfa-f#@CxGJ2wp?nqU#D= zE|1e_!MXqQ^B-9MAud2l5PGifAi=r5X@YZovjpe*W(&^s%@v&M%g-fbKe@h@LeKR* zTkyLmKIaL3Kk+q!^SrS^@E1tGS#XXgKi7i&H0U_sF`?(9|YipCy0(5r{Ir}{yQHYpzCv7uS2Bg z=Z7%o`kpNGyQ#iOKAfNH!gkpIQ9{q0pU=p8_J5|(GtU#8{paVLu$@QAPkuflbN*f% z|1PiOw+Z`vyuQze9}t{>-}N&e&d*ika^E38o7443$xjgcL(=#2;VFWDPx_fYJWud# z)E`y|&hbBAaE?DeH%9vZkkGR~`+fLxg6ESz{CpU;&;9cYpZ zdhzpQn6v#;g}#*R^K%|q&z$dXFlT=1vf%6w|4t;^2~r$tg#J|G{CPmuGrvIS z6G+d`Az}R>;v0p27IA(a4(sEH@Ac91^GR6G{e+(*$=syl*S`xp%)b;oNb{OO_np`d z^Pu1{r04IIvYvT6q38YCDLy<|aQ^*se(nm}=ku;?q33$#`tV}Gxn7k%{A|IwUg!Dn zHG*?}ukqnG3eNTA=fiM)xn55QJ>R!|L2!QF`RjsTO~<332)>8-5y9CXelCslr|t0# z$2`g=%!f#7VvUU0V0&p~4QTwng(FXnt*iJx1_d>56wU)bmRz92aJ^Sa>d4?ky# z?ep`PeinL;L$kPs?a1Y}6rAnz^O~gnK|;^<<>xp_{TV{f{+uZ|`%@`6`@_$1V*C6Y zs0~8T_HP!P?e7$v?elY=r2Q9!p6wqJobB`TN!bqD=jTB&XaAcuZ`dwuzm4E*zoX!6 zpPvWC_W5~I=|X=B?PvLUP^^z7Ug)Fe=RUEX?OY)A{CkP~+$YxabDC}w`b()?e(sah zKP&V+FY)uBr2dGHo}c5ydY;ExwP+ZBey$Tgmx=X!{f?je$^2FFKSS7I&c7eV`Zr0> z&t+oH&tobRcAC=l8h$Pl>-l=$S|2?>e~I;MXSdK#BK!ROCD!xvlK8ot%=ve{-Vt_~ zeZH8lhi7{AM4%Q}7XV9pQc-{)pfUNdH$K{*vH3>3HiMAO4Bp_mKWeAO54@ zFOgn<9w=V=WFAK!MC7==NBWa|csIfMc`M02e30P$yWITTBrccRD_7{3QG1=~!z%?} zMfw#!{CvSV{+IjkYX#@{^Y2cv|IF_Ydaf@&_lfmf--ANW{=eYI<7;N0$i_ThgKocjYmFOK~gM)Tz7LeKlhpL}>!n})|@Jbs(|@Dl{*{?Ofr zCkoE(#m`Y?|Cy%?J-63*A3jZR9=~&a_KZ~CS$ojXbzjYP* z_lOVm;Ufg+`Dd2k+^^;d&hyC53ka(LD8pfaXU41w|kCp8lCOdb{(`fg!vtqP z`FWmPF8h-w^z2Wm53d&dB5L;)KKy*a`ST)|`S7a+zlZE^@!>lJ=lI+wILGH!bIO6Cin;6`{9h{ND9oHe^D54`MO8)0mohPZB z?vjk-`@S>(pY=()Z++|3bI(2Z)~%(h>Yl<6fxGPCPom=Rr;pj#?=MK`|z()I^Y$G_ZFR76<;p(wMudLgZFtLU&IIF-hyMC)7O;_;`5H;h|i~r z4;Oz9C=Nd{9xw8RKPPl*Twm~~i{kL-bj9J%*^0xT{))pNj03FwnWpUF&s@dfPm$vA zr$ll1bFJd=2jdLGpT9`G->>X<34hdsZ&utV^|H-_zp8kg*uSOt6~aGMyh1p}H-`VH z-`HUE`faT^;?qI#xuV}yapZfZ;)v%k#o^Cr#ZkW(Dh_|9D-M6=DGq;%6^B1d6(1_+ z?<*9?eR99^;14Jc|FJ~XJ!MM#@=Nk_lvx^;m`~4U!Q7k&g3)ea)D~|Ki?jF3C;-lq!7USwd zAAGQ~&lmgA9(WwV_fND6n{>1^mx9w4$xcK&y?-u0>xoJMRC|;ylD7?@tPNV*kfF1 z*hA-TWxquH!FbWyew&9q#*x>=X&rW z#WAk#jf!6=I?EM@{#_pYe#N2xjN*qy|0TuGkvL-;I%ylB|tzD$hg z3tlYod`0QNewX5~f8WL3etzfT><`9q_MO%^&d|a5((niNr+V0@DGvK|#i2jm#oc~l z+-aR}vCE$QpCj?Xc+RlLxX&w;{h!7DcOLu!#VxtNO^=5Q{hi7l`fq#ij}(W#FQIY# zq2EGr=pX07Pf{HE7Ji@AB;P#?Pq$}U#9r0qO(ZxJh_jv+=JhsIK~CW zxYqCo_w_!c?4iHWgFmG>^fBHw^l`uJ$I8C`KG*Jz>kIbBC=UB}F79sU7;hK(V!Y|I zUH070p@VU-wf$rddyJ2*?XUE(zs|+oeqwxVt+U2u&wgTDY>ame`v;}oUsU!V3CB3t z+Wrd<`|n)b?I*^sh7QJ|#`w12$QR>dgTwy((;L?>>@jY(wx8}{KhMS8eq!8gt#hNx zp5wV&;)8LjVUO{wA6E9qNq@E3gFmBqw%kAZf#T5rRB`D4(}Vw@IP_0Eqj5Z;e~RMJ zPxRn={9NddSN0eec&g%EBt95V8}WqwVh{W474IoJHz|($r|lQXKlY3{CLG*6aCJLzahN4;uzN$ z&vzAHARObFBc8DL^=w?fus_zt-R&0RjY9|Hh9|o0x!pnsUT>EdobG5)#Mxz1(J@w{K+gK@=SkMYOwGl&1spP=la zKh1;BRvh{m&m8&~_Z;Klf`}s-=gf{&uS08 zMsfIq@y4MKj`3%~+sX41Zzvt`_Z7cE?wkM2gMY2~al zx<4sCLgKH-ncX1wVLz+vpA)XfpZ!Yi>&5u9C>QSE{ZQ$=A@_amQ~dA3F>X9`P>*rR zjoS&vXYZ)^pCk@l6-V4K{=C*7uI!;dS#ju3Qylswio<_B&g=m3bD6T=ApADPq5r7j z(BG^$#;M1+_qx3AD|`6!z2eZ1IlFQEp^x$Hp$~q#vR@|U!ua;uevGm&7JH0)ukDLG z>@n`WwqLI7;Sa{Khdsuf-=OSg$oBG#;%Lt=DgK$XXN*^`^}kT|Q$_zf#i8%((>VUn z$N2WpPZu4G4+{=`j8_ki@$N%Pzd-ySuXuks7@Vs3NZ}awUh9`Cd+6V&IP{k*4*f?J zA0d8jRy<$$HpQX;s^ZYcxcBfM{rmxCkABiPr*XaHNq>lOV4;J4@_1#B=LAkxe2Msf zrsAk~i~|dOlndj%g5&=6;Yw$&)YoLiF`nr(#W5aqp5hpvbiU%)-`%V@;(3SSLuCJQ zpW?%XKcx6Q!Z#{@zwoCNM}57lIO^+l#Zg~-6i0pSRUGy8mEx$c!-}K6VpAHoAJkWz z;;63+k=0kc(3+OJNQy@ zw1;mMM|+4lw{iPHduXM2SqI1N1P|Ux@ik(9rUy?}9PKSlakRH|#nIj-DvtJciQ;H) za}`H>C{i5lVX5MOKi-MM3dIi#-=z3X;ZH06y6{&#_%6lKZ@llpYZZS&+RrzNqdgo^ z9POdyd5zlxwnvQTi*}3cD@oaRlzdYZ?{T4`->*30f7pXt{TkQ% zBB`&F6^DK|#bKYOcpuS8R~+^;6hA}ka}~$?5pGoc0kL1MIG*R%`;tNFoQN`i^PQ_vWhT`z&YsF#zz2eaS)%lI<1^q)8#nC_XP#pck*@~lo zNL3vDLr8J-4;arE^$UOIDtq`dUvc+Qyl)RRlHpG)l(IR{S3vQ z5dFo9$9Hu6yH4?L!f*26zg4_k?C$?{kvl$7ID(zta>){m%8^MT(<- zOFa0silcs)dGOm5NB!RC!5>l_^}Er7KczV8cZUbxtvKrOLl3@Ban$c24{i)@+)hxx zaUT45#ZkY#6z?MKq_5(r-@zU{L-C2CGf8p8EmQFq#r|@|*9*T!aoFGK!S7WZ@n7e` z*DH?rKkLC?Rvhtv%Y%QYIO2aqag-}|NaOm2|E)cE2gTukHxHhuIQ;MD!3Qf2|1%Yb z|FaZ-2lc2p?5|fG<-Ns&->Ept`v(vHC&f|T8V|l*ag_H%#i6rL@vhQ;9#p)$@H)kz zf8x-_^$z`06o-B<#i8F z_@(0iIK|=rB_4dH;&+SAWs09Haa*ML2;ny?o+A7X#bN)r2Y*uW$3*8%#i8?o;unkk z4~mxxZx(7?U-t-at@!=IJ17o+&Q=`y{S}A)2*sg4PI2g8rucQ@&mzTtC%jy7=-;3? z^zTy~??rk@@i#?(qX&OV@wiS-d|&q9uPdG?_8)rieTttW_TPB$BZ~JE`;O_2>mB9o zs`y`|ygfbmIf|bl`U5@qaK%yH$sT-~;_&|p#o>RM;yc9u8$I}P#e0bVcX{yp6^H+i zd+;X}hyQOX4*x$;{B!aDA0GUlibKEc@aXk>qTl!_%v2n4 zo25A3&vlLBaiVj*;%$WA;=%7!{5Y{+uXw8P8pWR%{-Ou}i{gJ5`!5xT{VG#~%D2icb^!!yeqqaPr4>s##(m=fRIxJXh?K6-RmdDPAXW80Nu8 zD}J%)U+BT7D~|FOc<_aa!~fqX4*zdg+$aA0-h=;9@l3Jb;K8>l4*y^E;D1vb{vS{r z{(q-@;8PUO75xQ@Lw~X2(7)b; z-=ui1=&w_}v+(tb_Z9xM;?sn`sCbU>PZUoT{<-3Vg@5b8%~6Iune^$S|6xIU*665s zf$*-1hlTg_;O8h_EcO!=hyKNiLw~jhFHju%H!2SO<%&c9E)Rac;?UowIP_mt9Qtp1 z@DCJ+zA@UV2hlUXBP637=k=;F-)UEi?J<^)ZC=d1qx zv_-;ui={P#oh~rz(!|wL^-Z zB|2jiKU?@@#W9X{fs4DhqlJn$m-3e??iap9@u2Y4F3$1sOD1a+$GEiX6vw!(>lMFL zbap5Xo!yEjm zOm-A&6mKDXo#L&8uU9-t_zuM}KIU%4Ul;p5ier4ty^6ml_J;H~sIQ5#!T1%=6dtcQ z#*b*PIL2QHDvtMxCn)~dvDA2JN>Uu})lX3z<1UR+9OLgyR{Txzf12X&2%oJu#(gMN z{FY-JKbI)}Tj5I;$M^*+6t@o~NNTm>7++wG;)p|y;utSryW)?CKRXnETKI0oF&@Ew z#ZPVFl=qP0Nx}{3ztMj1{%7n5!14b4cxAu7m80KYalHRLsCcThlLW=lu2L0;KOx2O zp64-&!=K5D!=Gu2j}d=nE52HIsp9ZwiQ@2Qsp8OIp*Y5~U#<8O$#;$7@TW#`__JMc zysvwQ;_zp;;&@;89>w9$Ud7>$A^j-Y$pg}^upb6rCp=!+<9*BR703INlN6sU?JY%d z)O)Jp7=J3HIL4ovra0bLJX`UrB;NwX%Y|cHag-PDH(sjjXT>?&%L>JFg|Ai|?_XV` zINnFPPVqAWj{bVZ@gCG2isOB!yA_B29>t-*S8?bYvR^_RpyO8@I`N9*{iy8~$9qSy zUxofIDQ}9he@l3(;&|UbULUFu@YMtVEZ`FFmpXLU$%yeBGN zj_(lX_QyHpZLc`qkAd-ZVUPD?Bq)2lzamv}ye}f8_$msRB_xVzd~``=e$mF=&x72K=f-AhyHfOp}$A*)p#yU@tXEd zJ?>Y$K<;Ngq&S`zFy#0b^@}+86~}$`@rvX5g7%7|TtUTgA9#Y|c)lP>aXg=xqBx${ zPE{Pw--Q%!Dfg94QykB4&Q|;#iF1MC9|>QmIG*EMs(3qjer<)~9fYq|9M9jaQ5?_H z)hLeV*S0JEN73J*_xARHEu#I%@hLdkPf&5R&jiKMK5$eJ_x0^j9QR%CRUH2BR~-HyQXKvpa{h<* z1ONSs!~b~2;eUI@;eV3i@H0hm_?fCWbV7>bzSe1qLw~m7xX-yjag4{gQ1OqYUY05j ze^w}t`+ip|j{9=gC=UN?6vus`+ZD%so;wr|%6(0{6(1vfzXw00IPSwVGpg5tQZGD&gV_lR*RkuUCh#PuFwwAPQ(v7@zM{3C9dG9(m&(+IXLc<{HwN?`=D@r z8}_)5rK?<@1jqdYMq<&TdEu<-^c^mAzGovJlgszWc^pw`p6&a7t8v({z^}AR!mas2i1H5%||Q$Lfb3D zSSa>fem(?5{%C*K6N4{eYJaVh{9jCS(@5J2S{yC^{i3=%*IA$Q=UuSQe>t&e`ClR1 z_A+iXu1VY8Ps=o8^Hy`6mHLi$zVWGT@1X_J{NFy$vD{tltjYd!+tdDUAf`2WjUgNP zGqPXMwvUocwER~eb}U1-ieYg6d?{Av|1vSH$*WXI{-tu64(liXfIm9K{?>cU+@ zRb@e*t*8kfAF4_Xa^l#!9ieSy(yEP6)utt+w3pQgbDAegu5ePM^##o>mAP$Y@g!JB z)8NWe?6o#7X8W>3i$m2TVnTsoPn8|=7oEB$rg#cvHazgy1Y?bF$+(#CfXb%=kB5&t zGP5$=`pCXsfljHE`2-_WeMPHK+20R^D#yiCJ{778A4kb>>qDXL--aqb4|RXV+`6^a z`YLqqbAzoIUMcO8g?vP&3rv(%zNG+{9 zCU6~Zn4#*J(z4p5jPCDdn7h(9-sVglLe>3@Q1;e+Ljs*j$;wCzJQiwLaSM@*zB>Zf z{h1Q1kX}|}@+yHXTPfericsa&(7~OdzOM$ZyNONAL+O3@7jGO=@qD0s83XRqc`6O{ z-M*kORPkD%oOe^9gS$hOzFsv?qr8DF!_188Nv2b>1xc)4cEm>|^MzK--DV))-M>y!%&p(;NRNSUtQgK{p8=D%ocB-+S>-lNh*FdMilyODP!hPgM zxNYP72^Bx<@@E1y#UHjLk<^o%XQ=Emztg~|MGOj6uCd!><$RV;-_b#yuE7neHN;G&t9L>d$_F+ayNgPKf%@ZTcYjzsO`HOeC2x= z)pC|ne_wGHR8I20?6dY&JuChZs8~%Up!O8b;c`z4l|5;17qqDrXN9VMy_!}IRXiV_ zKpWl?7J6)0UD=-I{d|G)VYFi4+N}ipS%LC&n(G%+oE)keb})3turF%4b)Y;|p@X5y zDi)@awy)evWp(21_O+rWP<|3S<3x*^T3zJ}Wgj#z{VpbOT^C+ZZSNxjkG&SkZnr#S z?yCDl%2iWq1s;2T-|fgRR2BMSUvDi-kUW5bRN zrjH*6cdw!5+jncAY#QNE<@m1tP-SvgyFwajbz4KlqWcI{C3g)~k$Iq^8?RYy9~Fq_ zq3Zq=0%POx)NpJS_#1efvZRm0cE0E z)I#h9d*AtvmflTEdp%!!Gkq;ho0K*&z4A!f1nM}c*?bkc`m^1%!i-Q=%&7_Xn&n-$ z(|4~LuKDJnZT3mokg9G&Dn1HSbS3fhvMqKy2$XZl(yEqouUPh7U7)-r?L(_O!bsrwcIXj<&IG0-_oruOUOFy;Eo}d?Hm=OWI(SPr`=}nx4%pKopWrsHTQaD z&zWg`YZiYV?ikA6UwY*^W{W_1E=84=F@MF`?$WAaDHs(`QwYm>wRJVIFqx(`^Qw}QXX;4DSO}jf$~~v zui|J%^(E%WO553xc_dK&3N0EO*b?+`9PlKzWF48|rkv zQ(#{9LTwM*_iGclZC5U5b^2QCe66FeUawKjt)~P}l&s-zny9&Nr?0ea*K%{`srC=w z*VT=vPJS|NJ!L>k%D-VbPS++=#GOUFm0}U6Ydh30;{E`OI9+>$eB&x7Xje8x&Zs@~ zLtR~3>9?(7ZoTKE|1+PnvHYsJNO^A=W&;aa&Two7q0%Gl&0|B%AH$l;}1Sn zT1tf-yfaiC@`VC}w^r^ncFIBBZY$KC_P%s%7Z|!Dy?SU2^$dZsIJ$oE%~LUfihguX zLwm*ez+)}HdCHfzWE8PD>M7Em8+?3>k+zv#sLel24aEG8cM|ObC8I?!UEqk*_KkqRvci_5LNVp+- zf%31ZsG%y_9n+4I@3N$0$*%1~RabV6r|yUM{Jh{G$u?+7$DLkjE7MU-M{0XqHLe)i z-A(NP+J^*|^rg@0fz;l&hpJmurdKDwQnqCcIpYgdEGFSl_6t>8xPkN1w5l6k;Z|O~ zpsw$i;gPi)s4>a@l@5beRu_=Wu26Nmo6@V>?JCLjDssw>=?$EyO7+__i`i9b^mY@Jpf2=tP;I~M zECyE%CIgD^jmMMs+#i=cWu{lRdZqGVJBXE6bN?tM4Q0O;s-k@o8cnG3`WjlAUUegP zvD>cUYT!+7+cmtdlj0W0Q)t^Y=xJ%S?L@>4KK!W2I!K$6)ADO4P+Bsi1H9_L+ZFN} zRTMQ;s_ar$G`E%3XJ*$nXC{KR?N}_kruH%FP2Jn4-OW{{QgLZJY-_hZ+BWNU)Mj&^ zz_1VROUf3;8-emOC`pyGmwmTuWt+dg5!;dDhB_v`_5$v*oeiPyw}I-u?ClC}RkfqY zrS+7HQF{l=vi{9Z^*A0}7o~d6q)en3cFpi1+gr4Dp!_Zpsvb^FmX0QpAEPb*oBA!k zg4;{>cU6x$&A#80X;qt#aFhmDkE$C?4Sz)K%hY2AIvI4LFtz#u5;+hdvWhH1+24AK z1SI;rKQx=K=~a` z>exWVW=c8xuR`pwZgMsP|b}^o(7D~M%b!*o+ttCp+L~FT{DsVk*P)6;q$yw@}?HTFoYcHbS zj4NRxSp~{FQk8mC0$Y}Y(p+8m^Eyxk4E*`DT zCn4S}Q`4(U>?;}Rm7`)RcTyv5$yYM`bR~oSo;G)E-D`y^->uwA*D`9~JVcwRedsXV z9r{hQ>DY%AauBhB+M{#)u!U1}DW+G=UP>6X%gA!@k_VKe?x?+!+QUyja0zV~S)3c5 z(_?z^##uSECA*GeC|scpxpRZLIeD|fuA>@?W2?}H*}?qca4>)7j~?KVX}h#-LpuiP z7rmKjl@o($&kgNj)UN&N-*b6j){Nlv;@r7UhG$1{IY_?`&dHkketdp&>WM&<2h>NBC$#wEg31AlKT@rjHIr?W_a;UJys+ z2aAde3i5x>zdk2c#d5)a)e8;V`xLLFsC4Q zPEHX;Ik_M_J4m!E(FJoTJtK#TbM85W&fIW*kUGQXhMs3oHH=EBt@yJ3eDbFrmxneC zYPl`-gvL;~i~pgTZ+omFU&%`Amq)8ABD)Dra7PA-NpCh(1~ywejS4 zRZEIL^_A3B(sf+__q9*|)NLWO2_8B{b#*VUi2t~omqc^(9P+4FP3`5M*YDcQ&f~5&Y5SIqA+L1oT9Px zgHTT4(43qZ#+btVaDH}vZZM~?Fu(B3;H>;`@YJGUR*~IdEeeJg732h`FACF+(Vpyx z+OU8B;MgI9)5m3w9Wo|kN@m*Fv1wEINYehPjef+UBRKkr*;y;{laGFlX1kN=)AG}i z8GV_4`^)Fd#R#MW9$Mz(&DDsBX-2J#R-m>ODa5}}|M>w5oKO@)NFnK2A%$WAf7-z<3&rEh^V$4^`y=l%&tob_4 z%ywq{CVN}p%(Sv+!p=;bnM+F+Ix}s|fizR<%(OMf(9AW?Ogr-}QY&+2+MD}mW{ES? z*<3(oOP!hSW+lz6aAr=oXI48iXV^1qoS8H28Ry2i=80x^T4%kpq^Ip$jWg5B^hz$S)WO|c+IVUhD~ZMWxkcEGhTXOs4O6a4o0@cj zY}2+xo6}5dZeVt93H||D1nk`WsSP#mPvdk<8|tSF|3FUr+vHEb)bJ1D@;kNfAIz&d zweKIoJV^Sjh*8G0!cb01E}>2Jxum~GNy%~ex0H6u&i>%`(vIUwS-wfM^(^{`^>a41B?~*2cA;YZA7cq;<1Dd{Cu044ncQB7GqsnH zPzOpM$2qs-dacq29^xU*HPgSjI7Js6RLS z4F3dnd1)IupfUUtIlaOO{UlDWcG6S6pmo=rK)~={$eQs!XXYYyrM<8HOj`NkIx-5% zf=hS-UCFR(o7c8$d$G}+gTjXPyq`)jfM%RhWDZC27<<4nn;z3^ASpS?-s$zpbGRSu zP&A{+uukW~*!fJPUhY@d(414pmUY%|h}cE5ddE}Jsbedd)23ZC>+JIg`|Pk-eTEUY zoRyndDg0EhvvS`P8&*D-(>`bA^LS+^rdB^*xtX)_G1mFVQZMSPJfK^{%Bh@=aaK;_ zmHkf619|0RoRwQ!gNN6zJfv5{%0oHrG)-$5uN?2J9O9K*+c#nu=03BGR_<6xDNdY3 z`*y?ptdf(oCz9mJw6d{^m_5b%n~^}QpR1-hZ;ZUeuAexg^{*+-w^N)~8mlesp*m(}78x=9C7DM_ULi>Tlx$B1U5w6Lp`E#l zIFYeA+w9FNQaNUGk&IJpn#)#ZmMqETB|&FFI(?l~V3_mR!m+mOmTg_j*3@Jsa-u6Q zwI*>Ojn@4r0*>x5_Q&KWJ3I2WVh&@KApKLa-c@rL_g5$JMq`GUimN@%I&r9HgF`*J z@E!RERI?|S%2_SRUhPyoLdqIGlRqh=JC@O&z1v?&il=VxAc5ycPy339IVRyA4u@+p z2j%mMc%4eOCuMoJM`37Z%4^(ql3|>VRqvshGt3FT`2^17#)l~=3G^UfzN;V40CJ)GK`)qVcyB{!nCkH zCQHeKq#|0(G32Qif0%coNcPQ^=ACS2UeKHBe%epbz%FMQFSUyu3uJ9)mJz3lS8ahih0 zU2m+PyW3bl_nWbP?f{)I#`+LywtcU@LU+-D9+xH7XK&WDtdG6L#rjZjee4Y^)`v3o zX92UhkGEEy&gYL$NT#6?4d4j5Co|snZA;oH_$LsaQu!n8Dw*S*i#^%58c=E_*`{rP zM*U*D%cjLo@Z#!-#qo}a@is5M6N?84b&jTJChb8iGK>M-b-5=q=sTT?((N+gsk|`l z@_MTQC)FpN)yxxpg}g#{;io&;Ft|_Q&AEs^$D3!LVP4P>AETl9y-N)Sk+u7S`k6)z z^Qhag)#7-c+K}zt2v>}~8wnV#xvmGZf93}JaML`U4#S2}wbA7L)KJ=V zH`&M7C-VyD+Q(~@ur+zk)@*6CW(j8xk!jASH18oY8@k<0?xO8Z-kkRPhU9y^#X7FU zIIg@z>#{2`E?1g4uJ8e-8EYRpvs=w=w}#rS(mB5GHBe&?%&Bm~U6{XB@Q{ zcIfQ}hu&t!JEnKo;w0+IoP;g+uDy-K`uWSzSzzmoW*suM=Q`S^3%H(6;)6GHA)7m8 zTx1J41?%AyY!j`^1?%A|SfZ<7J?jgWBCyKv?T3rEdQe<2DFm|GBNv@snnkg??Jp$#l322dUACko_7tBn63eM?wwKZT0NzI3 zllh@}DV@o6d#O>y?~=K+4aBF zNF!VNgJwPiQ`xn&ql+|Z>5uSAG?^8quN{@F2`wF~{8+R4ik$kXEq%4^5V>@fc}o*r z!YV)J(zUGh6F0sO;L?0EfsT@z5+$tiV=i@It$)EK_t6jEVa*er3%t!TI072&?#Jql z<}}4+SpS&IFa2vS8zbC4pX#`5n9Ixr-oW8=#8F#G)T6dWolhzWP`Bf|itc|BS!1Hj zq+=Ng>gsAn@L4n_9O{`*nvb$K8M3U~AW773p|DJwRKNNFKH73m=6mMd9Z2Om;iY|#s$E4id-4nZNb~EGJ|4aMK`s(1L<8R1w z3UtFk19kfD89LMbrttxCeWmk>{utg>`%2i63;5%0a^GpeUa}OhNyCiI(w9PU%7O$7%wIwUV9DCufNFx@j9>$Rs-YsV|TFt&(ORJk> zmi?sF#%=#sR>M)ZIkN63t0lP0#^p07PvF>im#co$dF^C-tD}one3qL+jgT*~j5Vow zMygJ{l2nJY>Tr(Ka63xTBXq$dKkk4>U`Ky?l-1CY8efs)Mq`x(CN!DZv$A;rAwXSa|~OLBicebe27fZbzEfWn~bzoZ#k? zFz%J&+o0$!tBIXgcEVj(xW7u9v|o8V=fF1*;U*!;;M|odxOE4&=iqJ}+0OLTh?a9s;#h`Zkk_RlvT>v9qiKCH z8LJs)YxC5&wk@r=6XPbF(AtcrzRP#KVa1)>^1PPmbZl*PHCnbjpO({429l(`XtMxO zs#5-9tLCPe-qxgqzq66vwkIt*rW<9^BF5z9ti=mkCXjH)X7szeogk}Y+nQEf%a$;p zTi}s%3M~!DY_s&XJR1+c=qH43lnwpnLk51wQ#NROoOxOY$B%Z+Y=h&NaMs7$88t&j zC%7^qf7-irXto1oB(n4y7ng{xeI=5oy!vS!f_7o391TV%CA(%$rkS|(w#gkjQqVdj zngcpu&GfdxmdUn1L0Y>$#+}cxv*<#5cjJ_XeAt?Or{^OYY)?%zd$nzCwrQT)e)&LK zihkwl)s}w=JS~|MB$99v*^D(OoG`iN6kDNtFWP7k0{rF(3lSR+Q1#w&u+oXnAup{)-864)>vs|+z)Vm>8yfnF?bUb@@eKyUw zE*oXjN3x;zz^3%Gq+J6tn}U*Y%=)@z8ingz$LyAY9k_VZFxk9cOS(|rUpx`L^Ldu5 zkwZGb71CzBMruonFLm2?%qcOjB}KJOb6zyaNz#Q+sY|;gPF)UZC<0x4Z72X;?Q6)L zZiR5Wk0?ler%O1+&EZ@@eE28rg6iCMFvBS)J2cWs(xnDhDQJ5c?OKOs$8dY-)z)qg z7jW@--LY;P2IIs}+O7w5=tl>9;}Z=|_g4WFeWwPE%RvWnB0Ks zd!&YhY1DV`fTpw8z$|~q81%c#DmUSD6vIf9`W_LBOk*mN_-6U>QRE{Gu>!tL=L7?@ z{B0T&-Lsr#`3s`RM;PiAO=Cbq_urUQiS*a4r`iz zum90JqiomB=;!cWT_bXhVi`4z5&c9A>2->bYi3+##75$%xkO0%Xyv0#QJstEj=VPV z2t%D+R7c1CG^@z9qBQj=+7VV>rHL^7X*qhyH^sG|wuk)rJ3gPWKo_2NluhhN^_o$3 zy6kbZJ*<8C&%J(=4SmM4h#s=Z8M|}jbkt@Wv3)hoDpEV5okiUUBdoNL&nRB}Q<+}R zGK%vfI-e*;S2e}xil!JXII2<8!W+d(`)wK#M?g`K&nQ^jgf;(T%p!e_=wKpEA{v!x zT%xVK`mYGXsLeLQO3O#-Mxyk3UR_#58GkWs2ym1*HY{{fQR@3Y6=~OxGfI}m+#KT% zcJ&9l`4dhqF}j?xCh|!6KiNzd=|45}P4g?VG!gx*Wza1k+U~y^>cTYj)F#S)Dhi6G z)FlC~G&=it;`i^Y8+pF0%MfKxt4*R6DN4)Ht3^2w z(k5-_H1cQablcEL?*F1xQ#@~qOOX*ddNJA<;iDF{DS7{VI+razTIidSmySiOaX_P} z^FAZF2}k@#J$m#RLys!c6q}~HZ5btzmsE8Dn=1CR#b9(3VsLburn=pv7&PsW;XlGk zS6`HF^1tN}<==9>32}&`|8pYkLA0G%G}hADB_(zD*ZnGDQ)p?>?Z!99crCPdW?l<_ z`kFr?8@&WSl9djN*M{oF_4-ZQ>LS;QIJ#@Xafsh2Sz*RrW^|0GmnP_IlW38%jDpCM zz9@~dsdhTgD8G$plO~>GwlU}l82h19Nk5o_y60aZ|XMpv+e6g9d$$U z8ArEis@qN4*Edz{XN$p*CdAcE&l-g&dlubYv}hQJ;HU-g z8D}@arvJ}k^RM{Tq!!VHSVX%CnOLKk&MvzgH4IUt{)P z-Vs$A<-jHiYT}yO2d}Qci|h59)|evK`YFeiO*r)Yzd2f*qRXe}n|2&_^lNNQ(fMh4 zH|0uIQ~dkcbpHQwr7A6AYu44{GmdW4)Q$1y+DH8>`^EqA{dL5qYZ^Zh(e_biF9^8BPF6uHkE0u7=s@1icpJktEt^nv}UHYn%q+KivROY{NLyJul383+qo{mPY(9a?MRd^L;Lzm{WgvW zo#>ZFbiIvD_$h{E>!Nkg5w}q36{Fln)MTwD8%D`Q`w_jHiq<_gjcNV=$vth9le8#z zqyA(RS(J!7XMaZRh!zv2@_x>Wk9sKkZ^HlGh((;+M{N%gR&>Yy;z&pTbItmZv-G4e zP4xV!Ys#P}%iL4YJ@ZTYmk9h4fnOrHfKn0`lp0VXUxezOJI1$jGUR2rh{-EVTDb| zmhzmFPf1JE>etH)JG3ZF8c6c6Ursu!s3@nf!GvTSp3T}$vfuRLIl18;bMnq-U+9%G z&f!0$tVA|=4(HTxN(FqA zOvVK>X=bnC|ET@VFIz3H+0?(Nr!{+~73}9fCF6$G8Laqcf9IPv`)8As6+d~|Cw3-F z?ay3m!bfAvtYi9F3x}s$$0SInzIL?LVmK!&?D_na{8gN9wVi35yz)YxvE4Ld z&$mXeonmeEt-a{>ky9>Ob>X?i5B6Tw-wGcXQ+7eyNh58`jr3_3XjA`A{sEWXz1pVR zZA!x;)52KmjVr@e8~*_-$IpeUvHC5viv7c<+!AA1>#q!t@FleS?(_X@Y8`uE30d4_ z?ece?GBst@L$=sQF;=Yg&XvB?%x`Gn&DH_y-78mGk60gBFJC#Cz9*B;_A4jTvZt(T z{4@PYQxS*xv)0;&X|7!nsoZeo z+7YC(%k=dztrts%Tbs>(ToW&rY#-=f=5Kqmy~ZcLrB>xt{$2iA#n!97wacsxSNYB} ztsBVpqT!_8kCMZ!?@F%mZ}N9`R@r2&%r7opc*cVd7F*Se4_KG`SNiYr-(%HXNg<4} z=KFfmE2*tQ-`S@BtNNz&P_gf*|=9)`6?mzBzIJ+n-v;%$(w% z<$usR=77J?Wecnu7O(XW%j@qiwifyl%rTVke_$<4q`FDmY@K$EHD$P!5H7OfX8K1w ze8>u2bG>7Fs>?LR-^Lo@?`IVr*levZud())^rP?ayA$W%c>eMcMb@!1{mT~mmoLjW zcU5t5>iBEvS=v>r{`ijde2IT;*&hp6S)KfotsYcxYv4xz`Ti5E+5YWi*6rq6E4-4{ zwB9N44=>Mk^6lp2dxTx2Z6eXSeep``O)}ts__tGuKQ^gSEo(zb_{JL_rTN>;19m1i znv_f0cI&Ri{x(qSZZ6>hvl<0#d&x>tX-V;<)sFLxFllb?E>4FzwUSbgn_Ov|N_KI? zV|q~gY^0x z(=5m;q=Ck$({C7Kt1u^r<_mHcx#=L(b#`Oi}SL>bMo_wjLb~eYU6UkLwGzc zBeQ6Beqor$5s*DeX8P#N-2CjhnPJ|e@O#afkU?fn-V744d-u%gY-7yK&6-tY6y@a1 z9hI|yc4s-Z?SjHN;T+q#IIn2Vth^k1=r*I6M%LpO%-i zfE~%s%4KmGSS*8N?ZL%pm&V=<8#N&~sBhok*@?-CNx`#{di6=_lhilZV_vv8FQ@;k zoV=XEIoULuRhT`yKkaFI^hpl(m_>iHW=s$E7~MPAgLY^Avq_=H%rWVM=(8xCl|8oy zWf#uL4(Aur^1^%?$S{-N7*Dn|M4?eM=W?fPMOpKmqLDYVXB4JTK-j5VS|MnEG%7L~ zId7x0LrA$47i3P)Dk7=;nKO%WC={79=)H0jwQ;%m3v#G7X3inG{D!Ku$5`XsDQ?+z zrH-=)-lR2)@(O5Q9G;n(J$tT^&4DACg)`>Nn!|#lskXCbIJxouo2oI7#%wcqq_rYr zCbydG*@a;$q8iYRe9q1a+x4C~b6$O0qXss5`lS@0h6ZI<2bpKh&zh5K6xv}ldd|+D zm(z15y+?0B&Yam<`8^lp7tSpz$jZ*?IeU)X0I6zdV9P?vK8p%GFMmdk9J-v9n`=An zw2Ou^6wpX8Q5!FYmK(^U$8qyY;YQ1mC@Rk8LFxD~h-#@Whbaa{`-A z!wb?2`)pIYnw^?TAD5j++X3NmPHagtXI?>=wl^MHi?CffV_w!myACo7vS#!mf9dNi z=c~8#mF#?-Z3o|prTEvI4CjZlrsw9MU2xrTsXVsY(W6I-(`ki;S&Jk+ifVzQ(5nxH zp)fz6Vj)e0y)594z%HEKFzk()C^sR)+2HJ+fJa$uXnr|`!*ar7?cT)>884)k#~Tbc zyUdwf^LaV5vchxbJ5|spnYZxtakC1u3T7Jxc01zk#NLGXz|h%N8f_+-`MEPta&Eap z(=&!hX!<1EEtX|my%%SYm0K`7i>>UooSEqyjXECL!wK4%aap+sG3qmPnw{NBs3e8i zc1WD2!41uoi#>dyol{=%JSsMAvrgHj=Vs+`f$Xl$)^kEvp9hC&Ue3Jifrndp5fZk?ziZXJx|@Qs+%KeH@J<%Wac7VmhFnlb5Ns zf2U8Sc0>b%WYTDh#q;tE8q$oqGK0s+q#lRew=0LLeEy8AaF&r-oL5|w!>v?0c)P)i zAI^A=!v+mHH<&PCdU0O3*y(Y5^eMLIdX@C*lbDp8*tfgtiS6Tj`e-K!^YXEVxiH>5 zu~l>bQaal>lQ_K$)t>ADoCe0l-{4D&Yk#dZI4)QgG@R_1!INX~KX<36u`oM1~$BjcZxA%(@^h=u2}{)8hQYTN?a(!)mb|&fi1h z;>&#VpN^y7C0J*(EVIYnY0w!Qm*iVWI)mckNoQzFd%TUkVr!4HL1p>1Z(v;e8?7O6 z!RnZSaS1mxON&doHa0CTrL6hzxTQYdr!C@A2&Kg(42%nsDXl_9P2-|QohW4V+w7Nh z(H2^K`W9uf8g8O)wA3P{Xp=<)vFV9ILFb7L`gUE3kwrsV>giaJ-E9MlU-sayd+@hC_@~6%P|J#!O#uDO*TR>|rHlfa z=cz5(Me~P8_Ke1N&^pohDP+(2Qlah1?w=^tTlg5^7#D1ihyF;hrx&~06UG6`^02?u zgD>*n*LiT-gJ#W0q}^)N(~ZUln~8Kj6HZKuwv$XuPU=g0rpUc#Vsfvu&-Pf5+{;MJ z7-WB(!>JT|_H6sJxBZ!9e>!Go+395dq@0Fjj2@VlkvV$k&~Zb?XO2%Bm@y=?{_p~4 zLXD0x2-3AMK5BIxG(9x|B>s_2*(GHzME`GX;Crf+P`R;M?9xnT1 z*pMcc<6a2*mBO{ojV|u?XS345KK*GI=UxT+FSs}#AAtYWrGKi6A1m7x`^mjD?C*4O z_8;5$*K~21Czk6;|FG{OT{+6j$45M^Rov+}4dW3Pcl*E5#c2?Mdi`gFbG~l>+sdvN z`KHoxo_IV+o|w}c`s;Pp3TK@p7yrb?-R){K7oH}z??(S9?+_W0LG!ohUBWzR{(5VN zvp;;?2%XP`Ykz#QOJ?57W#2|P>(Kk{>vc|ZaXyBD{wkM_yIf=2k`Ya;@8$eS;&{g%^>v3cYqWN8cYA2>;+i`P8UKfb<9HMNC2<_vJ$S0vOLM5#zhAab+ye!Bj6MYa z!N*HK5+omZ0zXq6?CRipzCrZ459bN?$zqTG20TSLZ{s|H&y@ltJGh?D6rQ4ZmhgUx z*Gm7Gs`#~HKUnc|q<;x1K1O(k;^T#nQGBxS@rq9sK3VZ;!lx>Z_)k+jMeJuNo-2H| z;-?DFRXi-bK=Fmb!-`)ie4*l{!mm`kTzIMCON5szeuMBOieo=@IA3=BQWcZtMBo+~8@#nHTGD z-%=p^Gww5a;#ukP?fKK~PlvPqHKFCezD|>b_jlj@OdiVD?|tF3ijtp;475aVryl{NgWo zq3Fjco+3K!6fYE=6BYkJ>`zntS@Dn0A9+H)pGkQKD4r%dBNR^%`$>xT75}ppA1{99 zD}I;bhH-`B6Qy18c_mNqv)Gw6exvvd$#=El>t+5y#jle2jf%e{`r8!WFaG~k@jWvC zzTzFk|IZcQCGkA0cxSQqOI%UjH>6z0DLz*G?4tOeMZc%w+a5AVke4^s( zgl8-MxbOnSw+O#V@trb%z2YM!4l5MTmh!Gr{C$~!Kyj4wam7PYk54O}EAcs2{6+lt z3h$u!nWA&5;;)OJ>52ag26frFcte54S2lQRaWA_z7bF zkmAqEJdRrtANVsu)&u`u=4UA0L&|%z;4x!|;)rvs)SLFR zwc;m=J`Zli6YM*S?rDl|cFcHaBzuDWO0l1$`1R7R@)e&X_SoM-=hvctv$9VTKi4V_ zo%M=CXQ$#jLU{Jw$nY}6Ny zd-^GzYS9_$;vDBC!bi9`pQj|t_Ji|j==YQMpQG&8$@Z1+;;fH;80W_**DYdSqU^60 zUZwayh2QGp>?dCnZ$X zA1@r`MSD0&+2i-3{w{m=^Lp`Tpt4Vq_>WdR4fW#E;rQGn{*)+={^woAr%QZll|FvI zIz}$!@nZJ#d-1b_;#W(7yDQ#XwueL)XFuPif1difIO~5b_UF4e+hhL{5{~VthL-U( z!NoZQ*GqgZcIj~clS=9PQx&$@ey8k9M|7+0T}C zzFyfM7X2;CevjDyP1y&f{@zjc`^El%vL7P$N0fby_#Z15XxNP7P)h$i9q-~Chf780 zL>G74cXe^Le?;ti3P;>pNIN{oWzRY_^v}~U7iS&BH$&;1B095OoSSA(7NM!g#krk) zB;_qtyjtQ`t@usCf2;Uz;Sabt=NqJdp4KbwP{Vl1#W^%Jvfwk}%((q$%XW8?{4N8I z?c!9$VV|n_x6(gMP#nh<(-iL@_Hz|KMdG$V@z2EnmldaxO6}7swK;au;WvC#60XySUqaiHo!S zHGCtRHMN6P$DF7CE}(Z$*RME;=ZuZqXZ zh2(b>|5o_diudG9X!=3%hlR&VKB&i#?C;`)a}3yYnrttpxHu<^Wzbbr)aQHJ;+RsRrJ?rDR=n@Y;%f&f)K=ca~k2#JO(sYGz)cb0i(*D-PIRv?caOK6Kf0eD+9v9dL0@{!VlbE51#5 zjI<-JcQ*M#cnjgE7vy`A;vtD=U!~JdHu!;x_Y*!s@oB=xcQHtSejl^yqmQ1&lKMx{Zb4&O%wEQ zk^ZoiaBQaqQm&3J&gE*~-d^44?Bbk+{pl{w_J0xk-ip5^KTHi*{9?Z8gQm&C;pa@* zzfW`7b23TxBLyzb`G)zX51JM!{;2R07kBGi=i;pMso4KkIQ*F>{@m@d=VXES^Pr2f zPOu|=(Daz%!-a2haktJhF3vjh#QtT)-xvO-aQKP+;z1AIO167!r!jH@d7R?c3J(fr zeO_lZ{qxk*#ktGyv$Hgvj zj=?vT&~%&P3BvDIJVW?>9{QV=eZJT~tL%R#{=Dq6XN2>Sw_Tj$@Eg(jSn7~V+$uT?72hQMYQ;Ykew}c{0r~z`@hq8tOzHSLQ|2^1sd$p`?TU{V{<3i7 z3;hq2{Q|Myr|fT+`LA5|9G_B&k5BejsK+}*r={Xsg|}0@R`{=ko21R#5%TS!csJR< zrz@SfF0>L&V?FHWDEnSwU#R%S!mm&q`lTNFwipB;S+zMQ!VxIIY^%$j>nkYx z<()3h^|e-XcDcCQ{yi6G`^&r12Tgkw51s1p!@?1N_+v>ua2!~FhxpUh#aaI)(dnpo zt8R{dXBT(tobKYRGf?dN3)lV(aoMv@lGN7(7iXP?qI02(yX~`Gob7KH`&`8Xr_n;1 z(0<_$t~XunvS+{KrWA=eRhRYl7$$D!xeg6^h?0{A%HdLu<)*nc`#QdfI)8XB@*( zp!@h-`s`<^`1z!Zv!5?WzS|Wabq1>##>+15*4Zl@ej?xf%6^aJTj%1O?-Qc$m-EXO z#N7V0R{WSV*&Di^@8awa^gFpY>!kExYkI~+IQ+aq;xkCu$0s`W8H%R}pP=|u;h9SR zJkFe^%a#2tVqd2C6T)v${C(lemHuOL9pPbR-@K=j??%OY3V&Mhal&6#`Y((AUS+>X z?7vj}Ug6&<{=D!QIbTQo-w^#)!nxkL9)nUZC%QO?(wF3vtE=Mlc$Yo(P<*WLvxFnx z1CsBBihnPBx=V-s!F}LYEBhY2kfu9a_Uvb|Boxx5yf$zb_cm`f$edM=yXxMLiibq|3P??aKwL|)bC^$moCgM z0Is8G`(l?qyIv|fr7j*%{6opNQt`QGIq|tk@fU^P>f&zw)h^EZr}cJp?iUU}XL6uu zde~*pIy=PA8W(4s<)ZVv;s=Dkrud9xRyT~@!jbQ%qF<{xj{m=NaX!Skz*eFAKIFO) z>$s1jPIPfD(mJs}!^QbH>K!@%>Mgu}`;|Bha&a#2cJV*t;vAo#*k9n{Y~S^4`k-mD zaFq8@tiuZw$93s)mkytT_hDyg`nBShu^>&qRUG&2t@PmcDxT-a825YdhZXN2ar?6e z->mq@qF>{|w<}(5IV-&6!T+LoNaFK15B{FwxKH;(5B?Xq{>RnI@oxcr#SN*)cNB;H z*NR^)aX93`>lA-T>erI%ZSV)Yh2rIMeK^j8OZEoZA?D?&-aPF zoVG=9+5Ok^FT}o|e8V5`!HVNKflS3^)|jQZ?5=6BP-lWZ_~nX!F7p*0yjpSidAkSy zo#OC+i{dhCJf}GP-08vJQ2aBQ|Hy-5IpP5Szf<<$@E7)&$9;m}H_G~_GN1_@+k2AY z&`(hu`ncZ^I?%sJ*+YM(;?U1i9QwF#QR^>L_J4DVW8C4v?@=87JghkU*`PT5!Tp20 zn7bID3195!-M}*am3$}{V?(cZ>c!qf4m1jS#iW2_qReH@gJ=0hf4fMd+siH7Upo~?dEZbR<;8vC@E_ah56V7A%8TbsVSlCY_-0Q33cgr)C&jT{<9

    +&IA4< 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≀2ugg2c&2Z49tM4NLb$*U16 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 ?RMVH*oO@Xmk@ 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 Z{?8saV->tVZC?2QeXR5KfE{qI`9JCKBDVkl literal 0 HcmV?d00001 diff --git a/src/package/Makefile b/src/package/Makefile new file mode 100644 index 0000000..42bcc06 --- /dev/null +++ b/src/package/Makefile @@ -0,0 +1,21 @@ + +install: + if [ ! -d "/usr/local/bin" ]; then mkdir -p "/usr/local/bin"; fi + if [ ! -d "/usr/local/lib" ]; then mkdir -p "/usr/local/lib"; fi +# + cp -f etc/cert_store.yaml /usr/local/etc/ +# + cp -f bin/cert_store /usr/local/bin/ + chmod +x /usr/local/bin/cert_store +# + cp -f lib/* /usr/local/lib/ + sudo ldconfig +update: + cp -f bin/cert_server /usr/local/bin/ + chmod +x /usr/local/bin/cert_store + +uninstall: + rm -f /usr/local/bin/cert_store + rm -rf /usr/local/etc/cert_store.yaml + + diff --git a/src/rt/rt.mk b/src/rt/rt.mk new file mode 100644 index 0000000..d47d53f --- /dev/null +++ b/src/rt/rt.mk @@ -0,0 +1,43 @@ + + +# standard component Makefile header +sp := $(sp).x +dirstack_$(sp) := $(d) +d := $(dir) + +# component specification + +OBJS_$(d) :=\ + $(OBJ_DIR)/rt_file.o\ + $(OBJ_DIR)/rt_stdlib.o\ + $(OBJ_DIR)/rt_string.o\ + $(OBJ_DIR)/rt_time.o\ + $(OBJ_DIR)/rt_util.o\ + + +CFLAGS_LOCAL += -I$(d) +$(OBJS_$(d)): CFLAGS_LOCAL := -std=gnu99 -W -Wall -Wunused-parameter -g -O3 \ + -I$(d)\ + + +# standard component Makefile rules + +DEPS_$(d) := $(OBJS_$(d):.o=.d) + +#LIBS_LIST := $(LIBS_LIST) $(LIBRARY) +LIBS_LIST := $(LIBS_LIST) + +CLEAN_LIST := $(CLEAN_LIST) $(OBJS_$(d)) $(DEPS_$(d)) + +-include $(DEPS_$(d)) + +#$(LIBRARY): $(OBJS) +# $(MYARCHIVE) + +$(OBJ_DIR)/%.o: $(d)/%.c + $(COMPILE) + +# standard component Makefile footer + +d := $(dirstack_$(sp)) +sp := $(basename $(sp)) diff --git a/src/rt/rt_common.h b/src/rt/rt_common.h new file mode 100644 index 0000000..cada992 --- /dev/null +++ b/src/rt/rt_common.h @@ -0,0 +1,29 @@ +/* + * rt_common.h + * Created by fengweihao + * 30 May, 2018 + * Func: System timer control interface + */ + +#ifndef __RT_COMMON_H__ +#define __RT_COMMON_H__ + +#include +#define EVAL_TM_STYLE "%Y-%m-%d" + +/** Alway treated the expr as true */ +#ifndef likely +#define likely(expr) __builtin_expect(!!(expr), 1) +#endif + +/** Alway treated the expr as false */ +#ifndef unlikely +#define unlikely(expr) __builtin_expect(!!(expr), 0) +#endif + +int run_mode; +#define MODE_TYPE(x) run_mode & x + +#define __rt_always_inline__ __attribute__((always_inline)) inline + +#endif diff --git a/src/rt/rt_file.c b/src/rt/rt_file.c new file mode 100644 index 0000000..1b3746e --- /dev/null +++ b/src/rt/rt_file.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "rt_common.h" + +int rt_file_exsit(const char *realpath_file) +{ + return (!access(realpath_file, F_OK)); +} + +int rt_dir_exsit (const char *realpath) +{ + DIR *dir = NULL; + int exsit = 0; + + if (unlikely (!realpath)) + goto finish; + + dir = opendir(realpath); + if (!dir) goto finish; + + exsit = 1; + closedir(dir); +finish: + return exsit; +} + diff --git a/src/rt/rt_file.h b/src/rt/rt_file.h new file mode 100644 index 0000000..66563ac --- /dev/null +++ b/src/rt/rt_file.h @@ -0,0 +1,7 @@ +#ifndef __RT_FILE_H__ +#define __RT_FILE_H__ + +extern int rt_file_exsit(const char *); +extern int rt_dir_exsit (const char *realpath); + +#endif diff --git a/src/rt/rt_stdlib.c b/src/rt/rt_stdlib.c new file mode 100644 index 0000000..a4d6b58 --- /dev/null +++ b/src/rt/rt_stdlib.c @@ -0,0 +1,29 @@ + +#include +#include +#include "rt_common.h" +#include "rt_stdlib.h" + +void *kmalloc(int s, + int flags, + int __attribute__((__unused__)) node) +{ + void *p; + + if(likely((p = malloc(s)) != NULL)){ + if(flags & MPF_CLR) + memset(p, 0, s); + } + + return p; +} + +void kfree(void *p) +{ + if(likely(p != NULL)){ + free(p); + } + + p = NULL; +} + diff --git a/src/rt/rt_stdlib.h b/src/rt/rt_stdlib.h new file mode 100644 index 0000000..a8cc1ec --- /dev/null +++ b/src/rt/rt_stdlib.h @@ -0,0 +1,15 @@ +#ifndef __RT_STDLIB_H__ +#define __RT_STDLIB_H__ + +#include + +/** memory flags */ +#define MPF_CLR (1 << 0) /** Clear it after allocated */ + +extern void kfree(void *p); + +void *kmalloc(int s, int flags, int __attribute__((__unused__)) node); + + +#endif + diff --git a/src/rt/rt_string.c b/src/rt/rt_string.c new file mode 100644 index 0000000..bb2ef4c --- /dev/null +++ b/src/rt/rt_string.c @@ -0,0 +1,35 @@ +#include +#include +#include "rt_string.h" + +const char * +try_val_to_str_idx(const unsigned int val, const struct value_string *vs, int *idx) +{ + int i = 0; + if (idx == NULL){ + goto finish; + } + + if(vs) { + while (vs[i].strptr) { + if (vs[i].value == val) { + *idx = i; + return(vs[i].strptr); + } + i++; + } + } + +finish: + *idx = -1; + return NULL; +} + +const char* +val_to_str(const unsigned int val, const struct value_string *vs) +{ + int ignore_me; + + return try_val_to_str_idx(val, vs, &ignore_me); +} + diff --git a/src/rt/rt_string.h b/src/rt/rt_string.h new file mode 100644 index 0000000..2a3f3ca --- /dev/null +++ b/src/rt/rt_string.h @@ -0,0 +1,66 @@ +#ifndef __UTIL_STRING_H__ +#define __UTIL_STRING_H__ + +#include +#include +#include + +#ifndef STRLEN +#define STRLEN(STR) ((int)strlen((const char *)STR)) +#endif + +#ifndef ISALNUM +#define ISALNUM(S) (isalnum((const char)S)) +#endif + +#ifndef STRCMP +#define STRCMP(S,D) (strcmp((const char *)S, (const char *)D)) +#endif + +#ifndef STRSTR +#define STRSTR(D,S) (strstr((const char *)D,(const char *)S)) +#endif + +#ifndef STRNCMP +#define STRNCMP(S,D,L) (strncmp((const char *)S, (const char *)D, L)) +#endif + +#ifndef STRCAT +#define STRCAT(D,S) (strcat((char *)D, (const char *)S)) +#endif + +#ifndef FOREVER +#define FOREVER for(;;) +#endif + +typedef struct atomic { + volatile int counter; +} atomic_t; + +struct value_string { + unsigned int value; + const char *strptr; +}; + +extern const char* +val_to_str(const unsigned int val, const struct value_string *vs); + +typedef struct{ +#define ATOMIC64_SIZE sizeof(long long) + int64_t counter; +}atomic64_t; + +#define ATOMIC_INIT(i) { (i) } + +#define atomic_read(v) (*(volatile int *)&(v)->counter) +#define atomic64_read(v) (*(volatile int64_t *)&(v)->counter) + +#define atomic_add(x, y) (__sync_add_and_fetch((&(((atomic_t *)x)->counter)), (y))) +#define atomic64_add(x, y) (__sync_add_and_fetch((&(((atomic64_t *)x)->counter)), (y))) + +static inline void atomic_set(atomic_t *v, int32_t val) +{ + v->counter = val; +} + +#endif diff --git a/src/rt/rt_sync.h b/src/rt/rt_sync.h new file mode 100644 index 0000000..7fec285 --- /dev/null +++ b/src/rt/rt_sync.h @@ -0,0 +1,29 @@ +/* +* sync.h +* Created by Tsihang +* 1 June, 2015 +* Func: System startup synchronous operation interface of SPASR +* Personal.Q +*/ + + +#ifndef __SYSTEM_SYNC_H__ +#define __SYSTEM_SYNC_H__ + +#include + +#define rt_pthread_attr pthread_attr_t +#define rt_pthread pthread_t +#define rt_mutex pthread_mutex_t +#define rt_mutex_attr pthread_mutexattr_t +#define rt_mutex_init(mut, mutattr ) pthread_mutex_init(mut, mutattr) +#define rt_mutex_lock(mut) pthread_mutex_lock(mut) +#define rt_mutex_trylock(mut) pthread_mutex_trylock(mut) +#define rt_mutex_unlock(mut) pthread_mutex_unlock(mut) +#define rt_mutex_destroy(mut) pthread_mutex_destroy(mut) + +#define INIT_MUTEX(name)\ + rt_mutex name = PTHREAD_MUTEX_INITIALIZER; + +#endif + diff --git a/src/rt/rt_time.c b/src/rt/rt_time.c new file mode 100644 index 0000000..feef593 --- /dev/null +++ b/src/rt/rt_time.c @@ -0,0 +1,58 @@ +/* +* rt_time.c +* Created by fengweihao +* 30 May, 2018 +* Func: Time Component +*/ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "rt_time.h" + +struct tm *rt_localtime(time_t timep, struct tm *result) +{ + return localtime_r(&timep, result); +} + +uint64_t rt_time_s(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec + tv.tv_usec/1000/1000); /** CST timestamp */ +}; + +uint64_t rt_time_ms(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec * 1000 + tv.tv_usec/1000); +} + +uint64_t rt_time_ns() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec * 1000 * 1000 + tv.tv_usec); +} + +int rt_tms2str(uint64_t ts, const char *tm_form, char *date, size_t len) +{ + struct tm *tm = NULL; + + assert(date); + /** Convert ts to localtime with local time-zone */ + tm = localtime((time_t *)&ts); + return (int)strftime(date, len - 1, tm_form, tm); +} + +int rt_curr_tms2str(const char *tm_form, char *date, size_t len) +{ + return rt_tms2str(time(NULL), tm_form, date, len); +} + diff --git a/src/rt/rt_time.h b/src/rt/rt_time.h new file mode 100644 index 0000000..ea3ec1c --- /dev/null +++ b/src/rt/rt_time.h @@ -0,0 +1,12 @@ +#ifndef __RT_TM_H__ +#define __RT_TM_H__ + +struct tm *rt_localtime(time_t timep, struct tm *result); +int rt_tms2str(uint64_t ts, const char *tm_form, char *date, size_t len); +int rt_curr_tms2str(const char *tm_form, char *date, size_t len); + +u_int64_t rt_time_s(void); +u_int64_t rt_time_ms(void); +u_int64_t rt_time_ns(); + +#endif diff --git a/src/rt/rt_util.c b/src/rt/rt_util.c new file mode 100644 index 0000000..1e2e1b4 --- /dev/null +++ b/src/rt/rt_util.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include "rt_string.h" +#include "rt_common.h" + +void do_system(const char *cmd) +{ + int xret = -1; + + if (likely(cmd)) { + xret = system(cmd); + if (likely(xret < 0)){ + ;//rt_log_error(ERRNO_FATAL, "%s", strerror(errno)); + } + } +} + +#define BUF_SIZE 1024 +void rt_get_pname_by_pid(pid_t pid, char *task_name) +{ + char proc_pid_path[BUF_SIZE]; + char buf[BUF_SIZE]; + sprintf(proc_pid_path, "/proc/%d/status", pid); + FILE* fp = fopen(proc_pid_path, "r"); + if(NULL != fp){ + if( fgets(buf, BUF_SIZE-1, fp)== NULL ){ + fclose(fp); + } + fclose(fp); + sscanf(buf, "%*s %s", task_name); + } +} + diff --git a/src/rt/rt_util.h b/src/rt/rt_util.h new file mode 100644 index 0000000..3e9f688 --- /dev/null +++ b/src/rt/rt_util.h @@ -0,0 +1,7 @@ +#ifndef __RT_UTIL_H__ +#define __RT_UTIL_H__ + +void do_system(const char *cmd); +void rt_get_pname_by_pid(unsigned long pid, char *task_name) ; + +#endif

* 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⩔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

vyS%(mM$-ji#z?05? zr`dk8{|N1e&qZEBCP3+m9IUc#d=z_n6VFJoT!M4fh8S`^GIkCe+=)TY-Z~AGFxecgUJ0FoGdMBGiRAon>j2-&i;gAX zBvY&(V3x~^PA9wV$LimiwIA(z?GL@WpYEi?OY$$72#XKyCfT{*I47YkVP65QkeU%c zauGs5+pJ#bA8=M6O&Jdgb$J>!K!Kqw^s>Jz!3OtEf7=Gp*hM(*1pGxe!d&2lk>7w1 zpVuG~)8fe*G|S*lz7A1#=kV2S=?}R!^pnwR4*VJnzOLJVhOFThGPN^{J#Gtbl`zQ) zS&RwIGNCdPnr%YM>B|_7i{k=vqPN?!&*O7-fDebtIAw*T%w><;@^4O9lpR%jZ2_MBwq_5cA^Da;~C3`HUz9S6L)APJn?VvZ`|<4Af0Pi^UG6RML-dih7c1X%R8 z(*({z>7!Hd!7Y956e5M=vi@N|@Ze((&(rP!S!nphlm!XXFu#=82rl(c7|m{U-^ zJ{t};fmRJ=1@+jt@C3KHwf&0b=5VjvQ*Etnt>IqNPetws_lDnn;U3f5+FGw@i|lP} z1OF+wwuiek8}0 z4Sbitdy7C`Q$Y~lU4avD8~No4dd0+k_uD`E!FxO3J2=C7DFRt}?`y!R7<9mdXMot+ z`t@=1218wZgLk@yd2?Ky7lEAg>jQ|<>kIbVz(r!j;C9g#3xL8Rz2l{N&e^F znbtFX4vlN@U1u2{%wmmk3I_3m9F}1f)&<1>$ao=N@e($pSqm}Vuo-To!Fgd!#e~gh zOQFc$UTyHB)4hv~v6|Ex2CQ%=zEt>i+BB4#1T1ZZ*~)oR5-s zoZe*nBaU-Kf`gYFM)UF=g{1}Kklk)Q@;r+;&K3TisCi@ze!&kjK9H}1cja;&%s9$r zh!C05L;BuKgO_~v3!i`C{9LN=V#e)vNKnrQ7%x)v+ZbP{aC{&|C(oE7_X-0C-XTH$ z4>MlPSD|0Z;dKgsiur#|;WccG-3tFM)8D7?1c$$>@cA63X$DJ0V!UVuw2vAJOMwg|nK@ql*6{9PzxO7ykCUA1GJ&+wXoL z{%KDCE5-jH^FOWli+!a1i9N+W1KECp<2*LH3m8Xs=#~5NL`8oBiNVcMxU8*6e=dCF zesi6o7dzA{T=>fxy6E`==ks$+FZ|`cb+6(h{J*B~Z!w>5Df~v0EvHTKm;2n$6ut02 ztZ?D~UkaCY_$S3*?w8px34u=XEBuEk{9Z%mj8{0GrGf5pg}-iKr-*T}o7|6ADSDCn zS%nM#jS3fiZc+GEtPh?sfllN~{di2#i`;K3T!XM#qhr*?Q zIIM7K*Hj=7CwfXdjk28tm-bbtaA_B13YYr4P2p1C_9 zwCUvUXZhx!Ie9pHXsF5a)!AH!OABrfBJL}|zP%$rVr zcfixhFV03Ta88R7sDe&j!8Eg_fq&1q2Vxq3fIWKldmv8oek9bV5P#rz0L&KA2he5l zT0VYl*6d}of**^E=J01evWQFcyO+3TN!;65@Ug_^i?JDYA*AfT0M7W)N!a`V9{`7C ze%S@^KeZpj*5@~{WkB>v+02o$KjSlIGlZ9$uUe`9zrSC@&i5co^I*PVcgcZcOU|?# z0}7M(&d^SZ1ILD)DTUsP0rf9i?cX?UwqkhZz0!pLzWp5ER7~9e{rw%=p;N4ybl87OVi#;s4VSII4j)D(6 zIEX|qe21n-L#)Da&%>u?+=9_9QVYIr^yMzY1;>NrCh*m5!7kizxgfx0sNqu912_)5 z4#<(C;WB~~d(+Hr%S|4a5dkivEH0yk3*CI&al&Par_0wpF5|w&5_@5!n~zDwVMmY7 z?A|cC=l>fdHF-V^zTUp!rW<0IqhOEQG68NWCfRfrV?r}bsLX_BnviTOSS);Iczmin zK8piZb+$stK86Pn(N0es!ZOL<=) zC5L3&$>SI)ZZ3P=78jbc$sG|uRS1N*OgT=roqW^gC3D1X3!a={QWJs4i$lzdL(9#= zhV{P%u-DEPUduKrhq@N+}m1{rQ^ocf(WMCWEL-Mg7+_Af9sS|iT1b-o?7=F)g2Z=d5 zU+p7dFm*S{K)1QM6?T)fzH5G9N69I@xn%Dt+FkO{sWjV5+D@hJFWGyFHkdqg>Wn)~ zK5mPMzoulq*y68Jsm&uM+TSN)ubr7V_$HCR`esbwZ)xEjC#kzjv;zLt5^vv0s;J8N zKXxxks>Hxf5!wP`e=j4jK}6>$Wn&DP3#v|9LTkee+mKcS&uSwISuCJSYDUr>2b!XZ zUK}+AjHuQb?eh2TT}f36IP>CbU?&SL!jf#-Ym*|}J6`saeW76hHhgd&x0huY63AYP z75-if86?oKNaC%%D623XxJ>bzO?1ZZJG5{-4PAu4wO6K{<7tc{@z!3Mw>X~09umLN z*Z)I~rxAw4Z}Q`Zz?cZ#82piVYp;x~w-ws))?S%aoSsGql0M{rUt%-I(>Orlt-UfW zXNYg-c)FiUdTTGvTO3dKXo(LMQU-^B&L46-&ewVQ`ybvbgX<5tmqi@aJqTRHxP)aW zUdZ?YxS|vM)8I!w9SDM(WiAd54iVqXBB*QuyP5Gv7%zmdxWDIn2bkvX-*ZFbbrI)X zGk-6juSa8h((TcC5D0LO$VMiV$AbA z)oH7pF>?2YgQHV>X1uAVqImyJMfDaN|E`fr>-YFdxwLy{3@3kVqSK_=M`Mzl)ovP} zRPU)VG3jsMX2Wah?b^R7m2>&P!vURGskf{vy*${S-c{ z8DEIZzzHsU6>tp%o!}-EJdYLme}^Ng`6~3Xj=N6bvbSly!ewpoW`)b133+H0{@a;O z&Jz|KujpFM#nb;UoZoLUjzQc0uPFNGIP#RjOF8@}z6u|?FJ!YE(MR}9Q+Nlbmvc3R zkK9M395kP;iq8YgX9wfLNBY|qMKAsD;|j<7F*@1%Abg~Mw)eVVxeK48iqAw2pWv(T z=|JY-!faQ`*DeD){S^KLhc8t4iyW5o@r2Jp#_>BP=tQpEM;0hPqW=noi#~E65dPO2 zwoaYmFZUxk$3y6azw|SL3;#!yT)9s@rufS^;rohS?DLw!#Xjrub)UkepX^Y$gbyoR`XwqT zh!Z`fKZ#<7EL{45LWN8FEmOF($88FicC=67QvW*?F7@`X!lhn`aYcVA_fN1F2+vii zjIT~s!SHiUy~F`77cKWmOmbF=VcWTAlydX?OzUjAFtZB~S(F`+XY2^b2VTAaxIjrdGa>m zi*|PTp-Ni+8o)G9fSk=NU!F4%L#Jsg0ZS+UDV8tw1nUp>{aQXQxgk%{6TIY>BQZD` zFPM-oU-Z}p5$V!j*4w1GL=y5<(#drvr&nZ7J*U^Wq!S$H7ZAh#$94^zevpcg{0r@U z;7Mn{m)L&WSRmRD@9&ac?26BSy6phu6c5E;$9c?LykD(L_m z?L5cC3^E&XPM=Mx96J@A_mP_FK;bAX0AzlkFq%D9ywv&(nu7)s6=h2ZsW}P^G|A|N zw#p&z5_2gWwe!ctyJ@m)KQcImKl@=X$VYrShB;Q_>f+`TIk08q5Tre{t1!R$bY%Sy z^cU{}lM}SF12>*v^5UIyvJVs;L2u`(??>UnFrL5>Ob)E*t7ahSZPlt9biS8;oGVO&8Uo>=>^boL!1cL-Wj|oxB5bmBSZhkRm zCD(%H6H&GtieCQ-5LV`b`xyEIp z09zP}Zp<4hpLfCuiA|B2QQDb#K^AtF9tMtBhNzOM*0JU-hn>U{%FFo99^c2>WJ(3| z1txh65;UI0v55G=lldsezQ2jz1 z#%NtmLK?|u5$FNA`lxdjcqsiOth33KL~T|gFtSO6R>DNkhjd~uN7bYVC;{;5Z$35~ zID_eM@y^miJ4=2cX-a>ADW0cJ3yizm%G|B{fhqCZMXeM%g~IIOX)h#EAgX&D@9l;F z&g(H9HUtmta=>s~x&zgpF;i=x^r0WxFcPlC6$iZpyNj{0gF;j`n1jyYiey&`3Gpxe zkPe=rjIM$ThB?O$oqz=Zbh>*!LFQNb*6n-iY^idYGLOfVczMy8M-yS@kN=KM#C@^0 zL23p&7yiS{1v>2LNDeXl*AK9ir!Avc0zQUi1NP*ShpO?;Y12;?bMxnW2wVMMA-92I zco6`*81T*noif~+b|w$*EPZun$x8={PN2+Pr7wZ3Ltdx<3u@penzx*A`rbOjSQ&0C zQ1|H2Ec8aW8lHd>`{;O2rePb;KyJI1Byvb*K!zUyjpy(+)VI}d1f9^ivwazMF%lIF5daNbmpYNu2LZU8CZFc5$EU8 z+*`p|2ae_cHyIvo=h$syxg3HU9CXoM2@u)U&{OUzIzbJAfY|_037mjC=v4m>n*DqS zn8Lbq$S!7Img+a4w>I6z;o{~k$DHJa#k*012it0du(T zH=lMBQTS=>1^2GR=;qVmL|!M^n93B!U!yuNp>o6gK``1m#t!Cpo@WPhIwK$h%Kjs0 z=O1{TT$DOFs*yO>3#fW5y{ae;Em`-+k3QPbv8e|QsgCb3+QZNhO+Jf=U`*jvQO+HX zC(BYnY9Iml`6#5YEsi&6kV~1R{o!6&k~RgP4feiHhO9wie>{!5%Ax*b8c%=FN&1_t zjF+rfwFg+iP@9I<_P~jT;T)%p3`!tKMx*l($o$bAntVvu7s)R}ao40_}(*eh(ekClE2_EJR2yzVOL%fomOSn~QO2MeHnv zMvg_%+Z07t>^--7?Gz^k(+JoFsdPasfzC43N@w6d^UVCE6i(XuFM$U864a#*s7w2y zK7b!?I?#Z<0ZCVAl_tGRcuo2-e{%zDWy6L@_-%uU0!su?~V=74M7N0gdUG{ z>AW1mpb-X6V-(++fD^*d%dOE%!nMJo)V&fL$WgA)KOfc6ABiZPWyc-Gd(;7C+>- zGhqj+?7%g4pu`Ro+JQ-SV2m9YYzKN-fjyAb)7SnGm9re}U}&Vz-KRS-a!UTC`BRbn z#eI{o1v?k4oLsQhB&w;aic!L7eM2G&U*ld=TT_u39!*p?#>*>XP33Fi(VC{{=*scY z^18}sbZxRWQ4`}>{GvQeKgW^eveA{pFIbtswujju(&#aU4I+)}qQhrI7nLqt2wwV9 zcy!E|Xk~e#T&}U&c%73jG6$(JHaat!Kh9}NR#e2Bnw+Y5UA(cpHVU7auWxk98>^By zN8ZF?lcBog+ST#K=$d40tz!`QaD08^CL1vyln3@ziE2&^8$+U)F&#|Qtc}+v6VCj) z_2soSl_ok0LeQdrpHrrfHNiLM!TcT*9ly3bk!*~6(b~c>EGj>ix9IpK5W~;D+ccU# zWZ6!h!XMMyG&()*X|WmTc=_zSO@sb{eaxIC%mz}ul)Wh)-MVbgYbHiR-LWEvBVD>| zforHQ{!&vl>lRyS_2MS_-9o>c>GwwZy@7r=(eFm5TbC?6qz!s>U^Ey{HIJaT3yw!Z zqw&`;reBwSL-ZSVx_6<;e3NwbD?r*Kau9xdqB_UnuNP|B%kw$iBb1T`lY_!thC^;4 z>yVKw^s>Jz`XdJKh77WS?Mb+joGx8)a-h3;<+i&^x^@qd9^GBaQg@@CM?zqaNDU+Y5!92jAf0tp_T*kvv$AgX?we+?H)_py-32^-hqDB@J{p(GFsh*MG`gs zyD@E!@qZEh^RssS6%rXu@2T*-_xk943DD9g-5aL7N$EUR`hNT#YmW$?v@wvZ z9d(D{(i_QgFGMfm5qI3@;7aPa7x~_c$D$7BqV5Aa z+|l@TPa|TCC1R{4A_x81=dFfcV-R-&ax(^TbJ4J)42L}Q8{@e7$auWL3s6|T@lV9k znri%$&SEhn5)5&j&dlwK=cH zW&+M_83cW;NqscHnaDlP9AeJL4CiWN%i~-Nqr`ADbA~oV;gMe08BV}OuC2&l5d#Nr zs(~US$a|5?nn-Xez@fcMBv=P5Lwk!QXq1^dk_uxyafg@7MiHwC9ITB}P)@oMlE52b8;ob$45q!i~wuTO3qwu^Uisu^Uj%unX;F<*o`Uw=}5SHkKyJ-QrF_ir_}yM^^xWsLQVC*OqSm^CogX!vv7=iCW+ zWhZ{OWk7f6G!b>%Sf6T6@xwq4S~;cL@?}Udrg5F){*YKg!!#QH(7hdKpcYEd7@ML{TR_fjo*ewrA<6k$P>vHat%7T|8#492lGzQU zFmrJ#Ja#_=cE)-GLs&%6G$d$@StdbKbC**#ehsN~HV~t13~>4)SCfsQ8RUKnc83|x zLxXaMh5~YjhHSalKq@U4F_JsT>5E*A+))|izTn9n6_h(FD0fsq?$6T5MU3S3clsh% zBX@iTxtGBx-{g0EQ11Ak-0=aqn99npRShQx0?>df@tH$uG(Z%fvVMJX(vvPn0zX#ftJRq#wD4?6!GYtKHq>CHwV^eqM zI2d^LkT;im4s^#3p5Gst^~!QkQt#j^&wYZgJohzkA7`HjdWaVNd=ePsyRKo^e>kwq z1KkGnw`d2Bf!v>a2}wGyH(c;N>OubN({j{3zd$`W_yYC$!5646@Y4m3+aCg{toN*k z`eeeMPtqUe#{}NLzR*8XA76)#_An)p)ej17IH$=%y9H8>U}dxB_s3KtSy>K_VxAlv z?Y)bg%4iJh&!l59<^2AW2P4-UJ6%BhI6FpEV>@2tXXp&y2(Tw0u%?O&<8Z-w0D>R) zhId}FsWA^;da6xU#`88#of4Zec>?V3Om3V|RhP_LU6W`^nX7@>GH_}F#e7nLKzxhU z3YI78*Va@Rpux<_B{nt0n*gD1q`TLdgr~aOTSKDilsL2GN|gAFStzSzl8yMC%`xW^ms9*qnbzTw^V ztyPh{sypHDt_?E^+Sa#X2z-&@5L1=+K;+s7BCp*E-pJ9&(W*P|+BjokWcY^2jH=|y zqYt&d8>xCIx$=8$bh!&yRaGSm?lhN8E8Bs#YD1*zk;sDN%6D6n`OTq`10o;nZC@F# zej|K-R7GFY2GQG*ycG5xw7reoq=CNFkcG@5&G0#gw0J=VJQMxI2+SM=_^(0!$;|kS z9gzWT?Rl+lCL>^*WaN9{#LeNpZ@ih;+V(+P_=cOq-Ct^pAU_)r)fYySP ze{Z^s2?NrSlg7zObmIXwkCRqS6wGr&qb_8)zC5{IT*{n4^uYPOhPuW7S@a zHuM5}>RarJ78;zNiwej_A|Au3Q}dFz&jaTQ?YH#(L^S&ui!FgXE?W`1vUJg$W%Cy= zip6Zc$;KE=B#`z>K23+~22Za8LV7T4MR{GUCRSM=gEuOjl zyUqi1FI+rlL2Oyc;?iX)-2HbSVb(c@9ftFd`HV&d^eYjT(XmFQWW6#Do9gQ~S;CAln^GuO*EjM9NYqR^ z&V+lPM}e9f-mYD3wP&3%ASvdNGDV_3QC(_hB2~ zsL47iMw8rIz)IU{p%$67C;G+uZB-!1OuP}=r_UKzcq-#-%3<}4R(hluan;AK_mr*< zN)H=AO7<2Oi5aZav5M+AG$pD8vQ!2fHZ9R!vSbqsn4k)Y$M7-s^b1_pPsqAvN{L=oRI+5*3SdqJlWK5$ zU!IK*L~F3uPstsx4eBg_)^+uPDk!B0nFD5~?eU!O;}E#IN(?H=F2;@hu!rQ|Xev(NEvb@icWV@u7u85QVt6IG(1pm^LgeMe&m#sHU&!$^eeK2n$%`-Jc$$Qk`0zRx2{8RO zj{j?b|7kD%K8~m9Sug#~ls*b+I?}~M9>ZIRgk&6HnhCZH>uj1X{DjeJ$A=#CbQs0) zG(RXhgx>JtWxC_GK>8hCd?lx+=OQotbzc1TGsJ)84Dm0XA^r%*mj(1&>B;W`PlD*m z@W<27j~~VHG?^pu;XAxCoXhbYf%I*}AE9&(i{yXqJ4@YCRDyXDc--WQ0)A@qaK(8e z#3f8^9k44Hmo+I_Mk{6fDY&8&{Ce;spQD8OXGZK`d?<^SWw84g#|cw()P~{u4fsPo zC0wSmfQ5S)5tq6^?G>=s8JF)N$THL0jQ8mR9&oZq^k3jdKHIYhcBox~7tjAwIxY55A`wlbd2 z_yDHIcdt?I62?U?F1;h(z_{>#h4DR#KeB^e63jJt37cadgCNnv%xfB#`RpERZ-|vH z^LMeZmZrLN-`B$LGxVdc${Ttv9w!3%><4zBiCT!_;&(;?o=%&~GT^f^;JB|L9iLBU zz-uz#TQlHyWx&6b0dLKKG@m+9M5*ZGl_2JDna)WuphpYnU2qKrf+9@y0-wm z3w>oe`o4f8{~B0qK__cbV=~ZB%YZM)fa6&W$bT-(&Z47x6=_&% zrN=ry$j^B`KvM-N(=C2H&u)qO!N;Ra^FO(hr%s*> zgWFSsu{etd6Ce7CiRODMECsD;A9)~z>6<2a#7o51l-Hzk;775b@^nO|K%|{IG}Aw$ zRBPl<)9Dzhj~etIm30JGSB)WYI-DwVI^whuGMgs(Gv%dG%C&%+w>Oajeauq0@1le5 zAMUcatIjyw-iHplCA#<0yOyvU{Yw^(V@<(jLk7~@_|G%YlR)N=3zEWT8!7@0`CJTt zf2h>PkM}siz!O$K~Ck1LT+zD2({1D?-A zcul`D1AbEm{7DNhu;jjD;S(+VNghaPxvyEcU0%Ppa64ZEd0e3Rlv}th_Yn)9Z0YkB z<5J(`J5t9KF8BNYQg{pSLid5iAD>yIyl&y~i13%Q$L>_P@V{T-!v7)0F~2tdUt0K7 zOYVCXKFz|jc$|WKY)?@;vPng6Q_7ydt2xbQ!ef&WMz$B7*l zGXFe<3;!t!7yg$suI;m3(bqEnJqj28_bB{DV@{_f1OFq6{tL|iq{4;&e=A)0f0%*) z*LggP`Lg?&p*%j-__z%CwHff*4ESaXp98X`{(r&3=UVuK8St-LxUK&$7?*OFv$1}a z0so!CWj^H33V)Bws~Zpch5v_)4^TMHL!cY3@L`PSDml;+R~)OL6FxZqgl?X>c=%8bmni&dY?$D#HW!aRpTjE@{ueezOyM^% zpSZ&Fx*6blg`?T#G5pR>!4r1T+U@ZPbeJc`Ov*@E}s3r&ic#zq}T!HMbLHUbb_C2U}vDh z<*dydg%4pqmneJ|18*%(Ek_fbCsgUc?)#XuLylR<1s~lJ(ri9 zEhY57GHkrF%>^%FJ*B<~Ud{BkY-fj&V6VQRsVfJ$X;j<4Zm0{;crhY#;mk&BKB2L8h0pj)nh~%zrHFD|ijlPgFSH zwwxIXFJSr=3YRlUW&9%i#XcJq{q?NRc7@-;{AJ!+_}s(g+oI^lvppYE_XC85JoG&VR;qy&}moT5_6dzgdJE-V| z&pQf#i}U-g;`0>i^P!>_K0P^|*!e;Z_v5SN>nQWdQS`#+QiUfuJWKJB^~dFkUiefg z{KqVJt>Po=m9l;)`U{^26`$c;Pg)h;!1eDtioe`?!M~=QA#Rg#V=qmovp@DL%5^x?Ir51wzA#jJIi8E`F?U=Zf8Q@#Pow17kZOhc-KtP zOFg?>(Mx_mrEuxzS14Ti`D%rW9X_w{ovi2G3Ku)HFfRErFY!ChR~5b3;R!{*mhJd$ zMKAUK2Z~oc5jv70>qjJN1fuB@kDrRYU&nZher{|1HMN?JJ1jf%gl%ip2s$1NpJ@+bH^xUU#(eoP$7d>SiLG;XLJr61RUork0#*rQ& z*+(Jk4%(jGc|uKa(Q}Z(MbEJc7d@riM9(FxPobih`OgK6i=MKtW3{3ed#+Qs=($bd zqUY@j7d`J|T=Z;UJs(r_cXR#xrbUmWvd`odMK5~(QsJWKF@=ksQa)mT(bMJmf6;Rf z>zU2C(98NOyfR5n>?!+RauvPkS)%ZZxF5b&;nM%qDqNm7Z&bKEZ{DVG`Nqh73V+L} z?fkRCf6MLeS;i$_vJdAciayNasNX95eJ;m8T71T^OuU#gdi>|mdswbHLB{mwqb+)7 zN6)P?*Nf3Ioh^DwlCQHz<59-3Sh;8kDOC784worho*%aOJ7vDjMI)OT*foFPZ6Ey zFXNLOh0A>(_Z`~wa$l}ixZF=~Rk-wnk11U47cVJX+W#?yOMe*Qc8SsWC;d;3!lk_z zD_q*kC;WB`yqbhBTk%&}z>B_I*n$MRhU`zZ{Qv0dE>yfu6fRh0q&*wdaSGX^-*)Ee zC1iA>5q1?qFA=xSFurUaU*kL>rsbeHvkAi32O-YI1wP}RmX1UKzH0g70Y{#nH2oAv zi#)MT*{*}-|FeqFYT?>#y8Pc;WVjt-rkH>1nsxr?0G2NQ4ZJm3=$Va|UcxiMlTLoa zm4-t0YomM|;tD^(mjkA4iYYg;{K34=ju<*ki|bhFu=E|G+M zm2`4_oYN~ZXDX-HxTF)j13ZYSV)oLPDf>zOB|WZ(rn6r)+fT-|Xg{pdl3whJ>*Y!W zAdYj07o1(VU}f$v@GAs zzvchxkKcSlaOKTQmIgoJ|M;!TZ@wuwCpT|?Uf$eXYnA`jCBcg7!s1{}ZFNa`MJQNa z6%JNa7l%rcv<==8xllK19K2s$S#@o4d8#!@&v0#dRcTUH>s0gLeama=Lg7K|BSmWq zt4c$vabs8X(lG zdiKoE&nGr>uKHM>%A$3{8vHA7@Yyz`k~(bb8mqr1sAX-h>Mt**;$rI}E7MvNh;;{| zrxpidTRH-v=f(B6>s2e>}eCc%aFDGSD=S_{7><@vOQjZVRu7qz0n?E?e&z zh#d_ytvacoABv#Hw#X=e+JI?n6fx>cC9#3{s&mDGxg*Gwa4NBX;d_6Vu`^J%GM4NX z9RksF!#57+#)Y#ZY4LR%lk;S9#%3~H4XCL$~j3wH}TH2gCuriWivTvQsw{HLILF0jCVCVWZUe=6E$ z2Z}l&G|1*$Am)V;tID%?s1{D6rq$=EZg+xWXZl7!<;?fNm(faHsa}MYQooeq(D09? zm>%xvOWEFMZ|C^Ow)B9BJyy6LD0+}FQljO3tD%I7fTfeAI5d2b6w|{PW+E6C83L|3 zXZK+$oC!3owga&>z-Z06K+}y-UIkQR9v;Qy+u9;uM>^0Q^tfB);RB~~M`2zZ?)v@t z^MTm2op2g3`Wg}Sa;Nbm)O!CN)2XTP47D`&;3=+7F#IOMnByuMa#?c7cm~e@+JDbOc#O znbzLpyoUy;;N2M+MuK`@QG^sx^wi^A@8|h;-2XPDZ(VBdL(mq-5U)a>AU4s;doT^` zetBPbw_n~O@WPFhE}~6@TXjKe-e%sQx5qn*$mqC{GAUM#4L&SyNRF~+k z*s4xSeX;*@%HE#-$ym+9Y8E(W!Cdw}&f(=C5~p4mvp+$V7lJbz+csy4Il#th1?+s^ zwLsYkc3@~^gkJ|d22g_o&i9Q@V1Qhd;nU5l8t?YAm(oa_q18!o{Nzx>W5hi zNc*Y22h}#OI`eyh7)*exS^))Jy~wGmCwhd4{!h3%BZDKe6GeA`=ng9qN?;y6=SaUM z?&k@P9R;av0lbzbNbOh6qv+HqdcS~jbqiu>5M1S1S21V+Ym(#{#C#m z3-x*)_{YB|hOHhAVY>&x6diC`^gd|25yV0#t_)KZSZlD@R2qnZc%%oG82S1VBM?2d z_D-JPqo>wM3dh#$)w37ZRqg&R5Co3fvfm1)MYrs=8aOvMV4%U*2k`zNVeP=V-R^&h zx?=tsNd(t)9u>!#JFL>Cfe&#!wgzS%4aC6b;222P#Kh^llqe(#2Bir!t-+{4zELcm zeuu_2tNo0!rptF}zMT`Ckgez8{F4=&4i;*sJyNH7`L1 zU3IjMfl#}jtms=9_a6`J3^a{xB%^Sg*`4uK9kA-NUyO}{R=igE_lBn{7Bi0mbk))D zgsA_xEl{izgcH7Tzv>b5cg7(FFSJt3qN`22{~QW#_hYJ~As3o3VO~4mmk&he4#4!0 z7(hg2oW=Y&vwKyz&ZxO>$!$3M<$~a@SmZcNelTuUwJjxOkJIuAXMWT}V#P~xuqArV z7hVJ-FI*8lXNOaJ_wt+(cOeBZCS5C=QmOACtMA_Xnfh$TDC=y-9c|Jl(3EcU!JyKW zqW4DCM;qITv!jhMPXm8L{2;QkXv+E!y8HqpV6P%fT#x(m*fFTKiRCNplL4Hqx&qOj zQ~}|l-}6`WY+C&nVA+%4(Z8zupOs0tlGNsYxwc6g4V=j7x#&VeH~va(@Qt32c3kbRvxgw>q&#D^<~mU zQQJh?8=(~su~qj4e-E=6iOlZIXdDakK=d$0IYiaq?2NbO{n4L+NWtP@xT=U>B;bLj5k8OVExPO| z-*_OW>QU9x?u?PU+8fd1sMFu!a-ZiDJEQR+@xlQ?b9fV(H6ZZlljaZagqQyGk8wiZ z)qlGiAcQ!QI6b}ifss}K&HV}83VHcXc>ml3X+ypFTE`QzB>_-Q1 zSa@SDF+LYyOM#6?a91v2$;`K^-fjr(B*dPj4TqT8F^DzczJhs?OL7T=IhFP*RM)s- z)W6H|+8J83@)8p_C1}q=l7betJ#R7%-TZp1{bZ`E)f%kiB4=Q^2J3)TCzrF{iF^ z+DgMzBu4E$XMU$!eitl$PGL(z%-`?J$*v?0ezmt4J&ZeyxU+;}-OgDM5r3iauD`WnSm2lIgHiL%3 zn8n>U+}rBE_kb-j9Lk_K+*m240~yPX#{BQb{qK^R&>wFv^}7Oi#1e-sIJzB&9Za|d zSRV840A=gzfm1tGj2}iLV$W`+(~eDaYN~+~#JCJjdW>O1EYMDy#pqTjb^!qv+Z&(c z5`^<46v5HNDy|sE8AuuRBaVg!jV~=Vg!U5MF z6HZqyF z5z~QBnBwG({+$FeCD3#UE)uB^Uk_srELVXCtkYwvKpk-vi#}LDwfc+Wjc7y+7LQ0g z^JuISRy46soF^~!6NWP(Am|xT+vQPI5^F-fkPzs9Jt1I^Ny`UsB$I#RiUr&v5ySSLmwWZlcY~JTk2BP$G9a!p zz}tZ#ab^m1VFy?b;Aub#^dK5Nj3+DH0A#556_l~KZ11E_vcW^_Y3;5q+%Z_X)6LNn zr|^F8I1on<()P2tv zWpz!5Yq@&R5LW`5 zAX0E=37256pxZvQ6j+(SsbYijY-Ixdw^Y0=a=IM=SX?wne8H6VM^tP%L59~1tm zzlJ7RzOF0b*Kvnn#j#yF`BW{1!88TJZ8vaFNrjgbpaa#2g%d4@236dKMdp_3rn$He z>Da`82vTyt2?+7+O8vtWz(`{1Tk8Sl^8esXsjKjFSRSRyf5P$vRsJ)UvsC#nSe~KE z?_xPumEXhim8$$cmKP6&A1l?eu@X=fn<}eS#YdI3s*++?fO_jxCC#pdN|~y-Hfmd= zDkG>8R+W)<4YX`hl`-}WP}!;~nf7f^c~Dix+M9q|R8=O}4@2c)Rhewx2V~n-Wv1N( zm7S_`IaPM6$`w@EqbjqgvR_rQ?b*<$RaJ6Gw>DMDvp)xNj#2KBj58zJMt>2vFxv6$!YEg zjzc;2zbN0d1r@We{TH>K3}%*F_M>RC)7%-%yvM5?4`$XBS#}Gm;52syAv<Ye#JeZMN(q%F5MBv*$SysL6L#jMkwdTrMU( zj_}DXV}VNiDOC%ow$qC9;!Jef@0Ffq)_7u=Mq`zj z!_P6FD%ra}0h8whq8MT$GpBh^gQ~kUTRF|U8zxqkL-2>%DhYQ&y>OFd599jwhKs5H z2zv_j_cbq8)pV||R@ITrZ9h|IaJ{vG6}&D%!K0qz9hf_djdB~ed7@V-p(V0Y=M_5*|bqTo=AKa*8m=~yDc&zRhyOdk*=gvzf zQbyj-UTSTaNR!t6_F)R^eh#aUbC@1rW^37!mIO;qL3ZF_@A@dr@=D%r5|Glo^Lgg@ z7z5j%Z%`^c&cMS$@dW9R(!5oGCvD8Yl;(Gju(!WKYNRxGJkP*4Z5-Aq%_jxeLx9tK zGDseLiaeOo-1&UNq;Ms;^jplKOFH~3S(4J+D!^U_4hgW2fi?l2X5g3r-)3O10Q(u( zFTlSs@XYfK)q#V+owiaS5SF0hwGg|<-c66cLY@k^L*;U z(-u^zJJ%;u9*bO>Ao5xz5k$fwkAvnXmcHgPCGiHXu2TY+adoYd7a(~sQWWuW9|p_U zyppBeo*=E?z&cObS~froEa18rcn8unsyhq&I#Vf>5_`@&V6 z!x;0dRAG&iM5p;xyh7dSDe`!NB1=6*e&H$d1Y5_pKgm_L{p(z1+rL3tc(#AjhkVHP zev$u?Ao5mkE`AUe{L0o=wylFx_&KhN?FYCHw$n=LpifcN=$xOLzKg&o3tvl-%z5WlFjz`D?LU>HHh6u2xC^TdoF_hOdzjnC}&F zH!Il6licfU(EbKBW%rPDUvq_uom9&>d)`Y>ZVZecJnUUlM~ZUqGsAPAR07X){mdto zdX}Rmi5_mZ9p$l;T=zL@%yfNHX^`TmNuiTHn(8Qz?+H#Shv_lR!F6GO@(tnUoyx^7 zS9f#op-e6#a+ss8mY?PJ;auO&^$}eEVvrp$*U@Leu$Mybc@D^D16w&I=5c*L51;v5 z-^1-6V+ZUGPOOfEE&ED#z)n`-YIeX$t}kGdy12fO>mADCMO+nsUBec%1?e7kQZ2lE zZZ9V*oaSRenHKI!uxlNK6$85=Ljrp@=?zzU71vL4m9s9$)qrYU=cu`LsS08darZSB zvlllcNGtKA{nV3IktnS)QCd}^v})%hbc7oRC9T#$J}Avefr~BNJ7HZ-f148|FZLwg z3R?h5^?MT~-;ghZ9nK^)r5Q*TJX@J4a<22AOBOACP&*>AFXQFnCCw%F; ziP&>gD%^4^6@B2N(fOV{td8mLm(VK{$h2N#O|ma5=Hq}l+mGBXA}!%2VLa2P4p3(T z_W%R2$3)hSs~59&T%E*PaP^XYt_jM1B-_4rBIz+u-aieu*Fc~?+Hdx?6Hzd196|Uf zvUKN9CH&EMi#!kt0a^uH))_wkk#X8_@(bBV9v2~B6YPn z73J%5N{fneHeESCI6r@OMR`?Z)9li!NY1>R@~WbWNO8y_I<5?)TVEcoOCYh-Hzxfb zeH5V{b>U+8lqI_izt;$Ft_jsa5$p!Iyc&v--k^yTApw<7prbR(e(UwQn59O-sj_7(W1jcwk94R@uzmUf>(1-Rp8rR|Hj+Xm3ydnj`D>73h%=U(E8)O*vO z?taXD`f0Z%H?n3xn-lJEhAo_)zpegk?tsRp3v!*!?g3}$UMI5M8Ik3T$aWv>bypO0 zb)P6WkrQ=SP#1Shnp>LVyDT%usSP`$d{b>rki<(yTUg$v-=TW zcILr5y6D%v6l*=cD>8ixGTjrq34GCa`B*_(oQtvnbdEF}aE@6Jq3(S>Fa7{jMEajH z)lYrX$9C_l_f602?%szoDTE`#zUgDS-7?>du^Zik^&UPV?CxuJ>z$F=)Lw43kEHg9 zwBG~mo7{sGfV7S@@YrOJRYur7vCoY-V?aj`bx%vnV?e#T%U#hNaU*9jA_YiXih&yw zc3-dmVmEkhn|s2^$oA!odDFdfw{J#f%L(@}@KBd;*4W40C;-08GrOI8ad_F#)7|;z zKBr=>ld*7`$1MFdkl3p_`z{*?y?6Vr%WOXK`sMfTbHZz#^em4Q>@Ddobzg8sxNF@9 zyCGej;ZTZ1-4}d5n1G5RwZU*`Q#e>%Qi7kc1?elf^^p=Qxcp}LPONA{kUvM$=MZcI znjmgSU|D^thP6mlU3qC$s5lFE$F(ox5k3R zRa9085-Z`8PPkmu&cSey0?PGh2U-YvgE&vI8qgB9=D_2@x=2Y$`6dhWtq4{{DhH8$ zq0cl`LiJ}HS==8hQHFv^ZKa_wYEOQ`Ge*A{x0?ojs!Ex~MuWcxq0m1s<=hH}HkH?f z;c^L4#VA=Q8qEzt6pQoJX^uM0Ri}J)nr9Vb@cNUmK3upSzL@1aL3d$0<_Bp#P+@59 z|7H~&k7ju;$FWHI(m*5^p?5H=lx2x&pm}E8O-|rZ(u2U5KIhUT^O^KW(vwv zTu)d7N6tX?F~{(O+F*4>u~?1j->`h8-wJEvR2%XnSOp41lPGU|s?4mzsf$vuKT9wk zJXuuK@?1fAEfWM-KL@=7w^HPE8k<34A4Ju7?7^%?LX=-U!PqmWthzFkQxd8w-54q_ zE3D4hSY5k;W~CgooPOxjU;6Ymr>?e$26F#^2m)u=ye8w-yg0|govVn{chp1mPJSp-&w3MP~IqD(b_33H89-vTd3lWEdo=kb|?|JQasb=*w z$!q_U*Zyg4r{_Xmd(>;+#qIR0N7|hn8woCfwnN-bk6*m@%f0qjxt$)DNW1SD;-3X= z?{YidTYL8TqmFaH=jo8eTN3o7L3lWaJsFF+oi_8O-S;U^#yW1N9eQbB_E{&I;=GSc z(2i|PL)+*=cG}$( z{=QyM{!(tIO-E^O=$Bv2?X*KE?aob}54UkUZO%!%FHQ`y(0*>G{V{0|K%7$h@Q>;InAFSQM zJHSB>2k!v~IUIhg!fbNjZ36Sa2fDDr^k5ppP{S=9#HB7zl`mub_uNIE0M8YA_8*N^ zz%bUxC&H@A^VnM$e~NaBEK44Z-obbmt16E$(cj3YISmSM9Ah~VC?mdxUK_A1dD8a~ zokgElVC%VcD@*C|0z?QLh_lh$=c3D`T`c77HDK z!{+rMhl79qW01qa&q)S39E%=d4`^}Jv*8516>6ik{NXTIKL&g-?!8IyGfD72Cc)oJ zf)9m!8cgoRN$^XP;Fl-CbCclnli-Vz;Ql1|$|N|>WrNvOkOU7V!Ap|h_%-NY{A-io zn*kpK`5&csE-Xu)x9wp38hZ9`Sv1E(tiH|o7RH7CCC0D32#DYi`ZpNg$T(dKpgk4F zE6NSg`vYoTz#{JN*rm;Ri(LJO}NFl&~0;Y*~*)*Te32E^9?uL>c1^`+mh>6`h$3X ziMMNo;p%d@V~2a4a0y~nMQ}e|1h+9kSgXT26jsg~f+dCJ71$WAj#OBcp~}kY`jAxu z3e{O9)iuDSq^P1AZo`2Dmb7p;8mcU+*^DRL^njg@&<3j{9IAlM;HBy!tE4s*A}SD6 zLWT@-ON0yZ|3Ch^5xI6l5bjs2An=97#kGUDLrV|J(S-Q-?=&RBAM^*0EWDoMf!7fn z3i$UM@VEy-I1tAtVS?X>ARI7!XjLM(tQ(O2qwrtwC!vgo$^U?Y3D1JE(7&PKlQsMr zn4j=4`BZ55rO+;XwlFSwDyz<)|7VR}*Yg`1uKVGThG%K~do_HrhOb3|aF}{Npy9X{ z6FqloxGr}Oue(e>!w`VO#0xY$3)+SM0~$U>!=KP_UH|{oa9tmGY(xh(>-e=Ao&{|p z_dyNU>HkH;bw3=_a9vNAmv9nCc9%7Zanxt3CfBdw(=@y;3I0$L{B;f2^&bN7U*Umr zr^A1-ceaM>^b3>VYcza@#-~ujbv_Sj_;ii_D;loTKbr*qfrjgHPiVN#=d_0F^zUo9 zPM_|Aa&VY=GEKvEK65l&=W}ZkygCWqsNpj}zQpB5UecpJdY-Gdnw6e2HTrgqe!7OI zz^g%cARnFo7!B9;pP}J8{b;_GF!i~LamjOR$76{`uje_wLxcy?T@L@n-iU@@q2b#! zTpt%lG+g(?Ta1f7>|X0n2F_+$X?!b$`snlOG{#Lnvkjb=wbs>1_^i-y-OqOno+~t5ms_IYy8g`?uKV*u5_}5Z+@L->eZ7WfLz|4>b`96%p4D)j zkB_$wOh4bK;X3_4Yq&1=B@Nf*p3`uh&k*{eVBkD|i-zm;n>2iiX76?l*W>an4cF(Z zpE53ScYzlkCk-5P1&`AjA3bm1)o|V38SnxR9%j5grr|pM14;0G8m{}{kcR7ge#W@i zm8;aSexuRr`RwBf6ZO>nwm`#kpiT1XMh(~fS)k!MpDh}$UpKGh{REV&;~O;`br-pF zct63U|CEN$(ddJ`pJ38Iq2c)&eF^U~AieI-?`yd3|93Q8*FT^4B}_i08m{wsNWSU8Z6K3{!;af$C-qOvUY+NPqv3NZ28(Ik9+Vepy9eBRXP^*kTL`y{B()f)fp z8m{|cDL#;Z!_>ckanT=n;Zdm3>-vwtV8DTVbp91d@c&MNrx6!;FAvT<6bRwVCgGSG z@1!b1o~}F`#|$2vo*ur8={bzBqol4SL<~PNf1q4WRcgXH6A#2u?$@y+91GOR!#{zB z!*QKDdH8o3UvA*}tj}r#m-_7nj(?sAk58(T$NyEnZ>%uz*BSqmfoCzFPaF7A#$yJ) ziuK=V;JKI>aC}XjJbgaTeD)al=a|nk1}=KE8Tehy|0M%|neFN_aQe^{u-6Ry8Rm1w zz<K;$lSH3+9Ix?w7W^glgR~3I)33GApkK=MfPv$F zJ07oNxJZ2D?Q5~CgZ(pJ`~*}u z?|p{(Pc`u87+-4O_!Tc6H!&`9Pb=7p8uTK!*}z3^i-C*WXAHcD{ds_Kkt@$Ze`U~* zWct$vp2@iEzlnbivi_sEUHG47d*?|%phLe2|LYB0_IzprN;$Mf2o1P_Z@VsG4R{j|0M=4e%NT>H#7Yn z1K-X5dCtIVSf3XSyjQ7X{oKI&nExpQzmoaCXW-1n8aY&z#6L5cPnLnFFn$H&;(vMm zeVsus{{Ogvi~rT%#OPnQh~K_o(3f$ZJZi|5=j+cJ^dk3|fs5Qf82DMX%SH#lA$~Z= z_z1?uUU`0hnL#gd=Nh=kEi!PiH*DZhr3US7`1AmJB@H@suuDn-~$~U^EAI2HD$n_ieIOe~`z{Nig8~6my|1U5u`pEkn z-!kaM56>C6=<~XPi$3od_CuW`MQwG`{5$Doc%D)z~`~w zrWyF7tWO@};x~DpCScHu-_{zq_-&Jci{Ew{xcFy}f&T~L5a<`}rxyUM`jI)0ad%REzI;6G)y;Kh5=Z z1}^uNTMb<92X`BIg#FxR;Bxo9OxFZCF>tY=(yuJD)j#tZ|O^?>Z32)$gF%M5zCZa!?_a{bz4;Bviq z$-rekJZ0cAZ;ar$VKe@h@jJ`FWxQC~b(<^U8zeZxdvtUzlTvM{qA;7j>B@%BQ3|c> z^>uYtc5St)P-}5$eWVm#@+zsevQ@co{rcKaJ&<8%hUoJZ=&Gtx(zI^+k{zw7Tr!mgqftotj@&j(ZtO!icExZa8X2E~tY4*QM z9+2zAP&W0?V~o?uqn7@QJwz4E{?`C(Vo14*<(JDur@9ZI#b+~v`Om#wb(q1=`|yM@ zGW~ZWV1vm|%~Ab-XfzsC3)f91hCP3rtNQavRp8g8T?^P?`sZ#)?2r26Etjc(1z;vm z?CD@&;P@c<4L~zk|GC`%3q}H&wD&^)!Sr9p`txH+`d$l{#-{#pmT&6${dv#;$4X;h ziF`SK323lv_8+qlds`N>Q5E==esXTnFpmfd%ecReVOjbK{tRPg{s*{!z!+F!zx4k$ z6bAF(Cib7acZu;I4gaOT_!Tij1R$2xSxG1LXNOgheog(cZt9MN+pi^ZOZF3SEsEFisq%i;+H0R#bI7sn^Lw86_s_fY znVfUJXYIAuUVH7eFK3^9j+zop#Fm~i@T6dNC{mZ^T>lRSM~@jl(U6=!&~cpAjHdH%J(dOnAjR{ai>*}hav1LqI+fbWyV#$?}=6Eu)Jf5hnSp{CP zXtK7kq1n9=OV%|miPY6LCnGhrb#Z42h#R8yaWHofG1U}F)kf;$$)%0ePIbIFnP^<4 z5Tef9C;41yYnMc-Y8#zsb#OFCh(6YmNZjRkyt#DjKo*+ zIfR2oS(qCo1Mre*O}kytWO z7eT4iHY{FKRjQ^Yo?x9cHpLqv)$y8WsxHYa zl^r^KZq#aE7@7f*XLABwnv$*nR9i6~Z%&|Udgh{z4E)5wZ6QRcQQK}uM zUl%o4s$p3Jbk6q^@Hc!yHP^jZ8n0_|#GkniPp-3lNplhglF=j87lE4VOeG<8N9)M{ zxJXkYITDk7jW0)T$NhF zB?iq>!^CZpNjMf|7uf8OIY(l3wQ<;7HT(};6q#o#(G=Zcp&ce!Y=RtHGZv7zd zJw9pgN{$R~+qxGaoZc2rZ)Ui?YvuHC>r{@KJT%<8C2#S$n`_pZlWu|oN0x$3=QuiF zAH=_K`ZdEb-H))IrvgVh;f@pOT*$)dS3+Ikj!PUvhm(Eyb#Rj5_PxoIDw(SFi@lIf zU`eeEEcxc*@HS41(%7|`(>sFBB|S>)WJ${$dwv@@ve>B^6*v;zSA^Aj{|p8t3l>%; z&sn|qFE~#QTKo`c^xTqjD8JbWpM@LD&oC8n&IStAi9{y%86K=Bz86@R7fwH3@+h%y z`TOK>x+i&H+mp$`;nvMLfpz&f?FTsZaodxrnOplfZlUbt*zH}b&J1_x?1j_s@0-KL zp)L|VaAXToae8C3a%f=PtekM?vYfUj1MSTy_tNz1iz!k?$8d_|mKNBTcT6edU zVAZN*ym>Ol6EmkzpBx;quqxG%Oa;e{8at}!#PKP<3SAl+KdNZ#s7WIY9vod18ecTN zXcEbZaG*IjIp3b|O7YuIAjcqQ-n@1Fm^?CtG-pI$wH0`Gh+v;;-+mJRWZHD z!N1Y;FGT;wGPP&u7@1iycUnnBWbTX^m1PSe3reO{ltr95)922aL0v`ki+Bi;iNy_X z+5GuvXyeg@bPT7@KWpBCxkQYvI`@C6dp@mvuIWwHI26IO*4&dcqXlMahOC)WBfT)> zZU=P(c{oca)J1gM8k382ni%;fHKPaxIHy20?Hl-6+}N+d4^Vg!&M6QdinGVC*;`2< z0^#H%ET8jnPJw922U?tDqG0)0yxG7G)e~y}E&gr6iJt1T#mP=75dVYmv-oWUB6#`V zZD6K96z7(n?2&?(exrf+$=B}$r*wzmXZbv@=;_`UqMx?}_vY(;MZZ7JEuX&$?#;ncQRdFJ`>Iakr^@{KEcO2hJ5rRX*P2NkaEZIj?$ zy*;V;YkPQ6@zM717lmuReWh@n?op&j1aG<{1gC>ecf8=<@|vb_o$gHLZtQjl&aHla zsBldm6r9)zOGeK3;J3(iiwC#<(HYgesy-R5!ZDdJ$EEfR^EA;>Jkc|%I+~0+qpC1T zF)GnW7epQ!1+Pf=N2MC-YL~_9Rym_$jrH|3dKiUHQ+(9SISWt3fCFk=vMI(-hqcn=c1ah+^cNhrXE0QVzl9^E@9n9q z@uX{ci&@!A=LDQlZ^JLXwhFbrQ~tRU-}--C za^PnV>;GyjKVi(6(dI$Qzdx40=g>^5#Vky*GXym;+%ceK;u(Q!y8`RFXzW`VPVbTN z>U%^M#>hS&gYw0DU*|C>4@nnquCZfZ%mt*s45vR2r+2xt0l&yi9uZEP0Vl;DYzOtN z@8z_9k+b|5Zvw~C2tJ(t3nDE(ml7(*P*~!3un5nzOmvb@5SbC+Tst=XA4z}o*QGx= z+`c3EOv_|SpG7o!QKHnW&CCV-r}_(bTsE}j)S}d28Ec1Ix8>kE`FXfw`OubAic$fn zx)kNmx-|!v$4dHVB`g*5#TPCrkj(fYx}aA!qfFx$QSva_& zv$Swfcw1>9yIwlsx>FtQ=sSD_m2$eYa0I3Sa3e_kIg2Q{k`Bbf@u=)MgR;Y5L$q80pDlB#`oplt|* zG=~2b89v<4!pidW3!x8T`a?M;ED*Llh%#dfW76Y+&Nk91ms9#9i-$WF z+slvX-*RzbzEhs=pR6v=pP7e~*2i;fT9Dz&@4!^T9cAYs)*%%nN_MBYf2Mo@+y0n^E5`8^JEZ`V&9@V*JQj4FqleIr&~6(U`oC#*`-jQqa3^X; zXh%i*6Rw8g^u>jFC3|1MH1yJ`d(lE)mKTm~-&%U$V5g!ZS(umJ1P&ExUk}c3~w|De6AB4|M`})~hdSJ-Z3(o|Y-i}zo)g8NqOmaTa=4=@ zFWj*bojzFer<`DWR|%TILOh|cM3XjO{7lJzk$a{BD^0&=DmeKsHo0)eY}>?zI~IbU zt$x|$HEWrFhSOrO;x>GYfY?{H?LUFUbZ!BW-sK*ftYB&T&ww+s;JHijEa| z=wJobo$Iu{nmT;ew!ZJsZOXfJf8A~hr%|5X7FdUt>X6-~({h5zd_>F%quJ@%xVEHY zp;J2P&A?UngF(xlW0U8#>^VAlRtdU>IVI_ZeP^Xlc*mp@XrpmjdB=dBA=IBkbc;U( ze0S+0aPHn(h9Qt}pB;<$o!ybj>n5M+)-Uul@mOdfn3sY1fnZ*i)7F(dc;ZW`0X>7) z;xs?px(U25~nhbmF78}{bDMM4ewL48@P;&@Q z)zxuUec}H0@7*Fye^!!yk=%%9OcQ8(69q}V(e&m(+g6-&OKq+3H7hoCmD_%g+h`d> zPnwPBiF4z(|nb3|66yGw2k)NMACk`)*a?>9@Tn1^Nd}eR^gR0#&8Ct)Psf+_i zzXuIw_hpK0X)!x^RLilXb?@HPMHQwyB;`Z(=@d@S9y!8J>38?E^7zmsY{vkoMXVB| zppu29@Xv>b(;JP7P_oPqSzB~=_xmVg*S;XYSE*GVXOZzXB&kifdjJe7w4-~1j!#+5 zG8VVrW&D^FxZ-HaHPqGpBKU+p?7o-Sx%~-IeD{H$QJpHrcwG9x zd=t$_qy~mpKSdK5;q;Kjo5Qe|PSYA&KaMB^wz4#E3TQ-8yEEyL6WZmrM;OV!=K6oc zJIlReqy{v~1En{Gy3ls^$W1#&YM8Z=PBG#iwQAN?dy@r~|cX^n#EjhFGVvHY>3nYGNrXKQXrspaq$efJ1DK@EXf~(Fd zHStplOW+5lYVbF8A}+Z(bq|iME@Ke=4nRWaJpNFUX#M5^i0ptQ`+mv|MWbONe>OW9mB(P zNRf{lUfG^*F?ArsS6mMsE`Qtpl6jLoq<7kK5ON+aP)EHtwqF+q(wH8&CkxqY8_1?Y zUF6PZryuuL20NOxsiS>v?_eo0Z1^bjDko1qcS~vK%Dp8UmekbLTsErbV$`tGNq;X1 ztXpt|6X;A+46BZvwnK-`P|2h}T{jTX8xLm#ZEK(<^uq(~ z*WjeA{lh>TmtXsbsl(B%CJ!;hnJOvcGJ&ZISa!)`G`6T_fwnuq>S3G!4O-NsZH zx&Fq}_N3p>^ir+eVGOrc^4(iHFCiToI>b1Qiu9X2i32YuX$0D*l9!X7wJ`utWzy-n z&TS7LripB~e_%Lt=OMbJZ||Gj$o;>d3A5!w&icFLtf^!DC7Lg8j7rjfdzhLawB);f z9%!SL3NTWuDefcf00x_q#a^lN!W}fk|h($#?JmSW8M`NGUuD#BlhwXLk7ApFXOnG5WD674vMR9ukPYd3% z+K-OqBh(y{V_E^_A250;Pru0ZhZ>kKF-t_xFV!fztuPM&nLeiK`r;Hl43qy%BU{p0 z+Bat^twai3{VJ<9c=Z;_uJx;) zVP@!64BN8CnLiVI;j}r!mp#4Sz0hV)LncJt*BK!uN9?BWBBP! z+`~afa1HxkDi9W1<_81q_ep60bxT9$13H}6FLIOjwtjJ7@>kgv8bc?lbeZnBs-CFb z*Sqr%Vl*xxYSl{U)O(-UVS3*dK~`<=d_>BbvkC?iY@z7+wD!I1DL>=R+UXbqf@tps znu+FU@N4DNRg0IW|HQ+fca2if75PC|#iX||{fDWQfwpFti4-;eWvS7tN)3>%Pw2_k zr%VzV?~}?8ec1Cb>%8YtB$&E}XJ>kT?w!A&*^4y#n6Rf8tUaMamu*h~tlO1lmHj|= zO*9ip$xFiNHy@^_Cj4~GZL`{_^PZXGwN?I4RO--2K27-cr#c*Z)n?w>4oxQKu}oqt zVVX^TOzZ_Wl)X@!ei19lY6_ku8OV|)bycpsoBhWX35wtE~vuYI|e)qM!=vWVIKn!2oCR&@4z;4L%~o%`?q9t}}x2nQ#gw}BdS zjs!DGb(CR(DOF&G85nm_g9!h1Ngkpf^bd}{;axf$^zIulLGm*aH@!LaWVoX&&vwf? z!e}Gr1uHs=i)_AKL1{$CoK1eyNZ~(>nAKj{F(0grvicbf`&NH26dB95H~`k-GDC>c zoY$xR9oYz6eFS`VMdzc1G)8qt)Gu>GgC`Q553t9oNE;0c0VemtX+wi1#&S2qadnRy zDq}p>zTG;?t<*+HfTu`!z`ad|3@CIv%AsEL>2C98rdh15--C!HC^ajvWxtb)5EaWj z@}%dTRyy0Kq8h+DvX4_<3beByUA={LXDfhy&Z*lKw1{qj_S{Dnm#JHtj@II9((mGV zrRdPp+r*<3>m<9+%b2ob+NT%TpZv}G6C{ycx&S1HXgf0P)4RR2Po})vQQl!HZ}Ka4 z2E}wNGUY9W1}dmTs8nlab((E9v(s)n<`Qt*FOPlF?Y);U;Fgm ziCy8^d*Pgod*9&pipK?|c+iLPcT|5N{c-kqq2<(* z0_`7w$U0*3!t{)ir`^Kov1YoB+j8{C?*(N==S6q|FpiR4{|SV3U4r!5F9Z#y3`*DQe$c9QeVuDaWVwD{k8xXipIDbCSo0TQ}ycDcKuXHw_WLO_3%d z(pZ;{>fMxc@aQ)60?~v!6QBvSeE}G=A3a^*T%P_T>kTvNn9MI}IW>ozcgJN`BcFnWG$ zpMOZ{W2uO?JF;KbpZ2WxA#y2TaW+|7FehPcC33(qX$xAQl4T@2xZ=Rd)cBE~pX@cyPhMPDi54BrIow*d!v|o!t4w3S!UAm%phU2u2BW5) ziKc(C`b&DSpML+c6WQ&V2DH5^y?N#EuZb-9-?yEr{kEK4c|!8S>K2T)1+IG{ySz#khH7W4aWDn&q*!k^h-T=F!!EYSgF1A z-)JIRD$Mz$O*?asJSWRHOlC85U#cT;z*eH_A{)dE2Rf^!xD1c<sHeeAob7O!baFD5KNd$9SjyAb4SQ>2H$2$Gv{?FctU@rEOm9X7#K0P}AuE<=d?(-J2`{X5 z+1oSB#4lbm79GiF$wiV^3s3sXipk+g&nNTY7RMe~-15~4DU1_e43GROyqY*VD^8^6 zlbdozeubzLDQf!n5_9=hdTB6>F%*f3T$Q3=q-@jM*53vrVjo zhgg7xiF322BFrPg-z85DVFrulJ~KTPX@;=+(_=&F_t9Aj2TGr?)xG`I}E zZQ8I*hu6yZ3db$8acM|+DlPwUJ4lPsI)kR2-e#nAeQx4d?^A+h?X z#d|nzdyDeJTxKONlPE%8PPr{!LdgoFX-o`!0%eC6VkCV+O<*T8L2QcuC3spVFtldWhDvu71a9K?ce`_NLGE z?H_g;I{lfP3tvy`0qkfX+;O9w)i5hp z1MS=CHahPRQH;oyntBT&^+=*J^ISZ8FEG!a35;HvP`57z^!VZCtYxBJ=K7vVOWdACFN zq&}YAC$xLLRvL|hE!Hd#@YsGx7a02XlzL ze$aSFZr9+j4x@)jdF5CK$0Z03-w5sQ*~0oqiakGsA0S_Q%;Iu+jL)M8@v){I!DQ+$ z$Um4F#haicV-Ks}bz1O#eAB|p4ODNur>M(2$?KTaI z%|G{eX?hODSI~0mi5N_!j&Hdv$4Lz@Zuv5SQAQg*4>7!`zPw6x#P~_dM`zj1Qw|P% z_coyD8%)C*&D%BxTCc?=MGv$+jmS7#5onucu&5cwWX+_e?q>e-c)>(`+>LlLrD&R5 z>Gy#miZ=SG?2Q=8)2L>8FNU5|W&R!36=} z$!6>;TXNHDPH*G|_-u&_E7#|=pp{6Vc<5=H9vU3Ob46J4V`~APK1;{l?ewD_ex}=3 z^L(G*7ZKrT(KkAaA3T9#&+02s)pdJiC~6GvuVd4|8xg2(%UGgq6`j?EK~oxdFTt$7 z$5c&vYi0=~R@4OA4nx!prkzpGeM<}TFs;N~Z!DzwPO%bR!p-TsURWLsiPVq%0>pNl zQh|O^;GkuC;DdgHyMV?eqOxvAm8lb#g1NhbqY56RPggfDuF>qkLMlcUayu-sw# z;D-+YKMW;zg@0yQgpAGEA#}Lo+CtJ7I!y<1*AAX1(EdHj(CRIuS=+DV8P`&*f1+nY zPWL%5GA?Ih2blO__l(BK_%OH2kzBWabC3G>Ru=nH^UF@pF8m z`xILzU4P7@zt#^1tCEK9UK zTLyDSCsTjQ({Iqy01OyVJ{14>-=o@rY0ocNuQqA%b=HW|k9UW;ev@AmqdJXb0FxQ-&h?1&S&AdAs0JOYB+9*%uQ${zVKFDot69-vC^vj#m&`$pgC zT}tEB!FfD6k~RJ#Bxf|9oMv+?ZpZC{xOpUPXDK$-0HtEFCR*(l5}Y(iS+g#MODFZ% z*JrEeX4jrD;J|vYnkS_YuF2-rb0243_4kcG;@5b1Ss#t)dQk{R!x)N<+fwe! zE3IGjzw~i;{!%*27#71)x9<9R>dp;RBdxM}hM`|X%lfQ9v@lC&c+OeLPaMohgL#|<2Vxx>42m*RM-0;MfUUI|a-sSBpx(sfK9zJB(O*x$W+!mo zq5cW{30@tlA%Rn1F&)CIQiGr0pnlxKEs(hSvV18G?pEBp#5>e zTDKHujn8e1F4M7Y4a3uOIGkeii{Z=Aor7MtRnUAeYacHcQ4^JlhGAnvoz!#L^$8vk zJ`4|xPc~&P$L3$=f1`Me*W zpTh+Cf%aDcW)y+Wo9Lwd)j-=85QXU>fop}_jraw@ty@NzK7<)xv7I$By>uG!o&X+3 ziQg8l(H{iTQ<0S%Vn?KQyoP7f#$fUBWT`Pejw&_YaI-E#_a{`j@k_3$O`>W`2peVEKWpnq2OnFQFNWY;ZOKK9T)b5AeO|M&{Id3uGny7V1HW(d!q2Se&mM2$feAm3?^QnVd6I0(eILUu zuYFv_>VNcWp)wM0ku0;8YkRqPW@nc?kSZ{0LbVHn+cwH)O&!Bbx04m@AL$ZB_T7?o^Rah-+Y zqSEpd*CsA5YOGuZw|8B7f=6AZxDIoj75Q&W1-7pQg7*Du%S(pR`xM)MR9?cwEw-%n z$L)J7llgFosp0IZj>ID^%!(z?lXdzjZV?O^8&o)5bjc~$32f>ewwrD!S8VEZ?E^e+o&ekm{TE~lbH)5ubc5V z|I_n5c&YbQnlz%8W-$%zIK!}tgYCo$n}ca5`2Fe=Njwp@Hy3W>Q51Uf&6I<6e$q6+ z2VgXj8o|-h{3K40O18LI>%0y~Z zxWn9sGwmzR^fO|zdJFL~%~{ELc04N?+4yd*lr&b{V_XEMxm9=v+URLl7%#F6et0m> zkmvNyf9?w3MSb-=bmOi8h=tY|o<0I6Ap1wmicR@B)}NG4+F2TyZN!}3G3e*zty^-^ zPi_3iksIG1mh)We8>fzZjvfg-|7Li<1zQGJOsX!-Td{>6Zhlmn-pLaeMl53+>znah z!;T(#6~DE&^-J}gzrzPY9C-+cRykuo;n;vMwuER&=I+gb4jl4_CFy7Qu^MJ?j4ABK z8k?*qKf5rPEwkN0>Oi^O$YdEk3^?81Q=?@Jbbipqc7sO?M+*gz?QSaQB1UF6Kze~JSyfm!<#1u)gHEdZK5_d1naQPesFkQb+EA}=$LJz zgS72r@aW;qM-Q|}Z9@|_jL-UnKw`=AU~^M6h8^wk<%3|;(gf{@J~x#lPS_g1F|lf( z`%#3T>=M5a`$W?Yy75E}Vg`ACN=RG9IXh~g)6m!uN1F0!0qn$$9VeSpRTtp91yh~c z=H^s9G1VEkU(w2B%r%jV21pHpUwXP{HP z3cJ78#+=Hzk$Kqr#i^KEQtHrdp9?F?=10osEGU~lqhxxS6XQ*VQ_b;Ua%nUfG#@w^ z2X=$7JV6w3h7SOO{Ac}R=aO`N0yhA>^5llc- zkial-L3zX10GjdnhlGPq8bH?+C7Mho?2+PUV$;t1!DELvA4}@2y)cDO6qu5LB8l08 zL@Msgh+-pkXMP;J?k7;5E1T%+2g%?(`U=9T$xK(0!gniZV{s&7Zs79>lbzs{czsiH z)hPoVG74wTygAlLf^+6BV9S{dbu6FkP-Z8~F3c>HTUIsIlkxQg`tpIXZ@!D2P=nYx zKFBu)I^mM}bIK|!BXcV&DO^%~!<$dwJgVfW8X|Rj=h%@>4Q&KJ;#hnOVnwiYnn#&R;k?7N z@&KfFTa6sF;ufVQb_Sia2y&YFM@#a`$^yqP8?8#U@q3>bvNquvb0~5#B z7qG>nlSdq$(aBleE1bsoI8m57bBAcT0AryQb z1A9hBBTaQFY+Ijo88NPiz~*>;Et4p$9$%!WC0FNEH{c@%%b}+l{z^kL|F7f!sAfy> z&4b!%hnYp<7aAGt*AV82h-1FCdwRSFxA zJM@hMD;b@$!)4TbjD+t~Yzf)UZ{Dowm7&q5IWRU&3mYiRgUdG_KNyqmB^YNewr}ZX zM`JPmoo!f3`Zl+cxw1`aL5g(Z0)TzN^qsIm>zBqH4$i7^0ETqL=>c|lH^~6BY z!;_}PtpfiJone8mjab3{1z$8|tQ||v<*wRPQUVJg?XzigA&Jq8>9*qIB`^}}G2{zB zE=Lyo|NZ-KYJf(Ty@tNMqO{h$*Wg3$Cu?_SK7END+W$70X5y=<{3-lJc}{4yZ% zF=0ZhmsPNgXa`;$EF&*Yiz6s_ajPLOPGkSx!ubN)qnE~u2Zg|k`xRNS4}FW^`y8wy zvThvG=NpWB^+x;nQSjpZo!eP)|1O@D*w2p6y))}d2)Xh9W&qCnOzXP2p_tc$=}vy{1x1(lFDaPVI^eW|ralvL1{O>NR8lZvT0sz`h=R}bg!306`a~(lBk4G+7ha_< zukwO8+*Jj6 zgx@Imw+P24mlnWYh{pqhTi-De*b{=$J_V$UPAc0g`;-<0FYk*2Z0%QGP@Fq&V8IA{ znF(KLvPH??cj_xuj9xufal!kJDa)5nZ{d7K z{w(V_&OwxqCH`pA?|E*$?M=U@AyaQ4Pd?RlPQkp^0hjl`vR`N4tNL6`svL{oJYKHs zIKRQUQ%2tdgEd@EcG%kY+iqFU$j=QI424O6`ppRRJ<}iQTvd2xmWn{qB>Y1&f_eR>nf^) zo#bDyq&j$cKiE}k|BFo}asBDceA3$*iTizu3ty9!|IUG%;cvD=T~Cw$&3%vkCHsOd ziAO7ZDUg5ogJ8DZBJ4fEM0HLvuzw16&)3R(T0vKC?#_X%KsXOq?vi}sQ9Ja{w z@^XLOTl!R|`ckDs;O{GC>eQJ9!77s=s!>UP?n3usW_|+;0=xq8N+tfEMFweCd#h8k z3%2*~Go^QjLaxFo#qV0-w@dt!Z=MGBX$C9ua=Kv3h!6RfKM9{{ICt2wcaDSm^b!KJl3s!h-2Bhx>a3BP!BPQjwn3eG>nxW7*S2ENqeDZ*gCQqs!J z)>)?BX&<~jFZU;?c>DH6X6BCouPwrh-Z4-<@eKGxw0QE7Ls$%@`?1i{z7b?E(oRBu z(oW7SDC%<*w3^jWmgb*dFaqtN+xoGun<8@uwB(a`W!2fWCS^Fd8TkvX**g5qL_4eZ zKE;D?zbd!P^%JG8pUAx$wSGkTR#dsC(V#wq+W%}pUR6H&9V6fivQSf|Pm4UZjiGks zb-`#+g;&NIaE>zua;{+YkhDCX{l|f1KnT`XkS&c6td4HXEVw6!szY8W_nk`Rp6$7l zzggtL3W3!LM(3)W$_s*L*iv%n-nIV*9i{Q8&>czq5GcRf1zRU|N0-T>f_w6EpVS#H z&8Pa?R}{95n85$&`liYQoxZGkR+^7bXpWepT;hy;mSKVLyOsEryZuJwGk0;Ot9Y*M zDzeVkNF19N?*9oEBtGaDF1GzY!Nv7)`}u@m$5XyDK5Rxo@Ito=kYk|w@;9L+U!!PG zF9^!VIN9H!J;UvwG$I2;pW@px^)&4Eu}>>#>D%Y*-hCT1W6GyV_^p)sC*_0s*V-3V zKKGZpcxIXY|(mj>p2qthF)xOM#1^HTXkMh_oyvgD{(HAIQ#VDsnVh)%W_Z9E|t~O z68GnRzKt|i>xnxv|1==lw?Pt&@9;ZZD)e3c{O0AJ;o*0h$;Tpzd*6Q;m+Qa8{S-2g z-M8k}z}L*kzYPCN@=*;j<{~?OROtSd9aI16J)!L&o>}!H=9 zqd};Ye28yA-$ZNxjZ$m>(+aldf@z!59yDBh{f|lga;YT=Jix}V6u2u{E z0uMcHjqJb<=Xvl>!AE#-9?yb)tp~qB_{Tl?&4OR%!G9+BLJ!Vu6Y@*1s_JmB(9@f= zI+$<44shp3?LFQt6mmXf0Xc4FJ_DRDJh=HrY=7rY4^E%LApKLl)ZqoeU)LbcUln}2 z2Y*BG-5&g1!8dyF4+V#@XN6sY_w(R?7kr=x-z)e59=spd|NhQ_9z0)g+MrU0Z!kW< z33~8Dgr2q{(cuWesebEljNrpP_(;J|_24H7Zs(^huW^EhJ@h9FUgN=e42*KL{?ziB zDfIMuo({7Guk+xQf*ZTe#5havKYHjRg6HrtLmwCXb`L#$Y>@2jeGkt4N8p=0_zIza z%7b4b_zn-=D)i=KE;FcL?F_g=D~j;^dmg@kNJ9l<1Lq4g}&57e}~{kPZ@cB zEqING{(in5;P7}OL+(5*`1PLrnsyHU(8Fh&(A)OUvU-;B{!XKZ-h8{Zzhm@msWB%b z^z=DM9o`cBhaUWW!IygQPXzyt2mgYv;cq?oUcrkzcz>P?AK-ZT@6ULD=Uxx}fr9_a zgC8dNgC6{7!T;dFM+*KI4_+krXC8cl;5{Dv6v6-D!OH~i$H$DOEBG3I-a}t0`0F10 zY{6+aS{0H@1?=W-Xezq7=H?#G<34zk55C$5|A7zw3m^PJAN)xl{6!!9P2dM$a8x7{OZ@B~_3m$i zH^~qfmmIznyhZT1;0NQnH@h9@gID_C&A>^Xk8z}MkU2OVKJ<6^;J*_-gJojF^7*6S zMS}C%5~T6251*Yr_&in)Bi9Z{CFRHwD4~^%<#X}9Gp{p=x6xgbA0fH z!oTQn!GE1IoZjU_|CrF#)3+@y4t|=s?dIO}<&$rrCh!|7Fm7aeEt_szkfenxM6 z?(xAl`rywC|KRb4G29V{4}9ncAW@RDNa(K;`Xex4=}n%40rrM}Q}}cV9}J&49PL9t zQs}n}eVx#c@u5Fi=!;JO;TB2OoqE9*TIMQ0RkC@WE&M;87oZwGV!c5B^gh{5~Ii z6L8Y=Jo?HK0%1|R%+AN)-pd^d2)Z_}wJzr0oxr(yhh({n$J4|~I@``sHp z$cKIia7s5=V$wD1W*p}TANsLA_;erqbm6~UIY?AF+TmD2|oBtAN*_|Jn4hC11CA}A;UvB*&Li}edu|^Fzgk^dwoP`Ck^b`6RmSn zwUJm|BX)SgNsVmu5}`ej8mkGS?HKqT?My)cZNMZ<%$_5Wif~C~I5K_i?0F9DKNO)2 zIU?8@B0^i6VH2NZgtyT_%w)4p-o&HGz42q5`86$zHHSuz!WIzCN$m2{G-{&LP+wCQ zU4m_Pl5)zM8AXy+b)!a4m@pc96s>eGCheOh%L)mbS;R=J%1PE^&zD4U)aZ$!(M6=H z$P&m+dv!QXE2^t%8^L$nn2=-;c|+{#CTCQ|^ojH@G@AZTpnv1}Iz;~`@o5qNH)KqK z1SksM9nIum3}g&58N+wSjA3LP|L0g^3?;`J%k*QJW-Q}lnQ|;sjvY&}#xXbS+eGIE z;k)CQ!+1_*JkyNlxZ{~-JkyV7%JIy3Jkw9$6en=32~0VGDJL+^M7}%GARKq1Q3&UH z0&|$iaVK)zNqj!Z#NxY?n0}JE%koU(xRdy92z$Yi%8EFJP!SV{ia4cEkx^|COA-nR zCG!Xsndl)y88TqVP>wcSMza*5(S|ilhY}iXC`X%krjSCT4Kq_%AyZl*Q&6EXCY~vb zkST}ISQBBKNx>9F$dpBBoRQO%QfQn>Z=8{AtjUonsnB?HWlAYD!B86QhfLvwOi6_% zm>ik13Yo$RnX(L-LJOHv4w=FTnQ{wFFe#XF3YlUInUV@kG$KtjnwV&EG|32I3N2(x zEi}ncPBMx#1vk2g^FG=X+-Or`qfM!dMx}|&te88kq#`nR#thm(Z$Zhlin55auv{Dv zS3>qq2?D7~^1d?>s{PFZ6-8*fs7Q4*8MQ=alOnV4ST-|uXUxpFIOa*N4O@7DlAKi{ z-i)op=t_~0*8>R{$FP;w-079`;2aXz_bi2d(6BuZ_U?jnqZ4cahds<18n87LwplxC z-h#Q2nnXO#_vj=-d!R9c`DLd^rY~5Ox!sh&zKJzX+5GttJ~exJ8MeIPT2?e9l+B0T zZ5Bzix;kVxC|fkHXp(Vv4RB`;Ut$|L1w|t8fw5(g*wSTa32N(@=8Q3t(Yjh}M>%(1 z*&NzruX$MnJ5A|JY;K0V0!csEBa(DP2_Q0U++%X6;x;ulWn&d#q@7qAZC>hBkFJfF z-NGUyr<|G{#v=96m_^L)W^$V~Y=?}5}op#HLrtMB}P# zNh~O`k=z+csgX7P1(-#)>o_B_`HCL|UE6IkIHa0=k*tV9rGo5Ej=a?*_e_&6e>MxV5hK?p6OB-_C!+yPN>$j$F;$N} z923s8Ik+GBc0AEYr&SH3tFSw%p^7FF*fJ9ehM^dx8=jR5=FTr;yXH((%$+-H;k*d> zJ9aY+8XC%9U1Q_2l<}YuA!Tz>WEq7B0Xr6xu-W(1G27OXwz1u%To9W`tlqsQQ?Q#y z3JGW5CE#@BP9nYpE(}dA%$&CAY@*V#oLL}GDz*|PP_AedA|jX?flx!y99@omXW?@( z7@-EVxq)?ALtkX4!nFc62lw(08-z167k4EIHALogLlO%;veM z%-9nVdu!TO!D-?>5}ib}q1qK}PJ}M0z&WQll9yutB(i6vPB)`y$u#Kb3(C#3Ic~2& z#we^BXThQck!g*;(9BvjyXZ(?t6ZW1C@9>2)=u_8eAR6k(E8 zktB7$RNayLa3f|bW1%x7Dvn};bj^U7u$MUz;JmMmQ4&Pw!ho3@yzE;Z9qf1kL_ESpm{AHy!L)Ld0e z_njS7<%0R;b7n?R+?1rm_U zr+m%~hWGaE- zDx#S_VQszj@L*LR!4}cec!y)L+WI62P(?3rt(a*_YS0}rRb)Xq`k%xP?g0Z2)}|r0 zQDOH^eRLV746r9X50l+tM6!`F>VY`2oQYpw>x((vLYdc<{$j^b{8`>P^$$g@| zL*eHr{1*zZRroIzzEW^{eM+Z$iK4$#(ch?W&40VXwLE`PxTfz`xR%Ghuj`fPOGSSd z&aEB}$D>LLB)jH6R^h+GJxhP4;9mapojeM}=hygI`a_5if$-npXYu0%r)3)VC_E%M z9SRkGs^W96!sjUbK842w_wr8(PKV)&-o8&ra^A1-t9 z_=(R0Dqa5WJFW@;t->Ey^3W0^tIwwueyqa(tnd*Ee^<$~PT@Nh{-DCg_rV1M$@36? zHr;80d-Y78D5XI3594R)>jkG|Mk+j|=+`T}UC~n-mQSamr?o#8H}C72bRSjtBZ`kM zm&X+!UGC;RyM4>?RUi6yefWRkL;rV$>vGQ_g&}y${V0Y17w+5qjuV{psq=NJqSyJF zTp!9Hy;KWDU{~bPj z=shwDba)IutIu~7-lg!b6uwd6#r<%BK({yHXZc*9@Gga~5}fk2S>dY{{T79f?~e-v z;=dI?%YTO8lwVrnW${Xd(~>8PpR4$6Q}|LJ`c;bl2}R$k@Fx}CrEtx^-vAIHko+1y zL~xS-MEtCrM+xpN_Y)N#?XRXQ`ll41GZg<(3O`rz(f0Fz!kk4zLlrVhkmW1r*{G@{SSTUZ&UQID*F3< z=r=0*KP&ntJoF=QkHT9X+~(`B{mgyROjg}HQ!IUOBr2_sY3Va7uSHel}k(C_Y-wHx>OD zMc?g1Z}+7nd31doFc1I&r8^cso9-ck6a8NmZa<(x_&W-pqv*BYjw<|JMQ^`6LVUUu z{(Yf84w&w*(tAJ@NX~KiSvh~D_-p-aRQP*}{!fA*2Tb#SOK{>pUeWJTd^G=o`5;0d z`r-Ild4>s2`FdaBBNhIp!ixm=$}>Unr=^LOKfNDBf%t2ADiyB#ljkbD2XQQ)jSBxz z;r}%V7YN>bZ4#W){RltHXQ!f{sPMgtzFXlH`{M$E_!F-a=mOz%!3o=mpXGm{qMxMj zRf_&&h2N;~PZWNK!f7p-! z(T5biTj3`w{Bwm*^Wi^N(d+)Z4sTVsw!^y> zPGe`w=Mlx9)`(erlcLx5)2;BoEBgHcxIpmAKUi=omnryJ{=)>Pa@6u4t8gvnVjuoh zivLu_zfSSd{F4gT<@(Tkx~=Zz=pni+%XVeCQh#y>4ea6#er`{_7M@d(YW?-K6+TQ}lN!dU^-f($ji)3SRxJSM)kx zk11Ts^OVAA4@k@ZImLfE(y{n!ieAg}j-oG7^dBjDEf1}qr$F+T;%E8O`gsau585w{ zRQUc%&Qla#pzsS6|1$8h{F91a^Z$vWpP}e~4s_4UtewV__75=3U zpAiRw2!Zr=8h$ok;|2HXEw1Rb9vXek9daFTP5k~8OETp)PuA*gW8zt{(l2~Pay;%D`6 zsiGgM@^!7?UO8`4d`KqSufAR3^A!IF75_sO|1An1rts|wKTP4TD*mS{{(n{U>l8ll z5L_UTjPy*z=68tT-h2%cob)pvKTBVz_-Otk6;6AGTKZEJpGw82RMBfbvlafJqF<QGK6}>LU6^eeLqHk05M=JhTEBZ4O{f~X?1GQ+%|Xe^R)fcN#PdkrBLha)=Lp zj1PW_;9mPVPtj}piTluh+lRhg;m0X`Uh9KDr|{zy{o8_j_1_~n$$t)h)_(RVK3bo- zhmqDy|Kwa8E&Tw&NuRXGvBif7?oD@?;&Zm*Q>ggpbjSGcnXLF|`A_rVbGo9}@}HsT zwfu2~YyDrSaBWvNDtwgE!~F`^e&BZsr#+*s-ri7nk-~FjpiO$#{LfK1?TuvlGzw1T zd!Ews3PrE|)inwqqxjsea9T59`9GoXaSGqAaP5Ek9|0i{NPgYl%U8J0?>7~GqT)YN zaIakz2~PQ)il3Epvf`udYL*Y5`HD|O@rnBIxm@Aee!lO+|3`}d`HKJTijS7_ZiQ=m zdrRRHlzxu(Lq?{%aMz=6{Exk1KiZR(OrVA5-`eg+HbE>vG?ra4lzk5RnnQ_H#gxVII$F zKmSd^sk}7*6BMrN(HOzK{3i=e<+~I=TfXIjd-*R=xaPlDa4-KV!M*$&6(24CDur)w zGV=UN;o8n0^uag#;O_`d@@V`2QqgPsA9NH55r|&f|2G9E{b>3Vedtg1p`W4Xb$wav zLto`Xzru&UUE#X@z1|0Z*av^b2S4;^(vI;Py1z75aIZa_EI8@&9Q>@k%~E`{J9j{$(-t?&B@PV`#N0!6RoJVN1G&M|^}<(aJbYrUPO_-MVI zuIRNqXDE6tPh80udumj77AN6R@?(QA25Q}kM%n-pHA^7S)?&rtYt3ZJR)cN9+FRtg;yy2 z_dfjpqUg1r3r0W?1k%GC#ph6k&sBI(aIZa#6rA!^ho9A3k;3a0K0)CP3ZEf3$)oLO zj>6|DdCpRN8Wo@O72c%q3ltyC|58O?qUhTdy`E3ILE#$}{hbOwUCDW$!n+jx28GX8 z^iK*-`n*ulZ&$d^*DH#T&e!{jUgzr*MX&R<-$*2eK>FAD8m4faucH;-g*dj{PZgZx zPbj=p(d%><`_Nyi=yxkV*D3mDh5uO5cPo4d87zXg-US7x{OWoUQ}{wvE*B_1NyM@F zO)8w8X;}Osg{KsLrQ)y4>lTHdq0+rW@zLqtqi~(>g9=}+(tSel*Xh2ZaC)c1%KwSt zqxpZKa4pYXg|ATQo_;(o5J=C975`;|Q@PMRo9=arp57&~_)R|a>lMBBx4RX7zTz{H zGJ`;AYWnGdQ#Ps;eWk+V3a?Xqq6%N7@FfbrQQ_4J|E0of75=>7UU}XZobt;xkur%6@Oj7 zmMXknrMpt`*LrAI^jZ%;^r64ihyF2zH>h;CE4)$RuPFXn4{s>?CPm+^aNQsK*oV&- zivB{yC-)>M5yAQaN}IwV3O^6mw%m^toapqt)(MJU%RfcomnuH96n>e)7Ygnz--zJE zTbFOM;?tt|T&(cb3hz+(cNBh&;;;SECWYUv=r1qA1p>*b{nAx}lbp+xo_`=X>A4j@ ztIwMhy|&L^DSF~H2tNwz6umC@jSAQ0`=Y{izq&_oulzY7lMbbsRPyHwZtcX%gYCpP z5TE6Wex?t7h2l?pvRXYm3AQn!Ezd&5zfO-OS{0w) z3GVfuFDZKM4|geC_a9CjkHip2KibZh3hw3KC^+T!TKud&FIIfkDg1j1*Y)Bp!HK^f zPxUDJRVu%qDqOcm{U?9{0?FU5=*I|7{GY(3et)3wD#d4= z!Y@$xg9=Y7TXLb#Lwyz`^a)2K04hJg+Hk1YZRVV>0YRCt)E{gyi4)frtpml->Gm-|E0n;ecmKQ zMj-jGQ1T2@c!$D|Rrr+(A0;^H=X(6Cer78A?<)F53hz?%-&MHQ!;K2>RDAAH_*Dwu zqVTH~{-WSizH1f!wxZvnw59J z;9mQDS8&q*4ft98f1>zk`~17Yb-fsKG9n`opC938`Ainvn{KJ#qzBEvO5xY4e0|%8 z&uYOb-5;xT*D5}m|Md#j_3JLdNzSJfpY@9V2TGpj1*dc=4>En^yrt-`Q}mxH{D%rZ za0((LP`cWmA1*lY*8cn$g=>F4M)A>pc(ULm=Z*N;aw$`Mw0>qQT-RQ%f%uI+h?;NJ4x zq3CZ?eEzC%&1aY3UcEV|u$V08PZXd16@IhAg9^Vz;Ug4&tHMuF_)isHDLBca?PRf{ z*Yd{&_u9{eieB5#wTi#C=NlEhw&&XvuI+i9!f#XZ|4#9L3VE>h{F0)-UD5X_dY#`- z1*d%dSng(%(Rv%}!{=nh=O*y7`JL&*=X8Z{ zQ1pv@_}`-Ff3EblPH>W6k7xf&(chuycPM2oQi{Y7ynGH5ob;yo9IfboqwMW?ANtXPQ@PxNpUqc^;-kwk ztmw79%~$-j-#A<0+TNBb{<=OkDf%r+o)v{jvQNuIUdGoa8?bKda}X6|SEbj8XU%ihi=f^?ZJ%!gc@QY=!Io zNxi~{EB;A^>-q3Y1*iP#`S9Bnevh)Z2NnLB;=f7Zx;}oY@cR{?uN3~4;xl9hE)b|* zX!{%{IO+LT{H&gb3r_ND`y8ckZJ*;6uG5_*IHmi5lCx6L->dLj6uwU3ZwXFv{#41? zqv-Yg_CFP_`OKV&$Ox3L2NnPCDEuLXrv;~UhvR4UbDg5UU*Wg;(BI=j|CqvcecYq? z+@|;k!ni;n`5#eo9;)z16@I+J|4ZTH6}~~?3ly&TM-;BC5W za87~prJtL>(2rrpAIGWH|Nmj{{o|{u&V2u!A3#j-oLFfaE7q+B8!E&E(DF;oAqnhA zfYc<2f=xnlASod^P0rDvRAWz~oEu`(Tc_hpof$gUxx<}09cJovDC5v5zjUN6wc1jp ziY?P}8mhFlNd3k4^Q`r(eb#xBQ`_(K-tYI1?pIFsUhnm+XRYD%+Gu{#XoA<;i94xx9xD5 z#V@nucVCf`x6`v>W{TVC&$sTgveQ{&@mnnYPg?v_7GFLqrQg2(wKfBP$>N(VJ-;bS z>9P5u@`-t?#qYHA_^f3w@*_sS++uP$4p#@C7crlzy?s8Nd7u51lY*aReoF9n zn4cD0O|rn=5ImPAU)av-o!>v0^t>bZRF-!zM$l&Z`9kKof=^?fCwLL_se(^uUMRTH zKTYsrmM;>#g!y#AXEApLFJn&UTz0;UeogT%Ivkvj->zIuirB;OZ!j+t{3+(1;LkE| z7Tmm#yHD^RvHXbOKW1*)sY%ak%twX%S>~qR8u_eATF}%V!>2Mg`T=uS z@EAm zj(LgT>zG#vzJd7~!6VFFoo&DWWT$$!GaXa$(65jj*c$ZC=N0VUCip13<+y3un;ef! zyE5(F#5>CMelhP2H~pSzcZMI~@})I2+6+I=+~_mhVLMDEV97`Le9{%XpLw(3r?;4-!1rY=JxkQNaQqg(_Vzm;b=B6GR zUPhe?woa};hK~d_?-zUr^M?gL!u&D8O~rac@DZ+Xrr$O39=SlryPeC^@P0mT-z~WL z06;F6vym^HruCTiWcX?3+l74HhqU~D!B6vf{!zgTc|blTxN8P#t}iCuGUio+AHPV) zyG`)^i#a`lmrd6^kL!ieKYEGgp5Qw^s`*2L_q&>#dS~?XU!nOsLjDNz!t=Dhk#~!= zd#m7)D>Z*w@cxf!{)XUAiRKktuZ{l5OwIcQFZ;OWM+A3yz2k)7Wz37X9T@$i%x4LH zgt;ep#Vj4~I>GChn|5aOH#2`o$d51|6?~NW^MW5|o;Ov;Z}jiDTD#W>9x2m&yWlRb zzw8jag86R2o0%ULJi`2};5+8(c#FATG3h+bJSw<)xjusI6ukcvTF>*6&)3`y=)KWD zvOv3=1+QDE`GbO=Uaa{M!6SUXg3JAx(eH+|{5rvpEYbWS!AGhzACETLnMP{HWl&JT32(_HNl6ZCQ^!K3}Q!?dAv{zHKR0-y1GfpG_=X zkB>MjP#Wv%?AR3U+~Sn>bdw*2E-x)lcg}~CRA>=)C~08OQu<_Vr&EfL@ovU<7M)Uj zw=P_|Y-QtY^(A)>5T-9%(ub1&D4Po{G*#ek+SggZM`Ok=>}Iq1a?}me&{g3ReNgvR zy>Gr%?=QfP;^A)7F~b0LgT#3_#*yBxsxe3Ddy=)cS#Xd}8NQ6eb93;6nD`B#W;#*+ zO?V?`_A>qo4nM~T@ZN+s-zzfSCcN3N$`F1Rd0;c=pW2nOp9$Xz4?3pyU~dCFQ7tio z?8(y%UzDyrPE>xoCh35uxnfZHk?oBAO!-B?NK)E=v=I=S`Hq%$IgV=%c)tnziQ?bE z3leplV2YoHEE#_sjN&iD&)z()cl;QF@1=94!w}q#pJBcb4nE7_ZAQmZ_AAV!{rfrm zSBh(GX3P1X(zcpDi~~L z9zoN~zr#<)Pt%l%;@?RRFJRmGLA^KsW&HjJeoMQrcCnSwKi>4Q{(tSfd5T^;r;J6K z^Y5vyU7DSh(wK#tLsKpjBfbmBb6O%53Rl3E1x{nVmv|xZYcGB(?<8R_zCX`P{5Zyt2mwR%|z=X6-%`zOg>> zf+ylj{M^eJAEobIFY%@fgAiWg^|iMpo>FPtVDyI?8fy}VDN_ic5>T6X6&X@7gw~ln zrQ~l8t*%MD7itVO)Fi$|vHhkd@jT2?(&i22&L~m2t12!kA63e{!BH=FA}ZQ>_m?IwRv9KEo7bV>i#8Rzo7 zp;{#6!O=u0uQu@}=QdfJ__3FG4LQ{*hD=eLH+QPaOK|W6TSCVsZ(A)k?aPVmo0snx9wK0d0-M3qP4*ENY3jMC^#)OGEEAS!e%wNR9> zE<|pnNQWxgyz)`ap~$KChSXV~H~3Ptz)KumyAM?#_F}VqlR7>V4HSBbNu(wEVfa4@ zD=V+T(U|KET}K{TG;!2Bq~r)u+eZD-{s{Ks+kUX`UTN9vYh%h)es}q`rDgL<7tGY$ol{nRZP~SD`eeg& zyIFVMJp}2gS8bN$KxzT5+vVaV^tvl|W{fEw?04xSi5;UrtrPjpsH7 ziV*t}6}JbuV=VhJwG_yHK6^=^=z*N-fIFPKBv7(_QdOYrzR97${P>g`1I^j5H?KVGe=uVI#nLCYbl~Na8{9iZ2w6A5Nep>*-mM?FBjV4la>X_ zvTw`}l!O9qRZ8z#klKKY^y`>v3#tMol@@TJZU^hWjP@$ty8J-ivV!d8*dcA1HWJTu zerc*tnpn<+BQVVoCYmJ>&rJ(&9665P$P7~J``MO$RqpJYGwuw=aW01+$(y;MszYGq z%p)Au=%MCB@;jLGQjAl>{D|O<%uSM1T>x9p{5bj-+Elq>Pw}bruqjlTf^Eew%d!KC z-rsWk8JCaLL5_1?I)H1NBJxbmafX@GTv2X0&J>B9{|-_(j_U7lPsIN@gZ#b>oa{J} z9%@q)@&C-gPi5d|GVp9v+==uDGjKNpFU`OgW#C>0zB&VM0{;MN#Br`Cs(m6)^xm9_ z(ogpTO~mOr$%!~Ue>D-Od(y3`cv-aU_;H?g_WF8Gc7kM>K34t?;p2mgddjXuDHdTZxsN z+R6n^)3VxCOG33xtClXUuWo2+2ra3tZgQ5?tZM2C_eIq~dIHG{$!SvSMU^+*QrEBw zt2g1W5>@F$$~(hd%B|BxK`5n7;l30lM^lqp25M?;-_*3BrK8hfeRskn-K|Qt*F;51 z$kEZ&5jAp%sVx>!a>{r#>^J!)R-CentlW`ukP3=*oKDi}Lh7ABG@{Vu3Ue=|S(_nVWbwr~rj5F3I=?mY)Zf!a@^tyZ z@H&Fnr2K6fkCUf@CT^cJ+>t{y)%NDoOe-+vjZ8H6bEpE$GyEO82dBf^#NbsHCXq%6sqegzn9=H4;w8b9aCbj_xa7MQWE;Zv`vIHq{a`3Uu)v{9c!oXtx} zZK3g}Y>Kn_SxUD((ka7x9Nxrd0!TNVzfF{X6W)X~dl`QPhd1*ABWJ>!c4oK5(Ee;!qy$NUbYb<7oIS>Dy_S?+ix!U_Gc5wJn6A}AJ`?Z5p+pl1Mvume8 z2HR1+Q}0-$vrH4-ls}zE%Ce&%6};ec2RW=wBuCjprk%u_`Bb!@5{K=4{OIz5jGxjp zQT)ew$->NMAf`4Me|IFxR~uZlz27y5xpT|-qQmch&7s6h{*ZzSm5K`7ic^R+$;8_y z$?atw9V^%{(%*OP>gXIVaoQV>obwj^y5}`-nARbjJv35l$zfHl2X*Pvl4BKuCk~Fi zKx@m|6L5e+(VFM=UgCS6et(!=sigdS39=+B9LllQFliM(j$Yli0YwGAUXQWe}gB{W>| zoyC>G`^!*Cy0Y;sBURdlkVvp9=pJs#zC(Kr+wq_;_J7^ygOAU8NbBV_1MZZVAzdikC#L2K0&XAWiu z2k7GJp=@eq%6IIzU*7QV4-U}EN~r(r%HZH(93hYO!9nU3`tQlc(YNUc=?xC3Nsx`TL_H)poo=-KP&PGb z?X!TwB7X-9qjiU}sZY@SGUEO+%OMm&OZlAa&vkiD8 z6h9jY4lX1KRU^VND%#C4U9|s<=2KpN1~nq~ap2{#Pm^6^ZEqfMP&mPXHl&T>qLEnV zb}lsa|MvFSr4Zi~yGT`#@6tu11Mi+YmwXQYw0(gF{{^o8--b?nso0_u9rZOA3^kM=QPyGr~Jmx0V> zLtM6@t1{Xy|EKlqYgF&(Xpjf$4hPRg=i`bJE{cv#)&0mKVz~15Q`KRh5KazN=7o?= z%A7JZUqu=*myo#2()|YdtD!~Q*EHfX=yTC4P5pw0)gv7+J(7}&{g~8SSE#Dcdep_& z-%xtV=4;Zfyn4oj!_nfr^5?3CT=W5l$n5CP4{!n+iu3vxIcJ{dV5e~XuHSD zddiEx_3rK0#y{&^9$j36%vB}AT#mRd>RH!CUm}I^{cHS7XBBj9H}>pMql3Kd=f0f> zrf;C#B6?hc!=+*RS7Q8eJpb4KGdQq~1oS9ogn#`%qu2E>DpPm$M(4kOrJ$55p@5$r2={FszwQlU+b-41;v1gQ_xV~ET4~hS2nz>OlN)#O|k~pnc z$JzQH36$P~|A-cwc+%>EXU9qv1DB%$w7kooF~$ALxDs!s5??#M z#22d)U-COk{MGalPxYTv?gwNxtj_$kj! zxKnp5q;+^0qP>c$$1=c5~&HlqY43=Up~^DR_cPmd7l z&KX_q{adnTqi3oeo^=3%&TvJRzKcT7?7ZPyvT!fYxxI8sgREDu#dDK-nL|U?w-8fL^PobfuQ_;__iJzSvg{crV#6AoK!*$<{zqRy^t9jz@ zwNCqjm-XFquln;HN+rhQ5;IiP8GU)lgK8q!PlnJcX>dpzEuue2eg^YXtNsnKz9QBa z``;^uCVNBbtRp?F$*MoI+KtSdOMViOPN1)h^#uo8AT{<6oc{RP*1dEeW%T0s+3LNt z>K?ryes<|z8q{~chZArwSbf^liE1dG<|~;FC7BYITn|ra9}_hC;ZXeUsh9)5h;-uC zsc9&w&wm@o8MRG=HdHR^*^nG#AJ+`pR{vo#epq~1o$Ffg| zaSvD?#hr}7oAb4NC^`!#ooBoRree|A@dMd>ik+CPL}~i1k}D zFG}}Uour+=-`eMYd+GE!J^T;T{QJkn|BW<%I#o>%{}*ZgNS^TDlICBb{Z(yBuGU^v zSVDnWM7R(BC|5(`PL)w=t*N$?Y=o$4x13+y zy3qhvnTGD~Ur!ulJ0PWl(^7FfX$FwAz9@B~o;+>t6-@7~yo3o^{*opAl$3^;K0O{g zqEpH7r1);d(W}_wm70I}{h#a)y;i*t$ftP2xkn&shxgYh;==NZasHjU2U<;;`f7)6Nb7go%SSN>2@br88IYMy>BY+0 z#JLrT-~2nJKb4=_1wV@}R@n>X2;)}9lb36RxEgb3$?7)X(_ihO z_K8%;+Dl|jM;4iSads0RAElTTdy*%!^UIGiQ ziONF!aMD~!?h^cPS99fj{3`JCa5FELUCn~Y2dj#kF`wFnywwa{3s<3we;3T|zaDeR z8qz&nnFI2HkJIE}c694O$EBlKE#`v3`@7Lcg@$gQY7*8uZ~?QhNWvsn+0yl~s2geN=?yEzZcDE_qu1?wd%p}*6E~fOY zZt0A%rf%FO*U=VsJG!Fbjo}`*r=@FS*u=Xk67A^ja%Us1w(c+@?2fw8mQ7)|#l4+W z7`c_*U9%(Iy&chx+ru24PA7~(p^aQk7lL)PWfJl2V&p7al3k4|Uyjok>)O=SeMgsz z%X^$$L`e3iL8f}TS~}fuPY;6Q-n3{(*G4xI>p^P6Fd^g`ds{Y!7m_*G>hQg{<-5ec6HntM(KC9Y*cdOqs?sUfM2HP zk)9T}J>1vQ7H;j>j3+-^koeXp4$AtRvNcLA=Z$RN6%M!crfg2CSE3|Z+_nxx9qsPf zLg~*}!HntZx;r~sw~WJf*0qIniQFFU>DaKv?ZV@wDon}BZnvea4JF!5_Uq`{(2W~; zAnPDb2hNVpu!Fjz_E(|ufJL3o?yikaO#QE`Ua_^R`lhYbE0@)*tajMx=n^I2%`JUS zjQ6P7n~{2LVP)m&6;~s))4RC?&%1`ZHgo#xpaownE;EpOPH zYddgUA>94Kt!}Ea+508H$o{{4xG&SQeRQ8G{b*Z3|Mc^0Av{sGllDE^(P*#3+=DP73NsJC2ytv*qknilaCAQmfy1Mc0a=?C5mSn z*EzbvkvSd|D?O~}$FsbE!q#zES|rIFwoimzqQY+fy~5ru!d4ZKouB5g|B$2O<>xr@ zlqNsNiKjOCInJs8tn|qVALLwCP>A5uNC&n&y;HAjDq;2$>HzHeQkH$UZ@;Pn)h-%D zc+zR!UuJX?+sbl$yQXSyBh2VIZ>K6y7*+K~)&ZIK^v$Jopbm_CUe(U$uB@Dz z>Y9Gitqo6XG7`T+V(S)RCj5kv`kH$Y(tyrpXqrG;wHSY`$`B9 zFH_PfJ>;C|*;CCa_Vn#yIJ4B7Of=tRc~A7L=Rcu-QoJ6^ne_T&aDIdgDmSO-DHW!#3HsgL2|usX7>+-?@s@Vp961(>G<@)2G)d zu_@zXUcy|hU|FiPU8Xo!TZ|4@D)$uUM!_4H(~6nB>DRSPaW>cx$IZ$;#koyzEjPvK z5WG{lCp-Ou_b@m0(0KPT-)R8v?`D2P@B!v7H8g8e<0i_*JOg38M%2M%f7~+sOX^^X z9&ZiA{$X`I*@+1Kf6MYZf2jaE-ILX~JyVp&X_W3B8{+se<(}d^C%BfI;`|T6N0ocB zzHiO)JE)GQIImfZ4i7WW73tUUO>xxtVud-%@@j0f_{+>^3Oy&7Uo7~~nagrH&AeF1 zpJBdK@OPLu2u{x~Q*X9H@I2<%3m#y8wcz@_%~PBU1^)=k)1ATgrt>q!(eb2wu4MTf zA+P5;Q=D~zQ^*|kL_tai9nFCpJ?m^XHD`q52B1O%t$kw#PVr47-v&sW{B52=0= zZ)UFBkN#%p1?V-+`()A0s_j0=6L03OEQk3QS&uGfQ|}$;5%7u9Lvyi-IDM;y(z645 z+SGg%`=>I8=h&LBStoGS2nwn#Re=>ufR-@-U2w^krzB7aTJuH7ZKV3eN zLH-LY-%Jw;Y-;|9{a&#u|YW@iQbfeBhcK(kH{A31x9xCue zdS+zcl^J+*22OL-iS++@2LAO7{BQ>TlMMXb3_OT-GEsW2$iPG3s-E+N!<5U7%w54( zGcRLq=H^Yz>zJ$gIm(gVCrtWBn5%g?cno}^bZ*VS9bBF$ZFO3DHr`H$c;LScuL{6X zFE6t9I&HD8u5NmN!94nR4gH%-|2{$g@J>p+-JneUSF~J7m0zof_Em!A3y927FG853 zA1?3l_EX3QbX_1ocM(f{7we!x>_S! zR0zC}fC90N@lu6Vbq!4`R^3$HRNruua(LCXb;?1-pf7MVsS8fd`i^coQZH4A^x$I0 z2Bn5Cf*_XG%@IXfJ0k7j9;bSBoqB16cCO!|Qc7AkxA}f;9UJk^1`RZ)xgPbwUNO ze9FelcC<~bwuvtRs?s1UsRO=*s*Zb5ztjP)FXM$I>}U^nMyN7TyHHgH2lPe~bX{uW z=>pC`9j6*UTs~LZ4DIb;I8uIwoAWl3Uuwx;n?ZiD;Fq(zUT~xT(}L^sztno7Nsq^J zcM17ocK7q1(pib0(QoFBMo$UL{Uz@|j(v?KzuV$BTKpyEMvu{dLhxDa#?YZQ(qD_8 zk)Og`>bbz;G~^h0J@41g%+uY#hF`(*lwX>Y8~$-ik1cP`S14XuLoxF7E+g8cp1YXK z^ncFMPhpIngvIT5AJF`pHmRQ;yQGcM6Tr{t`2+!Mv@62T@Ee$u9$FhP{6C-F0S%zJ!geqUsHQb&hI{#A>A#Nw|pr=49c=X1j&PHn;HnafUpprQeR%d{>3ywe9xx4Ds&C5bu)~zt~Fuvl-(3sU<(%lK*7}`EovAp>(dc z;I;jVzZSb6GAQviN0|o-3Hk`e1)Y zf&5H;SZ?XL+~PMgm+5KCpg(5uHI|+o7H_opH#6uz$Xw?4TNb~<((|IF->!#eEpDgh zGM>20a=+f7gO7Prg&V&<~k z7hCdnxmQ};F85W;WqQ_S(7)N@ww=FXal3u(wK%Pz8arQ+4+l1B=Z{<5wsWP$Z9Cs= zaTofG{wVX0gW2QbU6#CUpU+v`w)5wiOFKVm$=iCqZgJbr-(>!Ak)FfMrT!mT+_v)t zd;x~!Z9ALqa}aOB&)DIMEHCZ+mln6}{B?`lc0Ocr*V2E2xy;v?C2!m3R~EPJe2%%a z!*pI>q4e8&uCTam=c}2^^ekpB^{=qFZRgKe`YDW=H}(l$0YBQlD0r>L&WQ{>>wGO> z@@3|=lbKVTE%=#oyj;jvvHqEY7c*aM>9NP%(o4?k<^zZKl1 z^9@U$@?iMe7N;~CelaPn$F(^iUXM|4zY;{$7ihSbFYcF6}?ST-yK3mLBq}z>l_X32xH!J;6=8`;n#J zZr48(@+SSSS$rnqGyE-!Q+f=~;zc?t7s{LA7h0U;O*(5WPDM@Y;^r zGw|0k@Bp2xVjGwK418q<-j#trkb!?K1OIjg{#phe;00xw{+Sv0(hU5Q7Psrkr!3w9 zJDGa;8H?NU{TBbUCI1DB+wwaszR8mRXN%kNPgvX@Uw&ZmPD{_L7Ps}BwzysYr%Xd& zY-G>P_?i4(U~yZ|MHcU}v$Z1Jls{^yo{d))kr#qD@^T6%2#|73BRgP3@~!Ca>EfTiD#_d6E1 z}=+HR|q~2x@em#xEa?L z3f`c_okr%A#@q2T_8etS_N=k^AxjU9M>}~u`l+R-+LAB-5FFS@&yDyQ{UM7}8V&cD zoBSHS%HmgB^0zXl^xNgT+0t*v`{$OPGE2`Zmb{(cGFmjmM(Lsa_ESXIdM#cKw@K#! za}wKP@$DA3?enOmXO1Pm*OIsMm0biOY?Pk4_?dX8GM9Gvl*R9~|PUjA^nS2#8pQW+Sr!l9tPn(f1Vs83T!>2Q+x<{MgE_2f# z8(z%3LP@9O&3C7(1fRw7p5SH7sSeO)^qcP(*Jf_p6ACU`A#n%mQ6^w%-()Y#_@%p-!E?}SGMH}^*O3Es?lwhCTL3BcB`{-@H@ z&hi6-)BO~*ZPPnHoe{RfcEL@184Q^BZ6;d zzEkiK=8p>gAoE>haKFa)<;O3qB#|3|y^LtkC+nTF{y6jL zf}ddS3VxEgxgXY~=M?i2A%B{=zOOWu9<$C^Cgjhu{5-+mVLo4QbEElU!E_+ zb<7_UyqWpKg10f>A$U9UM+EO=zEkkC%pVmz%6ymLeas&dd@J+ag7-6jLhu3Rqk?Z^ zzF+X|%%2u~g!y5?A7p++@Q0W`FZjdEj|#qn`7yyCVSZe2)4!b%{85%aDY#kpKP9;N z&iQG11b>40S;0q{za#j5=4zsWc5K@9)68=TSUi{e?L5KF^@gc}A7lAK!H=?j z^DG~E)9(b!7YX^}EI(cF6U<$~PcknS{1kJuE>7O`^9u0~+bki!i#ffcoi-!i#(bXO z-ZU*YU-0S77YlCI4J!oS&+Ca*g70MR3BH}Vna`3p{UXfGbB~6vW8NV2nEb90d=|^E z6TFalv*2&=`f{7#N13+^{si+*!FMo^2tL3(DtJ5dKEZ35Zxy_ZdB5P(m=6ekme>8a z34V5hsA7p+)@Q0Y66#QZ4rv%@@{IuYYFn>evoy^Y)Zq^Oo5quZReuyoUfaBpJrYpu51D#6b(_XK~3xjEl8`BFEZqCD$_d@i@^2Ep@~ zuMym=7q1h%kmZ{NpT@jR@FM2zf*KHn7<+TPUdF?f0X$zHYdg z59A5?Cs@x^!AF^!^){ntKXbFbZury8&H9$%hnY_o`j0So1%IBoSzkALjxsM1^2eCZ z68t#xGQm$UpC|Z9=JN$V#eA{gr{s!|Z!A<%-!QWx|TEW$aWvTxcJeS*7gW!40 z*9bn9`8vT1nKuhQjd`2kW_)iKd^*dU^+Ho#F7t?xFJ>MUyo7n5;AVW^DtH;o_Y1!D zBQP4a0l~Mi{5HWKX1-nU9n41re}wsig70Mhkl?02d|2>ZEWbnW$Cy7N_-^Jq1%HD1 zqk@kz-zE5d=8p;fH1pkpA7=i9;76E`3jRFv{emB5{(AWIP)WdpJ4vH;3t_M z75o(QV}hS%eq8W3n4b{*Ec26szr*~L;OgNR)Wg$)=W_jgL-0K2X9b_i{2jpynVaYJ zO}m@MJa>|62I`!E{EC?82|k_qRKZ>5g@P9|pC)(-^CH1#F`q7Y8FN?gdCZFipU=ER z@Wsq$30}dxOz`3Uo7!K2LE1n*j|e`%JSw=cPoLo1S$?bF#{T_+ zKgjX}fb@T1J17W^3V!-5}YenjvS%%2zhB=e(! zoBDrD@Y5`RT<|xTpAh^k^OJ(V!~B%s4n3rZ?X=*z%-;|^kNH`_r!s#>@IvP1BhRM2 zPh*~IJy)puf983DPiH<=aF@AxkBiY?%zT=VFJWFJ_$=nr1vl->6?`7ct51`{ekR`e z%u9s)V&=01uV7v#cop+`f}8d`U+`L%Uo5yue}&);EMFzK>3=-I*Ri~L&eY_$nR%U% zU(EB32Ep4|evRM{bNy765&!5i(p3C5^YtXY9O84n%;LC^q0Pw0SiVeSpPT2jD+D*s zY1avEp3`m?{J*pQh~Qsh-Y@ueuWOk18p(Bd^ZueD zvHoD*M>I=tw@~X}BX}X-H{2<>c~6d9$20HAk?U;cJvnmy%DgAXDec{|Ioh%wd%UJZ z?c2>!Pq?$CRJ{tmw5=uD;*_rM?R69=jdgW)YzlX7aY}o-$&W&pm*N#NwiEA+Q7SZJ zhmr;^rB|tRI;E}Mn>UB?!jw{c1tDCzY-Qu@-e^nfCYBDjH*M&l7t8!tHx~-1>Tq-S z)m8A(KJF)s2N#QRs^N)FDJp!T58MTMU&rC;aumhG)yd)I3g=4ZT%0-({^yAP#&~cw zH%@03j!35r?{fHNUs4~q!d(vcMEN)2g}9QnSp|omV?!L9@W(}hP5upDl_9)&xv{x_ z!>Bjm%)XVwbMrJ}&Li|P0c@?JVEOb6cMQ+j}B~(DzsQf7HCjF-TB4Cu3 zarQ3;#I{TC{Qs_hqz~vBor&Uqs89Q!W_gM~A3qs?KN!VdhM&D1;rQuZa(gp&Gy4QQ z&9N;vX@>1e9ZT82=J3+~c_ut%&e}}+4f+clOqBm^TeO6^kAw10W2y;n>`z?UoQ@Jiy^>9=1R1}2JsWS$mGi2O_Y^)|JxFYUe> zpF7c8nK{5-AM5|u&YP!vuKC1*1#{FnAMBZ9n2fV^^ULE1YSl z(fXTQXZ+8Y;+s?EBabTv&%_Fni=i9eRH{iFtQlJBdH5Ra8~mN_+Tq!xsCHNtGd|>~ zvdP~htQlH4zh-E4SX{}&Z+aDb{QD>EO<8d`*}$L9g#L!L@B{-0T~;uS-; z*THzf!8h?iB>KFgx)Ch>8&$qtR4{xUH3CwmEM>^2@ZHo3*n1(_l0F#w_sV+@753gW zCUIk5P~WN>myhIU@GdA7KxL-G$fE>c!JS&!Ozp&PsKjC1tG0$l~gTK^*?$gSBkNG(p$BtIWKyl7av7l3MntI znGgN>5prxue|7n}v@HBPCGP&OQ1q1eETne;NI9~d*o>;g&$M;vi=%Y61X-OwMOcjw z=nY;;*T_vz4VLoVIoA?=h4No_|+F=|~wJbkVlX$Y+d?k)E zh0h_wXp10*Bd$v}TY=Uz_oDE_6sv8PKu6nwloYjIX^U>{lXbN`J0 zi?f3Re?|M8;NV8=x%cu-nX+Ii?%Kr9P2_*a-!?Njvn-xWD8B(p4c9zdO52>im8eXT zTnlL{z4xB`04AQ%^FuhmiAiwq3S^TqhcsHPi9@GX_UISxxSBI;>d87X5;^Eo%+KQk zYsrt`pB*2!hVLO6rZo(n!6Q)kwBA&zPhUg4CjF^i*i^6Nvk=92K*>!{cN88b-N^OTdm`jI5rxSQxHIzRGT1qKinhUkm_XcMaSqo zFYzl=Uv%hdq;m`+y8E-nl!0Ta4KK(4N28MqI0ZCyn%06Cf@ZD zZ=!R==ewFdL_XfE`j$=czq#aDWX|5%auB|ak> zx*5^&M_AX~n*0iKNd3}vH(-mZ>L?@K&|kEgOwd|y^*!Hq0afs{m zP+u-u#g)~AC-9NfcdrWGPZLERB@#c!*HTB+m#s}ZxCF*9wXu8@b2KzrrIDsK15+_f za7=Hi+NT`Us_7%w=q<{h^NG%qaw76r+-rST_@Tb~T`i}!YSH}Q=ev-?p~%$g@)L>n zyumY};Dh^-@;m03RR030-pSwN*8Q)^tCu_YOmJW|!t4A{#B*uNQ-Fn6zPcJ7wJ{61lhbTR+1Qb;wsXo2zr@|_gk zEzt3n)^f%^$^W5ht~FAr2$B~njP`+2YiO*GR(Xl#_>%IX zIYO}NM_%G(_P#shcNe3HebEd54aMmsj#ByI%f$U~AYPv3r21d+tw@eJCilfBd&um@#8Sz;JNUOWvE`i~l4SnT~F( z#u-!Ma82R`j1qo!UqF&;6R)Aq^by8mC*@Y-!2Lig&`dvy)0fnA-w4qRe&BhCRO1Bg z!y%e1I%}&ECt;P)ZJ|%WGF1-78+=N4FU|U`V6o>!_J$T!m;XYg#AGsEQAI}kj+aZb z8%%|9FSBYG&$L%N+}OeN1SaW31+xun{^Iw4??3(yj@Ax$7P}Z%(OK2fcg0^nx%ez* z7H0Y^#^>@g@bL%dP~xCJKKs>&i|wW0Krcp2fl(g82j-zTJj`z|rm=cD4bzxK@<@$A zS`F7UQeTdlFQO}dDRi?c0F2Rph0@~j`2}d<@tG^&KEE8CXndyGQgUx6 zEaI0IPLikcJY?{ERidvMKX~1Y$%D(Ivr1!hUhsjv#-i*Ib(K+#>jTQJ#+6(C9NNFJ zo0-&*RmM#eUPN{=nAj5q(;w*%u_trI`2U9K583~Oa6d2H``L}z52r6U&D{ofwCvPeJW)$FR?F?TO1sC6*Ko#(CYFtx^H^v?yaf*P+52I zrKQ2g7neoL{8RaVghC!7#sd1hw-4v>Um~o|eT&e!$9|3}!??*F$4CikQsO`I6(b;Dx0ZU zv=`4U##H)P^b;vxl_;EL6bJVf_P>=CdpzZZX|DF=V6kUXejE&Qvh>MrY$57zA&;b} zA0kBZc2%t^#_>-{`=CFrNvQS1@@E?B_ufibO1w>TkNBygL_;xJl}ZEICW2-&ym$~I zMlXgt9wlgU@}vrmu(WPKr!+eCrb)h{oMZFUx{ZeAqoLrx{=iGT5-EO!p~c0aHxD7^tk}LP{xH27NwcXfn<&s*zEVDFDT{qwt)a2N9{L1}N(I^j zW`w~(wPIyLzhd(8jCbfM80y^K+Yq6d`o+&WRm1J)?kP?_49fK@{_Z)eW#}Awh@Zyq zpQi;+9D-G}LD1dZAd;*+Y8Lz=_BG$bD4THo(VRt({i~kG7?UJ_i5?^NZ&Hb$LtO;_ z;E&&!_o(*qHcmwLZl;2bXKo*~dVD3F22y35W}kU|On0cJLRO?ogmZ!7Q&GpyPWNye z9C#LS>3+Ueogsc1ZfzZS^R(A2UzpTCl}M`c_2tw-^3$rW>-mWG!a0+fIU5~`*U^@h zuQ45R1F7hGN{IDU^(<$TRyl!rzZEabWBVDp<vOvXaLJ01KSWN zxa}|T-|oNoJV2?8|1>x8I%&`;#%VFP9F&bdVOWtkjtMd+lGNBsJ?IZrK))5BL|^29 z>9QkQ4!+Q=i+}9P>YXU6V1RBF;rH6^^y)I`ew@Gh~F&ZMa54D`;u!WAV2> z7#z5nB7ER0@Qc6oq2R!7b?{-1v{q+4`rp`%6eRCLCD;9sZ*nvLDt}4UFDx21Tw;0! zl`_u^do>G=-R_>*7mU4xxkmK+<1~z+W}A?ysYdc@igP6X*0l6=1qWV3514F%FO?Uv zj>Qh-hnM`3ju=i@pNn3l3ne&EOrAPVWBDT}kKn)sgi=fYV{;I&>33BVM3aek))rwzkG3VGD?#uQP{siXv(8i{099jyR&($DV2??DX zok=dSJ@k0A;;R3qb)NXC=Cq<-Q$DJr#r)=@l>aq;{$n0;-b^{y<7@43TXA9Hd){zE z@l>pXVO2t@#vpyDe00&e;;FH3(x73T*`ntTK0Z3OQ^}2>!hH|%7m|Y9v_zPb5JaEr zB?{7uAvPJwC|s)xe8WhpKC8~#a_eg*KYayVAZ+i9(1jGtEoz5mkdx~B+j_hox~oJR zYv`^rb1>gz#~a$@nfjM_WzSz>$k8&m2ALR(Jw^8TH4IWg8rAT3Df;fzEvy|@V2^-t&~5rXHvi4*rE;I z&|2KT@KUsw)kp6dn#-M}rK|+Q?9g2}Z9NwoBEg}#nd6OZqY;rVq9ZSQ{^-T;@|@UZ zes6N98aYtaKTlm`P@g;_>*g%Oy>OB z`>L1N6=ROcMEQ>By6=~+HCuA^*#xv8 z4iU0G2kS6eFxwV{>c(s>n4<+J1qVK*1#@h{$q>xZf(SzzrvwMC(So_QU>*c>wcsQz zhFpE{s-z<=aBj2xy@KE%d?YrC>NDF+pChL_DzEkAIw-y(gI)LkV zRM&vqsa*8jC)29u`N79)ivy^twZUai(_n%%q19$`U5`Xn6<@7e7uW0fes@nN)iBc# zu$DtByt!&YA~<+~iY#q$H#J_0i4aO7)ku=xSBsJTFe>_YY6aYB(EYzR4tKh5sC1xo z5%<2#l~|WK>hZ)?S9_yUHcnV!wKr;5xtSqA50d=f!Tjht7e~r@-f4yFJcDhHw6&#!!oKB9=nz8ElaU)`K6I{CQ z;#Ci8zQou5FlnKQOyPtxvh-_Os4~_V>rd!|gY-CunZx_l%)hRyg6Vop7js`b+4Ccu zQ*m%CMPULR9C(?kt{+56n}pYx1ueQMQeO(L;kmX5K`XJZs!K1H`rzOk=uW$IiS+UuXa%%ZcUBiU&2S|s51#h0C>BYWJ1RwY= z?4&M}u}AcZw2L|)OuMKvrTjUbuP)-&Xr}u&U{*laHx{WYtR~UP7ByK=_v`HKqEs6b z$IoU52k8+SZJ#th-{j{03w4hKS-~5cR}2+6hf_8|Dd>8&0wZl5x(;nAGMc_|gI4&l zXq~-c!B4$mI$4`n9K7#utaM;3gpw$3MKBpsDxfd6i&i2zmwRAQJ>cS;@R%# z3LlC-g@TV4nu&qnby>!Y%eB2yfmCvmb5#?oaQwAVKe?%jocu>6)Q^ii=8eg<>@f`3PY6~tC=?qlS;R4jYoJ^DYdi@0V z7kh~pRwNE1UYv1Zdbzkb_E{tYci`NPCKM|#|HX>IbNUvC7}}9pqTyzPH3i)FU@t4^ z^;q0_z>D*TYZJe!O}uBiQ=De+QH>;#RIPsRCR9DGUS)giVJ{Iimz`*Ne_!-&ZwLem zNGWb8OuWVyc`yeapeqM#Cpu#{*NtfQ>)(i_&9dOY)?+&6AL^JtjhI!O=nCsd*Hq{- zIZU2YwH@^Zv6lZLnGHW(Kl!{7c6&RaN3J1sQEED@w4oU+cupxwqezgRi>y_r^{Mip z5_lVBPbJT{Mru8SFL`=pidtv1j?N6QPOPIe-4Kb0%% z+}5G9r2Tp7Y`C9dF!ych7<3Z!t(;0Tture)_SG~y_$k8O3uYll)xNPET25EAcPN{< z8|pXaN`tBA$blaD(T*|l>+1!mJ6JwVT?0Z7T0*JCMF14Cu5KK0`KYj`pCA&YdyRCe zLuNcv&cw@UJ&PWVss5M?x!MYZEfl7T#x7Oplfxwrx%|%zivjaGo$x9XGWWY{VaEVN3{1kIA*!M zCXhio>RE0}=f-YmYu`*^m9wLbf>6S$+vZ$zP5A=s=i#IDH-$eFQ>k>F`VM?LJ{s!@ zyCD-Cd2tpxS3${DWqmWs=B%Mq&#tSlhbD)K`t~=JyUyaSZnrhu6TLp)(Vszg)o0=t z;yc^$Ur3R6^!CQWJ=eKpo+V*?C_a209fmgGlkC@-P(5L!qHEy{SWYQGKBLi&u8m50 z$A%7k`8_PX@cH@Mf!$5vE%{DmX9u2SbSse-7Iz!AM8cGt#+A!guDW@pTQZ|<<}9ba zy`?9Nl-GsBJ#H`ZPqFAP&}&or9@;QbXfZZ+VqJJ-GJ+3?_lDb0lD!>k7F;{0DaD$Q zCOj}Xkxwh)odX4%y1MV^qNF$*d%9zhUN_q9A{3s&tdB(^-94y1Zgpp8MMm0v z$O9RE-WvJ7_RJyw1<1@BjHw{5XD0KNTic$3K~!qJu^GY^;){xdfQtzg&n1DMlT}8zqOs= zu8q-l7dGweyNwWbJK<4y0bY#9B->b~%w5samYz}Yk?%CpQh;?@6J4owag)YZ=*>!H2)7ss=sUz%e40nZls0y!-ZP*a*aaN$M zP<7mZ5M6lkHs6$@Rjmy|nVLhGq@&A0wTy(j+Ej}nyHcs60H|cPxV^9x+6DDYSM;9qn%I?sQStspHf-#~UC0 zk$c^B?i|xkw5s~!c6Rhe(K6~Q>sO!?x?Jrh}9b>pZq zXhmpsXsGCLH-)3lDpVy5$nNTv&W<(=&uWm=WyWd1jv9m-9~|gSIkbQqX`$!lF~0SZ zH(Agk)qT`UbwoSSDxoD!bB!7+-Ieszy`3)_${gJlxzu!=%`JT{9?suLkMDEO!hMuo z;oQcXYMp3LjHV>6PDwAhyJ$FVbG;RzN(WE;M`OKikDe4bsMI|utw@A=UES-sEwO0( zohEwipjz!xWp{ebsMVy$A53@LNH@ka7ehTd2+VVCs#6_^9#8#wN-xFb*5A}n=d_1g zdZO#YEm1_0Ru(xC&uK`=PwNdK3&_pn_ z>JGvQceVCxi9~0k59^w}xuw;CFS<*pLfu4BVaCylS%^cWg(0KI%9-h0dYuSrF@7l0 zK6i6>Te#P;(?O=8IamjHq`NojVyM!?k1`>RN8!%SZk~U^sV6N8!d0(^8sk!X)j4iS z1y~urgKKMpuB@}%>aMm`8>(A+I=AqcSFJM|ZmXsYQq89MpjDgvsFsJfRQI8EU_4Ei zNJVI+sj9n6i0RZ(P&GQHt6QpiD@+a2;%@9wV|c3Y>Q(ilB%vO4hN(WcbaGChurY$} zpQ2rf;!>SGj#r?Pv}_DhC+xVbo!!0RCQK+hHf(WRlxS1;h9=af&Mi$eayV`b^#G$E zDtr^F2?ccA^(}2pJ>k~w9xzk|w+&^F$^lz7>EYTzgHYbx=nXb>cHg07Qk{kp!@Su^ zm2nD@cB@`c5>l-s&BJmaJ-2sng1zjj-GrofV7i(P&D_N8=kPDoo78;E&$4kMBFsIJ2)sK5QiFHxYVP1bHN?di8s<`a{?Wj3Tx3_f0l(;q+nsrkL zOckXrKdlU?YgC0m1IOIbGS$hH`}=Zs&*A-Cr;2(Z5-y4 z&yCrtoRzwf*m?}GH0&Y1&Y{R`zn{3O zbC^K-ErX_$m%AnE+<)dQni}9de4HJ6FfgGM_%uY1d^(3!p_SFHntRV^qmx1Uqf;jQ zwM5ZRM(DH&3a@a{8m^{_u0!{_X5u-^Kdr&3<`#DqPD&tZ>^FP%?0ig(q0VZMG&iA^ z+6!e}nATz=xsW=`q*k3t9w$hCc~Je=Qw)DC!%PFAk586=w-Ds?MD~5f=uF(4YoZNo z!TiC@G+et!(?gAw)h0dPqK-C#kr~rytPk=6)KlW7mBbHIi*D+L3rdcx^QY}k7We}! zaPIwOvz)9np={yK5$-AKjY6p)xp*Ohy-gDC$--TLSBBWzRN+2fxC6pnDBdP^fp8a^ zm(Xz}7YH}KT*2Px-4OQ1pNR62>A!p+4$`eR{(VPulc&A8wgbl%!rd?2!u;bS!1cI4 zWP88#;zp*lO{z~Xz47mMo01kf^-d>)&oc+Sm-eL#685IvMPdPUtD@x&SjTiI%kK)| zpC#G^e~QVM`k;TL52AC^0e?!whq8S6Qz^c`2<}|v`{;w2!aZBKuNLld;r>INf9&$l z6AAcZm!GunG!dUHFIhgaJk*_YmX1p6m=5u9$A4*)_LcSf4^96^MQTcf`{Tkb>(?yd zFY8yS@R#+iO!&+CC*Msd>-%C6eyMOT6Ye_UUM<}89HhPBLRs3jInCubbUTT?b=wXc zM}+$`!rdd>y}}(8?r~1hp=Jqpws7YNcdl^L(?@BWtZ-?bV?oL4&?ky`?NUZ6i~b)auaAhI>k*96D%Kwl^j$&Lm3mcg|~yZ&Or zRE7#14{>hgI3N9e;;hU0IAs~h5LsSQPz7D)o2oD3*r^T_ZqE({itft^1>AUU_R9P~ z5%P+{@Cw%Y$4d%6?H^Z?-N+7wloo8Ql(waT!Uw3#hjUK@yyl5DmrP?r5ne!ztlwdI!TGArZ$;!O@Su1%n#bDLO&HgSKZHbL=k zWnFhn9RHnm^i;8_F7M(ne~aVyX)m>bik1m$%+i9YfVVtQ*AnnTfr{k;Z&{#@>d;iO zKel)1pO`K3`EG@X(KVDUEtAD(l?AnZ91M9hn(h9o{Qyto#gZgqG)uH&Ll`!rI zHQ$O)2Iemblr2TQSgLHTyNrf{oU5_|^SwaDdez9Yzos0XaySl+(dHX9U&66fcFR?L zzsnSw?qke%T-5h-e|H}POJqM2SW_Eljs@0)0(Hn8k|~=U>MfPuVxFwulb#0E=BiLB zyX*o){c#}|;V@)xNA*9;0&XlnP#6m2pgVZO((4#&d%Ir^yn>KchVEub0XmAJ<*MshR*?NH998UqK1z2#pB~02ZK<-E zsO>KcL~_n$2l~jgp}@8*FED~0I1-+)h^R7FK;?1P{}rx_4n=^YGioakSug!ZuTb zHdC42OlS-lf=6z7qCR<4daU z+=#k^d~@BYDnLu7{t|Tuy)31#nZq5&@r3#MWT31EMnNk;Wz@}oO+j{tGNn%_@WdNs zJJDPJCo1;ZkD61#pUjix z6gU->5o|lue?5mGc{3iX`4Rl6-IKi8Ot?kNn>p%!7Kr17p7b2yq^kK4{HScQklzxP z<6?5^;m)?wZ_Y>B6wh+XSihPlao8M3t~xl*z3`)S9%uOxmZiPoTm*HT?=Lg2;6BRb zdC1=zd6qlP`^OZ|_1_)NLymKZc?I^gQQt}13;1Oron@?-cg{}~&-LY~9hfc0va?~d z&rxslwuwH@8Miv(IKNO{oGB~Fub9i4_@?6H>y;XlQ4i((U-e1gS6I5~aI&(~B>!FC z#=C&IT-PaNF3+bw$XuT1euVj2qnP(D^9KaKlKFhWXEB%OjdPgOxMgqinOE2l$JaCe zir`hu?-l$;=ARQ>*T+ffed)Fry^+y@ovA+B+dAfV+Yra=ncpdRJM+f{r#D8D{u;rf z%s(mkoy=DV-p~9=!S7Rivfti~_jZdh8 zuIpXO^B-)rx^_MSa+X3n1dx^UkvI%Bj8KiTNt7e3MO9l{40{+ZkEnfe~9DeMy7sz5$} z5Wd3j?yjTj8TjL-b7ybIdj$LzUkv_y(<9)4)))>EJHDUj+%r(@@Zcs4LxlTsbnY20 z{C10@HYxr#8V+}t` z_!)+m3twdT&xQZe@EYM)7=DiM-x|J5_S@KM4qG<=-!UmAXbaGfJu(=8OPb7Lz%S-8D)pDuhK zy)cvrr#s#=*lF5fspx-d^z(%uZg`d0(K)v?KlP&TYxMqJPmdti@a3Yv+HjsVg8R1{ z48KbF#fD!ee6is-3cug*+l1d?_}#)c8}8@YqWqgn*@r}blHrdFKhN-IgkNF!CgD8| ze^q#n;s0{HXW;vL^?ne%C;GWYzeD&Zrd*#3Kf>t05q_iLX)b<`;4{N}2~Rhd?h)Zf z8GeXxo!e4NaD?#pjD0^zO^;x^;m3;pBg01vKg6V)Cp^#aeBpmKc1{#N)##@RZ!&zA z@I{8t5&k>F%N*|+EO7mqdLamYF8Z}b{|nLk^Gv6Hsqm+b9ep3}7}Kkyu_UGX$($6fJA2p>fJz#uJXm0K(R zIw=T7h3Kb+@C70Km&6Z%lcwhFnh^cHA-pYwzZk;b4dGvf@IG|^i2a~*P`dk%bYLD% zT=R^_X>JIg8N#bV_{GFI-F)dH-19I>=;{#t9U=U&5dOT_ZT8+ z;dg}a$3yt@#MuvR@`IF{e6fS}5dFVH_zz;IMs5W9`))ySFdc_o`7JwypB%#H66bu@ z@Vj*=xMyVaxj=Z!K!*eOT#Hth2+ww}JELcFa^2b-V*l46{H73oM+ko;guf8NUkl+| zLimRvd{+qXK{qD5^8W$E*`L{iyx-ijI9eSZq8}ytR?!#wXu)*hLDU24#$BKhlg@rd z)Nkwax64B8|5o%-(a-VGf;&R=_l5AM#ZH6R(c}815dD@AzAc1*Cid43_8E-Ib<+ zA^dgXobFD!A@1+L)Ax=L{SP5L(x+>G4h-SPhVY*d=lld&-VbyAM^F-?pC7`{58>B{ z{Ti|Fo-MA^HR8eB4z#92LS(A@2N>?G5Yo!V_CuoEY4H}`*pE7bNi^j3lWyON>YJQIbk1$(Equb`!(md5wwRJq8 zENg7QV<{4BFu{YjgVYeq+Q7YR!0nl zI~wybJ$D9TPB_}x8SThuM`GTJGdPC3>o$2vP>U0P$Ea;%T*lw)12 zaZcl1H_qi@oYRbRvBo(&{qa7QQ|3BluG8c? zeXg^X>r&5k%3K#K&)Ls&d-GhZJg3QXvGSb#JZC4*>s{Pfwv)!PUF?`tWwukqe09Zq zZN_4vbT(qy65XX2%Xa2t*)GLcwo5WbKWF5Y67vzHUVX!f#e8(%L}Jo9q)GS|L+?Lu z(S4o9dnk_rYdYo|ODxBm_KhIs+eOSbo0xB5 zv9Ugdu|5S~<@6g(mnGjkV!o}!#`=VO3yJyW67wx0=9^H=x0RT0EHU3UV!lDdeCvq$ zCK2;(BIX+fl`?T+@wABr#ffQ?C(kIFnV4BHvA8JVUQEKh1NBgqGyvFjF*K~ta~>9% zaGh2#amqB`zsw70Y@!5?|d3DztF$_WnnE1{^i%pxU`(ld`~T}^GTfuyi;e) zoHo5EF=^&(mmhKgjry%~&gyEvA4BXix@SbUgHA0p1X0tW!Kby}24#i@fIFjp6f%{F z&LQ(@AU?lsp`zB;U#ga~dC0hX2T@QkV`?lhbBb2+o)Z7Yq7+N`w;B1iL8D52g0*!t zD%$&<3TawGg5Tz{$Ii|svFE-r*GTEq$FDWwvtv*+eY&#@etOBwX^DADD(GDcsf^SuuJJ|JBY~`^n!3}bwkV&m1RYd#yzsG=I&550Oir9W zZB~gkIzI0B)fu96ruZtPyq;3jOBL7fx%>(e)WjTQnS1|Ig7eBpU`pe>%rx#2uOt^u>E)_Z` z%jvQwsIFhawd68gP*^xUv1IPK@>-%j7!PB1o~5^4!~*v&5bhaW6z81OR#nBhsRpow zToz0#DVoX!D_>ZlN21Lfy(y`T9G1$wD`+LZj=(DA$PE{;zsu^DQkPRlF9zTq-sOh- zlholreqx#5?VFVAL0myJyEMYTrn<)Ot*oY(G>A2~&WD>@ai@^Z)qwjLRdR304T3*? z6Q|cM@s+9+qP&9ML*UN`+=ztISl{|epJ}4h*HiVlrpP{Yq zm1MY#we|Gkpd~4hUQ%l$KE?R{)xF{Eu^+rx76>N zHg&S=v)RW|1*wWBPx{vDT~e7Sr}wCFg*lt9=A1R^Q=emIqIONLDsi@GBB zdKv!(#WytaA-x7dzQ$k{_xh@nDu8p7yqvG|7}dD6H=FVIK`}ec?FMc{6jvmhht+dda zwOtr5-wThS&wGLYSUBH);ahyFF9Lof@H*ja|4+d6_h)Q}Z*8fa%W0hh>(|ku{7Qxt znDcKbmGkc~IWYe-Ez0j^NP+DiM#}`c<-mdSz=8Grn>N)y%#Z@>qqHc0jMh1@{(f4N zKh2PWwf~;Sjt{1F)qf$J?O?h5?;gFKA)w!1@@w@`;17U)v~bQ3-`di2^MGdp*WY{D za$O4c9|Zks;Ol|AS#fEb?O=ZV@6&v_jspG5Uh-v!g{`isQjXk{5%N!A<*mZb*$gEK)QU)tNpFOj|ILH_(bsTX2+}!*5ufQ(@JC6Xr0{ElA_4g=jpKl3jy0?KI^Z6a*hi~zzzPsFD z=iP0ZlFc&4+h=_T*u(B9`j!wqOS&y`iq3KKgWQ5{XGZU$8uc-`W(>T z0DLU)KL8&G{4c`Uej9Lpj?97iMq1Pl{2ZAB=actk@&<)>fRCqb)qezbF#lhG9_<_? z{f9j-A10jB%?10jg|iJlXKA|U0)GbhYOuotZdJbq^jI%%14lap=(!{Z&d-l%Q9DD0 zbAGVAIl$XMe>~VZ9(Ww|Xr~T1=I0WyGXd-*L67CS7xdVEHUK{X>^ui{Fh4s$9|ipv zpvQEF?n@#H>^JOx#sKGQF!kpo;6DLA19(30GT_+GmjW*U{iVWfeO&|kiJ-q8^jNN2 zfo}x;)4=}@{6*l;0_W$m95_GE(V~9%KsX;4&jU~IO&b*0p9j#Q`oo3WH_O0 zfu5hka(6<@Io&8Nn$Ja`M}IB_{sQPP1v`bnc{~>foBv-4 zKZf?9-yQ@z?6|lF% zH^k0%uyZol`6k3pIz6}L!1??qEt=1Rgxh=`CYlColy)SK0u>D3K;8?Dq!ma&dgxmVf0XyiolSAxG z2Rl12;ug)o&kEyPZ@Abw-z|&b2)I#&o#jD zy85;d{ukg_kDGwwb@=PTZMnV#j`gzNf#ehl?6(=TsNW6|&UUbVhk~B(U%e^c>+%fW zDtxlxs;>e*6Vg3LxJ~y$(9Z(><)FuQdjsgBpuZLLSgv)Tp9uPgLiEo7Zv*`%u=7*k zTR@Nb+y#2{LvRp9reOWBUkE=K_(qDS^*9AM*86PXT<@oWz5?{9_*YAc5Vherh6Cg_d)+W@JE6F6FBPIfwzJF1L5q4GT>i=9_wW{ z@DD(Lz@fB3f&ILV7WMN$;2pp-fo}&s3iyY>#{~H2-Uj-0z&8Tl0{kQ3hxVrp3hamZv}nC#3FrF4 zbdLxAG3e)jodv)z2EGvZ3gABnekJfl!2b@s68L7|i-ETb=lt&kz8(0dz`qb~zxSmL zAQ1)jPZcfdp8>+z{%63WpsxmgoN#NuAjHm8uu}teP7l$~1N|>RzYO>i;FkmE>s5Vz zdJXVe(Ekr`*6VZFR>RfKOTdSNov(o(2fP;>rNDkh9syoQ`_%t~h1>R71$wko54;}i zTm&5T*8o2U^fw5%>D~+ab3y-Ti2h~JF9rQuA^HzN9|irtL-ailClLkf&;5a)NBh;E zBZ0HYH`6&beWx~DpJz`oT=ffpqd%*GV|zFU`1zEc=I0{dSnpQ~xBmY%=&`=mhUo7H z{RNQjBfysd-vsNIQsuI;8 zn*Tj`n*UNs%eA z55A>E^LdbP^^f}DSkQk5`q7|I051gnR^Y|JzXyH^@E?G$2EH5kZNQ%ZzD~G3zpoe0 zW_(1VidR@dx8BE zqD;MikWY>}?EHq`ccug17wnuV-1_b3px;U+)jxj(eG>S3(DS?YRR1dIF9-d*pzj0v zZi7igf%DT$i`v;oIM)gPmQwlApvU}-20iBI4B-2KoePB9mxzxM*~Eu5pT0)D7)_5-Fn2>3riKMXjQcdGDiq`d<4 zvq6vj=Z(N4X`T7s2pr4xcj4Bbn}v6yG_Qno-vT>Wu1|qux@kixG6nVnzY|dXIRH57 zj}^}8VtL1c{$1Lqc9Ou+&hJC`d%zEb{Co-gAmHB%=lrxly1g@LgMzK!Lxi*bDq1w3 zLqqhVf%k)S7X#;aP^z6ZVE<~c|9jBC3;Y4lUjuyY(X>H<^SPQ9wZ9JduYj)yj@M~# z0RJ`UKM>xX7`Bs-L7xEqZqRQ9o->R#D6pLuXwiHgFP!s#E$}$#G2K$oqu;7QkAAxl z^ys(r5tJAOPWL)mG(Ww8{|5L7;hg`Cz+<4_2Y4yy4~2T4FWerdRbc10VCMp`gML^J z{Ati%1H3<^dp+>SK!2-n_QUnS?*Tog`#5lZM}_+BHL$Y=>}&!3{lMP=ejo6Ufd3h| z>#%8?{r?x>z1fizIR8;vG(QpHtjBZ*1AhSYV}Z8=F9d!7l(!f-UJslG{B5w40FL#w z1o(TPzfCxoYZUNDf&T>fbHINL{0-pwz&{3l1Mq(fXTM>+_c@jT1?KP2qJBOKIQp|7 zgr6*&%k?|3GXwNkUyFbr2L8VU_+wyaC2+KJH*mD`sBq5D1hBIa^l0ZL(DU`iNRCM1 zU!ce9(jB0`k#y>}PeG6Nd&&hcn_Ua~{e;{0JOK2+2mMgcV?D+~^bp*k2F!Zv*=qzz){Sv%t~*+hFH^z|M!D$9x`?MIs99{~_Rq5x~*^ zIlza4egbgx^C`eHLEj4eXy6Zo@P7aw2Kw#5hXe1;Cj$yxt}V1^eH{WE?TiDCc1{J3 zewYIs{ZI}Z{csU*%+J-p(Ld{i+jjU@;oJ_nZ2f5A@RZ?wJPw`(`}_`f^}`mUA1L~F zKz}UgcNo3ek7WCZnx9Ou(@!|(F$?S*Y4lOi)2mNhU^}I0_`b$Co zE$Hz&s(Xw?6xh#~(4v0M5YBn$F`mk!z_C3a4|eVZJ2Qaa1^jHVgZcjjaJ;^~2sj>h zR{_WC+v|jLxuTHnt)L$R<+>XpJYrTc!o)j6N9@~4GsKcu{m@C+X=Nz~}0qR%w^Vd29K=lAq+80kM!`5Y-+4&M~d7S7jl95g@A3eWX8 z#dRDAU#oLa{RGkHJKD+fg%=uLC_HXBO=IOkvEjwSOAId&KGX1-!e<*kTlgHq=Ljz~ zyi|C(;pM^?7`{MwrQwyrYYeXuUT1in@TG=p{Vp?nndln~ZxG&Sc%$$YhHL$D# zTMTazzS{8B!ml&@I^k;!Un6|2;cJE8V)!k>Z#VpQ;ddFX{%JLw-`C0EKL3$w&pU)a zVE7AS|6#+w5Ph5ByM%8v{5#=K8y<-LXASQze3Rk5gui6Cj+=VT@QX$Nrs3LOwHw}F z^ji&oQTR5)uN1z+@J!)54IeK23&TeW-(|S=SKk?)BYOT0$U*z1T;bgfpCFv?9icv7 zI6tF7UMQUJy(5nc=X=h`wZGzffXKDK;_sx$XNn#E&WL=raK45|K1Vozr$AmRoX^q7 z%Z2kbD)I%wa}3x1O6M_Be`SKzYD$9k2Va;Zwv;o8hMj-)Q)$!k;#Lmhfi{KVA4H!*x9HONP%C z{cDC-2!GS?g~HnnUo3p9;lB{R&G35RI}ATh_)fzw6#j+bIu3c4;Z36d&hVsg*YQ)m zX@9j!xSyA;lV2sg7YjlEE8+SaTkUB7kYV)O2K)H^4F5v7&R3*%;zPXN&*RpaAAPPI zHFny?PNw1A<%`j9!?T6!eR1B+OZOo@UH#AQdOk9Xe9^?RpqJx-PLJQf`E_)@-Ec(xoz z%HI~AZ}?8(C5C@5ywvdC`}%Zi3_nzOgW-dPw-`QJ_*%pD{VA=6pD6k^!{-R!WO#+} zcEhWM?=<`(;ei}y>bI+e>wCtO-y=L~^bZNoHvAdkdK|MI?gti#uEgkH7k#PWp9-%r z{9EA-hWC~0u@=J*6u#E*sPI<9bA`7XUMzg4;b#bUH?*jn>bHf$GrIeBr2JgrQNvdX z&o=x<;rWKQ3NJDIN#Ui2^L!W_Y7E!!(G7;{^=*sc5joGUHC*4T(rWm4(YF~sQTQgq z_5CUBhR+xMPQ%X^?m7`FpZfVS;Tdv6Q~A}x^9^4syu|Q73NJPMG2u0azbw4L@b`qb z7`{vRTEqA4WIUf~&Xy}+EKYJV36&Q-cm^g0i{+G!V_Z}eXZFEw1>OHyNa zzrNm|4TcXCuGdqVZl>_HMn6(`tKs?{lQzRo5PiGh#lm+QK1+BY=XuS~S;8|6UnD$g z_)_87hU})Vx=gqU6Ui=?~Su&X-kZxXz2k^DUyEgQ(xW%kT{0+Hb4< zsBrCvl{W~_mi|Gx&O_B`c-v5)?pDKf-lySG|7u6)Wm;*t&X2UwaGlpkj~BJ0^AU}d zcCOsLe3Y_OZn)0>6J*t%x43TZ+4Nbr#D6Z(wIvmmbF=Db{+uAId~V&`AnWYf+8}F5 zHE*yyMsxJ+u}RaGq~c`NS5+=tR8e`JFdt1eoCT6*@k_TW1De=p@nV__BFLi27%H+( zoI2|`HxGrVD;Ch(u=$n!|Ai1G8+_rU{W2hsfu+6aeB`BtKn}04I+uSQT0ryD1 zsAe>M{mc)E-^x2E+-owX<=6N#NyF>b|8omDb`Ti%JFVa2|4*ZjuKZuq=Jzl4A2f$n z5b&X+>8t-25aaau_`tAQ(jRSha9SA3Xrrt2x3zgyRLDLqE^o^T>_Q?b( z)My018ARn%KWb>DtMq$4?-iTmI+oMtRW+yOZz9I&XVZeAgdIy^tp7;;XDtW)yaLwU z4*Az4@saVm##4T?FyrQ6g~Y#IGb|Czru)rpSLJ_=e{9D=9Lwd8(4z6R{0DSOXst86 zCMWj0JCR$n`R8q$cNS*PcJiQop#MCGKJKB#rq6A{);-6_;D$lracMt(Yj6M2j62n3 ziz@1}sz*gRWV`?VpI`U?$K~WWNOM=^dQ#f^;-cco-O@TslotGWulnJ1*ACUxwV%r; zU-k(KPAmB7l;raTvkGPwC7+u$V@mS7c=Gdj^5yvQ9r5ybbN8c$Q^a_(Ff%vSR!kqg z;!hQ3G7EUcHMwoPRTSI2d{`g4s=N z1*aD_Q=~{E-{(A~>B~sdqf~qG<;yaA1(Bw8yxv@yIXvFQHn~5Hjtv}nMl*89)vEXJGK zB8}@wJ0KWNcx6*tJo!ZZDsn+#5ELw* zkhwe3^j9`cCCCmUjc;?hltW6UiC?W>+)O2luR4xwQgL@j8u|J#PH=d9mHQG_}Ck6t%HX$wNR;+Q(n{jPI5wFX1~&YIqv?ra4eaz33)N5p9Ad6ssQyUpz<{}h4)jgBP({-#SIxkDxm&VU) zbQKwC%%j~>#`r3CVqeb}A|bglyX$(SHi!EhCSULP7yahT>BZX}cTsjCgYv2J`4A{he#J*YE*%AXwf}f? zU1oo0sHrWv;jBcY>0nAe-rR!{rsk0Ac71qBWKe?#j`QKwOLy{N)2rhQ%7T`HKL3LX z`w^w*8sL1&bVmXExuw|qusHdB$3ohzM^;BBZR}k)1BkkOru@nMPf_ek?ti8vU!FB1 zp8UQjxiNmpjyP979r_Kf5!7W4Pg1{9NdLOWo7ZIWBUJ8xTo28?QwD2SI4w0t=(rj) zbBV^6R!{f=Pcz3qno%d9n z@|7KF+)RBUw}jX;g~=ZZlV7>r?x=iN2B+$?bB$azFHu!r11&bWe(F0lDWLP<0a+A zg1n89#v4ig;R}5Hrnt$Z<|^(p*>M*26;AJt6Fo#a-l7(&_Pt-FI-YPz&!ZDXs@+AJ zR%w>V>Fny#xbe&uFAQ9JE=-nF zXXRZ|ys9#@rijn~h19ZFHD>PQdZCS8A5KpluY7v%PpyYcd_Z+bap~CGy@^!OSR0*b z`B~WRy8V{l<<`<7tJ_E%eQf)nMmio&rk#!CkV*8(C%d%z)_AkD49Oh1@yU3yD5xLM zQAMhj&NkS{^&fAp4`Q1sZ6|MPTl!XU*{(-O7!Lb(6E~gaxZk zOe;)&&90abPgZ8;a|M@@$zaNh@ALYC=>*;sV6tCgHw|2)Qu!RDc-kkV~u3~;`Pb53d!gMzFx_9u;YHJMBo1Q zXqQ@IZN(ioQZKHs<7(HXzv?Vdr$QY*ALvbo5~g0ETcmL}WsCcVNK-mUm+$KK0K2X* zQn;;S`?sA2Lk^veV>mLmMCU`795wtYNjen{q~oTmT~9_D_n}>n{D{&axA-{z5`&MK zRj!nDnNghFPA!zKLv~8Tr32@R=P14Z`Y? zQ}Gb&5m$G(xa^KebE}5cMbD;5<*2wa^aINtpg> zH(HxYBtf4AMCjdVl*CF}IIQ6tGyiLP>D|ulGQElW74}_`PU)qePM>6*E+4`J_b1(h zPr1X{E2MY%&6K}8cWpA=-4)r(45?kOvDc3Dz3xDHNxHjhw3nRh@Hh9pLwb;E#;KkD z(N~YXO2GFX{I4uhQn%u7wfER71-{qFdRyYCaK68R;V8G!GiXCd>&Lk59)bI+2m403 zb*}I|Lyp_*>H9g@#r-npXA&@8&3D^90-wIyaQ}*gkLg6Iwe+A@YF$@Orj-N1Yp(4R zJB=1TS=z9eKv(>N5S|R-H-vD$f76wH9$(fKe>{Y54&m>H@UKHSzgMKIba^~@SDeS? zb;bD$O;@}ygwG7&r6GJt2wzT|>$idXGzzY-q0dzz`s;`v0LQhqn6)ALKZfu}LpVQc z>&g$Whwyhp_$ML!%Mi}LjqEDj!$SCRA$(j2KR$$?7{aH9@cAM9;t(FdWe(46&(p!X zIpN)e@@{VW9A<9TcsDQnI5%UwpG@BE&vPIh{J@{&creLPo z$a$-h=0&DCVP$4^p1&9_f}A47s`#N6Px{RB!gE|Vd+$6q&$gR1-p?Jr_q^L(UhwQ` zTQ8v;^*3wx6yPMxd~xLV(yY5x6=l94WtG*n6%teDEaoYe_ek7LX}i~a?d8=pyR4g$ z-FbxOmanMVdnRZXSFQ29&~6Us6yVu$c|+VguiEF3XSm0?y7>WL)uK*i?Skt1%JRgL ziaMH=nB&haE2Bx;wL*Bx+PbouL{&LGRy;4LT~J@gQ}+f-DroNBL}DIcs`3SkXm0aL z^@N**dO>w<9Z!=i(_=f+ZU>iiVOfgP6Unj#OQ=8b=N$q;(G5{qS&4 z<=pRaV9w`U<$NcGgXL!d=j$}p^OsN#tVhnbc{tEv>DK^;3Wk20jb;5a0>m=m(wqmF*7&{c_M}0$&ZBuW2+tw*W`|eZY?f{S&~4 z0pAK7%e6~5fAIN1)7=f6uOXH1D;I`buHnG@0UrWffBV6D^pDO(%N*?5_a9XR$^`fgp`jec9&g8&8QSgtF9WB%6w$MXIGING@%cqXNx z`Fs*M_HXY2NBiC7s|Dv1{Wb{rNU$FRj_oa1xNTSYppSx`IB@j;G_b>WpS4_zK%WKt z3gGC^8-;Vd<8gW$aDM)*_FKUY9;Z5Xg#Ckldj<69hb_XbAKn9f6w=i>WLb~pP2YzA z1#4$N;hdi+Et>x$f%A7p<;McYd`<$M4SIdII@{;pd8nNWKtCGzrNXVBuLM1Rw^Td7 z4$obMGVKL_~nz?*>&1Fmz( z+V*)f=%b*&6FAyw3*pZJ$9``Ya6H}*=uL@H;PRsV{=#iObxZ^6qqL|WCV-s@z)u6t zPnlI;103Ipr(+kmz41Ln)n6id=6tV5xz6#*`N4MhN3f6W@Xufe`?tqIkH_6JA^KNB z^zFd0J?mIu&L{eRUp~1~V4g{fma9MTV}M6#odf%U7Y!}4qP&3(a`-R*29kd=2|s`Q z|Mug?C>14*7C9Zznh*K%IZ*s1n|s}ZV4t%~@>L+8+vK;v^b;T#_`3wBBi+OQ`rF1i zCS7mE+t79XT4Bb0IR=f-eK`h=ub=a2r>>)J)&FDq%OpM?Gi;|t z;%`Hvw65h>d@ikY*?xw2g_euWaTlQR-S4Yto4?!Gx+fI$=Zi-Qm-&y>e_K}Gws~i< fjv3e{*QtGp9ZHK$pS%CA(l3<YsE&0;#U5PL=8IDyynvBH=kXb?Q{t zp{wdt&N|LEWZBiE4Sr;gS&?I?iko} z)y^H;whai${@=E3?^Of4_XvK=+0Jbpai`sW|978z-#6T8&!+o>7rWD*p*#KgcR6wA zZE~ldiko`eonHH*JAL7fNcI#bDO^J3AgET{8qWiN8P3$++22x_q$DZk8bS#&v&>@*1hNLZqoh|8~&KmoQJL>>`r@ztP{T~SX z-Y=^ARp-w7&D-5spP6!J{o(uES^sn3yT+Y;_T%pCt?yL#l5^eJ)?GN|&c68OpuM+clIf|=e}^i+6Rx3!OZ{tFMdzHZlJ?)m-P_iuO4-^exZanGk~f5tuk&ZnL| z_wdc``KRLk3Oa-P`n-Go2JQtfaxS_{o^&tx-_0F=)V<)_>3(;+d%>x?zuD?uP;f8Y z`b8)1WtX@Y26u3?d*P36%iOsydXGEz6?<|w_!W2VchddBXWhBq4)@=-yK}!y?nU2s zql<3Gtb5T<+~Qt@aYm*4@_>7hci*@53>V!M*Shbs?sb>D7ytRTZ_2&o;>X=fT3g*q zZr}dQ-M<=eFA44!d+sH49~yTrdGhkyePznMgzo8CaWCDp&6V86o83$I-r-(4_V(P> z9(6Ab?#XV-*7Me!lJsr>A9C(x%K33_t{U%ba{`_Etb?sR|jZnq6{iwna+58so!r#|E^?BiZ>&i(F`-QL^XE9mB)aIffn#l7N3?>M>p0QiIZ z^LyMYzD4ep-}5eaO76u^xmQ-Xfw#L?TDLInUK!l6$K5MW=I*}Hz49mSO73Tt+$(?i zz26mX`_S9n_G`zJJMg&MzLA?7aND1Wd+W_^`?uQtC)iYUk38VEfAUec{darS?k^YJ zcH>@k#_cY1FMh(k>Y2Ln$K9)*4cC6LdllV@GrptlqUYV>PU@Koy;30R>>u#=g zHy(EvS=WBIyXc4C;V!!CNq5nY54el|_3dT%A3y6Zdf#WL3@e#%`$_tc~A;_rFVUHrUve|z1Ix4Vm9d)!?-Jnt@^-Q+HQ+vV#1?H+gW z$G_q({_U;q;@`c?U2^U_-6gNO{X6I0@UXk22K~>}^&WMX6y1-1$X!DBGh1`_s}H(M zPQ`r^;l5kkS4Q0>&(K|Z?y5Vfd(}>NsdamAahKAq0jGQ4WA4&Vz5V3wF9zJDRSs)j zmsYsTwp{Bn^kI-Ba!|>mJ(aE~ERkN0a;gx4X;ep1efe*B~42)h~Fg?3QnLuYRWPZTGuZ7v0;x z;a>gCy7!K|R~Ox{Jn3G2s_wBDyH{`I{&>54HQkq1 z^vB$5{?YxzNQ0kxr+dxc*Zse5cdz*--IZsIJ8>_3&|OLQip9U5`~Iulm2@|4&E1>N zb63)JK6`Ta&wB34qWkHm+?BuhsY*An`5`B6;z2hM+^z3+1K&#b6Yp{Zzde=Qm!5P3 zeca%4wzGgZ=eix=rGZf9^f zE3|X<(Pzi~N8LZVZz2s^cez~; zOr5&><*VJUqWi6T+%CE=ANaPq-P>1PrMv1qZnt%lm$==}mV4U)x4WPFm*Z~tzrX#| z9nL!Lw(iNDZuhszUG=&f-BpdHZ=bv8VRzL=?l;eKR|WS6&RvB)q)PYn{q8F7_H26G ziNpEhJ>RU`yX5wKyWCr!a(lj&?lTX#J>P`eyY&wDjNNO#;`a7)I1jM5=-zmS+go() z``upa-u5ZCcO&=iceuT$;vRb3?frv2$$b%WtK8R}+Y9&FGtYCcecm1Fu6U1o?aAC5 zo^Y?dd8d2r^7yyTz5PM=+J5feZF8>;?!SJ_z4n`QuRDFKd)=nn)omScuj}Woc+kD> ze^u9gw|m{Q>3;rk_qtCYE&m?w>eoEz`Z}ytUtQ&HKhIrl-QAycSKs@YQ*%G}n7jI0 z;Xe6*ySktI-97GVx+h>`(S03p^zNE-&UM$k=*#LZyV+ecd^~qI&bw<)#Vy|BuDSho zcg;^acg?@v?ymXS#oWE;a(B%yL(hkwOzzJ<@2>ercS>pS`W?5se^9Qz$-VxWy0?AE zy}ru*n{Dp(&&2)m$K2~r=6>@X?)63YH%spIaBuj&d)yl?d!Kv5RS*5ccXxlvz2QGN zb^qxb?hSMwIR3w``^!=HhVOv8_R5Fdcb$93lDqcVbpK)1UHeSjuU_r0eHPsCb02cU zS8xB;xt|<&!@>RZc-&*${SKYpc=D&O0=a2^8jhy*K_pG`f+UiDv`xoDEBSrV~t8S#|J~;12o(+fh z!bbklRi?q{>z;I{l<$LWbTu+QN9fr=9}GKr+uO%qUNu*W32{c ztu|L6YqZr2x~L~S)9g@wkJXpfB2y?Jo|s$8icunj9F8`0d-Kgs%&+CHS~TWsCT|Ow|1ngf$3Cf zRv=W#B+aNTMX5mVCt?G$meG{78(vAs(}hm6S%8!;FrbN0fHY9Xdi3V5bF%4ygX(^Y|QB|q!y!qggP3FX#{EuF@+P>m~*I$ z&H9Pjv1X@>;_bb`G{y(TU>>X&YA&OFsxw6c2dlxx9D&M8+E}W0qiK?(YpW7* z&lIG3y$sS?nQtBsIDrByN=^}y0#{%&b_QW4a&ByT8buUMpf7|dlC6~^-Pk;^{pzh9 zL9-JYj3djvmT4N*i*Du31&-Q$YhfW`kh{{Tcbm590ak>NLzZK7VwxG9loM#K%)9*) zQ!};Y_Ixuvv1mqht(BJX_||(WlIy+pa;w3}DwBxwZI+^< zzt(Mc*px?szQj4L(eup(bl>f{H*4F1a-;~^11Fzp*$Q(W&+JqXqS;W(01v?{BtCan z;^UG&&UKr-6N^PuNWm{21RV;J`P@6MVwYAT+)a<5MrC{sA$6Q50{xIrEkx;s#cWw6 zM(FHfDJKw%IGz_!%WB;g$~V#x#U78f`l<#rw7CEWZ7%6$~E8651s^!@ny9*;TVacGW_V zU8_gQj-Oj1LE)d`v>=Q=xp4i0~l@#q*#EIGBeVOhE@@*g+fE zQ2_r94f$l^^RC^Io6kOhJeTo-mRU;XXe=a(;9a|e{6qquiNTINN%yY7p{SeBF$|fa zhm>RoNy$fAW);Y^0J#5&y1R?@!E%`Z%7~Q83UJD1YfHVB(wrAyp@X9%K3?+V zt(9ku6d&FA!Ql~!Ju0etJfjelQ65KTZ`6h>hER6mjW!15kt;MI1QN=AXkn?2I<~l6 zN7LI~K@6I`MfI*8ZJto?^u*NI!O_9p1DYotw6e?d^p+AKae9*zkTN4-8kcF69g0FE zyB{2%m_9HyIe9?!Chxvh&&y9(2~gpY!QHml>MX6c+evsEwdb|qs9z*$ zzA`P2TQTVPyI3w^o`>vA_6PaPF>Pw?Zg;8HUYeJ1q4eY^%26r;IfIc#FQ;U2 z&PjPZGQ(`K$phI!UZD7*Ux^O6N_a;Bj@ebI#Ou&=weC`OlI8N$N{| z&hCpv4r(DtSkcddVyj8wBqgf~ImuLtoZzd642>%(sAz=*mbIEy%%pC^5T=SY6o}md zm2GG{wY|AM+u-ID-}DxQrAD;C9UF8VN41|$!ew}&~cD(46G?v^TO(~uQ7PoRjH zWElomsJMJ)41L{`mMUPrEJrN#1f<(qL_e$_9NH7axBwM_oCDD+1?qK*Q0quD6EoMU z6`|WYSeRpiQ}5bJ<_)b1hrVLDujPF9F?4|z{HvYTF)kmIrNLOEhW=0H3 zZ#0%uZ?7YtuCt^NKW~R8Rhg(HYhprjGi;odhv^$Mv0x-Lq(ed(8l$B_#x$6!5C`N5 z)RA>rSHgo;(-?N!8bW`lJ$$Bh)GvI#Jo4Fww|Yp++Xo_ft1vyX(}l8$XQN|htnHn~ z&Kf6!jFaVQ%{S{YpT%RfE0Fb00_FM@@+*$wu_-VyI+mu7LM_&S2-PBNL*5Udg3u8CmwBl=*?mSAdkz)@XTyfES{NKuRgcb+~urqcjmh)^X<%hJ2Kx; z<{Qj>1M0K!6O|!`;t6pSPl%;>Y&;dnVk%G}uGr*QT52KxOT0liREN!lAQmkJ8AFXc(!}C!kYUp@ z)T~G>85#2=1W);LaO}W=iB$Y&#>RAqjZJ`fLRj&Ha7rvZE&K1f{jus-| zLwnvl(>yICRFkE2E@2l&`h*2>@dYS$RNbgrSNPM>rIy?VQ89uXwpBoxIFu zEUtscFdM&cC%>@Qj~zG6(I>3*>9~fxMaddOe7kaf4RK^^RWxulg%H)Ns0|AoH9R4OqSl2?KC26MX~HvU+&V!O{wIQ zEpTi-Hc8@P4H36P$tM85tN`#&^=^2=;6f{qJaDrbLE>QdP;Ir_T*EFOXZoas-#Hw? z>Gq_T&gjmp-dZExW6~i-&L3m~khv$6UR`TTIj4`41KhNwhU|cv8Z)#)oOR75zDe92>ML0UpIDWWS^X2q7N+w3deG@wopg=%WT&~ z!+^Ef;ZlWC6^zXA#%)gs3A>)G)VFp_C8IB^U;sjO47n@~P{?NSFckA#JfXmdCkqpb zOcc;)FVEHY1o`6INgw4UTJ#Bxilv+Jjf8YDXeAe$om~vO+P=*{A>5whX#8b!BjUO^2L%E0Y_wdre+ZIb%Fyv4H$5}_L$$#H>|nBj zu*XD)>|yTMdDL~f^|#arz_R3ll+068H9K?A+fhKV70qrj307+jS0+qsWO9mq5=zZR zL<&%+IX}d4ba`a@q80pD+; z#I{yDIIy_2fE~rs0qEf5q1nu|2zb+?KbRH)Z(8)rwx|`! z_KNdZY`+0UU$MN};uC&+zu?Oa3y}5-QtEs!rzH>(spB*sf!|Ll%I!nIUMxGCvEtHPjC_t>GCR24;R5mjltT2*aKs8WsVj zAq*)+iiN}*kNQ4c+i01~J3IvV7jt2_BQ-#?@OH@f?gDx=+!Z+a1?2ZG9(C&VXh>*QuMCdk8@ZiHGQlz*m4goSF;!K`Q{NGijAW6OvQYw+rXF!$Enbc zf;M(zZFG2cSf*G!1Z6Q+jUvXzy#%JYW{D*HJjq%VWWreT)Z_&E8Fnc!PCe3}#ApPc z(vlPt(KPdoGNj9iGIAehypb{UWc5H5GAD4_0q1u)l|GRIlJNcLd3h9&HL}r0F-J0E zT#63KXke|mqFRSbFB%d2ac5dfEBuWi?2 zU7F6E+H9a{PY@S)LfO?&O!KV43#$tViJZpSM;?r3w_}qaCm!jvalBMkV{(GFI28m9 z;TImO!c>wpl&>X_ibcz+up2O_1ZfJiLCM1>vSw;dJz1s5xldLza&GO6FcK=nNO2Z` zoZlyfoZZh_!JJJqfQH*@Ud2;gWeQs7QA_f`-VQFe<%H1Lln5GvCRL?zGPqpF3mRC_ za-FQvIpS+_0W{S%r`WofQ^c-PWi=HU176v}#^o0%4$Ci@4VcU4LqArvxwRI~_4>}E z%XoMm9J6O^EYj7(@KLCYeaN8QiWE)GEF*$Br+^7j9xhr&CN5Y;t~mOw&DFbT>r12J z8c#jpb&5L9x{`x(QXsta)~jda8~4_B57qEu-R$t8$%7Na2V@jfMzM5W24z&F@W}Y^ z^zg{+*!0BAEM8!n{lQ5isDc>fRnYukYYGxE4H%oA@gp+>AUGB+5`zSpA8OTrUY~F> z8E*~2T0`?EVbWn>7S4#TO-)bSFg!bU{n$;CN70vr_h$(s%oNB-hDI)LHnG~(O=c#@ zM^6t#U5^cGAC(eN3X*`fCehm5QmdgN+Dwh;*Ua2MF?N9Oo~BGXJbeS+l#$Yoh=-9f zAAM%kJX|Z)A`-&Tm(PBz%SQ}GI!&4G(HAF=+>A%Dm4MQ58US^2pe7AeU}1xl0m6d0 zrkooyLCIJFE4!qCoCNZkh5ICE#rQT@#kK=&v|r#hGD{#iIUS4>LB?BJ*&;|z#79o% zW1<|!hvaXq;KkOyR7%UHqYP4PJiU!nqU-O*=nU{3pS(RF{SQ`RHyC{;s~k7Q&jLYocfv+f65$Xyj`}aR{1d8m`=nCk_q05r@i<9F)mLWpq++pG0dw$>sh5 zDc8@Zs|EKNRVFnW1F9(vD-%vU#VsFP#i8oFL02M1+P+mDw;noyhaf|QdfH}R9 z<7*`vGF?j1stgY|E76q4ww`UBuoNNBXnLE(S^~)|#>N?@HciWj5ne{c8y0EBp};6v zKGeoLin#zFen1ma!6)O%B&Vb;h)#qg8|jqRPB;-S+ncYD^w$nPyB?90M;)134y`#f zd<)O4#-d>{YzCm4974Jnlndfz6orWBj+|Eus|n2A^-LNLF600j0FL)_kkZR2YJ3G6 zcV}`DU7Rgy;6%c%YWS)gmc6GCq(IXqV!n+|mlGQkJEfE&9pSK8gMGl-)b%4XgEf7f zoEwALu!38)#F*E3%eKxlLOzF-wJ&VA7}$6@PszQaLdHcD>IXSNKHk7(2z{SC*b?3n zH%!vI(~p<1+np1#Qze4Kx{riy9a(X#``Ak4$=lWfPBJ5mdBmHrE4AU7LxZ(R49{n4 zGqck;5Ma0}h;gbUI{Z86d|pK!;DvNKcA^Q*2}o^F#08=*`SvA4gwG@iE8DbDa4Bp~ zW>{qHv7sFm8Y>9oU*U|`8m~G8RwEByw?B_TGI4TvY^t_=WMLzEg>aQy9oR;Z91>hX z4pwRD${LogO_|c{^r<#AgLmzNMMX+xONvGoCgf8_E(PS)O$Mro5tgkTIsArq(m6Gu z;nX9uuNeuNykT;*F%zdpIfqU!f_O<#Bj5O~0t1UU)tCerLYk2?Ye|yLi2%R z)~taSs)Ev>8>Z+-p4UdlB|NILTz|rHMb?>#>jcMdC`|$OET%Aml6;0efl^PwCaKq@ zWPLKso)o0Va!cXCW7s2Rgs}{RowqS)?)u({xw(o%Yv`}!KoG@{59jGThxf&R(sv;f zy+Eb{n+US;S(hHB{go-A()U$-_BT8UcSZSNT`g5%b}fOlj!~36v5vvxQ!Em# zUq{wrNO^!UHbR2V>9UbWv%!>+<`o0@5ZaeS53qnG0a+1CLBc2^WAv*86zliYnS{#X z0ag=9^GcMpNcJj?2!`-^Rtgi=3JUCgKi#03eG*|~2=4m`D;tJaCWAS}))h5^wIx1< zLK*=>N-2>);E;5o=qef(rKRqT`-(W~ zA3}73U#c=ke)EgR-RL+@RP*R|;0gp4<%zOh7+Dbr?=6NvqvQSBU`vs9bsSSZ-PSC7 zWgN%r48~LS8?S7Jsju7$D{p9o$FnwAe3Yy$@OW&1Ra90dz{MgODul!#^GeqUI20m0 zY6T1r(o!*kaV!i<$RRvdwkV6Zjwa69Lr%$pXY^>hF~4XSk%Ok=1}XL8c`#{#G`4bT z5chB}J(!R@`BUTBrOc1BOYmPmx*rE|YCDHmZYy&`@QVCE%e0sprYv(}kSyJ!f{^l- zEwn@_)rD&6Twb(d%Bxi0w2Q|_X*X_Zn3)Xi+Wb=PTWDabB~&r;#q8sAMd<@vkq8V) zIFw2s*m$#%g6?}TkRK`FL6%Ah#WBMq4!Gis__2CNY!(kM!V{ld{w4-PE!$05AIADF z4lD<27Fsyi1CjuYOa|}{F`?j;Ee@eGP&gHx@iAWH#X3%gui`lG+zCt&yuzjS95$4e z+U=v#6~`p!L`9_g2E2_8CR|Ekq1#$3JF;v#hBr)TkPkA~Y-5uuWYgH8>n0A3#hmh9 zw%5&-BRrGBsPg2FX!aNry0+G9;qZk9mz4KJF5j*o-8tJ?Xmzk-S3$siaM;_>z&=3m zGKums?oCu&3$;R?)j~8E^P>G`WsF^w#^QCE9xjgK4~9o6 z6EvR5N|3ge5_>gI90yd&>B2b(0xKrQ-xoe3~wDdECqPRe%+d;1mYG>>4}5{*oT zuB}w#p`K*Sy0n)Im~Zn^JRdJs2)W@99pNz!x2wv%GOW#QNay7@jinZLv}+CSeH8^U z1vb=_7^*dqeljId0bl%(;ew`fhyk`)OK?G^O&Px?SpgNYH)M&7#g;H(4nZP;jU)$Z zmMB(*3ApB4to$jPxsp>7SA|i9!I`yTQPsdq#y+s&VqoJn)?naWvZe~7H3qlV7}#1< zfQ^@djn`O%;YWo%)hI2>DAuNoV67?Pn;;v7&Se7Xtb0%l^~6>1Z$MVtx-kX`WfE( zjZrhRlhb1*tEy3&l~Jfa1E?qij3&IEgZHyyWslj?52v;Q&89@d4b7T9;b0-<2NAD{xaD{ zp-g2gB3coVNQ;(aA#8LEtMAwo;uqYshbu-jPJE+|m{lTS1A2^dnWq%*GE0m~B=t*y z$Pi5|hb^Ur31kx_!C9)51+wD~LQ_Iu;D`616GeLFFnjWiIA<)FwJl&Tc76?8q8=7j zTr*$Coyi#{m&D=hXB^22r@sPu-{Jk3aUGQP)9@_Qq~O7cl-r#3$ZPj_l^y{xI!5Dx zcLnhbqgVJ&NqFXJuYV4Y*s%*JFJseb_OOEtnFRz!cX5Y0l}Uk&v61S)E1kd?VsTm4>wc$n8FI8q;M(nxvUrM6aF-a4Y;8H7x$^_FIh zOz>%$v?R47YgnYmj+w?d66J2mPV?3^430#$P;kZx0ZTN@;Op}PYGJBoBHyE_)#}Rb z%Mol0#2C#-pFEXHFYZjCTHcQ$Ynbq}3D+MjfOys;szi~PoUz8I8k#-&r0v4*+KOI& zfyem3<_!L~G&^nnO7X`p`x*W;n`oMN><}J)*dox;mJrf!xZnYH($5?D`O8)>{Gv_b zBNko!ef=}D!z0(n9fGArmQx;haCl_=@FQyQ>*IzeA2&R)#b}}9B%dyUga_$V;NeX= zxCR;Pq40#A2t0BuR%kw8q6>BTldiX;lG4Ln3S}yhmShRpV?-~43uylIhGfeA*^z|y8x7BJ`o*E7q zdT*L#`P|qIQ?)U9`)mR${>G~}JSMWgmOlae<#QVJkIGAGF}!+Hc=em`3Z(D{N7JPs zl;{2a6C|QRmJO(Z?Rt(Fuhk(TL`Mh`#OfB330AU12E$%a2*vIwDV9f1^4ll^jZ939 zk4@*%F&H}<3PFnVazkUUM>2ygrn>d=O%rTHR)P$Gw58-sjxuGCWmCgNP)Z47bZE0_ zxPhg&EMP3R{y<_eIb$EkB@frdt0O5&_mW5mH-(`X%#mgFws4NPO)IK zbX>C7pT|!IAmk0bC7&gNx1kDQEnaI2>;Gzo$bb!yZ`yHBf~d@4f%dVJnr&Z?g9+iI zMrN28VI}6@BuHsf&hDXK|HP>6|y|@R@&&p<(Tmqx6sCCUNUPv zd&D!h5JmAZN`fZ{!efvl*9r&K>WLx58^VYugrbf3_CZt>{V{AnLh#@(NZ3&n0iY;j zN3`1u*%7UeK$aBxRfdH*O%Kl#6N=Q#qc>KvSTrz)k-L6*k7Y=d3=HOHV2EP|(xM@? zpoEM1B3k6#i#x4-kw~ln%O(IUo50{zCV0GHf}#Zz_^L$71iACu7s6;4!IB9QyuyTl z=O%bmO~6ImLgj_rI|t;kjv{BXCHO;f1b;9i_)Q{MD3=+^O61@oAPR)|nKnKnfbk#p*`O=cuT4-W zLFF-EMaPJ5Z?hQ5@w+!VAx>TqR+DMLZDc7)RXFi_(L9wCuA^Mtm83Qr;&=E zJjdpdz7U?zAvmA$je$^R>D@UHz4)A9Z&%S5WhymDRbP;c!w+)6hmpr;+az^xTfY3_ z`vBoryCi;X3n$;m%SRk~^N+l%%RlnlUwn*Tf)d|6z5+=Uzba~ZzM*{aLsvqV6T0%m z!)kF@K~Eb0%;1BekwlLn;UskO-5~GjB>xm&;p2UWqCtFeJdu{EPcDq%SxtR6JQ9}i zJxIQeBj-2^G_J-};#{_^B=8EHpfU_QRX>WdEDc982Q~8c4n`~~P#xCb$amyI70?DX zNEy^E{-6Z(0s^^%y78Xz$d-FRgh$_k%v23xU!3oZCs3tfH#h_ph1{GDKprce?gSBR5=~iG7OSn8h(XgRV6zI~^PnDUJ%#4h}Z@!A<`^GqvlK1qnhJIe)W$9g|B) zGd32#bRAsr){O@?I`MQx8<#i7q9Z(6A1nykm;vlHEVK)papA!zz|wJn3;AujV`(Zg zCL)MSWrQkB3Z#et+4)?lAUlxZU}5v5%U1jBC{&Q z6p1P{MJfpSNGtMV<%#crmjx*S3-1klzBDj1MmDAP+st} ze)Eiv#5S2J0_~d!mpZUC!On(?Nw|xm4OS7BlhBe(wt-c+zAh)j+ckVqiXTM4n6kI5 z0uIlP%uXB}^DmEyt^l!U>D(h{tNL$~*Tf)1s^F{smWW(6> z@PUaR8XGOzQ6v@ZDbk}|MFQ>P3zlLdwWzhC4+$9yOo7BMHU`lX1j!qfiIkWE;?opQ zyh!ds3K+S?Sc!!B7T(hr0l4mX>^f{av3t(|-lr6ckmpL}Cjc?phXaxciFOAyC`7yt z92Q%?Tr-IK4k=`BDoG}0DD4zk85$Mil0MvMxbMK2&SQl0@S%wtaGBun0lfl+*4T15 zd(+eyhZHJSd{JER4H}}Rly4Mf#%5Dlphq;u)a5CU6cMH#kN+qSJlJNHXJxb0h(s1N zJ25PaSR_ydfkX{RU>Q4f_#kS%N~v-`1#+w3*;37hr} z<&o19iH@)%yot|qc6NEB@gSU3_kW9TzwVU{fA zD}`hh517!*smu>Lr|KpIOLSC!!|(y6;UQC;5n>F;CEZvQFm-qzC)XlhpEEHPEx?YP_WKW-qm$L6gsFX9D|m9Sbv^JxobL z;>`r%Axnjf5aSFI|K zOyav(fWohYmDU26;ZFODO^YD-V_Xxj^z{W+wJ`C>pfBf{z&EWSFoEnYrw?g;OQ@QY zB{RjEa1g>`8iN>8Oj5BV<(zn9LW+;I>o}WCp0BN8q!42|f}*D~`9zzex&kSx6UMAT zPyr^a0x?9gEt-X@gu@w3Im~|MalA%i$c8JN9~Z#0$x=YHdHC>+$;#mAG&PZWb6u4s zm6g2_&Ixv!5tDmA1d=uRD0F0OdbUPkqBr>R1gU0;(TssoeCt@2l<$xas$5L1S~v)Z zy%6;)ou*oP^2&HgbB=5;|RWd|9Aw<#=kgVne)v0VmMDsM576k`- zq1^7`O6nF^E{SYNg=XEB(*DshsGkz?kP2L;uBHK;6r1xGb6(oU(ZZk zKRn`cZ%DlyEi%#6oFiq3#V0bZi7MemmZIp13dvIZXU2ZuFunyimQ-YLNmoYg7bw%7 zg{Uxt8IS}?cKEUv)1ZPSQz3z3&ZG;xm`_u>b$LCONa-D3>$MHUMnCb3FY$|5jtAlZ zI!CnZB?e4NgrVK&uA;S*P>RIn7*zx#QsGLNGRkP*4$gJ_U!0;F=CJ%=Aej>z#q!A0 zfTA+^IOaD%=2L?7o<@#jB6e0S}l2-Yvsa=Zwn+ZDj8z#d1`86Butv)YYHWQXxmQ478RJF5^ZTuXm~1< zsw4R`9SJV6MIDK!5D&X3q`@tc>9K?g)~L(!6|@~XeBgivDuX zcUke#n~9I8ijUqTK0-?dm38I-BXD5@%hlDZtuRr)SV!-xLMR`E&(QwnqqJ{Rg0 zhL!QmxByngCD5t^M5P7sh4Od9#LNU1Wo;s6P^LJesM-uliI~HAd<(0-J~0bR!C9i_ zwCVscz6J4x`0hJ6W#byXSv(`Es-ic=FF|?SxGb%Kh7aKzAa>6oQe^2mnk&9sNUXFf zDS9(`5iK%B$&n)^!RW-y)PdofX2))vb>=w;Hc&>UNJF#o@ZI6r$?2PXnvPCn{vd6qgus5N@>M(I$&CWeYXo*UG)GOfT ze2qZqkQA1}^~z5|`N8c^E+2{dK4wNayxs_g+}@BPXglJKG}=vppWK5CmFr z+6${s1)OPIJlrY)grJkYsvtb#T7gRm%QaI_erzbp=Wrg&Gk*I#3}fq@kJ^E6X>yK~>N)QB%cA^zOD(}gaa^m@Go&n~@)(ON z?v7k&9ZwjWha$$(-o@=3MLvTe5;eB{Zss5lPRP4|Og-;!be8aj9XC3eACj!RH3AJ= z6IE^sH~Z*o_ymRODJo5AMqG~(5F$`oJJPn(APS3@nCpLS3>PtPql4BYCd1W@v z8H|N4i2++=eL3Bd{WiVF{+?F{}zV4)4Dwv>9}dUZ|?Bw~cYSBd?3YY$4}jX*6$GCoVyvwo2m3_m)*FeG&$08R1oWsDrrc*r?_%vf%ak4$o} zLfH1mmpdaCEjmSZiEo)VCGj3T?u{Ze;PuJzZxlA))Uft*Z0q0GX0tvM4o?P;e|0~2 z(b!=tNPOW1wBWIv@qIKBrBjq08tGwM9JR$SY~AXB-&%*ETdKfalsoLO)342vMH07>U+Z9E{Sg$9K0>EKQj9 zvLX7ReIz+Z(WK&0h=@w!1tc1kGb(%%PK?=pFc}{OL^!tr8wdp(0#dLchsA~fMTx8v zS0!=Dn`9NS4X$jxJNwH*r z49#^^kV+w}hH&o4M#5s5^fCdmEf^)^d{ZHXlAwOHGH%6{)R-ewG(MAWnUzrB7Rehc zlq2umlwh zIGs?-lfDYiF(163E5#{%f<)3?;R=ZHNS~HTHsn~0fj?UpQ`PvB<`U?EIDTdDFno=o zXbBs=R8FEVi7r6V8x15P2YsU449O)$MujuZT%t6Ta$F{to8txPRYcK|6Jj?jCxB&0 z$gxPu*uFTnw4*spJ~s7x5|q5jup*ZHF~S1n1FC||3SvRS$vI5)_?|1{QIL^1Wa=zt zB}@{9^PD0MX+ld9D>y18`s7qI3V|vEP*pilMch-`<}HJXaZX49@}|rL$O#f4rH)C@ z0vIJ{je(#Mnd7u186@7=9p*$y>Wsl>%$$*spdcj$yW#po_0LjAIKT{Z&sDVr*K%}p zfyWYM4Z4m9^da>RBsU+Hl!-h9!Xn7AJ|g9!#7LH_+c}3x_Tno%{+yx`W!8=Z2J-%- zr|?7#j-gY(s==KQxYMx48yEGQSWPai)D{EBPL}Jv#$vL_v&)^TF%tNkupApKpmOZ& zkX+ZR0(fFv0?84W=qsC0B*_ue2wHW#MpR{D)S5h^AVtJjZK9XSNz5^>F7Q-h> zNk$@JRSRtbz5-KBVYN4qy#xhW#ITZ%Bc0KY)8YET5#ITMMKv)0z?B;j1@UF2#usoiS@CFBrG1{J5P9rS5C)f zQZkY$qAb__XtL%NMB<`mwBu1`PD?l~HZR>r{)qdAU zvv}|=07^!6l$Y+3ud&wY@T)uIQ}oDk9wr&3FGA?mG@?z9w8~bXhGj{X_tJ!{?Ob@d z8;7;9rh=7(c=kKdwLt0n-_=3WiPaQ}mg(|pA&iKVd%p{W7y_xein{-8!?ww z*E*|h-juU~&x>Fet3r`ysUpcq^df<)XazCChx@H?Uo6&73&gOjTYzPGuz<;FyaL8J zSLQ4Uy7ycWB9;AAwiqB3Z{JKOB8m~({Wh)(I)S&UvHD*SD#h&hD(JYeRQZZ5YN>oW zwn$Rxvin+)i$LLRB%y>wF7bGaWmg~qI%u%HJlRZ#smcl3zA~XJ?cToT0?#r=nSh2D z_+_z(*gla>K*^K~u}%90^1VAh*RfQ-buUGh*O&tSg)D#Fsm zQng{#ca9iU`$mZk~ba z3eh9PZPT*-mJ;+F+aZH0@}~?npcxtDXoUdqHqf}Xu;4D~k^%&8$XTCoV35d%bc`F@ zQh05Yb4sSAmeW#dBs^tV9OYCILzIlfV$!EzdCKQ_ZXYW=x$`vU`!^A`gTMkFEiT}F zb!d?!cOkVijaYX{jL3vRF%Jt28A?!riUyoC>2p2U4 z+y;_!a?+S5^~jWgKJgTioMEU66B9radO(`!ERG!2wieJ*;`B)pb6|4v`omM{#FF=? zA)*J;_|OC0#kJmi`!+vB_n;hG6Z1TPf|1Sn6YK{s_IfuDM?of=3U-swV_Yz9^TeVD)-`Mi0RyI%EiXv#sMGrUX)!-2o<} z$NaXQ4H{Rvy;W&{*Mv)p?0ykk&V&}wl3rtWP#mI`*=In@M|s(XZ7{n8dd?8o#{_H! zDN74#b8*3F6WTBafq^S-bq3oqfI96iYhp4<=W{0o4C->EBrCBQVFabv_!VG(*^NN< znWfqKS<0+m=35@nQamv;a~StI$)}yhrYCTRgeTK5vg`@5i=IRYwknCfM9WS|WoZPw+>A6p$k!#IO-+)#yDTYfH#CYeBu_|(?S@cTQg@zto zoUSg0gL^`qojyD>D>E;@5v73?X0K_6)DavgGNEe?>*BgHZ#tr=!3IL#Xua7oSyW^D z!w3%O*Sn1Iw9@GFV;I@^I?kPP*~zj45dGp1(P$D1+m;DMO{pPJ3HLnoX39<`3`68!VDK8I_4-h8G!)y?!>J zC{a!FmS|>tQlh1m$c%*C59^Iu3NosWS-2Y6!WZ7kQ4u=7rC33O4zhpoX z!7AK$*+20yVP3Ac{EBwjXnfnTY;LytTnbYWK;qY0m9xfWam>hmNiH$yW4)w#Pi~m5 z7HTSbW+jDISlPF*i;nndOE#qYhG!;5YWO%P4owf^m6;h=Lc(d*5}|^X)uzO!=UB0} zG{+D+%maO9bY>KN0Q)3xW#(cx|zVltI%ZK*~|T@H(80AFBx8 zDKjQpGSh>88+!>tY$@((`!u2H#n2(HMLa}RaF!WaTN@o4mGjPrXNIpEb7d%$nlhz| zndPR;84C{Y`r!9bao52rivm~fj;?8;sI}_5@S!~4R)=ZdEjqn_7D>myG<+e^$y<0h#^u68UO#?Y1_tCA5aB*c$3;HO^iG^H_Kx zuN&%m07|;U!Ul9Oh14LcIiZFX+m_f+l#;-Y1LM4cuZzCM0RZmu6C~1Sq>4vUtp8{_L42jh?;+l%m zK#aon>Dik^(3tTASr&8FBTH==AjQ?%DJ&TvEYxe!nJmKbeZ7rX7@Lf)F|v?czLjFk zBS#sz1fU5X@Kr2hL?Nogg}>dyrnrn1%3*|dh##_MKWgbEAWs6{Jg}T)q1g3W0IimE z#}+FAGi-b7OT0M1*KYeRx{FmjLlLBl14^8ZFtmSU#>s1`(v#GtFgTwa#ak|T@7W@u z=#&T*tjx#~pJpZ$%d0c`U1NMwpoQDb0AeKA!m%oxemfyO43^(}by*?=k#h`w5IROS zHE%U}MT`>2gj0a{O8%i$Tcsgtu4xc@CZ2C)gTM2bt4Bud3h<89yg6a+=UkSHeNDutb`PmbE5$x(mB zu@qpO9_jJ|jakr9j+Ec{eU=(T8u)@g*i(S5VCltZTY)FVGZ7^Fj5j?>M<8VkgY*QW zeC7UNPysHn(VzlPGKkA$6S(&^>2YN!Xev{xn5nPKSxR*d;^$YTH()z8FU=F0itZvV z{xU6;A5=^oo}QYVkqgP~`jCPBjL{&n{URE)bQlq4^(X{@K{|d3KpfBnAX_pDptc}+ zNa+PD6=Nf#61S^K-L=(KoX^4et~dy`1FQPceBCQsM$xfX!ynrABQb9L;05535e&g< zqhm88(-Tv(xLiQ@#!CVHQsZX)fLI@3OH%8%wkWHi|HFi_c-{8{m?Kvn>oC1c6w|q z8x#i&LW^u7QJPB$?h*eZRhn=+n|dlt(XB&BT# z(Vv8J1faD=)(+$z5S3Oz$<{BH0nqcEl(N3wlf3d?7tjO z@bC)GSM%)!(b?m6yRcxbYN>gw$+d30OF*U|M*@fm%D^#SiLRUCUIo=i#B@+*rNGJyqU6WV6OnK`kIq1?@hRr(l{our*9Ybm)2t0!!hKikfTSHea zRZ*6JpqBG)nv830MKaW2T$jsvq+AF`OGQaq$VjS$>cU?MUh8&DaSCGC7*tc3VE)>P zk}TcM$zTdHu(2{1?+InS&^L%(7CFu?YuK$Lx&bI^G?*r-fz8@r_)@J_g0lV z!6(_~gN70!-5d|3$c-OY#qP^MY!7r7Uj)cRmt?&UN-5zId-dT1A&17exL47P2ogj(juzUK{1wt?FoL=Qi=4A>g$#YWGM%go{y>GPX(tpv<*$H!-_4=i?`<1 zFuP9T_v=khqMc$&Jo2$kjbx;Sw2j$y1J=s%h1euE1DF&=6QT&KGk~#Fm2D;|+Tj&q zK*ZasBo5RgTauzMluCL$gA@WK26gCFll9?)tUfNyM(4z8$d9DF)?LPns<;y~Ni9O% z7QTIeyU%h)BO=r>Q|&-S;gxKX6hqO_H)7QqkoC3T)?7G=m-=;#**RJ*-`waEMoISS zMj_a%Ar;`AlxTnST&u)ya0o3HF1*s~R$7&rU(4PTc*GvhfZVOOtW zkq&(Rg1Q{^e8`4M)&d^Bmdm}PAXX&Q*Ko}NEY&XlOaCoFPIy^fZ!Uw-?-Zx@1qGQma4kYVLkk99W>=N0?6!xOLnc@9oAOw-#Taem^ z$;b}jVz-2NasiIG*vO&;%=1}@HGtPmEFsIVlt;!rQe)xQ^E^H*85cTeoadKL$m$Vy zocht$R$7)eGBb6E3r;3TXx%XD(Y65Q5wj|S2;501^Cz#3URoPJEsvnIPR<+|i%cOT zndL7?4E|UibrulFybv+9G!QTKEtGB))xan?OQ~(A$RBzQJi`n|5=A}+3y?_fLNT!cN>5Xm99#SkRGD9fw$u335U+H}6JxwHpU$&@L3Vv>(c9>nE>{>t;{ zk*XlRMtd1|^>(|pIr(mjV9n#J?3xvcV*nuqmE!3varFc8-?G%2OHc7!o?aL%M5fjx z3cAd(hG!2?<6uVS4YfK)i%hK5IY(;f1n06Q*4NE*Cb)teMJlZzZxVw)+!G@5^f{AP zL5}h~du-H1287Ahto39PD;c6pPc0Y;^e~6*K`1>%p=AauR6-OjotfH)PZ!JtvEEw{ z+=s~s58=wrn zn~TCpi5qZE;=tsHPr&HUgl@nV#U~z3jjWb)P{2c^x-n5n!jc|eX6;AAYlnSl@ulRd zzk~u!q;%jp?j=>@nFI* z#E?;>v~r=c#&Kl^AXNtNY1CyIB@0D|-^Zg3HGi9b77Sx=jdoDQH*0eQa`-*pTXR&B z&EKf))ve5ft8Bcy`I{*vQj0B97t=Qh$SuW8R0KFe=YhhQhyvh5HfDzs0yMw6#Ur!< ziqE=#gA`U0`)Onr_cnyp6or8(GJq0&*#ax_>dWQ12w6t*jGFaWalv{e_J%m{4&{N< z%E6ixwM4Mp2^q;WV94CNS1%6L9KphoC@`^1-+opr-q-@3a_bZHWmhEKC1u)`z9~fwUkkchKe&_ zJYAbGKYsTIo5dgwa%5~P3+Ps{UjWRa=&?9e6JnUEMfC6lRmuu39;GJZ7u5$7@>P6s zM2QX<%3}#5pPy>yj3qEhfo8mD8(iowj`c4ffSc~eiJqU^XM)*?GuJYX<}r1waG0G$TXnr*%rZtr8OMBETUMI z<;Mx~@aPS&&szXBnYlTm>5flkq)W0oS}(5y2#e)yc{jzBJ3-MTt}O-0jIu$ax5qABm3xeBF2gNj&zv9c@zw;i zemtPeeMQMLiTuP?J|7RyP8^U#sjW((vHqZ|*6wzfcx5ZfV>d8wNR*YW>!n-Vxd72-{(vRF%u zri!>ia*m9Tja)x-_@D*|zD!^M3oKD=pcf>gaAB841L<=nwSpWadiFx3v4o#WD;MB9XU8t8_})u2_ACh zdUg>j_@!_aF-hnmn6~msktR=e1EbIH5xT~5mwf^^?DYg3*x66YW-+s5X19cI{+dWqTsCN{iu{qJ?v25|nmhdn?=hW&g@@>OjCC)7g zF}5lYhr4oyfhsW?8K{k5H0W>H8jy@4Bm}x&eN7~BQo_H6x)nM zrkjms3$w`FJMAZ~IojRNLk1oj4%_(M+6}UET|t=PHn`{a87>xih~(zHWUNQVR&anA zV~Y$Nm7LD8u@%`8$-!alwxVdt6=|7-5x*6ZvqMIG75z3!)O>|?lbzNPZ0X~&Dr+;+ zOOI+;Fj`X~=KAJ|*-m|>TNx0<;UhS%Sxp?fz7n6pj?r!H&U__tk}qafQm!Aneqx@< z!$ZL#SA?BbgxrjT6#E!xvIEY*5Ou`J8{&jqP&T|WKZBxCU(y?QL&%h{Q}GHYpa13b zh{{9gs29BD_(+lJl<{)4PV&M{xy(_mxPj)Su@ZR$ee&8M``aCyUC$Vdww&6P63-@9 z&R6(3G3#NG;+Mnvkhm09L9&=%-QqD03!@?Pcer3jctxV2NjJj& zz{*_1_?UIRDh0|klLnQz zK8RmWl=%S#k=*E}b}%A^Wi~!!23xK*ydR-E?!p^Aag~NjblRvL{*3AVcy1#0;zBTu zm{5wKj?-uwTl4v99*$UKxIo=r0$VdFi1L;>?`x?dE~jykFsHzAw1O8PMZ1ZOc9k*| z@s`CgQxZ_Lyr4d_*@)8dP)V6shp&286KI7V0XOw`l~s-(eEZ?99Q%rMtk{lP zszfJJq+5`x&FEwzg%nK-og(7IS&E;Q#Gb4G`y?}*aSohw>b#oli1J{V0|n_7VzjUg zguFbJAd-*r0+Y_qmb*vLerP?Etv`vkw=49EObX-}U$FF)e&rzR@{m!sctsk;K~AcF zSY1R0>uIub0XteZHK#&xqIa4{tEzHhz@+>Ld!;@~JUP~nXk;uR*URZaRI#FvjAMiP zDYk4_Nn>n79~iBWxt$0I6|0<*LS{h?`DjvEXvjx7w7n{aCAqYtPqGBFimkCV{pPxV zw6K5m%2RNu;87Qz+pFP`YZu{J_mVsh^mRCG4Mcu5Bs|MPbR3b)rU3~axjl;nV_B3J z06oN3p#YH!<++AVOs@DgoCWyc%yqSigIoii71{j!wgbDxsh|q?TB_Kgg>bOgzuStU zVk{|vl&8DthARWeAw>!slvY#~hD7ZK9z1K4VgwV@EzbhzXEkM%)0r|Fk2U0^z-bOK zcm|F)nBzHrjeFr9()B)0E(E}yF(dBxGg}xRMx0qwg_9p2ctgWqVD7b#;#_kO%ixv` zhv4G-HnvPfyinF6PJLN^MhZhzQy8XD8naOSXp$DPY{7VBL9kJV)r<_5l;GFGio9}p zsRhZ2BO7a-dgDZi+Y)fE#^LGVk()GE@Z!zNyp*(vORiMl664kq?w6zdjD5KbD|e&Q zuHp`Gj6S(B!$Jb!1|}OV8dFJNh*-O#9I}^D^7gv*lHe*VRJlvEF^ zNWL;wk!+1D(z6)kbu+S>3L3FsuCJwfSXApuR$F6$4CR>uJ!2rFFl3J);c&S1OE+Ty zCcPgA%K)zrjRUnJiEoQ*-7AqO$~TWNjfODR70iT}eY@>BX_2iDF)rlQz1^ZES~2;- zfg(k|-dBO6Z20dyRuHS2JjOxNN>05<%g4Qt+;p)JSNyJZ_}w_uHZnBx7##~wgk@$D zx2E@>b%E(pby)m%Y}#2qkk)Awi|5*^r@5SS(zDkee3Qf-B&1!to-Ma`cFLJA+~-pixL~SakNB z^rl2Ng30S&m;!4UVNgMMHi;adjO-I6(BiN;0<;YBVrmAfBVbIAn6W>@d?X^4lE^}y z%XGT5z<5oh3|eIJQ8OGdb{6vylvX}OPCO=J;y00s{+KH$TPZRsOJ8K;#c=*s2)ti_ zuVuIr5~5QgRIoBqB|eQ;84fWZg$H13*e){9R&NzK=<>9rB>+}FUqa`NXrze}3s_AS zFEa+6mMbaFP-^GZAn%ru5L^`%B_Ej?mHg07ak_6ggU9*?KT;q=&8l1l(W zpc~M$ES#wA&?^6p3FcygL`f?a$L{At^L;&LP zmEP7WHn;tG4IfNwjchzIuOcV7G9$SEV5&Utmt}8x(cjR}9?yTv+1{CWP4-~I6T`XgKJx`WU63Tb@(<3d{h zwfnBU^zPs3Z5qGxV_V<&$in^O>wlzS;2(VWjgO44-@biQl5!?QxZ#KXP$Yq}_S0J~ zxP#dEedqA!gTwgu;U@llWDEXfqPAQx%CLV7{0on5x!^ARI``0}`1i=dYl46LUQzML zDf`zYK8gQi{*%a`8DIapTD|^q+V@6CzSbH0it<149I}nC-?m9O$Jej&&lc_b@Hc-hmBjo*vJMW`mcG$y`O&T_q_3u``16`sc#gc z@AuRg-rM(yYd0|!9=Tu5K_Y!GSXka>$M2IAKP)xl6Ji7_lqM8w#;rVmPvFEMh z_wAyT@%2C1^1vgbTi*ZQCrK(iTd&>nz^@N}_1Z1(|K0KXZr^&^;O_|e+PnTo@0PDUcHzh- zq{wze{G*@WcE@j>u|9If`U|BxzG?X8M+Sdq@TpH( zJ$L)~*M4XG!pDSZ1x%X1>ni;V?+o=c5BG(80v_r;bzCVr?m&#(_}jktS^V6Ebn0!t zWPE*g`@s16f$e(^tdDNL_5hy7dsl6_baeaFmP-$8zh%p%v)fm9YlI}m2erSIB) zzx=*u`#a_LecRtFzaQHEFn-7HyKDOs{9XUM@%v_3oJY5B9lvjM`?gPvZr{XY#P8+- z;TYW>Yr(yHG;!bdF&d`1oXYFq!$7k7`d`-nN;F6*Ky}(Q_^=3&fA-y&Hy&dacQ&aAK_+EH-u7Byk`k$auKK&vX z<`{JSkKTw(^cD1ufD(h1>c3B!wUB=J;OWjGQ8zOeMfSb)pm==YXEi^i7^Ah8*tjis zeF|lHTxERV>rn7v7K@LZg@0;VWISpZPsg(|o*fyr=zs7GkUqjTBE$?m$M8en3v|m} ze+T#z(i?sFY>_5L_}H>0jcnR-*KdF+81($8CmE#u&)`=@{+&-fz5eUH*Tqih_kFh% z1Y8&eL_^m<|Fy@Ew42`eCM4mtsXzOi8mvii-{R9Bs0e%K-#)$ek@0(fc+&^Bi~UmD zz5TxYKLmpN!cQZywfzniZ1|ybB#7zdj({`kC?bgvl?(*k{$cPi|>Hdz-F1NTZXI(YXdds~p$FJ^-<{HEcj|9Ij4(e;mx zum8pR=OiAZXc0GyJ!9W<`S#I!;Zq{B1Ds>)muo9QA*1V`S2-AEr1mg0X7~D*avX!b z*9<;9_(`8X2ktv#%h;CpZ^G~M#_#;-X?S*HgO84$_3-%K|FZVSTi*ZhBWO~g&i}=+ zZNts;>YrAF*QQNQ$IE3}^&LYvLhN3JEf-u&jQjAKooyFhv+dB~0|(sIR}1s&U+?fX zn+xxk$(=C#r_00gB!@`ki8sT@1NR^2u^-ZbYaUzGb0$L3kLU75AnsbrFBa6~0j~hd zzAZsM>%~Cu2~}Sib2y4TFaL(zd~G`Bx#x&JPGY@}NB{V_ zLVl!mZV6k@+y|Op%!K^^?7a~d!9rC`5D@&RGcbWWID9B5 zwtfT%K~e*xWTIFV!-iOAhuG|HyW4HMyKLKi*KPak`fRr?(pD2tK_A;itX;Nl6p-$4BwRDtvNpS$Sb%LI+FBf15wB2IkJ5ePLqa+yz%oN=%(RWAe1b zl)Cz9b%gRKsJR9QYPMI+YQID1A%RYWZtZYMV*?Y%~s_H|#!`HY|#qS{Kl&7*5-Q#Dnyt2407uBl2@m(LAtbE-kcE_w;+VMc}zhpiTSmBDT+f%TQZ zzElF+Rswsh1h&5f_A3t?2X__HO!H3uxU?>+p{z^~J7pRx`wYRxgkFv=Q-W@pVDB+> zS&xo-zDuyHNVlXW(KNcIYJT)V3yjh2Sk9>HAiF4%K|S^1B67|X#J z4Dx6a{8>^{+lbg{A20aT#Fw)iTsL}WP1UUGdH4mycmttPSy+Cq6|9kQT~SlJr97w^ zcV|VaCedA)uBj{k>gbw8YG=*3)WbEkvmRqnip7{0pOSEY3wvyC&Hl3TzbwRaulQBa z4~B6+DA;KP7T45f@YpBVmx;|{+-b%=n{m&nsawLR5i=sLscNiV3+HTgW~$THH>gg6 z#YBm4H2EUfo#hDLU4aTwQBgM91x2lBs4nk?W45azbF0g*Q+td&+Jpy3R3VQB@|aVT zC`V-)H{XStSDh`en^#>9inPNKgyrO3;qh7F(Oq8tVHA}))wk4C1;F-*f0q78cP}|? zp`3R@=M%d}%&AE(8eKCHnSca<0O@b2{&>wqP!s?JrCv|1B$HT-^_qrQonX@)f}hD9 zx2(ZEpm=82htJh&Ti?>Qd~z0Zfw9Rex&D0e3heKmynY=WB(I-bKioM3PKI#=uz_|m zx+kpSn2bJW4feytCa+zWZJCVb?Oe?JqT>n!w5-NQQeI*fX;=g+W50B&_lYV>e#wf( zD)3jzRDe?{QxVfzSM+83PzL&~0%;vQMewADPZqq+!_$H%Jp4MryF7fY;O!nxI?A)i z!~az9Wgh<54tL*@oKHYS!u$jN$%kcv#%iRZ(DH|V{QU<0N#7@s>VeLRSdqVYyGKP# zTRV%AUQ1*V?|0Ut_5YCIClyJZ?NPyfPX8+SyFL2v3(h{%ntyi=?dgg>Pdn>~81vIN z6|ob1DE1Q|?}Ucb+#{CP@KhbEAD?lMmcri?fu9k9PmaJZjKG=yl=EH@MpOP_!TSZ* z{Jl-^Js$p7g75e60l^P>IQuZCA3SN4{|L0l#A`i#lHdssZxFoB!&eBN6x@vi5YI;7 zrSzN^`eh!UdjxM6T*n9OqbO&WN55b2KEZXI@LR#}_2}P&CW(Cd1$W~G$TtBpub+|>x5qW^Ywx!1=pJP3BeZ$uKDuUf-m#%uM6HTc*02)i#-gyl>FZn z`aYp|V-SS-aRmLr2>fN?b4d7Tx<;bmDi!ZI;I6zO9E}^p;CW62{rM62>e|U`1^rVZ++6_x^WTsPZqpZDung} zmk6E^T*o<=0e^?-zzFoK#1ndY(*yoMd=) zFH&;J+VHU1)qL6K?iG#0+8r&=s_KYgqszt$zA+${~_Y&djch;b#heFdWOw zKA%5R`7@0_({YI*?loBGW~ea%@4{j6cGKL@$XBqigqJfh;khni4>Hd~FHN9VAKov{up4|;O4oAoz@kzAGpS2U#3IO~kE zLfKff(5$*2<|kjsO8WU3PzcDxMS5Z}^?Huro0#Lc0SAd$?k=(yxeHvl4+{s^x$RhC z(JOj!#ej#oyXXa^0Ji)am6U+Py2DK?2-l8>;o>sbo$|&qi_3cP2yZwl=sf(O$aMH0 z8JiXrkmmMI#0+htMj#gKyMqE+JJvPNoY~aT(YzeDoa0TXdG&fevg ztz2?_Q>a`mz2Z4sHLSr$dB~SZXvuAL!4qlLc(gbc#1!#G-;&vy@C6GOENYyMWwNe> z;D`|#9apgXX50HYf-u@g5M!V98%z<>oJmg@rT={BjGZk{(kJk*^l5{iZg3r6k^T&W zFN2-N=YMMmJDf9U%KwvslMiK6e5c^b=VEa`;o;|q`zIdGZvr&0gpYze%BMociOOI3 zoaEuk=S&a3P55$-hDQ0ch0a)m;7k|abu?Z2EllZ^PjdvHPkZ=f!vBjNo)P?O5%|ss z{NFtMTH#Yh0bwXVr`=Tk#e%E+O5YrTcSPVlf|EaIY?S}!4L#pA6#u5d8Rql&r}?(w zb1B?P|B#_S#o$jG-17N}!QW-*UlE+cq*(?puYd!F-sCfe4w#b-&Tn=q&*=syz1G_g z3QjC-=#z$?@7&6V?vULmFEpZpD_H(<-L&kV)?&Ya6ca> zN6=3-IK!NZf0~O8pVQ%1JuHd9mm5A-o=!u5rs0z__!$QOGsDN~VXMI{|9>%jtUh-} z(ErHLTX`y_;ni}^x<~U)gWGt|65QAGxrW}#e}SR5{n2HH-tuoYxaIRv!zT&(G+(|L zLH|`lf2E=SnxVJx?lSaNpZ^v?|09D_PAxx&4Q~0L#D*Wn*V}spSN&^!9B=5Y-p(`h zmj7%+Z{=TX=&e3KV(62QOZC}i=q>*)LvQ)tW9Z4h4gWMxM9{w+fuAJbQRr>^wO`42 zjJ)gcuX4VV3WFhDkAKC_GWZ1sf6CxVgMZreBbOWe+KBQnXmHy;AgD7Gmn=UNIt$|( z#RI|heMIq$;2a~-D9*N+CgFaI_=m+k(Zid?OT8UoTXEHk>RIt+LU*x8-!AS& z9^NJHl^)(F?hPJ(uei5(c)z&6>fs3r2BZEeXPw~R_vn*?AMo%+g8#i|c<9al{nG!n zd-x$4FaC>)06x&rYu27F! zwaAm>U5b_zw?4WOp>4yM@L7Wgkz;kQb7 zZ3i@fFF(gVA>|07fkjDCNi{#hh7{&Dn#xdH!-qK*z@?r|%W!*7iScC>V>SnbAc>3$&LEk?VB zQ@lqomUnCRN%*9cd-YTK)!hY4sr2uW1T7QAGX2%~*YKMDcL4Ks4=6TH7AAa>4r6@z z>GowO`8^W8T_TJFdmsM&_&HuL8Na+pu9Wr#WX|~U$ByVmn0=4flM_reKR+#B;2ZZ3oW6_&w2S=eNk=POdIz8{Oymj^vhWn1R=JeOS- z^t_P00vo+PkNJfl+=iFQO(12EJ2!k#m2kQELHS3HQv4LW-GR=vjcSu^H%VCP`>_M3 zFI*dNJWA7C5A(xB%sB8D&vgK(o*7z@8A$L=i~hD{5-oczN)9C46y9SsQR2zQ7)!-6xuBH-jLI(_*9l-iV^gjyD1DIIl^S}STZl4+4JoqMq*$l8?JyZL?z`!3sDEMbVNBO#qMhHTScALsIP0Ly0hZZ~l)?KkoOy-bAU22iOAiZYT>g!nu(4Ah#o1 z6JV2UZdVB9c3g8^klTaiZB<|DDwHS`0Ulkf3VZg)fdBS8*3C7p_! zf1S=9bXyrk*O{kl#oVLl%o+{^O0G}HWM>Z*p^!_x8~t=NdkEmBpGJihsh2+*@Pe)pf@ znV$K2e9IrhVk930u|tVbK3~pg`Gj5?a}Q?E$mCu}nJuaY(!42Jdg-V_bc&|xP$qXU z_d^JdU1lh6t|0H19a`6?n#^AHhWh6QpW$9y(Bz&;Q}u2i7pQ{V_awQteF}^0+b+-0 z3AU+bN4PZPo{?>F+rNd}2zN*O?P0NsxV_|IFI4P5j3%A`u#H~OG;`S+-_5Z{vnBZd z%Kiu1i^F#V{SM7>84WQRN)}cV6GJoOjM7boOTTHjF=KHr1XlcaSC-!t?ly4S0Ky#+ zX>PV4ufC8~;oC2~8TtUfvVIu2Kf= z?mM%WS8LohlLogJCIi|!q5Uh$0ouE{*Q2+hp(e3~dp+(PF}tR&dn7jNxa}TDA7~JI zPIU@MP?HD|w*e-0Em(93zn=)dPmpVGrC7%7fJb+(KR!$ zjR)GAWq4gyovE3D9X1}!^1EO7m(trf#wjlxr_+vIFWu!=yR^Fe7e9G@3G-jDlSohV zd+$ZDn@{|`C|r&72iS-LFj~+#E-8HjaMCC6q*40oVJE%vQTmTLyrO_tG7!ur{F6RG2aM8lPQDDT1VI?ZKMOnQ z)hPZIhlgzk{S^O};KXPYe;oEQEo`u>JU@4MBoUr&0cFtL)ww z#rbWXxEjUjF12?k#Ea?Ga3O9(7kx_YjS1=H!%dMiHV^WIU&{?B)>3G@ysZ|g9 z4PrHL&2!6XV+5WTKK(-6CeOcD{&>=8AG1sFF2S{*d0y~-!B>aDVke-TadJv~qy5Mk zg6lV2?Mpr+xVBH)pIk3^LfRQk_a?y?39kLhR>8Ll?%IFI^mW0PN!Gje4>-T^QqHY{ zEBz0Y-o1bp=Nz8{UP{k{5%|l>U--Cw0`ZnXKE|7rqV*He+bO_H@qb?gey;GTV}k>u z>6$5cyWppX-myl(b?t+;<*Nkm7kX{ayMdRIhikn`;h&7axtbUQLOotBT&ju#hht(} zh1*~XzF1DrJ@)ig>o9)_1CkqYHBym@0FIU%ZpMY)*e<_@SB!G)dz14i#2q@FhYhJw z;s^puUx+P4J^na24u=D1YQmEOTxjKHAQz)?yEW_XY=L#{T#elk#^6>49}Qza0Pa-? z*9bEt6zk|+$cQZgx~$hxrCK&6M4^yQU062mc3a>c7aZo!wdBP$@{<2bs>Q(_*yonmgH*G}fgQN@ zG0a`YtM>IRUX-H0P`y%alvs5*+|#iWE-F=_2SzjH=3TU1*ZQycInsWdDNn_Su4)h0 zk;y3rCm)sneFkT|icc}PO_!Z>CcWxM*AS>Y%IA8+$Hx0d2DkkG(%|H;@_)(Tme2n% zIO$ancI`R&t31CDdcS-gF?{HEG5%@v9gyiFuH~?r0F2@qudbO=T=nyAk6z_T8Jy`- zK8*%vx>TO!1}DApZ#6jSRn83_uKevBxQ*AYdAIyI4x-`1>iL%jC%vZYHG`90<*Z_6 zz$hQ3*E1c6TRw9m=&v@o&956gT=j61hpQfXJY41cl!vRF-!M3>O25nCR-U~Er&am< z%HTG=Zy4P2nL-B)^+OV^7qdM42qv^>nhj2?ruPsyuHP-13K>^^;+!S$VrP}1O*kHC1N3+qfm02?p!K;7!E^gH%i?Fx*NVtYdBmwISE}#v>j(#Lvt4XiA(YbIg=2=u?oo3kDqM;N&WCi2_L*gcz$1E{A_cr(eS=r zNK2#72C@6`FFMBflL*fu$EP*h-XFR)2uS@=7GYah8@B{lDgA8~!if@IAHM$h-K|vo zb*F_P0tv|Y$x_%B;$I1j@z>$sn%zRkzStVon?BdTQ|*>c_jp*0cAxf-1Y>=%=7_|f z^fE@}SK8ZQDV6>Wl73xt%Jj4E((qb--vP{v0tosX62oi>ABA6Ee!6|xNxWOa-zDt} z^NmHqkDuTBOU1uPKIr|0=jq4qzJaW`p|C#et=5LspFiV*DQ?q?9d>ObJ1T7241QOddIjI-=Ov3Z=r?-120wvlU@sON^|eU?#pa2 z@Z+jr((A#bmxHoLgR(tXOpuIa@=I%j+>!jks{B%%pIQ^-@2Jb*Lkb*mI`F7`x}tsp-#m^muG`DEntVV9j{@ty=6LGQKW6Zf!$j`4!=jV@; zGh;LPhFYBIE$2|{>E1YNJmgRw@3{&b^7E@e2>GARO!}FI%>6vr^f0+f;KuyzqzF^m z+<=qB*CbQj4OL~0Wev4hM;G6GD@p}U9mmPqxffI4W)Vp_v5E)#4_?bP480du2hHKZ zfUT)T3m2!G%Ak)QW-B!Pu)?$Bhe zS~Py_NUMA+aPzlF}P3m~f3&x71g9M@2^p8n2TRY$)9fu9(AX1tS) zy^RYmp~3(}@B2;B>k?Sm;&e}-<+q`V!-nr*zbo^b>4BC*D1YWi*c$Lsg25+bE#Q@l z>z`syNd|PfbFg#!3g@RIJzonO5={iZW`;5`I>%MoORk}HL(==Wiz}qzcq&W{bItHA z$W{N8O7`iUgZInwTjZ_CA8N7SmbO1!koVigT%snyJIAsV^XPXj{z8B*L>+s8SrrN( zC+qh@wg+YuP_EtEnQhSH+Ot<_11Tr0XL2{9jeI(tYaSQmZcOZ&?cUacU9%^WeaM-M zB5~^e#0St_6jEzNLHpA??OA+BL3TWkhX#|C)17&Zbnx5W+A*#ibvcxDVNjY*L^6}q zq+45P(pR`*pbt_Y-@-`ro|!QJ-BQJevLDOjmrdjv?~_yA>G5@Cg|voLXdAegO%Ic= z+xYHbDbv_lPr)SE)i4pnvFylHcN>}IUUH#b{DTjnYNgRnKEV z+n*qvlhu8$UYAPOU5KPH_tU|5pdO~szZLRqeMZ`+LONb_tX*n%W)}zf)vnPysk@<& zR&>LTCO^BbchL~qi^X+!d>JjH=4`gIdkxd_3}XtpiGn--1o013h><_mQ&B zDIBNhAf@{kNj9eMOyz#nn0qpn`<`Qn%)}Kz4<@x!;;M3!ZYi(Nvb+XJdMJb|ukp=k zpql>p=ELyTRfM^-S!C0>4xB{aTy;-*eDl5Z?Y%V-GLV(WVZG{p76<4rLNaI9$y)h% z&tH;!*KAgiql(e4*+~Z@F((JPLYcz7MY-9@?xfLf;bH<1<`*IPd!f;fQlq<^9K#e? zP{F|?+F$RQop3QpMZ+lMV1S0JUg}P6_Kbr~aHC$m``4~soqu)8Na5y^Fhq)%#%vsm>gk8sHb37s9^@}%<0%Z0on)yTA{dLohfn+f z#=3535D$I+_*JN%QKJ(2wEcal?$^pX&tWSTxSL%TadW{~C=pAH(THbn5LI^K)`JHZ zG0oxX*rV0Sg}{2v0#tvB)b${TcKP9SZds^=Vm>Or!GCn)iQJ><+|S&t4$q{vZ9>s< z5fA3P_Ev^Z3C-B}=9fWRLYh;@2e=l8uZ+ANr;1M&jZ0A=S09E(azAzvK>Jl#oIf$h zFX5#+(;Qt+$CJaPO}Kl%!X7ldK7$KgTsP`iNrJs*x~9x@Jj7ULWIlJvJ4F1wPiXHIX$PC5)_ z8vyjZBHmNkbAsGK6zKZB_kR>p32pecfV}j_r$DZ`?vAJa9N1uJ`M>WJ2AHwyQ_S&KS*=2~8{UeV`dp zBy6ywx$@rTOU?k@gtnE56}MztIudOy%ds*C7f>W7tV}eo?p%8#FPb>crPz`8BCvp; z8YVrapDBse33jnOiJ^En^FDbJyISn7J%*ic2yKGRsghu0@3cJfwJXg@8c&`22n#ARW zW9ZY>AAvnQhQ1NZCW179{+7mVxp3jG;92&U;aGp1M=vMfH&na%nvBr)F+ed6EE1ky zAjM(%*5TycEa9pc4u)y?jE7NA`knn*5aySlv7y2&IUA2d}o`}yN!a_h_8Is9&YdAg>ZGTG(j zxIN$>ha<7rY6RaRytocBmf<>Y@aknb*uu5ycaA{%y0I?1{Tk%`PAv9*80)bg!*cKM zVp09~YO3JVJ@U>GTPk}i?k+EXb#!T}#%juaMB;MiLd>Bqo!rHB@pEhX%F0`hUb!Ct z?;dey<(7(GvS7ZX(R$GQEq}01-s*8~P5X7o4s-j%97tJtXT_HC@;SVI!TLa_39!)l z@tM>E%29XuTogB4mr(02BynYJo5a};lGtUur=d~qX(*q?Lc9~i5A(_gTnB+ToMRkF z4@tOH42Mi9U+$Kk{{hyNo9hm6zrla?dkk0y?Amc{mZG`bCX~v{UV2kdx>dH z3GVU%c5QR66ub*h8rSB9R`kM3B|ri9XGCJLR`@aAJwl`B6mEpO)SB!&g?_)}v&O`- zNj{qYD}>)a37=)+u9W9D1y?;NzEf}^E6lb2K=3;8(6;O;!IK{TwBU<8oX(2Emw54% zN2&V+o^yU9u+De5IVd>KP_pJl=NJ*Y+=8&b;@n5;|A^3g9oOKrYyTrps zIeet+Q#>!ES4&^fXAJ07_eB(Evqs>&H?9;t?{6!GbFWY-yeR^YTKj%m1bue|{>Ksc zpGV+ZBXIVGT-&`&3a0Cyp(uV~FO{y{5%_-LlaQ?M6J@_D_`QN_d9FdD&v^Sie1hP6 z1bpwiOpEl~@+ed};=J_2cSzwHKw7Q{N?gYlmBT-@Lj77a*)#tK@jwb0^YkJ_t2o zt|#|kUMmphwT73K$~OQJ4`I zd9H84#N%CwPn7_tY@yZd7z0<#q_f&&h{-+C0%%*F)N3Y+Nk{+((vnxDY z>96&0rN3El#(N(ARiC$e^qMYRGvw#j=M5h#{}&A(tA}q!(BB_Hzc+&Z-wi#}pz{CN z!?ipdFnnx#@}fsC!@5|7jAxl%%io?meujzngC4!cJ4bL|&+`qv)z5N6Z}oYDp(iip z|1pDGK0Oh9K4<7{y8h14+jM=+qi35!voivJ&hV)No#x9(8NV}5E|O6EM8W-Xb*iD~ zcTA-}+t8C2+di78+3ouH{zKTP-+sHp9p>DT2P<&|Ce?H@KDaHiO&r{D!-=pnF#!O!^i63mma<9;Wa~V^>DJh7izpp|31N~H>-!a2Dj;5;PFxU zuQ&8Iy`M3-)z3E!Zt1^c_}lvan4!1z-CA82!bK4)#q5jRX(5T}P`0NP&^E`Uhf0Lo7>{^fXa&eXCVu|-wLvQoz(+0Qs^*08$dVa#-2(I#IzOOU%md{Ndz3Q{a(A)ZQ zkHKxa{@LJ`|IZC>>EAo1w0?pJJR5<3!QfU8_Z!^G^N`@GA5HJ$hTf+4M-lYDF!Z*( z9X7a)_q`_;)62a-TCOe zf6ef*?awYlZ^td)GxV$jD(Ck-{95?Y{LsU%4&m4V!+#bqmH#D=o_R*|x`&?=!m-Ml z&_Y>e<6rsI3QqmobWJcg!>F7eG<+r-J{NiPXTy(Xv4^WXR~tSyT}>YS#E?y_!^5?l z;FP_Y*q`38= zd#&!`W+Ip|_-8ya{4MOYI!ka#He8{((~DPe$wqa$xBz#JRKP2(9t+Gbbui+QMllD4G1p5UdDBB8aG@L%!KdIf)wfG4Y zPoH*;gqPx5V6j@lS4llo50zitt6?dX|Jx)%Mz~n{R4a-+^Rjhu6MOjhNKfD8H=MvVNqwV`+St0**#RD_H(<3%GG{)_fVzUPZogq3uwYM$Lu3EQ#&4pZd z*SX=`4Kt=UO`jTDyDpnpe$(>SHaAZdThZCtmQAc%dtqXIOZ)nDD?6K8F@KdHjD>nD zmuFiNoohSVTbf%}wetE^IU*?Cc*TW@GtTSmSbv_I7dmfUd&}C6j<)mge}+r8_k*=A z?U=Dxe_`T==H|q?jg$Ew{+!pkwz;iyWlJJ)?kZgNnm9MD=MaUik7OEW88DnqS`4J= ziiU;-ORh*QSOQ0S@xrEbX3p#dum?D>H*_=wiF21OKj++Y*RE^X(9+zI#m(D^bJt9t z3aU&~!-8~U3IP_LPpY;yfEsmU3ODX9UfeLnV6zr9r54X`n!nIRsFVhsb~N$aIaAgE zy<+xMhJ|f$kg6|Qr%an(bWE$CB98g#X<|z?EEd~Ui;DJHi;MQ9LE{yfMGF^V>eEFq z*G-p(_J-Munie!JUh)x%=RardBgcd^Y=)#MDfUsn_c@%y*G!>^;?m>)`fI1CkK2W&$dw(b6iLf3AMD6DVQAYtV$o&&1* z2b^VuJ0nCfeU@6QbPhZ@_pe6F5Z_UVFA|S}WQE4NIo7TM=#dhA)6re{mfyv)#d@u@q7~3ypU)Dhe zH2kl`%?a3(GEw)W;6@wSTk@d-KkB!zl}UD_6!+3`JL)YOh|5QcLO3ad+&*lFnJD|8 zm5^r-ddX1{;+wyP2$k^N1wtmvaXk28x4WkcZthd%V|xl@53oRnafZ8O&(BTVm8_+I z5uIIy?Od9OaMRzx4}qWVw$pe^rKFcNAeP#;1d(k|!FqoyejZ@o;UcK-Kll!^>YX-? z`}le`!w0yYhE%_fM+83_IUlK5}2_(#G7Y zsjC`so<(>I&y|_ncbTK(GH#>YsT9QBYZ2efMnd(qg8G`Mf`=PVIDl)Z=3z5P+Sq-<#lkY&$ zy8SZTmo@m=ZNvueEd*P6bTB7vNOxBsH*9Nh!NxV5y)cdYEgen7-ZFcU5_WxIdvLl~ zoD1bX`OOnTCbCO6J3&gG+w5N~7&fNCO?`;}-`{X$YX=^oCkwkPTb*Ddm<5|U{(V>0i11d1!>?r`Zopqw8o5Ebg9@?>K5B{>vm@DV+40h{aYd%6(x z1lYoD;<6P~l`v7G`ALDc7!CNl9r@w@$a6sv`&!xHcae(XJGjb%^oE+1OiP@*f0$*3z;0Yg=TV<;jt^)P-pU$<1^eanw?o% zYhJK$3%3iwpa(yOs_5zOo2exttfT-f6AtLeLflYVHUdb(I8U#?v+SN-S~{s&F8>Dq zM)!jb&(DXBQJ%zqF?lBbza|fQohNzW6ffv=Ly2)g{!;Amjc?wB`ss9>p1D7_bK{AF zi&0*?cb27Q{>N=WfCGpM-9+cXLVLUpL!7V~UxnbV8AlH>#__?X?J>oUK-yLC$>g5L zUTH_N4b3@gr*sxO`@&3S3&|sqcEx)>>I$878aE7!E&0v3Bd_o0u@;-bDHbc7PZOpp zds^<-js_hWh7lLB9_C)O=g*Fo;r45G z(YxZCUtkdF2;V?}usLQCb+I;LB;YJP{i)o8@w>kVkKT(P!Y@LF1EDt&%8|G}{h|2g zL3q|brRgCDJ@+Y>{t@JJ8FI(ZHP#VONf;|f|8m%gZC@D(t?M~K_l9w?>;xP$B}Wou z@=Jac%l$iY0~_2kxmV}s=T*(mm#2oVz>eoImH|DO$DKdbGt@bi3M_W)*dHAx{sBgQ zUqKd0JkG2_AN*M8+SLFOm)VBF;CD)=Bh(1uDipL)NM|wPu*lsAey+&5&eFBp;rU(R zc>qtK^~ON?!dQIsG-w%zdey&h;9I{c<{l^EH2%H6Bll2nkbO=j)Qxm}!TyGx=i+yB zd^W51;-9)?Np|i777EW2@^E}JH*nRzV8&a>&+ufB#$4r#LH9$bU%$BHfQrF&(#7m- z(Bmk2G3s)M9}Lb4`=?C)!wH;dHXnyQyf2e)#1UdR`QmAw0#KFCy@o7K4L#w`1YnD-$bJ*RWwsXk;|ds%+Wo49GP^B(XVd<^v-<-sN6JCKJJbfRAJ zml}RIT4}jmC>MTEOUQl0Qx@t-2ZPTdmM}{{s#zL_?(u7&JFBMZz^`8}<|6g4Vtl!v zz7aqhrOY{AeqG!F05puqwArLj?+ytfLi`{wC*FLfKA1K{5l zzb5i==MO~Q2bQi`RQ`C$(+4gK?@X&A4;c0+JmX*^ZcLj~UA~EtQI3h?-%kH)YHG{V zAV^iaeW7Xbb9o3E?=1fa(=(?gv9@r20QcRKPrJ}|kxw)D%ykhtzb(FB06zqr0n&TK zub<&cogsi5&z6J-2F!C8so~nRIf#?`eon&nN!Tsrm+`y+oT1QN$wLhwGN?1vq^(7_ zKyxg#7at>S2K-hF?LIOuC4U+>wjuW?Vkdv$5QI6^S9{1TB*~S*ZNkre!*)7HsBWf- zXF<$%MaXTU53R9JA>1z{jH}Iy3g=aL_s6Ape;lN#C@;fl6+3Yl!Na&g?lBx$@LeeO zd(hRt)>O@^Np_FAbL5s0y_I)Ye3C~jM3YuG)y!BB!N;wm*<3-T;M{2DlPkx?b2MfZ z?zMAr&8=Bh5tJb|T%G3~qj8x#A7PL1>Ke|gR2q3l-s>efZ5x5Rc%`hnb`w~y;7P$b+Hq6?&2R1V>@)Z8D>5zxG~)I5W-6n=69etHCcZUlZ&1U@$czdQnGewLDRRRq31 z0{?gfz9|B~D+2$M2%P1YbE)l8vD!u1EHA|O3-0<-`29%mMUs_WLVsBBJs$oJly5gz zD@CYZ=(*34c&$ul_X*BEjQCa$=YD?Tb?E9uXW6v(P6^Fsd$%W_Daj>;4U)$N<)R}ERZezVXm3P?cS=Q;qex8LU5~1fvmy>8kQ-7897yS zlQ`<(rsZv&Ewng2xoY6{-qMER>&C3QW`JW<8dhJ<$1DCJf-t0K7o&IsK^ULUbs>Bd z{R+W-{&_=BKTHZZ^J#;RgI(kOs^C7KuNiv!DLtp+Xo#^dRs2zcFuwfk*JynH;W;%& z(~m+sR*JqxaPlWFP1mUgx9O^j;4?ddp3{3YJXd{%jb^_z18#QBj^VVz171$gO4}y{>zW8+T;HX*JGl~WrpwYlXyoDht+AcD_DhTh7vI0C=X;Ff=P1phxa^yIH{ ze#+pM&pi=*{>ji=Id>Y|>iJQFTlyy=@IixHdGuTY^04|JE#q}x|6>hq`Aiht=X0K+ zw{p%lxJ}nQgIoI55%`}O+{&Z-hkSXyY3S*v`Sqy5EuWtY?(=!k&|5hxH4g}E&bm`;CfdV^<(Av zxzPLRdeP&f={jO?%V&&q5I&!i1lRJc?bw+Hx9R$z!EL&xMc~Z_xANR9xG&E}Lr*_V z*Ifp;d_Et+=Zl8k%K0^e+jMO=xTW83_)ma5+MW*?e7wO&%X_t-j}rwaZ##at%;0Ak zKFbY0Yt91qv;?tzEzm;B3mxPEu<^Kkv{{#6fOB;(Wr9=}=t1ySI7t`rZB89==t|*&z?te7wuNzmr7s{reuS<-{rT_xMR5EL9-tC~!)O z?U2+v_0aO8Zq{{XNm2oM9-;@#vUi407Hh_%^+U@&$2`O(d9a11j*InSB)daL3HLd` z$kPv>l<*plGVtY(+S8=rW!Rv>ovd_7v57T^-H(5n#9vnk8CnvaI|+9w{Vkdt67~r_ z^~XH&^>-yO%HqeP`}&0qC_+^cRYF8RQ?-%(kM!QejA(#~B0(rmc-^)OiUkTU3 zQY!uXMerjMA=A&i(D0hC+-KzL9#CxGN&Jn)ZVw-YUtfN@ec4HT_1G}T5s|+JPM&w_ z$It3qD*i=0lojT)9&971?yKh__hEY@uw1m7 zi_P?IsBmp#VJ+e`2CW|=#X(wEwYGO8czkn$8{<1V+uPTz&tjwd+I5MQx2)xiSfUw6 z`C=P9PCss2f$iho1kO>jL^_El!CP0_0Hh|9kt-K z(sLI)qAbag!)sZ)=U(KwmwE0k&)w&__jvBDp8Hyz0?g1=ktiGv2A^+H9e&JL##~+`Dlx$v4?#P*Bq!x ziY36aRzdS*A5#j?M&L1R6q~jB^9}nGOaDQ^ z*_E)uD?P^^G|FFbjmM|goS^1aHip-}P;qrLKWG%^dkxLi;iG_GChpZ9j`qx%4Ich+ zao^?Pz2g3ihks7o_jvd}h?Idfv@Hx+d{UDD!eBGCpn8`>=**TWpOVp6*hm zWt#-LN1oIX#~{aA*Oy5|QQuR9ZLG6(WwD|saE8aUDKpQnyI^L0)EOVsr$}W#_A@^0 zS$9bnaT4v;39-co=#ZOZXYSlik+Y+7d-O~W>s`Nh=Fa%1chK`Vn~3nPQpV)(WwP%@ z?p`^!j|f{!@Md%s-;91o>$0BP7>>D#ne510cx%pbTuSs7hI%;uHpj0)VI(En5O_tu zuh@}pQP5It6e;a{iPIr4eu^pe{&8LeK0N~ePz268Rf@kW%*}f2UsG!bzE^bKfX^4D zUrg}v1EoKPM~gg3ODCT&S})mcvL5OC0{d4Q;+!T>{B(ja#Mv(^K9L{{agG@jPry#Y zcr-2t{GLAvgl8FwYST5JG#X!*QRCFMK{MPks3Emy(^dNg-S$PnLbkuJWr~QRB}(QOJBUGscg9T@x=X zD|Sn7)hC@_Hx0cN&9V1Mhg4|Dk#w?1pM>k}573R{ncO|@_br`t`S-T&ZouvIdm3|l zf>#e_a{X5Z14k}ReTyFs7N_$|tAc^oPYfpQ$j_~8eYEQz-yACYL8@$bD*jJ9Q>~BI z)}S=(t{9c-9TVI1+8x-a6Th3cKXyM{w&`FOocVRN-}=gzzx=^;zG-aGd^p|P@Jc$@ z|LP!q29BKe`0J_M-qfTWb9=X(bPm3VH?%(T^$~dVrYahG9%+a-4ouq9TbWD^94Sxt zW_pI;&m(`*x!tLO*G_wN@bTBvlOAQ@J_Jsc?b&`>&*0_i`~1M`BjDXzc}4G{ik|*> zumfyTlls#YbH}7M9k>i{D)XEBGi49Q@7f8bnclzt_v*4(sl=Zyb2-9gUNI+1NV3v<484r#3*mVEY&EsJ!Ok z1F0W0c0XUQT)KCjwy?MIbBzQ0E0H*j`wgo?lgd3p z&8Bm6$ELRB?z-!)f&JyL?(0q0F(scw+0V_z5dtnTh$^=mWn)Az=?B{%`q~%%gzj|N z)47|+ls!7|dNov^TUwQR^+4~`(F1QHC%%`uk7X)%2pE30(Sb5h_A+=(+5rS&;{TVE z_DuR^Zf@l^)|^}%r)m_=J?MEPp8LvghlaXeEZa1|(sl5!;3}R|aZP>yb@m)J?EBx& zSWvW6SEa7xfevY$Pm!NhiGswUi|BTw$_COEqf=UX_aWL;SawrxKVL(>y*Bk7mf?o{ zvat=lSD^s!Nxk|4eq9O9Jvr&2RPX1{Vfk%+idmZOU0l)gR65@Hgp}Ub%TvAA-Z|9z z6bo-|-@qHEA^hX7Px>Llg++I-E4t3_RTkVyKlID(j)sawD7Vjt<#zA-ACokt^UKGkdar*aw+|vA zde%vsqEzo!orIdQTamIXY~YRZhTiO*sFsJrYI!I%@FvriJ23EDFiKB)x$Fs- zurN)}4^PviofRJ*vuThC3Ywp4EPHCh#`%+;XqdDc2U2W2nJvVD(>7xksj+(yN$F>X zBLy2z$>4CgfdiL@UO3}m(*b(%l#q&a?zEuiaP}rW?< zDl9>byLNI3{J~QI_3;ds)V0NP5rlJC4i4@DNqBCC2%}-qCgS9_G|n!BYGZ@n`h$(( z+2@>!e;Q=1J2#-aJmcmyCc>$G?UU?#mU0h1_PBRfRCJez*RRj3US3l>yQb<|c(Wm( zxtX+Xzcpy@=6&_OmEL~qiUZheJ#44-Jlt1b-RyzbKF>YVH2?iB5$XZIrQRhtma*>= zE-!%{@4E!^n|yRk>+&5Kzqu3Fbs#Q}fyHF7QG9KkHR7GYc{Z&tykvybP0Lq) z)Q48Ku3A;xug&os)A&|nf40RmEQ0*kbgU)_qqwFcMBn~z0zp|Nquv#6Kx1u<%A;7+ zyF#CguXIevv@;%o3v(z@?+SnK#jEj=hc!{}3db5g>Rmy@PqvZ4uJP+L>RsWCE8-unC11?M04yTWesBAav(hwlmpX*Xxa`tG1-Z}!soH%7(3Q8Q_G=h;E` z^JVpq48FfGR!hgfk%^b#H(gT}bPtp@Od9B{4rV^y`LkEh6(>1{-&x=Phx^{ex~qMq z7EfYzOb3i&T#AFP+L^iXbdUe;!wT9c)raxD*Y;tm&-VfM+f6d!{BSA!QsA}^Q$ANj z&|fF?2|Q^Ec@|cVV%LVMvbK47M@uuVU@zUjSqi;00+W=IK zmB4%Y;UoJ%3HP@9Krdc(`te8hffC?q4JglJ?E||+|8KVs)V=d>w-3~{(Qo&A*?v|G zn6~gy`1SR-u4!fK@$`XH&esXsWB*>J`zk3!(n%8bfvKzTQW<_X2y$=4H$MnJyk0iu zeih%m4fX@14f1C<<{sKbD?DGw&f_Vkp$}fSH{V0JxBa9bU$LDHV$i!mjz7*ISc%yT5RtW$}B*1GVs0RyYVU$W>%l;6T&+%Avd;RDCmymXgL5^U#qTS{ zb5ZfGJtfGG;+dcyM5JLv`HON7Ia_^y_iu-?BYR%Bw+wy0JM7c-`6gbX?#R^Rep!ZK zvYhs)Ij;=-bPO<(1qtuDcbDUQyk5TNZmGoKVRw#5)zo#5EMFO(v4%6pK!Z2gdDZ2s zJZN?`+iESJOJEPr?b9>Y+QU=i+_8NN_4qYX{rCHDs0H_XEMp0mSD?lhw31^6_A#s| zzDWTng*Qgvmq*}igG=#Q7J;__cVif7tX$au))_&M_i#31#jy%*?c##NsL8t~E+<^O zjti8-Q+7xT4ly@^X}=}5COrIycYP6dN7d+Yycaj)}xSi|!dxwTNzilX=0fXZ!cme-+gIjq%DEcISj;oZM>zjt(gZ0%TUsSupbfq*9lJj zkHWu(*Y7_ptG@0SWP^-xv_27|@#UvmNS(j_==nGIN`T}2&TtnK1+y`H6n_2q*EMnX zMe##JVNUV_a|=$Lvxj%#%&41jymOLzMkj?xI!TgfLq@xOBW_$!-|u#d;NXAf?0L$4 zP466a4TcVBj+@xx;LZ=e5N>A+eE%B!6ptCkXkw=%r1^MP+JRBjn1Z;DDO|n9{({T! z1)kVc{L@^*AGf~da;&eJQ@!$St*;4h)SHYpzJ4;UQj1#AcZ|zzn8*M5>ujWgF#X0v z-;<{`r%22?Rs1?r#Az$Fj)(2P{SKjR>AQieonh6S2TLjZV&L{Wgv&!Hr`wmELAo@&JXzP+ z_Ne??ewaUg*#Q(gAWW~O!x%sQbvT2wHG3R=>D1%zOS?=0lTMcKdqv(gCO!R~qjxzQ zWqW0(5%&1jpC417$d3pG^MC0#be0o)?ljA{no@lf{i6FoZSj>uIQFo8T0y5$n3`iN z*R5@tJayWPnT3g1*Rco-Ee?EAHtiEw#%UDS^ZpVJEw=sQ{JkIK%Q6?$_7~D6F&%5$ zKSL6zZAX|NN7vn`w*M-L&wu!JH>&MlCIM}}6Y}NPwqNCxV6kOld8@WNYQFVuW#m15 z`J>*0`Xrn$m$rS%mSdk%ZMWWIplu}ee?0F&{Sv|3eGf`VLJtWa_8n}eReqH#s_m|o z@^iX`*N3k^4)E~lrSK;7R_{Uoy*EfT89pmY_PlHhOZBM4k8TUespPu;Lgq9NkMwQ2 zIL>7LN3~TxTfeNZED`flmh=OP+YkQ%;4HsyH$2-a^7QL;5*W=}wKe~@?+wzvFVse; zE4A~vVaD{P=~J8Ab&t?n)%7WLQ;++bN0%wyNf&t%W6n{r{HRQC<;X+n`2QT$`D?6m z3_kP9u={}HSp56rL~z0$E|o}g{p!B@{@mQE_!m++ESlK##@v>*o$*g&MrUBt>#b{B z8fiaaVAE@Bvn_3*J-+!9h;Y*zsm|o~N%)%ot&^jdRjemb;wF5d>quJ{)& zL2>F@zc`iK!7ncWQYSo;+VpH0N@;4->-g5!`bv>%pJXSum{#u_ZyX|?QjmQKW7^|nEUXLfQTwJ@O(`QqZXPKcbp{0jui#1;cmtOD-4Z*;d70>c{^h z_}`2Fr||zA{&4}^ONa44w5ovw_<4jsd-?Mef1cyd3;a3EpP``sk)VEWP=7e6ADUm^ zKfnHw`Sp9}z8Ays_?OleAch*Xu-KZG?IKbs$f5@?={Zz_xO3M zzJHhKOQX>IRrl$zP&U8s9_0fPK+~b&Sx#8xeDY%rukRWD*hRyeZpTIG$Ir0?%Wl&7 z7JpVtKpjt0M$+*~qxc1|`#kAC#!nDI7@s!k8;^#c8wM-<`r+yJvdGcuUR=G;f$sy< zkuQJLdqTfd=r1{L#UDTZbxmur)3xxLP*|5a1*d7%*VTnHC1$?lf*DicqB-_8Da%+$ z#U$M`oG%G)+|9kh^S1J%&K}u0+1ykvSLSxcW*)lZtRUZk6S;18*G3mEtHpc^?_M>1 zS>Ap5KENmnA@bp6)7M-#v_HsWVF_-A$6}BChVZB^^l-(#D!i-S@!$@OYR4#lJ_I;9 z$loeUU7An2CaB+mO=dfBm!*yG)~cb}py&(E2PueIcbXqLb5wRTyU5M-fs9w-Zu&V@ zLGB0cF6^WHo99%5rm8n6%Ppu3au@Glk6e^j@8)%5i)`6W>e1b!5Ne=z+UKyFBj~+k zJUVFyJ;0JCSA9Exoqsr6fB}@7vsz{3O)YKA4IO>qZ!weNo5!L&rSlV*niP8Cvhdn; z$2&YpKljjWiw}Mc-W*GWAN8Dw!LHe^DZ+iPSPG;UeCKBCf}$`NCA zWmqx^ZC{F?2Ux3ZN_RR((DPJhcVW`)Bcx8@=l+i}NRk4n|VHW9&Bqd{Ad_3o`^a(2?0yqA`OOL!wH3y-NTEPs!9gL5_uP*>!iCM<2!HTa zWR%gru2JGbsO&XGwP$a_wzb@~GC1Ac?ar&x zB`V<985v%*%cV|Z@{205?D@UekJR~Zkbj0-!DK0(mz&mSgjFmJ-dVZG8sQ%k#(7`| z*FbLMZ@4k7G4~r(>?aqaG(s^_x;F2JY^mJgO+OpDV`ymm1J3npx%1g&TPjRMs2^T8 zyEA)7L3pT`S28bymfI`Sxrs%phj4d$L7Q3IXk4y$HM{D8B-U#FpcZvO0F+0Le!{Iz z`9Hk}R%ql0xC+>@=NhtMp|m`Nk>{_3Zf~#3cgBVm)eim{^=p%>)seTDd3 z5uo~)EDkjRB_)E~ZR4wQQ^#YKTOikfgMsajz|x3OL!mikHaW&JF=4}wWKlkeUyb?VG74!ExFMy@FLdiEo0-MJ9qNw%W-b#=k6xo&iudmrU+ zfqS0X@SZ~3wYrY&fV(<jpqnuro3Fh4*+uh|@t10U^(_F`i7`sRE0^PgAeTle3x3HQssK#PW?qIaw ztm^ULw@>(PA@lh)wcX|OYU;{)VeZbFs`=oF?w)$o0p=vyVOSpY9A}Q7an5Aj4bUU) z=g466ABjVcTgp)$?yN}juHiZ0{+I50UnCxCA^o*N{|V9;buy(DI0`viCO2zJi>kbb}5T7Omven@cFKEd84 zxULPOeoKAF{w#b--Ff>Dz$uS@8`Sc()6rKte*7ug_?|ebfLlwc zJ6*r)2sD+Jntc2>##n4GNNR_ZITxGiQus>|_~8hAC;}giEHB0X6yW@3k(46g+AQ!G zA3@Kxp{4k+XC$Ak!pF67;Iklt{;CLkWdt5|m+VH+yKgiVhz!QHdwAv}`22;?>-sp? z-hrNLCrhR4ABFyq6cE>rf&Tso`rSf*uM`Q_c7dMlU@87T75e=`@7grb|0aU|1Z^)t zV@(`5_0T6p&b4(QNJP-{uG&)a)JNc0j}^XzH^Sv#C+ZX#W{q%3078ZLO{4XxOx2AK;Nl;WyZK&zK`tkz>~!$sh;<~1!y z&2MmvP}B#z*qWNN>)i#hIQKfXP>G61W`nQ04^|GnmG$MrSE_-A0o+xy1r|6_inqlU zZl^7H@M|GF?)v$CZPr%@G!303WU)-k7+ufM_fl-wf?bmFcE?udPi zSz4sji+ULY`HkhsHz2d6pM-6{Al^XAp5%>>HyjE}fBj{fd`~>i}`aF?> zz!2wma*g*C!Tof-PjFxU35K3!M){m)aI5EOhL25eDuO;R^c>?T|D}dLVepj(xAC?| z@cCmyf4brGMMFhsSd@UI)3Wm)O_Bl!Q+!?pa|J5g;uo=ibt_(dUN^ss@btFjhl$kkH&k7 zj6di-5&x>634;6ao@eN7dM`1!P46`ke3lt{EB_}vdX;CphpYU0M=0h0pppM@1pON( z-g69nxs0EfUR!=n5}f=KhJJ>@`EH?dE;jhN2H#|GtDnyau6ovV-RI%T|9-=VYwi_) z#G_X}KZ(E(7(R7|&r2S?mh(3ZJ?F(V-g0?mQu&#eG$(qvzQ@fByQSo}d9rO|olJ^bA9r!m6Q*4X9KU-o9xZ=bKF<i#e+rSk6x2azy3x6J%wSPifF$87d>4=7eAid#*GF~0nC zdm=jO&q(-tr2w$~<2#HWKgYGD;t#OGisllJxgS5@igB)dVFQD%i;J4uuAg?nldsLIc+?Oim~vp2W2 zwsXV*GQi}{H3w-KHrI=(>)x?lL9c6)gM4<+uxad7ee`$lfkE$>E;qwH^--K=AdHf+ z#hCQQEDX*-?LJZ#-~4s(-#EMbNO|_G?jse5Dc+y7$y%{o&Mh zo;C^oJQMR9GjhL7;b_f6-49pbbjHT+{<4AB%O~x?QHlfmD<%y*@$;a0sImUF^vtI_ z|5Xlf(7AGMi45m7FLYW8#W=Xc%{->@O$t-{ms%C|j@gr+J2toD?90b?z6UdIp%E66XX%3ieba%$*QXsEAq6>{qARITP8 z=Kp1`4aArzx)SVRIh>v2m_uKe68=z-uLs)syqi`-e9+gaLG#kFxjkp6#&#Z5p$hq= zb9ioQZ|627Z%ESZaz0<%v$wNm)6jR2NgGG*a?MM)PEY3X=zpWm&_RF?W5%f+CyR1z zfKFhA#Y|>Rd#5djw+CJCL7{hXl8O^uj5ZnD#8WMbjO;Px8WA7B*st0<@osKzd?YY`*tj2Oep2Mj;7?4;|7pb8M0GLk=14|uYamB_grIs z>VGiHPZNFT-XG-F$^r%mhjkshLdh}h7+~FK=l8l>5-;Z)xLzQ^$>^PCEr;$2J`XW& zPeI`OTk%s|o{;HXIX)5OeiGy_V!@KOqI+jmX68>ipXX^Ui0>sApPRRq2(Pl6-r!!oIu&cN(wEGu9Sj=vois;%=Go|rKZA(H#RJ8~4m3xrP8)(&r zsr$ho=&f{XW5SjS1Q!Rrm>tF>H^l!Lbh4{*JewHK85foHUaU6Y@}7Xpc~DR4hX(&X zoYNjWnA*lK-Lilq+%J8@Fx_B6`#~4V=<|2Te@(RfNRkr*_4n<_pGPr6642fm`G1kx z*6Pc@+LwRVamatu?~p%@j)5Y)P5Cts`i%T9q_%NnJWT(qeED~K^5eYX@R;IoCCEgq zWp?Wv0<0RSP3JP>QIA;)<9D;^OXa>hKlflm{o%oPO23l5zM=Q#vee8MZ$G!8_hKvz z!%Tnb@u76?4IFg*Bb>1tR9wp?2T!MlzTeY-%bs-Zw;;al36!_-hq2ZLeOwNVgWM0H zj)_>VrHen@@wv$uY0BZ7-QR%Xy$_KMHRKL(#Q>xmY>5BU!>>LSG!Nob?RmYY#s=d- z*A=ON-UK zyK- zLbJR?>X$5R{aW+zi<2)|L)YnwQ>SiyW%5;D6D>E8Rj?m3DQqF!C{C#It;R2sP4Xkt z>t@cXuY8Mga!uow7sK=@PX2%!m@fJ5!Y_p8y+AY3lw>PS!#`>oey2&!`6k(+rr|%B z9cq%4)Gcj7VfJi$E9qakJu-)5FSjUoX<{qUrr~#Mw%3ghlg6l7b;rX5n;ORz)rR5c zCvTla3U{2spS9OC4F4$Kz-)bL_<1=$$4}n6ofVs|ID6U-Uh5_ItTl0`)-2m~ZW`Y4 zaalf+(`n_>?Y?8+O@o#<8`!&A%TEo+SC>j3F_NmuB z{p(_CpT^lg*il4IG$(h|%_fT_U(GSzaX;2Cx3YzNA)mbUyF|BR50fRANYZG>q_}t` zvWa`GNQPvTmzK9p8tRsEaL?PLDV&=*%^k8Gdr~SJlh4=9CafV$3E2_GBInRNw>>$c zJ052;$#z#v`Fd{h)(Ik%qqO5Rl4w-dp|a=0mN(Z(O-K?<4^t|OXv1)1rgVm?{3=ii zyxC2cpSivBRp6RHe~YT`-nZGF*VSwo{=HZGJr=C}_8+D8BMwvU=yE&|yjPZ5(4;T= z-_s|Rj5d9<|97U(y!x+U_&-uz&!R4xZZe4Cx%Cl~B=1z0h)8}TUmogcQ{<$T2~x1 z(?l<=sJ8)g1RIk-sQjR5xNGJVBjbgD+y&{a!F%#)x4b%4`d5C}+Bf>g<%iO5j90!R zyK2v?;b&dN#dyOdk}=Hi>*jVn>hJ24O@bPw+W4or=b6E4oW@3OV*GdI2aIG~Y?2q} zH@bnu9+ViD7#X2FpF6i{_}9a~u-W$_pDL()%k0Be9&&qb=rDi8Qnu}$j zuSiKTt2Gb5*EIZ>y5V2bE(JIAZ0_@Jr^xp=?y={I8%OL(y1a2j7cu3>5pP^=%5QbN zksecfedTZCZ9GMF(VOErbsC0WbK`|4Wn9M=n`|m68CS{uI9py1H{ARJSAtC1CO;~- zgHBmC`Oz0AKNhLEhvw-XMAgIZH4N`~V^5Bgyf2wICrexXlt|urZv4<2)fc`uFZWvI zJN10`pmOq~v_LdK+t-IDKl;^o>P`qpb9-FVz-Lz`KRV7?hW>QPQ$urQbCvHbyX1ph zy>#sSq~#V>Z+R}fqk#hJ($AMY-k8AlO?*R#^HNHp8-K~yhW=wZgK}9uEqj~%l3Pb7KUy42k3=+iYd;&Ud}T*B4twtZzD)K9e{L>{ckUe8 zI~0oZHSXo1q5iJaS{{1r3T3j1u53EAx~)1|m&hfeZK>o?CY{@SM6|I#IWIK0E}0!G zFxtAZwk_0LR~72(s={4}yD+r6c0nkUglwX|KbhG)m`e}zOB6AyJUN}~VR5HGv--|~ ztu^(sW~{EhEi~Af5&?_V{aqMhwKcUNPq461urMH4v#_Ef#7q2A$=pC@b2OXEY)B_l z+32h_^9Y$8B7AA6c2!7T7B$enO1{5V%fe89F0V3|}0}rn@;f zazJcYs((YOmsb@AZJvl7tsf<@E8U&S<_cmk2O|)}{7_fV%GBoS?o2Ax$8)WGqrELw zUt1IEN@ZiIWT#oKUG6O>*V<)rT*8x`Nl#x_@9DczZkc!`g09s3P-9(vwK+)Xu2jOT z<5`H*vk4|hZBVfCk6>`vC9K2w>4CUvONh?=&XO| za%Fb5uHJ0OrZ>1#^Me8N{SeuVsAV%I;bJfe7mFOcrJ+<`BHdfv)s;!{QPH7(ZZR54 z=7ut(reSa`7%|V<9phjL%CEov?|2|hY7apJkeT; z{7}E>I7zcCW(Mbl`m?fnJs(Hy&q@I@N%dC|OVpVB9JG1D5s$fIQeRh34(0>MLGs6~ z;c`*dkbJZD`Q|9P!ec@>e3f!6E8W5LmPR?8R4{U^yRr!h6mK1-f!;1L^B6O9quxNP*5CMGYh3Uf$u&yYz;3{k8{_UpM7G8 zilslhI<>*Ro3ucYH(On8B5x{C)>cRJA%3LXUq(d}+~(?(vH8)p4)mszn+qgFZYi*B=fs$GC9q;Xd?=osNMmPumtZL7?4Joqz3k^X1U3t&b20kSdu!C zC8-i6jI&L`IGgx5?AU?|X|u(V!oQ%xY)GnCyi(Jz zSQY9{Z%BEKW7{e+Ez>XUq&$Y6PV{C&?0#LET#}lGs-$(mc-ak=DNy7WF${%_jQR+ zc7GJRi)3}Jx0{)yx0AB$HFFDXGe9XkV;8E$A9V|+<)l-UsEN#|FpDp-vh>p|6OX+y3i(S@Ib8_$};>3E}L*#PmeA>PfwC}U?yobxHV$_tciTeQHhZ1GBE+t%FJOuw|6xY~{s zf3!9+nCMJ10Fl-~@=*pv-pVc;y)lv4f@7kQ8mR(<8q=?lBUyOxv6yHm^P6(3Q|kk# zhN&y0j-j~HcxQ8=lqcCaz_buu{eJF9&d~YfFE4FRxHhh_f9*hZlJQtJB-Mmz_c&A5 z4rKaFuQX}{TWZ@{snr`z`<$hwk2bJSRY*r ze<7L6`xA+PzqdQTkPNJl9b6v>$fffO#2ZWYWeW|GdH%*kF~Ik!3k-eP?%0O;d0R3U zV?3Oq$t|$SQIQUQfpKuCvp1dXk&~pr-rm+O$Ena(x3kTTcy`j(omAUq3(-#7^un@( z^srKefr*4mxhsJFjuJ$DV5Tpc5}m2ue98#v>#g53nCS0npyFp5pdiequz^lXft_5V zVA$DAcgUOvUQr=&oJ#afX~=UX;en$`pp9>J zYHccG`qIJZFwj0xwY6qaYYP%@BCq$RVC2{pM(Q`D?E~vl{RJyBN|Xr*uX1Y)6eLNg z7uHV~nQ`S#s}0a0$dF})WyP+SBoSuU3sWLd(*2Xh+_dEdk&+H?0K8K!cWp>!WBduo zd%I)xZFLPB8ULBaDxXh*5URhzRYbZmlNcOvl|JoUP<4Cl!gPf$P%WB+`X|6)+lN8^anMq>^my9Kb z=)Tp{JIEJv-ugtrg%_fsi)fp)x1J<^=udmuGoF-nh zaSCRRZoAizh;;~Me@=SP9C!>&p$!cVnr9AM8tdGam>TfMjDeN_ePM{#hS;dqc`0s9 zWDG^*8<0HVpHHppDtU{8iA8>@6@0|#(zI@4#ZRM4_?aw46RTFhGM$#gS}YNm0P z=?L~Elj^ROM+iNy+huE&P`@sAHffK^3p;AaM?-icQ7{?-J1?k&_*9Tv$>U> zlA6Wt5Lw!k?q9c>-VS5nLgR=u*`h1yl79AJE@3lfpr5{ah7oF_*Y&?RQ6-mCEo*Di z8D;~BSWJVxiR4IIx5;Ivu-8&r*48qDIXl&#?Ma(sE^GT?t5aDyuHIpxm7@Oi%Ra*m zx6dZT3>Unbkjj;Gh?N=gOgFhO(%wzQX*MS!YF%^OY5zmZ{Ge>8g@?ttx)!QyspFyXu25t3 zs_IZW(Vxg)*9+CTD}13ozPTN0CbZkTu0?l+DMy*6PV|z>z=E9;4z+qy!!n&?;G4u6>3}6+=|o8bX16VQW@6F((2U*{9Q?|wK8)R>PohFo;t3T4KRh(&s-G6 zh868{sLq%}tKv;fY_ylPQj}u9yOJ|aYMTv+`qyyGWd&widsDPva<0e}qwN^V`~-_q zgWHR)RJQbRHf@&jX=l>qG_nI~H-9ds5o2w8MsYUEma`#q)(o1f2DE%5C&TS5NHE0f z>;z(V^IX-n(RRNh)IY%Gi|P%Mr_|Kx7$fdQRiWxtZH-Ze-FV4lhSJQea1}>RZz^*R zWR~_YmfJXB14wKt={1JZa+!51msW8?`(7K9Sm%4zs`*QuK)hBUUME<%2tg{z#iN)E zD7<-LPG57~BR`uc^9{yS&728SU}gq4!4*RB%QUsK%e0KM%Pfzx%Z#qG%dD=m%gnE{ z%bdQkFZC{j8asYJe*Av?`2G0t`|;!V;}^Y)U-UNqs)dXE^o!rcFMb!l_+9+sckzqg z#c%XBexoP;9{L@P_F^dYxtZl`z((hp0>u?lnNu>>5lZU8RA?uqv5rvIa*5QN6xvxY zVRpu7WKveA%vrnBCahgL7NJ48l$-1g4W@gkzsz6%q%=d*LX+31csj2xsO_aM=^0i? zgG862dLh%doSRn66^m43cmF^p)i@%=#BHk-}o^-Co42+HB?HRZXi?y|n3FHhMQ}TI=2Zz%^;ce<@cR2Gh_IxY@zm zFS#gU#%Q_CW)`E@-fIx20UM${p%W%U7Ah!axVu_byNlK`#~;e9O_EHhUpogjG5yVO zU~OW1Aur0P~Q2rozwo`|tGw%oRhILG9kfCYxO+ z$@O)z(S=r<=|_Ljv~m*O!=SI7s+g_zr)&ynD42InFpp%WJY2dt$hqc$E}0DOGDCr& zp@wnb>Qqv$-4~V?DL_?=Lw##(Xg||pMwV@j%^3vxhZI?9`_@`fOx z&Y^U#bW%+mU2WB7TA1Ej7F%zsDaHLQzGN-hFaa4!y>=Rhg(=52ejAv5RR+|U+smRJwp4kex0yoJeR zIlE|ldQzKWgPd7h(~Q|0I-I$0s5h6EFh78faVlfxwasps(#hC;h;P$uHeGezBTa{Z zUZ`{dxDCWy(1?2d0kJbBNk7ZoITAHpFe$~%B@ik-2;=b@YcD4H_OeP6*WME{aMyqR_j1sTl+n1 zQMM@O9bH*2+H}i6*^ACIZeTz(hJA#dOC%y1c2Ei*ZVEBXe1HDf8*p0SMBV9-{$>WEFY$_SNh2C~(f z0+~>g$R&HKyZX}oh0374AW3oz8og4I&xPhx_4=Kyt5e;}=_Yd|^2(jlWGy2l1si2Y z8vEB5kHQ`++eWSahAEw2F-y@`2{Q>^^22RH*fGaY|e{7Jj@cvq_Da9k9Hwn zszwA9l;oP)#^CKcb|o4YCawBwWjq-&Ef+UEnbGAyHxsCG2u0GDmcvbx#H2!^KNt0G z3Zi=wO^Ds9xMRa~BU1rGb-!s!BoZd;lIyt1#)~q!fe99-&)I=QZ{_jY*=bLd;rbN}F?Wi2j0Uo{TkTX3A;s{n&}2o;K7) zge&d$THnyR;^b43!K?I6Y0k7jC&Ra!{Vhm~cT!5T??m2UhVq@i`cIGyJYrH3L}wQ4 z)|qD6EaQM^H=V4Hfl;$G#_<)m6_l$V78;i8Lx*81G(Om+h42 zy3__QolF;{qFpI7KUScOna)+LvAVrF2C_@mRL2eYOs?b&)s#m$RHB(rINdD_4|C4NA!3FynlTUQ0=K`Mh2A(j422s0Qq#GAtKLhRgw7h)$L z>^jWIu+EZTY)gW%*$^)_FT}>?h1l4Zc-bmjmwT0&JgIb+CC=h$++EO~Q0|D&t6iA4 ziVIsJFR4t)7{EAgh&*V9b7ppg5y#*l6A?18CzXIqvN3HFeSy;(A-IKr>Q^E^X%!aB)iKQSN^0+{L zld_bLU6%3@F|1>+$YJJcg9YCkT5muCb`Xh2pcJORH=s$0zTzI*OOIab&G+VUCVhsBjJH(kz z#bx^&w(gPI%UZmyU~^(n?g;j8tM>w&un7kI`6+=AF#-_+DtZKnEVdOS&$*xQ><7=z4_=M^&HUZ9XhCa93Mr9dHu z0)@M{P_Py6MtGMFBK7W(cj>@TppZxl6k;e)$X4XiK*3hz`at2n6ewh0f(o-QL510u zpu%p2YN8;^q$M4>ouJ0sP(Wk16wugB1vGYBOLp4UlAX2{)OgzpXzaEE8oRB4Mz$pv zL<)9Gu8I`wRiT0n6(}Uu0)-evVK3qN*EyxfYoF|rt~=#FIEFKiU<4=q=zG(>cNgLc z`U+mi%0?#e*Gb>9t-ij_loR=ioGBm1BIVOqq+A+{q|;a=eV)cyq(n4u^R#*T!`%2G zPlp-{jjDG`wSO;&d#H_;FxACMjAXp0+@hUgiHeDOudcxpBzX2Py_R-3*1!qJ#DAg8 z+ygW?D4m`51eHRPX?J>1X>;GFd1%UCB2w=rOeWym0~GeMg|yv_b+XBHx}9NybTk-3 zFPC(1{Y{RvyFpMEIf{WrIb>!rZ~;+f@8wx3u6-0-R~)2Dmo7zt(d%{u)|QS4U8h2e zbXy87(sgk+tIK0I&TsoM!9`*VEJ{>?MTv(?pB)?7>khke!7^)a>`7;O2M4%)&YKgU zOKN@WD7Pwhbkl2Hx*)WorL8@>Iy!&ByvoWL%VeMwgB66Xp1;7ei6Lr)zD(BUuDiHN2b$YGgQGpN?eGAk9V>OQ}F$|V(05JEHHMb1f9>Q{KlILz@ z&%E22s43{c2WDfqkm}ijPY`CA7)bW4;G@PVu3B+@im`YtGb-Gu!tDj@T;ReQOD$AH z$y5zjEeCrx^H?A^Or?6c^)9p73o#eG_@;2d^+Q?S;&qPE!X-PBP6-eINM3M`z zqg<@pR9RK&#)bt0@^o9>DjO~L`*EuT*WkLGlF=$Rpqin3{!t|V-b|P3<`hq1aEX!} zB(sd#Md06uSU$NqXS0xuyp(0!&r@C_($v-GJ@QTYllvlDPhQ;^ zTUoy{R4dI{QYs<|@!FCVwaxy#L^ltch3N-z;M{m2aDS}P zvV)^&CD%HWBeb&howZ^u)XEKFZ84bvlwC|^TN0^3UIQ^`?j`QG4=^vCx1dT|C}u9x z{nEg<@-!>s(1PV$!SYfW(+9$rRuzOZMlT3wxiEa;qQdZniweT$R~2rb<-%|?%Fl0~ z-b_I_-I;>;Sth)-t+l?kad~5XU1+e)?}o{}$~hiV=vqt0&?%%6rsHUqM>~S#v0pBN zc`f$Qj-sz0aU7i?24cJ!OPX9MA8ysLJ zw|^8N!vzTlNM#nAs(h3XJ;Ecg8xzM=iuJSvb=lxQrvS{miIuPje8<)2-~ON zvn)Tx;(54tv3xo1ZY;}7jnYsK@;YdF`Qi11?~c0%oCWLPG~UB=I-CJF5dI7=KQ$vJpfQ_&T zHiNuo@fLNFW={pZ-vF-Bsdw?fV{g-zL|9u?v+r4z8G#{zvP9e^1kmk z@Slo%ExPl?M);f9u4DPbvJL!2Pz(_$fpKs*$oFtAfD7RwxEQv8y!~?%$alZwyA5YT z2mFC`t|IW@9unel925O-W>R~yofCgxU6JRAYK{Kp^7HEYNVKuZtJH+86 zkniBgyD(3IQ{gm_?<$@FAA(-!gMJu*4mcAM&tDoCWLPT(}S}g7e^f zxBw32_#Fn1b3AY0_-=*wpoit@Fau(6Ajo%=YH@2|4n$!#EQ95cg(0{aUMBAE!jIuw z@De-)Ps8)@9DE(V2S0(I!nff&@O}6J{1AQw&%m?r0=x)cg|ERk;G6IY{0x2$zkoql z4;jcp4u)U@TnxX2SK(LiYxoWP7G8tj!SCU9*a7mY;&a)b65PXK7R-h@Fc*%17#s-| zAm8$-0r7 z{atV<%NOBZ z3|rt5I1Jn2FblS_{5hD7e-6xrBOnIzKwfWN0hLe%^Fh9Qxeyk?VpsxG*vF-~M}d3? zt`6#9Ijn#NXoM4BB{V@Ztb!J3g%e>lv_U(>;UqX2*1#!nDx4-R+dCci4CsI}ApxC` zgf2+ITDTgzLEc}VhO^*iIezd_kT+_67S>_!h24pJ66^*?VLuuk#r_yP4o^TYwm~RI zGa2NKnesB?D+wEqTMd^G_f3Rd4R^ye@G)$+!pGqgAm1b^1Np>;yo&K&xDV=}9&U#_ zU@wqwOYH;GU|-k|DxeaoU_LB>g|G+~!xH#3+zs+Qo{zz;a4*}w5AKKCN%I=gwhi|* z!j8s029AZ};CNUD)ldU{&<_JJ2{$cF}KgcD#TG(j`0f)=;}zD}IqfN#RL;3fDrd!4?0`SO8}KH)1%HG; z!JpwT@HYGv{sw=Cci>6*0(=p^1Yd@)z*F!vTn5j;v+x`|4==!r@KyL4e2M-4GJFM| zf~VmbcosempMcxo8n_m&gAc>?a0A>A+u%~T42I!y@pBx8;W3WG?Kr5BDGNPxu%78~y|D!v_%JSlozn6Wk0Rfm`6Ca4>vc@u>%eg)sK8s)KML7;~Oytc8{RNSTrLWh?H5Aa#M%Ju$+iO+ON( zeV2BAE>yx1ApI}tqgBA+AbkPpw@JT1`T^2+dx*F`0}sN(AbqXFa1V!B@F?4P45U7n zdi_$6ao2l=+?)N@kSq>Q<;C-t6`J1KLf4B`%>yB->_%Q=4ntbn6H&U-okm%`Do z5*k73g)86@kh)OnMyVI2o|Jm=bJ%YOsnhR(3qabiJ8|!Vi_l2Bjbr+7Qdi#%Tdd(? z+{@u=Y**o4jC&Dm1*vBz;a-RP2jVyt|H;q|YhXJRv#nEbuY~jA6qesadlLR4{B5|m zu>4`-xE9{P-;ON~VZvAA-i-S=?h_z&)Il%!{ z4wtbk^}5vKcj8`)dpGV4xSt29yQMC_0_{~W%<`vLmU{gjT&d4*#Q!KrJ^ld8SE9Qb zE@xTle5vE5&c6^wOT62TSlTg`?nTm=DLoF(Bj01+W+zpb<`hmCyt$U>Q_H z4b(y%)WdQ(9-3hlw1A9f7r{c9z_ydn30-hCq+l&P#C}ahBmK3#K>B5S!=*5eaB1Ue zahF3q)IqR)pTu$+&Vn8|k@#dhSBifXoC+sEE3`lxtcC_?gcD&6$oS!8XofhP1ntlS zD_|w;Nm_2k{WtszA}|l;z+yNOj(|n50OrFIh`~ab3zbj>GA63Py^!=y!`%b+f&*Z8 z*dO+UsjwgH4g0{pFdj~WGB^_wa5{9r8So%+mf#k_ZZH|jVG7(x-b}>phGJL>$H4J$ z92^VF;Al7sYM>gvLYzN>pTf^U`X@huU%=16^=JNw|1FSy&2QlM@FqyV=MDHZNIyvW zL$AOO;m7cOkp9)5;Fs_!{0g1|>HoX~?}GG!T)*gV_@9RN;LGq`_#S)*z75}kJ;>*m zabJRO!n5!JgxIJ5;QR~z4e!I3;5m36z7F4juY&X!UxXLn8Tcps0}h5mU?$9iJIUK` z5pN2AitWC|@*m;zEDzvrg*OS`hAaIo*Y~=S@Di4PPT0@jR+cBjtN7o7?*YM~QV8R} z5+e9B&;#S41I~nX2u~&cBACyzj4%I*{vYr<{0bhxE@QlN@b8ZQ4ct9&U%~A~e>d#F zUyi#0w-0R@;rGBGOn`ggdbkEY4A;R8a4p;ib?{f#{XKjKI*9A@xR1f3@JskAJON*X z$Kgfz5ki@H2-o26 z!}b*Jw_#6g<3Ps!n_0ezFd6foi|yAee-!r++=F2ze1hfEWPS8c!!z(KJO|Ii3-BU* z6}|>C|N0I1CfvfhKP8TD;g`AEZ^L)sW%w?9555mSfFHt-;K%S2_$j;s!8zD-Snek+ zWiS!O!vsjPo%Mtj!#Fq}&VzH|0=Nh+h6^DA9WV&Jkb?~{1X;*HKdggp=z+5!4M|AA zna~L-SPNZn04#%}U~iZVN5e6&4@`q8Pz}>zcQ_DgpcZDpv9K?!fqBphN5YA4GMof; zP!CZ!2o8qjumT$35SR&vLL=-4d%$sUJnRn@un6Wu8??g$SO{@A0an6ca5&6@CTNCL zFdOE;TxfyCP!5$a0ZO3^#={X1gNZN|Cc$p71eU^{uotX`DmWcZgEL?@$8{NGp&CAk z?Gtbtd<<@fTj37)ILtw_0A8TX{TZgi7WVtl ze-6L=HW9WMw-N^Nzl{CsFo1su_fu%^hF`+(;dR&nufnh3*YF$oExZQ5gPE+`1@E%{ z$BFkgI1l94i|vzeJ>j2&yYOGmI@{qgmhWKsP8c~Bxfk0NXs&``bf04R9=IQFWcg8e z0RNSQUk#VDd>_l71{r&t#??Zy$1JMn2tXRbKw{`4i18``r)mFol9If z+!|O9%b^x#V^87+`>p3;I~dy`;Mz`UBOimUY=0X_dnj$-8eIOHcF(nW($-14b_wwe z!}YKfTR*O}XOF<=K-xEH*WMz&KZ0w+T>ItPEorZ=2Wh{g-I6v<+OgZA9`1k(K-$Gl z-2Z9YAZ>!w^U?-L8!qj)wAp7u4@i3<=TJ4sIVb0uoM&>5$@%5lijnoNJ5S~Olyg(g zOF1XMNE~;AoNsb2UJY{o$j^;=CgFb^o&Y%yenI#_Fax$j6b9kTunsoC4R95C@CUY$ z!T(!$4gL-f6UV6_;)i|5L}#pCygElh!Yg#+&iq#Xc3YdO4oB)S7}XFwDVf`?e|Gw>ih48Mb)z;|IY;ZNdD#$5tS zVOL|=6VZ$|jy(zc3aEr-Pz~DgY!%u?AYU-Tn#B$3lFj1 z7ow55t*LMkY=MixjeWP_-wJ!fr7({5{@)mQ^fB{4T*Q zg56*;1joTQbIyMhJ^~X7>xN>ullAU`rTCA5y%bpTf`K z&+rrY1^f(NhaK>L)A;yK^5t9P&zra@_We?EIc8VkKMecfFbhs%xd{84_(zV5+X(wP z_MgG6_+Q2SCcFhQE}qSLGUk1hu=#KSw)fzl@DF$$F2jB)Y=g_;ei(+!NY60*3XP13 zZ^6GF|A(Q0SP6}A1vJCGtosJ*y#g|Z-hnG)=Rv~$SI5Cb`9B^D zU&}V%V8yY<#1*7%SL5P~h@+itZ$Nt!alOy-$T6~vcSnwKgX3FP`9FSKdohWWaqZ=} zY0`TUWbvYpBI2}%dGhhMb;RVWrjA^&P_1NOr!jze-SYC~P}L|*2?_WH%ZI{Nv}eJ6 z#IccO8S8E$d@;64aO2$n-D6y$4$axtuXQQ;*p8*@&3xCHnvi?N~w#jwAcl?XiIGp!lmPEkdqXL z=av^2jgvoR@~2e(>^^r~I1;|-m{LE5#YJM@L;g(mVkkDs@iw|L=eop{xx|#YEtR>% zl)1!|xx|#YeJS(fD?4*rLwMVJHP#7R*Cb;GA31@#&M})2GCz?;fANM|}F8@#$0J)1&d}hnQ@; zDIPA0k1tL^S3EK&9^o*~jZdE;>EUpe#3Pg95mQp$Ij^*4f}~eGvIj3Mi4==$y5|qi zompHYe~Mi}DIPyN9NxO0pUG2-$H%81%4SPSO1;0u)(Km;$hyuRvCHFeBjJk|7lrro zeS2Hq1PX;0I-ywB6WxSjmrs#!eER3hYePn(+}%x3r`zhF*ssSQsGyMsT;FX5BI z?(k0vyW>A;LVo25`L!qHSD%nye?mTj34RP^Q*AQJ_Hv%RUCPS#_RHcv&Q{`1)sk{g zPr*02NPc^+zm6^M;SyJVOI)%`CfLj=3fox1W##e6?096J7m1Cl!Y;W*=elE4HitCu z|D`47kK2x)RxgF&vMIjDRyUZOsBDU#;3+QC%ci)f%BHwXFPq|0Up6I_UpbUtJCt8N zlwUuTk02C?!9Q`Qg#1%?ihnRkUOry`U}DY3>mN+4`FO+mc*FU4i}LApbt^egluvI_ zKHj2ydW-V$7UknD3dHNzUQ>$9`S|W`60fUD@Ve>+uPZos{ewQmRf@7&{wNjg?jNwC zJ@Vc?^IpHyPAT%s?UbUu^MZZy-f4O7zIm^!3)%4gdFugruhb>9Or)$hpMAyo!&02j zKEHuNo6o-DeD)RRv(G>8DO&k>OY-rK%Uj0o@0$A z-qJYFv1hK-XjFq`o+GCwOA|e3lIMi%nHREWUdYypA-6FbamdCTvQdX@+#wrz$i^PB z(T808yV>oOTX(W`r+9AIZZ~YV8@Ah}Av38B+wF$!cEfhNVY}TTSBqPHvDMQSoArxr zx*~QzBX)bVDkeN)w->SNN9_6$yMDxOFJiYBaq-#xjM)8**!_&y{fyZCEV0`yvD+;P zJA>Qv61VFmZr@AX&X>5oFL8BnNs*0boQ-CjTekZ%&hAgC4KKCfr8d0Oh1>ltwfkFY z_qWvUuPZdAc7I*5DYg4mYL8#3bc`rfrF&R+PwPq>Dt2i>#ofoc(>!;)O<$RFZ92D~`H&P1$va z4S)FUBf7%-I$vbBc({cBi*4=YlIga`=1fjcpm*F5pFT4_eQ|ucX+Do-jhBu!O%RUM zJTDz<8jhEaEw)y#J0;6f8;L7bk+@P1i7SihQc zeS14!*x!k8k#F!&pA=RtU)A3DkR?dJRZJqr7K6!y~` z_R}2Br+FWL-D$pWKi{{%?>oTvP4|5V`o0;y?@-_84s}=faNjn|_s#Zwb9~=i-xu?J z^L*ctzOTafRr*p&}q46ahj*;{ZuWG-WUWCc-4x4a#8(><)Xt zo-h^mg1uoMmm;q5Z2o8orU?v<2hr!`63uc3)d@dXTF_;HOLIqSp z70ibPun-o(Vpsx8;V3v7j)7z0I5-}b0r?WDfm*18dRPuCpaB};1Xu}8&ze4w#F@Tm3on@)QeoDPH%MXMUn2g-E*Z^EA5Kca^U&~uc^Ue8x=FUq7gAe zD{-COHa2ENC3f4`guKS4*bJn^E~650B}c@ST@csI6yVAZ$g&JW#Fc@nxH13{S4JP= z%Fshx8Fz>~m0h8S%b!yDbAbGrE`Q48&v^NBp!}I3f1>i|Ao(*v{v0fS4v{|*`BNf) z_Le{U$e*zMDUv^v<Xfj80j6`T_Cj)8}m2@5)>1yuWlP%n}_6&mCu7 zufxXVohg^&ypU@Ycq3jhjCh4D zVvA?Q4EX5D*uoicLp?V(cBA1UyDc{kE}CegFLozKanY=Ak1Gx>p0l->9tnTSjIY@I zjhMflWrFeVY5q<%fA=zf_cnj`F@HPF-=z6l9`>A&aSpVOXPn_J&9F;myG1j+ZO-sE zI-|s_H)EXVlo}`MtrzuHhmA~S9pZ%@;)Tuh!e)A5 zQ?27krh1a8W(#Fu#=w$6;SyuUwRVnzv2zrRYsLps!R=lYpKj-l##7ZXnKU^bnG%oe z5s&N{k4%k6_KHXLjz{*1N2bLi`^F>t#UuO2BL~DI)8ml?}XD9yuf) znHi598jl&weh*FNg;?%RJ{f(s?TU(~jcjPDb|K_ePk!bW>UWJWtqf0ZfH>oHqkn#JOXp zLd8=gbE4uYcAkjylsL~g=P7lb@y=7`JQJK}qVr60p52_sP4Y10xu|5ywua+P1s9$e zqP_|<0F%E`<%K6wwRr-mLE#^6E;8fti1FoZGCuNbQdvl8IHt(d z7uG9XDeI*fUd8u^lZipzWt@K-mG_z;^Kl^ezC_+*zJYgu<=-0=<=tUv-jiitIOe{l zR^4k~kG&yfUXkp=y|*t$cM5jl@(O+L+vmKmDEKxq8$a(ciw0ls$oo%u@fSB>> z@ATS`?&7`l<~v&cXVB%UN>EoTuOZAN`CiR`*V%W3^ZLc*yn@VqO1AJz@$+NyX825+ zk3_kT#(SF^@kRNnF?GD<$$JB%e1O+{3z`?IdoNm-j|0owoyH7b$_1%W!@c*vj=jDO zFIbp?ZiZ{vebz}SU z_rt~$NCaR0HZSb+^1+7Z-!*1}ciK*d4~izu+uQ6nx5wB{l44Kc+GTp=op`*}PIP?p zX_R#Ho*#4kc){Ah+LpB~eEycVyyw$3BAnM@j{N+5!TRoXbUWqGhwMzd@!>b0O`6CfEA2UqwX-=*i z%NHb5(R%r|V`iW~os72gl_mQ<+Jf_z4^i>9z$~XDl}tb1qQz%k8fcO-qJHt;{+j56M6y2!#HHvOcvL}$lK>3jOm&Wq@fi955|Edclu|Q{DXjS65!W zbeZt{76Zxpuew08{;MvKtpBPj%n|Q|*m*zl=`73{PjAj^cedtV@EQ%4$r0sdw0egl zkW7kBQ%~eKrrQ?N&|4rxKf;h^~ z6r`_ExAV@h@BdA|(@y<&{mwi0-}O81B>Ld{2IXUxsg?|l%?29cRK5{L_y70DEmY>2 zx?RP?Em!8bi(Tm$x|ruOcBP9bbtOuj+&5XatBn#~s??2F>SUXm?M_hYCZdyLva8=D z1aeGv_1g`B9FtxB$`NRE@;s47H$|zFXN@%R$umeA-Ja;AZ0+hd6@eV%UH$e#pgF$s zEUiYjk5V^HsoPhn+fS+6ADt#&4p7D?&%wz#ysMu)JEzgfvvwL?RH-`%o#uBiA~`pA z^*dx&0vkS4sXG*%=6D>YjPG!zZkAFv8=dBOaQRQAo2%UJ5$H7e5>sw>o^rcKDz{sK zPE#Mqeajl1JU6G&%~$GV{Huvip4HRnr-$unFUT`M}x??gnJeyltvqUry&DRu2iojj|e*{(c) zr_r6P)U8qKPEqPkRqEt@3Yz14Iy%ko42=lQhm^VwbejJCnMz$kx!q2sE{RT44!V@O zlv1Zmo_Xe8lfE7z)U+RIW%|xi>eeZBa^XZ%PW#Yleq0h#{RUJj@0nFi`qmSlrvJjF zB-Kx@x@eA@Ts+WhcSsqZDshN5g3Q(I>bD7jrXRL>R}tCpvz5AYl)7`#Y4+nhbeeJF z`RFv~)oex-ClGB}&~^rEVKKnPc14?@|OB-DOJMuu^xqQg;P9 zO}%j?I!$@muGC$n)Lo5EQ@>n;PLt2qDs|T>bstvhu2<@AQ0i_(r#a7WQtED2>OP{> z-J;ZeRH^$II!!sfRjKsk=+5`xH9O?`}kz z{k=!2yH}~ZPpP{fou(XoS{dI1=rr}@XOy}J(P`S%hm^X9(P_%dBTC(8mAcOb{6ha~^#Oou)j0S*iPqQumZn_q0;? zj8gZkQuiD>O?&ygQul&V_o7nwRi*B0O5N9$x^F0T-&E?prPRHo)O}m2`;JogvQqb5 zrS5x5-S?HcA1HM{RO)`D)cshg`-xKbQ>E?|rS4}+-OrV}Unq6IRO((;>VBov{aUH} zjZ*hprS3JQ?srPv@0GgOmAV~D-5->?HRs- zH>K|HO5Hn3-MdQNdrI9ul)8T^b^lW8{;kygN2z;Xsrx{wlg_xNe-%cj=@-lUKQ-eX zdH1JA7g6fu-J_cL-r1@-zVc32jZWVG zs?kkR>ULM^_E75fRO+TGb$cmwdng3(( zntX{Wbq6VR2P<`lD0MTHI(hGW)2t|_PTu5pb{-b=2T*OPaeYjpCy zbB#{kjjqwjd(<_$WlCMOQdgtY)uPknbDdIGuhcD9>Q*Rq4N6_3Qg?zZVDi&EFB)Sal*tyb#Vl)84MF0Ry_q|}|P)U8qKPEqPkRq9St>P}bc&QR(Y)~bFT z%J|My>Jmy_r&5bjJ=lv1}=sq0qidX&1fQg@b8w@#_+RqFcCY1+$vrEWl}8&vAn zD|H#APQJaM+25Q}H>A{UQ0nBp{hIV`LKjig2%FJqt`nb)u1FEzIq3Mm%ip=m_|8M8 zx!!#~I?evdw^=m03zfQyl)8(Rx-ClGB}&~^beiM44V|W3U5ZX~J^nJKZWx{BcR4yu zIk*Cy=J;NTPP4z;(P{eQS1EN@D|OeP)9mlHO5Jrz-G`OB>(Oa`H=xs$zZ=nM=523M z>TXu*K7vkjd~Z?eKC0AxOsTt7sr$H6_X(x$HguZfaXUKAd31+T_erJhPNnWHrS4No z-Q7yvJxblZO5J@*-Tg}4rdSBsxvI{{^M)i%Q*>l)5h~bzf2Ho>JYi2V zo>S_cSL$9+>RwdpzN*xHO{x33Quhs|?wd;8x0JeC6yURLV9tJHl@sr$ZC z_XDNwhf3X#l)4`)bw5$+eyY^HqSXCNsr$K7_Y0-&mrC8MO5LxNx?d}GzftObtJJ-w z)csDW`@K^4x>C18sr!Rc_l8pUrc(EoQujxt?oUeHpOw15D0Ocub$?ar{-)IZU8#FV zse2clrhob#I?cHIALumCfBaLa`xiP*|Nh@f-G9(&_V<0IZkGc9Ct$KuGv66Tq)A_q zQdg|h$+vzr+m-JFYjpCRVU13{ajThMlW*W^bn?AijZVI=tI^5#b~QTr95+8zT>UY$+x~W zI{6;BMkn9=*68HB;2NELJ6xlaZ;ESlbCf#yHn}D~`98TuC*LsF=;XWY8l8OCU89q4 zwQF?p?RAY#zOk;+$+zJ(I{9wAMkn8v*XZQC^ctOfb6%s9@62m-@-2Fe?kJ`1Xr=BL zrS4dz?l`6Hc%^QcQdh0i)hKnfN?n~&SFhA9SL#+Mbqz{gqf&Q*Qnym6Yf|c(mAX|* zU5irJs??pR)U8(P+LXF>r7o`2out&AtkkVh>P}JWPF3noQ|eAv>dsK=KBUxjD0OEl zbqS@eQ>jZTbzMqbN~v3`)O9O$JxX0#sXI%lTc_0ZDs_EIUB6N{pwtbb)68G3SL!lK zT~?{fDRo0i-3Fy@BRb7|-6o}Ovr>1qQg@D0cP=_jzw00;TRkrS2l7?qYPB z^1KC|=6-=o&}r@$*osc`+osfAijJw)UH&dZr@3EXSgE^QnZ7HOx+|5s?MmHMO5N2; z-8D+xwMyM}O5KN*y6e$t=8JDo>TX1*xo&V1I?efUvr_jFrS2AVn*IH#GQN+Y)11Gz zDs>-M>OP^=-KNytuGHP3)O}K^yAz$J9=Z#i=D2+d9shUvyIUFGJ?J#$^j>tDa&Vtg zcfV5iX=VBzQ0hLT)IF%wJ*3nb|YieMhN#S*iQ3QujTj?)ysJ50tteDs?|n>VB-${Y0tzsZ#ffQui~Z z?&nI~FO<4pDs`_ab-z;Tey!B~MydO)Qumrt_dBKT_e$OCO5F~n?hoiR^CfSf)AV=W zRO;SBr}_O+srwT;&3o1UtknHQse2opra%5yrS5M^-QShEca*w!mAd!PX@37u>i((J z{Y$C)w^H{XrS5%nn&bO{QYR;oCcZE_&G}ZO)Dc+EOP5zZB zbrY1jiAvohrEWK+t{k0a96wp9o1)zA?n>Pr=rr~2o=V+RbejF$OR3visoMvgW}a}G zQnxQUO*!39soP(vJ3y(MuGAf<)Xh-pqDtLCO5MTeH09+GrEVrVO}%y~I?Xu#Fs1Hr z<#uN&b+eVaIZEAJrS1r&E~eDYL#O#2sf@2esjF1#s+79<=rr}q0;O)DQnyH{TddSA zQRe zl)9BlU6WGRtkkVi>ROb#R;BJlbejIlYNf7CscTp2;!52~O5MrmG`}_IH2sZJ&}pJP z6_F;NPgBNsx>9$BQuiUHu0yFiQ>jZRb)8CGQmN}w>QYMGTBWXAsq0bd(n{S~O5Hl8 zu2-q+Q|kJax&ftbP^nw5)Mb>qtWuX#>V}lM4NBccrEZf_w^^w>Td6xosXJGxI}e>^ z-r{_8n%@QJH0{ELO5H_D-Nj1X7NzbIrEaTIw@sJ)LpLBU4c$hUanN? zwkvg4q0?NSxf-3O{9U8eU5ifhyH2V5uu^xuQg?$=ccW5w6FN=)-Hc8%j{k@OQX2eL|_bO{u$Gsk=j|`=nBLr&4#9QuisP?rx>-9;NPHbeeh0`;@x- zmAX$Wbq}D^oNu2|#`mC7_mEQeuu}I3I?eC1O5Nv_y3Z?hk1BPKq0`(~|F}~3gi`mU zQuhUPn)dgLO5K;n(ygeiJt{hD#j5!1=z@7m<}Hj?Ra7plSX4DXI%{>RE839AdG=V< zlGz;isrKN9&t4r0Z<-R`e^TjqdB^S)><8E|@yk!#3ggR{{b?-MS=%AvR+mrNQglYS z%n6A8OpxD!o?~n|>v!=-S-#BLW&Ixu z*yJ0m@|*5CW*=X-{tLwIDxXrcs(ifJFMG4}WE;K=cdE6?J0(LkhfvqYEAk0l@p6r2bWKnDEqa>#v$L~4%L;nZeTZ-Pu$Gk6()Ss zi14$`-k!_fIum~Li12d=sh%i#QaiDMC?B`sv&1EhR~OZkPrItPraZbmQd2(b%985x zif!X+%a?2^tt&sX===%gOX|uis>^4gK*<^;-R5h=-b*0IOny4S+i&rn_fO~ zIe%*=o>M;lOf<(>%~{gH8#4{nUK(x-7rjj)NY;o%ET7nly>=&i-NY!-%Ki58yI%gt zo>Y^9l{O&l}aDxX$cKBby7K#tRyR`-VJOdd7M zaatkAsa}rLayd>mkCqj!8S6MnnU}Une(m;{Zdd zghg4`2=TGbyxxIiqBk@zIndXa>L)OC;CX6;eGNYcq+ylu6mBe`FUU zp})vyDR=r6kMV>q^n>1_U&l(lB=&2p-PD8lrA!;WWC%Yg2lBfg#4hgxmY+FK zai4-P`|Hy0&gmD7J)b|pF6JjO_*IFN5n|9d>L-KXYymH}ya?5}u?mbExE$w_=yzOy^pmG8e<`)GZL z;!%1Q@_ksB$7WUgXEMiQG<$Rm`w?T<=Z|4OZVY=p_C3g38$C$Ac}pN9h^A3yk}4Bu1K49 znfS}e7qM5^6VaWI`&;`mYjEf9;nx1DwVSq;c;;gtEuF`YVQ(D6e&QJRGsduYk74g0 z!+!P{_KU`_Up0pP7VMI5t+w7VZ9DlO&#j65&m-&)S^G7%J~Hh*dU>8^w0x8297eOt zedVLs<$mAM>~bHbq~}6g@NM-JDx<0u`$N|L25FJsRP3Y0bGX&tW&=$dkN&7J^m09X zw0J@Too98>9?wgLlD(-!|IlD%M^i&}TSG@(OLbF|GgggeoL^wR=PuPK*9r$_@*`82es!uG*o>X#OM^|cXD&r;I%Sme?x(=JS zvToNvqPJH(CVmNYsTV){BPmZMb0Jym8X9y-=wr2kq^y|k&!#fDQ2pxF9fL!;j#MTy zkP$oan3c$hD&i1RCY8&iQyWsgJ=^bldp&PwHkHUEdpc5^I!usTHVZ^kB^fJe5r2+O zU(KqHY%15WaUjzr{@!d)dabdV9l|2};6gk5tGZIj5E<5+>JQb#mrLIDCI>gms*>QE z#+Ht3|6nHFpId999_sW~mQD8d`&-ZEy(GfyU!tn3BXGdHgXd*lM>c(S$}>n7dB#vz zRk~mW*@Q&q_Ar@AC31E(!lV#blPEo}jVo&s-kr*2LmeH-+~&blM`wo|ANyNmU1>g~ zkN58nyx%F-PBjqPJ76Cg!~O$nmv{~e=ufBVkl#rAxz;{1{x&i2lm6*UaOug8VZYGY z#gT2ep3$w=F1Eu0@!UCvUg}x-jnvEYm+})Q7{5HXC%=(;d2UU9BlYqenEXV4IJo_i z=b+^0^sXJ1=NFuvD$&=w`|>3?Xx~E?__=r{dW)eWtX;M{2i$h$z9{*Lem`(_xvxcj zqL(_~+2y*c{6^|8978Yj;-l$hUQ>P}<9}uh{mWzM{~XXuT<*C4E1*9DyG#Fg5%Cje z1~~hCYah8^%>jKZpzjRWgYj${!~ThYeO@4*d#&9aFPHuw2JCX)Is4lq>@NMqwjVb# zo>|r|t5pQH8xQD%$2}d;2lw~JfIgU>M@HCPdY%o~W!o%m}+n&z68an4WtA@dwlMgMdDmKRW{YV0t?32|F_X&$srG`Tt-*KQ(Y% zz8ugm2-v?9&`MdoRd!$~@f;PfzZkF|9k9O=u*;a; z?7{OT9k3r4&<_XfGB@Gkf5_S;pZ5>gp9$!X57;Yh!ISh<1?+7B zdoZ1+1?<87x;tQB7KrDU0edi>eRe~{PqrJ(=feZ`O2XWJoo?+T%g;pteXxAq7tovX zW0$`e&{r{P^KsdEgiiQ<6)r#R@$#4u>AVX&$K!I?Q2trdS z5RMJB#V9CQ3pnFYjHhMXWhJuiI*NygiX-A04$`0q;UJE9AS!4OkZ@QS576)XO0K)T zxb3~};kW<&?#E-2e4caX^|_NwGHEh171zsqsCd#^?)H6`_z~h~i|;Ca3Ef}+r)2)y zWd7aaOT~XJew6rGud)prxV(qkhg&BeLoncaxz6cn-xGG)%^wZ;XXJVBn`A!zzXS~Q z6ZYXcDO^w+aGk%8d|%kxKIi6RE(UVAh`d=hzQX8yM@+JT+XBNmE*nOwf3(qe;dVwG z_jmXDWKJCW#bY-{zJIi_gRg0fV*jY;=-i1fIveHw(Z=}&ZdW{C!R@LzIzM8kCXV&E z{Y`p)9=E5&(fKhuO>uNe+-`Zkn%ix0bbi53R~#L8IcEYM#SLNuN9a7pPFx(FEA0a# z;rZ2lj-+2XLadckCPDLD@<2ZlR z^AqV4;^@4Aok?+Y&gT5O=jYNJ;^-`3rzMV#dmUlgbNs*07#(qR7P2!Vjt>4m+TP&5 zAF&C?{{xE=6G!K*>?Fi7-#zXp1Mc2mMHZdi*~xnI@&BD-vg(_Cj)9P4ziZ_arBLw4d@V(*)t zPd-3Tc>XiGdtcFA-rvx(-ux%%MbDq3mpsScN5QCw<8pnLm#Zp{%k^i@pYVJ(A4lBl zLRcp{|HjUgH$Tq#4bK&xm8cH*mjE{!p{K-j3k>nCHjQ6XNK6ot>08 zu7{I3KkfPH^t|Wi(F*}DiDSQ0+;2r3`@M*r(ST2gqtjq#QXC!pUI#`!;040~{(Yc?U8F6&*^WD7>?H{?@%Xv&3ou9Fj5J$(oKAsGCS{$86*~yBd<9@z0 z7x02OI#01v5=Un}FIPF>qvGhiz|Mp?IzMHn7Vx?_Ivdz&h@Ak~=hNK}LA%F+SFsc0>!|Mb-HY?%;_lzv*l$uC>xr|I7RP!Pvy<`sFnUfL zodi1tadb}R{G#V)(nmeNh+g&lGJ4(ftLRgnPtd15{~W#T`Pb;~N08k0`S0{7UuSlH zJ3TIr>mkYOAt{dQ!96cYd43-|8F6&p#!gNgo!@bO-t(vFMR9cYW2Y>R&Yw8H;`uCo zf31q6^A2`u;^@rh{7KIj(x=4H$*|KDN9XOF-wJqJ9G%12>58K>#LkT8N7JL*+9Vt9 zesml=adC7` zY`FX5KAa!(e3+gPM`s;7DRHdlRL)O(eil6|j?O=@lNU#)%=rb+KTI!)qjMcQ6>)U_ zmGehE{|bH5^Ka4X0dI(7zmwc=OC0!Rh&iQe1Tt5~2z(|Uta~nHpaddvbPR8^5=s9t8zRylU93A(3 zy6E{M?2LN;Te|x>NB4F66us`vf1W<&`Jd_2p3ma*yte0C(YxZfT=(#Dxi?nadbZ>I zDBo~#z9T&@j?Vq;B*k(4Ea3c<=Sh0b^F8T#&)-fjdp<&UKfmeLnWa}{KGyjV*I5(C zI*;T0NzYHDPl==RQ+Ar-=$y*=t$?@1(fK($ah%zPTmPBtB*gJ`Uc)3CDRFcjVJ9Pw zlb5oS_58#1yf`|)W~V5QlON~&Qot+X==_eIsyI$w$Ie8+C&khEJv&q4IQg&aGy>id zN9QSa+Tu9*HFi3le}_IJj!u`IDBo9gx7YVMKj!(p^pxj6rKdgr4L$GqQ}lx8FVZWX z5Afe1qXC}~$L0DXFW00vF8XWPse7KFH^kAIwa5-^w8YWbgY&07-uM% zU}st!o&7k!9q_I=I*ZxqJsGlXcm2PEohT-4#^d5Rc?dg6aja*Eos{QG=^1gHJe-}J zI6CKWe%|vn^rARU9?MQy9Gy>ae#P_a=v8r?d>1=4adf`K`IDaCLZ1@H$>r=c#nHKk z^IM*~p9^e@?Pv2SyYdHgNl5%7yI2#nE|=orE|}cI*QqC63M| z>}15zd5N8@=UegL!+CLZu3)Dqj?O~PFL}Njy&{gzN7<>0qvKw`m=MRw7_JZ-lj7)n znw=?ebdKhJ8=jv)Z;7MxFYL6%(YcWGJD$IvJ|m9Km)MEohyQH2`{}1RKj!&$^n^G% zUu7pHj`iHc`DxF;PtS^@b0a%>addvn`328^K`)7;^G$Xt;^=faf7J5<{`-7F9G#ol znG{E7C(f^XzAL>Uj?NwIw8YWLaQ?J7ZlV;wemdgl+{4a{I66nO6M3y|*udG*aX%*% z6Gvy7orE|#?`9|I`T6v;I6A*(Co7K580Y6a|1`ZIj?RobN9RrKq{Y#3uUlmTo)bssZR`}p(Q&VH6$4%tM<>nBs5m-XY;OlPssXQwqcg-# zT^yYlJ5vE~ilcJ`JJaImxYym<0q=^Va{@b&oovH~dt6O%J<)*2#nCy9ouoL{lV&Fs z@QgS*MRs!H=p4jOKHx=hbS`A4ERN0yJC%S}#nE{`J2i21j$>!ibNBQ2Q{w1+h@GZ5 zIv29j^87M-TO6H_u+tSs=UUF6@%;1jIDUBDhP!=lq$fQ8Ea_i=vK z^EN#%j?O=^Qxr$%KRCbS`JB1-NgEY$bUw#URUDn2IDf+PUFehI=zN)-DRFcbbAH3~ z5qe7;otxNci=(rg^E;jw=`-T!G}wvamr`uF+w1+D9}9Rw9G$z^Nr_`Um$8!$cvc*p zyV=Q$qchGbu(bna!RB96|-*clD@gg816u`?--&Nb}RJ->n85J%@1?6kzuX>$H_ zz&qmTJjTw9I66OK$Nk|FcRT)s9^>!3z|nb%orE|#zvld;=YOE5#nJf>cCzB={F(D} zo^PO+JfA(!&SazP`8@ilIQIJz_d6ku{l1a&Yo6~yuZyGeGCK`%bPnMBrsoIKr^V43 zNZEmnjyO6aoZt2Q2)g@YSnhV&lARd;P>8!7Pvrb~z?0%w&vxvj#j&1K*vSMuCyvg1 zb_(L?EN7?a`C0U`I66DCGb)bG1)N_EcugFgx3E(eN9PiDrUKp+M`urVrp3|uFgxvl zcg4{;fF1XT)ZFd$33j6Rr6U`@$HmdHKbO!ONpY;ly`PZ^ct#wZqu9xbqw^)MCm-;l zI65b>Qx-?(+w4>VUKK}YIXg9RbnawlGT>9<=$y+=Qyd-l`(v$ux5d%9n4PXTIvuWO zCg4&2!jZe5{yjT!adiI3P9oqbajfSmb~57l_h|(?vXKpVUL2ik*eQymQ)8zT@QOG( z*RxXSb z*oh^29KrHH&J*J3+`~>v9P{^MCmrytI66ONCohh~(d-lgUJ^&=QFbcgNW6!g(ST2g zqw_R7lj2BR%uYSv4RLh-#7;{biL2R}4tPf#oh=6Kz{X6XceL?#`64^LKhj~J8n6$L z^Vot-^U;a1lMu)J_3R`Ao)$;vb?jutk#N7CnG1M99GzX*DT$-=7p|uq@KJGe2HBYq zM;&^|J<&J!avN_)=W%g# zu45-Dj?1+z-@i-+JR^?I7um^)qq7S;`G6P2(fKAjWpP|T30^;yfLF!QX|PihM<>J1 zWWcAy(fJ`eO>tbVLwLDb0dI?=^AI~-adb{)XC~m$g*M5CyPy7wowztISAmx+5%82a z*7GDg8F6&n?`LKMo)<^wMRtnf=(yk8ECswGj?S#T?7&7<9M{kLdHqZTd{P{p?b(?U z$9kH)ei{L9iK7!|r!9{4e2VMo1bjvuoj0=+eT!|_!0m|jbh(~bz!T!=EMg}mj*k0% zqIAHs;^-W}PF@_B>qcI#LcmMn=nS({5l824c18m}A&$;5>`aQI^DB1h0dI(-b22+E zadiI7&UC;#;^>^g&Wt!Z^ZD}xy*~oKeVJ9n& z&cW>D0$vbD=Sp@;;^-X9PC4MC;^=&goe6Pt&S9q(@VYoU*Rs4>BA33j>x@BJ|~o97-^Z)7L-Rzo^EUt%X7@T54_^Idk*;<%q?X4?Ud1D+E{r^!x1 z9GwC?#ekQ^(RqNKQE_xC>{J6@6G!Kl?9|24nPg`w;7xIK9%pA-93A(2-R*#P#nE}5 z9rp)HHa@O$J<+61vf+DN9Gwm9B*k&N-^JTK<@t~38F6&B+1n0m@>yEd7PbAz}w>Jyp^4)0uYqjNjgQx5p3IHrD{oe6Pte$GxU;B|3K{VF>R zadiHJoo2wN#WD3;>~zG@*%seaZFB?f{;raHT>Tz9u|4|dbGPqX*l~X!$oHho$9mSY zlNQH%2HD93JSUFMz3ddk(K(QvV!+Gd==_A8QE_yZvQzc^WO_{;ok!TIi=%Tk=T8N^ zDUQzX*qIhb=VEr+0q=^V^E5k=x7mgbce`A{j{E&}-`($#!_j$>9rydtZvMyFNqK$e z?)QUTX9GJqZ~i~ClMi@N9P8O?A3Ly77RUAT6?Q5CuZp8HkDZ!0I(M++exK4^UguLX zAD!2-(-cSNVRl*pZ;PYzMs~X5=sd>GjOWkOql;{k4R<}im7TaaI$QAPFWv7YxXbk_ zdP?SFJ$tf~5l80@oS*ePNzaR;vp+jUadh_P{F3KsdPN+agW0KyqjMnVPXv5Y9G%11 znG#3mSauo#Z;7LG3_ERcbc*bB0zM;-&PnV<_p}Wg?soYgJF$Q##L-#CPD&i>`4l_u z=N4Vxc~<75a~3;!add8Arx5UxI65oYsfeR<3p=9$pAbjqz3fbiqjNty^?*0T(YcJB zmN+_3vNIj z>~zG@aX*LM4S0mFTf5uqd+fOPE#2+=39ctD^U-&n6vukjvy&Fb{LiqH33yH%oqO3S zh@*2OJMR54w@&9}nUBsiJEP+0{E(e$z-!{@{ED5rI69BBGZpZrI6A*)XIdPcE&21x z?SOa1(Rq%Y-XH0QEpc>CVy7*RPIMW z*op4bJKLuFDLb)%C&bY?i=C7>)-%XXI^bDxbXKyH7f0t%b_xM6iKFvgb}HiNoXpN> zz$e7fxs07jada+VrylTzI65C@rzMWgT6Wy`0e8P}-jVs}e3YFTadbY;PK2L#9p^D| zbgtocLL43U`xVK6r^V5^j@wyrbiT>;0 zyW;3P%}(z>U$Jd>Kf08i=>CSA@whlTFS3&q$9mlF!=wV95l3eOJ2`Q5ZsdCM0WXT9 zvlTCASsb0a*{KA)Dvr)Pc5342{F zcBO((J6C&$8-04N;Bfzd_H6qvIa$^5W=xkMj$jf1h3wN9RJWry`Ed zeVjk)`D646adh6#&ZIax8#ur2`BwZroQ60$YuRauqq8IDPka7mdPf|ctJs+lM`wS| z@BJrLw(V}mL+P=%8`9DF6gvrVbWY*?r03_*)8goShMlZ9I+t;NF5m@mbUx2cNgSOk z*eM5mR2-c;I}_sQe1x5v=bxn4#nJgTI}LGkuH*b>z^BF0xs9EUI67ZoryKCdJ8Y5- z_qci|J27!|Zek}czN2}34$f_V=SCds`5`-Ladf`VPR8@Q=s9t8e#A~e9GxF=e$n&$ z=w)$q?qO$C9GxF?e%14b={0e5TI|%t(RqaPr#ye0-V{gY0d}Uv(Rq&Z+n&$RyW;5l zgdO)Ex4Zk}Z2o>%bg@mc;XFo1c9P;)&+9oq<@sCa8F6$TVJ9b!&f7RY@A-c8 zqBuIgVW%vP&cU2t@%&JFRUDn)u~QRA=P1sf4EU5dI#00E6i4Scc3PgFMsJIw^E5kM zadgh%{29+z(W3|2BpdF2`aC;vada-_{DkM1(Np4B&r9rN#L@XE=Vv|t2YOx{ovrx1 zttgJpKXZO5;8oAB=lluJzeArC$9`YM{Z5HvzYlVLBj7D@bmp_u7Dwlo>~uW;Eqz8D zoj5zugKWcwyWjnp^J4)|h@-QBos>A%v(+0=wZ9MH`A+n#I6AwslNU#4AI>iXyd;j! zAUhRtbcWd(4fupOItQ>bDUQzJ?9@F!h29WHXE8f1adg&j{_q&)lI)|{65J$&-{U-yS_59zs-<;=PqZh=n-x2P&B#!;w!ujQZ zkBXyn1UnPr=(yigtp&U;j?S^{G{n*Q71z@Y__R1Wd3HMD=(yi^?FKxOu}L=EK#L>Boow_(WZ)ImH;7xIKKFrRvI68Z=(++r79G#D{6B)7%8}9M*Kz5=5 zkBg&o4LeD3tmi0pQl6hk&xoV*8Fq5w=(yic&U?O^ouW88pJ%5mj*k1i<%;K5u~QXC zr_N4I93A)j%#)sfj-4rSbiU0_QyiT-=eIn+h29oN=Qeh_;^;Ivf5!6%>Cr=Ml8piT zK<9_-#KqBZzb~Ee{7H6F;^;icPDUIZ_j}Y?&*voUlQ#0===_46qBuISgdNx@dA@U^ z$B~LSI=^M7DvnN)^CvvthdwEe&eQBniKCO@{D$XC=`C?|-0N#?adh&W-|>6}eMTIe z0lvNyU1A&9whwel2|KV6^Ze38k0S|jbhcq9C63N0=chftmYx+yX9srj;^^GS`32AK zq?g3ec?~-iaddvp`J=(boOK?D~`_5?BoJo5JzV} zc1q&toWM>w;G^Q`9K_CqI67ysQww-q9G%11X^5k9DLc)8Pm80IW2YmI&N_Cw0gsH> zBpUd6J#z zp|)Ye_qaGZpJ68{j?OdeqynB1N5{RdkP}BI@+KVE_lnV$)6Jw_m@TxdE zx3E(aN9XU@nGE=pI68N-(-cQ%5j(Abx5d$M@0WDN(K(2nnSe(Rvq?5^JEHS2*Ao{< z=XiD!0Z)me^C&wRadggLCmZm*I68k|rznoj1?-dpUJ*yfy$@6sN9RNAOn81JeNr5q zS$rR2N*tYaoZkp|OB|i;*lCNSb3Hp9&p%I}5l81W>_oG+VZ+@YzsdQrfG5P!aqn-X z#Ic^6*+~aHD~`@?Tu)vcox9j61iU1U&OYo^#L;<>ozZ|#h@*25JCow*Jj_l#;08tGug?C zqci8tc3>kH@Parx?)}J;I6ALpryTH6adh6#^-PGP^Cos`0k4arb2&Q=adZaRX$E{+ z9G$D#>4>9q2s_j`dv6^`ynoDX^0XcupLhFR@b) zN9TNYiUBW+qjM8GqvGg%kezD4YvSm*_mAu1=&WOBD&S3Vbbi3~OpBxQDR$Zc?~0@I zAUlyGZNrAUKYo#&Xu#v*==_qMq&U{|b#_t#&xoVr-WSh_qjL*8`G6P2(Rr5ZDT||X zCp(pZSH;o!3p+J&bna(oGT>9<=xq6RJFw9dN9Q-}v;y81M<>QkR~(&Z*_jD=bg50U z;qIq@$4*=vojD78(;|t0r^KBlJEeeE#L;m-$50hV z=RkHQ0zN5@&LLdSlsG!aveO87OB|i0?6k$vIg_1Ez-PqKc_%y3qin;5yPvLNCl>I8 zI6Cg=%5<9to7sSzVKTlH4>AVnDe^dvRKT0!=seC&Bxf5o z-2LcF>_o-!K5~9eZ(1ZSj?R-=qw_2~lL4O+N9RR$n&RlZ#7@iet#`3c+GvZT^Cxz?;^?@) zFE$hK=&`76x_`aIPFx(F-MHUGz*FK_PlP|$l@UkB{r$3R!1Lnh%weY}j?Q6RPbuIP zade{WRK?Lbk)4TvPl}_n9XnIv=)8xWM!;L*=)~A*i=%TcJDq^fh@&%~o#=74VZ+@| z-QR1A1w0{+PMn>TIM%a{>q!SZD~`_2?BvDKxt5(mz)RxjB-p8lqw_U(Mgu+}j?O}M zCdJXYi=BGF8{+6B*=dQR^DB0y1KtrwXAgE}#L;<C08BaTjqoovAK;^?ft^OcTjJB-^mz?xzp16AO4k z9GwYvQsP+8W9*~@o)t&uT6Xf{=)A;EA>bu(bZYEW#L?MtS39sV8t@5mbUw$g;^>sw$pyS1j?NT2C2@2ob$9nE&CoPVS`+K9Afak=~X|Yof zN9T`RPch(SadaMJXH*=WZFjQ+8`Xf<#L<~%r!J1p8`zl&cvBpmpR+S9j*k1gsO^Av z#nEZA6FJ#7Y`FX560Rp2@VGcSkFt{#$9hg-Cl&CFI6576a^mQ$WG5f+qBuHFvQrjE zXDvIGfLF!Q>9SK3N5}pB*2#cRiKFv8J56zP+~0d`1-vbe&I~(Uadf`T%QX}5=qWbI zhP$8sg`K!KI(M;?2zW{y>xuC9zB1zI{G6R^!1Lnh%weY}j!u`IQot+X=tSA6ilZ}o zcRR2#5%5WIbhcw>N*tZ}>@))25=SS-PFozEUD)Xad`29d`RqjBZ5uY+{d9kJVgXNx zqZ4N*C64tR$xb@pS#flBW+yL>j{AGNg@BjD(MhmV5l3e=*E1UM32}55vNI`;&Nw^u zfH%a^NwU)tN9THWrUTv)M`sUqX2j9CiJi!)wqe8Fj?QD^=%m<5h@-Qfon*k%;^^$d zPF5V9pR$t+ctISUG&?16bbilHIpCw>=qzSuLL8mhd)R@ETEOe#=w#Swh@ zPL7>|I65C^rx@_EI65b=Gb)ab`}@e%fY-#)$+J@zN9QYC&y?rx?qA%z2v~*vJRG zD2~o~?3BgPc?~<2fLF!QDX~)%M`sUqCIdbtj?QX!n&Rjj#7-;VZE~zJ^If|W` zfJX~9$%eb1Udm3q(BqA_`)TYX0-h4bdMfN>#Ic_DvXc#XUL2jv*(r*n^HFw60k4Ro zGs;d?9G&agnF#o#I67CcGbN7BH`r+eyd{oKm7TUYI`^{E3HXdSI-g`Gy4*HwxclkP z*@=1nBt0RH&ICItaja+SMX1{2eZaHg=v>QAUL2j*u~YDTH+o4NofImFz^`V;eRG>_a^!j?UNF zNr+?q73?Gfo)$-Eik+-DI_~d@=K@|3N9Vijl*G~bBG*$6_^3EKx3M!Jj?Q=4sd;`M zy)KTxP0ydBPm81TBX&CC=xnj49oXo49;Zi6?|&Y*BRUVT6B9>gH_nfH zzL=gAN9U*Pq{Y!Wp7S%FpFz)wqw@$m1#xsf!1=|1m&MU}jGa+&bgJxB16~tH=W%xG z;^=&qovDB~#nE|+ooR7&zQayC;9YTao?$1l!ZvKU`{P~gL<1fdN9RA-Ns41V?(eOq z0-g~^=a1~<#L;<*>&XYaD2~oc?3BgPd5N8h=Ub-ilQyd2=*&8>$B~*iI`cSxGT>9< z=xoDIQyiUz?6f@Jjo$Sqau#Z8`!Ceqcg?Mgy-Le*>bSI9rJt#ddl+zJ?;71=y}iIPA_=w{@>?{=O=LfsORqgWuEl>OwO-+ zzLMVZ-2Hv|Y0t0Z{29+T{y)WM^{*%Q^?5z#Cp>q5Uq0#iw>Up7j<1s>zfQ8^G4t