libmongocrypt-helper 1.8.0.0.1001 → 1.11.0.0.1001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +33 -0
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +12 -1
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +1 -4
  5. data/ext/libmongocrypt/libmongocrypt/Earthfile +151 -3
  6. data/ext/libmongocrypt/libmongocrypt/README.md +36 -40
  7. data/ext/libmongocrypt/libmongocrypt/bindings/cs/CMakeLists.txt +1 -0
  8. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Driver.snk +0 -0
  9. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/AssemblyInfo.cs +2 -2
  10. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Binary.cs +16 -2
  11. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClientFactory.cs +8 -4
  12. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Library.cs +10 -0
  13. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LibraryLoader.cs +81 -44
  14. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.csproj +2 -1
  15. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/MongoDB.Libmongocrypt.Test.csproj +2 -0
  16. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/MongoDB.Libmongocrypt.Test32.csproj +2 -0
  17. data/ext/libmongocrypt/libmongocrypt/bindings/cs/README.md +3 -0
  18. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.cake +21 -26
  19. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.config +3 -0
  20. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.sh +0 -0
  21. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/build.gradle.kts +28 -0
  22. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/java/com/mongodb/crypt/benchmark/BenchmarkRunner.java +217 -0
  23. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/resources/keyDocument.json +24 -0
  24. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/build.gradle.kts +21 -6
  25. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.jar +0 -0
  26. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.properties +1 -1
  27. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew +154 -108
  28. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew.bat +7 -18
  29. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/settings.gradle.kts +1 -0
  30. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPI.java +41 -6
  31. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPIHelper.java +5 -5
  32. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CipherCallback.java +27 -1
  33. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptImpl.java +34 -19
  34. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoExplicitEncryptOptions.java +6 -4
  35. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/jni-config.json +180 -0
  36. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/reflect-config.json +134 -0
  37. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/java/com/mongodb/crypt/capi/MongoCryptTest.java +44 -2
  38. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/encrypted-payload.json +1 -1
  39. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/rangeopts.json +3 -0
  40. data/ext/libmongocrypt/libmongocrypt/bindings/node/README.md +4 -900
  41. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +60 -0
  42. data/ext/libmongocrypt/libmongocrypt/bindings/python/README.rst +41 -20
  43. data/ext/libmongocrypt/libmongocrypt/bindings/python/RELEASE.rst +6 -24
  44. data/ext/libmongocrypt/libmongocrypt/bindings/python/build-manylinux-wheel.sh +4 -13
  45. data/ext/libmongocrypt/libmongocrypt/bindings/python/hatch_build.py +36 -0
  46. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +1 -0
  47. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/__init__.py +2 -2
  48. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/auto_encrypter.py +61 -0
  49. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/credentials.py +156 -0
  50. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/explicit_encrypter.py +156 -0
  51. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +149 -0
  52. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/auto_encrypter.py +2 -46
  53. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binary.py +14 -17
  54. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +107 -61
  55. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/compat.py +6 -4
  56. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/credentials.py +2 -121
  57. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/crypto.py +31 -20
  58. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/errors.py +2 -2
  59. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/explicit_encrypter.py +2 -233
  60. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +168 -238
  61. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/options.py +265 -0
  62. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/state_machine.py +2 -141
  63. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/auto_encrypter.py +61 -0
  64. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/credentials.py +156 -0
  65. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/explicit_encrypter.py +156 -0
  66. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/state_machine.py +149 -0
  67. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +2 -2
  68. data/ext/libmongocrypt/libmongocrypt/bindings/python/pyproject.toml +118 -0
  69. data/ext/libmongocrypt/libmongocrypt/bindings/python/release.sh +97 -61
  70. data/ext/libmongocrypt/libmongocrypt/bindings/python/{test-requirements.txt → requirements-test.txt} +4 -1
  71. data/ext/libmongocrypt/libmongocrypt/bindings/python/requirements.txt +4 -0
  72. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +76 -0
  73. data/ext/libmongocrypt/libmongocrypt/bindings/python/strip_header.py +6 -7
  74. data/ext/libmongocrypt/libmongocrypt/bindings/python/synchro.py +64 -0
  75. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/__init__.py +1 -0
  76. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/collection-info.json +1 -1
  77. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/command.json +1 -1
  78. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/compact/success/encrypted-payload.json +21 -21
  79. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-command-reply.json +1 -1
  80. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-field-config-map.json +1 -1
  81. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/encrypted-payload.json +1 -1
  82. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/rangeopts.json +3 -0
  83. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-rangePreview-explicit/int32/rangeopts.json +11 -0
  84. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-rangePreview-explicit/int32/value-to-encrypt.json +20 -0
  85. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-azure.json +1 -1
  86. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-gcp.json +1 -1
  87. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document.json +1 -1
  88. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-filter.json +1 -1
  89. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/list-collections-filter.json +1 -1
  90. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-command.json +1 -1
  91. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-reply.json +1 -1
  92. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/schema-map.json +1 -1
  93. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/keyDocument.json +24 -0
  94. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/perf_test.py +165 -0
  95. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_binding.py +8 -12
  96. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_crypto.py +9 -11
  97. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +988 -340
  98. data/ext/libmongocrypt/libmongocrypt/bindings/python/update-sbom.sh +14 -0
  99. data/ext/libmongocrypt/libmongocrypt/cmake/FetchMongoC.cmake +19 -1
  100. data/ext/libmongocrypt/libmongocrypt/cmake/ImportBSON.cmake +23 -0
  101. data/ext/libmongocrypt/libmongocrypt/cmake/IntelDFP.cmake +19 -227
  102. data/ext/libmongocrypt/libmongocrypt/cmake/Patch.cmake +54 -0
  103. data/ext/libmongocrypt/libmongocrypt/doc/img/cli-icon.png +0 -0
  104. data/ext/libmongocrypt/libmongocrypt/doc/img/reference-targets.png +0 -0
  105. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +153 -0
  106. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version.py +61 -28
  107. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version_selftest.sh +73 -0
  108. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +108 -0
  109. data/ext/libmongocrypt/libmongocrypt/etc/format.sh +1 -1
  110. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-pragma.patch +27 -0
  111. data/ext/libmongocrypt/libmongocrypt/etc/mongo-inteldfp-alpine-arm-fix.patch +17 -0
  112. data/ext/libmongocrypt/libmongocrypt/etc/packager.py +120 -91
  113. data/ext/libmongocrypt/libmongocrypt/etc/purls.txt +14 -0
  114. data/ext/libmongocrypt/libmongocrypt/etc/repo_config.yaml +56 -0
  115. data/ext/libmongocrypt/libmongocrypt/etc/silk-create-asset-group.sh +70 -0
  116. data/ext/libmongocrypt/libmongocrypt/etc/ssdlc_compliance_report.md +37 -0
  117. data/ext/libmongocrypt/libmongocrypt/etc/third_party_vulnerabilities.md +42 -0
  118. data/ext/libmongocrypt/libmongocrypt/integrating.md +18 -1
  119. data/ext/libmongocrypt/libmongocrypt/kms-message/CMakeLists.txt +11 -3
  120. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_gcp_request.c +1 -1
  121. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer.c +17 -0
  122. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer_private.h +6 -0
  123. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_request.c +211 -1
  124. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_response.c +163 -0
  125. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_tag_type_private.h +2 -1
  126. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_request.h +17 -0
  127. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_response.h +6 -0
  128. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_port.c +3 -2
  129. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +4 -2
  130. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.c +2 -2
  131. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +23 -2
  132. data/ext/libmongocrypt/libmongocrypt/src/crypto/libcrypto.c +13 -10
  133. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.h +1 -1
  134. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +16 -2
  135. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +94 -6
  136. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +15 -5
  137. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +114 -53
  138. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private-v2.h +1 -1
  139. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private.h +1 -1
  140. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +2 -2
  141. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +2 -2
  142. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +21 -6
  143. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private.h +5 -5
  144. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-v2.c +38 -2
  145. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload.c +1 -1
  146. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +20 -7
  147. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private.h +8 -8
  148. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +89 -1
  149. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +3 -3
  150. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev.c +1 -23
  151. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds-private.h +4 -3
  152. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds.c +15 -12
  153. data/ext/libmongocrypt/libmongocrypt/src/mc-optional-private.h +11 -0
  154. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation-private.h +16 -6
  155. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +64 -22
  156. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding-private.h +23 -4
  157. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +359 -65
  158. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +26 -14
  159. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-private.h +17 -6
  160. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +31 -13
  161. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +16 -3
  162. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +259 -63
  163. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +40 -24
  164. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +57 -13
  165. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.h +17 -0
  166. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.test.cpp +5 -0
  167. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-binary-private.h +0 -5
  168. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer.c +5 -7
  169. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-key.c +1 -0
  170. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth-private.h +16 -18
  171. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth.c +105 -76
  172. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto.c +9 -3
  173. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +170 -89
  174. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +5 -5
  175. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +505 -124
  176. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-private.h +31 -6
  177. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +81 -13
  178. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-dll-private.h +7 -0
  179. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek-private.h +5 -1
  180. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek.c +161 -103
  181. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker-private.h +2 -7
  182. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +191 -69
  183. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key.c +1 -1
  184. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx-private.h +50 -15
  185. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx.c +365 -69
  186. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +2 -1
  187. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +200 -107
  188. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +50 -5
  189. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +591 -15
  190. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +6 -13
  191. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +3 -2
  192. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +47 -234
  193. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.h +75 -24
  194. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +18 -2
  195. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_dll.c +4 -0
  196. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/bypassQueryAnalysis/payload.json +53 -0
  197. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd-to-mongocryptd.json +23 -0
  198. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd.json +20 -0
  199. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd-to-mongocryptd.json +50 -0
  200. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd.json +20 -0
  201. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/collinfo.json +44 -0
  202. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-field-map.json +24 -0
  203. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-payload-pattern.json +53 -0
  204. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/mongocryptd-reply.json +62 -0
  205. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd-to-mongocryptd.json +30 -0
  206. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd.json +17 -0
  207. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/mongocryptd-reply.json +39 -0
  208. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/payload.json +21 -0
  209. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/missing-key-id/collinfo.json +20 -0
  210. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/collinfo.json +9 -0
  211. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/encrypted-payload.json +4 -0
  212. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/cmd.json +1 -0
  213. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/collinfo.json +63 -0
  214. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-field-config-map.json +61 -0
  215. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload-range-v2.json +37 -0
  216. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload.json +29 -0
  217. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/cmd.json +1 -0
  218. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/collinfo.json +64 -0
  219. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload-range-v2.json +105 -0
  220. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload.json +30 -0
  221. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/cmd.json +1 -0
  222. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/collinfo.json +49 -0
  223. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-field-config-map.json +47 -0
  224. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-payload.json +23 -0
  225. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/collinfo.json +15 -0
  226. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +10 -0
  227. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload-range-v2.json +104 -0
  228. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload.json +6 -0
  229. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/collinfo.json +4 -4
  230. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/encrypted-payload.json +3 -3
  231. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/decrypt-response.txt +16 -0
  232. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/encrypt-response.txt +16 -0
  233. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/oauth-response.txt +19 -0
  234. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/cmd.json +9 -0
  235. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-field-map.json +19 -0
  236. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-payload.json +62 -0
  237. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/mongocryptd-reply.json +69 -0
  238. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/cmd.json +11 -0
  239. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-field-map.json +19 -0
  240. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-payload.json +40 -0
  241. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/mongocryptd-reply.json +47 -0
  242. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_decimal128.cstruct +1 -1
  243. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_double.cstruct +8637 -7958
  244. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int32.cstruct +5522 -1382
  245. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int64.cstruct +5042 -1262
  246. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128.cstruct +1 -1
  247. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128_precision.cstruct +1 -1
  248. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double.cstruct +1 -1
  249. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double_precision.cstruct +2 -2
  250. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int32.cstruct +1 -1
  251. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int64.cstruct +1 -1
  252. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/cmd.json +8 -0
  253. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-field-map.json +19 -0
  254. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-payload.json +53 -0
  255. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/mongocryptd-reply.json +58 -0
  256. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/cmd.json +11 -0
  257. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-field-map.json +19 -0
  258. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-payload.json +40 -0
  259. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/mongocryptd-reply.json +45 -0
  260. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/expected.json +26 -0
  261. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/to-encrypt.json +20 -0
  262. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/expected.json +26 -0
  263. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/to-encrypt.json +20 -0
  264. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-double/expected.json +8 -0
  265. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32/expected.json +8 -0
  266. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32-defaults/expected.json +8 -0
  267. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/README.md +7 -4
  268. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +9 -5
  269. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +9 -5
  270. data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +1 -0
  271. data/ext/libmongocrypt/libmongocrypt/test/test-gcp-auth.c +8 -8
  272. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +6 -4
  273. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-range-payload-v2.c +43 -3
  274. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +76 -0
  275. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +5 -5
  276. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +89 -14
  277. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +342 -76
  278. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +94 -12
  279. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +205 -7
  280. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +49 -23
  281. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +16 -19
  282. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.h +22 -1
  283. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache-oauth.c +94 -11
  284. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cleanup.c +374 -0
  285. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-compact.c +121 -42
  286. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +134 -4
  287. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.c +40 -0
  288. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.h +16 -0
  289. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +11 -11
  290. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +8 -5
  291. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +922 -92
  292. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +2 -2
  293. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-setopt.c +114 -12
  294. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +14 -9
  295. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-ctx.c +424 -3
  296. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-log.c +1 -1
  297. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +447 -28
  298. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-opts.c +42 -0
  299. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-traverse-util.c +30 -26
  300. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.c +7 -0
  301. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.h +3 -0
  302. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +66 -14
  303. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +11 -0
  304. data/ext/libmongocrypt/libmongocrypt/test/test-named-kms-providers.c +2381 -0
  305. data/ext/libmongocrypt/libmongocrypt/test/util/HELP.autogen +3 -1
  306. data/ext/libmongocrypt/libmongocrypt/test/util/README.md +1 -0
  307. data/ext/libmongocrypt/libmongocrypt/test/util/csfle.c +4 -0
  308. data/ext/libmongocrypt/libmongocrypt/test/util/make_includes.py +1 -1
  309. data/ext/libmongocrypt/libmongocrypt/test/util/util.c +38 -3
  310. data/lib/libmongocrypt_helper/version.rb +2 -2
  311. metadata +112 -106
  312. checksums.yaml.gz.sig +0 -0
  313. data/ext/libmongocrypt/libmongocrypt/VERSION_CURRENT +0 -1
  314. data/ext/libmongocrypt/libmongocrypt/bindings/cs/cs.sln +0 -79
  315. data/ext/libmongocrypt/libmongocrypt/bindings/node/CHANGELOG.md +0 -105
  316. data/ext/libmongocrypt/libmongocrypt/bindings/node/LICENSE +0 -201
  317. data/ext/libmongocrypt/libmongocrypt/bindings/node/binding.gyp +0 -79
  318. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/README.hbs +0 -44
  319. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/build-static.sh +0 -36
  320. data/ext/libmongocrypt/libmongocrypt/bindings/node/index.d.ts +0 -641
  321. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/autoEncrypter.js +0 -420
  322. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/buffer_pool.js +0 -123
  323. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/clientEncryption.js +0 -821
  324. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/common.js +0 -98
  325. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/cryptoCallbacks.js +0 -87
  326. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/errors.js +0 -75
  327. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/index.js +0 -73
  328. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/mongocryptdManager.js +0 -66
  329. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/aws.js +0 -26
  330. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/azure.js +0 -178
  331. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/gcp.js +0 -24
  332. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/index.js +0 -54
  333. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/utils.js +0 -39
  334. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/stateMachine.js +0 -492
  335. data/ext/libmongocrypt/libmongocrypt/bindings/node/package-lock.json +0 -15302
  336. data/ext/libmongocrypt/libmongocrypt/bindings/node/package.json +0 -100
  337. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.cc +0 -956
  338. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.h +0 -114
  339. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/autoEncrypter.test.js +0 -950
  340. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/buffer_pool.test.js +0 -91
  341. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/clientEncryption.test.js +0 -1093
  342. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/common.test.js +0 -94
  343. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/cryptoCallbacks.test.js +0 -240
  344. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/README.md +0 -5
  345. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/cmd.json +0 -6
  346. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/collection-info.json +0 -37
  347. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document-nested.json +0 -8
  348. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document.json +0 -11
  349. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encryptedFields.json +0 -30
  350. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key-document.json +0 -32
  351. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key1-document.json +0 -30
  352. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/mongocryptd-reply.json +0 -18
  353. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/index.test.js +0 -45
  354. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/mongocryptdManager.test.js +0 -48
  355. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/providers/credentialsProvider.test.js +0 -551
  356. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/release.test.js +0 -66
  357. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/requirements.helper.js +0 -51
  358. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/stateMachine.test.js +0 -331
  359. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/chai-addons.js +0 -8
  360. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/mongodb_reporter.js +0 -325
  361. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/types/index.test-d.ts +0 -63
  362. data/ext/libmongocrypt/libmongocrypt/bindings/python/setup.py +0 -89
  363. data/ext/libmongocrypt/libmongocrypt/debian/build_snapshot.sh +0 -79
  364. data/ext/libmongocrypt/libmongocrypt/debian/changelog +0 -105
  365. data/ext/libmongocrypt/libmongocrypt/debian/compat +0 -1
  366. data/ext/libmongocrypt/libmongocrypt/debian/control +0 -41
  367. data/ext/libmongocrypt/libmongocrypt/debian/copyright +0 -129
  368. data/ext/libmongocrypt/libmongocrypt/debian/gbp.conf +0 -23
  369. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.dirs +0 -2
  370. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.install +0 -5
  371. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.dirs +0 -1
  372. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.install +0 -1
  373. data/ext/libmongocrypt/libmongocrypt/debian/rules +0 -46
  374. data/ext/libmongocrypt/libmongocrypt/debian/source/format +0 -1
  375. data/ext/libmongocrypt/libmongocrypt/debian/source/lintian-overrides +0 -3
  376. data/ext/libmongocrypt/libmongocrypt/debian/source/options +0 -1
  377. data/ext/libmongocrypt/libmongocrypt/debian/watch +0 -3
  378. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/mongocryptd-reply.json +0 -72
  379. data.tar.gz.sig +0 -1
  380. metadata.gz.sig +0 -0
  381. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-decrypt-reply.txt → test/data/kms-aws/decrypt-response.txt} +0 -0
  382. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-encrypt-reply.txt → test/data/kms-aws/encrypt-response.txt} +0 -0
  383. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/decrypt-response.txt +0 -0
  384. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/encrypt-response.txt +0 -0
  385. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/oauth-response.txt +0 -0
@@ -18,7 +18,7 @@ The binding uses the native language\'s foreign function interface to C.
18
18
  For example, Java can accomplish this with
19
19
  [JNA](https://github.com/java-native-access/jna), CPython with
20
20
  [extensions](https://docs.python.org/3/extending/extending.html),
21
- NodeJS with [add-ons](https://nodejs.org/api/addons.html), etc.
21
+ Node.js with [add-ons](https://nodejs.org/api/addons.html), etc.
22
22
 
23
23
  The libmongocrypt library files (.so/.dll) are pre-built on its
24
24
  [Evergreen project](https://evergreen.mongodb.com/waterfall/libmongocrypt). Click
@@ -137,6 +137,23 @@ A result from a listCollections cursor.
137
137
 
138
138
  auto encrypt
139
139
 
140
+ #### State: `MONGOCRYPT_CTX_NEED_MONGO_COLLINFO_WITH_DB` ####
141
+
142
+ **libmongocrypt needs**...
143
+
144
+ Results from a listCollections cursor from a specified database.
145
+
146
+ **Driver needs to...**
147
+
148
+ 1. Run listCollections on the encrypted MongoClient with the filter
149
+ provided by `mongocrypt_ctx_mongo_op` on the database provided by `mongocrypt_ctx_mongo_db`.
150
+ 2. Return the first result (if any) with `mongocrypt_ctx_mongo_feed` or proceed to the next step if nothing was returned.
151
+ 3. Call `mongocrypt_ctx_mongo_done`
152
+
153
+ **Applies to...**
154
+
155
+ A context initialized with `mongocrypt_ctx_encrypt_init` for automatic encryption. This state is only entered when `mongocrypt_setopt_use_need_mongo_collinfo_with_db_state` is called to opt-in.
156
+
140
157
  #### State: `MONGOCRYPT_CTX_NEED_MONGO_MARKINGS` ####
141
158
 
142
159
  **libmongocrypt needs**...
@@ -71,6 +71,14 @@ else()
71
71
  "KMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO")
72
72
  endif()
73
73
 
74
+ include (CheckSymbolExists)
75
+ CHECK_SYMBOL_EXISTS (gmtime_r time.h KMS_MESSAGE_HAVE_GMTIME_R)
76
+ if (KMS_MESSAGE_HAVE_GMTIME_R)
77
+ set (KMS_MESSAGE_DEFINITIONS
78
+ ${KMS_MESSAGE_DEFINITIONS}
79
+ "KMS_MESSAGE_HAVE_GMTIME_R")
80
+ endif ()
81
+
74
82
  include (TestBigEndian)
75
83
  TEST_BIG_ENDIAN (KMS_BIG_ENDIAN)
76
84
  if (KMS_BIG_ENDIAN)
@@ -114,9 +122,9 @@ if (NOT DISABLE_NATIVE_CRYPTO)
114
122
  else()
115
123
  include (FindOpenSSL)
116
124
  target_link_libraries(kms_message "${OPENSSL_LIBRARIES}")
117
- target_include_directories(kms_message PRIVATE "${OPENSSL_INCLUDE_DIR}")
125
+ target_include_directories(kms_message SYSTEM PRIVATE "${OPENSSL_INCLUDE_DIR}")
118
126
  target_link_libraries(kms_message_static "${OPENSSL_LIBRARIES}")
119
- target_include_directories(kms_message_static PRIVATE "${OPENSSL_INCLUDE_DIR}")
127
+ target_include_directories(kms_message_static SYSTEM PRIVATE "${OPENSSL_INCLUDE_DIR}")
120
128
  endif()
121
129
  endif ()
122
130
 
@@ -259,7 +267,7 @@ if (NOT DISABLE_NATIVE_CRYPTO)
259
267
  else()
260
268
  include (FindOpenSSL)
261
269
  target_link_libraries(test_kms_request "${OPENSSL_LIBRARIES}")
262
- target_include_directories(test_kms_request PRIVATE "${OPENSSL_INCLUDE_DIR}")
270
+ target_include_directories(test_kms_request SYSTEM PRIVATE "${OPENSSL_INCLUDE_DIR}")
263
271
  endif()
264
272
 
265
273
  add_test (
@@ -87,7 +87,7 @@ kms_gcp_request_oauth_new (const char *host,
87
87
  req->crypto.sign_ctx = opt->crypto.sign_ctx;
88
88
  }
89
89
 
90
- jwt_signature = malloc (SIGNATURE_LEN);
90
+ jwt_signature = calloc (1, SIGNATURE_LEN);
91
91
  if (!req->crypto.sign_rsaes_pkcs1_v1_5 (
92
92
  req->crypto.sign_ctx,
93
93
  private_key_data,
@@ -178,6 +178,14 @@ kmip_writer_write_enumeration (kmip_writer_t *writer, kmip_tag_type_t tag, int32
178
178
  kmip_writer_write_u32 (writer, 0);
179
179
  }
180
180
 
181
+ void kmip_writer_write_bool (kmip_writer_t *writer, kmip_tag_type_t tag, bool value)
182
+ {
183
+ kmip_writer_write_tag_enum (writer, tag);
184
+ kmip_writer_write_u8 (writer, KMIP_ITEM_TYPE_Boolean);
185
+ kmip_writer_write_u32 (writer, 8);
186
+ kmip_writer_write_u64(writer, (uint64_t) value);
187
+ }
188
+
181
189
  void
182
190
  kmip_writer_write_datetime (kmip_writer_t *writer, kmip_tag_type_t tag, int64_t value)
183
191
  {
@@ -384,6 +392,15 @@ kmip_reader_read_enumeration (kmip_reader_t *reader, uint32_t *enum_value)
384
392
  return kmip_reader_read_u32 (reader, &ignored);
385
393
  }
386
394
 
395
+ bool
396
+ kmip_reader_read_bool (kmip_reader_t *reader, bool *value)
397
+ {
398
+ uint64_t u64;
399
+ CHECK_AND_RET (kmip_reader_read_u64 (reader, &u64));
400
+ *value = (bool) u64;
401
+ return true;
402
+ }
403
+
387
404
  bool
388
405
  kmip_reader_read_integer (kmip_reader_t *reader, int32_t *value)
389
406
  {
@@ -59,6 +59,9 @@ kmip_writer_write_long_integer (kmip_writer_t *writer, kmip_tag_type_t tag, int6
59
59
  void
60
60
  kmip_writer_write_enumeration (kmip_writer_t *writer, kmip_tag_type_t tag, int32_t value);
61
61
 
62
+ void
63
+ kmip_writer_write_bool (kmip_writer_t *writer, kmip_tag_type_t tag, bool value);
64
+
62
65
  void
63
66
  kmip_writer_write_datetime (kmip_writer_t *writer, kmip_tag_type_t tag, int64_t value);
64
67
 
@@ -112,6 +115,9 @@ kmip_reader_read_type (kmip_reader_t *reader, kmip_item_type_t *type);
112
115
  bool
113
116
  kmip_reader_read_enumeration (kmip_reader_t *reader, uint32_t *enum_value);
114
117
 
118
+ bool
119
+ kmip_reader_read_bool (kmip_reader_t *reader, bool *value);
120
+
115
121
  bool
116
122
  kmip_reader_read_integer (kmip_reader_t *reader, int32_t *value);
117
123
 
@@ -16,6 +16,7 @@
16
16
 
17
17
  #include "kms_message/kms_kmip_request.h"
18
18
 
19
+ #include "kms_kmip_tag_type_private.h"
19
20
  #include "kms_message_private.h"
20
21
  #include "kms_kmip_reader_writer_private.h"
21
22
 
@@ -181,7 +182,7 @@ kms_kmip_request_activate_new (void *reserved, const char *unique_identifer)
181
182
  kmip_writer_close_struct (writer); /* KMIP_TAG_RequestHeader */
182
183
 
183
184
  kmip_writer_begin_struct (writer, KMIP_TAG_BatchItem);
184
- /* 0x0A == Get */
185
+ /* 0x12 == Activate */
185
186
  kmip_writer_write_enumeration (writer, KMIP_TAG_Operation, 0x12);
186
187
  kmip_writer_begin_struct (writer, KMIP_TAG_RequestPayload);
187
188
  kmip_writer_write_string (writer,
@@ -254,3 +255,212 @@ kms_kmip_request_get_new (void *reserved, const char *unique_identifer)
254
255
  kmip_writer_destroy (writer);
255
256
  return req;
256
257
  }
258
+
259
+ kms_request_t *
260
+ kms_kmip_request_create_new (void *reserved) {
261
+ /*
262
+ Create a KMIP Create request of this form:
263
+ <RequestMessage tag="0x420078" type="Structure">
264
+ <RequestHeader tag="0x420077" type="Structure">
265
+ <ProtocolVersion tag="0x420069" type="Structure">
266
+ <ProtocolVersionMajor tag="0x42006a" type="Integer" value="1"/>
267
+ <ProtocolVersionMinor tag="0x42006b" type="Integer" value="2"/>
268
+ </ProtocolVersion>
269
+ <BatchCount tag="0x42000d" type="Integer" value="1"/>
270
+ </RequestHeader>
271
+ <BatchItem tag="0x42000f" type="Structure">
272
+ <Operation tag="0x42005c" type="Enumeration" value="1"/>
273
+ <RequestPayload tag="0x420079" type="Structure">
274
+ <ObjectType tag="0x420057" type="Enumeration" value="2"/>
275
+ <TemplateAttribute tag="0x420091" type="Structure">
276
+ <Attribute tag="0x420008" type="Structure">
277
+ <AttributeName tag="0x42000a" type="TextString" value="Cryptographic Algorithm"/>
278
+ <AttributeValue tag="0x42000b" type="Enumeration" value="3"/>
279
+ </Attribute>
280
+ <Attribute tag="0x420008" type="Structure">
281
+ <AttributeName tag="0x42000a" type="TextString" value="Cryptographic Length"/>
282
+ <AttributeValue tag="0x42000b" type="Integer" value="256"/>
283
+ </Attribute>
284
+ <Attribute tag="0x420008" type="Structure">
285
+ <AttributeName tag="0x42000a" type="TextString" value="Cryptographic
286
+ Usage Mask"/> <AttributeValue tag="0x42000b" type="Integer" value="12"/>
287
+ </Attribute>
288
+ </TemplateAttribute>
289
+ </RequestPayload>
290
+ </BatchItem>
291
+ </RequestMessage>
292
+ */
293
+ kmip_writer_t *writer;
294
+ kms_request_t *req;
295
+
296
+ req = calloc (1, sizeof (kms_request_t));
297
+ req->provider = KMS_REQUEST_PROVIDER_KMIP;
298
+
299
+ writer = kmip_writer_new();
300
+ kmip_writer_begin_struct(writer, KMIP_TAG_RequestMessage);
301
+
302
+ kmip_writer_begin_struct (writer, KMIP_TAG_RequestHeader);
303
+ kmip_writer_begin_struct (writer, KMIP_TAG_ProtocolVersion);
304
+ kmip_writer_write_integer (writer, KMIP_TAG_ProtocolVersionMajor, 1);
305
+ kmip_writer_write_integer (writer, KMIP_TAG_ProtocolVersionMinor, 2);
306
+ kmip_writer_close_struct (writer); /* KMIP_TAG_ProtocolVersion */
307
+ kmip_writer_write_integer (writer, KMIP_TAG_BatchCount, 1);
308
+ kmip_writer_close_struct (writer); /* KMIP_TAG_RequestHeader */
309
+
310
+ kmip_writer_begin_struct (writer, KMIP_TAG_BatchItem);
311
+ /* 0x01 == Create */
312
+ kmip_writer_write_enumeration (writer, KMIP_TAG_Operation, 0x01);
313
+ kmip_writer_begin_struct (writer, KMIP_TAG_RequestPayload);
314
+ /* 0x02 == symmetric key */
315
+ kmip_writer_write_enumeration(writer, KMIP_TAG_ObjectType, 0x02);
316
+
317
+ {
318
+ kmip_writer_begin_struct (writer, KMIP_TAG_TemplateAttribute);
319
+
320
+ kmip_writer_begin_struct (writer, KMIP_TAG_Attribute);
321
+ const char *cryptographicAlgorithmStr = "Cryptographic Algorithm";
322
+ kmip_writer_write_string (writer,
323
+ KMIP_TAG_AttributeName,
324
+ cryptographicAlgorithmStr,
325
+ strlen (cryptographicAlgorithmStr));
326
+ kmip_writer_write_enumeration (writer, KMIP_TAG_AttributeValue, 3 /* AES */);
327
+ kmip_writer_close_struct (writer);
328
+ kmip_writer_begin_struct (writer, KMIP_TAG_Attribute);
329
+ const char *cryptographicLengthStr = "Cryptographic Length";
330
+ kmip_writer_write_string (writer,
331
+ KMIP_TAG_AttributeName,
332
+ cryptographicLengthStr,
333
+ strlen (cryptographicLengthStr));
334
+ kmip_writer_write_integer (writer, KMIP_TAG_AttributeValue, 256);
335
+ kmip_writer_close_struct (writer);
336
+ kmip_writer_begin_struct (writer, KMIP_TAG_Attribute);
337
+ const char *cryptographicUsageMaskStr = "Cryptographic Usage Mask";
338
+ kmip_writer_write_string (writer,
339
+ KMIP_TAG_AttributeName,
340
+ cryptographicUsageMaskStr,
341
+ strlen (cryptographicUsageMaskStr));
342
+ kmip_writer_write_integer (writer, KMIP_TAG_AttributeValue, 4 | 8 /* Encrypt | Decrypt */);
343
+ kmip_writer_close_struct (writer);
344
+
345
+ kmip_writer_close_struct (writer); /* KMIP_TAG_TemplateAttribute */
346
+ }
347
+
348
+ kmip_writer_close_struct (writer); /* KMIP_TAG_RequestPayload */
349
+ kmip_writer_close_struct (writer); /* KMIP_TAG_BatchItem */
350
+ kmip_writer_close_struct (writer); /* KMIP_TAG_RequestMessage */
351
+
352
+ /* Copy the KMIP writer buffer to a KMIP request. */
353
+ copy_writer_buffer (req, writer);
354
+ kmip_writer_destroy (writer);
355
+ return req;
356
+ }
357
+
358
+ static kms_request_t *
359
+ kmip_encrypt_decrypt (const char* unique_identifer, const uint8_t *data, size_t len,
360
+ const uint8_t *iv_data, size_t iv_len, bool encrypt) {
361
+ kmip_writer_t *writer;
362
+ kms_request_t *req;
363
+
364
+ req = calloc (1, sizeof (kms_request_t));
365
+ req->provider = KMS_REQUEST_PROVIDER_KMIP;
366
+
367
+ writer = kmip_writer_new();
368
+ kmip_writer_begin_struct(writer, KMIP_TAG_RequestMessage);
369
+
370
+ kmip_writer_begin_struct (writer, KMIP_TAG_RequestHeader);
371
+ kmip_writer_begin_struct (writer, KMIP_TAG_ProtocolVersion);
372
+ kmip_writer_write_integer (writer, KMIP_TAG_ProtocolVersionMajor, 1);
373
+ kmip_writer_write_integer (writer, KMIP_TAG_ProtocolVersionMinor, 2);
374
+ kmip_writer_close_struct (writer); /* KMIP_TAG_ProtocolVersion */
375
+ kmip_writer_write_integer (writer, KMIP_TAG_BatchCount, 1);
376
+ kmip_writer_close_struct (writer); /* KMIP_TAG_RequestHeader */
377
+
378
+ kmip_writer_begin_struct (writer, KMIP_TAG_BatchItem);
379
+ /* 0x1F == Encrypt, 0x20 == Decrypt*/
380
+ kmip_writer_write_enumeration (writer, KMIP_TAG_Operation, encrypt ? 0x1F : 0x20);
381
+ kmip_writer_begin_struct (writer, KMIP_TAG_RequestPayload);
382
+ kmip_writer_write_string (writer,
383
+ KMIP_TAG_UniqueIdentifier,
384
+ unique_identifer,
385
+ strlen (unique_identifer));
386
+
387
+ kmip_writer_begin_struct (writer, KMIP_TAG_CryptographicParameters);
388
+ kmip_writer_write_enumeration(writer, KMIP_TAG_BlockCipherMode, 1 /* CBC */);
389
+ kmip_writer_write_enumeration(writer, KMIP_TAG_PaddingMethod, 3 /* PKCS5 */);
390
+ kmip_writer_write_enumeration(writer, KMIP_TAG_CryptographicAlgorithm, 3 /* AES */);
391
+ if (encrypt) kmip_writer_write_bool(writer, KMIP_TAG_RandomIV, true);
392
+ kmip_writer_close_struct(writer); /* KMIP_TAG_CryptographicParameters */
393
+
394
+ kmip_writer_write_bytes(writer, KMIP_TAG_Data, (char *) data, len);
395
+ if (!encrypt) kmip_writer_write_bytes(writer, KMIP_TAG_IVCounterNonce, (char *) iv_data, iv_len);
396
+
397
+ kmip_writer_close_struct (writer); /* KMIP_TAG_RequestPayload */
398
+ kmip_writer_close_struct (writer); /* KMIP_TAG_BatchItem */
399
+ kmip_writer_close_struct (writer); /* KMIP_TAG_RequestMessage */
400
+
401
+ /* Copy the KMIP writer buffer to a KMIP request. */
402
+ copy_writer_buffer (req, writer);
403
+ kmip_writer_destroy (writer);
404
+ return req;
405
+ }
406
+
407
+ kms_request_t *
408
+ kms_kmip_request_encrypt_new (void *reserved, const char* unique_identifer, const uint8_t *plaintext, size_t len) {
409
+ /*
410
+ Create a KMIP Encrypt request of this form:
411
+ <RequestMessage tag="0x420078" type="Structure">
412
+ <RequestHeader tag="0x420077" type="Structure">
413
+ <ProtocolVersion tag="0x420069" type="Structure">
414
+ <ProtocolVersionMajor tag="0x42006a" type="Integer" value="1"/>
415
+ <ProtocolVersionMinor tag="0x42006b" type="Integer" value="2"/>
416
+ </ProtocolVersion>
417
+ <BatchCount tag="0x42000d" type="Integer" value="1"/>
418
+ </RequestHeader>
419
+ <BatchItem tag="0x42000f" type="Structure">
420
+ <Operation tag="0x42005c" type="Enumeration" value="31"/>
421
+ <RequestPayload tag="0x420079" type="Structure">
422
+ <UniqueIdentifier tag="0x420094" type="TextString" value="..."/>
423
+ <CryptographicParameters tag="0x42002b" type="Structure">
424
+ <BlockCipherMode tag="0x420011" type="Enumeration" value="1"/>
425
+ <PaddingMethod tag="0x42005f" type="Enumeration" value="3"/>
426
+ <CryptographicAlgorithm tag="0x420028" type="Enumeration" value="3"/>
427
+ <RandomIV tag="0x4200c5" type="Boolean" value="True"/>
428
+ </CryptographicParameters>
429
+ <Data tag="0x4200c2" type="ByteString" value="..."/>
430
+ </RequestPayload>
431
+ </BatchItem>
432
+ </RequestMessage>
433
+ */
434
+ return kmip_encrypt_decrypt(unique_identifer, plaintext, len, NULL, 0, true);
435
+ }
436
+
437
+ kms_request_t *
438
+ kms_kmip_request_decrypt_new (void *reserved, const char* unique_identifer, const uint8_t *ciphertext, size_t len, const uint8_t *iv_data, size_t iv_len) {
439
+ /*
440
+ Create a KMIP Decrypt request of this form:
441
+ <RequestMessage tag="0x420078" type="Structure">
442
+ <RequestHeader tag="0x420077" type="Structure">
443
+ <ProtocolVersion tag="0x420069" type="Structure">
444
+ <ProtocolVersionMajor tag="0x42006a" type="Integer" value="1"/>
445
+ <ProtocolVersionMinor tag="0x42006b" type="Integer" value="2"/>
446
+ </ProtocolVersion>
447
+ <BatchCount tag="0x42000d" type="Integer" value="1"/>
448
+ </RequestHeader>
449
+ <BatchItem tag="0x42000f" type="Structure">
450
+ <Operation tag="0x42005c" type="Enumeration" value="32"/>
451
+ <RequestPayload tag="0x420079" type="Structure">
452
+ <UniqueIdentifier tag="0x420094" type="TextString" value="..."/>
453
+ <CryptographicParameters tag="0x42002b" type="Structure">
454
+ <BlockCipherMode tag="0x420011" type="Enumeration" value="1"/>
455
+ <PaddingMethod tag="0x42005f" type="Enumeration" value="3"/>
456
+ <CryptographicAlgorithm tag="0x420028" type="Enumeration" value="3"/>
457
+ </CryptographicParameters>
458
+ <Data tag="0x4200c2" type="ByteString" value="..."/>
459
+ <IVCounterNonce tag="0x42003d" type="ByteString" value="..."/>
460
+ </RequestPayload>
461
+ </BatchItem>
462
+ </RequestMessage>
463
+ */
464
+ return kmip_encrypt_decrypt(unique_identifer, ciphertext, len, iv_data, iv_len, false);
465
+ }
466
+
@@ -1,5 +1,7 @@
1
1
  #include "kms_message/kms_kmip_response.h"
2
2
 
3
+ #include "kms_kmip_item_type_private.h"
4
+ #include "kms_kmip_tag_type_private.h"
3
5
  #include "kms_message_private.h"
4
6
  #include "kms_kmip_reader_writer_private.h"
5
7
  #include "kms_kmip_result_reason_private.h"
@@ -209,6 +211,167 @@ fail:
209
211
  return kms_request_str_detach (nullterminated);
210
212
  }
211
213
 
214
+ /*
215
+ Example of a successful response to an Encrypt request:
216
+ <ResponseMessage tag="0x42007b" type="Structure">
217
+ <ResponseHeader tag="0x42007a" type="Structure">
218
+ <ProtocolVersion tag="0x420069" type="Structure">
219
+ <ProtocolVersionMajor tag="0x42006a" type="Integer" value="1"/>
220
+ <ProtocolVersionMinor tag="0x42006b" type="Integer" value="2"/>
221
+ </ProtocolVersion>
222
+ <TimeStamp tag="0x420092" type="DateTime" value="2021-10-12T14:09:25-0500"/>
223
+ <BatchCount tag="0x42000d" type="Integer" value="1"/>
224
+ </ResponseHeader>
225
+ <BatchItem tag="0x42000f" type="Structure">
226
+ <Operation tag="0x42005c" type="Enumeration" value="31"/>
227
+ <ResultStatus tag="0x42007f" type="Enumeration" value="0"/>
228
+ <ResponsePayload tag="0x42007c" type="Structure">
229
+ <UniqueIdentifier tag="0x420094" type="TextString" value="39"/>
230
+ <Data tag="0x4200c2" type="ByteString" value="..."/>
231
+ <IVCounterNonce tag="0x42003d" type="ByteString" value="..."/>
232
+ </ResponsePayload>
233
+ </BatchItem>
234
+ </ResponseMessage>
235
+ */
236
+ uint8_t *
237
+ kms_kmip_response_get_iv (kms_response_t *res, size_t *datalen) {
238
+ kmip_reader_t *reader = NULL;
239
+ size_t pos;
240
+ size_t len;
241
+ uint8_t *data = NULL;
242
+ uint8_t *tmp;
243
+
244
+ if (!check_and_require_kmip (res)) {
245
+ goto fail;
246
+ }
247
+
248
+ if (!kms_kmip_response_ok (res)) {
249
+ goto fail;
250
+ }
251
+
252
+ reader = kmip_reader_new (res->kmip.data, res->kmip.len);
253
+
254
+ if (!kmip_reader_find_and_recurse (reader, KMIP_TAG_ResponseMessage)) {
255
+ KMS_ERROR (res,
256
+ "unable to find tag: %s",
257
+ kmip_tag_to_string (KMIP_TAG_ResponseMessage));
258
+ goto fail;
259
+ }
260
+
261
+ if (!kmip_reader_find_and_recurse (reader, KMIP_TAG_BatchItem)) {
262
+ KMS_ERROR (res,
263
+ "unable to find tag: %s",
264
+ kmip_tag_to_string (KMIP_TAG_BatchItem));
265
+ goto fail;
266
+ }
267
+
268
+ if (!kmip_reader_find_and_recurse (reader, KMIP_TAG_ResponsePayload)) {
269
+ KMS_ERROR (res,
270
+ "unable to find tag: %s",
271
+ kmip_tag_to_string (KMIP_TAG_ResponsePayload));
272
+ goto fail;
273
+ }
274
+
275
+ if (!kmip_reader_find (reader, KMIP_TAG_IVCounterNonce, KMIP_ITEM_TYPE_ByteString, &pos, &len)) {
276
+ KMS_ERROR (res,
277
+ "unable to find tag: %s",
278
+ kmip_tag_to_string (KMIP_TAG_Data));
279
+ goto fail;
280
+ }
281
+
282
+ if (!kmip_reader_read_bytes (reader, &tmp, len)) {
283
+ KMS_ERROR (res, "unable to read data bytes");
284
+ goto fail;
285
+ }
286
+ data = malloc (len);
287
+ memcpy (data, tmp, len);
288
+ *datalen = len;
289
+
290
+ fail:
291
+ kmip_reader_destroy (reader);
292
+ return data;
293
+ }
294
+
295
+ /*
296
+ Example of a successful response to a Decrypt request:
297
+ <ResponseMessage tag="0x42007b" type="Structure">
298
+ <ResponseHeader tag="0x42007a" type="Structure">
299
+ <ProtocolVersion tag="0x420069" type="Structure">
300
+ <ProtocolVersionMajor tag="0x42006a" type="Integer" value="1"/>
301
+ <ProtocolVersionMinor tag="0x42006b" type="Integer" value="2"/>
302
+ </ProtocolVersion>
303
+ <TimeStamp tag="0x420092" type="DateTime" value="2021-10-12T14:09:25-0500"/>
304
+ <BatchCount tag="0x42000d" type="Integer" value="1"/>
305
+ </ResponseHeader>
306
+ <BatchItem tag="0x42000f" type="Structure">
307
+ <Operation tag="0x42005c" type="Enumeration" value="32"/>
308
+ <ResultStatus tag="0x42007f" type="Enumeration" value="0"/>
309
+ <ResponsePayload tag="0x42007c" type="Structure">
310
+ <UniqueIdentifier tag="0x420094" type="TextString" value="39"/>
311
+ <Data tag="0x4200c2" type="ByteString" value="..."/>
312
+ </ResponsePayload>
313
+ </BatchItem>
314
+ </ResponseMessage>
315
+ */
316
+ uint8_t *
317
+ kms_kmip_response_get_data (kms_response_t *res, size_t *datalen) {
318
+ kmip_reader_t *reader = NULL;
319
+ size_t pos;
320
+ size_t len;
321
+ uint8_t *data = NULL;
322
+ uint8_t *tmp;
323
+
324
+ if (!check_and_require_kmip (res)) {
325
+ goto fail;
326
+ }
327
+
328
+ if (!kms_kmip_response_ok (res)) {
329
+ goto fail;
330
+ }
331
+
332
+ reader = kmip_reader_new (res->kmip.data, res->kmip.len);
333
+
334
+ if (!kmip_reader_find_and_recurse (reader, KMIP_TAG_ResponseMessage)) {
335
+ KMS_ERROR (res,
336
+ "unable to find tag: %s",
337
+ kmip_tag_to_string (KMIP_TAG_ResponseMessage));
338
+ goto fail;
339
+ }
340
+
341
+ if (!kmip_reader_find_and_recurse (reader, KMIP_TAG_BatchItem)) {
342
+ KMS_ERROR (res,
343
+ "unable to find tag: %s",
344
+ kmip_tag_to_string (KMIP_TAG_BatchItem));
345
+ goto fail;
346
+ }
347
+
348
+ if (!kmip_reader_find_and_recurse (reader, KMIP_TAG_ResponsePayload)) {
349
+ KMS_ERROR (res,
350
+ "unable to find tag: %s",
351
+ kmip_tag_to_string (KMIP_TAG_ResponsePayload));
352
+ goto fail;
353
+ }
354
+
355
+ if (!kmip_reader_find (reader, KMIP_TAG_Data, KMIP_ITEM_TYPE_ByteString, &pos, &len)) {
356
+ KMS_ERROR (res,
357
+ "unable to find tag: %s",
358
+ kmip_tag_to_string (KMIP_TAG_Data));
359
+ goto fail;
360
+ }
361
+
362
+ if (!kmip_reader_read_bytes (reader, &tmp, len)) {
363
+ KMS_ERROR (res, "unable to read data bytes");
364
+ goto fail;
365
+ }
366
+ data = malloc (len);
367
+ memcpy (data, tmp, len);
368
+ *datalen = len;
369
+
370
+ fail:
371
+ kmip_reader_destroy (reader);
372
+ return data;
373
+ }
374
+
212
375
  /*
213
376
  Example of a successful response to a Get request:
214
377
  <ResponseMessage tag="0x42007b" type="Structure">
@@ -312,7 +312,8 @@
312
312
  KMS_X (AlwaysSensitive, 0x420121) \
313
313
  KMS_X (Extractable, 0x420122) \
314
314
  KMS_X (NeverExtractable, 0x420123) \
315
- KMS_X_LAST (ReplaceExisting, 0x420124)
315
+ KMS_X (ReplaceExisting, 0x420124) \
316
+ KMS_X_LAST (Attributes, 0x420125)
316
317
  /* clang-format on */
317
318
 
318
319
  /* Generate an enum with each tag value. */
@@ -51,6 +51,23 @@ kms_kmip_request_activate_new (void *reserved, const char *unique_identifier);
51
51
  KMS_MSG_EXPORT (kms_request_t *)
52
52
  kms_kmip_request_get_new (void *reserved, const char *unique_identifier);
53
53
 
54
+ KMS_MSG_EXPORT (kms_request_t *)
55
+ kms_kmip_request_create_new (void *reserved);
56
+
57
+ KMS_MSG_EXPORT (kms_request_t *)
58
+ kms_kmip_request_encrypt_new (void *reserved,
59
+ const char *unique_identifier,
60
+ const uint8_t *plaintext,
61
+ size_t len);
62
+
63
+ KMS_MSG_EXPORT (kms_request_t *)
64
+ kms_kmip_request_decrypt_new (void *reserved,
65
+ const char *unique_identifier,
66
+ const uint8_t *ciphertext,
67
+ size_t len,
68
+ const uint8_t *iv,
69
+ size_t iv_len);
70
+
54
71
  #ifdef __cplusplus
55
72
  }
56
73
  #endif
@@ -37,4 +37,10 @@ kms_kmip_response_get_unique_identifier (kms_response_t *res);
37
37
  KMS_MSG_EXPORT (uint8_t *)
38
38
  kms_kmip_response_get_secretdata (kms_response_t *res, size_t *secretdatalen);
39
39
 
40
+ KMS_MSG_EXPORT (uint8_t *)
41
+ kms_kmip_response_get_data (kms_response_t *res, size_t *datalen);
42
+
43
+ KMS_MSG_EXPORT (uint8_t *)
44
+ kms_kmip_response_get_iv (kms_response_t *res, size_t *datalen);
45
+
40
46
  #endif /* KMS_KMIP_RESPONSE_H */
@@ -18,7 +18,8 @@
18
18
  #if defined(_WIN32)
19
19
  #include <stdlib.h>
20
20
  #include <string.h>
21
- char * kms_strndup (const char *src, size_t len)
21
+ char *
22
+ kms_strndup (const char *src, size_t len)
22
23
  {
23
24
  char *dst = (char *) malloc (len + 1);
24
25
  if (!dst) {
@@ -30,4 +31,4 @@ char * kms_strndup (const char *src, size_t len)
30
31
 
31
32
  return dst;
32
33
  }
33
- #endif
34
+ #endif
@@ -181,10 +181,12 @@ kms_request_set_date (kms_request_t *request, const struct tm *tm)
181
181
  /* use current time */
182
182
  time_t t;
183
183
  time (&t);
184
- #ifdef _WIN32
184
+ #if defined(KMS_MESSAGE_HAVE_GMTIME_R)
185
+ gmtime_r (&t, &tmp_tm);
186
+ #elif defined(_MSC_VER)
185
187
  gmtime_s (&tmp_tm, &t);
186
188
  #else
187
- gmtime_r (&t, &tmp_tm);
189
+ tmp_tm = *gmtime (&t);
188
190
  #endif
189
191
  tm = &tmp_tm;
190
192
  }
@@ -328,7 +328,7 @@ kms_request_str_append_stripped (kms_request_str_t *str,
328
328
 
329
329
  kms_request_str_reserve (str, appended->len);
330
330
 
331
- // msvcrt is unhappy when it gets non-ANSI characters in isspace
331
+ /* msvcrt is unhappy when it gets non-ANSI characters in isspace */
332
332
  while (*src >= 0 && isspace (*src)) {
333
333
  ++src;
334
334
  }
@@ -366,7 +366,7 @@ kms_request_str_append_hashed (_kms_crypto_t *crypto,
366
366
  kms_request_str_t *str,
367
367
  kms_request_str_t *appended)
368
368
  {
369
- uint8_t hash[32];
369
+ uint8_t hash[32] = {0};
370
370
  char *hex_chars;
371
371
 
372
372
  if (!crypto->sha256 (crypto->ctx, appended->str, appended->len, hash)) {