rugged 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +1 -0
- data/README.md +3 -3
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_commit.c +1 -1
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +13 -3
- data/lib/rugged/commit.rb +17 -4
- data/lib/rugged/repository.rb +7 -8
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +41 -74
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
- data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/apply.h +2 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +95 -42
- data/vendor/libgit2/include/git2/blob.h +31 -3
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +33 -6
- data/vendor/libgit2/include/git2/config.h +1 -1
- data/vendor/libgit2/include/git2/deprecated.h +248 -8
- data/vendor/libgit2/include/git2/diff.h +35 -20
- data/vendor/libgit2/include/git2/errors.h +8 -7
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +4 -5
- data/vendor/libgit2/include/git2/indexer.h +2 -1
- data/vendor/libgit2/include/git2/odb.h +44 -20
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +9 -5
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/repository.h +95 -52
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/transport.h +1 -1
- data/vendor/libgit2/include/git2/tree.h +2 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +77 -44
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +21 -8
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +92 -42
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +44 -40
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +28 -15
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +46 -24
- data/vendor/libgit2/src/branch.c +87 -37
- data/vendor/libgit2/src/buffer.c +339 -27
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +3 -24
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +97 -98
- data/vendor/libgit2/src/cherrypick.c +8 -2
- data/vendor/libgit2/src/clone.c +104 -29
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +26 -2
- data/vendor/libgit2/src/config.c +40 -22
- data/vendor/libgit2/src/config_cache.c +9 -4
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_file.c +25 -8
- data/vendor/libgit2/src/config_parse.c +5 -7
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +11 -4
- data/vendor/libgit2/src/diff.c +23 -19
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +5 -7
- data/vendor/libgit2/src/diff_generate.c +56 -28
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +81 -65
- data/vendor/libgit2/src/diff_stats.c +19 -16
- data/vendor/libgit2/src/diff_tform.c +13 -13
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +26 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +7 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +209 -113
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +8 -8
- data/vendor/libgit2/src/futils.h +4 -4
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +126 -84
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +60 -36
- data/vendor/libgit2/src/integer.h +79 -2
- data/vendor/libgit2/src/iterator.c +40 -28
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +108 -46
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +15 -9
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +879 -0
- data/vendor/libgit2/src/midx.h +110 -0
- data/vendor/libgit2/src/mwindow.c +214 -95
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +133 -4
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +24 -15
- data/vendor/libgit2/src/odb.c +298 -57
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +31 -21
- data/vendor/libgit2/src/odb_mempack.c +3 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +7 -4
- data/vendor/libgit2/src/pack-objects.c +83 -69
- data/vendor/libgit2/src/pack.c +383 -150
- data/vendor/libgit2/src/pack.h +44 -9
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +3 -5
- data/vendor/libgit2/src/patch_parse.c +6 -3
- data/vendor/libgit2/src/path.c +102 -57
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +12 -11
- data/vendor/libgit2/src/pool.c +34 -22
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/posix.c +43 -12
- data/vendor/libgit2/src/posix.h +9 -0
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +95 -49
- data/vendor/libgit2/src/refdb.c +165 -13
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +144 -152
- data/vendor/libgit2/src/reflog.c +21 -20
- data/vendor/libgit2/src/refs.c +151 -231
- data/vendor/libgit2/src/refs.h +2 -20
- data/vendor/libgit2/src/refspec.c +80 -44
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +312 -121
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +351 -189
- data/vendor/libgit2/src/repository.h +23 -29
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +8 -2
- data/vendor/libgit2/src/revparse.c +19 -13
- data/vendor/libgit2/src/revwalk.c +35 -20
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +7 -3
- data/vendor/libgit2/src/status.c +9 -4
- data/vendor/libgit2/src/strarray.c +64 -0
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +113 -207
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +10 -9
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +134 -66
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +8 -26
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +49 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +21 -9
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +17 -7
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +84 -42
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +5 -5
- data/vendor/libgit2/src/transports/smart.c +14 -9
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +156 -88
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/posix.h +16 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +74 -183
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +23 -25
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +77 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +37 -15
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +56 -38
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -361
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -246
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
file(GLOB SRC_HTTP "*.c" "*.h")
|
|
2
|
+
list(SORT SRC_HTTP)
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
add_library(http-parser OBJECT ${SRC_HTTP})
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
enable_warnings(implicit-fallthrough=1)
|
|
@@ -1,23 +1,37 @@
|
|
|
1
|
-
FILE(GLOB SRC_NTLMCLIENT "ntlm.c" "
|
|
1
|
+
FILE(GLOB SRC_NTLMCLIENT "ntlm.c" "ntlm.h" "util.c" "util.h")
|
|
2
|
+
LIST(SORT SRC_NTLMCLIENT)
|
|
2
3
|
|
|
3
4
|
ADD_DEFINITIONS(-DNTLM_STATIC=1)
|
|
4
5
|
|
|
5
6
|
DISABLE_WARNINGS(implicit-fallthrough)
|
|
6
7
|
|
|
7
|
-
IF
|
|
8
|
+
IF(USE_ICONV)
|
|
9
|
+
ADD_DEFINITIONS(-DUNICODE_ICONV=1)
|
|
10
|
+
FILE(GLOB SRC_NTLMCLIENT_UNICODE "unicode_iconv.c" "unicode_iconv.h")
|
|
11
|
+
ELSE()
|
|
12
|
+
ADD_DEFINITIONS(-DUNICODE_BUILTIN=1)
|
|
13
|
+
FILE(GLOB SRC_NTLMCLIENT_UNICODE "unicode_builtin.c" "unicode_builtin.h")
|
|
14
|
+
ENDIF()
|
|
15
|
+
|
|
16
|
+
IF(USE_HTTPS STREQUAL "SecureTransport")
|
|
8
17
|
ADD_DEFINITIONS(-DCRYPT_COMMONCRYPTO)
|
|
9
|
-
SET(SRC_NTLMCLIENT_CRYPTO "crypt_commoncrypto.c")
|
|
18
|
+
SET(SRC_NTLMCLIENT_CRYPTO "crypt_commoncrypto.c" "crypt_commoncrypto.h")
|
|
10
19
|
# CC_MD4 has been deprecated in macOS 10.15.
|
|
11
20
|
SET_SOURCE_FILES_PROPERTIES("crypt_commoncrypto.c" COMPILE_FLAGS "-Wno-deprecated")
|
|
12
|
-
ELSEIF
|
|
21
|
+
ELSEIF(USE_HTTPS STREQUAL "OpenSSL")
|
|
13
22
|
ADD_DEFINITIONS(-DCRYPT_OPENSSL)
|
|
14
23
|
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
|
|
15
|
-
SET(SRC_NTLMCLIENT_CRYPTO "crypt_openssl.c")
|
|
16
|
-
ELSEIF
|
|
24
|
+
SET(SRC_NTLMCLIENT_CRYPTO "crypt_openssl.c" "crypt_openssl.h")
|
|
25
|
+
ELSEIF(USE_HTTPS STREQUAL "OpenSSL-Dynamic")
|
|
26
|
+
ADD_DEFINITIONS(-DCRYPT_OPENSSL)
|
|
27
|
+
ADD_DEFINITIONS(-DCRYPT_OPENSSL_DYNAMIC)
|
|
28
|
+
SET(SRC_NTLMCLIENT_CRYPTO "crypt_openssl.c" "crypt_openssl.h")
|
|
29
|
+
ELSEIF(USE_HTTPS STREQUAL "mbedTLS")
|
|
17
30
|
ADD_DEFINITIONS(-DCRYPT_MBEDTLS)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
INCLUDE_DIRECTORIES(${MBEDTLS_INCLUDE_DIR})
|
|
32
|
+
SET(SRC_NTLMCLIENT_CRYPTO "crypt_mbedtls.c" "crypt_mbedtls.h")
|
|
33
|
+
ELSE()
|
|
34
|
+
MESSAGE(FATAL_ERROR "Unable to use libgit2's HTTPS backend (${USE_HTTPS}) for NTLM crypto")
|
|
21
35
|
ENDIF()
|
|
22
36
|
|
|
23
|
-
ADD_LIBRARY(ntlmclient OBJECT ${SRC_NTLMCLIENT} ${SRC_NTLMCLIENT_CRYPTO})
|
|
37
|
+
ADD_LIBRARY(ntlmclient OBJECT ${SRC_NTLMCLIENT} ${SRC_NTLMCLIENT_UNICODE} ${SRC_NTLMCLIENT_CRYPTO})
|
|
@@ -21,33 +21,6 @@
|
|
|
21
21
|
# include <stdbool.h>
|
|
22
22
|
#endif
|
|
23
23
|
|
|
24
|
-
#ifdef __linux__
|
|
25
|
-
/* See man page endian(3) */
|
|
26
|
-
# include <endian.h>
|
|
27
|
-
# define htonll htobe64
|
|
28
|
-
#elif defined(__OpenBSD__)
|
|
29
|
-
/* See man page htobe64(3) */
|
|
30
|
-
# include <endian.h>
|
|
31
|
-
# define htonll htobe64
|
|
32
|
-
#elif defined(__FreeBSD__)
|
|
33
|
-
/* See man page bwaps64(9) */
|
|
34
|
-
# include <sys/endian.h>
|
|
35
|
-
# define htonll htobe64
|
|
36
|
-
#elif defined(sun) || defined(__sun)
|
|
37
|
-
/* See man page byteorder(3SOCKET) */
|
|
38
|
-
# include <sys/types.h>
|
|
39
|
-
# include <netinet/in.h>
|
|
40
|
-
# include <inttypes.h>
|
|
41
|
-
|
|
42
|
-
# if !defined(htonll)
|
|
43
|
-
# if defined(_BIG_ENDIAN)
|
|
44
|
-
# define htonll(x) (x)
|
|
45
|
-
# else
|
|
46
|
-
# define htonll(x) ((((uint64_t)htonl(x)) << 32) + htonl((uint64_t)(x) >> 32))
|
|
47
|
-
# endif
|
|
48
|
-
# endif
|
|
49
|
-
#endif
|
|
50
|
-
|
|
51
24
|
#ifndef MIN
|
|
52
25
|
# define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
|
53
26
|
#endif
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
#ifndef PRIVATE_CRYPT_COMMON_H__
|
|
10
10
|
#define PRIVATE_CRYPT_COMMON_H__
|
|
11
11
|
|
|
12
|
+
#include "ntlmclient.h"
|
|
13
|
+
#include "ntlm.h"
|
|
14
|
+
|
|
12
15
|
#if defined(CRYPT_OPENSSL)
|
|
13
16
|
# include "crypt_openssl.h"
|
|
14
17
|
#elif defined(CRYPT_MBEDTLS)
|
|
@@ -25,40 +28,42 @@
|
|
|
25
28
|
|
|
26
29
|
typedef unsigned char ntlm_des_block[CRYPT_DES_BLOCKSIZE];
|
|
27
30
|
|
|
31
|
+
typedef struct ntlm_crypt_ctx ntlm_crypt_ctx;
|
|
32
|
+
|
|
33
|
+
extern bool ntlm_crypt_init(ntlm_client *ntlm);
|
|
34
|
+
|
|
28
35
|
extern bool ntlm_random_bytes(
|
|
29
|
-
ntlm_client *ntlm,
|
|
30
36
|
unsigned char *out,
|
|
37
|
+
ntlm_client *ntlm,
|
|
31
38
|
size_t len);
|
|
32
39
|
|
|
33
40
|
extern bool ntlm_des_encrypt(
|
|
34
41
|
ntlm_des_block *out,
|
|
42
|
+
ntlm_client *ntlm,
|
|
35
43
|
ntlm_des_block *plaintext,
|
|
36
44
|
ntlm_des_block *key);
|
|
37
45
|
|
|
38
46
|
extern bool ntlm_md4_digest(
|
|
39
47
|
unsigned char out[CRYPT_MD4_DIGESTSIZE],
|
|
48
|
+
ntlm_client *ntlm,
|
|
40
49
|
const unsigned char *in,
|
|
41
50
|
size_t in_len);
|
|
42
51
|
|
|
43
|
-
extern ntlm_hmac_ctx *ntlm_hmac_ctx_init(void);
|
|
44
|
-
|
|
45
|
-
extern bool ntlm_hmac_ctx_reset(ntlm_hmac_ctx *ctx);
|
|
46
|
-
|
|
47
52
|
extern bool ntlm_hmac_md5_init(
|
|
48
|
-
|
|
53
|
+
ntlm_client *ntlm,
|
|
49
54
|
const unsigned char *key,
|
|
50
55
|
size_t key_len);
|
|
51
56
|
|
|
52
57
|
extern bool ntlm_hmac_md5_update(
|
|
53
|
-
|
|
58
|
+
ntlm_client *ntlm,
|
|
54
59
|
const unsigned char *data,
|
|
55
60
|
size_t data_len);
|
|
56
61
|
|
|
57
62
|
extern bool ntlm_hmac_md5_final(
|
|
58
63
|
unsigned char *out,
|
|
59
64
|
size_t *out_len,
|
|
60
|
-
|
|
65
|
+
ntlm_client *ntlm);
|
|
61
66
|
|
|
62
|
-
extern void
|
|
67
|
+
extern void ntlm_crypt_shutdown(ntlm_client *ntlm);
|
|
63
68
|
|
|
64
69
|
#endif /* PRIVATE_CRYPT_COMMON_H__ */
|
|
@@ -18,9 +18,15 @@
|
|
|
18
18
|
#include "ntlm.h"
|
|
19
19
|
#include "crypt.h"
|
|
20
20
|
|
|
21
|
+
bool ntlm_crypt_init(ntlm_client *ntlm)
|
|
22
|
+
{
|
|
23
|
+
memset(&ntlm->crypt_ctx, 0, sizeof(ntlm_crypt_ctx));
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
21
27
|
bool ntlm_random_bytes(
|
|
22
|
-
ntlm_client *ntlm,
|
|
23
28
|
unsigned char *out,
|
|
29
|
+
ntlm_client *ntlm,
|
|
24
30
|
size_t len)
|
|
25
31
|
{
|
|
26
32
|
int fd, ret;
|
|
@@ -49,11 +55,14 @@ bool ntlm_random_bytes(
|
|
|
49
55
|
|
|
50
56
|
bool ntlm_des_encrypt(
|
|
51
57
|
ntlm_des_block *out,
|
|
58
|
+
ntlm_client *ntlm,
|
|
52
59
|
ntlm_des_block *plaintext,
|
|
53
60
|
ntlm_des_block *key)
|
|
54
61
|
{
|
|
55
62
|
size_t written;
|
|
56
63
|
|
|
64
|
+
NTLM_UNUSED(ntlm);
|
|
65
|
+
|
|
57
66
|
CCCryptorStatus result = CCCrypt(kCCEncrypt,
|
|
58
67
|
kCCAlgorithmDES, kCCOptionECBMode,
|
|
59
68
|
key, sizeof(ntlm_des_block), NULL,
|
|
@@ -65,56 +74,47 @@ bool ntlm_des_encrypt(
|
|
|
65
74
|
|
|
66
75
|
bool ntlm_md4_digest(
|
|
67
76
|
unsigned char out[CRYPT_MD4_DIGESTSIZE],
|
|
77
|
+
ntlm_client *ntlm,
|
|
68
78
|
const unsigned char *in,
|
|
69
79
|
size_t in_len)
|
|
70
80
|
{
|
|
81
|
+
NTLM_UNUSED(ntlm);
|
|
71
82
|
return !!CC_MD4(in, in_len, out);
|
|
72
83
|
}
|
|
73
84
|
|
|
74
|
-
ntlm_hmac_ctx *ntlm_hmac_ctx_init(void)
|
|
75
|
-
{
|
|
76
|
-
return calloc(1, sizeof(ntlm_hmac_ctx));
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
bool ntlm_hmac_ctx_reset(ntlm_hmac_ctx *ctx)
|
|
80
|
-
{
|
|
81
|
-
memset(ctx, 0, sizeof(ntlm_hmac_ctx));
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
85
|
bool ntlm_hmac_md5_init(
|
|
86
|
-
|
|
86
|
+
ntlm_client *ntlm,
|
|
87
87
|
const unsigned char *key,
|
|
88
88
|
size_t key_len)
|
|
89
89
|
{
|
|
90
|
-
CCHmacInit(&
|
|
90
|
+
CCHmacInit(&ntlm->crypt_ctx.hmac, kCCHmacAlgMD5, key, key_len);
|
|
91
91
|
return true;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
bool ntlm_hmac_md5_update(
|
|
95
|
-
|
|
95
|
+
ntlm_client *ntlm,
|
|
96
96
|
const unsigned char *data,
|
|
97
97
|
size_t data_len)
|
|
98
98
|
{
|
|
99
|
-
CCHmacUpdate(&
|
|
99
|
+
CCHmacUpdate(&ntlm->crypt_ctx.hmac, data, data_len);
|
|
100
100
|
return true;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
bool ntlm_hmac_md5_final(
|
|
104
104
|
unsigned char *out,
|
|
105
105
|
size_t *out_len,
|
|
106
|
-
|
|
106
|
+
ntlm_client *ntlm)
|
|
107
107
|
{
|
|
108
108
|
if (*out_len < CRYPT_MD5_DIGESTSIZE)
|
|
109
109
|
return false;
|
|
110
110
|
|
|
111
|
-
CCHmacFinal(&
|
|
111
|
+
CCHmacFinal(&ntlm->crypt_ctx.hmac, out);
|
|
112
112
|
|
|
113
113
|
*out_len = CRYPT_MD5_DIGESTSIZE;
|
|
114
114
|
return true;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
void
|
|
117
|
+
void ntlm_crypt_shutdown(ntlm_client *ntlm)
|
|
118
118
|
{
|
|
119
|
-
|
|
119
|
+
NTLM_UNUSED(ntlm);
|
|
120
120
|
}
|
|
@@ -17,9 +17,24 @@
|
|
|
17
17
|
#include "ntlm.h"
|
|
18
18
|
#include "crypt.h"
|
|
19
19
|
|
|
20
|
+
bool ntlm_crypt_init(ntlm_client *ntlm)
|
|
21
|
+
{
|
|
22
|
+
const mbedtls_md_info_t *info = mbedtls_md_info_from_type(MBEDTLS_MD_MD5);
|
|
23
|
+
|
|
24
|
+
mbedtls_md_init(&ntlm->crypt_ctx.hmac);
|
|
25
|
+
|
|
26
|
+
if (mbedtls_md_setup(&ntlm->crypt_ctx.hmac, info, 1) != 0) {
|
|
27
|
+
ntlm_client_set_errmsg(ntlm, "could not setup mbedtls digest");
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
20
35
|
bool ntlm_random_bytes(
|
|
21
|
-
ntlm_client *ntlm,
|
|
22
36
|
unsigned char *out,
|
|
37
|
+
ntlm_client *ntlm,
|
|
23
38
|
size_t len)
|
|
24
39
|
{
|
|
25
40
|
mbedtls_ctr_drbg_context ctr_drbg;
|
|
@@ -51,6 +66,7 @@ bool ntlm_random_bytes(
|
|
|
51
66
|
|
|
52
67
|
bool ntlm_des_encrypt(
|
|
53
68
|
ntlm_des_block *out,
|
|
69
|
+
ntlm_client *ntlm,
|
|
54
70
|
ntlm_des_block *plaintext,
|
|
55
71
|
ntlm_des_block *key)
|
|
56
72
|
{
|
|
@@ -60,8 +76,10 @@ bool ntlm_des_encrypt(
|
|
|
60
76
|
mbedtls_des_init(&ctx);
|
|
61
77
|
|
|
62
78
|
if (mbedtls_des_setkey_enc(&ctx, *key) ||
|
|
63
|
-
|
|
79
|
+
mbedtls_des_crypt_ecb(&ctx, *plaintext, *out)) {
|
|
80
|
+
ntlm_client_set_errmsg(ntlm, "DES encryption failed");
|
|
64
81
|
goto done;
|
|
82
|
+
}
|
|
65
83
|
|
|
66
84
|
success = true;
|
|
67
85
|
|
|
@@ -72,11 +90,14 @@ done:
|
|
|
72
90
|
|
|
73
91
|
bool ntlm_md4_digest(
|
|
74
92
|
unsigned char out[CRYPT_MD4_DIGESTSIZE],
|
|
93
|
+
ntlm_client *ntlm,
|
|
75
94
|
const unsigned char *in,
|
|
76
95
|
size_t in_len)
|
|
77
96
|
{
|
|
78
97
|
mbedtls_md4_context ctx;
|
|
79
98
|
|
|
99
|
+
NTLM_UNUSED(ntlm);
|
|
100
|
+
|
|
80
101
|
mbedtls_md4_init(&ctx);
|
|
81
102
|
mbedtls_md4_starts(&ctx);
|
|
82
103
|
mbedtls_md4_update(&ctx, in, in_len);
|
|
@@ -86,60 +107,40 @@ bool ntlm_md4_digest(
|
|
|
86
107
|
return true;
|
|
87
108
|
}
|
|
88
109
|
|
|
89
|
-
ntlm_hmac_ctx *ntlm_hmac_ctx_init(void)
|
|
90
|
-
{
|
|
91
|
-
ntlm_hmac_ctx *ctx;
|
|
92
|
-
const mbedtls_md_info_t *info = mbedtls_md_info_from_type(MBEDTLS_MD_MD5);
|
|
93
|
-
|
|
94
|
-
if ((ctx = calloc(1, sizeof(ntlm_hmac_ctx))) == NULL)
|
|
95
|
-
return NULL;
|
|
96
|
-
|
|
97
|
-
mbedtls_md_init(&ctx->mbed);
|
|
98
|
-
|
|
99
|
-
if (mbedtls_md_setup(&ctx->mbed, info, 1) != 0) {
|
|
100
|
-
free(ctx);
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return ctx;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
bool ntlm_hmac_ctx_reset(ntlm_hmac_ctx *ctx)
|
|
108
|
-
{
|
|
109
|
-
return !mbedtls_md_hmac_reset(&ctx->mbed);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
110
|
bool ntlm_hmac_md5_init(
|
|
113
|
-
|
|
111
|
+
ntlm_client *ntlm,
|
|
114
112
|
const unsigned char *key,
|
|
115
113
|
size_t key_len)
|
|
116
114
|
{
|
|
117
|
-
|
|
115
|
+
if (ntlm->crypt_ctx.hmac_initialized) {
|
|
116
|
+
if (mbedtls_md_hmac_reset(&ntlm->crypt_ctx.hmac))
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
ntlm->crypt_ctx.hmac_initialized = !mbedtls_md_hmac_starts(&ntlm->crypt_ctx.hmac, key, key_len);
|
|
121
|
+
return ntlm->crypt_ctx.hmac_initialized;
|
|
118
122
|
}
|
|
119
123
|
|
|
120
124
|
bool ntlm_hmac_md5_update(
|
|
121
|
-
|
|
125
|
+
ntlm_client *ntlm,
|
|
122
126
|
const unsigned char *in,
|
|
123
127
|
size_t in_len)
|
|
124
128
|
{
|
|
125
|
-
return !mbedtls_md_hmac_update(&
|
|
129
|
+
return !mbedtls_md_hmac_update(&ntlm->crypt_ctx.hmac, in, in_len);
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
bool ntlm_hmac_md5_final(
|
|
129
133
|
unsigned char *out,
|
|
130
134
|
size_t *out_len,
|
|
131
|
-
|
|
135
|
+
ntlm_client *ntlm)
|
|
132
136
|
{
|
|
133
137
|
if (*out_len < CRYPT_MD5_DIGESTSIZE)
|
|
134
138
|
return false;
|
|
135
139
|
|
|
136
|
-
return !mbedtls_md_hmac_finish(&
|
|
140
|
+
return !mbedtls_md_hmac_finish(&ntlm->crypt_ctx.hmac, out);
|
|
137
141
|
}
|
|
138
142
|
|
|
139
|
-
void
|
|
143
|
+
void ntlm_crypt_shutdown(ntlm_client *ntlm)
|
|
140
144
|
{
|
|
141
|
-
|
|
142
|
-
mbedtls_md_free(&ctx->mbed);
|
|
143
|
-
free(ctx);
|
|
144
|
-
}
|
|
145
|
+
mbedtls_md_free(&ntlm->crypt_ctx.hmac);
|
|
145
146
|
}
|
|
@@ -9,26 +9,166 @@
|
|
|
9
9
|
#include <stdlib.h>
|
|
10
10
|
#include <string.h>
|
|
11
11
|
|
|
12
|
-
#
|
|
13
|
-
#include <
|
|
14
|
-
#
|
|
15
|
-
#include <openssl/
|
|
16
|
-
#include <openssl/
|
|
12
|
+
#ifdef CRYPT_OPENSSL_DYNAMIC
|
|
13
|
+
# include <dlfcn.h>
|
|
14
|
+
#else
|
|
15
|
+
# include <openssl/rand.h>
|
|
16
|
+
# include <openssl/des.h>
|
|
17
|
+
# include <openssl/md4.h>
|
|
18
|
+
# include <openssl/hmac.h>
|
|
19
|
+
# include <openssl/err.h>
|
|
20
|
+
#endif
|
|
17
21
|
|
|
18
22
|
#include "ntlm.h"
|
|
19
23
|
#include "compat.h"
|
|
20
24
|
#include "util.h"
|
|
21
25
|
#include "crypt.h"
|
|
22
26
|
|
|
27
|
+
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(CRYPT_OPENSSL_DYNAMIC)
|
|
28
|
+
|
|
29
|
+
static inline HMAC_CTX *HMAC_CTX_new(void)
|
|
30
|
+
{
|
|
31
|
+
return calloc(1, sizeof(HMAC_CTX));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static inline int HMAC_CTX_reset(HMAC_CTX *ctx)
|
|
35
|
+
{
|
|
36
|
+
ntlm_memzero(ctx, sizeof(HMAC_CTX));
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static inline void HMAC_CTX_free(HMAC_CTX *ctx)
|
|
41
|
+
{
|
|
42
|
+
free(ctx);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(CRYPT_OPENSSL_DYNAMIC)
|
|
48
|
+
|
|
49
|
+
static inline void HMAC_CTX_cleanup(HMAC_CTX *ctx)
|
|
50
|
+
{
|
|
51
|
+
NTLM_UNUSED(ctx);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
#ifdef CRYPT_OPENSSL_DYNAMIC
|
|
58
|
+
|
|
59
|
+
static bool ntlm_crypt_init_functions(ntlm_client *ntlm)
|
|
60
|
+
{
|
|
61
|
+
void *handle;
|
|
62
|
+
|
|
63
|
+
if ((handle = dlopen("libssl.so.1.1", RTLD_NOW)) == NULL &&
|
|
64
|
+
(handle = dlopen("libssl.1.1.dylib", RTLD_NOW)) == NULL &&
|
|
65
|
+
(handle = dlopen("libssl.so.1.0.0", RTLD_NOW)) == NULL &&
|
|
66
|
+
(handle = dlopen("libssl.1.0.0.dylib", RTLD_NOW)) == NULL &&
|
|
67
|
+
(handle = dlopen("libssl.so.10", RTLD_NOW)) == NULL) {
|
|
68
|
+
ntlm_client_set_errmsg(ntlm, "could not open libssl");
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
ntlm->crypt_ctx.des_set_key_fn = dlsym(handle, "DES_set_key");
|
|
73
|
+
ntlm->crypt_ctx.des_ecb_encrypt_fn = dlsym(handle, "DES_ecb_encrypt");
|
|
74
|
+
ntlm->crypt_ctx.err_get_error_fn = dlsym(handle, "ERR_get_error");
|
|
75
|
+
ntlm->crypt_ctx.err_lib_error_string_fn = dlsym(handle, "ERR_lib_error_string");
|
|
76
|
+
ntlm->crypt_ctx.evp_md5_fn = dlsym(handle, "EVP_md5");
|
|
77
|
+
ntlm->crypt_ctx.hmac_ctx_new_fn = dlsym(handle, "HMAC_CTX_new");
|
|
78
|
+
ntlm->crypt_ctx.hmac_ctx_free_fn = dlsym(handle, "HMAC_CTX_free");
|
|
79
|
+
ntlm->crypt_ctx.hmac_ctx_reset_fn = dlsym(handle, "HMAC_CTX_reset");
|
|
80
|
+
ntlm->crypt_ctx.hmac_init_ex_fn = dlsym(handle, "HMAC_Init_ex");
|
|
81
|
+
ntlm->crypt_ctx.hmac_update_fn = dlsym(handle, "HMAC_Update");
|
|
82
|
+
ntlm->crypt_ctx.hmac_final_fn = dlsym(handle, "HMAC_Final");
|
|
83
|
+
ntlm->crypt_ctx.md4_fn = dlsym(handle, "MD4");
|
|
84
|
+
ntlm->crypt_ctx.rand_bytes_fn = dlsym(handle, "RAND_bytes");
|
|
85
|
+
|
|
86
|
+
if (!ntlm->crypt_ctx.des_set_key_fn ||
|
|
87
|
+
!ntlm->crypt_ctx.des_ecb_encrypt_fn ||
|
|
88
|
+
!ntlm->crypt_ctx.err_get_error_fn ||
|
|
89
|
+
!ntlm->crypt_ctx.err_lib_error_string_fn ||
|
|
90
|
+
!ntlm->crypt_ctx.evp_md5_fn ||
|
|
91
|
+
!ntlm->crypt_ctx.hmac_init_ex_fn ||
|
|
92
|
+
!ntlm->crypt_ctx.hmac_update_fn ||
|
|
93
|
+
!ntlm->crypt_ctx.hmac_final_fn ||
|
|
94
|
+
!ntlm->crypt_ctx.md4_fn ||
|
|
95
|
+
!ntlm->crypt_ctx.rand_bytes_fn) {
|
|
96
|
+
ntlm_client_set_errmsg(ntlm, "could not load libssl functions");
|
|
97
|
+
dlclose(handle);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* Toggle legacy HMAC context functions */
|
|
102
|
+
if (ntlm->crypt_ctx.hmac_ctx_new_fn &&
|
|
103
|
+
ntlm->crypt_ctx.hmac_ctx_free_fn &&
|
|
104
|
+
ntlm->crypt_ctx.hmac_ctx_reset_fn) {
|
|
105
|
+
ntlm->crypt_ctx.hmac_ctx_cleanup_fn = HMAC_CTX_cleanup;
|
|
106
|
+
} else {
|
|
107
|
+
ntlm->crypt_ctx.hmac_ctx_cleanup_fn = dlsym(handle, "HMAC_CTX_cleanup");
|
|
108
|
+
|
|
109
|
+
if (!ntlm->crypt_ctx.hmac_ctx_cleanup_fn) {
|
|
110
|
+
ntlm_client_set_errmsg(ntlm, "could not load legacy libssl functions");
|
|
111
|
+
dlclose(handle);
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
ntlm->crypt_ctx.hmac_ctx_new_fn = HMAC_CTX_new;
|
|
116
|
+
ntlm->crypt_ctx.hmac_ctx_free_fn = HMAC_CTX_free;
|
|
117
|
+
ntlm->crypt_ctx.hmac_ctx_reset_fn = HMAC_CTX_reset;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
ntlm->crypt_ctx.openssl_handle = handle;
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
#else /* CRYPT_OPENSSL_DYNAMIC */
|
|
125
|
+
|
|
126
|
+
static bool ntlm_crypt_init_functions(ntlm_client *ntlm)
|
|
127
|
+
{
|
|
128
|
+
ntlm->crypt_ctx.des_set_key_fn = DES_set_key;
|
|
129
|
+
ntlm->crypt_ctx.des_ecb_encrypt_fn = DES_ecb_encrypt;
|
|
130
|
+
ntlm->crypt_ctx.err_get_error_fn = ERR_get_error;
|
|
131
|
+
ntlm->crypt_ctx.err_lib_error_string_fn = ERR_lib_error_string;
|
|
132
|
+
ntlm->crypt_ctx.evp_md5_fn = EVP_md5;
|
|
133
|
+
ntlm->crypt_ctx.hmac_ctx_new_fn = HMAC_CTX_new;
|
|
134
|
+
ntlm->crypt_ctx.hmac_ctx_free_fn = HMAC_CTX_free;
|
|
135
|
+
ntlm->crypt_ctx.hmac_ctx_reset_fn = HMAC_CTX_reset;
|
|
136
|
+
ntlm->crypt_ctx.hmac_ctx_cleanup_fn = HMAC_CTX_cleanup;
|
|
137
|
+
ntlm->crypt_ctx.hmac_init_ex_fn = HMAC_Init_ex;
|
|
138
|
+
ntlm->crypt_ctx.hmac_update_fn = HMAC_Update;
|
|
139
|
+
ntlm->crypt_ctx.hmac_final_fn = HMAC_Final;
|
|
140
|
+
ntlm->crypt_ctx.md4_fn = MD4;
|
|
141
|
+
ntlm->crypt_ctx.rand_bytes_fn = RAND_bytes;
|
|
142
|
+
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
#endif /* CRYPT_OPENSSL_DYNAMIC */
|
|
147
|
+
|
|
148
|
+
bool ntlm_crypt_init(ntlm_client *ntlm)
|
|
149
|
+
{
|
|
150
|
+
if (!ntlm_crypt_init_functions(ntlm))
|
|
151
|
+
return false;
|
|
152
|
+
|
|
153
|
+
ntlm->crypt_ctx.hmac = ntlm->crypt_ctx.hmac_ctx_new_fn();
|
|
154
|
+
|
|
155
|
+
if (ntlm->crypt_ctx.hmac == NULL) {
|
|
156
|
+
ntlm_client_set_errmsg(ntlm, "out of memory");
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
|
|
23
163
|
bool ntlm_random_bytes(
|
|
24
|
-
ntlm_client *ntlm,
|
|
25
164
|
unsigned char *out,
|
|
165
|
+
ntlm_client *ntlm,
|
|
26
166
|
size_t len)
|
|
27
167
|
{
|
|
28
|
-
int rc =
|
|
168
|
+
int rc = ntlm->crypt_ctx.rand_bytes_fn(out, len);
|
|
29
169
|
|
|
30
170
|
if (rc != 1) {
|
|
31
|
-
ntlm_client_set_errmsg(ntlm,
|
|
171
|
+
ntlm_client_set_errmsg(ntlm, ntlm->crypt_ctx.err_lib_error_string_fn(ntlm->crypt_ctx.err_get_error_fn()));
|
|
32
172
|
return false;
|
|
33
173
|
}
|
|
34
174
|
|
|
@@ -37,94 +177,81 @@ bool ntlm_random_bytes(
|
|
|
37
177
|
|
|
38
178
|
bool ntlm_des_encrypt(
|
|
39
179
|
ntlm_des_block *out,
|
|
180
|
+
ntlm_client *ntlm,
|
|
40
181
|
ntlm_des_block *plaintext,
|
|
41
182
|
ntlm_des_block *key)
|
|
42
183
|
{
|
|
43
184
|
DES_key_schedule keysched;
|
|
44
185
|
|
|
186
|
+
NTLM_UNUSED(ntlm);
|
|
187
|
+
|
|
45
188
|
memset(out, 0, sizeof(ntlm_des_block));
|
|
46
189
|
|
|
47
|
-
|
|
48
|
-
|
|
190
|
+
ntlm->crypt_ctx.des_set_key_fn(key, &keysched);
|
|
191
|
+
ntlm->crypt_ctx.des_ecb_encrypt_fn(plaintext, out, &keysched, DES_ENCRYPT);
|
|
49
192
|
|
|
50
193
|
return true;
|
|
51
194
|
}
|
|
52
195
|
|
|
53
196
|
bool ntlm_md4_digest(
|
|
54
197
|
unsigned char out[CRYPT_MD4_DIGESTSIZE],
|
|
198
|
+
ntlm_client *ntlm,
|
|
55
199
|
const unsigned char *in,
|
|
56
200
|
size_t in_len)
|
|
57
201
|
{
|
|
58
|
-
|
|
202
|
+
ntlm->crypt_ctx.md4_fn(in, in_len, out);
|
|
59
203
|
return true;
|
|
60
204
|
}
|
|
61
205
|
|
|
62
|
-
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
63
|
-
static inline void HMAC_CTX_free(HMAC_CTX *ctx)
|
|
64
|
-
{
|
|
65
|
-
if (ctx)
|
|
66
|
-
HMAC_CTX_cleanup(ctx);
|
|
67
|
-
|
|
68
|
-
free(ctx);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
static inline int HMAC_CTX_reset(HMAC_CTX *ctx)
|
|
72
|
-
{
|
|
73
|
-
HMAC_CTX_cleanup(ctx);
|
|
74
|
-
memzero(ctx, sizeof(HMAC_CTX));
|
|
75
|
-
return 1;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
static inline HMAC_CTX *HMAC_CTX_new(void)
|
|
79
|
-
{
|
|
80
|
-
return calloc(1, sizeof(HMAC_CTX));
|
|
81
|
-
}
|
|
82
|
-
#endif
|
|
83
|
-
|
|
84
|
-
ntlm_hmac_ctx *ntlm_hmac_ctx_init(void)
|
|
85
|
-
{
|
|
86
|
-
return HMAC_CTX_new();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
bool ntlm_hmac_ctx_reset(ntlm_hmac_ctx *ctx)
|
|
90
|
-
{
|
|
91
|
-
return HMAC_CTX_reset(ctx);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
206
|
bool ntlm_hmac_md5_init(
|
|
95
|
-
|
|
207
|
+
ntlm_client *ntlm,
|
|
96
208
|
const unsigned char *key,
|
|
97
209
|
size_t key_len)
|
|
98
210
|
{
|
|
99
|
-
|
|
211
|
+
const EVP_MD *md5 = ntlm->crypt_ctx.evp_md5_fn();
|
|
212
|
+
|
|
213
|
+
ntlm->crypt_ctx.hmac_ctx_cleanup_fn(ntlm->crypt_ctx.hmac);
|
|
214
|
+
|
|
215
|
+
return ntlm->crypt_ctx.hmac_ctx_reset_fn(ntlm->crypt_ctx.hmac) &&
|
|
216
|
+
ntlm->crypt_ctx.hmac_init_ex_fn(ntlm->crypt_ctx.hmac, key, key_len, md5, NULL);
|
|
100
217
|
}
|
|
101
218
|
|
|
102
219
|
bool ntlm_hmac_md5_update(
|
|
103
|
-
|
|
220
|
+
ntlm_client *ntlm,
|
|
104
221
|
const unsigned char *in,
|
|
105
222
|
size_t in_len)
|
|
106
223
|
{
|
|
107
|
-
return
|
|
224
|
+
return ntlm->crypt_ctx.hmac_update_fn(ntlm->crypt_ctx.hmac, in, in_len);
|
|
108
225
|
}
|
|
109
226
|
|
|
110
227
|
bool ntlm_hmac_md5_final(
|
|
111
228
|
unsigned char *out,
|
|
112
229
|
size_t *out_len,
|
|
113
|
-
|
|
230
|
+
ntlm_client *ntlm)
|
|
114
231
|
{
|
|
115
232
|
unsigned int len;
|
|
116
233
|
|
|
117
234
|
if (*out_len < CRYPT_MD5_DIGESTSIZE)
|
|
118
235
|
return false;
|
|
119
236
|
|
|
120
|
-
if (!
|
|
237
|
+
if (!ntlm->crypt_ctx.hmac_final_fn(ntlm->crypt_ctx.hmac, out, &len))
|
|
121
238
|
return false;
|
|
122
239
|
|
|
123
240
|
*out_len = len;
|
|
124
241
|
return true;
|
|
125
242
|
}
|
|
126
243
|
|
|
127
|
-
void
|
|
244
|
+
void ntlm_crypt_shutdown(ntlm_client *ntlm)
|
|
128
245
|
{
|
|
129
|
-
|
|
246
|
+
if (ntlm->crypt_ctx.hmac) {
|
|
247
|
+
ntlm->crypt_ctx.hmac_ctx_cleanup_fn(ntlm->crypt_ctx.hmac);
|
|
248
|
+
ntlm->crypt_ctx.hmac_ctx_free_fn(ntlm->crypt_ctx.hmac);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
#ifdef CRYPT_OPENSSL_DYNAMIC
|
|
252
|
+
if (ntlm->crypt_ctx.openssl_handle)
|
|
253
|
+
dlclose(ntlm->crypt_ctx.openssl_handle);
|
|
254
|
+
#endif
|
|
255
|
+
|
|
256
|
+
memset(&ntlm->crypt_ctx, 0, sizeof(ntlm_crypt_ctx));
|
|
130
257
|
}
|