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.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -1,5 +1,6 @@
1
- FILE(GLOB SRC_HTTP "*.c" "*.h")
1
+ file(GLOB SRC_HTTP "*.c" "*.h")
2
+ list(SORT SRC_HTTP)
2
3
 
3
- ADD_LIBRARY(http-parser OBJECT ${SRC_HTTP})
4
+ add_library(http-parser OBJECT ${SRC_HTTP})
4
5
 
5
- ENABLE_WARNINGS(implicit-fallthrough=1)
6
+ enable_warnings(implicit-fallthrough=1)
@@ -1,23 +1,37 @@
1
- FILE(GLOB SRC_NTLMCLIENT "ntlm.c" "unicode_builtin.c" "util.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 (HTTPS_BACKEND STREQUAL "SecureTransport")
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 (HTTPS_BACKEND STREQUAL "OpenSSL")
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 (HTTPS_BACKEND STREQUAL "mbedTLS")
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
- SET(SRC_NTLMCLIENT_CRYPTO "crypt_mbedtls.c")
19
- ELSE ()
20
- MESSAGE(FATAL_ERROR "Unable to use libgit2's HTTPS backend (${HTTPS_BACKEND}) for NTLM crypto")
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
- ntlm_hmac_ctx *ctx,
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
- ntlm_hmac_ctx *ctx,
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
- ntlm_hmac_ctx *ctx);
65
+ ntlm_client *ntlm);
61
66
 
62
- extern void ntlm_hmac_ctx_free(ntlm_hmac_ctx *ctx);
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
- ntlm_hmac_ctx *ctx,
86
+ ntlm_client *ntlm,
87
87
  const unsigned char *key,
88
88
  size_t key_len)
89
89
  {
90
- CCHmacInit(&ctx->native, kCCHmacAlgMD5, key, key_len);
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
- ntlm_hmac_ctx *ctx,
95
+ ntlm_client *ntlm,
96
96
  const unsigned char *data,
97
97
  size_t data_len)
98
98
  {
99
- CCHmacUpdate(&ctx->native, data, data_len);
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
- ntlm_hmac_ctx *ctx)
106
+ ntlm_client *ntlm)
107
107
  {
108
108
  if (*out_len < CRYPT_MD5_DIGESTSIZE)
109
109
  return false;
110
110
 
111
- CCHmacFinal(&ctx->native, out);
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 ntlm_hmac_ctx_free(ntlm_hmac_ctx *ctx)
117
+ void ntlm_crypt_shutdown(ntlm_client *ntlm)
118
118
  {
119
- free(ctx);
119
+ NTLM_UNUSED(ntlm);
120
120
  }
@@ -11,8 +11,8 @@
11
11
 
12
12
  #include <CommonCrypto/CommonCrypto.h>
13
13
 
14
- typedef struct {
15
- CCHmacContext native;
16
- } ntlm_hmac_ctx;
14
+ struct ntlm_crypt_ctx {
15
+ CCHmacContext hmac;
16
+ };
17
17
 
18
18
  #endif /* PRIVATE_CRYPT_COMMONCRYPTO_H__ */
@@ -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
- mbedtls_des_crypt_ecb(&ctx, *plaintext, *out))
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
- ntlm_hmac_ctx *ctx,
111
+ ntlm_client *ntlm,
114
112
  const unsigned char *key,
115
113
  size_t key_len)
116
114
  {
117
- return !mbedtls_md_hmac_starts(&ctx->mbed, key, key_len);
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
- ntlm_hmac_ctx *ctx,
125
+ ntlm_client *ntlm,
122
126
  const unsigned char *in,
123
127
  size_t in_len)
124
128
  {
125
- return !mbedtls_md_hmac_update(&ctx->mbed, in, in_len);
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
- ntlm_hmac_ctx *ctx)
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(&ctx->mbed, out);
140
+ return !mbedtls_md_hmac_finish(&ntlm->crypt_ctx.hmac, out);
137
141
  }
138
142
 
139
- void ntlm_hmac_ctx_free(ntlm_hmac_ctx *ctx)
143
+ void ntlm_crypt_shutdown(ntlm_client *ntlm)
140
144
  {
141
- if (ctx) {
142
- mbedtls_md_free(&ctx->mbed);
143
- free(ctx);
144
- }
145
+ mbedtls_md_free(&ntlm->crypt_ctx.hmac);
145
146
  }
@@ -11,8 +11,9 @@
11
11
 
12
12
  #include "mbedtls/md.h"
13
13
 
14
- typedef struct {
15
- mbedtls_md_context_t mbed;
16
- } ntlm_hmac_ctx;
14
+ struct ntlm_crypt_ctx {
15
+ mbedtls_md_context_t hmac;
16
+ unsigned int hmac_initialized : 1;
17
+ };
17
18
 
18
19
  #endif /* PRIVATE_CRYPT_MBEDTLS_H__ */
@@ -9,26 +9,166 @@
9
9
  #include <stdlib.h>
10
10
  #include <string.h>
11
11
 
12
- #include <openssl/rand.h>
13
- #include <openssl/des.h>
14
- #include <openssl/md4.h>
15
- #include <openssl/hmac.h>
16
- #include <openssl/err.h>
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 = RAND_bytes(out, len);
168
+ int rc = ntlm->crypt_ctx.rand_bytes_fn(out, len);
29
169
 
30
170
  if (rc != 1) {
31
- ntlm_client_set_errmsg(ntlm, ERR_lib_error_string(ERR_get_error()));
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
- DES_set_key(key, &keysched);
48
- DES_ecb_encrypt(plaintext, out, &keysched, DES_ENCRYPT);
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
- MD4(in, in_len, out);
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
- ntlm_hmac_ctx *ctx,
207
+ ntlm_client *ntlm,
96
208
  const unsigned char *key,
97
209
  size_t key_len)
98
210
  {
99
- return HMAC_Init_ex(ctx, key, key_len, EVP_md5(), NULL);
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
- ntlm_hmac_ctx *ctx,
220
+ ntlm_client *ntlm,
104
221
  const unsigned char *in,
105
222
  size_t in_len)
106
223
  {
107
- return HMAC_Update(ctx, in, in_len);
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
- ntlm_hmac_ctx *ctx)
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 (!HMAC_Final(ctx, out, &len))
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 ntlm_hmac_ctx_free(ntlm_hmac_ctx *ctx)
244
+ void ntlm_crypt_shutdown(ntlm_client *ntlm)
128
245
  {
129
- HMAC_CTX_free(ctx);
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
  }