rugged 1.7.2 → 1.9.4

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 (405) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +195 -1
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
  59. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  60. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  61. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  62. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  63. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  64. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  65. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  66. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  67. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  68. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  69. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  70. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  71. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  72. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  73. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  74. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  75. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  76. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  77. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  78. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  79. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  80. data/vendor/libgit2/include/git2/apply.h +27 -6
  81. data/vendor/libgit2/include/git2/attr.h +17 -4
  82. data/vendor/libgit2/include/git2/blame.h +133 -28
  83. data/vendor/libgit2/include/git2/blob.h +71 -28
  84. data/vendor/libgit2/include/git2/branch.h +22 -15
  85. data/vendor/libgit2/include/git2/buffer.h +6 -4
  86. data/vendor/libgit2/include/git2/cert.h +2 -1
  87. data/vendor/libgit2/include/git2/checkout.h +83 -32
  88. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  89. data/vendor/libgit2/include/git2/clone.h +25 -9
  90. data/vendor/libgit2/include/git2/commit.h +132 -3
  91. data/vendor/libgit2/include/git2/common.h +120 -63
  92. data/vendor/libgit2/include/git2/config.h +93 -23
  93. data/vendor/libgit2/include/git2/credential.h +30 -2
  94. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  96. data/vendor/libgit2/include/git2/describe.h +13 -1
  97. data/vendor/libgit2/include/git2/diff.h +38 -8
  98. data/vendor/libgit2/include/git2/email.h +9 -29
  99. data/vendor/libgit2/include/git2/errors.h +46 -73
  100. data/vendor/libgit2/include/git2/filter.h +14 -7
  101. data/vendor/libgit2/include/git2/global.h +8 -1
  102. data/vendor/libgit2/include/git2/graph.h +3 -2
  103. data/vendor/libgit2/include/git2/ignore.h +10 -0
  104. data/vendor/libgit2/include/git2/index.h +100 -15
  105. data/vendor/libgit2/include/git2/indexer.h +21 -4
  106. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  107. data/vendor/libgit2/include/git2/merge.h +50 -3
  108. data/vendor/libgit2/include/git2/message.h +2 -2
  109. data/vendor/libgit2/include/git2/net.h +3 -1
  110. data/vendor/libgit2/include/git2/notes.h +9 -6
  111. data/vendor/libgit2/include/git2/object.h +9 -8
  112. data/vendor/libgit2/include/git2/odb.h +91 -49
  113. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  114. data/vendor/libgit2/include/git2/oid.h +23 -25
  115. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  116. data/vendor/libgit2/include/git2/pack.h +13 -1
  117. data/vendor/libgit2/include/git2/patch.h +2 -3
  118. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  119. data/vendor/libgit2/include/git2/proxy.h +12 -3
  120. data/vendor/libgit2/include/git2/rebase.h +9 -6
  121. data/vendor/libgit2/include/git2/refdb.h +2 -2
  122. data/vendor/libgit2/include/git2/reflog.h +3 -2
  123. data/vendor/libgit2/include/git2/refs.h +9 -6
  124. data/vendor/libgit2/include/git2/refspec.h +14 -4
  125. data/vendor/libgit2/include/git2/remote.h +113 -25
  126. data/vendor/libgit2/include/git2/repository.h +57 -21
  127. data/vendor/libgit2/include/git2/reset.h +16 -3
  128. data/vendor/libgit2/include/git2/revert.h +9 -4
  129. data/vendor/libgit2/include/git2/revparse.h +3 -3
  130. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  131. data/vendor/libgit2/include/git2/signature.h +46 -1
  132. data/vendor/libgit2/include/git2/stash.h +17 -3
  133. data/vendor/libgit2/include/git2/status.h +10 -6
  134. data/vendor/libgit2/include/git2/stdint.h +87 -85
  135. data/vendor/libgit2/include/git2/strarray.h +2 -3
  136. data/vendor/libgit2/include/git2/submodule.h +20 -9
  137. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  138. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  139. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  140. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  141. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  142. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  143. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  144. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  145. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  146. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  147. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  148. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  149. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  150. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  151. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  152. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  153. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  154. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  155. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  156. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  157. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  158. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  159. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  160. data/vendor/libgit2/include/git2/tag.h +3 -1
  161. data/vendor/libgit2/include/git2/trace.h +9 -3
  162. data/vendor/libgit2/include/git2/transaction.h +3 -2
  163. data/vendor/libgit2/include/git2/transport.h +11 -3
  164. data/vendor/libgit2/include/git2/tree.h +16 -5
  165. data/vendor/libgit2/include/git2/types.h +19 -3
  166. data/vendor/libgit2/include/git2/version.h +46 -8
  167. data/vendor/libgit2/include/git2/worktree.h +16 -6
  168. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  169. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  170. data/vendor/libgit2/src/cli/cmd.c +1 -1
  171. data/vendor/libgit2/src/cli/cmd.h +4 -0
  172. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  173. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  174. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  175. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  176. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  177. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  178. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  179. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  180. data/vendor/libgit2/src/cli/common.c +168 -0
  181. data/vendor/libgit2/src/cli/common.h +63 -0
  182. data/vendor/libgit2/src/cli/error.h +1 -1
  183. data/vendor/libgit2/src/cli/main.c +52 -24
  184. data/vendor/libgit2/src/cli/opt.c +31 -5
  185. data/vendor/libgit2/src/cli/opt.h +21 -3
  186. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  187. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  188. data/vendor/libgit2/src/cli/progress.c +51 -2
  189. data/vendor/libgit2/src/cli/progress.h +12 -0
  190. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  191. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  192. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  193. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  194. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  195. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  196. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  197. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  198. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  199. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  200. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  201. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  202. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  203. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  204. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  205. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  206. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  207. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  208. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  209. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  210. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  211. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  212. data/vendor/libgit2/src/libgit2/config.c +390 -299
  213. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  214. data/vendor/libgit2/src/libgit2/config.h +9 -4
  215. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  216. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  217. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  218. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  219. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  220. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  221. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  222. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  223. data/vendor/libgit2/src/libgit2/delta.c +5 -1
  224. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  225. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  226. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  227. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  228. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  229. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  230. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  231. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  232. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  233. data/vendor/libgit2/src/libgit2/email.c +1 -0
  234. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  235. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  236. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  237. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  238. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  239. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  240. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  241. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  242. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  243. data/vendor/libgit2/src/libgit2/index.c +76 -98
  244. data/vendor/libgit2/src/libgit2/index.h +5 -2
  245. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  246. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  247. data/vendor/libgit2/src/libgit2/indexer.c +36 -40
  248. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  249. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  252. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  253. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  254. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  255. data/vendor/libgit2/src/libgit2/message.c +1 -1
  256. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  257. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  258. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  259. data/vendor/libgit2/src/libgit2/object.c +6 -5
  260. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  261. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  264. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  267. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  268. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  269. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  270. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/path.c +1 -1
  272. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  273. data/vendor/libgit2/src/libgit2/push.c +79 -28
  274. data/vendor/libgit2/src/libgit2/push.h +1 -0
  275. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  276. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  277. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  278. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  279. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  280. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  281. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  282. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  283. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  284. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  285. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  286. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  287. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  288. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  289. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  290. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  291. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  292. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  293. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  294. data/vendor/libgit2/src/libgit2/status.c +1 -1
  295. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  296. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  297. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  298. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  299. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  300. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  301. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  302. data/vendor/libgit2/src/libgit2/submodule.c +118 -68
  303. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  304. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  305. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  306. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  307. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  308. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  309. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  310. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  311. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  312. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  313. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  314. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  315. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  316. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  317. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  318. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  319. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  320. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
  321. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  322. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  323. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  324. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  325. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  326. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  327. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  328. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  329. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  330. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  331. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  332. data/vendor/libgit2/src/util/alloc.c +4 -1
  333. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  334. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  335. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  336. data/vendor/libgit2/src/util/array.h +18 -17
  337. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  338. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  339. data/vendor/libgit2/src/util/date.c +22 -14
  340. data/vendor/libgit2/src/util/date.h +12 -0
  341. data/vendor/libgit2/src/util/errors.c +401 -0
  342. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  343. data/vendor/libgit2/src/util/fs_path.c +81 -10
  344. data/vendor/libgit2/src/util/fs_path.h +29 -0
  345. data/vendor/libgit2/src/util/futils.c +6 -5
  346. data/vendor/libgit2/src/util/futils.h +24 -7
  347. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  348. data/vendor/libgit2/src/util/git2_util.h +6 -0
  349. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  350. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  351. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  352. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  353. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  354. data/vendor/libgit2/src/util/hashmap.h +425 -0
  355. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  356. data/vendor/libgit2/src/util/integer.h +3 -1
  357. data/vendor/libgit2/src/util/net.c +17 -11
  358. data/vendor/libgit2/src/util/net.h +2 -0
  359. data/vendor/libgit2/src/util/pool.c +1 -1
  360. data/vendor/libgit2/src/util/pool.h +5 -0
  361. data/vendor/libgit2/src/util/pqueue.h +1 -1
  362. data/vendor/libgit2/src/util/process.h +223 -0
  363. data/vendor/libgit2/src/util/rand.c +1 -7
  364. data/vendor/libgit2/src/util/regexp.c +1 -1
  365. data/vendor/libgit2/src/util/runtime.c +2 -2
  366. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  367. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  368. data/vendor/libgit2/src/util/str.c +20 -8
  369. data/vendor/libgit2/src/util/str.h +5 -3
  370. data/vendor/libgit2/src/util/strlist.c +108 -0
  371. data/vendor/libgit2/src/util/strlist.h +36 -0
  372. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  373. data/vendor/libgit2/src/util/unix/process.c +706 -0
  374. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  375. data/vendor/libgit2/src/util/util.c +18 -5
  376. data/vendor/libgit2/src/util/util.h +5 -38
  377. data/vendor/libgit2/src/util/vector.c +3 -3
  378. data/vendor/libgit2/src/util/vector.h +2 -2
  379. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  380. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  381. data/vendor/libgit2/src/util/win32/process.c +522 -0
  382. metadata +60 -32
  383. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  384. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  385. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  386. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  387. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  388. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  389. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  390. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  391. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  392. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  393. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  394. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  395. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  396. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  397. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  398. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  399. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  400. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  401. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  402. data/vendor/libgit2/src/util/khash.h +0 -615
  403. data/vendor/libgit2/src/util/strmap.c +0 -100
  404. data/vendor/libgit2/src/util/strmap.h +0 -131
  405. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -419,6 +419,16 @@ int git_fs_path_to_dir(git_str *path)
419
419
  return git_str_oom(path) ? -1 : 0;
420
420
  }
421
421
 
422
+ size_t git_fs_path_dirlen(const char *path)
423
+ {
424
+ size_t len = strlen(path);
425
+
426
+ while (len > 1 && path[len - 1] == '/')
427
+ len--;
428
+
429
+ return len;
430
+ }
431
+
422
432
  void git_fs_path_string_to_dir(char *path, size_t size)
423
433
  {
424
434
  size_t end = strlen(path);
@@ -601,6 +611,37 @@ bool git_fs_path_isfile(const char *path)
601
611
  return S_ISREG(st.st_mode) != 0;
602
612
  }
603
613
 
614
+ #ifdef GIT_WIN32
615
+
616
+ bool git_fs_path_isexecutable(const char *path)
617
+ {
618
+ struct stat st;
619
+
620
+ GIT_ASSERT_ARG_WITH_RETVAL(path, false);
621
+
622
+ if (git__suffixcmp_icase(path, ".exe") != 0 &&
623
+ git__suffixcmp_icase(path, ".cmd") != 0)
624
+ return false;
625
+
626
+ return (p_stat(path, &st) == 0);
627
+ }
628
+
629
+ #else
630
+
631
+ bool git_fs_path_isexecutable(const char *path)
632
+ {
633
+ struct stat st;
634
+
635
+ GIT_ASSERT_ARG_WITH_RETVAL(path, false);
636
+ if (p_stat(path, &st) < 0)
637
+ return false;
638
+
639
+ return S_ISREG(st.st_mode) != 0 &&
640
+ ((st.st_mode & S_IXUSR) != 0);
641
+ }
642
+
643
+ #endif
644
+
604
645
  bool git_fs_path_islink(const char *path)
605
646
  {
606
647
  struct stat st;
@@ -1938,12 +1979,13 @@ static int sudo_uid_lookup(uid_t *out)
1938
1979
  {
1939
1980
  git_str uid_str = GIT_STR_INIT;
1940
1981
  int64_t uid;
1941
- int error;
1982
+ int error = -1;
1942
1983
 
1943
- if ((error = git__getenv(&uid_str, "SUDO_UID")) == 0 &&
1944
- (error = git__strntol64(&uid, uid_str.ptr, uid_str.size, NULL, 10)) == 0 &&
1945
- uid == (int64_t)((uid_t)uid)) {
1984
+ if (git__getenv(&uid_str, "SUDO_UID") == 0 &&
1985
+ git__strntol64(&uid, uid_str.ptr, uid_str.size, NULL, 10) == 0 &&
1986
+ uid == (int64_t)((uid_t)uid)) {
1946
1987
  *out = (uid_t)uid;
1988
+ error = 0;
1947
1989
  }
1948
1990
 
1949
1991
  git_str_dispose(&uid_str);
@@ -2009,9 +2051,10 @@ int git_fs_path_owner_is_system(bool *out, const char *path)
2009
2051
  return git_fs_path_owner_is(out, path, GIT_FS_PATH_OWNER_ADMINISTRATOR);
2010
2052
  }
2011
2053
 
2012
- int git_fs_path_find_executable(git_str *fullpath, const char *executable)
2013
- {
2014
2054
  #ifdef GIT_WIN32
2055
+
2056
+ static int find_executable(git_str *fullpath, const char *executable)
2057
+ {
2015
2058
  git_win32_path fullpath_w, executable_w;
2016
2059
  int error;
2017
2060
 
@@ -2024,9 +2067,15 @@ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
2024
2067
  error = git_str_put_w(fullpath, fullpath_w, wcslen(fullpath_w));
2025
2068
 
2026
2069
  return error;
2070
+ }
2071
+
2027
2072
  #else
2073
+
2074
+ static int find_executable(git_str *fullpath, const char *executable)
2075
+ {
2028
2076
  git_str path = GIT_STR_INIT;
2029
2077
  const char *current_dir, *term;
2078
+ size_t current_dirlen;
2030
2079
  bool found = false;
2031
2080
 
2032
2081
  if (git__getenv(&path, "PATH") < 0)
@@ -2038,20 +2087,28 @@ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
2038
2087
  if (! (term = strchr(current_dir, GIT_PATH_LIST_SEPARATOR)))
2039
2088
  term = strchr(current_dir, '\0');
2040
2089
 
2090
+ current_dirlen = term - current_dir;
2041
2091
  git_str_clear(fullpath);
2042
- if (git_str_put(fullpath, current_dir, (term - current_dir)) < 0 ||
2043
- git_str_putc(fullpath, '/') < 0 ||
2092
+
2093
+ /* An empty path segment is treated as '.' */
2094
+ if (current_dirlen == 0 && git_str_putc(fullpath, '.'))
2095
+ return -1;
2096
+ else if (current_dirlen != 0 &&
2097
+ git_str_put(fullpath, current_dir, current_dirlen) < 0)
2098
+ return -1;
2099
+
2100
+ if (git_str_putc(fullpath, '/') < 0 ||
2044
2101
  git_str_puts(fullpath, executable) < 0)
2045
2102
  return -1;
2046
2103
 
2047
- if (git_fs_path_isfile(fullpath->ptr)) {
2104
+ if (git_fs_path_isexecutable(fullpath->ptr)) {
2048
2105
  found = true;
2049
2106
  break;
2050
2107
  }
2051
2108
 
2052
2109
  current_dir = term;
2053
2110
 
2054
- while (*current_dir == GIT_PATH_LIST_SEPARATOR)
2111
+ if (*current_dir == GIT_PATH_LIST_SEPARATOR)
2055
2112
  current_dir++;
2056
2113
  }
2057
2114
 
@@ -2062,5 +2119,19 @@ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
2062
2119
 
2063
2120
  git_str_clear(fullpath);
2064
2121
  return GIT_ENOTFOUND;
2122
+ }
2123
+
2065
2124
  #endif
2125
+
2126
+ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
2127
+ {
2128
+ /* For qualified paths we do not look in PATH */
2129
+ if (strchr(executable, '/') != NULL) {
2130
+ if (!git_fs_path_isexecutable(executable))
2131
+ return GIT_ENOTFOUND;
2132
+
2133
+ return git_str_puts(fullpath, executable);
2134
+ }
2135
+
2136
+ return find_executable(fullpath, executable);
2066
2137
  }
@@ -86,6 +86,29 @@ extern int git_fs_path_to_dir(git_str *path);
86
86
  */
87
87
  extern void git_fs_path_string_to_dir(char *path, size_t size);
88
88
 
89
+ /**
90
+ * Provides the length of the given path string with no trailing
91
+ * slashes.
92
+ */
93
+ size_t git_fs_path_dirlen(const char *path);
94
+
95
+ /**
96
+ * Returns nonzero if the given path is a filesystem root; on Windows, this
97
+ * means a drive letter (eg `A:/`, `C:\`). On POSIX this is `/`.
98
+ */
99
+ GIT_INLINE(int) git_fs_path_is_root(const char *name)
100
+ {
101
+ #ifdef GIT_WIN32
102
+ if (((name[0] >= 'A' && name[0] <= 'Z') || (name[0] >= 'a' && name[0] <= 'z')) &&
103
+ name[1] == ':' &&
104
+ (name[2] == '/' || name[2] == '\\') &&
105
+ name[3] == '\0')
106
+ return 1;
107
+ #endif
108
+
109
+ return (name[0] == '/' && name[1] == '\0');
110
+ }
111
+
89
112
  /**
90
113
  * Taken from git.git; returns nonzero if the given path is "." or "..".
91
114
  */
@@ -181,6 +204,12 @@ extern bool git_fs_path_isdir(const char *path);
181
204
  */
182
205
  extern bool git_fs_path_isfile(const char *path);
183
206
 
207
+ /**
208
+ * Check if the given path points to an executable.
209
+ * @return true or false
210
+ */
211
+ extern bool git_fs_path_isexecutable(const char *path);
212
+
184
213
  /**
185
214
  * Check if the given path points to a symbolic link.
186
215
  * @return true or false
@@ -8,9 +8,9 @@
8
8
  #include "futils.h"
9
9
 
10
10
  #include "runtime.h"
11
- #include "strmap.h"
12
11
  #include "hash.h"
13
12
  #include "rand.h"
13
+ #include "hashmap_str.h"
14
14
 
15
15
  #include <ctype.h>
16
16
 
@@ -653,7 +653,8 @@ int git_futils_mkdir_relative(
653
653
  *tail = '\0';
654
654
  st.st_mode = 0;
655
655
 
656
- if (opts->dir_map && git_strmap_exists(opts->dir_map, make_path.ptr))
656
+ if (opts->cache_pathset &&
657
+ git_hashset_str_contains(opts->cache_pathset, make_path.ptr))
657
658
  continue;
658
659
 
659
660
  /* See what's going on with this path component */
@@ -688,17 +689,17 @@ retry_lstat:
688
689
  make_path.ptr, &st, (lastch == '\0'), mode, flags, opts)) < 0)
689
690
  goto done;
690
691
 
691
- if (opts->dir_map && opts->pool) {
692
+ if (opts->cache_pathset && opts->cache_pool) {
692
693
  char *cache_path;
693
694
  size_t alloc_size;
694
695
 
695
696
  GIT_ERROR_CHECK_ALLOC_ADD(&alloc_size, make_path.size, 1);
696
- cache_path = git_pool_malloc(opts->pool, alloc_size);
697
+ cache_path = git_pool_malloc(opts->cache_pool, alloc_size);
697
698
  GIT_ERROR_CHECK_ALLOC(cache_path);
698
699
 
699
700
  memcpy(cache_path, make_path.ptr, make_path.size + 1);
700
701
 
701
- if ((error = git_strmap_set(opts->dir_map, cache_path, cache_path)) < 0)
702
+ if ((error = git_hashset_str_add(opts->cache_pathset, cache_path)) < 0)
702
703
  goto done;
703
704
  }
704
705
  }
@@ -13,8 +13,8 @@
13
13
  #include "posix.h"
14
14
  #include "fs_path.h"
15
15
  #include "pool.h"
16
- #include "strmap.h"
17
16
  #include "hash.h"
17
+ #include "hashmap_str.h"
18
18
 
19
19
  /**
20
20
  * Filebuffer methods
@@ -25,16 +25,24 @@ extern int git_futils_readbuffer(git_str *obj, const char *path);
25
25
  extern int git_futils_readbuffer_updated(
26
26
  git_str *obj,
27
27
  const char *path,
28
- unsigned char checksum[GIT_HASH_SHA1_SIZE],
28
+ unsigned char checksum[GIT_HASH_SHA256_SIZE],
29
29
  int *updated);
30
30
  extern int git_futils_readbuffer_fd_full(git_str *obj, git_file fd);
31
31
  extern int git_futils_readbuffer_fd(git_str *obj, git_file fd, size_t len);
32
32
 
33
33
  /* Additional constants for `git_futils_writebuffer`'s `open_flags`. We
34
34
  * support these internally and they will be removed before the `open` call.
35
- */
36
- #ifndef O_FSYNC
37
- # define O_FSYNC (1 << 31)
35
+ *
36
+ * Not all platforms define O_FSYNC. Fall back to O_SYNC (the POSIX
37
+ * standard name; O_FSYNC is a non-standard alias) when available,
38
+ * otherwise use a sentinel value that won't collide with real open
39
+ * flags. Avoid (1 << 31) since left-shifting into the sign bit of
40
+ * a signed int is undefined behavior.
41
+ */
42
+ #if !defined(O_FSYNC) && defined(O_SYNC)
43
+ # define O_FSYNC O_SYNC
44
+ #elif !defined(O_FSYNC)
45
+ # define O_FSYNC (1 << 30)
38
46
  #endif
39
47
 
40
48
  extern int git_futils_writebuffer(
@@ -109,8 +117,17 @@ struct git_futils_mkdir_perfdata
109
117
 
110
118
  struct git_futils_mkdir_options
111
119
  {
112
- git_strmap *dir_map;
113
- git_pool *pool;
120
+ /*
121
+ * Callers can optionally pass an allocation pool and a
122
+ * hashset of strings; mkdir will populate these with the
123
+ * path(s) it creates; this can be useful for repeated calls
124
+ * to mkdir. This will reduce I/O by avoiding testing for the
125
+ * existence of intermediate directories that it knows already
126
+ * exist (because it created them).
127
+ */
128
+ git_pool *cache_pool;
129
+ git_hashset_str *cache_pathset;
130
+
114
131
  struct git_futils_mkdir_perfdata perfdata;
115
132
  };
116
133
 
@@ -30,7 +30,9 @@
30
30
  #cmakedefine GIT_QSORT_MSC
31
31
 
32
32
  #cmakedefine GIT_SSH 1
33
- #cmakedefine GIT_SSH_MEMORY_CREDENTIALS 1
33
+ #cmakedefine GIT_SSH_EXEC 1
34
+ #cmakedefine GIT_SSH_LIBSSH2 1
35
+ #cmakedefine GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS 1
34
36
 
35
37
  #cmakedefine GIT_NTLM 1
36
38
  #cmakedefine GIT_GSSAPI 1
@@ -44,10 +46,15 @@
44
46
  #cmakedefine GIT_MBEDTLS 1
45
47
  #cmakedefine GIT_SCHANNEL 1
46
48
 
49
+ #cmakedefine GIT_HTTPPARSER_HTTPPARSER 1
50
+ #cmakedefine GIT_HTTPPARSER_LLHTTP 1
51
+ #cmakedefine GIT_HTTPPARSER_BUILTIN 1
52
+
47
53
  #cmakedefine GIT_SHA1_COLLISIONDETECT 1
48
54
  #cmakedefine GIT_SHA1_WIN32 1
49
55
  #cmakedefine GIT_SHA1_COMMON_CRYPTO 1
50
56
  #cmakedefine GIT_SHA1_OPENSSL 1
57
+ #cmakedefine GIT_SHA1_OPENSSL_FIPS 1
51
58
  #cmakedefine GIT_SHA1_OPENSSL_DYNAMIC 1
52
59
  #cmakedefine GIT_SHA1_MBEDTLS 1
53
60
 
@@ -55,9 +62,13 @@
55
62
  #cmakedefine GIT_SHA256_WIN32 1
56
63
  #cmakedefine GIT_SHA256_COMMON_CRYPTO 1
57
64
  #cmakedefine GIT_SHA256_OPENSSL 1
65
+ #cmakedefine GIT_SHA256_OPENSSL_FIPS 1
58
66
  #cmakedefine GIT_SHA256_OPENSSL_DYNAMIC 1
59
67
  #cmakedefine GIT_SHA256_MBEDTLS 1
60
68
 
69
+ #cmakedefine GIT_COMPRESSION_BUILTIN 1
70
+ #cmakedefine GIT_COMPRESSION_ZLIB 1
71
+
61
72
  #cmakedefine GIT_RAND_GETENTROPY 1
62
73
  #cmakedefine GIT_RAND_GETLOADAVG 1
63
74
 
@@ -12,6 +12,7 @@
12
12
  #endif
13
13
 
14
14
  #include "git2/common.h"
15
+ #include "git2/sys/errors.h"
15
16
  #include "cc-compat.h"
16
17
 
17
18
  typedef struct git_str git_str;
@@ -48,6 +49,10 @@ typedef struct git_str git_str;
48
49
  # define GIT_WARN_UNUSED_RESULT
49
50
  #endif
50
51
 
52
+ #if (defined(_WIN32)) && !defined(__CYGWIN__)
53
+ # define GIT_WIN32 1
54
+ #endif
55
+
51
56
  #include <assert.h>
52
57
  #include <errno.h>
53
58
  #include <limits.h>
@@ -164,5 +169,6 @@ typedef struct git_str git_str;
164
169
  if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { return -1; }
165
170
 
166
171
  #include "util.h"
172
+ #include "ctype_compat.h"
167
173
 
168
174
  #endif
@@ -32,13 +32,23 @@ int git_hash_sha256_init(git_hash_sha256_ctx *ctx)
32
32
  return 0;
33
33
  }
34
34
 
35
- int git_hash_sha256_update(git_hash_sha256_ctx *ctx, const void *data, size_t len)
35
+ int git_hash_sha256_update(git_hash_sha256_ctx *ctx, const void *_data, size_t len)
36
36
  {
37
+ const unsigned char *data = _data;
37
38
  GIT_ASSERT_ARG(ctx);
38
- if (SHA256Input(&ctx->c, data, len)) {
39
- git_error_set(GIT_ERROR_SHA, "SHA256 error");
40
- return -1;
39
+
40
+ while (len > 0) {
41
+ unsigned int chunk = (len > UINT_MAX) ? UINT_MAX : (unsigned int)len;
42
+
43
+ if (SHA256Input(&ctx->c, data, chunk)) {
44
+ git_error_set(GIT_ERROR_SHA, "SHA256 error");
45
+ return -1;
46
+ }
47
+
48
+ data += chunk;
49
+ len -= chunk;
41
50
  }
51
+
42
52
  return 0;
43
53
  }
44
54
 
@@ -120,6 +120,80 @@ int git_hash_sha1_final(unsigned char *out, git_hash_sha1_ctx *ctx)
120
120
 
121
121
  #endif
122
122
 
123
+ #ifdef GIT_SHA1_OPENSSL_FIPS
124
+
125
+ static const EVP_MD *SHA1_ENGINE_DIGEST_TYPE = NULL;
126
+
127
+ int git_hash_sha1_global_init(void)
128
+ {
129
+ SHA1_ENGINE_DIGEST_TYPE = EVP_sha1();
130
+ return SHA1_ENGINE_DIGEST_TYPE != NULL ? 0 : -1;
131
+ }
132
+
133
+ int git_hash_sha1_ctx_init(git_hash_sha1_ctx *ctx)
134
+ {
135
+ return git_hash_sha1_init(ctx);
136
+ }
137
+
138
+ void git_hash_sha1_ctx_cleanup(git_hash_sha1_ctx *ctx)
139
+ {
140
+ #if OPENSSL_VERSION_NUMBER < 0x10100000L
141
+ EVP_MD_CTX_destroy(ctx->c);
142
+ #else
143
+ EVP_MD_CTX_free(ctx->c);
144
+ #endif
145
+ }
146
+
147
+ int git_hash_sha1_init(git_hash_sha1_ctx *ctx)
148
+ {
149
+ GIT_ASSERT_ARG(ctx);
150
+ GIT_ASSERT(SHA1_ENGINE_DIGEST_TYPE);
151
+
152
+ #if OPENSSL_VERSION_NUMBER < 0x10100000L
153
+ ctx->c = EVP_MD_CTX_create();
154
+ #else
155
+ ctx->c = EVP_MD_CTX_new();
156
+ #endif
157
+
158
+ GIT_ASSERT(ctx->c);
159
+
160
+ if (EVP_DigestInit_ex(ctx->c, SHA1_ENGINE_DIGEST_TYPE, NULL) != 1) {
161
+ git_hash_sha1_ctx_cleanup(ctx);
162
+ git_error_set(GIT_ERROR_SHA, "failed to initialize sha1 context");
163
+ return -1;
164
+ }
165
+
166
+ return 0;
167
+ }
168
+
169
+ int git_hash_sha1_update(git_hash_sha1_ctx *ctx, const void *data, size_t len)
170
+ {
171
+ GIT_ASSERT_ARG(ctx && ctx->c);
172
+
173
+ if (EVP_DigestUpdate(ctx->c, data, len) != 1) {
174
+ git_error_set(GIT_ERROR_SHA, "failed to update sha1");
175
+ return -1;
176
+ }
177
+
178
+ return 0;
179
+ }
180
+
181
+ int git_hash_sha1_final(unsigned char *out, git_hash_sha1_ctx *ctx)
182
+ {
183
+ unsigned int len = 0;
184
+
185
+ GIT_ASSERT_ARG(ctx && ctx->c);
186
+
187
+ if (EVP_DigestFinal(ctx->c, out, &len) != 1) {
188
+ git_error_set(GIT_ERROR_SHA, "failed to finalize sha1");
189
+ return -1;
190
+ }
191
+
192
+ return 0;
193
+ }
194
+
195
+ #endif
196
+
123
197
  #ifdef GIT_SHA256_OPENSSL
124
198
 
125
199
  # ifdef GIT_OPENSSL_DYNAMIC
@@ -193,3 +267,77 @@ int git_hash_sha256_final(unsigned char *out, git_hash_sha256_ctx *ctx)
193
267
  }
194
268
 
195
269
  #endif
270
+
271
+ #ifdef GIT_SHA256_OPENSSL_FIPS
272
+
273
+ static const EVP_MD *SHA256_ENGINE_DIGEST_TYPE = NULL;
274
+
275
+ int git_hash_sha256_global_init(void)
276
+ {
277
+ SHA256_ENGINE_DIGEST_TYPE = EVP_sha256();
278
+ return SHA256_ENGINE_DIGEST_TYPE != NULL ? 0 : -1;
279
+ }
280
+
281
+ int git_hash_sha256_ctx_init(git_hash_sha256_ctx *ctx)
282
+ {
283
+ return git_hash_sha256_init(ctx);
284
+ }
285
+
286
+ void git_hash_sha256_ctx_cleanup(git_hash_sha256_ctx *ctx)
287
+ {
288
+ #if OPENSSL_VERSION_NUMBER < 0x10100000L
289
+ EVP_MD_CTX_destroy(ctx->c);
290
+ #else
291
+ EVP_MD_CTX_free(ctx->c);
292
+ #endif
293
+ }
294
+
295
+ int git_hash_sha256_init(git_hash_sha256_ctx *ctx)
296
+ {
297
+ GIT_ASSERT_ARG(ctx);
298
+ GIT_ASSERT(SHA256_ENGINE_DIGEST_TYPE);
299
+
300
+ #if OPENSSL_VERSION_NUMBER < 0x10100000L
301
+ ctx->c = EVP_MD_CTX_create();
302
+ #else
303
+ ctx->c = EVP_MD_CTX_new();
304
+ #endif
305
+
306
+ GIT_ASSERT(ctx->c);
307
+
308
+ if (EVP_DigestInit_ex(ctx->c, SHA256_ENGINE_DIGEST_TYPE, NULL) != 1) {
309
+ git_hash_sha256_ctx_cleanup(ctx);
310
+ git_error_set(GIT_ERROR_SHA, "failed to initialize sha256 context");
311
+ return -1;
312
+ }
313
+
314
+ return 0;
315
+ }
316
+
317
+ int git_hash_sha256_update(git_hash_sha256_ctx *ctx, const void *data, size_t len)
318
+ {
319
+ GIT_ASSERT_ARG(ctx && ctx->c);
320
+
321
+ if (EVP_DigestUpdate(ctx->c, data, len) != 1) {
322
+ git_error_set(GIT_ERROR_SHA, "failed to update sha256");
323
+ return -1;
324
+ }
325
+
326
+ return 0;
327
+ }
328
+
329
+ int git_hash_sha256_final(unsigned char *out, git_hash_sha256_ctx *ctx)
330
+ {
331
+ unsigned int len = 0;
332
+
333
+ GIT_ASSERT_ARG(ctx && ctx->c);
334
+
335
+ if (EVP_DigestFinal(ctx->c, out, &len) != 1) {
336
+ git_error_set(GIT_ERROR_SHA, "failed to finalize sha256");
337
+ return -1;
338
+ }
339
+
340
+ return 0;
341
+ }
342
+
343
+ #endif
@@ -11,7 +11,11 @@
11
11
  #include "hash/sha.h"
12
12
 
13
13
  #ifndef GIT_OPENSSL_DYNAMIC
14
- # include <openssl/sha.h>
14
+ # if defined(GIT_SHA1_OPENSSL_FIPS) || defined(GIT_SHA256_OPENSSL_FIPS)
15
+ # include <openssl/evp.h>
16
+ # else
17
+ # include <openssl/sha.h>
18
+ # endif
15
19
  #else
16
20
 
17
21
  typedef struct {
@@ -36,10 +40,22 @@ struct git_hash_sha1_ctx {
36
40
  };
37
41
  #endif
38
42
 
43
+ #ifdef GIT_SHA1_OPENSSL_FIPS
44
+ struct git_hash_sha1_ctx {
45
+ EVP_MD_CTX* c;
46
+ };
47
+ #endif
48
+
39
49
  #ifdef GIT_SHA256_OPENSSL
40
50
  struct git_hash_sha256_ctx {
41
51
  SHA256_CTX c;
42
52
  };
43
53
  #endif
44
54
 
55
+ #ifdef GIT_SHA256_OPENSSL_FIPS
56
+ struct git_hash_sha256_ctx {
57
+ EVP_MD_CTX* c;
58
+ };
59
+ #endif
60
+
45
61
  #endif
@@ -83,12 +83,14 @@
83
83
  * Add "length" to the length.
84
84
  * Set Corrupted when overflow has occurred.
85
85
  */
86
- static uint32_t addTemp;
87
- #define SHA224_256AddLength(context, length) \
88
- (addTemp = (context)->Length_Low, (context)->Corrupted = \
89
- (((context)->Length_Low += (length)) < addTemp) && \
90
- (++(context)->Length_High == 0) ? shaInputTooLong : \
91
- (context)->Corrupted )
86
+ static int SHA224_256AddLength(SHA256Context *context, unsigned int length)
87
+ {
88
+ uint32_t addTemp = context->Length_Low;
89
+ context->Length_Low += length;
90
+ if (context->Length_Low < addTemp && ++context->Length_High == 0)
91
+ context->Corrupted = shaInputTooLong;
92
+ return context->Corrupted;
93
+ }
92
94
 
93
95
  /* Local Function Prototypes */
94
96
  static int SHA224_256Reset(SHA256Context *context, uint32_t *H0);
@@ -17,7 +17,10 @@ typedef struct git_hash_sha256_ctx git_hash_sha256_ctx;
17
17
  # include "common_crypto.h"
18
18
  #endif
19
19
 
20
- #if defined(GIT_SHA1_OPENSSL) || defined(GIT_SHA256_OPENSSL)
20
+ #if defined(GIT_SHA1_OPENSSL) || \
21
+ defined(GIT_SHA1_OPENSSL_FIPS) || \
22
+ defined(GIT_SHA256_OPENSSL) || \
23
+ defined(GIT_SHA256_OPENSSL_FIPS)
21
24
  # include "openssl.h"
22
25
  #endif
23
26