Index: lang/elixir/Makefile =================================================================== --- lang/elixir/Makefile +++ lang/elixir/Makefile @@ -3,7 +3,7 @@ PORTNAME= elixir DISTVERSIONPREFIX= v -DISTVERSION= 1.7.3 +DISTVERSION= 1.8.1 CATEGORIES= lang MASTER_SITES+= https://github.com/elixir-lang/elixir/releases/download/${DISTVERSIONPREFIX}${PORTVERSION}/:doc DISTFILES= Docs.zip:doc Index: lang/elixir/distinfo =================================================================== --- lang/elixir/distinfo +++ lang/elixir/distinfo @@ -1,5 +1,5 @@ -TIMESTAMP = 1535385326 -SHA256 (elixir/1.7.3/Docs.zip) = accc0b1325256a34be5acd25e378bf53c13b531be5c523e324a703c0de074ed1 -SIZE (elixir/1.7.3/Docs.zip) = 1629794 -SHA256 (elixir/1.7.3/elixir-lang-elixir-v1.7.3_GH0.tar.gz) = c9beabd05e820ee83a56610cf2af3f34acf3b445c8fabdbe98894c886d2aa28e -SIZE (elixir/1.7.3/elixir-lang-elixir-v1.7.3_GH0.tar.gz) = 2140430 +TIMESTAMP = 1549835082 +SHA256 (elixir/1.8.1/Docs.zip) = 3858effcfe0cd149b61684b24cf025c9ae9acaf08c7274f4c1419d823f7373cf +SIZE (elixir/1.8.1/Docs.zip) = 1551525 +SHA256 (elixir/1.8.1/elixir-lang-elixir-v1.8.1_GH0.tar.gz) = de8c636ea999392496ccd9a204ccccbc8cb7f417d948fd12692cda2bd02d9822 +SIZE (elixir/1.8.1/elixir-lang-elixir-v1.8.1_GH0.tar.gz) = 2177865 Index: lang/elixir/files/patch-Makefile =================================================================== --- lang/elixir/files/patch-Makefile +++ lang/elixir/files/patch-Makefile @@ -1,24 +1,10 @@ ---- Makefile.orig 2018-07-26 08:21:35 UTC +--- Makefile.orig 2019-01-14 23:47:13 UTC +++ Makefile -@@ -1,5 +1,6 @@ +@@ -1,6 +1,6 @@ PREFIX ?= /usr/local SHARE_PREFIX ?= $(PREFIX)/share +-MAN_PREFIX ?= $(SHARE_PREFIX)/man +MAN_PREFIX ?= $(PREFIX)/man - CANONICAL := v1.7/ - ELIXIRC := bin/elixirc --verbose --ignore-module-conflict - ERLC := erlc -I lib/elixir/include -@@ -279,9 +280,9 @@ clean_man: - rm -f man/iex.1.bak - - install_man: build_man -- $(Q) mkdir -p $(DESTDIR)$(SHARE_PREFIX)/man/man1 -- $(Q) $(INSTALL_DATA) man/elixir.1 $(DESTDIR)$(SHARE_PREFIX)/man/man1 -- $(Q) $(INSTALL_DATA) man/elixirc.1 $(DESTDIR)$(SHARE_PREFIX)/man/man1 -- $(Q) $(INSTALL_DATA) man/iex.1 $(DESTDIR)$(SHARE_PREFIX)/man/man1 -- $(Q) $(INSTALL_DATA) man/mix.1 $(DESTDIR)$(SHARE_PREFIX)/man/man1 -+ $(Q) mkdir -p $(DESTDIR)$(MAN_PREFIX)/man1 -+ $(Q) $(INSTALL_DATA) man/elixir.1 $(DESTDIR)$(MAN_PREFIX)/man1 -+ $(Q) $(INSTALL_DATA) man/elixirc.1 $(DESTDIR)$(MAN_PREFIX)/man1 -+ $(Q) $(INSTALL_DATA) man/iex.1 $(DESTDIR)$(MAN_PREFIX)/man1 -+ $(Q) $(INSTALL_DATA) man/mix.1 $(DESTDIR)$(MAN_PREFIX)/man1 - $(MAKE) clean_man + CANONICAL := v1.8/ # master/ or vMAJOR.MINOR/ + ELIXIRC := bin/elixirc --verbose --ignore-module-conflict --warnings-as-errors + ERLC := erlc -I lib/elixir/include +warnings_as_errors Index: lang/elixir/pkg-plist =================================================================== --- lang/elixir/pkg-plist +++ lang/elixir/pkg-plist @@ -34,6 +34,8 @@ lib/elixir/lib/elixir/ebin/Elixir.Behaviour.beam lib/elixir/lib/elixir/ebin/Elixir.Bitwise.beam lib/elixir/lib/elixir/ebin/Elixir.Calendar.ISO.beam +lib/elixir/lib/elixir/ebin/Elixir.Calendar.TimeZoneDatabase.beam +lib/elixir/lib/elixir/ebin/Elixir.Calendar.UTCOnlyTimeZoneDatabase.beam lib/elixir/lib/elixir/ebin/Elixir.Calendar.beam lib/elixir/lib/elixir/ebin/Elixir.CaseClauseError.beam lib/elixir/lib/elixir/ebin/Elixir.Code.Formatter.beam @@ -187,7 +189,6 @@ lib/elixir/lib/elixir/ebin/Elixir.String.Chars.Version.Requirement.beam lib/elixir/lib/elixir/ebin/Elixir.String.Chars.Version.beam lib/elixir/lib/elixir/ebin/Elixir.String.Chars.beam -lib/elixir/lib/elixir/ebin/Elixir.String.Normalizer.beam lib/elixir/lib/elixir/ebin/Elixir.String.Tokenizer.beam lib/elixir/lib/elixir/ebin/Elixir.String.Unicode.beam lib/elixir/lib/elixir/ebin/Elixir.String.beam @@ -264,6 +265,7 @@ %%SRC%%lib/elixir/lib/elixir/lib/calendar/iso.ex %%SRC%%lib/elixir/lib/elixir/lib/calendar/naive_datetime.ex %%SRC%%lib/elixir/lib/elixir/lib/calendar/time.ex +%%SRC%%lib/elixir/lib/elixir/lib/calendar/time_zone_database.ex %%SRC%%lib/elixir/lib/elixir/lib/code.ex %%SRC%%lib/elixir/lib/elixir/lib/code/formatter.ex %%SRC%%lib/elixir/lib/elixir/lib/code/identifier.ex @@ -385,6 +387,7 @@ %%SRC%%lib/elixir/lib/ex_unit/lib/ex_unit/server.ex lib/elixir/lib/iex/ebin/Elixir.IEx.App.beam lib/elixir/lib/iex/ebin/Elixir.IEx.Autocomplete.beam +lib/elixir/lib/iex/ebin/Elixir.IEx.Broker.beam lib/elixir/lib/iex/ebin/Elixir.IEx.CLI.beam lib/elixir/lib/iex/ebin/Elixir.IEx.Config.beam lib/elixir/lib/iex/ebin/Elixir.IEx.Evaluator.beam @@ -416,6 +419,7 @@ %%SRC%%lib/elixir/lib/iex/lib/iex.ex %%SRC%%lib/elixir/lib/iex/lib/iex/app.ex %%SRC%%lib/elixir/lib/iex/lib/iex/autocomplete.ex +%%SRC%%lib/elixir/lib/iex/lib/iex/broker.ex %%SRC%%lib/elixir/lib/iex/lib/iex/cli.ex %%SRC%%lib/elixir/lib/iex/lib/iex/config.ex %%SRC%%lib/elixir/lib/iex/lib/iex/evaluator.ex @@ -427,6 +431,7 @@ %%SRC%%lib/elixir/lib/iex/lib/iex/remsh.ex %%SRC%%lib/elixir/lib/iex/lib/iex/server.ex lib/elixir/lib/logger/ebin/Elixir.Logger.App.beam +lib/elixir/lib/logger/ebin/Elixir.Logger.BackendSupervisor.beam lib/elixir/lib/logger/ebin/Elixir.Logger.Backends.Console.beam lib/elixir/lib/logger/ebin/Elixir.Logger.Config.beam lib/elixir/lib/logger/ebin/Elixir.Logger.ErlangHandler.beam @@ -435,11 +440,11 @@ lib/elixir/lib/logger/ebin/Elixir.Logger.Translator.beam lib/elixir/lib/logger/ebin/Elixir.Logger.Utils.beam lib/elixir/lib/logger/ebin/Elixir.Logger.Watcher.beam -lib/elixir/lib/logger/ebin/Elixir.Logger.WatcherSupervisor.beam lib/elixir/lib/logger/ebin/Elixir.Logger.beam lib/elixir/lib/logger/ebin/logger.app %%SRC%%lib/elixir/lib/logger/lib/logger.ex %%SRC%%lib/elixir/lib/logger/lib/logger/app.ex +%%SRC%%lib/elixir/lib/logger/lib/logger/backend_supervisor.ex %%SRC%%lib/elixir/lib/logger/lib/logger/backends/console.ex %%SRC%%lib/elixir/lib/logger/lib/logger/config.ex %%SRC%%lib/elixir/lib/logger/lib/logger/erlang_handler.ex @@ -448,7 +453,6 @@ %%SRC%%lib/elixir/lib/logger/lib/logger/translator.ex %%SRC%%lib/elixir/lib/logger/lib/logger/utils.ex %%SRC%%lib/elixir/lib/logger/lib/logger/watcher.ex -%%SRC%%lib/elixir/lib/logger/lib/logger/watcher_supervisor.ex lib/elixir/lib/mix/ebin/Elixir.Mix.CLI.beam lib/elixir/lib/mix/ebin/Elixir.Mix.Compilers.Elixir.beam lib/elixir/lib/mix/ebin/Elixir.Mix.Compilers.Erlang.beam @@ -534,6 +538,7 @@ lib/elixir/lib/mix/ebin/Elixir.Mix.Tasks.Run.beam lib/elixir/lib/mix/ebin/Elixir.Mix.Tasks.Test.Cover.beam lib/elixir/lib/mix/ebin/Elixir.Mix.Tasks.Test.beam +lib/elixir/lib/mix/ebin/Elixir.Mix.Tasks.WillRecompile.beam lib/elixir/lib/mix/ebin/Elixir.Mix.Tasks.Xref.beam lib/elixir/lib/mix/ebin/Elixir.Mix.TasksServer.beam lib/elixir/lib/mix/ebin/Elixir.Mix.Utils.beam @@ -619,6 +624,7 @@ %%SRC%%lib/elixir/lib/mix/lib/mix/tasks/profile.fprof.ex %%SRC%%lib/elixir/lib/mix/lib/mix/tasks/run.ex %%SRC%%lib/elixir/lib/mix/lib/mix/tasks/test.ex +%%SRC%%lib/elixir/lib/mix/lib/mix/tasks/will_recompile.ex %%SRC%%lib/elixir/lib/mix/lib/mix/tasks/xref.ex %%SRC%%lib/elixir/lib/mix/lib/mix/tasks_server.ex %%SRC%%lib/elixir/lib/mix/lib/mix/utils.ex @@ -633,13 +639,13 @@ %%PORTDOCS%%%%DOCSDIR%%/eex/EEx.html %%PORTDOCS%%%%DOCSDIR%%/eex/api-reference.html %%PORTDOCS%%%%DOCSDIR%%/eex/assets/logo.png -%%PORTDOCS%%%%DOCSDIR%%/eex/dist/app-240d7fc7e5.css -%%PORTDOCS%%%%DOCSDIR%%/eex/dist/app-3f669e16ee.js -%%PORTDOCS%%%%DOCSDIR%%/eex/dist/sidebar_items-37cdbc8415.js -%%PORTDOCS%%%%DOCSDIR%%/eex/fonts/icomoon.eot -%%PORTDOCS%%%%DOCSDIR%%/eex/fonts/icomoon.svg -%%PORTDOCS%%%%DOCSDIR%%/eex/fonts/icomoon.ttf -%%PORTDOCS%%%%DOCSDIR%%/eex/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/html-fe10831fd0480024873d.css +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/html-fe10831fd0480024873d.js +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/html/fonts/icomoon.eot +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/html/fonts/icomoon.svg +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/html/fonts/icomoon.ttf +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/html/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/eex/dist/sidebar_items-8d6b2084ef.js %%PORTDOCS%%%%DOCSDIR%%/eex/index.html %%PORTDOCS%%%%DOCSDIR%%/eex/search.html %%PORTDOCS%%%%DOCSDIR%%/elixir/404.html @@ -658,6 +664,8 @@ %%PORTDOCS%%%%DOCSDIR%%/elixir/Behaviour.html %%PORTDOCS%%%%DOCSDIR%%/elixir/Bitwise.html %%PORTDOCS%%%%DOCSDIR%%/elixir/Calendar.ISO.html +%%PORTDOCS%%%%DOCSDIR%%/elixir/Calendar.TimeZoneDatabase.html +%%PORTDOCS%%%%DOCSDIR%%/elixir/Calendar.UTCOnlyTimeZoneDatabase.html %%PORTDOCS%%%%DOCSDIR%%/elixir/Calendar.html %%PORTDOCS%%%%DOCSDIR%%/elixir/CaseClauseError.html %%PORTDOCS%%%%DOCSDIR%%/elixir/Code.LoadError.html @@ -752,13 +760,13 @@ %%PORTDOCS%%%%DOCSDIR%%/elixir/api-reference.html %%PORTDOCS%%%%DOCSDIR%%/elixir/assets/logo.png %%PORTDOCS%%%%DOCSDIR%%/elixir/compatibility-and-deprecations.html -%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/app-240d7fc7e5.css -%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/app-3f669e16ee.js -%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/sidebar_items-603a6513f9.js -%%PORTDOCS%%%%DOCSDIR%%/elixir/fonts/icomoon.eot -%%PORTDOCS%%%%DOCSDIR%%/elixir/fonts/icomoon.svg -%%PORTDOCS%%%%DOCSDIR%%/elixir/fonts/icomoon.ttf -%%PORTDOCS%%%%DOCSDIR%%/elixir/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/html-fe10831fd0480024873d.css +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/html-fe10831fd0480024873d.js +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/html/fonts/icomoon.eot +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/html/fonts/icomoon.svg +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/html/fonts/icomoon.ttf +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/html/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/elixir/dist/sidebar_items-7a8d46281e.js %%PORTDOCS%%%%DOCSDIR%%/elixir/guards.html %%PORTDOCS%%%%DOCSDIR%%/elixir/index.html %%PORTDOCS%%%%DOCSDIR%%/elixir/library-guidelines.html @@ -790,29 +798,30 @@ %%PORTDOCS%%%%DOCSDIR%%/ex_unit/ExUnit.html %%PORTDOCS%%%%DOCSDIR%%/ex_unit/api-reference.html %%PORTDOCS%%%%DOCSDIR%%/ex_unit/assets/logo.png -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/app-240d7fc7e5.css -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/app-3f669e16ee.js -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/sidebar_items-e1aa34e419.js -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/fonts/icomoon.eot -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/fonts/icomoon.svg -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/fonts/icomoon.ttf -%%PORTDOCS%%%%DOCSDIR%%/ex_unit/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/html-fe10831fd0480024873d.css +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/html-fe10831fd0480024873d.js +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/html/fonts/icomoon.eot +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/html/fonts/icomoon.svg +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/html/fonts/icomoon.ttf +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/html/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/ex_unit/dist/sidebar_items-4708ae1449.js %%PORTDOCS%%%%DOCSDIR%%/ex_unit/index.html %%PORTDOCS%%%%DOCSDIR%%/ex_unit/search.html %%PORTDOCS%%%%DOCSDIR%%/iex/404.html %%PORTDOCS%%%%DOCSDIR%%/iex/IEx.Helpers.html %%PORTDOCS%%%%DOCSDIR%%/iex/IEx.Info.html %%PORTDOCS%%%%DOCSDIR%%/iex/IEx.Pry.html +%%PORTDOCS%%%%DOCSDIR%%/iex/IEx.Server.html %%PORTDOCS%%%%DOCSDIR%%/iex/IEx.html %%PORTDOCS%%%%DOCSDIR%%/iex/api-reference.html %%PORTDOCS%%%%DOCSDIR%%/iex/assets/logo.png -%%PORTDOCS%%%%DOCSDIR%%/iex/dist/app-240d7fc7e5.css -%%PORTDOCS%%%%DOCSDIR%%/iex/dist/app-3f669e16ee.js -%%PORTDOCS%%%%DOCSDIR%%/iex/dist/sidebar_items-d78c2db16c.js -%%PORTDOCS%%%%DOCSDIR%%/iex/fonts/icomoon.eot -%%PORTDOCS%%%%DOCSDIR%%/iex/fonts/icomoon.svg -%%PORTDOCS%%%%DOCSDIR%%/iex/fonts/icomoon.ttf -%%PORTDOCS%%%%DOCSDIR%%/iex/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/html-fe10831fd0480024873d.css +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/html-fe10831fd0480024873d.js +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/html/fonts/icomoon.eot +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/html/fonts/icomoon.svg +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/html/fonts/icomoon.ttf +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/html/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/iex/dist/sidebar_items-f7cf7a738d.js %%PORTDOCS%%%%DOCSDIR%%/iex/index.html %%PORTDOCS%%%%DOCSDIR%%/iex/search.html %%PORTDOCS%%%%DOCSDIR%%/logger/404.html @@ -821,13 +830,13 @@ %%PORTDOCS%%%%DOCSDIR%%/logger/Logger.html %%PORTDOCS%%%%DOCSDIR%%/logger/api-reference.html %%PORTDOCS%%%%DOCSDIR%%/logger/assets/logo.png -%%PORTDOCS%%%%DOCSDIR%%/logger/dist/app-240d7fc7e5.css -%%PORTDOCS%%%%DOCSDIR%%/logger/dist/app-3f669e16ee.js +%%PORTDOCS%%%%DOCSDIR%%/logger/dist/html-fe10831fd0480024873d.css +%%PORTDOCS%%%%DOCSDIR%%/logger/dist/html-fe10831fd0480024873d.js +%%PORTDOCS%%%%DOCSDIR%%/logger/dist/html/fonts/icomoon.eot +%%PORTDOCS%%%%DOCSDIR%%/logger/dist/html/fonts/icomoon.svg +%%PORTDOCS%%%%DOCSDIR%%/logger/dist/html/fonts/icomoon.ttf +%%PORTDOCS%%%%DOCSDIR%%/logger/dist/html/fonts/icomoon.woff %%PORTDOCS%%%%DOCSDIR%%/logger/dist/sidebar_items-01d316135c.js -%%PORTDOCS%%%%DOCSDIR%%/logger/fonts/icomoon.eot -%%PORTDOCS%%%%DOCSDIR%%/logger/fonts/icomoon.svg -%%PORTDOCS%%%%DOCSDIR%%/logger/fonts/icomoon.ttf -%%PORTDOCS%%%%DOCSDIR%%/logger/fonts/icomoon.woff %%PORTDOCS%%%%DOCSDIR%%/logger/index.html %%PORTDOCS%%%%DOCSDIR%%/logger/search.html %%PORTDOCS%%%%DOCSDIR%%/mix/404.html @@ -897,12 +906,12 @@ %%PORTDOCS%%%%DOCSDIR%%/mix/Mix.html %%PORTDOCS%%%%DOCSDIR%%/mix/api-reference.html %%PORTDOCS%%%%DOCSDIR%%/mix/assets/logo.png -%%PORTDOCS%%%%DOCSDIR%%/mix/dist/app-240d7fc7e5.css -%%PORTDOCS%%%%DOCSDIR%%/mix/dist/app-3f669e16ee.js -%%PORTDOCS%%%%DOCSDIR%%/mix/dist/sidebar_items-d32f1c2296.js -%%PORTDOCS%%%%DOCSDIR%%/mix/fonts/icomoon.eot -%%PORTDOCS%%%%DOCSDIR%%/mix/fonts/icomoon.svg -%%PORTDOCS%%%%DOCSDIR%%/mix/fonts/icomoon.ttf -%%PORTDOCS%%%%DOCSDIR%%/mix/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/html-fe10831fd0480024873d.css +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/html-fe10831fd0480024873d.js +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/html/fonts/icomoon.eot +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/html/fonts/icomoon.svg +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/html/fonts/icomoon.ttf +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/html/fonts/icomoon.woff +%%PORTDOCS%%%%DOCSDIR%%/mix/dist/sidebar_items-7eacd918f7.js %%PORTDOCS%%%%DOCSDIR%%/mix/index.html %%PORTDOCS%%%%DOCSDIR%%/mix/search.html Index: lang/erlang/Makefile =================================================================== --- lang/erlang/Makefile +++ lang/erlang/Makefile @@ -2,8 +2,8 @@ # $FreeBSD$ PORTNAME= erlang -PORTVERSION= 19.3.6.12 -PORTREVISION= 1 +PORTVERSION= 20.3.8.9 +PORTREVISION= 0 PORTEPOCH= 4 CATEGORIES= lang parallel java MASTER_SITES= http://www.erlang.org/download/:erlangorg \ @@ -19,12 +19,12 @@ PATCH_SITES= http://olgeni.olgeni.com/~olgeni/distfiles/ \ LOCAL/olgeni -PATCHFILES= patch-otp-19.3.1 patch-otp-19.3.2 patch-otp-19.3.3 \ - patch-otp-19.3.4 patch-otp-19.3.5 patch-otp-19.3.6 \ - patch-otp-19.3.6.1 patch-otp-19.3.6.2 patch-otp-19.3.6.3 \ - patch-otp-19.3.6.4 patch-otp-19.3.6.5 patch-otp-19.3.6.6 \ - patch-otp-19.3.6.7 patch-otp-19.3.6.8 patch-otp-19.3.6.9 \ - patch-otp-19.3.6.10 patch-otp-19.3.6.11 patch-otp-19.3.6.12 +PATCHFILES= patch-otp-20.3.1 patch-otp-20.3.2 patch-otp-20.3.3 \ + patch-otp-20.3.4 patch-otp-20.3.5 patch-otp-20.3.6 \ + patch-otp-20.3.7 patch-otp-20.3.8 patch-otp-20.3.8.1 \ + patch-otp-20.3.8.2 patch-otp-20.3.8.3 patch-otp-20.3.8.4 \ + patch-otp-20.3.8.5 patch-otp-20.3.8.6 patch-otp-20.3.8.7 \ + patch-otp-20.3.8.8 patch-otp-20.3.8.9 MAINTAINER= erlang@FreeBSD.org COMMENT= Functional programming language from Ericsson @@ -36,7 +36,7 @@ WRKSRC= ${WRKDIR}/otp_src_${ERLANG_REL} ERLANG_LIB= ${PORTNAME} -ERLANG_REL= 19.3 +ERLANG_REL= 20.3 OPTIONS_SUB= yes SUB_FILES= pkg-message @@ -44,16 +44,15 @@ MAKE_JOBS_UNSAFE=yes -OPTIONS_DEFINE= DIRTY DTRACE GS HIPE JAVA KQUEUE MANPAGES NATIVE ODBC OPENSSL SCTP SMP THREADS WX -OPTIONS_DEFAULT=DTRACE HIPE KQUEUE MANPAGES OPENSSL SCTP SMP THREADS +OPTIONS_DEFINE= DIRTY DTRACE GS HIPE JAVA KQUEUE MANPAGES NATIVE ODBC OPENSSL SCTP THREADS WX +OPTIONS_DEFAULT=DIRTY DTRACE HIPE KQUEUE MANPAGES OPENSSL SCTP THREADS -DIRTY_DESC= Enable Dirty schedulers (experimental) +DIRTY_DESC= Enable Dirty schedulers GS_DESC= Enable GS application (deprecated) HIPE_DESC= Build native HiPE compiler KQUEUE_DESC= Enable Kernel Poll (kqueue) support NATIVE_DESC= Enable native libraries SCTP_DESC= Enable SCTP support -SMP_DESC= Enable SMP support WX_DESC= Enable WX application NATIVE_IMPLIES= HIPE @@ -62,23 +61,27 @@ OPTIONS_EXCLUDE+= DTRACE .endif +# If you run Erlang and get a message resembling "WARNING: number of +# probes fixed does not match the number of defined probes (54 != 132, +# respectively)" you probably misconfigured DTrace in some way. + OPTIONS_EXCLUDE_DragonFly= HIPE NATIVE SCTP +OPTIONS_EXCLUDE_FreeBSD_10= DTRACE # ld(1) fails to link probes: missing __dtrace_erlang___* symbols OPTIONS_EXCLUDE_aarch64= DTRACE OPTIONS_EXCLUDE_armv6= DTRACE OPTIONS_EXCLUDE_armv7= DTRACE OPTIONS_EXCLUDE_i386= DTRACE +OPENSSL_VARS= BROKEN_SSL=openssl-devel + GNU_CONFIGURE= yes LDFLAGS+= -L${LOCALBASE}/lib USES= gmake ncurses perl5 USE_PERL5= build USE_RC_SUBR= epmd +CONFIGURE_ENABLE= smp-support -# If you run Erlang and get a message resembling "WARNING: number of -# probes fixed does not match the number of defined probes (54 != 132, -# respectively)" you probably misconfigured DTrace in some way. - DIRTY_CONFIGURE_ENABLE= dirty-schedulers DTRACE_CFLAGS= -fno-omit-frame-pointer DTRACE_CONFIGURE_WITH= dynamic-trace=dtrace @@ -95,14 +98,13 @@ OPENSSL_CONFIGURE_WITH= ssl=${OPENSSLBASE} OPENSSL_USES= ssl SCTP_CONFIGURE_ENABLE= sctp -SMP_CONFIGURE_ENABLE= smp-support THREADS_CONFIGURE_ENABLE= threads WX_CONFIGURE_WITH= wx-config=${WX_CONFIG} WX_VARS= USE_WX=2.8+ WX_COMPS="wx contrib" USE_GL="gl glu" -EI_VSN= 3.9.3 -SNMP_VSN= 5.2.5 -TOOLS_VSN= 2.9.1 +EI_VSN= 3.10.2.1 +SNMP_VSN= 5.2.11 +TOOLS_VSN= 2.11.2 ERLANG_MAN= otp_doc_man_${ERLANG_REL}.tar.gz @@ -110,7 +112,7 @@ .include -.if ${OPSYS} == FreeBSD +.if ${OPSYS} == FreeBSD && ${OSVERSION} > 1100000 CFLAGS+= -DMAP_NORESERVE=0 .endif @@ -135,8 +137,9 @@ @cd ${WRKSRC} && ${MAKE_CMD} clean post-install: - ${LN} -sf ../lib/${ERLANG_LIB}/lib/erl_interface-${EI_VSN}/bin/erl_call ${STAGEDIR}${PREFIX}/bin/erl_call - ${LN} -sf ../lib/${ERLANG_LIB}/lib/snmp-${SNMP_VSN}/bin/snmpc ${STAGEDIR}${PREFIX}/bin/snmpc + ${RLN} ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/erl_interface-${EI_VSN}/bin/erl_call ${STAGEDIR}${PREFIX}/bin/erl_call + ${RLN} ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/snmp-${SNMP_VSN}/bin/snmpc ${STAGEDIR}${PREFIX}/bin/snmpc + ${RLN} ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/bin/typer ${STAGEDIR}${PREFIX}/bin/typer # The man-pages are put (in spite of FreeBSD's port convention) in a private # subdir. This is to avoid cluttering up the man page name space. Also the @@ -144,7 +147,7 @@ # actual system man pages. (erl.1 and epmd.1 perhaps being the exception). post-install-MANPAGES-on: - @${ECHO_CMD} "MANPATH ${PREFIX}/lib/erlang/man" > ${WRKDIR}/erlang.conf + @${ECHO_CMD} "MANPATH ${PREFIX}/lib/${ERLANG_LIB}/man" > ${WRKDIR}/erlang.conf ${INSTALL_DATA} ${WRKDIR}/erlang.conf ${STAGEDIR}${PREFIX}/etc/man.d/erlang.conf for SECTION in 1 3 4 6 7; do \ ${TAR} --unlink -xzpf ${DISTDIR}/${DIST_SUBDIR}/${ERLANG_MAN} \ @@ -154,21 +157,21 @@ ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/man/cat? post-install-GS-off: - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/gs-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/gs-* post-install-JAVA-off: - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/jinterface-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/jinterface-* post-install-ODBC-off: - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/odbc-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/odbc-* post-install-OPENSSL-off: - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/crypto-* - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/ssh-* - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/ssl-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/crypto-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/ssh-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/ssl-* post-install-WX-off: - ${RM} -r ${STAGEDIR}${PREFIX}/lib/erlang/lib/wx-* + ${RM} -r ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/lib/wx-* post-stage: ${FIND} ${STAGEDIR}${PREFIX}/lib/${ERLANG_LIB}/* -type d -empty -delete Index: lang/erlang/distinfo =================================================================== --- lang/erlang/distinfo +++ lang/erlang/distinfo @@ -1,43 +1,41 @@ -TIMESTAMP = 1540477142 -SHA256 (erlang/otp_src_19.3.tar.gz) = fe4a00651db39b8542b04530a48d24b2f2e7e0b77cbe93d728c9f05325bdfe83 -SIZE (erlang/otp_src_19.3.tar.gz) = 68510871 -SHA256 (erlang/preloaded-19.3.6.12.tar.gz) = 5046641cea7c9f56ca46674342cde1bf7bc9959d9ed5cef3b55fb725d4d6a4d6 -SIZE (erlang/preloaded-19.3.6.12.tar.gz) = 330073 -SHA256 (erlang/otp_doc_man_19.3.tar.gz) = f8192ffdd7367083c055695eeddf198155da43dcc221aed1d870d1e3871dd95c -SIZE (erlang/otp_doc_man_19.3.tar.gz) = 1410781 -SHA256 (erlang/patch-otp-19.3.1) = 2373f890516b58ae006812ba5f15e4af1f8820be98230011b8cd8b345f51dedd -SIZE (erlang/patch-otp-19.3.1) = 30225 -SHA256 (erlang/patch-otp-19.3.2) = 21c56ac188177985c9db11c7066dcee0f7370760da3e15a0d03c235bd2a2cb2a -SIZE (erlang/patch-otp-19.3.2) = 6290 -SHA256 (erlang/patch-otp-19.3.3) = dbe1cab750a3339c3755db27b800e53232519c84a304bd562263ffb060afab55 -SIZE (erlang/patch-otp-19.3.3) = 12525 -SHA256 (erlang/patch-otp-19.3.4) = 02437ac753932f913209102e8cb249a264b774833bfda8c1532b338af60ff8af -SIZE (erlang/patch-otp-19.3.4) = 13504 -SHA256 (erlang/patch-otp-19.3.5) = 5755da205004ae7e724390958db9ecc737d99ec14e0d14abcec8b8603ea6ece5 -SIZE (erlang/patch-otp-19.3.5) = 44563 -SHA256 (erlang/patch-otp-19.3.6) = ee1b5f0fd64db3322031c38722aee96a8ee35aaac454f430c829446a198f6534 -SIZE (erlang/patch-otp-19.3.6) = 13073 -SHA256 (erlang/patch-otp-19.3.6.1) = 65a6de8533ccaeec81bebcee1d6dde08713533e411a123d5ac27141967581600 -SIZE (erlang/patch-otp-19.3.6.1) = 28956 -SHA256 (erlang/patch-otp-19.3.6.2) = 3d12059e02ef31ae6e5dd97820b0d51c4ab0e7304cbaeddeb856fb2097da87fc -SIZE (erlang/patch-otp-19.3.6.2) = 14653 -SHA256 (erlang/patch-otp-19.3.6.3) = 77faeedb827c6793b183b33d161e5b3c4467c3ec9053840442d7fd187cfbfa78 -SIZE (erlang/patch-otp-19.3.6.3) = 24500 -SHA256 (erlang/patch-otp-19.3.6.4) = 662dab96ceed33b4b29c835d82bf6b4f8feaa8f75287f43f3ae7e64badb16255 -SIZE (erlang/patch-otp-19.3.6.4) = 10622 -SHA256 (erlang/patch-otp-19.3.6.5) = f830bd6328f2a9e8cb70750bb7e91a8db045b5fc13fe854710fdffce158788d1 -SIZE (erlang/patch-otp-19.3.6.5) = 13254 -SHA256 (erlang/patch-otp-19.3.6.6) = 6bb2da20ad241e86f847ba351dce23ecf5a82f0e6df8eceb83fe2ed4b05d8d2f -SIZE (erlang/patch-otp-19.3.6.6) = 12542 -SHA256 (erlang/patch-otp-19.3.6.7) = 34bed4599ff19c2bed944dff83e9b640fbf18b6b3a21b42d92c3697e4c50d810 -SIZE (erlang/patch-otp-19.3.6.7) = 11631 -SHA256 (erlang/patch-otp-19.3.6.8) = c3ea86434fe1a4d7baabe17d2e7134065bb19fef7d384a6e289e55a2288a6b61 -SIZE (erlang/patch-otp-19.3.6.8) = 4936 -SHA256 (erlang/patch-otp-19.3.6.9) = c0a243be5693752dc35b0fbe7622618903f130ad944bfa160248ea0e13a6148a -SIZE (erlang/patch-otp-19.3.6.9) = 6989 -SHA256 (erlang/patch-otp-19.3.6.10) = 98968885a53ab75a6abeeba584dc26297d01234866d2797d6c16f1bdd89d72c3 -SIZE (erlang/patch-otp-19.3.6.10) = 12767 -SHA256 (erlang/patch-otp-19.3.6.11) = a79f5a3fe737df191c9fa2eea3c9961b94be4d4d44620b1bed2266f1874f3669 -SIZE (erlang/patch-otp-19.3.6.11) = 4886 -SHA256 (erlang/patch-otp-19.3.6.12) = ea1ef7dba18d4a22d43008c7b9e7664c90887ae42fb87f31974c17b8520f3f0f -SIZE (erlang/patch-otp-19.3.6.12) = 5433 +TIMESTAMP = 1549837436 +SHA256 (erlang/otp_src_20.3.tar.gz) = 4e19e6c403d5255531c0b870f19511c8b8e3b080618e4f9efcb44d905935b2a1 +SIZE (erlang/otp_src_20.3.tar.gz) = 88170904 +SHA256 (erlang/preloaded-20.3.8.9.tar.gz) = 6501a0c124b9aa22aad8dc709a722f902f4868aff3ef8a0763afe7c315170943 +SIZE (erlang/preloaded-20.3.8.9.tar.gz) = 334977 +SHA256 (erlang/otp_doc_man_20.3.tar.gz) = 17e0b2f94f11576a12526614a906ecad629b8804c25e6c18523f7c4346607112 +SIZE (erlang/otp_doc_man_20.3.tar.gz) = 1339710 +SHA256 (erlang/patch-otp-20.3.1) = 3d43c6ecb867c64318466eb7adeb8953669cb092bb4b43bbe1b51cfb8d640ee8 +SIZE (erlang/patch-otp-20.3.1) = 5316 +SHA256 (erlang/patch-otp-20.3.2) = b4fa80bab29f1382510ad5b3fc66fd5d1aba35bb48ce390763eb05c88a3e44b1 +SIZE (erlang/patch-otp-20.3.2) = 8201 +SHA256 (erlang/patch-otp-20.3.3) = 8049bb676ac703bab6036f2682ca8cd11b787fd3f94aa4f294ec2c0d37c2dbc9 +SIZE (erlang/patch-otp-20.3.3) = 20074 +SHA256 (erlang/patch-otp-20.3.4) = d76846ea1a2adf62d48781416628297a116331d130f2b5dc66770ed0132c9496 +SIZE (erlang/patch-otp-20.3.4) = 28465 +SHA256 (erlang/patch-otp-20.3.5) = 9f3da1a6c1cec2c30934d088fa101611553590139db3e89433cf101058d60029 +SIZE (erlang/patch-otp-20.3.5) = 15964 +SHA256 (erlang/patch-otp-20.3.6) = edcfba7dd5efee0f0739c919aea542bad33b788b7b2fef212983f686401dda39 +SIZE (erlang/patch-otp-20.3.6) = 10837 +SHA256 (erlang/patch-otp-20.3.7) = 3b55f718ef9d863b7616f22f9a90c01766f9d42a69cbfb5fe949d37aec6ac341 +SIZE (erlang/patch-otp-20.3.7) = 19324 +SHA256 (erlang/patch-otp-20.3.8) = ea17d780d1e14ac7419ab57b7393d493124cd2b32da248bbc273e71e87496a92 +SIZE (erlang/patch-otp-20.3.8) = 13102 +SHA256 (erlang/patch-otp-20.3.8.1) = 8c04290f5a66b03501b52a1680838a9f4bd25bcc3a8550a9ce5f7e9ae990916d +SIZE (erlang/patch-otp-20.3.8.1) = 27058 +SHA256 (erlang/patch-otp-20.3.8.2) = aac9c7b3c93609cc5cf9d3cffa92254da8e0aa22266620ab1d8a4324dfc7f259 +SIZE (erlang/patch-otp-20.3.8.2) = 24822 +SHA256 (erlang/patch-otp-20.3.8.3) = da2a425c0d443199cb5a31826184435334d92e3dad0c502ee4376227c61ed186 +SIZE (erlang/patch-otp-20.3.8.3) = 146618 +SHA256 (erlang/patch-otp-20.3.8.4) = bdd8437c9b4e4f7dec52c3a281dcb85f97c28ed75a868655bf6fe411c6df1c25 +SIZE (erlang/patch-otp-20.3.8.4) = 8486 +SHA256 (erlang/patch-otp-20.3.8.5) = aab67a4a4e122d6f93684c50e7255d6b7cf482c4ef3d9c41f0e4c5db941bcb44 +SIZE (erlang/patch-otp-20.3.8.5) = 35434 +SHA256 (erlang/patch-otp-20.3.8.6) = 5fc321ea92e05dcd4bcbce516d550de97ade4518a4da3c7e50579db980be59ca +SIZE (erlang/patch-otp-20.3.8.6) = 10965 +SHA256 (erlang/patch-otp-20.3.8.7) = 62aec37d1ef5db75324121dd0178a045becbd225b9bb2126f2b27a03ed19733f +SIZE (erlang/patch-otp-20.3.8.7) = 68400 +SHA256 (erlang/patch-otp-20.3.8.8) = c9d0364c5bdf3f531de7701a1d2f25a7949b3cb2c0378c08db6a3383cd0c7fa9 +SIZE (erlang/patch-otp-20.3.8.8) = 14280 +SHA256 (erlang/patch-otp-20.3.8.9) = 8e7cf6057eba34c2cebfd23f4466824ac886249d7fcbeacc2c844771c0b9206f +SIZE (erlang/patch-otp-20.3.8.9) = 4425 Index: lang/erlang/files/patch-OpenSSL-1.1-a =================================================================== --- lang/erlang/files/patch-OpenSSL-1.1-a +++ /dev/null @@ -1,1083 +0,0 @@ -From 458c012e18eda87803ef356221d68955f4b8012d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= -Date: Thu, 24 Nov 2016 11:57:55 +0100 -Subject: [PATCH] Support OpenSSL 1.1.0 - ---- - lib/crypto/c_src/crypto.c | 486 +++++++++++++++++++++++++------------ - lib/crypto/c_src/crypto_callback.c | 6 +- - lib/crypto/c_src/crypto_callback.h | 13 +- - 3 files changed, 345 insertions(+), 160 deletions(-) - -diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c -index 554aaf7587d..0031f9b9620 100644 ---- lib/crypto/c_src/crypto.c.orig 2018-02-14 17:16:13.270476000 +0100 -+++ lib/crypto/c_src/crypto.c 2018-02-14 18:17:49.422680000 +0100 -@@ -64,56 +64,55 @@ - /* Helper macro to construct a OPENSSL_VERSION_NUMBER. - * See openssl/opensslv.h - */ --#define OpenSSL_version(MAJ, MIN, FIX, P) \ -+#define PACKED_OPENSSL_VERSION(MAJ, MIN, FIX, P) \ - ((((((((MAJ << 8) | MIN) << 8 ) | FIX) << 8) | (P-'a'+1)) << 4) | 0xf) - --#define OpenSSL_version_plain(MAJ, MIN, FIX) \ -- OpenSSL_version(MAJ,MIN,FIX,('a'-1)) -- -+#define PACKED_OPENSSL_VERSION_PLAIN(MAJ, MIN, FIX) \ -+ PACKED_OPENSSL_VERSION(MAJ,MIN,FIX,('a'-1)) - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - #include - #endif - - #include "crypto_callback.h" - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \ -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(0,9,8) \ - && !defined(OPENSSL_NO_SHA224) && defined(NID_sha224) \ - && !defined(OPENSSL_NO_SHA256) /* disabled like this in my sha.h (?) */ - # define HAVE_SHA224 - #endif --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \ -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(0,9,8) \ - && !defined(OPENSSL_NO_SHA256) && defined(NID_sha256) - # define HAVE_SHA256 - #endif --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \ -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(0,9,8) \ - && !defined(OPENSSL_NO_SHA384) && defined(NID_sha384)\ - && !defined(OPENSSL_NO_SHA512) /* disabled like this in my sha.h (?) */ - # define HAVE_SHA384 - #endif --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \ -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(0,9,8) \ - && !defined(OPENSSL_NO_SHA512) && defined(NID_sha512) - # define HAVE_SHA512 - #endif --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,7,'e') -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION(0,9,7,'e') - # define HAVE_DES_ede3_cfb_encrypt - #endif - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,8,'o') \ -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION(0,9,8,'o') \ - && !defined(OPENSSL_NO_EC) \ - && !defined(OPENSSL_NO_ECDH) \ - && !defined(OPENSSL_NO_ECDSA) - # define HAVE_EC - #endif - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,8,'c') -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION(0,9,8,'c') - # define HAVE_AES_IGE - #endif - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,1) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,1) - # define HAVE_EVP_AES_CTR - # define HAVE_GCM --# if OPENSSL_VERSION_NUMBER < OpenSSL_version(1,0,1,'d') -+# if OPENSSL_VERSION_NUMBER < PACKED_OPENSSL_VERSION(1,0,1,'d') - # define HAVE_GCM_EVP_DECRYPT_BUG - # endif - #endif -@@ -122,7 +121,7 @@ - # define HAVE_CHACHA20_POLY1305 - #endif - --#if OPENSSL_VERSION_NUMBER <= OpenSSL_version(0,9,8,'l') -+#if OPENSSL_VERSION_NUMBER <= PACKED_OPENSSL_VERSION(0,9,8,'l') - # define HAVE_ECB_IVEC_BUG - #endif - -@@ -145,6 +144,7 @@ - - #endif - -+ - #ifdef VALGRIND - # include - -@@ -213,6 +213,122 @@ do { \ - } \ - } while (0) - -+#if OPENSSL_VERSION_NUMBER < PACKED_OPENSSL_VERSION_PLAIN(1,1,0) -+ -+/* -+ * In OpenSSL 1.1.0, most structs are opaque. That means that -+ * the structs cannot be allocated as automatic variables on the -+ * C stack (because the size is unknown) and that it is necessary -+ * to use access functions. -+ * -+ * For backward compatibility to previous versions of OpenSSL, define -+ * on our versions of the new functions defined in 1.1.0 here, so that -+ * we don't have to sprinkle ifdefs throughout the code. -+ */ -+ -+static HMAC_CTX *HMAC_CTX_new(void); -+static void HMAC_CTX_free(HMAC_CTX *ctx); -+ -+static HMAC_CTX *HMAC_CTX_new() -+{ -+ HMAC_CTX *ctx = CRYPTO_malloc(sizeof(HMAC_CTX), __FILE__, __LINE__); -+ HMAC_CTX_init(ctx); -+ return ctx; -+} -+ -+static void HMAC_CTX_free(HMAC_CTX *ctx) -+{ -+ HMAC_CTX_cleanup(ctx); -+ return CRYPTO_free(ctx); -+} -+ -+#define EVP_MD_CTX_new() EVP_MD_CTX_create() -+#define EVP_MD_CTX_free(ctx) EVP_MD_CTX_destroy(ctx) -+ -+static INLINE int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -+static INLINE int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -+static INLINE int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -+ -+static INLINE int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) -+{ -+ r->n = n; -+ r->e = e; -+ r->d = d; -+ return 1; -+} -+ -+static INLINE int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q) -+{ -+ r->p = p; -+ r->q = q; -+ return 1; -+} -+ -+static INLINE int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp) -+{ -+ r->dmp1 = dmp1; -+ r->dmq1 = dmq1; -+ r->iqmp = iqmp; -+ return 1; -+} -+ -+static INLINE int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -+static INLINE int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -+ -+static INLINE int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key) -+{ -+ d->pub_key = pub_key; -+ d->priv_key = priv_key; -+ return 1; -+} -+ -+static INLINE int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g) -+{ -+ d->p = p; -+ d->q = q; -+ d->g = g; -+ return 1; -+} -+ -+static INLINE int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -+static INLINE int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -+static INLINE void DH_get0_pqg(const DH *dh, -+ const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -+static INLINE void DH_get0_key(const DH *dh, -+ const BIGNUM **pub_key, const BIGNUM **priv_key); -+ -+static INLINE int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key) -+{ -+ dh->pub_key = pub_key; -+ dh->priv_key = priv_key; -+ return 1; -+} -+ -+static INLINE int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g) -+{ -+ dh->p = p; -+ dh->q = q; -+ dh->g = g; -+ return 1; -+} -+ -+static INLINE void -+DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) -+{ -+ *p = dh->p; -+ *q = dh->q; -+ *g = dh->g; -+} -+ -+static INLINE void -+DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key) -+{ -+ *pub_key = dh->pub_key; -+ *priv_key = dh->priv_key; -+} -+ -+#endif /* End of compatibility definitions. */ -+ - /* NIF interface declarations */ - static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info); - static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info); -@@ -399,7 +515,7 @@ struct hmac_context - { - ErlNifMutex* mtx; - int alive; -- HMAC_CTX ctx; -+ HMAC_CTX* ctx; - }; - static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context*); - -@@ -526,18 +642,24 @@ static struct cipher_type_t* get_cipher_ - #define PRINTF_ERR1(FMT,A1) - #define PRINTF_ERR2(FMT,A1,A2) - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - /* Define resource types for OpenSSL context structures. */ - static ErlNifResourceType* evp_md_ctx_rtype; --static void evp_md_ctx_dtor(ErlNifEnv* env, EVP_MD_CTX* ctx) { -- EVP_MD_CTX_cleanup(ctx); -+struct evp_md_ctx { -+ EVP_MD_CTX* ctx; -+}; -+static void evp_md_ctx_dtor(ErlNifEnv* env, struct evp_md_ctx *ctx) { -+ EVP_MD_CTX_free(ctx->ctx); - } - #endif - - #ifdef HAVE_EVP_AES_CTR - static ErlNifResourceType* evp_cipher_ctx_rtype; --static void evp_cipher_ctx_dtor(ErlNifEnv* env, EVP_CIPHER_CTX* ctx) { -- EVP_CIPHER_CTX_cleanup(ctx); -+struct evp_cipher_ctx { -+ EVP_CIPHER_CTX* ctx; -+}; -+static void evp_cipher_ctx_dtor(ErlNifEnv* env, struct evp_cipher_ctx* ctx) { -+ EVP_CIPHER_CTX_free(ctx->ctx); - } - #endif - -@@ -625,7 +747,7 @@ static int initialize(ErlNifEnv* env, ER - PRINTF_ERR0("CRYPTO: Could not open resource type 'hmac_context'"); - return __LINE__; - } --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - evp_md_ctx_rtype = enif_open_resource_type(env, NULL, "EVP_MD_CTX", - (ErlNifResourceDtor*) evp_md_ctx_dtor, - ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER, -@@ -937,12 +1059,12 @@ static ERL_NIF_TERM hash_nif(ErlNifEnv* - return ret; - } - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - - static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Type) */ - struct digest_type_t *digp = NULL; -- EVP_MD_CTX *ctx; -+ struct evp_md_ctx *ctx; - ERL_NIF_TERM ret; - - digp = get_digest_type(argv[0]); -@@ -953,8 +1075,9 @@ static ERL_NIF_TERM hash_init_nif(ErlNif - return atom_notsup; - } - -- ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(EVP_MD_CTX)); -- if (!EVP_DigestInit(ctx, digp->md.p)) { -+ ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(struct evp_md_ctx)); -+ ctx->ctx = EVP_MD_CTX_new(); -+ if (!EVP_DigestInit(ctx->ctx, digp->md.p)) { - enif_release_resource(ctx); - return atom_notsup; - } -@@ -964,7 +1087,7 @@ static ERL_NIF_TERM hash_init_nif(ErlNif - } - static ERL_NIF_TERM hash_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Context, Data) */ -- EVP_MD_CTX *ctx, *new_ctx; -+ struct evp_md_ctx *ctx, *new_ctx; - ErlNifBinary data; - ERL_NIF_TERM ret; - -@@ -973,9 +1096,10 @@ static ERL_NIF_TERM hash_update_nif(ErlN - return enif_make_badarg(env); - } - -- new_ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(EVP_MD_CTX)); -- if (!EVP_MD_CTX_copy(new_ctx, ctx) || -- !EVP_DigestUpdate(new_ctx, data.data, data.size)) { -+ new_ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(struct evp_md_ctx)); -+ new_ctx->ctx = EVP_MD_CTX_new(); -+ if (!EVP_MD_CTX_copy(new_ctx->ctx, ctx->ctx) || -+ !EVP_DigestUpdate(new_ctx->ctx, data.data, data.size)) { - enif_release_resource(new_ctx); - return atom_notsup; - } -@@ -987,7 +1111,8 @@ static ERL_NIF_TERM hash_update_nif(ErlN - } - static ERL_NIF_TERM hash_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Context) */ -- EVP_MD_CTX *ctx, new_ctx; -+ struct evp_md_ctx *ctx; -+ EVP_MD_CTX *new_ctx; - ERL_NIF_TERM ret; - unsigned ret_size; - -@@ -995,16 +1120,19 @@ static ERL_NIF_TERM hash_final_nif(ErlNi - return enif_make_badarg(env); - } - -- ret_size = (unsigned)EVP_MD_CTX_size(ctx); -+ ret_size = (unsigned)EVP_MD_CTX_size(ctx->ctx); - ASSERT(0 < ret_size && ret_size <= EVP_MAX_MD_SIZE); - -- if (!EVP_MD_CTX_copy(&new_ctx, ctx) || -- !EVP_DigestFinal(&new_ctx, -+ new_ctx = EVP_MD_CTX_new(); -+ if (!EVP_MD_CTX_copy(new_ctx, ctx->ctx) || -+ !EVP_DigestFinal(new_ctx, - enif_make_new_binary(env, ret_size, &ret), - &ret_size)) { -+ EVP_MD_CTX_free(new_ctx); - return atom_notsup; - } -- ASSERT(ret_size == (unsigned)EVP_MD_CTX_size(ctx)); -+ EVP_MD_CTX_free(new_ctx); -+ ASSERT(ret_size == (unsigned)EVP_MD_CTX_size(ctx->ctx)); - - return ret; - } -@@ -1288,7 +1416,7 @@ static ERL_NIF_TERM hmac_nif(ErlNifEnv* - static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context *obj) - { - if (obj->alive) { -- HMAC_CTX_cleanup(&obj->ctx); -+ HMAC_CTX_free(obj->ctx); - obj->alive = 0; - } - enif_mutex_destroy(obj->mtx); -@@ -1313,15 +1441,16 @@ static ERL_NIF_TERM hmac_init_nif(ErlNif - obj = enif_alloc_resource(hmac_context_rtype, sizeof(struct hmac_context)); - obj->mtx = enif_mutex_create("crypto.hmac"); - obj->alive = 1; --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+ obj->ctx = HMAC_CTX_new(); -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - // Check the return value of HMAC_Init: it may fail in FIPS mode - // for disabled algorithms -- if (!HMAC_Init(&obj->ctx, key.data, key.size, digp->md.p)) { -+ if (!HMAC_Init_ex(obj->ctx, key.data, key.size, digp->md.p, NULL)) { - enif_release_resource(obj); - return atom_notsup; - } - #else -- HMAC_Init(&obj->ctx, key.data, key.size, digp->md.p); -+ HMAC_Init_ex(obj->ctx, key.data, key.size, digp->md.p, NULL); - #endif - - ret = enif_make_resource(env, obj); -@@ -1343,7 +1472,7 @@ static ERL_NIF_TERM hmac_update_nif(ErlN - enif_mutex_unlock(obj->mtx); - return enif_make_badarg(env); - } -- HMAC_Update(&obj->ctx, data.data, data.size); -+ HMAC_Update(obj->ctx, data.data, data.size); - enif_mutex_unlock(obj->mtx); - - CONSUME_REDS(env,data); -@@ -1370,8 +1499,8 @@ static ERL_NIF_TERM hmac_final_nif(ErlNi - return enif_make_badarg(env); - } - -- HMAC_Final(&obj->ctx, mac_buf, &mac_len); -- HMAC_CTX_cleanup(&obj->ctx); -+ HMAC_Final(obj->ctx, mac_buf, &mac_len); -+ HMAC_CTX_free(obj->ctx); - obj->alive = 0; - enif_mutex_unlock(obj->mtx); - -@@ -1390,7 +1519,7 @@ static ERL_NIF_TERM block_crypt_nif(ErlN - struct cipher_type_t *cipherp = NULL; - const EVP_CIPHER *cipher; - ErlNifBinary key, ivec, text; -- EVP_CIPHER_CTX ctx; -+ EVP_CIPHER_CTX* ctx; - ERL_NIF_TERM ret; - unsigned char *out; - int ivec_size, out_size = 0; -@@ -1438,30 +1567,30 @@ static ERL_NIF_TERM block_crypt_nif(ErlN - - out = enif_make_new_binary(env, text.size, &ret); - -- EVP_CIPHER_CTX_init(&ctx); -- if (!EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, NULL, -+ ctx = EVP_CIPHER_CTX_new(); -+ if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, - (argv[argc - 1] == atom_true)) || -- !EVP_CIPHER_CTX_set_key_length(&ctx, key.size) || -+ !EVP_CIPHER_CTX_set_key_length(ctx, key.size) || - !(EVP_CIPHER_type(cipher) != NID_rc2_cbc || -- EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_SET_RC2_KEY_BITS, key.size * 8, NULL)) || -- !EVP_CipherInit_ex(&ctx, NULL, NULL, -+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC2_KEY_BITS, key.size * 8, NULL)) || -+ !EVP_CipherInit_ex(ctx, NULL, NULL, - key.data, ivec_size ? ivec.data : NULL, -1) || -- !EVP_CIPHER_CTX_set_padding(&ctx, 0)) { -+ !EVP_CIPHER_CTX_set_padding(ctx, 0)) { - -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - return enif_raise_exception(env, atom_notsup); - } - - if (text.size > 0 && /* OpenSSL 0.9.8h asserts text.size > 0 */ -- (!EVP_CipherUpdate(&ctx, out, &out_size, text.data, text.size) -+ (!EVP_CipherUpdate(ctx, out, &out_size, text.data, text.size) - || (ASSERT(out_size == text.size), 0) -- || !EVP_CipherFinal_ex(&ctx, out + out_size, &out_size))) { -+ || !EVP_CipherFinal_ex(ctx, out + out_size, &out_size))) { - -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - return enif_raise_exception(env, atom_notsup); - } - ASSERT(out_size == 0); -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - CONSUME_REDS(env, text); - - return ret; -@@ -1563,7 +1692,7 @@ static ERL_NIF_TERM aes_ctr_encrypt(ErlN - ErlNifBinary key, ivec, text; - #ifdef HAVE_EVP_AES_CTR - const EVP_CIPHER *cipher; -- EVP_CIPHER_CTX ctx; -+ struct evp_cipher_ctx ctx; - unsigned char *out; - int outl = 0; - #else -@@ -1621,7 +1750,7 @@ static ERL_NIF_TERM aes_ctr_encrypt(ErlN - static ERL_NIF_TERM aes_ctr_stream_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Key, IVec) */ - ErlNifBinary key_bin, ivec_bin; -- EVP_CIPHER_CTX *ctx; -+ struct evp_cipher_ctx *ctx; - const EVP_CIPHER *cipher; - ERL_NIF_TERM ret; - -@@ -1639,18 +1768,18 @@ static ERL_NIF_TERM aes_ctr_stream_init( - default: return enif_make_badarg(env); - } - -- ctx = enif_alloc_resource(evp_cipher_ctx_rtype, sizeof(EVP_CIPHER_CTX)); -- EVP_CIPHER_CTX_init(ctx); -- EVP_CipherInit_ex(ctx, cipher, NULL, -+ ctx = enif_alloc_resource(evp_cipher_ctx_rtype, sizeof(struct evp_cipher_ctx)); -+ ctx->ctx = EVP_CIPHER_CTX_new(); -+ EVP_CipherInit_ex(ctx->ctx, cipher, NULL, - key_bin.data, ivec_bin.data, 1); -- EVP_CIPHER_CTX_set_padding(ctx, 0); -+ EVP_CIPHER_CTX_set_padding(ctx->ctx, 0); - ret = enif_make_resource(env, ctx); - enif_release_resource(ctx); - return ret; - } - static ERL_NIF_TERM aes_ctr_stream_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Context, Data) */ -- EVP_CIPHER_CTX *ctx, *new_ctx; -+ struct evp_cipher_ctx *ctx, *new_ctx; - ErlNifBinary data_bin; - ERL_NIF_TERM ret, cipher_term; - unsigned char *out; -@@ -1660,11 +1789,11 @@ static ERL_NIF_TERM aes_ctr_stream_encry - || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) { - return enif_make_badarg(env); - } -- new_ctx = enif_alloc_resource(evp_cipher_ctx_rtype, sizeof(EVP_CIPHER_CTX)); -- EVP_CIPHER_CTX_init(new_ctx); -- EVP_CIPHER_CTX_copy(new_ctx, ctx); -+ new_ctx = enif_alloc_resource(evp_cipher_ctx_rtype, sizeof(struct evp_cipher_ctx)); -+ new_ctx->ctx = EVP_CIPHER_CTX_new(); -+ EVP_CIPHER_CTX_copy(new_ctx->ctx, ctx->ctx); - out = enif_make_new_binary(env, data_bin.size, &cipher_term); -- EVP_CipherUpdate(new_ctx, out, &outl, data_bin.data, data_bin.size); -+ EVP_CipherUpdate(new_ctx->ctx, out, &outl, data_bin.data, data_bin.size); - ASSERT(outl == data_bin.size); - - ret = enif_make_tuple2(env, enif_make_resource(env, new_ctx), cipher_term); -@@ -1735,7 +1864,7 @@ static ERL_NIF_TERM aes_ctr_stream_encry - static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Key,Iv,AAD,In) */ - #if defined(HAVE_GCM) -- EVP_CIPHER_CTX ctx; -+ EVP_CIPHER_CTX *ctx; - const EVP_CIPHER *cipher = NULL; - ErlNifBinary key, iv, aad, in; - unsigned int tag_len; -@@ -1759,40 +1888,40 @@ static ERL_NIF_TERM aes_gcm_encrypt(ErlN - else if (key.size == 32) - cipher = EVP_aes_256_gcm(); - -- EVP_CIPHER_CTX_init(&ctx); -+ ctx = EVP_CIPHER_CTX_new(); - -- if (EVP_EncryptInit_ex(&ctx, cipher, NULL, NULL, NULL) != 1) -+ if (EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1) - goto out_err; - -- EVP_CIPHER_CTX_set_padding(&ctx, 0); -+ EVP_CIPHER_CTX_set_padding(ctx, 0); - -- if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size, NULL) != 1) -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size, NULL) != 1) - goto out_err; -- if (EVP_EncryptInit_ex(&ctx, NULL, NULL, key.data, iv.data) != 1) -+ if (EVP_EncryptInit_ex(ctx, NULL, NULL, key.data, iv.data) != 1) - goto out_err; -- if (EVP_EncryptUpdate(&ctx, NULL, &len, aad.data, aad.size) != 1) -+ if (EVP_EncryptUpdate(ctx, NULL, &len, aad.data, aad.size) != 1) - goto out_err; - - outp = enif_make_new_binary(env, in.size, &out); - -- if (EVP_EncryptUpdate(&ctx, outp, &len, in.data, in.size) != 1) -+ if (EVP_EncryptUpdate(ctx, outp, &len, in.data, in.size) != 1) - goto out_err; -- if (EVP_EncryptFinal_ex(&ctx, outp+len, &len) != 1) -+ if (EVP_EncryptFinal_ex(ctx, outp+len, &len) != 1) - goto out_err; - - tagp = enif_make_new_binary(env, tag_len, &out_tag); - -- if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_GET_TAG, tag_len, tagp) != 1) -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, tag_len, tagp) != 1) - goto out_err; - -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - - CONSUME_REDS(env, in); - - return enif_make_tuple2(env, out, out_tag); - - out_err: -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - return atom_error; - - #else -@@ -1805,7 +1934,7 @@ static ERL_NIF_TERM aes_gcm_decrypt(ErlN - #if defined(HAVE_GCM_EVP_DECRYPT_BUG) - return aes_gcm_decrypt_NO_EVP(env, argc, argv); - #elif defined(HAVE_GCM) -- EVP_CIPHER_CTX ctx; -+ EVP_CIPHER_CTX *ctx; - const EVP_CIPHER *cipher = NULL; - ErlNifBinary key, iv, aad, in, tag; - unsigned char *outp; -@@ -1828,34 +1957,34 @@ static ERL_NIF_TERM aes_gcm_decrypt(ErlN - else if (key.size == 32) - cipher = EVP_aes_256_gcm(); - -- EVP_CIPHER_CTX_init(&ctx); -+ ctx = EVP_CIPHER_CTX_new(); - -- if (EVP_DecryptInit_ex(&ctx, cipher, NULL, NULL, NULL) != 1) -+ if (EVP_DecryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1) - goto out_err; -- if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size, NULL) != 1) -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size, NULL) != 1) - goto out_err; -- if (EVP_DecryptInit_ex(&ctx, NULL, NULL, key.data, iv.data) != 1) -+ if (EVP_DecryptInit_ex(ctx, NULL, NULL, key.data, iv.data) != 1) - goto out_err; -- if (EVP_DecryptUpdate(&ctx, NULL, &len, aad.data, aad.size) != 1) -+ if (EVP_DecryptUpdate(ctx, NULL, &len, aad.data, aad.size) != 1) - goto out_err; - - outp = enif_make_new_binary(env, in.size, &out); - -- if (EVP_DecryptUpdate(&ctx, outp, &len, in.data, in.size) != 1) -+ if (EVP_DecryptUpdate(ctx, outp, &len, in.data, in.size) != 1) - goto out_err; -- if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_TAG, tag.size, tag.data) != 1) -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag.size, tag.data) != 1) - goto out_err; -- if (EVP_DecryptFinal_ex(&ctx, outp+len, &len) != 1) -+ if (EVP_DecryptFinal_ex(ctx, outp+len, &len) != 1) - goto out_err; - -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - - CONSUME_REDS(env, in); - - return out; - - out_err: -- EVP_CIPHER_CTX_cleanup(&ctx); -+ EVP_CIPHER_CTX_free(ctx); - return atom_error; - #else - return enif_raise_exception(env, atom_notsup); -@@ -2234,13 +2363,10 @@ static ERL_NIF_TERM dss_verify_nif(ErlNi - } - - dsa = DSA_new(); -- dsa->p = dsa_p; -- dsa->q = dsa_q; -- dsa->g = dsa_g; -- dsa->priv_key = NULL; -- dsa->pub_key = dsa_y; -- i = DSA_verify(0, digest_bin.data, SHA_DIGEST_LENGTH, -- sign_bin.data, sign_bin.size, dsa); -+ DSA_set0_pqg(dsa, dsa_p, dsa_q, dsa_g); -+ DSA_set0_key(dsa, dsa_y, NULL); -+ i = DSA_verify(0, digest_bin.data, SHA_DIGEST_LENGTH, -+ sign_bin.data, sign_bin.size, dsa); - DSA_free(dsa); - return(i > 0) ? atom_true : atom_false; - } -@@ -2297,13 +2423,15 @@ static ERL_NIF_TERM rsa_verify_nif(ErlNi - ERL_NIF_TERM head, tail, ret; - int i; - RSA *rsa; --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - EVP_PKEY *pkey; - EVP_PKEY_CTX *ctx; - #endif - const EVP_MD *md; - const ERL_NIF_TERM type = argv[0]; - struct digest_type_t *digp = NULL; -+ BIGNUM *rsa_e; -+ BIGNUM *rsa_n; - - digp = get_digest_type(type); - if (!digp) { -@@ -2320,16 +2448,18 @@ static ERL_NIF_TERM rsa_verify_nif(ErlNi - || digest_bin.size != EVP_MD_size(md) - || !enif_inspect_binary(env, argv[2], &sign_bin) - || !enif_get_list_cell(env, argv[3], &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->e) -+ || !get_bn_from_bin(env, head, &rsa_e) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->n) -+ || !get_bn_from_bin(env, head, &rsa_n) - || !enif_is_empty_list(env, tail)) { - - ret = enif_make_badarg(env); - goto done; - } - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+ (void) RSA_set0_key(rsa, rsa_n, rsa_e, NULL); -+ -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - pkey = EVP_PKEY_new(); - EVP_PKEY_set1_RSA(pkey, rsa); - -@@ -2440,34 +2570,44 @@ static int get_rsa_private_key(ErlNifEnv - { - /* key=[E,N,D]|[E,N,D,P1,P2,E1,E2,C] */ - ERL_NIF_TERM head, tail; -+ BIGNUM *e, *n, *d; -+ BIGNUM *p, *q; -+ BIGNUM *dmp1, *dmq1, *iqmp; - - if (!enif_get_list_cell(env, key, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->e) -+ || !get_bn_from_bin(env, head, &e) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->n) -+ || !get_bn_from_bin(env, head, &n) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->d) -- || (!enif_is_empty_list(env, tail) && -- (!enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->p) -- || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->q) -- || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->dmp1) -- || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->dmq1) -- || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->iqmp) -- || !enif_is_empty_list(env, tail)))) { -+ || !get_bn_from_bin(env, head, &d)) { - return 0; - } -+ (void) RSA_set0_key(rsa, n, e, d); -+ if (enif_is_empty_list(env, tail)) { -+ return 1; -+ } -+ if (!enif_get_list_cell(env, tail, &head, &tail) -+ || !get_bn_from_bin(env, head, &p) -+ || !enif_get_list_cell(env, tail, &head, &tail) -+ || !get_bn_from_bin(env, head, &q) -+ || !enif_get_list_cell(env, tail, &head, &tail) -+ || !get_bn_from_bin(env, head, &dmp1) -+ || !enif_get_list_cell(env, tail, &head, &tail) -+ || !get_bn_from_bin(env, head, &dmq1) -+ || !enif_get_list_cell(env, tail, &head, &tail) -+ || !get_bn_from_bin(env, head, &iqmp) -+ || !enif_is_empty_list(env, tail)) { -+ return 0; -+ } -+ (void) RSA_set0_factors(rsa, p, q); -+ (void) RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp); - return 1; - } - - static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Type, Digest, Key=[E,N,D]|[E,N,D,P1,P2,E1,E2,C]) */ - ErlNifBinary digest_bin, ret_bin; --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - EVP_PKEY *pkey; - EVP_PKEY_CTX *ctx; - size_t rsa_s_len; -@@ -2500,7 +2640,7 @@ static ERL_NIF_TERM rsa_sign_nif(ErlNifE - } - - --#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,0,0) - pkey = EVP_PKEY_new(); - EVP_PKEY_set1_RSA(pkey, rsa); - rsa_s_len=(size_t)EVP_PKEY_size(pkey); -@@ -2547,6 +2687,8 @@ static ERL_NIF_TERM dss_sign_nif(ErlNifE - ERL_NIF_TERM head, tail; - unsigned int dsa_s_len; - DSA* dsa; -+ BIGNUM *dsa_p = NULL, *dsa_q = NULL, *dsa_g = NULL; -+ BIGNUM *dummy_pub_key, *priv_key = NULL; - int i; - - if (argv[0] != atom_sha -@@ -2555,26 +2697,37 @@ static ERL_NIF_TERM dss_sign_nif(ErlNifE - return enif_make_badarg(env); - } - -- dsa = DSA_new(); -- -- dsa->pub_key = NULL; - if (!enif_get_list_cell(env, argv[2], &head, &tail) -- || !get_bn_from_bin(env, head, &dsa->p) -+ || !get_bn_from_bin(env, head, &dsa_p) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &dsa->q) -+ || !get_bn_from_bin(env, head, &dsa_q) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &dsa->g) -+ || !get_bn_from_bin(env, head, &dsa_g) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &dsa->priv_key) -+ || !get_bn_from_bin(env, head, &priv_key) - || !enif_is_empty_list(env,tail)) { -- DSA_free(dsa); -+ if (dsa_p) BN_free(dsa_p); -+ if (dsa_q) BN_free(dsa_q); -+ if (dsa_g) BN_free(dsa_g); -+ if (priv_key) BN_free(priv_key); - return enif_make_badarg(env); - } - -+ /* Note: DSA_set0_key() does not allow setting only the -+ * private key, although DSA_sign() does not use the -+ * public key. Work around this limitation by setting -+ * the public key to a copy of the private key. -+ */ -+ dummy_pub_key = BN_dup(priv_key); -+ -+ dsa = DSA_new(); -+ DSA_set0_pqg(dsa, dsa_p, dsa_q, dsa_g); -+ DSA_set0_key(dsa, dummy_pub_key, priv_key); - enif_alloc_binary(DSA_size(dsa), &ret_bin); - i = DSA_sign(NID_sha1, digest_bin.data, SHA_DIGEST_LENGTH, - ret_bin.data, &dsa_s_len, dsa); - DSA_free(dsa); -+ - if (i) { - if (dsa_s_len != ret_bin.size) { - enif_realloc_binary(&ret_bin, dsa_s_len); -@@ -2611,20 +2764,22 @@ static ERL_NIF_TERM rsa_public_crypt(Erl - ERL_NIF_TERM head, tail; - int padding, i; - RSA* rsa; -+ BIGNUM *e, *n; - - rsa = RSA_new(); - - if (!enif_inspect_binary(env, argv[0], &data_bin) - || !enif_get_list_cell(env, argv[1], &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->e) -+ || !get_bn_from_bin(env, head, &e) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &rsa->n) -+ || !get_bn_from_bin(env, head, &n) - || !enif_is_empty_list(env,tail) - || !rsa_pad(argv[2], &padding)) { - - RSA_free(rsa); - return enif_make_badarg(env); - } -+ (void) RSA_set0_key(rsa, n, e, NULL); - - enif_alloc_binary(RSA_size(rsa), &ret_bin); - -@@ -2705,6 +2860,7 @@ static ERL_NIF_TERM dh_generate_paramete - int p_len, g_len; - unsigned char *p_ptr, *g_ptr; - ERL_NIF_TERM ret_p, ret_g; -+ const BIGNUM *dh_p, *dh_q, *dh_g; - - if (!enif_get_int(env, argv[0], &prime_len) - || !enif_get_int(env, argv[1], &generator)) { -@@ -2715,15 +2871,16 @@ static ERL_NIF_TERM dh_generate_paramete - if (dh_params == NULL) { - return atom_error; - } -- p_len = BN_num_bytes(dh_params->p); -- g_len = BN_num_bytes(dh_params->g); -+ DH_get0_pqg(dh_params, &dh_p, &dh_q, &dh_g); -+ DH_free(dh_params); -+ p_len = BN_num_bytes(dh_p); -+ g_len = BN_num_bytes(dh_g); - p_ptr = enif_make_new_binary(env, p_len, &ret_p); - g_ptr = enif_make_new_binary(env, g_len, &ret_g); -- BN_bn2bin(dh_params->p, p_ptr); -- BN_bn2bin(dh_params->g, g_ptr); -+ BN_bn2bin(dh_p, p_ptr); -+ BN_bn2bin(dh_g, g_ptr); - ERL_VALGRIND_MAKE_MEM_DEFINED(p_ptr, p_len); - ERL_VALGRIND_MAKE_MEM_DEFINED(g_ptr, g_len); -- DH_free(dh_params); - return enif_make_list2(env, ret_p, ret_g); - } - -@@ -2732,18 +2889,19 @@ static ERL_NIF_TERM dh_check(ErlNifEnv* - DH* dh_params; - int i; - ERL_NIF_TERM ret, head, tail; -- -- dh_params = DH_new(); -+ BIGNUM *dh_p, *dh_g; - - if (!enif_get_list_cell(env, argv[0], &head, &tail) -- || !get_bn_from_bin(env, head, &dh_params->p) -+ || !get_bn_from_bin(env, head, &dh_p) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &dh_params->g) -+ || !get_bn_from_bin(env, head, &dh_g) - || !enif_is_empty_list(env,tail)) { - -- DH_free(dh_params); - return enif_make_badarg(env); - } -+ -+ dh_params = DH_new(); -+ DH_set0_pqg(dh_params, dh_p, NULL, dh_g); - if (DH_check(dh_params, &i)) { - if (i == 0) ret = atom_ok; - else if (i & DH_CHECK_P_NOT_PRIME) ret = atom_not_prime; -@@ -2767,42 +2925,41 @@ static ERL_NIF_TERM dh_generate_key_nif( - ERL_NIF_TERM ret, ret_pub, ret_prv, head, tail; - int mpint; /* 0 or 4 */ - unsigned long len = 0; -+ BIGNUM *priv_key = NULL; -+ BIGNUM *dh_p = NULL, *dh_g = NULL; - -- dh_params = DH_new(); -- -- if (!(get_bn_from_bin(env, argv[0], &dh_params->priv_key) -+ if (!(get_bn_from_bin(env, argv[0], &priv_key) - || argv[0] == atom_undefined) - || !enif_get_list_cell(env, argv[1], &head, &tail) -- || !get_bn_from_bin(env, head, &dh_params->p) -+ || !get_bn_from_bin(env, head, &dh_p) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &dh_params->g) -+ || !get_bn_from_bin(env, head, &dh_g) - || !enif_is_empty_list(env, tail) - || !enif_get_int(env, argv[2], &mpint) || (mpint & ~4) - || !enif_get_ulong(env, argv[3], &len) ) { -- DH_free(dh_params); -+ if (priv_key) BN_free(priv_key); -+ if (dh_p) BN_free(dh_p); -+ if (dh_g) BN_free(dh_g); - return enif_make_badarg(env); - } - -- if (len) { -- if (len < BN_num_bits(dh_params->p)) -- dh_params->length = len; -- else { -- DH_free(dh_params); -- return enif_make_badarg(env); -- } -- } -+ dh_params = DH_new(); -+ DH_set0_key(dh_params, NULL, priv_key); -+ DH_set0_pqg(dh_params, dh_p, NULL, dh_g); - - if (DH_generate_key(dh_params)) { -- pub_len = BN_num_bytes(dh_params->pub_key); -- prv_len = BN_num_bytes(dh_params->priv_key); -+ const BIGNUM *pub_key, *priv_key; -+ DH_get0_key(dh_params, &pub_key, &priv_key); -+ pub_len = BN_num_bytes(pub_key); -+ prv_len = BN_num_bytes(priv_key); - pub_ptr = enif_make_new_binary(env, pub_len+mpint, &ret_pub); - prv_ptr = enif_make_new_binary(env, prv_len+mpint, &ret_prv); - if (mpint) { - put_int32(pub_ptr, pub_len); pub_ptr += 4; - put_int32(prv_ptr, prv_len); prv_ptr += 4; - } -- BN_bn2bin(dh_params->pub_key, pub_ptr); -- BN_bn2bin(dh_params->priv_key, prv_ptr); -+ BN_bn2bin(pub_key, pub_ptr); -+ BN_bn2bin(priv_key, prv_ptr); - ERL_VALGRIND_MAKE_MEM_DEFINED(pub_ptr, pub_len); - ERL_VALGRIND_MAKE_MEM_DEFINED(prv_ptr, prv_len); - ret = enif_make_tuple2(env, ret_pub, ret_prv); -@@ -2817,26 +2974,37 @@ static ERL_NIF_TERM dh_generate_key_nif( - static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (OthersPublicKey, MyPrivateKey, DHParams=[P,G]) */ - DH* dh_params; -- BIGNUM* pubkey = NULL; -+ BIGNUM *dummy_pub_key = NULL, *priv_key = NULL; -+ BIGNUM *other_pub_key; -+ BIGNUM *dh_p = NULL, *dh_g = NULL; - int i; - ErlNifBinary ret_bin; - ERL_NIF_TERM ret, head, tail; - - dh_params = DH_new(); - -- if (!get_bn_from_bin(env, argv[0], &pubkey) -- || !get_bn_from_bin(env, argv[1], &dh_params->priv_key) -+ if (!get_bn_from_bin(env, argv[0], &other_pub_key) -+ || !get_bn_from_bin(env, argv[1], &priv_key) - || !enif_get_list_cell(env, argv[2], &head, &tail) -- || !get_bn_from_bin(env, head, &dh_params->p) -+ || !get_bn_from_bin(env, head, &dh_p) - || !enif_get_list_cell(env, tail, &head, &tail) -- || !get_bn_from_bin(env, head, &dh_params->g) -+ || !get_bn_from_bin(env, head, &dh_g) - || !enif_is_empty_list(env, tail)) { -- -+ if (dh_p) BN_free(dh_p); -+ if (dh_g) BN_free(dh_g); - ret = enif_make_badarg(env); - } - else { -+ /* Note: DH_set0_key() does not allow setting only the -+ * private key, although DH_compute_key() does not use the -+ * public key. Work around this limitation by setting -+ * the public key to a copy of the private key. -+ */ -+ dummy_pub_key = BN_dup(priv_key); -+ DH_set0_key(dh_params, dummy_pub_key, priv_key); -+ DH_set0_pqg(dh_params, dh_p, NULL, dh_g); - enif_alloc_binary(DH_size(dh_params), &ret_bin); -- i = DH_compute_key(ret_bin.data, pubkey, dh_params); -+ i = DH_compute_key(ret_bin.data, other_pub_key, dh_params); - if (i > 0) { - if (i != ret_bin.size) { - enif_realloc_binary(&ret_bin, i); -@@ -2848,7 +3016,7 @@ static ERL_NIF_TERM dh_compute_key_nif(E - ret = atom_error; - } - } -- if (pubkey) BN_free(pubkey); -+ if (other_pub_key) BN_free(other_pub_key); - DH_free(dh_params); - return ret; - } -@@ -3420,7 +3588,7 @@ static ERL_NIF_TERM ecdsa_sign_nif(ErlNi - - enif_alloc_binary(ECDSA_size(key), &ret_bin); - -- i = ECDSA_sign(md->type, digest_bin.data, len, -+ i = ECDSA_sign(EVP_MD_type(md), digest_bin.data, len, - ret_bin.data, &dsa_s_len, key); - - EC_KEY_free(key); -@@ -3470,7 +3638,7 @@ static ERL_NIF_TERM ecdsa_verify_nif(Erl - || !get_ec_key(env, argv[3], atom_undefined, argv[4], &key)) - goto badarg; - -- i = ECDSA_verify(md->type, digest_bin.data, len, -+ i = ECDSA_verify(EVP_MD_type(md), digest_bin.data, len, - sign_bin.data, sign_bin.size, key); - - EC_KEY_free(key); -diff --git a/lib/crypto/c_src/crypto_callback.c b/lib/crypto/c_src/crypto_callback.c -index 4c23379f7f6..23d2bed0576 100644 ---- lib/crypto/c_src/crypto_callback.c.orig -+++ lib/crypto/c_src/crypto_callback.c -@@ -62,7 +62,7 @@ static void nomem(size_t size, const char* op) - abort(); - } - --static void* crypto_alloc(size_t size) -+static void* crypto_alloc(size_t size CCB_FILE_LINE_ARGS) - { - void *ret = enif_alloc(size); - -@@ -70,7 +70,7 @@ static void* crypto_alloc(size_t size) - nomem(size, "allocate"); - return ret; - } --static void* crypto_realloc(void* ptr, size_t size) -+static void* crypto_realloc(void* ptr, size_t size CCB_FILE_LINE_ARGS) - { - void* ret = enif_realloc(ptr, size); - -@@ -78,7 +78,7 @@ static void* crypto_realloc(void* ptr, size_t size) - nomem(size, "reallocate"); - return ret; - } --static void crypto_free(void* ptr) -+static void crypto_free(void* ptr CCB_FILE_LINE_ARGS) - { - enif_free(ptr); - } -diff --git a/lib/crypto/c_src/crypto_callback.h b/lib/crypto/c_src/crypto_callback.h -index 894d86cfd95..2641cc0c8b9 100644 ---- lib/crypto/c_src/crypto_callback.h.orig -+++ lib/crypto/c_src/crypto_callback.h -@@ -18,13 +18,20 @@ - * %CopyrightEnd% - */ - -+#include -+#if OPENSSL_VERSION_NUMBER < 0x10100000L -+# define CCB_FILE_LINE_ARGS -+#else -+# define CCB_FILE_LINE_ARGS , const char *file, int line -+#endif -+ - struct crypto_callbacks - { - size_t sizeof_me; - -- void* (*crypto_alloc)(size_t size); -- void* (*crypto_realloc)(void* ptr, size_t size); -- void (*crypto_free)(void* ptr); -+ void* (*crypto_alloc)(size_t size CCB_FILE_LINE_ARGS); -+ void* (*crypto_realloc)(void* ptr, size_t size CCB_FILE_LINE_ARGS); -+ void (*crypto_free)(void* ptr CCB_FILE_LINE_ARGS); - - /* openssl callbacks */ - #ifdef OPENSSL_THREADS Index: lang/erlang/files/patch-OpenSSL-1.1-b =================================================================== --- lang/erlang/files/patch-OpenSSL-1.1-b +++ /dev/null @@ -1,293 +0,0 @@ -From 4dddb3c0b286e13f2cbccb0cdaa4bffcfee60033 Mon Sep 17 00:00:00 2001 -From: Yuki Ito -Date: Tue, 20 Dec 2016 17:45:51 +0900 -Subject: [PATCH] crypto: Support chacha20_poly1305 - -This commit reactivates chacha20_poly1305 and fixes the imprementation -for the released OpenSSL 1.1.0 or later. ---- - lib/crypto/c_src/crypto.c | 152 ++++++++++++------------------- - lib/crypto/test/crypto_SUITE.erl | 49 ++++++++-- - 2 files changed, 101 insertions(+), 100 deletions(-) - -diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c -index 0031f9b9620..68784cd24c9 100644 ---- lib/crypto/c_src/crypto.c -+++ lib/crypto/c_src/crypto.c -@@ -117,7 +117,7 @@ - # endif - #endif - --#if defined(NID_chacha20) && !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) -+#if OPENSSL_VERSION_NUMBER >= PACKED_OPENSSL_VERSION_PLAIN(1,1,0) - # define HAVE_CHACHA20_POLY1305 - #endif - -@@ -131,20 +131,6 @@ - #include - #endif - --#if defined(HAVE_CHACHA20_POLY1305) --#include --#include -- --#if !defined(CHACHA20_NONCE_LEN) --# define CHACHA20_NONCE_LEN 8 --#endif --#if !defined(POLY1305_TAG_LEN) --# define POLY1305_TAG_LEN 16 --#endif -- --#endif -- -- - #ifdef VALGRIND - # include - -@@ -2038,71 +2024,61 @@ - } - #endif /* HAVE_GCM_EVP_DECRYPT_BUG */ - --#if defined(HAVE_CHACHA20_POLY1305) --static void --poly1305_update_with_length(poly1305_state *poly1305, -- const unsigned char *data, size_t data_len) --{ -- size_t j = data_len; -- unsigned char length_bytes[8]; -- unsigned i; - -- for (i = 0; i < sizeof(length_bytes); i++) { -- length_bytes[i] = j; -- j >>= 8; -- } -- -- CRYPTO_poly1305_update(poly1305, data, data_len); -- CRYPTO_poly1305_update(poly1305, length_bytes, sizeof(length_bytes)); --} --#endif -- - static ERL_NIF_TERM chacha20_poly1305_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Key,Iv,AAD,In) */ - #if defined(HAVE_CHACHA20_POLY1305) -+ EVP_CIPHER_CTX *ctx; -+ const EVP_CIPHER *cipher = NULL; - ErlNifBinary key, iv, aad, in; -- unsigned char *outp; -+ unsigned char *outp, *tagp; - ERL_NIF_TERM out, out_tag; -- ErlNifUInt64 in_len_64; -- unsigned char poly1305_key[32]; -- poly1305_state poly1305; -+ int len; - - if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 32 -- || !enif_inspect_binary(env, argv[1], &iv) || iv.size != CHACHA20_NONCE_LEN -+ || !enif_inspect_binary(env, argv[1], &iv) || iv.size == 0 || iv.size > 16 - || !enif_inspect_iolist_as_binary(env, argv[2], &aad) - || !enif_inspect_iolist_as_binary(env, argv[3], &in)) { - return enif_make_badarg(env); - } - -- /* Take from OpenSSL patch set/LibreSSL: -- * -- * The underlying ChaCha implementation may not overflow the block -- * counter into the second counter word. Therefore we disallow -- * individual operations that work on more than 2TB at a time. -- * in_len_64 is needed because, on 32-bit platforms, size_t is only -- * 32-bits and this produces a warning because it's always false. -- * Casting to uint64_t inside the conditional is not sufficient to stop -- * the warning. */ -- in_len_64 = in.size; -- if (in_len_64 >= (1ULL << 32) * 64 - 64) -- return enif_make_badarg(env); -+ cipher = EVP_chacha20_poly1305(); - -- memset(poly1305_key, 0, sizeof(poly1305_key)); -- CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), key.data, iv.data, 0); -+ ctx = EVP_CIPHER_CTX_new(); - -+ if (EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1) -+ goto out_err; -+ -+ EVP_CIPHER_CTX_set_padding(ctx, 0); -+ -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv.size, NULL) != 1) -+ goto out_err; -+ if (EVP_EncryptInit_ex(ctx, NULL, NULL, key.data, iv.data) != 1) -+ goto out_err; -+ if (EVP_EncryptUpdate(ctx, NULL, &len, aad.data, aad.size) != 1) -+ goto out_err; -+ - outp = enif_make_new_binary(env, in.size, &out); - -- CRYPTO_poly1305_init(&poly1305, poly1305_key); -- poly1305_update_with_length(&poly1305, aad.data, aad.size); -- CRYPTO_chacha_20(outp, in.data, in.size, key.data, iv.data, 1); -- poly1305_update_with_length(&poly1305, outp, in.size); -+ if (EVP_EncryptUpdate(ctx, outp, &len, in.data, in.size) != 1) -+ goto out_err; -+ if (EVP_EncryptFinal_ex(ctx, outp+len, &len) != 1) -+ goto out_err; - -- CRYPTO_poly1305_finish(&poly1305, enif_make_new_binary(env, POLY1305_TAG_LEN, &out_tag)); -+ tagp = enif_make_new_binary(env, 16, &out_tag); - -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, 16, tagp) != 1) -+ goto out_err; -+ -+ EVP_CIPHER_CTX_free(ctx); -+ - CONSUME_REDS(env, in); - - return enif_make_tuple2(env, out, out_tag); - -+out_err: -+ EVP_CIPHER_CTX_free(ctx); -+ return atom_error; - #else - return enif_raise_exception(env, atom_notsup); - #endif -@@ -2111,53 +2087,52 @@ - static ERL_NIF_TERM chacha20_poly1305_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) - {/* (Key,Iv,AAD,In,Tag) */ - #if defined(HAVE_CHACHA20_POLY1305) -+ EVP_CIPHER_CTX *ctx; -+ const EVP_CIPHER *cipher = NULL; - ErlNifBinary key, iv, aad, in, tag; - unsigned char *outp; - ERL_NIF_TERM out; -- ErlNifUInt64 in_len_64; -- unsigned char poly1305_key[32]; -- unsigned char mac[POLY1305_TAG_LEN]; -- poly1305_state poly1305; -+ int len; - - if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 32 -- || !enif_inspect_binary(env, argv[1], &iv) || iv.size != CHACHA20_NONCE_LEN -+ || !enif_inspect_binary(env, argv[1], &iv) || iv.size == 0 || iv.size > 16 - || !enif_inspect_iolist_as_binary(env, argv[2], &aad) - || !enif_inspect_iolist_as_binary(env, argv[3], &in) -- || !enif_inspect_iolist_as_binary(env, argv[4], &tag) || tag.size != POLY1305_TAG_LEN) { -+ || !enif_inspect_iolist_as_binary(env, argv[4], &tag) || tag.size != 16) { - return enif_make_badarg(env); - } - -- /* Take from OpenSSL patch set/LibreSSL: -- * -- * The underlying ChaCha implementation may not overflow the block -- * counter into the second counter word. Therefore we disallow -- * individual operations that work on more than 2TB at a time. -- * in_len_64 is needed because, on 32-bit platforms, size_t is only -- * 32-bits and this produces a warning because it's always false. -- * Casting to uint64_t inside the conditional is not sufficient to stop -- * the warning. */ -- in_len_64 = in.size; -- if (in_len_64 >= (1ULL << 32) * 64 - 64) -- return enif_make_badarg(env); -+ cipher = EVP_chacha20_poly1305(); - -- memset(poly1305_key, 0, sizeof(poly1305_key)); -- CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), key.data, iv.data, 0); -+ ctx = EVP_CIPHER_CTX_new(); - -- CRYPTO_poly1305_init(&poly1305, poly1305_key); -- poly1305_update_with_length(&poly1305, aad.data, aad.size); -- poly1305_update_with_length(&poly1305, in.data, in.size); -- CRYPTO_poly1305_finish(&poly1305, mac); -+ if (EVP_DecryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1) -+ goto out_err; -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv.size, NULL) != 1) -+ goto out_err; -+ if (EVP_DecryptInit_ex(ctx, NULL, NULL, key.data, iv.data) != 1) -+ goto out_err; -+ if (EVP_DecryptUpdate(ctx, NULL, &len, aad.data, aad.size) != 1) -+ goto out_err; - -- if (memcmp(mac, tag.data, POLY1305_TAG_LEN) != 0) -- return atom_error; -- - outp = enif_make_new_binary(env, in.size, &out); - -- CRYPTO_chacha_20(outp, in.data, in.size, key.data, iv.data, 1); -+ if (EVP_DecryptUpdate(ctx, outp, &len, in.data, in.size) != 1) -+ goto out_err; -+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, tag.size, tag.data) != 1) -+ goto out_err; -+ if (EVP_DecryptFinal_ex(ctx, outp+len, &len) != 1) -+ goto out_err; - -+ EVP_CIPHER_CTX_free(ctx); -+ - CONSUME_REDS(env, in); - - return out; -+ -+out_err: -+ EVP_CIPHER_CTX_free(ctx); -+ return atom_error; - #else - return enif_raise_exception(env, atom_notsup); - #endif -diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl -index 0c3b7a0445d..31f4e89ffe1 100644 ---- lib/crypto/test/crypto_SUITE.erl -+++ lib/crypto/test/crypto_SUITE.erl -@@ -2249,16 +2249,49 @@ aes_gcm() -> - 1} %% TagLength - ]. - --%% http://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04 -+%% https://tools.ietf.org/html/rfc7539#appendix-A.5 - chacha20_poly1305() -> - [ -- {chacha20_poly1305, hexstr2bin("4290bcb154173531f314af57f3be3b500" %% Key -- "6da371ece272afa1b5dbdd1100a1007"), -- hexstr2bin("86d09974840bded2a5ca"), %% PlainText -- hexstr2bin("cd7cf67be39c794a"), %% Nonce -- hexstr2bin("87e229d4500845a079c0"), %% AAD -- hexstr2bin("e3e446f7ede9a19b62a4"), %% CipherText -- hexstr2bin("677dabf4e3d24b876bb284753896e1d6")} %% CipherTag -+ {chacha20_poly1305, -+ hexstr2bin("1c9240a5eb55d38af333888604f6b5f0" %% Key -+ "473917c1402b80099dca5cbc207075c0"), -+ hexstr2bin("496e7465726e65742d44726166747320" %% PlainText -+ "61726520647261667420646f63756d65" -+ "6e74732076616c696420666f72206120" -+ "6d6178696d756d206f6620736978206d" -+ "6f6e74687320616e64206d6179206265" -+ "20757064617465642c207265706c6163" -+ "65642c206f72206f62736f6c65746564" -+ "206279206f7468657220646f63756d65" -+ "6e747320617420616e792074696d652e" -+ "20497420697320696e617070726f7072" -+ "6961746520746f2075736520496e7465" -+ "726e65742d4472616674732061732072" -+ "65666572656e6365206d617465726961" -+ "6c206f7220746f206369746520746865" -+ "6d206f74686572207468616e20617320" -+ "2fe2809c776f726b20696e2070726f67" -+ "726573732e2fe2809d"), -+ hexstr2bin("000000000102030405060708"), %% Nonce -+ hexstr2bin("f33388860000000000004e91"), %% AAD -+ hexstr2bin("64a0861575861af460f062c79be643bd" %% CipherText -+ "5e805cfd345cf389f108670ac76c8cb2" -+ "4c6cfc18755d43eea09ee94e382d26b0" -+ "bdb7b73c321b0100d4f03b7f355894cf" -+ "332f830e710b97ce98c8a84abd0b9481" -+ "14ad176e008d33bd60f982b1ff37c855" -+ "9797a06ef4f0ef61c186324e2b350638" -+ "3606907b6a7c02b0f9f6157b53c867e4" -+ "b9166c767b804d46a59b5216cde7a4e9" -+ "9040c5a40433225ee282a1b0a06c523e" -+ "af4534d7f83fa1155b0047718cbc546a" -+ "0d072b04b3564eea1b422273f548271a" -+ "0bb2316053fa76991955ebd63159434e" -+ "cebb4e466dae5a1073a6727627097a10" -+ "49e617d91d361094fa68f0ff77987130" -+ "305beaba2eda04df997b714d6c6f2c29" -+ "a6ad5cb4022b02709b"), -+ hexstr2bin("eead9d67890cbb22392336fea1851f38")} %% CipherTag - ]. - - rsa_plain() -> Index: lang/erlang/files/patch-erts_emulator_beam_erl__alloc.c =================================================================== --- /dev/null +++ lang/erlang/files/patch-erts_emulator_beam_erl__alloc.c @@ -0,0 +1,11 @@ +--- erts/emulator/beam/erl_alloc.c.orig 2018-03-13 20:11:05 UTC ++++ erts/emulator/beam/erl_alloc.c +@@ -122,7 +122,7 @@ typedef union { + char align_afa[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(AFAllctr_t))]; + AOFFAllctr_t aoffa; + char align_aoffa[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(AOFFAllctr_t))]; +-} ErtsAllocatorState_t; ++} ErtsAllocatorState_t erts_align_attribute(ERTS_CACHE_LINE_SIZE); + + static ErtsAllocatorState_t std_alloc_state; + static ErtsAllocatorState_t ll_alloc_state; Index: lang/erlang/files/patch-lib_wx_c__src_wxe__impl.cpp =================================================================== --- lang/erlang/files/patch-lib_wx_c__src_wxe__impl.cpp +++ /dev/null @@ -1,20 +0,0 @@ ---- lib/wx/c_src/wxe_impl.cpp.orig 2017-01-30 23:13:25 UTC -+++ lib/wx/c_src/wxe_impl.cpp -@@ -666,7 +666,7 @@ void * WxeApp::getPtr(char * bp, wxeMemE - throw wxe_badarg(index); - } - void * temp = memenv->ref2ptr[index]; -- if((index < memenv->next) && ((index == 0) || (temp > NULL))) -+ if((index < memenv->next) && ((index == 0) || (temp != NULL))) - return temp; - else { - throw wxe_badarg(index); -@@ -678,7 +678,7 @@ void WxeApp::registerPid(char * bp, ErlD - if(!memenv) - throw wxe_badarg(index); - void * temp = memenv->ref2ptr[index]; -- if((index < memenv->next) && ((index == 0) || (temp > NULL))) { -+ if((index < memenv->next) && ((index == 0) || (temp != NULL))) { - ptrMap::iterator it; - it = ptr2ref.find(temp); - if(it != ptr2ref.end()) {