@voxgig/sdkgen 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +330 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/cpp.aon +18 -0
- package/project/.sdk/model/target/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- package/project/.sdk/model/target/zig.aon +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/cpp/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/lua/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- package/project/.sdk/tm/ocaml/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/sdkgen-package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Boru.cpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
#include "Boru.hpp"
|
|
5
|
+
|
|
6
|
+
#include "Httpjson.hpp"
|
|
7
|
+
#include "Proc.hpp"
|
|
8
|
+
#include "../sekreto/Providers.hpp"
|
|
9
|
+
#include "../sekreto/Sekreto.hpp"
|
|
10
|
+
|
|
11
|
+
namespace sekreto {
|
|
12
|
+
|
|
13
|
+
namespace {
|
|
14
|
+
|
|
15
|
+
// ------------------------------------------------------------------ boru
|
|
16
|
+
|
|
17
|
+
/// A boru vault.
|
|
18
|
+
///
|
|
19
|
+
/// Two ways in, both boru's own. With no `addr`, the CLI:
|
|
20
|
+
/// `boru vault get --reveal <alias>` prints the secret on stdout and
|
|
21
|
+
/// nothing else; the passphrase is read by boru itself from
|
|
22
|
+
/// BORU_VAULT_PASSPHRASE, is never accepted as config, and never reaches a
|
|
23
|
+
/// command line where the process table would publish it.
|
|
24
|
+
///
|
|
25
|
+
/// With an `addr`, boru's wire protocol: a read-only, HashiCorp-shaped
|
|
26
|
+
/// provision API. A boru alias KEEPS its dots, so `api.token` is the
|
|
27
|
+
/// single path segment `api.token` - not the `api`/`token` split a
|
|
28
|
+
/// HashiCorp KV gets - and the value is the `value` field.
|
|
29
|
+
class BoruProvider : public Provider {
|
|
30
|
+
public:
|
|
31
|
+
BoruProvider(const std::string& command, const std::string& namespace_,
|
|
32
|
+
const std::string& home, const std::string& addr, const std::string& token,
|
|
33
|
+
const std::string& mount)
|
|
34
|
+
: command_(first(command, "boru")),
|
|
35
|
+
namespace_(namespace_),
|
|
36
|
+
home_(home),
|
|
37
|
+
addr_(trimslash(addr)),
|
|
38
|
+
token_(token),
|
|
39
|
+
mount_(first(mount, "secret")) {}
|
|
40
|
+
|
|
41
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
42
|
+
checkname(name);
|
|
43
|
+
|
|
44
|
+
if (!addr_.empty()) return wirelookup(name);
|
|
45
|
+
|
|
46
|
+
// The CLI alias is namespace-qualified with a COLON; the wire one with
|
|
47
|
+
// a slash. Both are boru's own spellings.
|
|
48
|
+
std::string alias = namespace_.empty() ? name : namespace_ + ":" + name;
|
|
49
|
+
|
|
50
|
+
std::vector<std::string> environment = processenv();
|
|
51
|
+
if (!home_.empty()) setenvvar(environment, "BORU_HOME", home_);
|
|
52
|
+
|
|
53
|
+
Ran ran = runcmd({command_, "vault", "get", "--reveal", alias}, environment, command_);
|
|
54
|
+
|
|
55
|
+
if (0 == ran.status) {
|
|
56
|
+
// boru prints the value and one newline, and nothing else.
|
|
57
|
+
return dropnewline(ran.out);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// "no alias named" is boru saying it does not hold this secret, which
|
|
61
|
+
// is a miss: the chain carries on. A locked vault or a wrong passphrase
|
|
62
|
+
// is not a miss - treating it as one would fall through to a weaker
|
|
63
|
+
// store without saying so.
|
|
64
|
+
if (borumiss(ran.why)) return std::nullopt;
|
|
65
|
+
|
|
66
|
+
throw SekretoError("sekreto: boru vault error: " +
|
|
67
|
+
(ran.why.empty() ? "exit " + std::to_string(ran.status) : ran.why));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
std::string describe() const override {
|
|
71
|
+
if (!addr_.empty()) return "boru:" + addr_;
|
|
72
|
+
return namespace_.empty() ? "boru" : "boru:" + namespace_;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private:
|
|
76
|
+
std::optional<std::string> wirelookup(const std::string& name) {
|
|
77
|
+
checkaddr(addr_);
|
|
78
|
+
|
|
79
|
+
std::string alias = namespace_.empty() ? name : namespace_ + "/" + name;
|
|
80
|
+
std::string url = addr_ + "/v1/" + mount_ + "/data/" + alias;
|
|
81
|
+
|
|
82
|
+
Ordered headers;
|
|
83
|
+
headers.set("X-Vault-Token", token_);
|
|
84
|
+
|
|
85
|
+
Answer res = fetchjson("GET", url, headers);
|
|
86
|
+
|
|
87
|
+
if (404 == res.status) return std::nullopt;
|
|
88
|
+
|
|
89
|
+
if (200 != res.status) {
|
|
90
|
+
throw SekretoError("sekreto: boru serve error: " + std::to_string(res.status) + ": " + url);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return textof(res.body.get("data").get("data").get("value"));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
std::string command_;
|
|
97
|
+
std::string namespace_;
|
|
98
|
+
std::string home_;
|
|
99
|
+
std::string addr_;
|
|
100
|
+
std::string token_;
|
|
101
|
+
std::string mount_;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
} // namespace
|
|
105
|
+
|
|
106
|
+
bool borumiss(const std::string& why) {
|
|
107
|
+
return std::string::npos != why.find("no alias named");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
Definition boru() {
|
|
111
|
+
return providerplugin("boru", [](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
112
|
+
return std::make_shared<BoruProvider>(spec.command, spec.namespace_, spec.home, spec.addr,
|
|
113
|
+
spec.token, spec.mount);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
} // namespace sekreto
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Boru.hpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// A boru vault, read through its CLI or over its wire protocol.
|
|
5
|
+
//
|
|
6
|
+
// A PLUGIN, not a built-in: this kind opens a socket, signs a request or
|
|
7
|
+
// spawns a process, so a chain that does not name it links none of that.
|
|
8
|
+
// The calling project includes this header and passes what it declares to
|
|
9
|
+
// the Sekreto constructor (docs/design/plugin-providers.md).
|
|
10
|
+
|
|
11
|
+
#ifndef SEKRETO_PLUGINS_BORU_HPP
|
|
12
|
+
#define SEKRETO_PLUGINS_BORU_HPP
|
|
13
|
+
|
|
14
|
+
#include "../sekreto/Provider.hpp"
|
|
15
|
+
|
|
16
|
+
namespace sekreto {
|
|
17
|
+
|
|
18
|
+
/// The `boru` provider kind, as a voxgig/plugin definition.
|
|
19
|
+
Definition boru();
|
|
20
|
+
|
|
21
|
+
/// Does this boru failure mean "no such secret" rather than "I could not
|
|
22
|
+
/// answer"?
|
|
23
|
+
bool borumiss(const std::string& why);
|
|
24
|
+
|
|
25
|
+
} // namespace sekreto
|
|
26
|
+
|
|
27
|
+
#endif
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Crypto.cpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
#include "Crypto.hpp"
|
|
5
|
+
|
|
6
|
+
namespace sekreto {
|
|
7
|
+
|
|
8
|
+
namespace {
|
|
9
|
+
|
|
10
|
+
// FIPS 180-4 round constants: the first 32 bits of the fractional parts of
|
|
11
|
+
// the cube roots of the first 64 primes.
|
|
12
|
+
const uint32_t K[64] = {
|
|
13
|
+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
|
|
14
|
+
0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
|
15
|
+
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
|
|
16
|
+
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
17
|
+
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
|
|
18
|
+
0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
|
19
|
+
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
|
|
20
|
+
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
21
|
+
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
|
|
22
|
+
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
|
23
|
+
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// The eight initial hash words: the first 32 bits of the fractional parts
|
|
27
|
+
// of the square roots of the first 8 primes.
|
|
28
|
+
const uint32_t H0[8] = {
|
|
29
|
+
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
|
30
|
+
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
inline uint32_t ror(uint32_t word, unsigned int bits) {
|
|
34
|
+
return (word >> bits) | (word << (32 - bits));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const size_t BLOCK = 64;
|
|
38
|
+
|
|
39
|
+
} // namespace
|
|
40
|
+
|
|
41
|
+
Bytes tobytes(const std::string& text) {
|
|
42
|
+
return Bytes(text.begin(), text.end());
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
std::string frombytes(const Bytes& data) {
|
|
46
|
+
return std::string(data.begin(), data.end());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Bytes sha256(const Bytes& data) {
|
|
50
|
+
Bytes message = data;
|
|
51
|
+
|
|
52
|
+
// Padding: one 0x80 byte, zeros up to 56 mod 64, then the message length
|
|
53
|
+
// in BITS as a big-endian 64-bit integer.
|
|
54
|
+
uint64_t bitlen = static_cast<uint64_t>(data.size()) * 8;
|
|
55
|
+
|
|
56
|
+
message.push_back(0x80);
|
|
57
|
+
while (56 != message.size() % BLOCK) {
|
|
58
|
+
message.push_back(0);
|
|
59
|
+
}
|
|
60
|
+
for (int shift = 56; 0 <= shift; shift -= 8) {
|
|
61
|
+
message.push_back(static_cast<uint8_t>((bitlen >> shift) & 0xff));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
uint32_t hash[8];
|
|
65
|
+
for (int index = 0; index < 8; index++) {
|
|
66
|
+
hash[index] = H0[index];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for (size_t block = 0; block < message.size(); block += BLOCK) {
|
|
70
|
+
uint32_t schedule[64];
|
|
71
|
+
|
|
72
|
+
for (int index = 0; index < 16; index++) {
|
|
73
|
+
size_t at = block + static_cast<size_t>(index) * 4;
|
|
74
|
+
schedule[index] = (static_cast<uint32_t>(message[at]) << 24) |
|
|
75
|
+
(static_cast<uint32_t>(message[at + 1]) << 16) |
|
|
76
|
+
(static_cast<uint32_t>(message[at + 2]) << 8) |
|
|
77
|
+
static_cast<uint32_t>(message[at + 3]);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
for (int index = 16; index < 64; index++) {
|
|
81
|
+
uint32_t prev15 = schedule[index - 15];
|
|
82
|
+
uint32_t prev2 = schedule[index - 2];
|
|
83
|
+
uint32_t sigma0 = ror(prev15, 7) ^ ror(prev15, 18) ^ (prev15 >> 3);
|
|
84
|
+
uint32_t sigma1 = ror(prev2, 17) ^ ror(prev2, 19) ^ (prev2 >> 10);
|
|
85
|
+
schedule[index] = schedule[index - 16] + sigma0 + schedule[index - 7] + sigma1;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
uint32_t a = hash[0];
|
|
89
|
+
uint32_t b = hash[1];
|
|
90
|
+
uint32_t c = hash[2];
|
|
91
|
+
uint32_t d = hash[3];
|
|
92
|
+
uint32_t e = hash[4];
|
|
93
|
+
uint32_t f = hash[5];
|
|
94
|
+
uint32_t g = hash[6];
|
|
95
|
+
uint32_t h = hash[7];
|
|
96
|
+
|
|
97
|
+
for (int index = 0; index < 64; index++) {
|
|
98
|
+
uint32_t bigsigma1 = ror(e, 6) ^ ror(e, 11) ^ ror(e, 25);
|
|
99
|
+
uint32_t choose = (e & f) ^ (~e & g);
|
|
100
|
+
uint32_t temp1 = h + bigsigma1 + choose + K[index] + schedule[index];
|
|
101
|
+
uint32_t bigsigma0 = ror(a, 2) ^ ror(a, 13) ^ ror(a, 22);
|
|
102
|
+
uint32_t major = (a & b) ^ (a & c) ^ (b & c);
|
|
103
|
+
uint32_t temp2 = bigsigma0 + major;
|
|
104
|
+
|
|
105
|
+
h = g;
|
|
106
|
+
g = f;
|
|
107
|
+
f = e;
|
|
108
|
+
e = d + temp1;
|
|
109
|
+
d = c;
|
|
110
|
+
c = b;
|
|
111
|
+
b = a;
|
|
112
|
+
a = temp1 + temp2;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
hash[0] += a;
|
|
116
|
+
hash[1] += b;
|
|
117
|
+
hash[2] += c;
|
|
118
|
+
hash[3] += d;
|
|
119
|
+
hash[4] += e;
|
|
120
|
+
hash[5] += f;
|
|
121
|
+
hash[6] += g;
|
|
122
|
+
hash[7] += h;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
Bytes out;
|
|
126
|
+
out.reserve(32);
|
|
127
|
+
|
|
128
|
+
for (int index = 0; index < 8; index++) {
|
|
129
|
+
out.push_back(static_cast<uint8_t>((hash[index] >> 24) & 0xff));
|
|
130
|
+
out.push_back(static_cast<uint8_t>((hash[index] >> 16) & 0xff));
|
|
131
|
+
out.push_back(static_cast<uint8_t>((hash[index] >> 8) & 0xff));
|
|
132
|
+
out.push_back(static_cast<uint8_t>(hash[index] & 0xff));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return out;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
Bytes hmacsha256(const Bytes& key, const Bytes& data) {
|
|
139
|
+
Bytes block = key;
|
|
140
|
+
|
|
141
|
+
// A key longer than the block is hashed down; a shorter one is padded up
|
|
142
|
+
// with zeros.
|
|
143
|
+
if (BLOCK < block.size()) {
|
|
144
|
+
block = sha256(block);
|
|
145
|
+
}
|
|
146
|
+
block.resize(BLOCK, 0);
|
|
147
|
+
|
|
148
|
+
Bytes inner;
|
|
149
|
+
inner.reserve(BLOCK + data.size());
|
|
150
|
+
Bytes outer;
|
|
151
|
+
outer.reserve(BLOCK + 32);
|
|
152
|
+
|
|
153
|
+
for (size_t index = 0; index < BLOCK; index++) {
|
|
154
|
+
inner.push_back(static_cast<uint8_t>(block[index] ^ 0x36));
|
|
155
|
+
outer.push_back(static_cast<uint8_t>(block[index] ^ 0x5c));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
inner.insert(inner.end(), data.begin(), data.end());
|
|
159
|
+
|
|
160
|
+
Bytes middle = sha256(inner);
|
|
161
|
+
outer.insert(outer.end(), middle.begin(), middle.end());
|
|
162
|
+
|
|
163
|
+
return sha256(outer);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
std::string hex(const Bytes& data) {
|
|
167
|
+
static const char DIGITS[] = "0123456789abcdef";
|
|
168
|
+
|
|
169
|
+
std::string out;
|
|
170
|
+
out.reserve(data.size() * 2);
|
|
171
|
+
|
|
172
|
+
for (uint8_t byte : data) {
|
|
173
|
+
out.push_back(DIGITS[(byte >> 4) & 0x0f]);
|
|
174
|
+
out.push_back(DIGITS[byte & 0x0f]);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return out;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
} // namespace sekreto
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Crypto.hpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// SHA-256 and HMAC-SHA256, hand-rolled, plus hex.
|
|
5
|
+
//
|
|
6
|
+
// This port links OpenSSL, so `EVP_Digest` and `HMAC` are a function call
|
|
7
|
+
// away - and calling them here would break the rule that allows the link
|
|
8
|
+
// at all. That exception covers cryptographic TRANSPORT and nothing else:
|
|
9
|
+
// SigV4 is signing, not transport. Rust is the worked precedent, with
|
|
10
|
+
// `ring` already inside rustls's closure and `rust/src/crypto.rs` still
|
|
11
|
+
// carrying both primitives in-tree.
|
|
12
|
+
//
|
|
13
|
+
// Correctness is not asserted here - it is proved by the SigV4
|
|
14
|
+
// known-answer vectors in the shared spec. A signature is a chain of these
|
|
15
|
+
// two functions, so one wrong bit anywhere fails there.
|
|
16
|
+
//
|
|
17
|
+
// A port of rust/src/crypto.rs.
|
|
18
|
+
|
|
19
|
+
// NOTHING BUT THE SIGNER INCLUDES THIS. Percent-encoding and base64 used
|
|
20
|
+
// to sit here; they moved to Httpjson.hpp, because the plugins that need
|
|
21
|
+
// them - Azure, 1Password, Doppler, Infisical, GCP - sign nothing, and
|
|
22
|
+
// including this file for a query string would put SHA-256 into their link
|
|
23
|
+
// maps.
|
|
24
|
+
|
|
25
|
+
#ifndef SEKRETO_PLUGINS_CRYPTO_HPP
|
|
26
|
+
#define SEKRETO_PLUGINS_CRYPTO_HPP
|
|
27
|
+
|
|
28
|
+
#include <cstdint>
|
|
29
|
+
#include <string>
|
|
30
|
+
#include <vector>
|
|
31
|
+
|
|
32
|
+
namespace sekreto {
|
|
33
|
+
|
|
34
|
+
using Bytes = std::vector<uint8_t>;
|
|
35
|
+
|
|
36
|
+
Bytes tobytes(const std::string& text);
|
|
37
|
+
std::string frombytes(const Bytes& data);
|
|
38
|
+
|
|
39
|
+
/// SHA-256 of some bytes, as 32 bytes.
|
|
40
|
+
Bytes sha256(const Bytes& data);
|
|
41
|
+
|
|
42
|
+
/// HMAC-SHA256, RFC 2104, block size 64. Argument order is (key, data);
|
|
43
|
+
/// PHP's and Perl's stdlib take (data, key), and the wrapper is where that
|
|
44
|
+
/// gets fixed, never at the call sites.
|
|
45
|
+
Bytes hmacsha256(const Bytes& key, const Bytes& data);
|
|
46
|
+
|
|
47
|
+
/// Lowercase, zero-padded, two digits a byte.
|
|
48
|
+
std::string hex(const Bytes& data);
|
|
49
|
+
|
|
50
|
+
} // namespace sekreto
|
|
51
|
+
|
|
52
|
+
#endif
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Doppler.cpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
#include "Doppler.hpp"
|
|
5
|
+
|
|
6
|
+
#include "Httpjson.hpp"
|
|
7
|
+
#include "../sekreto/Providers.hpp"
|
|
8
|
+
#include "../sekreto/Sekreto.hpp"
|
|
9
|
+
|
|
10
|
+
namespace sekreto {
|
|
11
|
+
|
|
12
|
+
namespace {
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------- doppler
|
|
15
|
+
|
|
16
|
+
/// Doppler.
|
|
17
|
+
///
|
|
18
|
+
/// The whole config is downloaded once - Doppler's own bulk endpoint - and
|
|
19
|
+
/// answered from memory, like a remote .env: `api.token` is the
|
|
20
|
+
/// `API_TOKEN` entry. A service token is config-scoped, so project and
|
|
21
|
+
/// config are only needed with broader tokens.
|
|
22
|
+
class DopplerProvider : public Provider {
|
|
23
|
+
public:
|
|
24
|
+
DopplerProvider(const std::string& token, const std::string& project,
|
|
25
|
+
const std::string& config, const std::string& addr)
|
|
26
|
+
: token_(token), project_(project), config_(config), addr_(addr) {}
|
|
27
|
+
|
|
28
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
29
|
+
load();
|
|
30
|
+
// The `prefix` option is deliberately not consulted by this kind.
|
|
31
|
+
return values_.get(envkey(name));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
std::string describe() const override {
|
|
35
|
+
return project_.empty() ? "doppler" : "doppler:" + project_ + "/" + config_;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private:
|
|
39
|
+
void load() {
|
|
40
|
+
if (loaded_) return;
|
|
41
|
+
|
|
42
|
+
std::string useaddr = trimslash(first(addr_, "https://api.doppler.com"));
|
|
43
|
+
checkaddr(useaddr);
|
|
44
|
+
|
|
45
|
+
std::string url = useaddr + "/v3/configs/config/secrets/download?format=json";
|
|
46
|
+
if (!project_.empty()) url += "&project=" + uriescape(project_);
|
|
47
|
+
if (!config_.empty()) url += "&config=" + uriescape(config_);
|
|
48
|
+
|
|
49
|
+
Ordered headers;
|
|
50
|
+
headers.set("authorization", "Bearer " + token_);
|
|
51
|
+
|
|
52
|
+
Answer res = fetchjson("GET", url, headers);
|
|
53
|
+
|
|
54
|
+
if (200 != res.status || !res.body.isobj()) {
|
|
55
|
+
throw SekretoError("sekreto: doppler error: " + std::to_string(res.status));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Ordered values;
|
|
59
|
+
|
|
60
|
+
for (const auto& entry : res.body.objval) {
|
|
61
|
+
std::optional<std::string> text = textof(entry.second);
|
|
62
|
+
if (text.has_value()) values.set(entry.first, text.value());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Only a successful load is remembered: a failed one retries.
|
|
66
|
+
values_ = values;
|
|
67
|
+
loaded_ = true;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
std::string token_;
|
|
71
|
+
std::string project_;
|
|
72
|
+
std::string config_;
|
|
73
|
+
std::string addr_;
|
|
74
|
+
|
|
75
|
+
Ordered values_;
|
|
76
|
+
bool loaded_ = false;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
} // namespace
|
|
80
|
+
|
|
81
|
+
Definition doppler() {
|
|
82
|
+
return providerplugin("doppler", [](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
83
|
+
return std::make_shared<DopplerProvider>(spec.token, spec.project, spec.config, spec.addr);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
} // namespace sekreto
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Doppler.hpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// Doppler.
|
|
5
|
+
//
|
|
6
|
+
// A PLUGIN, not a built-in: this kind opens a socket, signs a request or
|
|
7
|
+
// spawns a process, so a chain that does not name it links none of that.
|
|
8
|
+
// The calling project includes this header and passes what it declares to
|
|
9
|
+
// the Sekreto constructor (docs/design/plugin-providers.md).
|
|
10
|
+
|
|
11
|
+
#ifndef SEKRETO_PLUGINS_DOPPLER_HPP
|
|
12
|
+
#define SEKRETO_PLUGINS_DOPPLER_HPP
|
|
13
|
+
|
|
14
|
+
#include "../sekreto/Provider.hpp"
|
|
15
|
+
|
|
16
|
+
namespace sekreto {
|
|
17
|
+
|
|
18
|
+
/// The `doppler` provider kind, as a voxgig/plugin definition.
|
|
19
|
+
Definition doppler();
|
|
20
|
+
|
|
21
|
+
} // namespace sekreto
|
|
22
|
+
|
|
23
|
+
#endif
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Gcpsecrets.cpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
#include "Gcpsecrets.hpp"
|
|
5
|
+
|
|
6
|
+
#include "Httpjson.hpp"
|
|
7
|
+
#include "../sekreto/Providers.hpp"
|
|
8
|
+
#include "../sekreto/Sekreto.hpp"
|
|
9
|
+
|
|
10
|
+
namespace sekreto {
|
|
11
|
+
|
|
12
|
+
namespace {
|
|
13
|
+
|
|
14
|
+
// -------------------------------------------------------------------- gcp
|
|
15
|
+
|
|
16
|
+
/// GCP Secret Manager.
|
|
17
|
+
///
|
|
18
|
+
/// `api.token` reads secret `api_token` (dots flattened to `_`; Secret
|
|
19
|
+
/// Manager ids have no hierarchy and reject dots), latest version. The
|
|
20
|
+
/// token comes from config, then GOOGLE_OAUTH_ACCESS_TOKEN, then the
|
|
21
|
+
/// GCE/GKE metadata server - so on Google's own platform no credential
|
|
22
|
+
/// configuration is needed at all.
|
|
23
|
+
///
|
|
24
|
+
/// The metadata call is plain http to a link-local host by platform design
|
|
25
|
+
/// and carries no credential, so `checkaddr` guards the Secret Manager
|
|
26
|
+
/// address instead.
|
|
27
|
+
class GcpsecretsProvider : public Provider {
|
|
28
|
+
public:
|
|
29
|
+
GcpsecretsProvider(const std::string& project, const std::string& token,
|
|
30
|
+
const std::string& addr, const std::string& metadataaddr)
|
|
31
|
+
: project_(project), token_(token), addr_(addr), metadataaddr_(metadataaddr) {}
|
|
32
|
+
|
|
33
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
34
|
+
if (project_.empty()) throw SekretoError("sekreto: gcp: no project");
|
|
35
|
+
|
|
36
|
+
std::string useaddr = first(addr_, "https://secretmanager.googleapis.com");
|
|
37
|
+
checkaddr(useaddr);
|
|
38
|
+
|
|
39
|
+
if (!livetoken_.has_value() || nowms() >= renewat_) {
|
|
40
|
+
livetoken_ = login();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
std::string url = trimslash(useaddr) + "/v1/projects/" + project_ + "/secrets/" +
|
|
44
|
+
flatname(name, "_") + "/versions/latest:access";
|
|
45
|
+
|
|
46
|
+
Ordered headers;
|
|
47
|
+
headers.set("authorization", "Bearer " + livetoken_.value_or(""));
|
|
48
|
+
|
|
49
|
+
Answer res = fetchjson("GET", url, headers);
|
|
50
|
+
|
|
51
|
+
if (404 == res.status) return std::nullopt;
|
|
52
|
+
|
|
53
|
+
if (200 != res.status) {
|
|
54
|
+
throw SekretoError("sekreto: gcp error: " + std::to_string(res.status) + ": " + url);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
std::string data;
|
|
58
|
+
if (!res.body.get("payload").get("data").asstr(data)) return std::nullopt;
|
|
59
|
+
|
|
60
|
+
std::string decoded;
|
|
61
|
+
if (!unbase64(data, decoded)) {
|
|
62
|
+
throw SekretoError("sekreto: gcp: undecodable secret");
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return decoded;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
std::string describe() const override { return "gcpsecrets:" + project_; }
|
|
69
|
+
|
|
70
|
+
private:
|
|
71
|
+
std::string usemetadataaddr() const {
|
|
72
|
+
if (!metadataaddr_.empty()) return metadataaddr_;
|
|
73
|
+
|
|
74
|
+
std::string host = envvar("GCE_METADATA_HOST");
|
|
75
|
+
if (!host.empty()) return "http://" + host;
|
|
76
|
+
|
|
77
|
+
return "http://metadata.google.internal";
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
std::string login() {
|
|
81
|
+
std::string configured = first(token_, envvar("GOOGLE_OAUTH_ACCESS_TOKEN"));
|
|
82
|
+
if (!configured.empty()) return configured;
|
|
83
|
+
|
|
84
|
+
std::string url = trimslash(usemetadataaddr()) +
|
|
85
|
+
"/computeMetadata/v1/instance/service-accounts/default/token";
|
|
86
|
+
|
|
87
|
+
Ordered headers;
|
|
88
|
+
headers.set("Metadata-Flavor", "Google");
|
|
89
|
+
|
|
90
|
+
Answer res = fetchjson("GET", url, headers);
|
|
91
|
+
|
|
92
|
+
std::optional<std::string> got = textof(res.body.get("access_token"));
|
|
93
|
+
|
|
94
|
+
if (200 != res.status || !got.has_value() || got.value().empty()) {
|
|
95
|
+
throw SekretoError("sekreto: gcp: no token and metadata server did not answer");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
renewat_ = renewtime(res.body.get("expires_in"));
|
|
99
|
+
|
|
100
|
+
return got.value();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
std::string project_;
|
|
104
|
+
std::string token_;
|
|
105
|
+
std::string addr_;
|
|
106
|
+
std::string metadataaddr_;
|
|
107
|
+
|
|
108
|
+
std::optional<std::string> livetoken_;
|
|
109
|
+
double renewat_ = NEVER;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
} // namespace
|
|
113
|
+
|
|
114
|
+
Definition gcpsecrets() {
|
|
115
|
+
return providerplugin("gcpsecrets", [](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
116
|
+
return std::make_shared<GcpsecretsProvider>(spec.project, spec.token, spec.addr,
|
|
117
|
+
spec.metadataaddr);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
} // namespace sekreto
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/plugins/Gcpsecrets.hpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// GCP Secret Manager.
|
|
5
|
+
//
|
|
6
|
+
// A PLUGIN, not a built-in: this kind opens a socket, signs a request or
|
|
7
|
+
// spawns a process, so a chain that does not name it links none of that.
|
|
8
|
+
// The calling project includes this header and passes what it declares to
|
|
9
|
+
// the Sekreto constructor (docs/design/plugin-providers.md).
|
|
10
|
+
|
|
11
|
+
#ifndef SEKRETO_PLUGINS_GCPSECRETS_HPP
|
|
12
|
+
#define SEKRETO_PLUGINS_GCPSECRETS_HPP
|
|
13
|
+
|
|
14
|
+
#include "../sekreto/Provider.hpp"
|
|
15
|
+
|
|
16
|
+
namespace sekreto {
|
|
17
|
+
|
|
18
|
+
/// The `gcpsecrets` provider kind, as a voxgig/plugin definition.
|
|
19
|
+
Definition gcpsecrets();
|
|
20
|
+
|
|
21
|
+
} // namespace sekreto
|
|
22
|
+
|
|
23
|
+
#endif
|