@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,125 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (c/plugins/secretspec.c)
|
|
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
|
+
/* SecretSpec, through its CLI.
|
|
5
|
+
*
|
|
6
|
+
* A plugin because it spawns a child. `proc.c` is the only object in the
|
|
7
|
+
* library that forks, and only this kind and `boru` pull it into a link.
|
|
8
|
+
*
|
|
9
|
+
* A port of typescript/plugins/secretspec.ts, which is canonical.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#define _POSIX_C_SOURCE 200809L
|
|
13
|
+
|
|
14
|
+
#include <stdlib.h>
|
|
15
|
+
#include <string.h>
|
|
16
|
+
|
|
17
|
+
#include "support.h"
|
|
18
|
+
|
|
19
|
+
typedef struct {
|
|
20
|
+
sek_pool *pool;
|
|
21
|
+
const char *command;
|
|
22
|
+
const char *file;
|
|
23
|
+
const char *profile;
|
|
24
|
+
const char *backend;
|
|
25
|
+
const char *reason;
|
|
26
|
+
const char *prefix;
|
|
27
|
+
char *described;
|
|
28
|
+
} secretspecdata;
|
|
29
|
+
|
|
30
|
+
/* Does this SecretSpec failure mean "no such secret" rather than "I could
|
|
31
|
+
* not answer"?
|
|
32
|
+
*
|
|
33
|
+
* MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
|
|
34
|
+
* `Provider backend 'keyring' not found`, which is a store that could not
|
|
35
|
+
* answer at all - and reading that as a miss is the worst failure this
|
|
36
|
+
* library has, because the chain then falls through to a weaker store
|
|
37
|
+
* without saying so. The key is required to appear, so the two cannot be
|
|
38
|
+
* confused. */
|
|
39
|
+
static int secretspecmiss(sek_pool *pool, const char *why, const char *key) {
|
|
40
|
+
return sek_contains(why, sek_fmt(pool, "Secret '%s' not found", key));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static sek_err secretspec_lookup(sek_provider *self, const char *name, char **out) {
|
|
44
|
+
secretspecdata *data = (secretspecdata *)self->data;
|
|
45
|
+
sek_pool *pool = data->pool;
|
|
46
|
+
char *key = NULL;
|
|
47
|
+
sek_err err = sek_envkey(pool, name, data->prefix, &key);
|
|
48
|
+
char *argv[12];
|
|
49
|
+
size_t at = 0;
|
|
50
|
+
sek_ran ran;
|
|
51
|
+
size_t len;
|
|
52
|
+
|
|
53
|
+
*out = NULL;
|
|
54
|
+
|
|
55
|
+
if (NULL != err) {
|
|
56
|
+
return err;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* The order is exact: --file comes BEFORE the subcommand, and --reason
|
|
60
|
+
* is always sent, because SecretSpec audits every read and refuses
|
|
61
|
+
* without one. */
|
|
62
|
+
argv[at++] = (char *)data->command;
|
|
63
|
+
if (!sek_empty(data->file)) {
|
|
64
|
+
argv[at++] = (char *)"--file";
|
|
65
|
+
argv[at++] = (char *)data->file;
|
|
66
|
+
}
|
|
67
|
+
argv[at++] = (char *)"get";
|
|
68
|
+
argv[at++] = key;
|
|
69
|
+
if (!sek_empty(data->backend)) {
|
|
70
|
+
argv[at++] = (char *)"--provider";
|
|
71
|
+
argv[at++] = (char *)data->backend;
|
|
72
|
+
}
|
|
73
|
+
if (!sek_empty(data->profile)) {
|
|
74
|
+
argv[at++] = (char *)"--profile";
|
|
75
|
+
argv[at++] = (char *)data->profile;
|
|
76
|
+
}
|
|
77
|
+
argv[at++] = (char *)"--reason";
|
|
78
|
+
argv[at++] = (char *)sek_first(data->reason, "sekreto");
|
|
79
|
+
argv[at] = NULL;
|
|
80
|
+
|
|
81
|
+
err = sek_runcmd(pool, argv, data->command, NULL, NULL, &ran);
|
|
82
|
+
if (NULL != err) {
|
|
83
|
+
return err;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (0 == ran.status) {
|
|
87
|
+
len = strlen(ran.out);
|
|
88
|
+
*out = 1 <= len && '\n' == ran.out[len - 1] ? sek_strndup(pool, ran.out, len - 1) : ran.out;
|
|
89
|
+
return NULL;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (secretspecmiss(pool, ran.why, key)) {
|
|
93
|
+
return NULL;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return sek_fmt(pool, "sekreto: secretspec error: %s",
|
|
97
|
+
sek_empty(ran.why) ? sek_fmt(pool, "exit %d", ran.status) : ran.why);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static const char *secretspec_describe(sek_provider *self) {
|
|
101
|
+
return ((secretspecdata *)self->data)->described;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ---- the definition ------------------------------------------------ */
|
|
105
|
+
|
|
106
|
+
static sek_err secretspec_make(sek_pool *pool, const sek_spec *spec, sek_provider **out) {
|
|
107
|
+
secretspecdata *data = (secretspecdata *)sek_alloc(pool, sizeof(secretspecdata));
|
|
108
|
+
data->pool = pool;
|
|
109
|
+
data->command = sek_own(pool, sek_empty(spec->command) ? "secretspec" : spec->command);
|
|
110
|
+
data->file = sek_own(pool, spec->file);
|
|
111
|
+
data->profile = sek_own(pool, spec->profile);
|
|
112
|
+
data->backend = sek_own(pool, spec->backend);
|
|
113
|
+
data->reason = sek_own(pool, spec->reason);
|
|
114
|
+
data->prefix = sek_own(pool, spec->prefix);
|
|
115
|
+
data->described = sek_empty(spec->backend) ? sek_strdup(pool, "secretspec")
|
|
116
|
+
: sek_fmt(pool, "secretspec:%s", spec->backend);
|
|
117
|
+
*out = sek_provider_new(pool, secretspec_lookup, secretspec_describe, data);
|
|
118
|
+
return NULL;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static sek_providerkind SECRETSPEC_KIND;
|
|
122
|
+
|
|
123
|
+
Definition *sek_plugin_secretspec(void) {
|
|
124
|
+
return sek_providerplugin(&SECRETSPEC_KIND, "secretspec", secretspec_make);
|
|
125
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (c/plugins/sekretoplugins.h)
|
|
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
|
+
/* The ten provider kinds that are NOT built in, each a voxgig/plugin
|
|
5
|
+
* definition, plus the transport and the SigV4 signing that come with
|
|
6
|
+
* them.
|
|
7
|
+
*
|
|
8
|
+
* What makes a kind a plugin is that it needs more of the platform than a
|
|
9
|
+
* local file: a socket, a signature or a child process. A chain of the
|
|
10
|
+
* four built-in kinds links none of this, which is the whole point of the
|
|
11
|
+
* split (docs/design/plugin-providers.md).
|
|
12
|
+
*
|
|
13
|
+
* LINKING IS THE BOUNDARY, AND A HEADER IS NOT LINKING. Declaring all ten
|
|
14
|
+
* here costs a consumer nothing: what a binary carries is the objects its
|
|
15
|
+
* link line names. A lean consumer links `plugins/hashicorp.o` and the
|
|
16
|
+
* transport it needs, hands `sek_plugin_hashicorp()` to sek_options, and
|
|
17
|
+
* never has AWS request signing, seven other vault clients or the child
|
|
18
|
+
* process launcher in its binary. `sek_allplugins` is the opposite trade
|
|
19
|
+
* and the honest one: it names all ten, so an object referencing it pulls
|
|
20
|
+
* every plugin in the library.
|
|
21
|
+
*
|
|
22
|
+
* Definition *chain[] = {sek_plugin_hashicorp()};
|
|
23
|
+
* sek_options opts = {0};
|
|
24
|
+
* opts.plugins = chain;
|
|
25
|
+
* opts.plugincount = 1;
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
#ifndef VOXGIG_SEKRETO_PLUGINS_H
|
|
29
|
+
#define VOXGIG_SEKRETO_PLUGINS_H
|
|
30
|
+
|
|
31
|
+
#include <stddef.h>
|
|
32
|
+
|
|
33
|
+
#include "sekreto.h"
|
|
34
|
+
|
|
35
|
+
/* ---- the kinds ----------------------------------------------------- */
|
|
36
|
+
|
|
37
|
+
/* HashiCorp Vault over its HTTP API: KV v1 and v2, a configured token or
|
|
38
|
+
* a login (kubernetes, approle, jwt), and Vault Enterprise namespaces. */
|
|
39
|
+
Definition *sek_plugin_hashicorp(void);
|
|
40
|
+
|
|
41
|
+
/* A boru vault: the `boru` CLI, or the same vault over its wire protocol
|
|
42
|
+
* when an address and a capability token are configured. */
|
|
43
|
+
Definition *sek_plugin_boru(void);
|
|
44
|
+
|
|
45
|
+
/* AWS Secrets Manager and SSM Parameter Store. Two kinds, one file: they
|
|
46
|
+
* share the credential resolution and the SigV4 signing. */
|
|
47
|
+
Definition *sek_plugin_awssecrets(void);
|
|
48
|
+
Definition *sek_plugin_awsparams(void);
|
|
49
|
+
|
|
50
|
+
/* Google Secret Manager, with metadata-server login. */
|
|
51
|
+
Definition *sek_plugin_gcpsecrets(void);
|
|
52
|
+
|
|
53
|
+
/* Azure Key Vault, with client-credential or IMDS login. */
|
|
54
|
+
Definition *sek_plugin_azuresecrets(void);
|
|
55
|
+
|
|
56
|
+
/* 1Password Connect. */
|
|
57
|
+
Definition *sek_plugin_onepassword(void);
|
|
58
|
+
|
|
59
|
+
/* Doppler. */
|
|
60
|
+
Definition *sek_plugin_doppler(void);
|
|
61
|
+
|
|
62
|
+
/* Infisical, with universal-auth login. */
|
|
63
|
+
Definition *sek_plugin_infisical(void);
|
|
64
|
+
|
|
65
|
+
/* SecretSpec, through its CLI. */
|
|
66
|
+
Definition *sek_plugin_secretspec(void);
|
|
67
|
+
|
|
68
|
+
/* ---- the full set -------------------------------------------------- */
|
|
69
|
+
|
|
70
|
+
/* Every plugin this library ships, in one call. Answers the count and
|
|
71
|
+
* points `*out` at a static array of the ten definitions.
|
|
72
|
+
*
|
|
73
|
+
* IT IS ALSO THE THING TO AVOID IF SIZE MATTERS. Naming this pulls every
|
|
74
|
+
* plugin object into the link - request signing and eight HTTP clients
|
|
75
|
+
* included - which is the cost the split exists to remove. It exists for
|
|
76
|
+
* the callers that genuinely want all ten: the CLI, the conformance
|
|
77
|
+
* suite, an app whose chain is decided at run time. */
|
|
78
|
+
size_t sek_allplugins(Definition ***out);
|
|
79
|
+
|
|
80
|
+
/* ---- transport ----------------------------------------------------- */
|
|
81
|
+
|
|
82
|
+
/* One HTTP round-trip, published because a C consumer has no HTTP client
|
|
83
|
+
* of its own to reach the API it just fetched a token for - and the CLI
|
|
84
|
+
* every port ships is exactly such a consumer. Every other port calls its
|
|
85
|
+
* platform's client here.
|
|
86
|
+
*
|
|
87
|
+
* It is on the PLUGIN side because it is what a plugin is: a socket and a
|
|
88
|
+
* TLS handshake. A chain of built-ins links none of it.
|
|
89
|
+
*
|
|
90
|
+
* https is verified: chain, hostname, SNI, and `SEKRETO_CA_BUNDLE` for
|
|
91
|
+
* extra roots. A non-2xx status is returned rather than raised. */
|
|
92
|
+
sek_err sek_fetch(sek_pool *pool, const char *method, const char *url, const sek_map *headers,
|
|
93
|
+
const char *body, int *status, char **out);
|
|
94
|
+
|
|
95
|
+
/* RFC 3986 escaping, stricter than any stdlib encoder. With the transport
|
|
96
|
+
* rather than with the signer: four stores that hash nothing build their
|
|
97
|
+
* URLs with it. */
|
|
98
|
+
char *sek_uriescape(sek_pool *pool, const char *text);
|
|
99
|
+
|
|
100
|
+
/* ---- sigv4 --------------------------------------------------------- */
|
|
101
|
+
|
|
102
|
+
/* One request to sign. `datetime` is `YYYYMMDDTHHMMSSZ` and it is the
|
|
103
|
+
* caller's, so signing is a pure function of its input - which is what
|
|
104
|
+
* lets the shared spec carry known-answer cases. */
|
|
105
|
+
typedef struct {
|
|
106
|
+
const char *method;
|
|
107
|
+
const char *url;
|
|
108
|
+
const char *service;
|
|
109
|
+
const char *region;
|
|
110
|
+
const char *keyid;
|
|
111
|
+
const char *secret;
|
|
112
|
+
const char *datetime;
|
|
113
|
+
sek_map *headers;
|
|
114
|
+
const char *body;
|
|
115
|
+
const char *session;
|
|
116
|
+
} sek_signing;
|
|
117
|
+
|
|
118
|
+
/* The headers to attach: authorization, x-amz-date, and
|
|
119
|
+
* x-amz-security-token when a session was given, in that order.
|
|
120
|
+
*
|
|
121
|
+
* It moved here with the aws plugin, and the core of no port imports a
|
|
122
|
+
* hash function any more. */
|
|
123
|
+
sek_map *sek_sigv4(sek_pool *pool, const sek_signing *input);
|
|
124
|
+
|
|
125
|
+
#endif /* VOXGIG_SEKRETO_PLUGINS_H */
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (c/plugins/sha256.c)
|
|
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, by hand.
|
|
5
|
+
*
|
|
6
|
+
* This port links libcrypto, and these are still written out. That is the
|
|
7
|
+
* rule and not an oversight: the dependency exception in AGENTS.md covers
|
|
8
|
+
* cryptographic TRANSPORT, and nothing else. Rust is the worked
|
|
9
|
+
* precedent - `ring` sits inside rustls's dependency closure and
|
|
10
|
+
* rust/src/crypto.rs carries both primitives anyway. Calling libcrypto's
|
|
11
|
+
* EVP_Digest for a SigV4 signature would quietly widen the exception from
|
|
12
|
+
* "we do not hand-roll TLS" to "we use whatever the TLS library ships",
|
|
13
|
+
* which is a different and much larger claim.
|
|
14
|
+
*
|
|
15
|
+
* THIS OBJECT EXISTS SO THAT ONLY THE SIGNER PULLS IT. The aws plugin is
|
|
16
|
+
* the only thing in the library that hashes anything, and a static
|
|
17
|
+
* archive is linked an object at a time - so keeping the digest here, and
|
|
18
|
+
* the base64 and percent encoders in `encode.c` where four non-signing
|
|
19
|
+
* stores can reach them, is what makes "a plugin that signs nothing does
|
|
20
|
+
* not link SHA-256" true rather than merely intended. `make check-core`
|
|
21
|
+
* measures it.
|
|
22
|
+
*
|
|
23
|
+
* Correctness is not asserted, it is proved: SigV4 is a chain of these
|
|
24
|
+
* primitives, so one wrong bit anywhere fails the five known-answer
|
|
25
|
+
* vectors in spec/sekreto.json - including AWS's own published
|
|
26
|
+
* `get-vanilla`.
|
|
27
|
+
*
|
|
28
|
+
* The digest is STREAMING (init/update/final) rather than one-shot,
|
|
29
|
+
* because HMAC hashes the key pad followed by the message and the message
|
|
30
|
+
* here is a whole request body. A one-shot digest would need those
|
|
31
|
+
* concatenated into one buffer, which for the 8 MiB body cap means an 8
|
|
32
|
+
* MiB allocation per signature - on the stack, if it were an alloca.
|
|
33
|
+
*
|
|
34
|
+
* A port of rust/src/crypto.rs.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#define _POSIX_C_SOURCE 200809L
|
|
38
|
+
|
|
39
|
+
#include <stdio.h>
|
|
40
|
+
#include <string.h>
|
|
41
|
+
|
|
42
|
+
#include "support.h"
|
|
43
|
+
|
|
44
|
+
/* ---- SHA-256, FIPS 180-4 ------------------------------------------- */
|
|
45
|
+
|
|
46
|
+
static const unsigned int K[64] = {
|
|
47
|
+
0x428a2f98u, 0x71374491u, 0xb5c0fbcfu, 0xe9b5dba5u, 0x3956c25bu, 0x59f111f1u, 0x923f82a4u,
|
|
48
|
+
0xab1c5ed5u, 0xd807aa98u, 0x12835b01u, 0x243185beu, 0x550c7dc3u, 0x72be5d74u, 0x80deb1feu,
|
|
49
|
+
0x9bdc06a7u, 0xc19bf174u, 0xe49b69c1u, 0xefbe4786u, 0x0fc19dc6u, 0x240ca1ccu, 0x2de92c6fu,
|
|
50
|
+
0x4a7484aau, 0x5cb0a9dcu, 0x76f988dau, 0x983e5152u, 0xa831c66du, 0xb00327c8u, 0xbf597fc7u,
|
|
51
|
+
0xc6e00bf3u, 0xd5a79147u, 0x06ca6351u, 0x14292967u, 0x27b70a85u, 0x2e1b2138u, 0x4d2c6dfcu,
|
|
52
|
+
0x53380d13u, 0x650a7354u, 0x766a0abbu, 0x81c2c92eu, 0x92722c85u, 0xa2bfe8a1u, 0xa81a664bu,
|
|
53
|
+
0xc24b8b70u, 0xc76c51a3u, 0xd192e819u, 0xd6990624u, 0xf40e3585u, 0x106aa070u, 0x19a4c116u,
|
|
54
|
+
0x1e376c08u, 0x2748774cu, 0x34b0bcb5u, 0x391c0cb3u, 0x4ed8aa4au, 0x5b9cca4fu, 0x682e6ff3u,
|
|
55
|
+
0x748f82eeu, 0x78a5636fu, 0x84c87814u, 0x8cc70208u, 0x90befffau, 0xa4506cebu, 0xbef9a3f7u,
|
|
56
|
+
0xc67178f2u};
|
|
57
|
+
|
|
58
|
+
typedef struct {
|
|
59
|
+
unsigned int state[8];
|
|
60
|
+
unsigned char block[64];
|
|
61
|
+
size_t held;
|
|
62
|
+
unsigned long long bits;
|
|
63
|
+
} sha256ctx;
|
|
64
|
+
|
|
65
|
+
static unsigned int ror(unsigned int val, unsigned int by) {
|
|
66
|
+
return (val >> by) | (val << (32 - by));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static void compress(unsigned int state[8], const unsigned char block[64]) {
|
|
70
|
+
unsigned int w[64];
|
|
71
|
+
unsigned int a, b, c, d, e, f, g, h;
|
|
72
|
+
int step;
|
|
73
|
+
|
|
74
|
+
for (step = 0; step < 16; step++) {
|
|
75
|
+
w[step] = ((unsigned int)block[step * 4] << 24) | ((unsigned int)block[step * 4 + 1] << 16) |
|
|
76
|
+
((unsigned int)block[step * 4 + 2] << 8) | (unsigned int)block[step * 4 + 3];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
for (step = 16; step < 64; step++) {
|
|
80
|
+
unsigned int s0 = ror(w[step - 15], 7) ^ ror(w[step - 15], 18) ^ (w[step - 15] >> 3);
|
|
81
|
+
unsigned int s1 = ror(w[step - 2], 17) ^ ror(w[step - 2], 19) ^ (w[step - 2] >> 10);
|
|
82
|
+
w[step] = w[step - 16] + s0 + w[step - 7] + s1;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
a = state[0];
|
|
86
|
+
b = state[1];
|
|
87
|
+
c = state[2];
|
|
88
|
+
d = state[3];
|
|
89
|
+
e = state[4];
|
|
90
|
+
f = state[5];
|
|
91
|
+
g = state[6];
|
|
92
|
+
h = state[7];
|
|
93
|
+
|
|
94
|
+
for (step = 0; step < 64; step++) {
|
|
95
|
+
unsigned int big1 = ror(e, 6) ^ ror(e, 11) ^ ror(e, 25);
|
|
96
|
+
unsigned int ch = (e & f) ^ ((~e) & g);
|
|
97
|
+
unsigned int temp1 = h + big1 + ch + K[step] + w[step];
|
|
98
|
+
unsigned int big0 = ror(a, 2) ^ ror(a, 13) ^ ror(a, 22);
|
|
99
|
+
unsigned int maj = (a & b) ^ (a & c) ^ (b & c);
|
|
100
|
+
unsigned int temp2 = big0 + maj;
|
|
101
|
+
|
|
102
|
+
h = g;
|
|
103
|
+
g = f;
|
|
104
|
+
f = e;
|
|
105
|
+
e = d + temp1;
|
|
106
|
+
d = c;
|
|
107
|
+
c = b;
|
|
108
|
+
b = a;
|
|
109
|
+
a = temp1 + temp2;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
state[0] += a;
|
|
113
|
+
state[1] += b;
|
|
114
|
+
state[2] += c;
|
|
115
|
+
state[3] += d;
|
|
116
|
+
state[4] += e;
|
|
117
|
+
state[5] += f;
|
|
118
|
+
state[6] += g;
|
|
119
|
+
state[7] += h;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
static void sha256init(sha256ctx *ctx) {
|
|
123
|
+
ctx->state[0] = 0x6a09e667u;
|
|
124
|
+
ctx->state[1] = 0xbb67ae85u;
|
|
125
|
+
ctx->state[2] = 0x3c6ef372u;
|
|
126
|
+
ctx->state[3] = 0xa54ff53au;
|
|
127
|
+
ctx->state[4] = 0x510e527fu;
|
|
128
|
+
ctx->state[5] = 0x9b05688cu;
|
|
129
|
+
ctx->state[6] = 0x1f83d9abu;
|
|
130
|
+
ctx->state[7] = 0x5be0cd19u;
|
|
131
|
+
ctx->held = 0;
|
|
132
|
+
ctx->bits = 0;
|
|
133
|
+
memset(ctx->block, 0, sizeof(ctx->block));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
static void sha256update(sha256ctx *ctx, const unsigned char *data, size_t len) {
|
|
137
|
+
size_t at = 0;
|
|
138
|
+
|
|
139
|
+
ctx->bits += (unsigned long long)len * 8ull;
|
|
140
|
+
|
|
141
|
+
if (0 < ctx->held) {
|
|
142
|
+
size_t want = 64 - ctx->held;
|
|
143
|
+
size_t take = want < len ? want : len;
|
|
144
|
+
|
|
145
|
+
memcpy(ctx->block + ctx->held, data, take);
|
|
146
|
+
ctx->held += take;
|
|
147
|
+
at = take;
|
|
148
|
+
|
|
149
|
+
if (64 == ctx->held) {
|
|
150
|
+
compress(ctx->state, ctx->block);
|
|
151
|
+
ctx->held = 0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
while (len - at >= 64) {
|
|
156
|
+
compress(ctx->state, data + at);
|
|
157
|
+
at += 64;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (at < len) {
|
|
161
|
+
memcpy(ctx->block, data + at, len - at);
|
|
162
|
+
ctx->held = len - at;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
static void sha256final(sha256ctx *ctx, unsigned char out[SEK_SHA256_LEN]) {
|
|
167
|
+
unsigned long long bits = ctx->bits;
|
|
168
|
+
unsigned char tail[64];
|
|
169
|
+
size_t rest = ctx->held;
|
|
170
|
+
int step;
|
|
171
|
+
|
|
172
|
+
memset(tail, 0, sizeof(tail));
|
|
173
|
+
memcpy(tail, ctx->block, rest);
|
|
174
|
+
tail[rest] = 0x80;
|
|
175
|
+
|
|
176
|
+
/* The 64-bit length must fit in the final block; when it does not, the
|
|
177
|
+
* padded block goes out on its own first. */
|
|
178
|
+
if (56 < rest + 1) {
|
|
179
|
+
compress(ctx->state, tail);
|
|
180
|
+
memset(tail, 0, sizeof(tail));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
for (step = 0; step < 8; step++) {
|
|
184
|
+
tail[63 - step] = (unsigned char)((bits >> (8 * step)) & 0xff);
|
|
185
|
+
}
|
|
186
|
+
compress(ctx->state, tail);
|
|
187
|
+
|
|
188
|
+
for (step = 0; step < 8; step++) {
|
|
189
|
+
out[step * 4] = (unsigned char)((ctx->state[step] >> 24) & 0xff);
|
|
190
|
+
out[step * 4 + 1] = (unsigned char)((ctx->state[step] >> 16) & 0xff);
|
|
191
|
+
out[step * 4 + 2] = (unsigned char)((ctx->state[step] >> 8) & 0xff);
|
|
192
|
+
out[step * 4 + 3] = (unsigned char)(ctx->state[step] & 0xff);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
void sek_sha256(const unsigned char *data, size_t len, unsigned char out[SEK_SHA256_LEN]) {
|
|
197
|
+
sha256ctx ctx;
|
|
198
|
+
|
|
199
|
+
sha256init(&ctx);
|
|
200
|
+
sha256update(&ctx, data, len);
|
|
201
|
+
sha256final(&ctx, out);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* ---- HMAC-SHA256, RFC 2104 ----------------------------------------- */
|
|
205
|
+
|
|
206
|
+
/* The argument order is (key, data), which is this repository's
|
|
207
|
+
* convention. PHP's and Perl's stdlib take (data, key); a port that
|
|
208
|
+
* copies one of those without fixing the order at its wrapper produces a
|
|
209
|
+
* signature that is wrong in a way nothing but the vectors catches. */
|
|
210
|
+
void sek_hmac_sha256(const unsigned char *key, size_t keylen, const unsigned char *data,
|
|
211
|
+
size_t datalen, unsigned char out[SEK_SHA256_LEN]) {
|
|
212
|
+
unsigned char shortened[SEK_SHA256_LEN];
|
|
213
|
+
unsigned char pad[64];
|
|
214
|
+
unsigned char inner[SEK_SHA256_LEN];
|
|
215
|
+
sha256ctx ctx;
|
|
216
|
+
size_t index;
|
|
217
|
+
|
|
218
|
+
if (64 < keylen) {
|
|
219
|
+
sek_sha256(key, keylen, shortened);
|
|
220
|
+
key = shortened;
|
|
221
|
+
keylen = SEK_SHA256_LEN;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
memset(pad, 0, sizeof(pad));
|
|
225
|
+
memcpy(pad, key, keylen);
|
|
226
|
+
for (index = 0; index < 64; index++) {
|
|
227
|
+
pad[index] = (unsigned char)(pad[index] ^ 0x36);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
sha256init(&ctx);
|
|
231
|
+
sha256update(&ctx, pad, 64);
|
|
232
|
+
sha256update(&ctx, data, datalen);
|
|
233
|
+
sha256final(&ctx, inner);
|
|
234
|
+
|
|
235
|
+
for (index = 0; index < 64; index++) {
|
|
236
|
+
/* Back out the ipad and apply the opad: 0x36 ^ 0x5c flips exactly the
|
|
237
|
+
* bits that differ between them. */
|
|
238
|
+
pad[index] = (unsigned char)(pad[index] ^ 0x36 ^ 0x5c);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
sha256init(&ctx);
|
|
242
|
+
sha256update(&ctx, pad, 64);
|
|
243
|
+
sha256update(&ctx, inner, SEK_SHA256_LEN);
|
|
244
|
+
sha256final(&ctx, out);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* ---- hex ----------------------------------------------------------- */
|
|
248
|
+
|
|
249
|
+
char *sek_hex(sek_pool *pool, const unsigned char *bytes, size_t len) {
|
|
250
|
+
static const char digits[] = "0123456789abcdef";
|
|
251
|
+
char *out = (char *)sek_alloc(pool, len * 2 + 1);
|
|
252
|
+
size_t index;
|
|
253
|
+
|
|
254
|
+
for (index = 0; index < len; index++) {
|
|
255
|
+
out[index * 2] = digits[(bytes[index] >> 4) & 0x0f];
|
|
256
|
+
out[index * 2 + 1] = digits[bytes[index] & 0x0f];
|
|
257
|
+
}
|
|
258
|
+
out[len * 2] = '\0';
|
|
259
|
+
|
|
260
|
+
return out;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
char *sek_sha256hex(sek_pool *pool, const char *text) {
|
|
264
|
+
unsigned char digest[SEK_SHA256_LEN];
|
|
265
|
+
const char *use = NULL == text ? "" : text;
|
|
266
|
+
|
|
267
|
+
sek_sha256((const unsigned char *)use, strlen(use), digest);
|
|
268
|
+
|
|
269
|
+
return sek_hex(pool, digest, SEK_SHA256_LEN);
|
|
270
|
+
}
|