diff --git a/.git-go-patch b/.git-go-patch index 74a8f15c00..c934c02af9 100644 --- a/.git-go-patch +++ b/.git-go-patch @@ -1,5 +1,5 @@ { - "MinimumToolVersion": "v1.0.1", + "MinimumToolVersion": "v1.1.0", "SubmoduleDir": "go", "PatchesDir": "patches", "StatusFileDir": "eng/artifacts/go-patch", diff --git a/.github/workflows/patch-apply.yml b/.github/workflows/patch-apply.yml index dd04718d7d..b648418a9f 100644 --- a/.github/workflows/patch-apply.yml +++ b/.github/workflows/patch-apply.yml @@ -24,6 +24,10 @@ concurrency: group: "${{ github.ref }}-${{ github.workflow}}" cancel-in-progress: ${{ github.event_name == 'pull_request' }} +env: + # Use the CI stage 0 environment. + MS_USE_CI_STAGE0: 1 + jobs: check_patches: name: Patches Apply Cleanly diff --git a/.github/workflows/patch-build.yml b/.github/workflows/patch-build.yml index df022fd23c..27db08cbcc 100644 --- a/.github/workflows/patch-build.yml +++ b/.github/workflows/patch-build.yml @@ -15,6 +15,10 @@ concurrency: group: "${{ github.ref }}-${{ github.workflow}}" cancel-in-progress: ${{ github.event_name == 'pull_request' }} +env: + # Use the CI stage 0 environment. + MS_USE_CI_STAGE0: 1 + jobs: list_patches: name: Generate patch build matrix diff --git a/eng/_util/cmd/submodule-refresh/submodule-refresh.go b/eng/_util/cmd/submodule-refresh/submodule-refresh.go index a4c62bbb94..93fcfd469b 100644 --- a/eng/_util/cmd/submodule-refresh/submodule-refresh.go +++ b/eng/_util/cmd/submodule-refresh/submodule-refresh.go @@ -108,9 +108,47 @@ func refresh(rootDir string) error { config.PatchesDir = tmpDirRelative } - if err := patch.Apply(config, mode); err != nil { + // Check if any patches have auto-vendor commands. If so, apply patches + // one at a time so we can run "go mod vendor" between patches. + _, goDir := config.FullProjectRoots() + autoVendorMap, err := patch.ScanAutoVendorPatches(config) + if err != nil { return err } + + // Collect all auto-vendor module directories so we can run a final vendor + // pass after all patches are applied. + var allVendorDirs []string + + if len(autoVendorMap) > 0 { + amend := mode == patch.ApplyModeCommits + if err := patch.ApplyIndividually(config, mode, func(patchPath string) error { + if dirs, ok := autoVendorMap[patchPath]; ok { + allVendorDirs = append(allVendorDirs, dirs...) + return patch.RunGoModVendor(goDir, dirs, amend) + } + return nil + }); err != nil { + return err + } + } else { + if err := patch.Apply(config, mode); err != nil { + return err + } + } + + // After all patches are applied, run vendor one final time. Later patches + // may add new imports that weren't present when the auto-vendor patch was + // applied (e.g. patch 0002 imports cryptobackend/sha1 which wasn't imported + // at patch 0001 time). This final pass ensures vendor/ has everything. + // Don't amend — leave the changes in the working tree so the build can use them. + if len(allVendorDirs) > 0 { + log.Println("Running final vendor pass after all patches are applied...") + if err := patch.RunGoModVendor(goDir, allVendorDirs, false); err != nil { + return err + } + } + return nil } diff --git a/eng/_util/go.mod b/eng/_util/go.mod index 2f9a7e2f8e..48f13c8c87 100644 --- a/eng/_util/go.mod +++ b/eng/_util/go.mod @@ -8,7 +8,7 @@ go 1.25.0 require ( github.com/golang-jwt/jwt/v5 v5.3.1 - github.com/microsoft/go-infra v0.0.14 + github.com/microsoft/go-infra v0.0.15-0.20260612144113-838dee72b447 github.com/microsoft/go-infra/goinstallscript v1.2.0 golang.org/x/net v0.56.0 ) @@ -27,7 +27,7 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/spf13/cast v1.7.0 // indirect - go.yaml.in/yaml/v4 v4.0.0-rc.4 // indirect + go.yaml.in/yaml/v4 v4.0.0-rc.5 // indirect golang.org/x/crypto v0.53.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/text v0.38.0 // indirect diff --git a/eng/_util/go.sum b/eng/_util/go.sum index a7831731a7..eefa9256e6 100644 --- a/eng/_util/go.sum +++ b/eng/_util/go.sum @@ -31,8 +31,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= -github.com/microsoft/go-infra v0.0.14 h1:JfMAEtUWk2sAKNyYirdph8BoKrjCKlt/vMloBy70rtg= -github.com/microsoft/go-infra v0.0.14/go.mod h1:+NF5K79FJNpFKRPX7J9g9tZ2NFZa9dM751xWPpF3IgY= +github.com/microsoft/go-infra v0.0.15-0.20260612140757-70acb19cde0a h1:jS173C4EA1H8R8Sxu0fOUM8bDKC1n8mFWPVz++Ib0KQ= +github.com/microsoft/go-infra v0.0.15-0.20260612140757-70acb19cde0a/go.mod h1:fbkBK1WeHaeKy5flQsbFod3IdNsTeMQGryHAkdq37Ks= +github.com/microsoft/go-infra v0.0.15-0.20260612144113-838dee72b447 h1:42fGrc2dWT9wcPwXONgP6qPA0t0zNeOfC3sBZhmTJEI= +github.com/microsoft/go-infra v0.0.15-0.20260612144113-838dee72b447/go.mod h1:fbkBK1WeHaeKy5flQsbFod3IdNsTeMQGryHAkdq37Ks= github.com/microsoft/go-infra/goinstallscript v1.2.0 h1:ArYnZHsmv0jnpeDZdFACBUxSmhmYl+Vof8sfk19aYZI= github.com/microsoft/go-infra/goinstallscript v1.2.0/go.mod h1:SFsdKAEHdmGsGoh8FkksVaxoQ3rnnJ/TBqN09Ml/0Cw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -49,8 +51,8 @@ github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -go.yaml.in/yaml/v4 v4.0.0-rc.4 h1:UP4+v6fFrBIb1l934bDl//mmnoIZEDK0idg1+AIvX5U= -go.yaml.in/yaml/v4 v4.0.0-rc.4/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= +go.yaml.in/yaml/v4 v4.0.0-rc.5 h1:JVliQq9EGOYaTgMi+k8BhUJyqcGk4ZqeuiN1Cirba9c= +go.yaml.in/yaml/v4 v4.0.0-rc.5/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= @@ -59,8 +61,8 @@ golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= -golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= -golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/eng/_util/internal/patchcheck/vendoronly.go b/eng/_util/internal/patchcheck/vendoronly.go index d8a587de06..78bbf24467 100644 --- a/eng/_util/internal/patchcheck/vendoronly.go +++ b/eng/_util/internal/patchcheck/vendoronly.go @@ -6,8 +6,11 @@ package patchcheck import ( "fmt" + "os" "path/filepath" "strings" + + "github.com/microsoft/go-infra/patch" ) // vendorPatchGlob matches the vendor patch filename. @@ -28,6 +31,13 @@ var vendorOnlyPaths = []string{ "src/cmd/internal/telemetry/counter/deps_ignore.go", } +// autoVendorOmittedPaths are vendor-only paths that are expected to be absent +// from the patch when it uses auto-vendor (they are generated at apply time). +var autoVendorOmittedPaths = []string{ + "src/vendor/", + "src/cmd/vendor/", +} + // vendorSharedPaths must appear in the vendor patch, but may also appear in // non-vendor patches. var vendorSharedPaths = []string{ @@ -41,6 +51,20 @@ func appendVendorOnlyIssues(issues []*PatchIssue, patchFile string, mods []patch return nil, err } + // Detect whether the vendor patch uses auto-vendor. If it does, vendor + // directory diffs (src/vendor/, src/cmd/vendor/) are generated at apply + // time and won't appear in the patch file. + usesAutoVendor := false + if isVendorPatch { + content, err := os.ReadFile(patchFile) + if err != nil { + return nil, fmt.Errorf("reading patch file %s: %w", patchFile, err) + } + if strings.Contains(string(content), patch.AutoVendorPrefix) { + usesAutoVendor = true + } + } + for _, mod := range mods { vo := isVendorOnlyPath(mod.path) vs := isVendorSharedPath(mod.path) @@ -60,6 +84,11 @@ func appendVendorOnlyIssues(issues []*PatchIssue, patchFile string, mods []patch if isVendorPatch { for _, required := range append(vendorOnlyPaths, vendorSharedPaths...) { + // When using auto-vendor, vendor directory diffs are generated + // at apply time and won't be in the patch file. + if usesAutoVendor && matchPathList(autoVendorOmittedPaths, required) { + continue + } found := false for _, mod := range mods { if matchPathList([]string{required}, mod.path) { diff --git a/eng/pipeline/rolling-internal-validation-pipeline-unofficial.yml b/eng/pipeline/rolling-internal-validation-pipeline-unofficial.yml index d9e63ea609..34373e11b5 100644 --- a/eng/pipeline/rolling-internal-validation-pipeline-unofficial.yml +++ b/eng/pipeline/rolling-internal-validation-pipeline-unofficial.yml @@ -16,7 +16,8 @@ parameters: type: boolean default: true - name: disableTSA - displayName: '[Debug input] Disable TSA reporting. Use to try modifications in dev branches.' + displayName: '[Debug input] Disable TSA reporting. Use to try modifications in + dev branches.' type: boolean default: true trigger: none diff --git a/eng/pipeline/rolling-internal-validation-pipeline.yml b/eng/pipeline/rolling-internal-validation-pipeline.yml index cc16fe8cc0..8d056c8a73 100644 --- a/eng/pipeline/rolling-internal-validation-pipeline.yml +++ b/eng/pipeline/rolling-internal-validation-pipeline.yml @@ -16,7 +16,8 @@ parameters: type: boolean default: false - name: disableTSA - displayName: '[Debug input] Disable TSA reporting. Use to try modifications in dev branches.' + displayName: '[Debug input] Disable TSA reporting. Use to try modifications in + dev branches.' type: boolean default: false trigger: none diff --git a/patches/0001-Vendor-external-dependencies.patch b/patches/0001-Vendor-external-dependencies.patch index 792d194f6e..75e7421af0 100644 --- a/patches/0001-Vendor-external-dependencies.patch +++ b/patches/0001-Vendor-external-dependencies.patch @@ -3,829 +3,14 @@ From: bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 12:59:36 +0000 Subject: [PATCH] Vendor external dependencies -To reproduce changes in 'src/vendor', run 'go mod vendor' in 'src'. -To reproduce changes in 'src/cmd/vendor', run 'go mod vendor' in 'src/cmd'. -If 'go mod vendor' makes any changes, run 'go mod tidy'. -Use a 'go' that was recently built by the current branch to ensure stable results. ---- - src/cmd/go.mod | 2 + - src/cmd/go.sum | 4 + - .../internal/telemetry/counter/deps_ignore.go | 17 + - .../microsoft/go-infra/telemetry/LICENSE | 21 + - .../microsoft/go-infra/telemetry/README.md | 9 + - .../microsoft/go-infra/telemetry/ci.go | 97 + - .../go-infra/telemetry/config/LICENSE | 21 + - .../go-infra/telemetry/config/config.go | 11 + - .../go-infra/telemetry/config/config.json | 77 + - .../go-infra/telemetry/counter/counter.go | 71 + - .../telemetry/internal/appinsights/README.md | 12 + - .../telemetry/internal/appinsights/client.go | 200 ++ - .../internal/appinsights/inmemorychannel.go | 349 +++ - .../internal/contracts/contexttagkeys.go | 50 + - .../internal/contracts/envelope.go | 123 + - .../internal/contracts/response.go | 32 + - .../internal/appinsights/jsonserializer.go | 33 + - .../telemetry/internal/appinsights/package.go | 13 + - .../internal/appinsights/telemetrycontext.go | 44 + - .../internal/appinsights/transmitter.go | 172 ++ - .../telemetry/internal/config/config.go | 80 + - .../telemetry/internal/telemetry/proginfo.go | 46 + - .../telemetry/internal/telemetry/telemetry.go | 32 + - .../microsoft/go-infra/telemetry/telemetry.go | 168 ++ - src/cmd/vendor/modules.txt | 11 + - src/crypto/deps_ignore.go | 40 + - src/go.mod | 14 +- - src/go.sum | 6 + - src/go/build/deps_test.go | 55 +- - src/go/build/vendor_test.go | 5 + - .../microsoft/go-crypto-darwin/LICENSE | 21 + - .../microsoft/go-crypto-darwin/bbig/big.go | 31 + - .../internal/commoncrypto/commoncrypto.go | 9 + - .../internal/commoncrypto/shims.h | 72 + - .../internal/commoncrypto/syscall_nocgo.go | 15 + - .../internal/commoncrypto/zcommoncrypto.c | 47 + - .../internal/commoncrypto/zcommoncrypto.go | 50 + - .../internal/commoncrypto/zcommoncrypto.h | 69 + - .../internal/commoncrypto/zcommoncrypto.s | 76 + - .../commoncrypto/zcommoncrypto_cgo.go | 64 + - .../commoncrypto/zcommoncrypto_nocgo.go | 102 + - .../internal/cryptokit/CryptoKit_amd64.syso | Bin 0 -> 181384 bytes - .../internal/cryptokit/CryptoKit_arm64.syso | Bin 0 -> 176808 bytes - .../internal/cryptokit/cryptokit.go | 8 + - .../internal/cryptokit/cryptokit_cgo.go | 10 + - .../internal/cryptokit/shims.h | 127 + - .../internal/cryptokit/syscall_nocgo.go | 15 + - .../internal/cryptokit/xcodebuild_version.txt | 2 + - .../internal/cryptokit/zcryptokit.c | 317 +++ - .../internal/cryptokit/zcryptokit.h | 77 + - .../internal/cryptokit/zcryptokit.s | 400 +++ - .../internal/cryptokit/zcryptokit_cgo.go | 401 +++ - .../internal/cryptokit/zcryptokit_nocgo.go | 456 +++ - .../cryptokit/zcryptokit_swift_amd64.go | 307 ++ - .../cryptokit/zcryptokit_swift_arm64.go | 306 ++ - .../internal/fakecgo/abi_amd64.h | 101 + - .../internal/fakecgo/abi_arm64.h | 41 + - .../internal/fakecgo/asm_amd64.s | 41 + - .../internal/fakecgo/asm_arm64.s | 37 + - .../internal/fakecgo/callbacks.go | 95 + - .../internal/fakecgo/fakecgo.go | 16 + - .../internal/fakecgo/fakecgo.lock | 3 + - .../internal/fakecgo/generate.go | 6 + - .../internal/fakecgo/go_darwin.go | 90 + - .../internal/fakecgo/go_libinit.go | 74 + - .../internal/fakecgo/go_setenv.go | 20 + - .../internal/fakecgo/go_util.go | 40 + - .../internal/fakecgo/iscgo.go | 21 + - .../internal/fakecgo/libcgo.go | 41 + - .../internal/fakecgo/libcgo_darwin.go | 28 + - .../internal/fakecgo/setenv.go | 21 + - .../internal/fakecgo/trampolines_amd64.s | 109 + - .../internal/fakecgo/trampolines_arm64.s | 83 + - .../internal/fakecgo/zsymbols.go | 167 ++ - .../internal/fakecgo/zsymbols_darwin.go | 61 + - .../internal/fakecgo/ztrampolines_darwin.s | 21 + - .../internal/fakecgo/ztrampolines_stubs.s | 57 + - .../internal/security/security.go | 9 + - .../internal/security/shims.h | 107 + - .../internal/security/syscall_nocgo.go | 15 + - .../internal/security/zsecurity.c | 127 + - .../internal/security/zsecurity.go | 21 + - .../internal/security/zsecurity.h | 98 + - .../internal/security/zsecurity.s | 172 ++ - .../internal/security/zsecurity_cgo.go | 388 +++ - .../internal/security/zsecurity_nocgo.go | 466 +++ - .../internal/xsyscall/asm_amd64.s | 120 + - .../internal/xsyscall/asm_arm64.s | 97 + - .../internal/xsyscall/syscall_nocgo.go | 72 + - .../internal/xsyscall/syscall_nocgo_darwin.go | 10 + - .../internal/xsyscall/syscall_nocgo_others.go | 14 + - .../microsoft/go-crypto-darwin/xcrypto/aes.go | 152 + - .../microsoft/go-crypto-darwin/xcrypto/big.go | 16 + - .../xcrypto/chacha20poly1305.go | 88 + - .../go-crypto-darwin/xcrypto/cipher.go | 114 + - .../microsoft/go-crypto-darwin/xcrypto/des.go | 111 + - .../microsoft/go-crypto-darwin/xcrypto/ec.go | 39 + - .../go-crypto-darwin/xcrypto/ecdh.go | 146 + - .../go-crypto-darwin/xcrypto/ecdsa.go | 154 + - .../go-crypto-darwin/xcrypto/ed25519.go | 124 + - .../microsoft/go-crypto-darwin/xcrypto/evp.go | 339 +++ - .../microsoft/go-crypto-darwin/xcrypto/gcm.go | 218 ++ - .../go-crypto-darwin/xcrypto/hash.go | 335 +++ - .../go-crypto-darwin/xcrypto/hkdf.go | 103 + - .../go-crypto-darwin/xcrypto/hmac.go | 106 + - .../go-crypto-darwin/xcrypto/mldsa.go | 241 ++ - .../go-crypto-darwin/xcrypto/mlkem.go | 261 ++ - .../go-crypto-darwin/xcrypto/pbkdf2.go | 76 + - .../go-crypto-darwin/xcrypto/rand.go | 28 + - .../microsoft/go-crypto-darwin/xcrypto/rc4.go | 81 + - .../microsoft/go-crypto-darwin/xcrypto/rsa.go | 208 ++ - .../microsoft/go-crypto-openssl/LICENSE | 21 + - .../microsoft/go-crypto-openssl/bbig/big.go | 40 + - .../internal/fakecgo/abi_amd64.h | 101 + - .../internal/fakecgo/abi_arm64.h | 41 + - .../internal/fakecgo/abi_loong64.h | 62 + - .../internal/fakecgo/abi_ppc64x.h | 197 ++ - .../internal/fakecgo/abi_riscv64.h | 74 + - .../internal/fakecgo/asm_386.s | 31 + - .../internal/fakecgo/asm_amd64.s | 41 + - .../internal/fakecgo/asm_arm.s | 52 + - .../internal/fakecgo/asm_arm64.s | 37 + - .../internal/fakecgo/asm_loong64.s | 40 + - .../internal/fakecgo/asm_ppc64le.s | 81 + - .../internal/fakecgo/asm_riscv64.s | 38 + - .../internal/fakecgo/asm_s390x.s | 54 + - .../internal/fakecgo/callbacks.go | 95 + - .../internal/fakecgo/fakecgo.go | 16 + - .../internal/fakecgo/fakecgo.lock | 3 + - .../internal/fakecgo/freebsd.go | 29 + - .../internal/fakecgo/generate.go | 6 + - .../internal/fakecgo/go_darwin.go | 90 + - .../internal/fakecgo/go_freebsd.go | 81 + - .../internal/fakecgo/go_libinit.go | 74 + - .../internal/fakecgo/go_linux.go | 81 + - .../internal/fakecgo/go_setenv.go | 20 + - .../internal/fakecgo/go_util.go | 40 + - .../internal/fakecgo/iscgo.go | 21 + - .../internal/fakecgo/libcgo.go | 41 + - .../internal/fakecgo/libcgo_darwin.go | 28 + - .../internal/fakecgo/libcgo_freebsd.go | 22 + - .../internal/fakecgo/libcgo_linux.go | 22 + - .../internal/fakecgo/linux.go | 186 ++ - .../internal/fakecgo/setenv.go | 21 + - .../internal/fakecgo/trampolines_386.s | 123 + - .../internal/fakecgo/trampolines_amd64.s | 109 + - .../internal/fakecgo/trampolines_arm.s | 124 + - .../internal/fakecgo/trampolines_arm64.s | 83 + - .../internal/fakecgo/trampolines_linux_386.s | 80 + - .../fakecgo/trampolines_linux_amd64.s | 71 + - .../internal/fakecgo/trampolines_linux_arm.s | 71 + - .../fakecgo/trampolines_linux_arm64.s | 62 + - .../fakecgo/trampolines_linux_loong64.s | 62 + - .../fakecgo/trampolines_linux_ppc64le.s | 71 + - .../fakecgo/trampolines_linux_riscv64.s | 62 + - .../fakecgo/trampolines_linux_s390x.s | 53 + - .../internal/fakecgo/trampolines_loong64.s | 80 + - .../internal/fakecgo/trampolines_ppc64le.s | 134 + - .../internal/fakecgo/trampolines_riscv64.s | 78 + - .../internal/fakecgo/trampolines_s390x.s | 158 ++ - .../internal/fakecgo/zsymbols.go | 167 ++ - .../internal/fakecgo/zsymbols_darwin.go | 61 + - .../internal/fakecgo/zsymbols_freebsd.go | 50 + - .../internal/fakecgo/zsymbols_linux.go | 160 ++ - .../internal/fakecgo/ztrampolines_darwin.s | 21 + - .../internal/fakecgo/ztrampolines_freebsd.s | 18 + - .../internal/fakecgo/ztrampolines_linux.s | 48 + - .../internal/fakecgo/ztrampolines_stubs.s | 57 + - .../go-crypto-openssl/internal/ossl/asm_386.s | 101 + - .../internal/ossl/asm_amd64.s | 123 + - .../go-crypto-openssl/internal/ossl/asm_arm.s | 107 + - .../internal/ossl/asm_arm64.s | 100 + - .../internal/ossl/asm_loong64.s | 119 + - .../internal/ossl/asm_others.s | 10 + - .../internal/ossl/asm_ppc64le.s | 144 + - .../internal/ossl/asm_riscv64.s | 112 + - .../internal/ossl/asm_s390x.s | 120 + - .../go-crypto-openssl/internal/ossl/dl.h | 15 + - .../go-crypto-openssl/internal/ossl/errors.go | 37 + - .../internal/ossl/errors_cgo.go | 33 + - .../internal/ossl/errors_nocgo.go | 19 + - .../go-crypto-openssl/internal/ossl/ossl.go | 62 + - .../go-crypto-openssl/internal/ossl/shims.h | 448 +++ - .../internal/ossl/syscall_nocgo.go | 87 + - .../internal/ossl/syscall_nocgo_darwin.go | 8 + - .../internal/ossl/syscall_nocgo_freebsd.go | 8 + - .../internal/ossl/syscall_nocgo_linux.go | 8 + - .../internal/ossl/syscall_nocgo_unix.go | 23 + - .../internal/ossl/syscall_nocgo_windows.go | 25 + - .../go-crypto-openssl/internal/ossl/zdl.s | 58 + - .../internal/ossl/zdl_nocgo.go | 61 + - .../go-crypto-openssl/internal/ossl/zossl.c | 2101 ++++++++++++++ - .../go-crypto-openssl/internal/ossl/zossl.go | 76 + - .../go-crypto-openssl/internal/ossl/zossl.h | 377 +++ - .../internal/ossl/zossl_cgo.go | 1527 ++++++++++ - .../internal/ossl/zossl_nocgo.go | 2501 +++++++++++++++++ - .../go-crypto-openssl/openssl/aes.go | 158 ++ - .../go-crypto-openssl/openssl/big.go | 14 + - .../openssl/chacha20poly1305.go | 152 + - .../go-crypto-openssl/openssl/cipher.go | 690 +++++ - .../go-crypto-openssl/openssl/const.go | 115 + - .../go-crypto-openssl/openssl/cshake.go | 256 ++ - .../go-crypto-openssl/openssl/des.go | 121 + - .../go-crypto-openssl/openssl/dsa.go | 296 ++ - .../microsoft/go-crypto-openssl/openssl/ec.go | 132 + - .../go-crypto-openssl/openssl/ecdh.go | 331 +++ - .../go-crypto-openssl/openssl/ecdsa.go | 212 ++ - .../go-crypto-openssl/openssl/ed25519.go | 209 ++ - .../go-crypto-openssl/openssl/evp.go | 634 +++++ - .../go-crypto-openssl/openssl/hash.go | 518 ++++ - .../go-crypto-openssl/openssl/hkdf.go | 312 ++ - .../go-crypto-openssl/openssl/hmac.go | 269 ++ - .../go-crypto-openssl/openssl/mldsa.go | 499 ++++ - .../go-crypto-openssl/openssl/mlkem.go | 369 +++ - .../go-crypto-openssl/openssl/openssl.go | 182 ++ - .../go-crypto-openssl/openssl/openssl_cgo.go | 17 + - .../openssl/openssl_nocgo.go | 35 + - .../go-crypto-openssl/openssl/params.go | 191 ++ - .../go-crypto-openssl/openssl/pbkdf2.go | 82 + - .../openssl/provideropenssl.go | 257 ++ - .../openssl/providersymcrypt.go | 331 +++ - .../go-crypto-openssl/openssl/rand.go | 37 + - .../go-crypto-openssl/openssl/rc4.go | 76 + - .../go-crypto-openssl/openssl/rsa.go | 706 +++++ - .../go-crypto-openssl/openssl/tls1prf.go | 149 + - .../go-crypto-openssl/openssl/zaes.go | 87 + - .../go-crypto-openssl/osslsetup/fips.go | 115 + - .../go-crypto-openssl/osslsetup/init.go | 170 ++ - .../osslsetup/init_cgo_unix.go | 34 + - .../osslsetup/init_nocgo_unix.go | 35 + - .../osslsetup/init_windows.go | 37 + - .../go-crypto-openssl/osslsetup/osslsetup.go | 123 + - .../osslsetup/osslsetup_cgo.go | 12 + - .../osslsetup/osslsetup_nocgo.go | 24 + - .../microsoft/go-crypto-winnative/LICENSE | 21 + - .../microsoft/go-crypto-winnative/cng/aes.go | 435 +++ - .../go-crypto-winnative/cng/bbig/big.go | 31 + - .../microsoft/go-crypto-winnative/cng/big.go | 30 + - .../cng/chacha20poly1305.go | 119 + - .../go-crypto-winnative/cng/cipher.go | 52 + - .../microsoft/go-crypto-winnative/cng/cng.go | 140 + - .../microsoft/go-crypto-winnative/cng/des.go | 106 + - .../microsoft/go-crypto-winnative/cng/dsa.go | 465 +++ - .../microsoft/go-crypto-winnative/cng/ecdh.go | 255 ++ - .../go-crypto-winnative/cng/ecdsa.go | 169 ++ - .../microsoft/go-crypto-winnative/cng/hash.go | 342 +++ - .../microsoft/go-crypto-winnative/cng/hkdf.go | 133 + - .../microsoft/go-crypto-winnative/cng/hmac.go | 70 + - .../microsoft/go-crypto-winnative/cng/keys.go | 220 ++ - .../go-crypto-winnative/cng/mldsa.go | 444 +++ - .../go-crypto-winnative/cng/mlkem.go | 405 +++ - .../go-crypto-winnative/cng/pbkdf2.go | 70 + - .../microsoft/go-crypto-winnative/cng/rand.go | 28 + - .../microsoft/go-crypto-winnative/cng/rc4.go | 65 + - .../microsoft/go-crypto-winnative/cng/rsa.go | 404 +++ - .../microsoft/go-crypto-winnative/cng/sha3.go | 203 ++ - .../go-crypto-winnative/cng/tls1prf.go | 91 + - .../internal/bcrypt/bcrypt_windows.go | 434 +++ - .../internal/bcrypt/ntstatus_windows.go | 45 + - .../internal/bcrypt/zsyscall_windows.go | 438 +++ - .../internal/subtle/aliasing.go | 32 + - .../internal/sysdll/sys_windows.go | 55 + - .../microsoft/go/cryptobackend/README.md | 21 + - .../go/cryptobackend/aes/aes_darwin.go | 15 + - .../go/cryptobackend/aes/aes_linux.go | 15 + - .../go/cryptobackend/aes/aes_windows.go | 15 + - .../go/cryptobackend/aes/gcm/gcm_darwin.go | 17 + - .../go/cryptobackend/aes/gcm/gcm_linux.go | 17 + - .../go/cryptobackend/aes/gcm/gcm_windows.go | 17 + - .../go/cryptobackend/aes/gcm/init.go | 7 + - .../go/cryptobackend/aes/gcm/nobackend.go | 13 + - .../microsoft/go/cryptobackend/aes/init.go | 7 + - .../go/cryptobackend/aes/nobackend.go | 11 + - .../go/cryptobackend/backend_darwin.go | 17 + - .../go/cryptobackend/backend_linux.go | 27 + - .../go/cryptobackend/backend_msgostd.go | 17 + - .../go/cryptobackend/backend_windows.go | 17 + - .../microsoft/go/cryptobackend/bbig/big.go | 17 + - .../go/cryptobackend/bbig/big_darwin.go | 12 + - .../go/cryptobackend/bbig/big_linux.go | 12 + - .../go/cryptobackend/bbig/big_windows.go | 12 + - .../microsoft/go/cryptobackend/bbig/init.go | 7 + - .../chacha20poly1305_darwin.go | 24 + - .../chacha20poly1305_linux.go | 24 + - .../chacha20poly1305_windows.go | 24 + - .../go/cryptobackend/chacha20poly1305/init.go | 7 + - .../chacha20poly1305/nobackend.go | 13 + - .../microsoft/go/cryptobackend/common.go | 47 + - .../go/cryptobackend/des/des_darwin.go | 21 + - .../go/cryptobackend/des/des_linux.go | 21 + - .../go/cryptobackend/des/des_windows.go | 21 + - .../microsoft/go/cryptobackend/des/init.go | 7 + - .../go/cryptobackend/des/nobackend.go | 17 + - .../microsoft/go/cryptobackend/drbg/init.go | 7 + - .../go/cryptobackend/drbg/nobackend.go | 9 + - .../go/cryptobackend/drbg/rand_darwin.go | 19 + - .../go/cryptobackend/drbg/rand_linux.go | 19 + - .../go/cryptobackend/drbg/rand_windows.go | 19 + - .../go/cryptobackend/dsa/dsa_darwin.go | 25 + - .../go/cryptobackend/dsa/dsa_linux.go | 46 + - .../go/cryptobackend/dsa/dsa_windows.go | 37 + - .../microsoft/go/cryptobackend/dsa/init.go | 7 + - .../go/cryptobackend/dsa/nobackend.go | 23 + - .../go/cryptobackend/ecdh/ecdh_darwin.go | 32 + - .../go/cryptobackend/ecdh/ecdh_linux.go | 26 + - .../go/cryptobackend/ecdh/ecdh_windows.go | 32 + - .../microsoft/go/cryptobackend/ecdh/init.go | 7 + - .../go/cryptobackend/ecdh/nobackend.go | 22 + - .../go/cryptobackend/ecdsa/ecdsa_darwin.go | 37 + - .../go/cryptobackend/ecdsa/ecdsa_linux.go | 31 + - .../go/cryptobackend/ecdsa/ecdsa_windows.go | 57 + - .../microsoft/go/cryptobackend/ecdsa/init.go | 7 + - .../go/cryptobackend/ecdsa/nobackend.go | 24 + - .../cryptobackend/ed25519/ed25519_darwin.go | 24 + - .../go/cryptobackend/ed25519/ed25519_linux.go | 24 + - .../cryptobackend/ed25519/ed25519_windows.go | 21 + - .../go/cryptobackend/ed25519/init.go | 7 + - .../go/cryptobackend/ed25519/nobackend.go | 21 + - .../go/cryptobackend/fips140/fips140.go | 15 + - .../go/cryptobackend/hash/hash_darwin.go | 15 + - .../go/cryptobackend/hash/hash_linux.go | 15 + - .../go/cryptobackend/hash/hash_windows.go | 15 + - .../go/cryptobackend/hash/nobackend.go | 11 + - .../microsoft/go/cryptobackend/hkdf/hkdf.go | 15 + - .../go/cryptobackend/hkdf/hkdf_darwin.go | 21 + - .../go/cryptobackend/hkdf/hkdf_linux.go | 21 + - .../go/cryptobackend/hkdf/hkdf_windows.go | 21 + - .../microsoft/go/cryptobackend/hkdf/init.go | 7 + - .../go/cryptobackend/hkdf/nobackend.go | 17 + - .../go/cryptobackend/hmac/hmac_darwin.go | 17 + - .../go/cryptobackend/hmac/hmac_linux.go | 17 + - .../go/cryptobackend/hmac/hmac_windows.go | 17 + - .../microsoft/go/cryptobackend/hmac/init.go | 7 + - .../go/cryptobackend/hmac/nobackend.go | 11 + - .../internal/fips140state/isrequirefips.go | 9 + - .../internal/fips140state/norequirefips.go | 9 + - .../internal/fips140state/nosystemcrypto.go | 11 + - .../requirefips_nosystemcrypto.go | 15 + - .../fips140state/skipfipscheck_off.go | 9 + - .../internal/fips140state/skipfipscheck_on.go | 9 + - .../internal/fips140state/state.go | 88 + - .../internal/fips140state/state_msgostd.go | 11 + - .../internal/fips140state/state_nomsgostd.go | 9 + - .../fips140state/systemfips_darwin.go | 11 + - .../internal/fips140state/systemfips_linux.go | 57 + - .../fips140state/systemfips_windows.go | 32 + - .../opensslsetup/opensslsetup_linux.go | 68 + - .../internal/opensslsetup/stub.go | 8 + - .../microsoft/go/cryptobackend/md5/init.go | 7 + - .../go/cryptobackend/md5/md5_darwin.go | 20 + - .../go/cryptobackend/md5/md5_linux.go | 20 + - .../go/cryptobackend/md5/md5_windows.go | 20 + - .../go/cryptobackend/md5/nobackend.go | 15 + - .../microsoft/go/cryptobackend/mldsa/init.go | 7 + - .../go/cryptobackend/mldsa/mldsa_darwin.go | 26 + - .../go/cryptobackend/mldsa/mldsa_linux.go | 26 + - .../go/cryptobackend/mldsa/mldsa_windows.go | 26 + - .../go/cryptobackend/mldsa/nobackend.go | 44 + - .../microsoft/go/cryptobackend/mlkem/init.go | 7 + - .../go/cryptobackend/mlkem/mlkem_darwin.go | 31 + - .../go/cryptobackend/mlkem/mlkem_linux.go | 31 + - .../go/cryptobackend/mlkem/mlkem_windows.go | 31 + - .../go/cryptobackend/mlkem/nobackend.go | 51 + - .../microsoft/go/cryptobackend/nobackend.go | 15 + - .../microsoft/go/cryptobackend/pbkdf2/init.go | 7 + - .../go/cryptobackend/pbkdf2/nobackend.go | 14 + - .../go/cryptobackend/pbkdf2/pbkdf2_darwin.go | 18 + - .../go/cryptobackend/pbkdf2/pbkdf2_linux.go | 18 + - .../go/cryptobackend/pbkdf2/pbkdf2_windows.go | 18 + - .../microsoft/go/cryptobackend/rc4/init.go | 7 + - .../go/cryptobackend/rc4/nobackend.go | 17 + - .../go/cryptobackend/rc4/rc4_darwin.go | 15 + - .../go/cryptobackend/rc4/rc4_linux.go | 15 + - .../go/cryptobackend/rc4/rc4_windows.go | 15 + - .../microsoft/go/cryptobackend/rsa/init.go | 7 + - .../go/cryptobackend/rsa/nobackend.go | 61 + - .../go/cryptobackend/rsa/rsa_darwin.go | 100 + - .../go/cryptobackend/rsa/rsa_linux.go | 85 + - .../go/cryptobackend/rsa/rsa_windows.go | 77 + - .../microsoft/go/cryptobackend/sha1/init.go | 7 + - .../go/cryptobackend/sha1/nobackend.go | 13 + - .../go/cryptobackend/sha1/sha1_darwin.go | 17 + - .../go/cryptobackend/sha1/sha1_linux.go | 17 + - .../go/cryptobackend/sha1/sha1_windows.go | 17 + - .../microsoft/go/cryptobackend/sha256/init.go | 7 + - .../go/cryptobackend/sha256/nobackend.go | 16 + - .../go/cryptobackend/sha256/sha256_darwin.go | 20 + - .../go/cryptobackend/sha256/sha256_linux.go | 21 + - .../go/cryptobackend/sha256/sha256_windows.go | 20 + - .../microsoft/go/cryptobackend/sha3/init.go | 7 + - .../go/cryptobackend/sha3/nobackend.go | 50 + - .../go/cryptobackend/sha3/sha3_darwin.go | 50 + - .../go/cryptobackend/sha3/sha3_linux.go | 40 + - .../go/cryptobackend/sha3/sha3_windows.go | 40 + - .../microsoft/go/cryptobackend/sha512/init.go | 7 + - .../go/cryptobackend/sha512/nobackend.go | 21 + - .../go/cryptobackend/sha512/sha512_darwin.go | 25 + - .../go/cryptobackend/sha512/sha512_linux.go | 26 + - .../go/cryptobackend/sha512/sha512_windows.go | 25 + - .../microsoft/go/cryptobackend/stub.s | 10 + - .../microsoft/go/cryptobackend/tls12/init.go | 7 + - .../go/cryptobackend/tls12/nobackend.go | 14 + - .../go/cryptobackend/tls12/tls12_darwin.go | 14 + - .../go/cryptobackend/tls12/tls12_linux.go | 18 + - .../go/cryptobackend/tls12/tls12_windows.go | 18 + - .../microsoft/go/cryptobackend/tls13/init.go | 7 + - .../go/cryptobackend/tls13/nobackend.go | 14 + - .../go/cryptobackend/tls13/tls13_darwin.go | 14 + - .../go/cryptobackend/tls13/tls13_linux.go | 18 + - .../go/cryptobackend/tls13/tls13_windows.go | 14 + - src/vendor/modules.txt | 55 + - 411 files changed, 39290 insertions(+), 11 deletions(-) - create mode 100644 src/cmd/internal/telemetry/counter/deps_ignore.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/LICENSE - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/README.md - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/ci.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/LICENSE - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.json - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/counter/counter.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/README.md - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/client.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/inmemorychannel.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/contexttagkeys.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/envelope.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/response.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/jsonserializer.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/package.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/telemetrycontext.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/transmitter.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/config/config.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/proginfo.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/telemetry.go - create mode 100644 src/cmd/vendor/github.com/microsoft/go-infra/telemetry/telemetry.go - create mode 100644 src/crypto/deps_ignore.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/LICENSE - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/bbig/big.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/commoncrypto.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/shims.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/syscall_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.c - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/CryptoKit_amd64.syso - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/CryptoKit_arm64.syso - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/shims.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/syscall_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/xcodebuild_version.txt - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.c - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_amd64.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_arm64.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_amd64.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_arm64.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/callbacks.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.lock - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/generate.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_libinit.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_setenv.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_util.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/iscgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/setenv.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_darwin.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_stubs.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/security.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/shims.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/syscall_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.c - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_others.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/aes.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/big.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/chacha20poly1305.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/cipher.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/des.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ec.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdh.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ed25519.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/evp.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/gcm.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hash.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hkdf.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hmac.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mldsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mlkem.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/pbkdf2.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rand.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rc4.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/LICENSE - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/bbig/big.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_amd64.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_arm64.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_loong64.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_ppc64x.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_riscv64.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_386.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_loong64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_ppc64le.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_riscv64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_s390x.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/callbacks.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.lock - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/freebsd.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/generate.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_freebsd.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_libinit.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_linux.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_setenv.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_util.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/iscgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_freebsd.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_linux.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/linux.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/setenv.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_386.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_386.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_loong64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_ppc64le.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_riscv64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_s390x.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_loong64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_ppc64le.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_riscv64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_s390x.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_freebsd.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_linux.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_darwin.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_freebsd.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_linux.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_stubs.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_386.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_amd64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_loong64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_others.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_ppc64le.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_riscv64.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_s390x.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/dl.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/ossl.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/shims.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_freebsd.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_linux.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_unix.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_windows.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl.s - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.c - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.h - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/aes.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/big.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/chacha20poly1305.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cipher.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/const.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cshake.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/des.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/dsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ec.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdh.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ed25519.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/evp.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hash.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hkdf.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hmac.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mldsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mlkem.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/params.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/pbkdf2.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/provideropenssl.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/providersymcrypt.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rand.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rc4.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/tls1prf.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/openssl/zaes.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/fips.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_cgo_unix.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_nocgo_unix.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_windows.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_cgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_nocgo.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/LICENSE - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/aes.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/bbig/big.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/big.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/chacha20poly1305.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/cipher.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/cng.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/des.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/dsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdh.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/hash.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/hkdf.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/hmac.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/keys.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/mldsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/mlkem.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/pbkdf2.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/rand.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/rc4.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/rsa.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/sha3.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/cng/tls1prf.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/bcrypt_windows.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/ntstatus_windows.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/zsyscall_windows.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/internal/subtle/aliasing.go - create mode 100644 src/vendor/github.com/microsoft/go-crypto-winnative/internal/sysdll/sys_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/README.md - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/aes/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/backend_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/backend_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/backend_msgostd.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/backend_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/bbig/big.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/bbig/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/common.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/des/des_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/des/des_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/des/des_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/des/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/des/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/drbg/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/drbg/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/dsa/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/dsa/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdh/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdh/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ed25519/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/ed25519/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/fips140/fips140.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hash/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hkdf/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hkdf/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hmac/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/hmac/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/isrequirefips.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/norequirefips.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/nosystemcrypto.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/requirefips_nosystemcrypto.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_off.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_on.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_msgostd.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_nomsgostd.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/opensslsetup_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/stub.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/md5/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/md5/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mldsa/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mldsa/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mlkem/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/mlkem/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rc4/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rc4/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rsa/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rsa/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha1/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha1/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha256/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha256/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha3/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha3/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha512/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha512/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/stub.s - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls12/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls12/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_windows.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls13/init.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls13/nobackend.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_darwin.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_linux.go - create mode 100644 src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_windows.go +Vendor directories are automatically regenerated by 'git go-patch apply' +using 'go mod vendor' in 'src' and 'src/cmd'. This patch only tracks +go.mod, go.sum, and related non-vendor files in source control. +github.com/microsoft/go-infra/cmd/git-go-patch command: auto vendor src src/cmd +--- diff --git a/src/cmd/go.mod b/src/cmd/go.mod -index 82ceadb04a273a..14a2aa30728fc6 100644 +index 326553a6a8e45f..7fcd181da63b96 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -4,6 +4,8 @@ go 1.27 @@ -838,7 +23,7 @@ index 82ceadb04a273a..14a2aa30728fc6 100644 golang.org/x/build v0.0.0-20260522210304-d55d0041b921 golang.org/x/mod v0.36.1-0.20260520130633-087f6515dd3b diff --git a/src/cmd/go.sum b/src/cmd/go.sum -index d9e3e3992ebb61..579fc05cbd0e33 100644 +index 3b88ef74339c5b..abeaf0b10b8aae 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -4,6 +4,10 @@ github.com/google/pprof v0.0.0-20260507013755-92041b743c96 h1:YDDnaZ9afWajDboPMt @@ -875,1984 +60,174 @@ index 00000000000000..d3155d34977b32 +// This file is here just to declare the external dependencies +// that are used by the cmd module. This allows to track +// their versions in a single patch file. -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/LICENSE b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/LICENSE -new file mode 100644 -index 00000000000000..9e841e7a26e4eb ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/LICENSE -@@ -0,0 +1,21 @@ -+ MIT License -+ -+ Copyright (c) Microsoft Corporation. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a copy -+ of this software and associated documentation files (the "Software"), to deal -+ in the Software without restriction, including without limitation the rights -+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+ copies of the Software, and to permit persons to whom the Software is -+ furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice shall be included in all -+ copies or substantial portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+ SOFTWARE -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/README.md b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/README.md -new file mode 100644 -index 00000000000000..5fc9356268f64a ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/README.md -@@ -0,0 +1,9 @@ -+# telemetry -+ -+[![Go Reference](https://pkg.go.dev/badge/github.com/microsoft/go-infra/telemetry.svg)](https://pkg.go.dev/github.com/microsoft/go-infra/telemetry) -+ -+This directory, the `telemetry` package, contains the telemetry transmission code for the Microsoft build of Go. -+It is specialized to work similarly to the upstream telemetry counters. -+ -+The [`appinsights`](appinsights) package is an alternative client that can send more arbitrary telemetry event data to Application Insights. -+It only supports a few features of Application Insights that are used in other projects maintained by the Microsoft build of Go team. -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/ci.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/ci.go -new file mode 100644 -index 00000000000000..bb3188f26ead88 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/ci.go -@@ -0,0 +1,97 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package telemetry -+ -+import "strings" -+ -+// DetectCI inspects the given environment variables to determine which CI -+// system is most likely in use, if any. The env parameter should be in the same -+// format as os.Environ() (i.e. each entry is "KEY=VALUE"). It returns a short -+// identifier matching the go/ci counter values, or "" if no CI system is -+// detected. -+func DetectCI(env []string) string { -+ m := envMap(env) -+ -+ // Azure Pipelines -+ // https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables#system-variables-devops-services -+ if isTrue(m["TF_BUILD"]) { -+ return "azdo" -+ } -+ -+ // GitHub Actions -+ // https://docs.github.com/en/actions/learn-github-actions/environment-variables#default-environment-variables -+ if isTrue(m["GITHUB_ACTIONS"]) { -+ return "github" -+ } -+ -+ // GitLab CI -+ // https://docs.gitlab.com/ee/ci/variables/predefined_variables.html -+ if m["GITLAB_CI"] != "" { -+ return "gitlab" -+ } -+ -+ // AppVeyor -+ // https://www.appveyor.com/docs/environment-variables/ -+ if isTrue(m["APPVEYOR"]) { -+ return "appveyor" -+ } -+ -+ // Travis CI -+ // https://docs.travis-ci.com/user/environment-variables/#default-environment-variables -+ if isTrue(m["TRAVIS"]) { -+ return "travis" -+ } -+ -+ // CircleCI -+ // https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables -+ if isTrue(m["CIRCLECI"]) { -+ return "circleci" -+ } -+ -+ // AWS CodeBuild -+ // https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html -+ if m["CODEBUILD_BUILD_ID"] != "" && m["AWS_REGION"] != "" { -+ return "aws_codebuild" -+ } -+ -+ // TeamCity -+ // https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters -+ if m["TEAMCITY_VERSION"] != "" { -+ return "teamcity" -+ } -+ -+ // Jenkins -+ // https://github.com/jenkinsci/jenkins/blob/master/core/src/main/resources/jenkins/model/CoreEnvironmentContributor/buildEnv.groovy -+ if m["BUILD_ID"] != "" && m["BUILD_URL"] != "" { -+ return "jenkins" -+ } -+ -+ // Google Cloud Build -+ // https://cloud.google.com/build/docs/configuring-builds/substitute-variable-values#using_default_substitutions -+ if m["BUILD_ID"] != "" && m["PROJECT_ID"] != "" { -+ return "google_cloud_build" -+ } -+ -+ return "" -+} -+ -+// envMap converts an os.Environ()-style slice into a map for fast lookup. -+func envMap(env []string) map[string]string { -+ m := make(map[string]string, len(env)) -+ for _, e := range env { -+ if k, v, ok := strings.Cut(e, "="); ok { -+ m[k] = v -+ } -+ } -+ return m -+} -+ -+// isTrue reports whether the value is a common boolean-true string. -+// Matches the logic in dotnet/sdk EnvironmentVariableParser.ParseBool. -+func isTrue(v string) bool { -+ return v == "1" || -+ strings.EqualFold(v, "true") || -+ strings.EqualFold(v, "yes") || -+ strings.EqualFold(v, "on") -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/LICENSE b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/LICENSE -new file mode 100644 -index 00000000000000..9e841e7a26e4eb ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/LICENSE -@@ -0,0 +1,21 @@ -+ MIT License -+ -+ Copyright (c) Microsoft Corporation. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a copy -+ of this software and associated documentation files (the "Software"), to deal -+ in the Software without restriction, including without limitation the rights -+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+ copies of the Software, and to permit persons to whom the Software is -+ furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice shall be included in all -+ copies or substantial portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+ SOFTWARE -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.go -new file mode 100644 -index 00000000000000..044268a046a54d ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.go -@@ -0,0 +1,11 @@ -+// The config package holds the config.json file defining the Go telemetry -+// upload configuration. -+// -+// An upload configuration specifies the set of values that are permitted in -+// telemetry uploads: GOOS, GOARCH, and per-program counters. -+package config -+ -+import _ "embed" // for config.json -+ -+//go:embed config.json -+var Config []byte -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.json b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.json -new file mode 100644 -index 00000000000000..e2ba3596943583 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/config/config.json -@@ -0,0 +1,77 @@ -+{ -+ "GOOS": [ -+ "aix", -+ "android", -+ "darwin", -+ "dragonfly", -+ "freebsd", -+ "hurd", -+ "illumos", -+ "ios", -+ "js", -+ "linux", -+ "nacl", -+ "netbsd", -+ "openbsd", -+ "plan9", -+ "solaris", -+ "wasip1", -+ "windows", -+ "zos" -+ ], -+ "GOARCH": [ -+ "386", -+ "amd64", -+ "amd64p32", -+ "arm", -+ "arm64", -+ "arm64be", -+ "armbe", -+ "loong64", -+ "mips", -+ "mips64", -+ "mips64le", -+ "mips64p32", -+ "mips64p32le", -+ "mipsle", -+ "ppc", -+ "ppc64", -+ "ppc64le", -+ "riscv", -+ "riscv64", -+ "s390", -+ "s390x", -+ "sparc", -+ "sparc64", -+ "wasm" -+ ], -+ "Programs": [ -+ { -+ "Name": "cmd/go", -+ "Counters": [ -+ { -+ "Name": "go/invocations", -+ "Properties": ["msgo/module/hash"] -+ }, -+ { -+ "Name": "go/goexperiment:{ms_tls_config_schannel,systemcrypto,nosystemcrypto,opensslcrypto,cngcrypto,darwincrypto,ms_nocgo_opensslcrypto}" -+ }, -+ { -+ "Name": "go/subcommand:{build,install,run}" -+ }, -+ { -+ "Name": "go/platform/target/port:{aix-ppc64,android-386,android-amd64,android-arm,android-arm64,darwin-amd64,darwin-arm64,dragonfly-amd64,freebsd-386,freebsd-amd64,freebsd-arm,freebsd-arm64,freebsd-riscv64,illumos-amd64,ios-amd64,ios-arm64,js-wasm,linux-386,linux-amd64,linux-arm,linux-arm64,linux-loong64,linux-mips,linux-mips64,linux-mips64le,linux-mipsle,linux-ppc64,linux-ppc64le,linux-riscv64,linux-s390x,linux-sparc64,netbsd-386,netbsd-amd64,netbsd-arm,netbsd-arm64,openbsd-386,openbsd-amd64,openbsd-arm,openbsd-arm64,openbsd-ppc64,openbsd-riscv64,plan9-386,plan9-amd64,plan9-arm,solaris-amd64,wasip1-wasm,windows-386,windows-amd64,windows-arm64}" -+ }, -+ { -+ "Name": "go/cgo:{enabled,disabled}" -+ }, -+ { -+ "Name": "msgo/ci:{appveyor,aws_codebuild,azdo,circleci,github,gitlab,google_cloud_build,jenkins,teamcity,travis}" -+ }, -+ { -+ "Name": "msgo/systemcrypto:{enabled,disabled}" -+ } -+ ] -+ } -+ ] -+} -\ No newline at end of file -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/counter/counter.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/counter/counter.go -new file mode 100644 -index 00000000000000..808caafd45e383 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/counter/counter.go -@@ -0,0 +1,71 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package counter -+ -+import ( -+ "flag" -+ "path" -+ "runtime/debug" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights" -+ "github.com/microsoft/go-infra/telemetry/internal/telemetry" -+) -+ -+// A Counter is a single named event counter. -+type Counter = appinsights.Event -+ -+// Inc increments the counter with the given name. -+func Inc(name string) { -+ New(name).Inc() -+} -+ -+// Add adds n to the counter with the given name. -+func Add(name string, n int64) { -+ New(name).Add(n) -+} -+ -+// New returns a counter with the given name. -+func New(name string) *Counter { -+ return telemetry.Client.NewEvent(name, nil) -+} -+ -+// NewWithProperties returns a counter with the given name and custom properties. -+// Properties are sent as custom dimensions in Application Insights, allowing -+// high-cardinality values (such as hashes) to be sent as values rather than -+// as part of the counter name. -+func NewWithProperties(name string, properties map[string]string) *Counter { -+ return telemetry.Client.NewEvent(name, properties) -+} -+ -+// CountFlags creates a counter for every flag that is set -+// and increments the counter. The name of the counter is -+// the concatenation of prefix and the flag name. -+// -+// For instance, CountFlags("gopls/flag:", *flag.CommandLine) -+func CountFlags(prefix string, fs flag.FlagSet) { -+ fs.Visit(func(f *flag.Flag) { -+ New(prefix + f.Name).Inc() -+ }) -+} -+ -+// CountCommandLineFlags creates a counter for every flag -+// that is set in the default flag.CommandLine FlagSet using -+// the counter name binaryName+"/flag:"+flagName where -+// binaryName is the base name of the Path embedded in the -+// binary's build info. If the binary does not have embedded build -+// info, the "flag:"+flagName counter will be incremented. -+// -+// CountCommandLineFlags must be called after flags are parsed -+// with flag.Parse. -+// -+// For instance, if the -S flag is passed to cmd/compile and -+// CountCommandLineFlags is called after flags are parsed, -+// the "compile/flag:S" counter will be incremented. -+func CountCommandLineFlags() { -+ prefix := "flag:" -+ if buildInfo, ok := debug.ReadBuildInfo(); ok && buildInfo.Path != "" { -+ prefix = path.Base(buildInfo.Path) + "/" + prefix -+ } -+ CountFlags(prefix, *flag.CommandLine) -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/README.md b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/README.md -new file mode 100644 -index 00000000000000..2e96890f60b871 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/README.md -@@ -0,0 +1,12 @@ -+# appinsights -+ -+This package is a trimmed down version of https://github.com/microsoft/ApplicationInsights-Go. -+It is tailored for the use of the [Microsoft build of Go](https://github.com/microsoft/go). -+ -+These are the changes made to the original package: -+ -+- Remove all external dependencies. -+- Remove all telemetry types except for `Event`. -+- Simplify implementation. -+- Modernize the code. -+- Improve testing. -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/client.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/client.go +diff --git a/src/crypto/deps_ignore.go b/src/crypto/deps_ignore.go new file mode 100644 -index 00000000000000..b54a026b0fe540 +index 00000000000000..d4671e1584dfa8 --- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/client.go -@@ -0,0 +1,200 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package appinsights -+ -+import ( -+ "cmp" -+ "context" -+ "log/slog" -+ "maps" -+ "net/http" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts" -+) -+ -+// Client is the main entry point for sending telemetry to Application Insights. -+// Changing its properties after a telemetry item is created will have no effect. -+type Client struct { -+ // The instrumentation key used to identify the application. -+ // This key is required and must be set before sending any telemetry. -+ InstrumentationKey string -+ -+ // The endpoint URL to which telemetry will be sent. -+ // If empty, it defaults to https://dc.services.visualstudio.com/v2/track. -+ Endpoint string -+ -+ // Maximum number of telemetry items that can be submitted in each -+ // request. If this many items are buffered, the buffer will be -+ // flushed before MaxBatchInterval expires. -+ // If zero, it defaults to 1024. -+ MaxBatchSize int -+ -+ // Maximum time to wait before sending a batch of telemetry. -+ // If zero, it defaults to 10 seconds. -+ MaxBatchInterval time.Duration -+ -+ // Customized http client. -+ // If nil, it defaults to http.DefaultClient. -+ HTTPClient *http.Client -+ -+ // Tags to be sent with every telemetry item. -+ // If nil, no additional tags will be sent. -+ Tags map[string]string -+ -+ // Logger specifies a structured logger. -+ // If nil nothing is logged. -+ Logger *slog.Logger -+ -+ // Function to filter out telemetry items by name before they are sent. -+ // If nil, all telemetry items are sent. -+ UploadFilter func(name string) bool -+ -+ // Function to filter property keys for a given event name. -+ // Returns a new map containing only the allowed keys. -+ // If nil, all properties are sent. -+ PropertyFilter func(name string, properties map[string]string) map[string]string -+ -+ channel *inMemoryChannel -+ context *telemetryContext -+ -+ initialized atomic.Bool -+ initOnce sync.Once -+} -+ -+// init initializes the client. -+// It is safe to call this method multiple times concurrently. -+// Returns true if the client is initialized after the call, false if init -+// is called after the client has been stopped or closed. -+func (c *Client) init() bool { -+ c.initOnce.Do(func() { -+ if c.InstrumentationKey == "" { -+ panic("instrumentation key is required") -+ } -+ endpoint := cmp.Or(c.Endpoint, "https://dc.services.visualstudio.com/v2/track") -+ batchSize := cmp.Or(c.MaxBatchSize, 1024) -+ batchInterval := cmp.Or(c.MaxBatchInterval, 10*time.Second) -+ httpClient := cmp.Or(c.HTTPClient, http.DefaultClient) -+ c.channel = newInMemoryChannel(endpoint, batchSize, batchInterval, httpClient, c.Logger) -+ c.context = setupContext(c.InstrumentationKey, c.Tags) -+ if err := contracts.SanitizeTags(c.context.Tags); err != nil { -+ c.channel.warn("tags were not sanitary and have been sanitized", "error", err) -+ } -+ -+ go c.channel.acceptLoop() -+ c.initialized.Store(true) -+ }) -+ return c.initialized.Load() -+ -+} -+ -+// cancel tries to prevent the client from being initialized. -+// It is safe to call this method multiple times concurrently. -+// Returns true if the client is not initialized after the call, false if cancel -+// is called after the client has been initialized. -+func (c *Client) cancel() bool { -+ c.initOnce.Do(func() {}) -+ return !c.initialized.Load() -+} -+ -+func setupContext(instrumentationKey string, tags map[string]string) *telemetryContext { -+ context := newTelemetryContext(instrumentationKey) -+ context.Tags["ai.internal.sdkVersion"] = internalVersion -+ maps.Copy(context.Tags, tags) -+ return context -+} -+ -+// NewEvent creates a new event with the specified name. -+// If c is nil, returns a usable Event that does not send any telemetry. -+func (c *Client) NewEvent(name string, properties map[string]string) *Event { -+ return &Event{ -+ name: name, -+ client: c, -+ properties: properties, -+ } -+} -+ -+// TrackEvent logs a user action with the specified name. -+// If c is nil, nothing is logged. -+func (c *Client) TrackEvent(name string, properties map[string]string) { -+ c.NewEvent(name, properties).Inc() -+} -+ -+// Forces the current queue to be sent. -+func (c *Client) Flush() { -+ if !c.initialized.Load() { -+ return -+ } -+ c.channel.flush() -+} -+ -+// Close flushes and tears down the submission goroutine and closes internal channels. -+// Waits until all pending telemetry items have been submitted. -+func (c *Client) Close(ctx context.Context) { -+ // Synchronize with any in-progress init so we don't miss -+ // a channel that is about to be created. -+ if c.cancel() { -+ return -+ } -+ c.channel.close(ctx) -+} -+ -+// Stop tears down the submission goroutines, closes internal channels. -+// Any telemetry waiting to be sent is discarded. -+// This is a more abrupt version of [Client.Close]. -+func (c *Client) Stop() { -+ // Synchronize with any in-progress init so we don't miss -+ // a channel that is about to be created. -+ if c.cancel() { -+ return -+ } -+ c.channel.stop() -+} -+ -+// Submits the specified telemetry item. -+func (c *Client) track(data contracts.EventData, n int64) { -+ if n == 0 || (c.UploadFilter != nil && !c.UploadFilter(data.Name)) { -+ return -+ } -+ if c.PropertyFilter != nil && data.Properties != nil { -+ data.Properties = c.PropertyFilter(data.Name, data.Properties) -+ } -+ if !c.init() { -+ // Stop or Close consumed initOnce before init could run. -+ return -+ } -+ ev := c.context.envelop(data) -+ if err := ev.Sanitize(); err != nil { -+ c.channel.warn("tags were not sanitary and have been sanitized", "error", err) -+ } -+ for range n { -+ c.channel.send(ev) -+ } -+} -+ -+// Event represents an event to be tracked. -+type Event struct { -+ name string -+ client *Client -+ properties map[string]string -+} -+ -+// Inc adds 1 to the counter. -+func (e *Event) Inc() { -+ e.Add(1) -+} ++++ b/src/crypto/deps_ignore.go +@@ -0,0 +1,40 @@ ++// Copyright 2025 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. + -+// Add adds n to the counter. n cannot be negative, as counts cannot decrease. -+func (e *Event) Add(n int64) { -+ if e == nil || e.client == nil { -+ return -+ } -+ e.client.track(contracts.EventData{ -+ Name: e.name, -+ Ver: 2, -+ Properties: e.properties, -+ }, n) -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/inmemorychannel.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/inmemorychannel.go -new file mode 100644 -index 00000000000000..abc091e2b5c6b8 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/inmemorychannel.go -@@ -0,0 +1,349 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. ++//go:build ms_ignore_backend_deps + -+package appinsights ++package main + +import ( -+ "context" -+ "errors" -+ "log/slog" -+ "net/http" -+ "slices" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts" ++ _ "github.com/microsoft/go/cryptobackend" ++ _ "github.com/microsoft/go/cryptobackend/aes" ++ _ "github.com/microsoft/go/cryptobackend/aes/gcm" ++ _ "github.com/microsoft/go/cryptobackend/bbig" ++ _ "github.com/microsoft/go/cryptobackend/chacha20poly1305" ++ _ "github.com/microsoft/go/cryptobackend/des" ++ _ "github.com/microsoft/go/cryptobackend/drbg" ++ _ "github.com/microsoft/go/cryptobackend/dsa" ++ _ "github.com/microsoft/go/cryptobackend/ecdh" ++ _ "github.com/microsoft/go/cryptobackend/ecdsa" ++ _ "github.com/microsoft/go/cryptobackend/ed25519" ++ _ "github.com/microsoft/go/cryptobackend/fips140" ++ _ "github.com/microsoft/go/cryptobackend/hash" ++ _ "github.com/microsoft/go/cryptobackend/hkdf" ++ _ "github.com/microsoft/go/cryptobackend/hmac" ++ _ "github.com/microsoft/go/cryptobackend/md5" ++ _ "github.com/microsoft/go/cryptobackend/mldsa" ++ _ "github.com/microsoft/go/cryptobackend/mlkem" ++ _ "github.com/microsoft/go/cryptobackend/pbkdf2" ++ _ "github.com/microsoft/go/cryptobackend/rc4" ++ _ "github.com/microsoft/go/cryptobackend/rsa" ++ _ "github.com/microsoft/go/cryptobackend/sha1" ++ _ "github.com/microsoft/go/cryptobackend/sha256" ++ _ "github.com/microsoft/go/cryptobackend/sha3" ++ _ "github.com/microsoft/go/cryptobackend/sha512" ++ _ "github.com/microsoft/go/cryptobackend/tls12" ++ _ "github.com/microsoft/go/cryptobackend/tls13" +) + -+// batchItem is a telemetry item that is sent in a batch. -+type batchItem struct { -+ item *contracts.Envelope -+ retries int -+} -+ -+// inMemoryChannel stores events exclusively in memory. -+// Presently the only telemetry channel implementation available. -+type inMemoryChannel struct { -+ endpointAddr string -+ batchSize int -+ batchInterval time.Duration -+ logger *slog.Logger -+ -+ collectChan chan *contracts.Envelope -+ flushChan chan struct{} -+ retryChan chan retryMessage -+ -+ transmitter transmitter -+ -+ // Use a context instead of a channel to -+ // allow propagating the cancellation to the -+ // transmitter and to the underlying HTTP client. -+ cancelCtx context.Context -+ cancelCauseFunc context.CancelCauseFunc -+ -+ throttled atomic.Bool -+ closed atomic.Bool -+ closeOnce sync.Once -+ sendQueue []*[]batchItem -+ sendQueueMu sync.Mutex -+ sendMu sync.Mutex -+ inflight atomic.Int64 // Number of items currently being sent. -+ -+ itemsBuf sync.Pool -+} -+ -+type retryMessage struct { -+ throttled bool -+ retryAfter time.Time -+ items []batchItem -+} -+ -+// newInMemoryChannel creates an inMemoryChannel instance and starts a background submission goroutine. -+func newInMemoryChannel(endpointUrl string, batchSize int, batchInterval time.Duration, httpClient *http.Client, logger *slog.Logger) *inMemoryChannel { -+ // Set up the channel -+ channel := &inMemoryChannel{ -+ endpointAddr: endpointUrl, -+ batchSize: batchSize, -+ batchInterval: batchInterval, -+ logger: logger, -+ collectChan: make(chan *contracts.Envelope), -+ flushChan: make(chan struct{}), -+ retryChan: make(chan retryMessage), -+ transmitter: newTransmitter(endpointUrl, httpClient), -+ itemsBuf: sync.Pool{ -+ New: func() any { -+ buf := make([]batchItem, 0, batchSize) -+ return &buf -+ }, -+ }, -+ } -+ channel.cancelCtx, channel.cancelCauseFunc = context.WithCancelCause(context.Background()) -+ return channel -+} -+ -+func (channel *inMemoryChannel) info(msg string, args ...any) { -+ if channel.logger == nil { -+ return -+ } -+ channel.logger.Info("telemetry: "+msg, args...) -+} -+ -+func (channel *inMemoryChannel) warn(msg string, args ...any) { -+ if channel.logger == nil { -+ return -+ } -+ channel.logger.Warn("telemetry: "+msg, args...) -+} -+ -+func (channel *inMemoryChannel) error(msg string, args ...any) { -+ if channel.logger == nil { -+ return -+ } -+ channel.logger.Error("telemetry: "+msg, args...) -+} -+ -+// Queues a single telemetry item -+func (channel *inMemoryChannel) send(item *contracts.Envelope) { -+ if item == nil || channel.closed.Load() { -+ return -+ } -+ select { -+ case channel.collectChan <- item: -+ case <-channel.cancelCtx.Done(): -+ } -+} -+ -+// Forces the current queue to be sent -+func (channel *inMemoryChannel) flush() { -+ if channel.closed.Load() { -+ return -+ } -+ select { -+ case channel.flushChan <- struct{}{}: -+ case <-channel.cancelCtx.Done(): -+ } -+} -+ -+func (channel *inMemoryChannel) retry(throttled bool, retryAfter time.Time, items []batchItem) { -+ // Retry even if the channel is closed to allow for -+ // retrying items that were already sent. -+ channel.retryChan <- retryMessage{throttled, retryAfter, items} -+} -+ -+var errStopped = errors.New("client stopped") -+var errClosed = errors.New("client closed") -+ -+func (channel *inMemoryChannel) stop() { -+ channel.closeOnce.Do(func() { -+ channel.closed.Store(true) -+ channel.cancelCauseFunc(errStopped) -+ channel.checkInflight() -+ }) -+} ++// This file is here just to declare cryptobackend dependencies. ++// This allows tracking their versions in a single patch file. +diff --git a/src/go.mod b/src/go.mod +index bb6abc93792f39..7c68bbbafda72a 100644 +--- a/src/go.mod ++++ b/src/go.mod +@@ -3,11 +3,17 @@ module std + go 1.27 + + require ( +- golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 +- golang.org/x/net v0.55.1-0.20260526154343-657eb1317b5d ++ github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b // indirect ++ github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7 // indirect ++ github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825 // indirect ++ golang.org/x/sys v0.45.0 // indirect ++ golang.org/x/text v0.37.0 // indirect + ) + + require ( +- golang.org/x/sys v0.45.0 // indirect +- golang.org/x/text v0.37.0 // indirect ++ github.com/microsoft/go/cryptobackend v0.0.0 ++ golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 ++ golang.org/x/net v0.55.1-0.20260526154343-657eb1317b5d + ) + -+// close flushes and tears down the submission goroutine and closes internal -+// channels. Returns when all pending telemetry items have been submitted -+// (it is then safe to shut down without losing telemetry) or when -+// the context is canceled. -+func (channel *inMemoryChannel) close(ctx context.Context) { -+ channel.closeOnce.Do(func() { -+ channel.closed.Store(true) -+ select { -+ case channel.flushChan <- struct{}{}: -+ case <-channel.cancelCtx.Done(): -+ // acceptLoop already exited. -+ } -+ select { -+ case <-ctx.Done(): -+ channel.cancelCauseFunc(context.Cause(ctx)) -+ case <-channel.cancelCtx.Done(): -+ // Successfully flushed -+ } -+ channel.checkInflight() -+ }) -+} ++replace github.com/microsoft/go/cryptobackend => ../../cryptobackend +diff --git a/src/go.sum b/src/go.sum +index ab34844da17757..76c16dd97f3fbd 100644 +--- a/src/go.sum ++++ b/src/go.sum +@@ -1,3 +1,9 @@ ++github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b h1:uoj3rW1U1TrlBAv7O3SyFzmYEzO7XWtQFE9WozP8TGc= ++github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b/go.mod h1:QahyqOoEDhEJ08aC1WtiWq691LyNgXq3qrjI4QmdPzM= ++github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7 h1:5iOYJ5Z1aYu/RRlznK4llvmQnudH6eAC0SG009wjMUM= ++github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7/go.mod h1:gJrjX+yWGi9pkbfPVDDh+ZbgjtQoRSXHjb/ZyjwKk34= ++github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825 h1:nmQ1K/L5GISW8UwbUwE376h3WXREEpREFdc3fNklcXc= ++github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825/go.mod h1:a1Z07CJIuWa8WT/pzFIGNTTKS96s8o1B1TPOziAHUxw= + golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 h1:ABD+jVg0H4Hwu2sGcUtKeb3T8mlS+jS3uWrkTAPcXjs= + golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= + golang.org/x/net v0.55.1-0.20260526154343-657eb1317b5d h1:G6GZDsxGyGK2SxMEqnPJfBWRKGCNpWheup5btZYkYpw= +diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go +index f65e709a72f6af..a71759adcb7363 100644 +--- a/src/go/build/deps_test.go ++++ b/src/go/build/deps_test.go +@@ -153,6 +153,13 @@ var depsRules = ` + < internal/syscall/execenv + < SYSCALL; + ++ syscall, unsafe ++ < github.com/microsoft/go-crypto-darwin/internal/fakecgo ++ < github.com/microsoft/go-crypto-darwin/internal/xsyscall ++ < github.com/microsoft/go-crypto-darwin/internal/commoncrypto, ++ github.com/microsoft/go-crypto-darwin/internal/cryptokit, ++ github.com/microsoft/go-crypto-darwin/internal/security; + -+func (channel *inMemoryChannel) checkInflight() { -+ if inflight := channel.inflight.Load(); inflight > 0 { -+ channel.error("client closed with pending items", "itemsLost", inflight) -+ } -+} + # TIME is SYSCALL plus the core packages about time, including context. + SYSCALL + < time/tzdata +@@ -540,16 +547,46 @@ var depsRules = ` + NONE < crypto/internal/boring/sig, crypto/internal/boring/syso; + sync/atomic < crypto/internal/boring/bcache; + +- FIPS, internal/godebug, embed, +- crypto/internal/boring/sig, +- crypto/internal/boring/syso, +- crypto/internal/boring/bcache ++ syscall, strconv ++ < github.com/microsoft/go-crypto-openssl/internal/fakecgo ++ < github.com/microsoft/go-crypto-openssl/internal/ossl ++ < github.com/microsoft/go-crypto-openssl/osslsetup; + -+func (channel *inMemoryChannel) acceptLoop() { -+ channel.start() -+} ++ syscall, strconv ++ < github.com/microsoft/go-crypto-winnative/internal/subtle ++ < github.com/microsoft/go-crypto-winnative/internal/sysdll ++ < github.com/microsoft/go-crypto-winnative/internal/bcrypt; + -+// Part of channel accept loop: Initialize buffer and accept first message, handle controls. -+func (channel *inMemoryChannel) start() { -+ items := make([]batchItem, 0, channel.batchSize) -+ timer := time.NewTimer(time.Hour) -+ timer.Stop() // Stop timer until we need it. -+ var dropped int -+ for { -+ select { -+ case item := <-channel.collectChan: -+ if item == nil { -+ panic("received nil event") -+ } -+ if channel.throttled.Load() { -+ // Check if there is space to add the item to the batch. -+ // If not, then drop the event. -+ if len(items) < channel.batchSize { -+ channel.inflight.Add(1) -+ items = append(items, batchItem{item, 0}) -+ } else { -+ dropped++ -+ } -+ continue -+ } -+ channel.inflight.Add(1) -+ items = append(items, batchItem{item, 0}) -+ if len(items) >= channel.batchSize { -+ timer.Stop() -+ channel.sendBatch(items) -+ items = items[:0] -+ } else if len(items) == 1 { -+ // Start the timer if this is the first item in the batch. -+ timer.Reset(channel.batchInterval) -+ } ++ FIPS, internal/godebug, embed + < crypto/internal/fips140only + < crypto + < crypto/subtle ++ < crypto/cipher; + -+ case <-channel.flushChan: -+ if channel.throttled.Load() { -+ // Ignore the flush request if we are throttled. -+ continue -+ } -+ timer.Stop() -+ channel.sendBatch(items) -+ items = items[:0] ++ crypto, crypto/subtle, hash, crypto/cipher, ++ github.com/microsoft/go-crypto-openssl/osslsetup ++ < github.com/microsoft/go-crypto-openssl/openssl; + -+ case <-timer.C: -+ if channel.throttled.Load() { -+ // When throttled, the timer is reset to the retry time, -+ // so if we get here, then we're no longer throttled. -+ channel.throttled.Store(false) -+ if dropped > 0 { -+ channel.error("items dropped due to throttling", "itemsLost", dropped) -+ dropped = 0 -+ } -+ } -+ channel.sendBatch(items) -+ items = items[:0] ++ crypto, crypto/subtle, hash, crypto/cipher, ++ github.com/microsoft/go-crypto-darwin/internal/commoncrypto, ++ github.com/microsoft/go-crypto-darwin/internal/security, ++ github.com/microsoft/go-crypto-darwin/internal/cryptokit ++ < github.com/microsoft/go-crypto-darwin/xcrypto; + -+ case msg := <-channel.retryChan: -+ channel.info("items enqueued for retry", "count", len(msg.items), "throttled", msg.throttled, "retryAfter", msg.retryAfter) -+ // If there is not enough space in the batch, drop the items. -+ space := channel.batchSize - len(items) -+ if space < len(msg.items) { -+ dropped += len(msg.items) - space -+ msg.items = msg.items[:space] -+ } -+ items = append(items, msg.items...) ++ crypto, crypto/subtle, hash, crypto/cipher, ++ github.com/microsoft/go-crypto-winnative/internal/bcrypt ++ < github.com/microsoft/go-crypto-winnative/cng; + -+ if msg.throttled { -+ channel.throttled.Store(true) -+ } -+ if msg.retryAfter.IsZero() { -+ // If the retry time is not set, use the default batch interval. -+ timer.Reset(channel.batchInterval) -+ } else { -+ timer.Reset(time.Until(msg.retryAfter)) -+ } ++ FIPS, internal/godebug, embed, ++ crypto/internal/boring/sig, ++ crypto/internal/boring/syso, ++ crypto/internal/boring/bcache, ++ crypto/internal/fips140only, ++ crypto, ++ crypto/subtle, ++ crypto/cipher + < crypto/sha3 + < crypto/internal/fips140hash +- < crypto/cipher + < crypto/internal/boring + < crypto/boring + < crypto/internal/rand +@@ -575,6 +612,10 @@ var depsRules = ` + + # CRYPTO-MATH is crypto that exposes math/big APIs - no cgo, net; fmt now ok. + ++ math/big, github.com/microsoft/go-crypto-openssl/openssl < github.com/microsoft/go-crypto-openssl/bbig; ++ math/big, github.com/microsoft/go-crypto-darwin/xcrypto < github.com/microsoft/go-crypto-darwin/bbig; ++ math/big, github.com/microsoft/go-crypto-winnative/cng < github.com/microsoft/go-crypto-winnative/cng/bbig; + -+ case <-channel.cancelCtx.Done(): -+ // This is the only path to exit the loop. -+ timer.Stop() -+ return -+ } -+ } -+} -+ -+// sendBatch schedules a batch of items for transmission. -+func (channel *inMemoryChannel) sendBatch(items []batchItem) { -+ channel.sendQueueMu.Lock() -+ defer channel.sendQueueMu.Unlock() -+ -+ if len(items) == 0 { -+ // Cancel the accept loop if we are closed and the queue is empty. -+ if len(channel.sendQueue) == 0 && channel.closed.Load() { -+ channel.cancelCauseFunc(errClosed) -+ } -+ return -+ } -+ -+ // Copy the items to a temporary buffer to let the caller -+ // reuse the item slice. The size of items is capped to the -+ // maximum batch size, so the length of the polled buffer -+ // can't grow unbounded. -+ buf := channel.itemsBuf.Get().(*[]batchItem) -+ *buf = (*buf)[:0] -+ *buf = append(*buf, items...) -+ channel.sendQueue = append(channel.sendQueue, buf) -+ -+ // Start a goroutine to transmit the items without blocking -+ // the accept loop. -+ go func() { -+ retry := channel.transmitRetry() -+ channel.sendQueueMu.Lock() -+ defer channel.sendQueueMu.Unlock() -+ if !retry && len(channel.sendQueue) == 0 && channel.closed.Load() { -+ // Cancel the accept loop if we are closed and the queue is empty. -+ channel.cancelCauseFunc(errClosed) -+ } -+ }() -+} -+ -+// transmitRetry pops the first item from the queue and transmits it. -+// If the transmission fails, it retries the items that can be retried. -+// Returns true if some items were retried. -+func (channel *inMemoryChannel) transmitRetry() bool { -+ // Allow only one goroutine to transmit at a time. -+ channel.sendMu.Lock() -+ defer channel.sendMu.Unlock() -+ -+ // Pop the first item from the queue. -+ channel.sendQueueMu.Lock() -+ itemsPtr := channel.sendQueue[0] -+ channel.sendQueue = channel.sendQueue[1:] -+ channel.sendQueueMu.Unlock() -+ -+ defer channel.itemsBuf.Put(itemsPtr) -+ resp, err := channel.transmitter.transmit(channel.cancelCtx, *itemsPtr) -+ if err != nil { -+ if resp == nil { -+ channel.inflight.Add(-int64(len(*itemsPtr))) -+ channel.error("upload request failed", "itemsLost", len(*itemsPtr), "error", err) -+ return false -+ } -+ } -+ if resp.isSuccess() { -+ channel.inflight.Add(-int64(len(*itemsPtr))) -+ return false -+ } -+ -+ // If the response is not successful, check if we can retry. -+ succCount, failCount, retryItems := resp.result(*itemsPtr) -+ -+ // Remove items that have been retried too many times. -+ retries := len(retryItems) -+ retryItems = slices.DeleteFunc(retryItems, func(item batchItem) bool { -+ return item.retries > 2 -+ }) -+ for i := range retryItems { -+ retryItems[i].retries++ -+ } -+ -+ dropped := retries - len(retryItems) -+ channel.inflight.Add(-int64(succCount + failCount + dropped)) -+ if failCount > 0 { -+ channel.error("server rejected items", "itemsLost", failCount, "statusCode", resp.statusCode) -+ } -+ if dropped > 0 { -+ channel.error("items dropped due to retry limit", "itemsLost", dropped) -+ } -+ if len(retryItems) == 0 { -+ return false -+ } -+ channel.retry(resp.isThrottled(), resp.retryAfter, retryItems) -+ return true -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/contexttagkeys.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/contexttagkeys.go -new file mode 100644 -index 00000000000000..58b0d5dc34d954 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/contexttagkeys.go -@@ -0,0 +1,50 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package contracts -+ -+import ( -+ "errors" -+ "fmt" -+) -+ -+type ContextTags map[string]string -+ -+var tagMaxLengths = map[string]int{ -+ "ai.application.ver": 1024, -+ "ai.device.id": 1024, -+ "ai.device.locale": 64, -+ "ai.device.model": 256, -+ "ai.device.oemName": 256, -+ "ai.device.osVersion": 256, -+ "ai.device.type": 64, -+ "ai.location.ip": 46, -+ "ai.operation.id": 128, -+ "ai.operation.name": 1024, -+ "ai.operation.parentId": 128, -+ "ai.operation.syntheticSource": 1024, -+ "ai.operation.correlationVector": 64, -+ "ai.session.id": 64, -+ "ai.session.isFirst": 5, -+ "ai.user.accountId": 1024, -+ "ai.user.id": 128, -+ "ai.user.authUserId": 1024, -+ "ai.cloud.role": 256, -+ "ai.cloud.roleInstance": 256, -+ "ai.internal.sdkVersion": 64, -+ "ai.internal.agentVersion": 64, -+ "ai.internal.nodeName": 256, -+} -+ -+// Truncates tag values that exceed their maximum supported lengths. Returns -+// warnings for each affected field. -+func SanitizeTags(tags map[string]string) error { -+ var errs []error -+ for k, v := range tags { -+ if maxlen, ok := tagMaxLengths[k]; ok && len(v) > maxlen { -+ tags[k] = v[:maxlen] -+ errs = append(errs, fmt.Errorf("%s exceeded maximum length of %d", k, maxlen)) -+ } -+ } -+ return errors.Join(errs...) -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/envelope.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/envelope.go -new file mode 100644 -index 00000000000000..511b8c4a62f551 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/envelope.go -@@ -0,0 +1,123 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package contracts -+ -+import ( -+ "errors" -+ "fmt" -+ "time" -+) -+ -+// Data struct to contain both B and C sections. -+type Data struct { -+ BaseType string `json:"baseType"` -+ BaseData EventData `json:"baseData"` -+} -+ -+// EventData represents structured event records that can be grouped -+// and searched by their properties. Event data item also creates a metric of -+// event count by name. -+type EventData struct { -+ // Schema version -+ Ver int `json:"ver"` -+ -+ // Event name. Keep it low cardinality to allow proper grouping and useful -+ // metrics. -+ Name string `json:"name"` -+ -+ // Properties is a collection of custom properties for this specific event. -+ Properties map[string]string `json:"properties,omitempty"` -+} -+ -+// Envelope is the telemetry payload that is sent to the Application Insights. -+type Envelope struct { -+ // Envelope version. For internal use only. By assigning this the default, it -+ // will not be serialized within the payload unless changed to a value other -+ // than #1. -+ Ver int `json:"ver"` -+ -+ // Type name of telemetry data item. -+ Name string `json:"name"` -+ -+ // Event date time when telemetry item was created. This is the wall clock -+ // time on the client when the event was generated. There is no guarantee that -+ // the client's time is accurate. This field must be formatted in UTC ISO 8601 -+ // format, with a trailing 'Z' character, as described publicly on -+ // https://en.wikipedia.org/wiki/ISO_8601#UTC. Note: the number of decimal -+ // seconds digits provided are variable (and unspecified). Consumers should -+ // handle this, i.e. managed code consumers should not use format 'O' for -+ // parsing as it specifies a fixed length. Example: -+ // 2009-06-15T13:45:30.0000000Z. -+ Time time.Time `json:"time"` -+ -+ // Sampling rate used in application. This telemetry item represents 1 / -+ // sampleRate actual telemetry items. -+ SampleRate float64 `json:"sampleRate"` -+ -+ // Sequence field used to track absolute order of uploaded events. -+ Seq string `json:"seq"` -+ -+ // The application's instrumentation key. The key is typically represented as -+ // a GUID, but there are cases when it is not a guid. No code should rely on -+ // iKey being a GUID. Instrumentation key is case insensitive. -+ IKey string `json:"iKey"` -+ -+ // Key/value collection of context properties. See ContextTagKeys for -+ // information on available properties. -+ Tags map[string]string `json:"tags,omitempty"` -+ -+ // Telemetry data item. -+ Data Data `json:"data"` -+} -+ -+// Sanitize truncates string fields that exceed their maximum supported sizes for this -+// object and all objects it references. Returns a warning for each affected -+// field. -+func (data *Envelope) Sanitize() error { -+ var errs []error -+ -+ if len(data.Name) > 1024 { -+ data.Name = data.Name[:1024] -+ errs = append(errs, errors.New("Envelope.Name exceeded maximum length of 1024")) -+ } -+ -+ if props := data.Data.BaseData.Properties; len(props) > 0 { -+ for k, v := range props { -+ if len(v) > 8192 { -+ props[k] = v[:8192] -+ errs = append(errs, fmt.Errorf("EventData.Properties has value with length exceeding max of 8192: %v", v)) -+ } -+ if len(k) > 150 { -+ props[k[:150]] = props[k] -+ delete(props, k) -+ errs = append(errs, fmt.Errorf("EventData.Properties has key with length exceeding max of 150: %v", k)) -+ } -+ } -+ } -+ -+ if len(data.Seq) > 64 { -+ data.Seq = data.Seq[:64] -+ errs = append(errs, errors.New("Envelope.Seq exceeded maximum length of 64")) -+ } -+ -+ if len(data.IKey) > 40 { -+ data.IKey = data.IKey[:40] -+ errs = append(errs, errors.New("Envelope.IKey exceeded maximum length of 40")) -+ } -+ -+ if len(data.Data.BaseData.Name) > 512 { -+ data.Data.BaseData.Name = data.Data.BaseData.Name[:512] -+ errs = append(errs, errors.New("EventData.Name exceeded maximum length of 512")) -+ } -+ -+ return errors.Join(errs...) -+} -+ -+// NewEnvelope creates a new [Envelope] instance with default values set by the schema. -+func NewEnvelope() *Envelope { -+ return &Envelope{ -+ Ver: 1, -+ SampleRate: 100.0, -+ } -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/response.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/response.go -new file mode 100644 -index 00000000000000..f7d291fdab8927 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts/response.go -@@ -0,0 +1,32 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package contracts -+ -+import "fmt" -+ -+const ( -+ tooManyRequestsOverExtendedTimeResponse = 439 -+) -+ -+// BackendResponse represents the response from the Application Insights backend. -+type BackendResponse struct { -+ ItemsReceived int `json:"itemsReceived"` -+ ItemsAccepted int `json:"itemsAccepted"` -+ Errors []BackendResponseError `json:"errors"` -+} -+ -+func (r *BackendResponse) IsSucess() bool { -+ return r.ItemsReceived == r.ItemsAccepted -+} -+ -+// BackendResponseError represents an error in the response from the Application Insights backend. -+type BackendResponseError struct { -+ Index int `json:"index"` -+ StatusCode int `json:"statusCode"` -+ Message string `json:"message"` -+} -+ -+func (r BackendResponseError) Error() string { -+ return fmt.Errorf("index: %d, statusCode: %d, message: %s", r.Index, r.StatusCode, r.Message).Error() -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/jsonserializer.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/jsonserializer.go -new file mode 100644 -index 00000000000000..02fe54dae88963 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/jsonserializer.go -@@ -0,0 +1,33 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package appinsights -+ -+import ( -+ "bytes" -+ "encoding/json" -+ "fmt" -+) -+ -+func serialize(items []batchItem) ([]byte, error) { -+ var result bytes.Buffer -+ encoder := json.NewEncoder(&result) -+ -+ var nfail int -+ for _, item := range items { -+ end := result.Len() -+ if err := encoder.Encode(item.item); err != nil { -+ nfail++ -+ result.Truncate(end) -+ } -+ } -+ ret := result.Bytes() -+ if nfail > 0 { -+ if nfail == len(items) { -+ ret = nil -+ } -+ return ret, fmt.Errorf("failed to serialize %d items out of %d", nfail, len(items)) -+ } -+ -+ return ret, nil -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/package.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/package.go -new file mode 100644 -index 00000000000000..9c2f950a309e5e ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/package.go -@@ -0,0 +1,13 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Package appinsights provides an interface to submit telemetry to Application Insights, -+// a component of Azure Monitor. This package calls the Classic API. -+// See https://learn.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics -+package appinsights -+ -+const ( -+ sdkName = "go-infra/telemetry" -+ Version = "v0.0.1" -+ internalVersion = sdkName + ":" + Version -+) -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/telemetrycontext.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/telemetrycontext.go -new file mode 100644 -index 00000000000000..a2e954ae84aa6e ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/telemetrycontext.go -@@ -0,0 +1,44 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package appinsights -+ -+import ( -+ "time" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts" -+) -+ -+// telemetryContext encapsulates contextual data common to all telemetry submitted through a -+// TelemetryClient instance such as including instrumentation key, tags, and -+// common properties. -+type telemetryContext struct { -+ // Instrumentation key -+ iKey string -+ -+ // Collection of tag data to attach to the telemetry item. -+ Tags contracts.ContextTags -+} -+ -+// newTelemetryContext creates a new, empty telemetryContext. -+func newTelemetryContext(ikey string) *telemetryContext { -+ return &telemetryContext{ -+ iKey: ikey, -+ Tags: make(contracts.ContextTags), -+ } -+} -+ -+// Wraps a telemetry item in an envelope with the information found in this -+// context. -+func (context *telemetryContext) envelop(data contracts.EventData) *contracts.Envelope { -+ envelope := contracts.NewEnvelope() -+ envelope.Name = "Microsoft.ApplicationInsights.Event" -+ envelope.Data = contracts.Data{ -+ BaseType: "EventData", -+ BaseData: data, -+ } -+ envelope.IKey = context.iKey -+ envelope.Time = time.Now().UTC() -+ envelope.Tags = context.Tags -+ return envelope -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/transmitter.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/transmitter.go -new file mode 100644 -index 00000000000000..0299c87c81cb41 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/appinsights/transmitter.go -@@ -0,0 +1,172 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package appinsights -+ -+import ( -+ "bytes" -+ "cmp" -+ "compress/gzip" -+ "context" -+ "encoding/json" -+ "errors" -+ "fmt" -+ "io" -+ "net/http" -+ "slices" -+ "time" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts" -+) -+ -+type transmitter interface { -+ transmit(ctx context.Context, items []batchItem) (*transmissionResponse, error) -+} -+ -+type httpTransmitter struct { -+ endpoint string -+ client *http.Client -+} -+ -+type transmissionResponse struct { -+ statusCode int -+ retryAfter time.Time -+ response contracts.BackendResponse -+} -+ -+const ( -+ successResponse = http.StatusOK -+ partialSuccessResponse = http.StatusPartialContent -+ requestTimeoutResponse = http.StatusRequestTimeout -+ tooManyRequestsResponse = http.StatusTooManyRequests -+ tooManyRequestsOverExtendedTimeResponse = 439 -+ errorResponse = http.StatusInternalServerError -+ serviceUnavailableResponse = http.StatusServiceUnavailable -+) -+ -+func newTransmitter(endpointAddress string, client *http.Client) transmitter { -+ if client == nil { -+ client = http.DefaultClient -+ } -+ return &httpTransmitter{endpointAddress, client} -+} -+ -+func (transmitter *httpTransmitter) transmit(ctx context.Context, items []batchItem) (*transmissionResponse, error) { -+ // Serialize the items. It could be that some items can't be serialized, -+ // in which case we will skip them and return an error together with the -+ // transmission result. -+ payload, jsonErr := serialize(items) -+ if jsonErr != nil && payload == nil { -+ return nil, jsonErr -+ } -+ -+ // Compress the payload -+ var postBody bytes.Buffer -+ gzipWriter := gzip.NewWriter(&postBody) -+ if _, err := gzipWriter.Write(payload); err != nil { -+ gzipWriter.Close() -+ return nil, fmt.Errorf("failed to compress the payload: %v", err) -+ } -+ -+ if err := gzipWriter.Close(); err != nil { -+ return nil, fmt.Errorf("failed to close gzip writer: %v", err) -+ } -+ -+ req, err := http.NewRequestWithContext(ctx, http.MethodPost, transmitter.endpoint, &postBody) -+ if err != nil { -+ return nil, fmt.Errorf("failed to create request: %v", err) -+ } -+ -+ req.Header.Set("Content-Encoding", "gzip") -+ req.Header.Set("Content-Type", "application/x-json-stream") -+ req.Header.Set("Accept-Encoding", "gzip, deflate") -+ -+ resp, err := transmitter.client.Do(req) -+ if err != nil { -+ return nil, fmt.Errorf("failed to send request: %v", err) -+ } -+ defer resp.Body.Close() -+ -+ result := &transmissionResponse{statusCode: resp.StatusCode} -+ if retryAfterValue := resp.Header.Get("Retry-After"); retryAfterValue != "" { -+ if result.retryAfter, err = time.Parse(time.RFC1123, retryAfterValue); err != nil { -+ return nil, fmt.Errorf("failed to parse Retry-After header: %v", err) -+ } -+ } -+ if err := json.NewDecoder(resp.Body).Decode(&result.response); err != nil { -+ if errors.Is(err, io.EOF) { -+ // Empty response is valid, possibly throttling. -+ return result, nil -+ } -+ return nil, fmt.Errorf("failed to parse response: %v", err) -+ } -+ return result, jsonErr -+} -+ -+func (resp *transmissionResponse) isSuccess() bool { -+ return resp.statusCode == successResponse || -+ // Partial response but all items accepted -+ (resp.statusCode == partialSuccessResponse && -+ resp.response.ItemsReceived == resp.response.ItemsAccepted) -+} -+ -+func (resp *transmissionResponse) canRetry() bool { -+ if resp.isSuccess() { -+ return false -+ } -+ -+ return resp.statusCode == partialSuccessResponse || -+ !resp.retryAfter.IsZero() || -+ (resp.statusCode == requestTimeoutResponse || -+ resp.statusCode == serviceUnavailableResponse || -+ resp.statusCode == errorResponse || -+ resp.statusCode == tooManyRequestsResponse || -+ resp.statusCode == tooManyRequestsOverExtendedTimeResponse) -+} -+ -+func (resp *transmissionResponse) isThrottled() bool { -+ return resp.statusCode == tooManyRequestsResponse || -+ resp.statusCode == tooManyRequestsOverExtendedTimeResponse || -+ !resp.retryAfter.IsZero() -+} -+ -+func canRetryBackendError(berror contracts.BackendResponseError) bool { -+ return berror.StatusCode == requestTimeoutResponse || -+ berror.StatusCode == serviceUnavailableResponse || -+ berror.StatusCode == errorResponse || -+ berror.StatusCode == tooManyRequestsResponse || -+ berror.StatusCode == tooManyRequestsOverExtendedTimeResponse -+} -+ -+// result returns the number of succeeded and failed items, and a list of items that can be retried. -+// Items is the complete list of result that was sent. -+func (resp *transmissionResponse) result(items []batchItem) (succeed, failed int, retries []batchItem) { -+ if resp.statusCode == partialSuccessResponse { -+ // Make sure errors are ordered by index -+ slices.SortFunc(resp.response.Errors, func(a, b contracts.BackendResponseError) int { -+ return cmp.Compare(a.Index, b.Index) -+ }) -+ -+ retries = make([]batchItem, 0, len(resp.response.Errors)) -+ // Find each retryable error -+ for _, responseResult := range resp.response.Errors { -+ if responseResult.StatusCode == successResponse { -+ succeed++ -+ continue -+ } -+ if !canRetryBackendError(responseResult) { -+ failed++ -+ continue -+ } -+ if responseResult.Index >= len(items) { -+ continue -+ } -+ retries = append(retries, items[responseResult.Index]) -+ } -+ -+ return succeed, failed, retries -+ } else if resp.canRetry() { -+ return 0, 0, items -+ } -+ return 0, len(items), nil -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/config/config.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/config/config.go -new file mode 100644 -index 00000000000000..e0070ab70977e5 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/config/config.go -@@ -0,0 +1,80 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package config -+ -+import ( -+ "encoding/json" -+ "os" -+ "strings" -+) -+ -+// An UploadConfig controls what data is uploaded. -+type UploadConfig struct { -+ GOOS []string -+ GOARCH []string -+ Programs []*ProgramConfig -+} -+ -+// A ProgramConfig contains the configuration for a single program. -+type ProgramConfig struct { -+ // The counter and property names may have to be repeated for each -+ // program (e.g., if they are defined in a package used by more than -+ // one program). -+ Name string -+ Counters []CounterConfig `json:",omitempty"` -+} -+ -+// A CounterConfig contains the configuration for a single counter. -+// Counters may optionally declare associated property event names. -+type CounterConfig struct { -+ Name string // The "collapsed" counter: :{,,...} -+ Properties []string `json:",omitempty"` // Associated property event names -+} -+ -+func ReadConfig(file string) (*UploadConfig, error) { -+ data, err := os.ReadFile(file) -+ if err != nil { -+ return nil, err -+ } -+ return UnmarshalConfig(data) -+} -+ -+func UnmarshalConfig(data []byte) (*UploadConfig, error) { -+ var cfg UploadConfig -+ if err := json.Unmarshal(data, &cfg); err != nil { -+ return nil, err -+ } -+ return &cfg, nil -+} -+ -+// Expand takes a counter defined with buckets and expands it into distinct -+// strings for each bucket. If the counter ends with "*" (e.g. "go/package:*"), -+// it is returned as-is to indicate a wildcard prefix match. -+func Expand(counter string) []string { -+ if strings.HasSuffix(counter, "*") { -+ return []string{counter} -+ } -+ prefix, rest, hasBuckets := strings.Cut(counter, "{") -+ var counters []string -+ if hasBuckets { -+ buckets := strings.SplitSeq(strings.TrimSuffix(rest, "}"), ",") -+ for b := range buckets { -+ counters = append(counters, prefix+b) -+ } -+ } else { -+ counters = append(counters, prefix) -+ } -+ return counters -+} -+ -+// IsWildcard reports whether the counter name is a wildcard pattern. -+func IsWildcard(name string) bool { -+ return strings.HasSuffix(name, "*") -+} -+ -+// WildcardPrefix returns the prefix of a wildcard counter name, -+// stripping the trailing "*". -+func WildcardPrefix(name string) string { -+ return strings.TrimSuffix(name, "*") -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/proginfo.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/proginfo.go -new file mode 100644 -index 00000000000000..4dd4b5b3243a0d ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/proginfo.go -@@ -0,0 +1,46 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package telemetry -+ -+import ( -+ "go/version" -+ "os" -+ "path/filepath" -+ "runtime/debug" -+ "strings" -+) -+ -+// ProgramInfo extracts the go version and program package path to use for counter files. -+// -+// For programs in the Go toolchain, the program version will be the same as -+// the Go version, and will typically be of the form "go1.2.3", not a semantic -+// version of the form "v1.2.3". Go versions may also include spaces and -+// special characters. -+func ProgramInfo(info *debug.BuildInfo, trimTestSuffix bool) (goVers, progPath string) { -+ goVers = info.GoVersion -+ if strings.Contains(goVers, "devel") || strings.Contains(goVers, "-") || !version.IsValid(goVers) { -+ if v, rest, ok := strings.Cut(goVers, "-microsoft"); ok && -+ version.IsValid(v) && -+ !strings.Contains(rest, "devel") { -+ -+ // For schemas like "go1.21.1-0-microsoft", "go1.21-microsoft", and -+ // "go1.21rc1-microsoft", keep the revision number (if any is -+ // present) and remove everything after. -+ goVers = v -+ } else { -+ // This may be a schema like "go1.21-microsoft-devel_abc123 ..." -+ goVers = "devel" -+ } -+ } -+ -+ progPath = info.Path -+ if progPath == "" { -+ progPath = strings.TrimSuffix(filepath.Base(os.Args[0]), ".exe") -+ } -+ if trimTestSuffix { -+ progPath, _ = strings.CutSuffix(progPath, ".test") // Remove ".test" suffix added by "go test" -+ } -+ -+ return goVers, progPath -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/telemetry.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/telemetry.go -new file mode 100644 -index 00000000000000..02d112edb8ad3e ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/internal/telemetry/telemetry.go -@@ -0,0 +1,32 @@ -+package telemetry -+ -+import ( -+ "crypto/rand" -+ "fmt" -+ "runtime" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights" -+) -+ -+// Client is the global telemetry client used to send telemetry data. -+// -+// It is kept in an internal package to prevent direct access -+// from outside the telemetry package. -+var Client *appinsights.Client -+ -+// Init adds common tags to the telemetry client then assigns it to [Client]. -+func Init(client *appinsights.Client) { -+ if client.Tags == nil { -+ client.Tags = make(map[string]string) -+ } -+ -+ // Generate a random session ID to uniquely identify this telemetry session. -+ var sessionID [32]byte -+ rand.Read(sessionID[:]) -+ -+ // Add common tags to the client. -+ client.Tags["ai.device.osVersion"] = runtime.GOOS + "/" + runtime.GOARCH -+ client.Tags["ai.session.id"] = fmt.Sprintf("%x", sessionID[:]) -+ -+ Client = client -+} -diff --git a/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/telemetry.go b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/telemetry.go -new file mode 100644 -index 00000000000000..016de9bdd95956 ---- /dev/null -+++ b/src/cmd/vendor/github.com/microsoft/go-infra/telemetry/telemetry.go -@@ -0,0 +1,168 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package telemetry -+ -+import ( -+ "context" -+ "fmt" -+ "log/slog" -+ "runtime" -+ "runtime/debug" -+ "slices" -+ "strings" -+ "time" -+ -+ "github.com/microsoft/go-infra/telemetry/internal/appinsights" -+ "github.com/microsoft/go-infra/telemetry/internal/config" -+ "github.com/microsoft/go-infra/telemetry/internal/telemetry" -+) -+ -+// Config holds the configuration for the telemetry client. -+type Config struct { -+ // The instrumentation key used to identify the application. -+ // This key is required and must be set before sending any telemetry. -+ InstrumentationKey string -+ -+ // UploadConfig is the json-encoded telemetry upload configuration. -+ // This parameter is required. -+ UploadConfig []byte -+ -+ // The endpoint URL to which telemetry will be sent. -+ // If empty, it defaults to https://dc.services.visualstudio.com/v2/track. -+ Endpoint string -+ -+ // Maximum number of telemetry items that can be submitted in each -+ // request. If this many items are buffered, the buffer will be -+ // flushed before MaxBatchInterval expires. -+ // If zero, it defaults to 1024. -+ MaxBatchSize int -+ -+ // Maximum time to wait before sending a batch of telemetry. -+ // If zero, it defaults to 10 seconds. -+ MaxBatchInterval time.Duration -+ -+ // Allow uploading telemetry for Go development versions even if the -+ // upload configuration does not explicitly include them. -+ AllowGoDevel bool -+ -+ // If true, remove ".test" suffix from program name when running tests. -+ TrimTestSuffix bool -+ -+ // Logger specifies a structured logger. -+ // If nil nothing is logged. -+ Logger *slog.Logger -+} -+ -+var eventsToUpload map[string]struct{} -+var wildcardPrefixes []string -+var allowedProperties map[string]map[string]struct{} -+ -+// Start initializes telemetry using the specified configuration. -+func Start(cfg Config) { -+ if cfg.UploadConfig == nil { -+ panic("UploadConfigPath must be set in telemetry.Config") -+ } -+ uploadConfig, err := config.UnmarshalConfig(cfg.UploadConfig) -+ if err != nil { -+ panic(fmt.Errorf("failed to unmarshal telemetry config: %v", err)) -+ } -+ if !slices.Contains(uploadConfig.GOOS, runtime.GOOS) || -+ !slices.Contains(uploadConfig.GOARCH, runtime.GOARCH) { -+ // Only start telemetry if the current GOOS and GOARCH -+ // are supported by the telemetry configuration. -+ return -+ } -+ bi, ok := debug.ReadBuildInfo() -+ if !ok { -+ panic("failed to read build info for telemetry") -+ } -+ ver, prog := telemetry.ProgramInfo(bi, cfg.TrimTestSuffix) -+ if ver == "devel" { -+ if !cfg.AllowGoDevel { -+ // If the Go version is a development version and we are not allowing -+ // development versions, do not start telemetry. -+ return -+ } -+ } -+ -+ progIdx := slices.IndexFunc(uploadConfig.Programs, func(p *config.ProgramConfig) bool { -+ return p.Name == prog -+ }) -+ if progIdx == -1 { -+ return // Program not configured for telemetry -+ } -+ eventsToUpload = make(map[string]struct{}) -+ allowedProperties = make(map[string]map[string]struct{}) -+ wildcardPrefixes = nil -+ for _, c := range uploadConfig.Programs[progIdx].Counters { -+ if c.Name == "" { -+ continue // Skip empty counter names -+ } -+ for _, e := range config.Expand(c.Name) { -+ if config.IsWildcard(e) { -+ if prefix := config.WildcardPrefix(e); prefix != "" { -+ wildcardPrefixes = append(wildcardPrefixes, prefix) -+ } -+ } else { -+ eventsToUpload[e] = struct{}{} -+ if len(c.Properties) > 0 { -+ keys := make(map[string]struct{}, len(c.Properties)) -+ for _, p := range c.Properties { -+ keys[p] = struct{}{} -+ } -+ allowedProperties[e] = keys -+ } -+ } -+ } -+ } -+ -+ telemetry.Init(&appinsights.Client{ -+ InstrumentationKey: cfg.InstrumentationKey, -+ Endpoint: cfg.Endpoint, -+ MaxBatchSize: cfg.MaxBatchSize, -+ MaxBatchInterval: cfg.MaxBatchInterval, -+ Tags: map[string]string{ -+ "ai.application.ver": ver, -+ "ai.cloud.role": prog, -+ }, -+ UploadFilter: uploadFilter, -+ PropertyFilter: propertyFilter, -+ Logger: cfg.Logger, -+ }) -+} -+ -+// Close closes the telemetry client and flushes any remaining telemetry data. -+// It should be called when the application is shutting down to ensure all -+// telemetry data is sent before the program exits. -+func Close(ctx context.Context) { -+ if telemetry.Client != nil { -+ telemetry.Client.Close(ctx) -+ } -+} -+ -+func uploadFilter(name string) bool { -+ if _, ok := eventsToUpload[name]; ok { -+ return true -+ } -+ for _, prefix := range wildcardPrefixes { -+ if strings.HasPrefix(name, prefix) { -+ return true -+ } -+ } -+ return false -+} -+ -+func propertyFilter(name string, properties map[string]string) map[string]string { -+ keys, ok := allowedProperties[name] -+ if !ok { -+ return nil -+ } -+ filtered := make(map[string]string, len(keys)) -+ for k, v := range properties { -+ if _, ok := keys[k]; ok { -+ filtered[k] = v -+ } -+ } -+ return filtered -+} -diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt -index 4774f1a02e905f..a8e955dc37675e 100644 ---- a/src/cmd/vendor/modules.txt -+++ b/src/cmd/vendor/modules.txt -@@ -16,6 +16,17 @@ github.com/google/pprof/third_party/svgpan - # github.com/ianlancetaylor/demangle v0.0.0-20250417193237-f615e6bd150b - ## explicit; go 1.13 - github.com/ianlancetaylor/demangle -+# github.com/microsoft/go-infra/telemetry v0.0.0-20260526160655-aa04f117b3ce -+## explicit; go 1.25 -+github.com/microsoft/go-infra/telemetry -+github.com/microsoft/go-infra/telemetry/counter -+github.com/microsoft/go-infra/telemetry/internal/appinsights -+github.com/microsoft/go-infra/telemetry/internal/appinsights/internal/contracts -+github.com/microsoft/go-infra/telemetry/internal/config -+github.com/microsoft/go-infra/telemetry/internal/telemetry -+# github.com/microsoft/go-infra/telemetry/config v0.0.0-20260526160655-aa04f117b3ce -+## explicit; go 1.24 -+github.com/microsoft/go-infra/telemetry/config - # golang.org/x/arch v0.27.1-0.20260521044007-9c1a596a2c97 - ## explicit; go 1.25.0 - golang.org/x/arch/arm/armasm -diff --git a/src/crypto/deps_ignore.go b/src/crypto/deps_ignore.go -new file mode 100644 -index 00000000000000..cae305b5923b8d ---- /dev/null -+++ b/src/crypto/deps_ignore.go -@@ -0,0 +1,40 @@ -+// Copyright 2025 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build ms_ignore_backend_deps -+ -+package main -+ -+import ( -+ _ "github.com/microsoft/go/cryptobackend" -+ _ "github.com/microsoft/go/cryptobackend/aes" -+ _ "github.com/microsoft/go/cryptobackend/aes/gcm" -+ _ "github.com/microsoft/go/cryptobackend/bbig" -+ _ "github.com/microsoft/go/cryptobackend/chacha20poly1305" -+ _ "github.com/microsoft/go/cryptobackend/des" -+ _ "github.com/microsoft/go/cryptobackend/drbg" -+ _ "github.com/microsoft/go/cryptobackend/dsa" -+ _ "github.com/microsoft/go/cryptobackend/ecdh" -+ _ "github.com/microsoft/go/cryptobackend/ecdsa" -+ _ "github.com/microsoft/go/cryptobackend/ed25519" -+ _ "github.com/microsoft/go/cryptobackend/fips140" -+ _ "github.com/microsoft/go/cryptobackend/hash" -+ _ "github.com/microsoft/go/cryptobackend/hkdf" -+ _ "github.com/microsoft/go/cryptobackend/hmac" -+ _ "github.com/microsoft/go/cryptobackend/md5" -+ _ "github.com/microsoft/go/cryptobackend/mldsa" -+ _ "github.com/microsoft/go/cryptobackend/mlkem" -+ _ "github.com/microsoft/go/cryptobackend/pbkdf2" -+ _ "github.com/microsoft/go/cryptobackend/rc4" -+ _ "github.com/microsoft/go/cryptobackend/rsa" -+ _ "github.com/microsoft/go/cryptobackend/sha1" -+ _ "github.com/microsoft/go/cryptobackend/sha256" -+ _ "github.com/microsoft/go/cryptobackend/sha3" -+ _ "github.com/microsoft/go/cryptobackend/sha512" -+ _ "github.com/microsoft/go/cryptobackend/tls12" -+ _ "github.com/microsoft/go/cryptobackend/tls13" -+) -+ -+// This file is here just to declare cryptobackend dependencies. -+// This allows tracking their versions in a single patch file. -diff --git a/src/go.mod b/src/go.mod -index bb6abc93792f39..7c68bbbafda72a 100644 ---- a/src/go.mod -+++ b/src/go.mod -@@ -3,11 +3,17 @@ module std - go 1.27 - - require ( -- golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 -- golang.org/x/net v0.55.1-0.20260526154343-657eb1317b5d -+ github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b // indirect -+ github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7 // indirect -+ github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825 // indirect -+ golang.org/x/sys v0.45.0 // indirect -+ golang.org/x/text v0.37.0 // indirect - ) - - require ( -- golang.org/x/sys v0.45.0 // indirect -- golang.org/x/text v0.37.0 // indirect -+ github.com/microsoft/go/cryptobackend v0.0.0 -+ golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 -+ golang.org/x/net v0.55.1-0.20260526154343-657eb1317b5d - ) -+ -+replace github.com/microsoft/go/cryptobackend => ../../cryptobackend -diff --git a/src/go.sum b/src/go.sum -index ab34844da17757..76c16dd97f3fbd 100644 ---- a/src/go.sum -+++ b/src/go.sum -@@ -1,3 +1,9 @@ -+github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b h1:uoj3rW1U1TrlBAv7O3SyFzmYEzO7XWtQFE9WozP8TGc= -+github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b/go.mod h1:QahyqOoEDhEJ08aC1WtiWq691LyNgXq3qrjI4QmdPzM= -+github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7 h1:5iOYJ5Z1aYu/RRlznK4llvmQnudH6eAC0SG009wjMUM= -+github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7/go.mod h1:gJrjX+yWGi9pkbfPVDDh+ZbgjtQoRSXHjb/ZyjwKk34= -+github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825 h1:nmQ1K/L5GISW8UwbUwE376h3WXREEpREFdc3fNklcXc= -+github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825/go.mod h1:a1Z07CJIuWa8WT/pzFIGNTTKS96s8o1B1TPOziAHUxw= - golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 h1:ABD+jVg0H4Hwu2sGcUtKeb3T8mlS+jS3uWrkTAPcXjs= - golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= - golang.org/x/net v0.55.1-0.20260526154343-657eb1317b5d h1:G6GZDsxGyGK2SxMEqnPJfBWRKGCNpWheup5btZYkYpw= -diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go -index f65e709a72f6af..a71759adcb7363 100644 ---- a/src/go/build/deps_test.go -+++ b/src/go/build/deps_test.go -@@ -153,6 +153,13 @@ var depsRules = ` - < internal/syscall/execenv - < SYSCALL; - -+ syscall, unsafe -+ < github.com/microsoft/go-crypto-darwin/internal/fakecgo -+ < github.com/microsoft/go-crypto-darwin/internal/xsyscall -+ < github.com/microsoft/go-crypto-darwin/internal/commoncrypto, -+ github.com/microsoft/go-crypto-darwin/internal/cryptokit, -+ github.com/microsoft/go-crypto-darwin/internal/security; -+ - # TIME is SYSCALL plus the core packages about time, including context. - SYSCALL - < time/tzdata -@@ -540,16 +547,46 @@ var depsRules = ` - NONE < crypto/internal/boring/sig, crypto/internal/boring/syso; - sync/atomic < crypto/internal/boring/bcache; - -- FIPS, internal/godebug, embed, -- crypto/internal/boring/sig, -- crypto/internal/boring/syso, -- crypto/internal/boring/bcache -+ syscall, strconv -+ < github.com/microsoft/go-crypto-openssl/internal/fakecgo -+ < github.com/microsoft/go-crypto-openssl/internal/ossl -+ < github.com/microsoft/go-crypto-openssl/osslsetup; -+ -+ syscall, strconv -+ < github.com/microsoft/go-crypto-winnative/internal/subtle -+ < github.com/microsoft/go-crypto-winnative/internal/sysdll -+ < github.com/microsoft/go-crypto-winnative/internal/bcrypt; -+ -+ FIPS, internal/godebug, embed - < crypto/internal/fips140only - < crypto - < crypto/subtle -+ < crypto/cipher; -+ -+ crypto, crypto/subtle, hash, crypto/cipher, -+ github.com/microsoft/go-crypto-openssl/osslsetup -+ < github.com/microsoft/go-crypto-openssl/openssl; -+ -+ crypto, crypto/subtle, hash, crypto/cipher, -+ github.com/microsoft/go-crypto-darwin/internal/commoncrypto, -+ github.com/microsoft/go-crypto-darwin/internal/security, -+ github.com/microsoft/go-crypto-darwin/internal/cryptokit -+ < github.com/microsoft/go-crypto-darwin/xcrypto; -+ -+ crypto, crypto/subtle, hash, crypto/cipher, -+ github.com/microsoft/go-crypto-winnative/internal/bcrypt -+ < github.com/microsoft/go-crypto-winnative/cng; -+ -+ FIPS, internal/godebug, embed, -+ crypto/internal/boring/sig, -+ crypto/internal/boring/syso, -+ crypto/internal/boring/bcache, -+ crypto/internal/fips140only, -+ crypto, -+ crypto/subtle, -+ crypto/cipher - < crypto/sha3 - < crypto/internal/fips140hash -- < crypto/cipher - < crypto/internal/boring - < crypto/boring - < crypto/internal/rand -@@ -575,6 +612,10 @@ var depsRules = ` - - # CRYPTO-MATH is crypto that exposes math/big APIs - no cgo, net; fmt now ok. - -+ math/big, github.com/microsoft/go-crypto-openssl/openssl < github.com/microsoft/go-crypto-openssl/bbig; -+ math/big, github.com/microsoft/go-crypto-darwin/xcrypto < github.com/microsoft/go-crypto-darwin/bbig; -+ math/big, github.com/microsoft/go-crypto-winnative/cng < github.com/microsoft/go-crypto-winnative/cng/bbig; -+ - CRYPTO, FMT, math/big, internal/saferio - < crypto/internal/boring/bbig - < crypto/internal/fips140cache -@@ -951,7 +992,7 @@ var buildIgnore = []byte("\n//go:build ignore") + CRYPTO, FMT, math/big, internal/saferio + < crypto/internal/boring/bbig + < crypto/internal/fips140cache +@@ -951,7 +992,7 @@ var buildIgnore = []byte("\n//go:build ignore") func findImports(pkg string) ([]string, error) { vpkg := pkg @@ -2871,7 +246,7 @@ index f65e709a72f6af..a71759adcb7363 100644 } fset := token.NewFileSet() diff --git a/src/go/build/vendor_test.go b/src/go/build/vendor_test.go -index 7f6237ffd59c11..18a3b42927d800 100644 +index 7f6237ffd59c11..f4c67e885a37d8 100644 --- a/src/go/build/vendor_test.go +++ b/src/go/build/vendor_test.go @@ -22,6 +22,11 @@ var allowedPackagePrefixes = []string{ @@ -2881,41853 +256,8 @@ index 7f6237ffd59c11..18a3b42927d800 100644 + "github.com/microsoft/go-crypto-openssl", + "github.com/microsoft/go-crypto-winnative", + "github.com/microsoft/go-crypto-darwin", -+ "github.com/microsoft/go/cryptobackend", + "github.com/microsoft/go-infra/telemetry", ++ "github.com/microsoft/go/cryptobackend", } // Verify that the vendor directories contain only packages matching the list above. -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/LICENSE b/src/vendor/github.com/microsoft/go-crypto-darwin/LICENSE -new file mode 100644 -index 00000000000000..9e841e7a26e4eb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/LICENSE -@@ -0,0 +1,21 @@ -+ MIT License -+ -+ Copyright (c) Microsoft Corporation. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a copy -+ of this software and associated documentation files (the "Software"), to deal -+ in the Software without restriction, including without limitation the rights -+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+ copies of the Software, and to permit persons to whom the Software is -+ furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice shall be included in all -+ copies or substantial portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+ SOFTWARE -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/bbig/big.go b/src/vendor/github.com/microsoft/go-crypto-darwin/bbig/big.go -new file mode 100644 -index 00000000000000..73891afeab93d7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/bbig/big.go -@@ -0,0 +1,31 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package bbig -+ -+import ( -+ "math/big" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Enc(b *big.Int) xcrypto.BigInt { -+ if b == nil { -+ return nil -+ } -+ x := b.Bytes() -+ if len(x) == 0 { -+ return xcrypto.BigInt{} -+ } -+ return x -+} -+ -+func Dec(b xcrypto.BigInt) *big.Int { -+ if b == nil { -+ return nil -+ } -+ if len(b) == 0 { -+ return new(big.Int) -+ } -+ return new(big.Int).SetBytes(b) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/commoncrypto.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/commoncrypto.go -new file mode 100644 -index 00000000000000..e1b9ee1d005406 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/commoncrypto.go -@@ -0,0 +1,9 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Package commoncrypto provides a Go interface to the CommonCrypto API -+package commoncrypto -+ -+//go:generate go run ../../cmd/checkheader shims.h -+//go:generate go run ../../cmd/mkcgo -out zcommoncrypto.go -package commoncrypto --noerrors shims.h -+//go:generate go run ../../cmd/mkcgo -out zcommoncrypto.go -nocgo -package commoncrypto --noerrors shims.h -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/shims.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/shims.h -new file mode 100644 -index 00000000000000..de1f9bc059aa43 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/shims.h -@@ -0,0 +1,72 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// This header file is used by the mkcgo tool to generate cgo and Go bindings -+// for the CommonCrypto C API. Run "go generate ." to regenerate the bindings. -+// Do not include this file, import "zcommoncrypto.h" instead. -+ -+#ifndef _GO_COMMONCRYPTO_SHIMS_H // only include this header once -+#define _GO_COMMONCRYPTO_SHIMS_H -+ -+#include // uint64_t -+#include // size_t -+ -+// The following includes are used by the checkheader tool. -+// #include -+ -+typedef void *CCCryptorRef; -+typedef uint32_t CCModeOptions; -+ -+typedef enum { -+ kCCEncrypt = 0, -+ kCCDecrypt = 1, -+} CCOperation; -+ -+typedef enum { -+ kCCModeCBC = 2, -+} CCMode; -+ -+typedef enum { -+ KCCOptionECBMode = 2, -+} CCOptions; -+ -+typedef enum { -+ kCCSuccess = 0, -+} CCCryptorStatus; -+ -+typedef enum { -+ kCCPBKDF2 = 2, -+} CCPBKDFAlgorithm; -+ -+typedef enum { -+ kCCPRFHmacAlgSHA1 = 1, -+ kCCPRFHmacAlgSHA256 = 3, -+ kCCPRFHmacAlgSHA384 = 4, -+ kCCPRFHmacAlgSHA512 = 5, -+} CCPseudoRandomAlgorithm; -+ -+enum { -+ kCCBlockSizeAES128 = 16, -+ kCCBlockSizeDES = 8, -+}; -+ -+typedef enum { -+ ccNoPadding = 0, -+} CCPadding; -+ -+typedef enum { -+ kCCAlgorithmAES = 0, -+ kCCAlgorithmDES = 1, -+ kCCAlgorithm3DES = 2, -+ kCCAlgorithmRC4 = 4, -+} CCAlgorithm; -+ -+CCCryptorStatus CCCryptorCreate(CCOperation op, CCAlgorithm alg, CCOptions options, const void *key, size_t keyLength, const void *iv, CCCryptorRef *cryptorRef) __attribute__((framework(System, B), slice(key, keyLength), slice(iv))); -+CCCryptorStatus CCCryptorRelease(CCCryptorRef cryptorRef) __attribute__((framework(System, B))); -+CCCryptorStatus CCCryptorUpdate(CCCryptorRef cryptorRef, const void *dataIn, size_t dataInLength, void *dataOut, size_t dataOutAvailable, size_t *dataOutMoved) __attribute__((noescape, nocallback, framework(System, B), slice(dataIn, dataInLength), slice(dataOut, dataOutAvailable))); -+CCCryptorStatus CCKeyDerivationPBKDF(CCPBKDFAlgorithm algorithm, const char *password, size_t passwordLen, const uint8_t *salt, size_t saltLen, CCPseudoRandomAlgorithm prf, unsigned rounds, uint8_t *derivedKey, size_t derivedKeyLen) __attribute__((framework(System, B), slice(password, passwordLen), slice(salt, saltLen), slice(derivedKey, derivedKeyLen))); -+CCCryptorStatus CCCrypt(CCOperation op, CCAlgorithm alg, CCOptions options, const void *key, size_t keyLength, const void *iv, const void *dataIn, size_t dataInLength, void *dataOut, size_t dataOutAvailable, size_t *dataOutMoved) __attribute__((noescape, nocallback, framework(System, B), slice(key, keyLength), slice(iv), slice(dataIn, dataInLength), slice(dataOut, dataOutAvailable))); -+CCCryptorStatus CCCryptorCreateWithMode(CCOperation op, CCMode mode, CCAlgorithm alg, CCPadding padding, const void *iv, const void *key, size_t keyLength, const void *tweak, size_t tweakLength, int numRounds, CCModeOptions options, CCCryptorRef *cryptorRef) __attribute__((framework(System, B), slice(iv), slice(key, keyLength), slice(tweak, tweakLength))); -+CCCryptorStatus CCCryptorReset(CCCryptorRef cryptorRef, const void *iv) __attribute__((framework(System, B), slice(iv))); -+ -+#endif // _GO_COMMONCRYPTO_SHIMS_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/syscall_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/syscall_nocgo.go -new file mode 100644 -index 00000000000000..fd322bcd1b885c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/syscall_nocgo.go -@@ -0,0 +1,15 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package commoncrypto -+ -+import ( -+ "github.com/microsoft/go-crypto-darwin/internal/xsyscall" -+) -+ -+//go:nosplit -+func syscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ return xsyscall.SyscallN(errType, fn, args...) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.c b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.c -new file mode 100644 -index 00000000000000..24f6e3d3f50dc1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.c -@@ -0,0 +1,47 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#include -+#include -+#include -+#include -+#include "zcommoncrypto.h" -+ -+CCCryptorStatus CCCrypt(CCOperation, CCAlgorithm, CCOptions, const unsigned char*, size_t, const unsigned char*, const unsigned char*, size_t, unsigned char*, size_t, size_t*); -+CCCryptorStatus CCCryptorCreate(CCOperation, CCAlgorithm, CCOptions, const unsigned char*, size_t, const unsigned char*, CCCryptorRef*); -+CCCryptorStatus CCCryptorCreateWithMode(CCOperation, CCMode, CCAlgorithm, CCPadding, const unsigned char*, const unsigned char*, size_t, const unsigned char*, size_t, int, CCModeOptions, CCCryptorRef*); -+CCCryptorStatus CCCryptorRelease(CCCryptorRef); -+CCCryptorStatus CCCryptorReset(CCCryptorRef, const unsigned char*); -+CCCryptorStatus CCCryptorUpdate(CCCryptorRef, const unsigned char*, size_t, unsigned char*, size_t, size_t*); -+CCCryptorStatus CCKeyDerivationPBKDF(CCPBKDFAlgorithm, const char*, size_t, const uint8_t*, size_t, CCPseudoRandomAlgorithm, unsigned, uint8_t*, size_t); -+ -+CCCryptorStatus _mkcgo_CCCrypt(CCOperation _arg0, CCAlgorithm _arg1, CCOptions _arg2, const unsigned char* _arg3, size_t _arg4, const unsigned char* _arg5, const unsigned char* _arg6, size_t _arg7, unsigned char* _arg8, size_t _arg9, size_t* _arg10) { -+ return CCCrypt(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10); -+} -+ -+CCCryptorStatus _mkcgo_CCCryptorCreate(CCOperation _arg0, CCAlgorithm _arg1, CCOptions _arg2, const unsigned char* _arg3, size_t _arg4, const unsigned char* _arg5, CCCryptorRef* _arg6) { -+ return CCCryptorCreate(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6); -+} -+ -+CCCryptorStatus _mkcgo_CCCryptorCreateWithMode(CCOperation _arg0, CCMode _arg1, CCAlgorithm _arg2, CCPadding _arg3, const unsigned char* _arg4, const unsigned char* _arg5, size_t _arg6, const unsigned char* _arg7, size_t _arg8, int _arg9, CCModeOptions _arg10, CCCryptorRef* _arg11) { -+ return CCCryptorCreateWithMode(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11); -+} -+ -+CCCryptorStatus _mkcgo_CCCryptorRelease(CCCryptorRef _arg0) { -+ return CCCryptorRelease(_arg0); -+} -+ -+CCCryptorStatus _mkcgo_CCCryptorReset(CCCryptorRef _arg0, const unsigned char* _arg1) { -+ return CCCryptorReset(_arg0, _arg1); -+} -+ -+CCCryptorStatus _mkcgo_CCCryptorUpdate(CCCryptorRef _arg0, const unsigned char* _arg1, size_t _arg2, unsigned char* _arg3, size_t _arg4, size_t* _arg5) { -+ return CCCryptorUpdate(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+} -+ -+CCCryptorStatus _mkcgo_CCKeyDerivationPBKDF(CCPBKDFAlgorithm _arg0, const char* _arg1, size_t _arg2, const uint8_t* _arg3, size_t _arg4, CCPseudoRandomAlgorithm _arg5, unsigned _arg6, uint8_t* _arg7, size_t _arg8) { -+ return CCKeyDerivationPBKDF(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8); -+} -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.go -new file mode 100644 -index 00000000000000..0a25e0621df627 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.go -@@ -0,0 +1,50 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package commoncrypto -+ -+const ( -+ KCCEncrypt CCOperation = 0 -+ KCCDecrypt CCOperation = 1 -+) -+ -+const ( -+ KCCModeCBC CCMode = 2 -+) -+ -+const ( -+ KCCOptionECBMode CCOptions = 2 -+) -+ -+const ( -+ KCCSuccess CCCryptorStatus = 0 -+) -+ -+const ( -+ KCCPBKDF2 CCPBKDFAlgorithm = 2 -+) -+ -+const ( -+ KCCPRFHmacAlgSHA1 CCPseudoRandomAlgorithm = 1 -+ KCCPRFHmacAlgSHA256 CCPseudoRandomAlgorithm = 3 -+ KCCPRFHmacAlgSHA384 CCPseudoRandomAlgorithm = 4 -+ KCCPRFHmacAlgSHA512 CCPseudoRandomAlgorithm = 5 -+) -+ -+const ( -+ KCCBlockSizeAES128 = 16 -+ KCCBlockSizeDES = 8 -+) -+ -+const ( -+ CcNoPadding CCPadding = 0 -+) -+ -+const ( -+ KCCAlgorithmAES CCAlgorithm = 0 -+ KCCAlgorithmDES CCAlgorithm = 1 -+ KCCAlgorithm3DES CCAlgorithm = 2 -+ KCCAlgorithmRC4 CCAlgorithm = 4 -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.h -new file mode 100644 -index 00000000000000..016e73758ac4e0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.h -@@ -0,0 +1,69 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#ifndef MKCGO_H // only include this header once -+#define MKCGO_H -+ -+#include -+#include -+ -+typedef void* CCCryptorRef; -+typedef uint32_t CCModeOptions; -+ -+typedef enum { -+ kCCEncrypt = 0, -+ kCCDecrypt = 1, -+} CCOperation; -+ -+typedef enum { -+ kCCModeCBC = 2, -+} CCMode; -+ -+typedef enum { -+ KCCOptionECBMode = 2, -+} CCOptions; -+ -+typedef enum { -+ kCCSuccess = 0, -+} CCCryptorStatus; -+ -+typedef enum { -+ kCCPBKDF2 = 2, -+} CCPBKDFAlgorithm; -+ -+typedef enum { -+ kCCPRFHmacAlgSHA1 = 1, -+ kCCPRFHmacAlgSHA256 = 3, -+ kCCPRFHmacAlgSHA384 = 4, -+ kCCPRFHmacAlgSHA512 = 5, -+} CCPseudoRandomAlgorithm; -+ -+enum { -+ kCCBlockSizeAES128 = 16, -+ kCCBlockSizeDES = 8, -+}; -+ -+typedef enum { -+ ccNoPadding = 0, -+} CCPadding; -+ -+typedef enum { -+ kCCAlgorithmAES = 0, -+ kCCAlgorithmDES = 1, -+ kCCAlgorithm3DES = 2, -+ kCCAlgorithmRC4 = 4, -+} CCAlgorithm; -+ -+uintptr_t mkcgo_err_retrieve(); -+ -+CCCryptorStatus _mkcgo_CCCrypt(CCOperation, CCAlgorithm, CCOptions, const unsigned char*, size_t, const unsigned char*, const unsigned char*, size_t, unsigned char*, size_t, size_t*); -+CCCryptorStatus _mkcgo_CCCryptorCreate(CCOperation, CCAlgorithm, CCOptions, const unsigned char*, size_t, const unsigned char*, CCCryptorRef*); -+CCCryptorStatus _mkcgo_CCCryptorCreateWithMode(CCOperation, CCMode, CCAlgorithm, CCPadding, const unsigned char*, const unsigned char*, size_t, const unsigned char*, size_t, int, CCModeOptions, CCCryptorRef*); -+CCCryptorStatus _mkcgo_CCCryptorRelease(CCCryptorRef); -+CCCryptorStatus _mkcgo_CCCryptorReset(CCCryptorRef, const unsigned char*); -+CCCryptorStatus _mkcgo_CCCryptorUpdate(CCCryptorRef, const unsigned char*, size_t, unsigned char*, size_t, size_t*); -+CCCryptorStatus _mkcgo_CCKeyDerivationPBKDF(CCPBKDFAlgorithm, const char*, size_t, const uint8_t*, size_t, CCPseudoRandomAlgorithm, unsigned, uint8_t*, size_t); -+ -+#endif // MKCGO_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.s -new file mode 100644 -index 00000000000000..a722bc56d9dab4 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto.s -@@ -0,0 +1,76 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+#ifndef GOARCH_amd64 -+#ifndef GOARCH_arm64 -+#ifndef GOARCH_riscv64 -+#ifndef GOARCH_loong64 -+#ifndef GOARCH_mips64 -+#ifndef GOARCH_mips64le -+#ifndef GOARCH_ppc64 -+#ifndef GOARCH_ppc64le -+#ifndef GOARCH_s390x -+#ifndef GOARCH_sparc64 -+#define _GOPTRSIZE 4 -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+ -+#ifndef _GOPTRSIZE -+#define _GOPTRSIZE 8 -+#endif -+TEXT _mkcgo_CCCrypt_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCCrypt(SB) -+ -+GLOBL ·_mkcgo_CCCrypt_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCCrypt_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCCrypt_trampoline<>(SB) -+ -+TEXT _mkcgo_CCCryptorCreate_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCCryptorCreate(SB) -+ -+GLOBL ·_mkcgo_CCCryptorCreate_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCCryptorCreate_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCCryptorCreate_trampoline<>(SB) -+ -+TEXT _mkcgo_CCCryptorCreateWithMode_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCCryptorCreateWithMode(SB) -+ -+GLOBL ·_mkcgo_CCCryptorCreateWithMode_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCCryptorCreateWithMode_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCCryptorCreateWithMode_trampoline<>(SB) -+ -+TEXT _mkcgo_CCCryptorRelease_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCCryptorRelease(SB) -+ -+GLOBL ·_mkcgo_CCCryptorRelease_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCCryptorRelease_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCCryptorRelease_trampoline<>(SB) -+ -+TEXT _mkcgo_CCCryptorReset_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCCryptorReset(SB) -+ -+GLOBL ·_mkcgo_CCCryptorReset_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCCryptorReset_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCCryptorReset_trampoline<>(SB) -+ -+TEXT _mkcgo_CCCryptorUpdate_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCCryptorUpdate(SB) -+ -+GLOBL ·_mkcgo_CCCryptorUpdate_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCCryptorUpdate_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCCryptorUpdate_trampoline<>(SB) -+ -+TEXT _mkcgo_CCKeyDerivationPBKDF_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CCKeyDerivationPBKDF(SB) -+ -+GLOBL ·_mkcgo_CCKeyDerivationPBKDF_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CCKeyDerivationPBKDF_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CCKeyDerivationPBKDF_trampoline<>(SB) -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_cgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_cgo.go -new file mode 100644 -index 00000000000000..a774ad9a32ae86 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_cgo.go -@@ -0,0 +1,64 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package commoncrypto -+ -+/* -+#cgo CFLAGS: -Wno-attributes -+#cgo darwin LDFLAGS: -framework System -+ -+#include "zcommoncrypto.h" -+#cgo noescape _mkcgo_CCCrypt -+#cgo nocallback _mkcgo_CCCrypt -+#cgo noescape _mkcgo_CCCryptorUpdate -+#cgo nocallback _mkcgo_CCCryptorUpdate -+*/ -+import "C" -+import "unsafe" -+ -+type CCAlgorithm = C.CCAlgorithm -+type CCCryptorRef = C.CCCryptorRef -+type CCCryptorStatus = C.CCCryptorStatus -+type CCMode = C.CCMode -+type CCModeOptions = C.CCModeOptions -+type CCOperation = C.CCOperation -+type CCOptions = C.CCOptions -+type CCPBKDFAlgorithm = C.CCPBKDFAlgorithm -+type CCPadding = C.CCPadding -+type CCPseudoRandomAlgorithm = C.CCPseudoRandomAlgorithm -+ -+//go:nosplit -+func mkcgoNoEscape(p *C.uintptr_t) *C.uintptr_t { -+ x := uintptr(unsafe.Pointer(p)) -+ return (*C.uintptr_t)(unsafe.Pointer(x ^ 0)) -+} -+ -+func CCCrypt(op CCOperation, alg CCAlgorithm, options CCOptions, key []byte, iv []byte, dataIn []byte, dataOut []byte, dataOutMoved *int) CCCryptorStatus { -+ return C._mkcgo_CCCrypt(op, alg, options, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(iv))), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(dataIn))), C.size_t(len(dataIn)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(dataOut))), C.size_t(len(dataOut)), (*C.size_t)(unsafe.Pointer(dataOutMoved))) -+} -+ -+func CCCryptorCreate(op CCOperation, alg CCAlgorithm, options CCOptions, key []byte, iv []byte, cryptorRef *CCCryptorRef) CCCryptorStatus { -+ return C._mkcgo_CCCryptorCreate(op, alg, options, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(iv))), cryptorRef) -+} -+ -+func CCCryptorCreateWithMode(op CCOperation, mode CCMode, alg CCAlgorithm, padding CCPadding, iv []byte, key []byte, tweak []byte, numRounds int32, options CCModeOptions, cryptorRef *CCCryptorRef) CCCryptorStatus { -+ return C._mkcgo_CCCryptorCreateWithMode(op, mode, alg, padding, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(iv))), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(tweak))), C.size_t(len(tweak)), C.int(numRounds), options, cryptorRef) -+} -+ -+func CCCryptorRelease(cryptorRef CCCryptorRef) CCCryptorStatus { -+ return C._mkcgo_CCCryptorRelease(cryptorRef) -+} -+ -+func CCCryptorReset(cryptorRef CCCryptorRef, iv []byte) CCCryptorStatus { -+ return C._mkcgo_CCCryptorReset(cryptorRef, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(iv)))) -+} -+ -+func CCCryptorUpdate(cryptorRef CCCryptorRef, dataIn []byte, dataOut []byte, dataOutMoved *int) CCCryptorStatus { -+ return C._mkcgo_CCCryptorUpdate(cryptorRef, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(dataIn))), C.size_t(len(dataIn)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(dataOut))), C.size_t(len(dataOut)), (*C.size_t)(unsafe.Pointer(dataOutMoved))) -+} -+ -+func CCKeyDerivationPBKDF(algorithm CCPBKDFAlgorithm, password []byte, salt []uint8, prf CCPseudoRandomAlgorithm, rounds uint32, derivedKey []uint8) CCCryptorStatus { -+ return C._mkcgo_CCKeyDerivationPBKDF(algorithm, (*C.char)(unsafe.Pointer(unsafe.SliceData(password))), C.size_t(len(password)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(salt))), C.size_t(len(salt)), prf, C.uint(rounds), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(derivedKey))), C.size_t(len(derivedKey))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_nocgo.go -new file mode 100644 -index 00000000000000..b17312278da948 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/commoncrypto/zcommoncrypto_nocgo.go -@@ -0,0 +1,102 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+package commoncrypto -+ -+import ( -+ "runtime" -+ "unsafe" -+) -+ -+var _ = runtime.GOOS -+ -+var _mkcgoAlwaysFalseCommoncrypto bool -+var _mkcgoEscapeSinkCommoncrypto unsafe.Pointer -+ -+// mkcgoEscapePtrCommoncrypto forces p to escape to the heap. -+// This implementation is also used in the standard library: -+// https://github.com/golang/go/blob/f71432d223eeb2139b460957817400750fd13655/src/internal/abi/escape.go#L24-L33 -+func mkcgoEscapePtrCommoncrypto(p unsafe.Pointer) unsafe.Pointer { -+ if _mkcgoAlwaysFalseCommoncrypto { -+ _mkcgoEscapeSinkCommoncrypto = p -+ } -+ return p -+} -+ -+type CCCryptorRef unsafe.Pointer -+type CCModeOptions = uint32 -+ -+type CCOperation int32 -+type CCMode int32 -+type CCOptions int32 -+type CCCryptorStatus int32 -+type CCPBKDFAlgorithm int32 -+type CCPseudoRandomAlgorithm int32 -+type CCPadding int32 -+type CCAlgorithm int32 -+ -+//go:cgo_import_dynamic _mkcgo_CCCrypt CCCrypt "/System/Library/Frameworks/System.framework/Versions/B/System" -+//go:cgo_import_dynamic _mkcgo_CCCryptorCreate CCCryptorCreate "/System/Library/Frameworks/System.framework/Versions/B/System" -+//go:cgo_import_dynamic _mkcgo_CCCryptorCreateWithMode CCCryptorCreateWithMode "/System/Library/Frameworks/System.framework/Versions/B/System" -+//go:cgo_import_dynamic _mkcgo_CCCryptorRelease CCCryptorRelease "/System/Library/Frameworks/System.framework/Versions/B/System" -+//go:cgo_import_dynamic _mkcgo_CCCryptorReset CCCryptorReset "/System/Library/Frameworks/System.framework/Versions/B/System" -+//go:cgo_import_dynamic _mkcgo_CCCryptorUpdate CCCryptorUpdate "/System/Library/Frameworks/System.framework/Versions/B/System" -+//go:cgo_import_dynamic _mkcgo_CCKeyDerivationPBKDF CCKeyDerivationPBKDF "/System/Library/Frameworks/System.framework/Versions/B/System" -+ -+var _mkcgo_CCCrypt_trampoline_addr uintptr -+ -+func CCCrypt(op CCOperation, alg CCAlgorithm, options CCOptions, key []byte, iv []byte, dataIn []byte, dataOut []byte, dataOutMoved *int) CCCryptorStatus { -+ r0, _ := syscallN(0, _mkcgo_CCCrypt_trampoline_addr, uintptr(op), uintptr(alg), uintptr(options), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(unsafe.Pointer(unsafe.SliceData(iv))), uintptr(unsafe.Pointer(unsafe.SliceData(dataIn))), uintptr(len(dataIn)), uintptr(unsafe.Pointer(unsafe.SliceData(dataOut))), uintptr(len(dataOut)), uintptr(unsafe.Pointer(dataOutMoved))) -+ return CCCryptorStatus(r0) -+} -+ -+var _mkcgo_CCCryptorCreate_trampoline_addr uintptr -+ -+func CCCryptorCreate(op CCOperation, alg CCAlgorithm, options CCOptions, key []byte, iv []byte, cryptorRef *CCCryptorRef) CCCryptorStatus { -+ r0, _ := syscallN(0, _mkcgo_CCCryptorCreate_trampoline_addr, uintptr(op), uintptr(alg), uintptr(options), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(key)))), uintptr(len(key)), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(iv)))), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(cryptorRef)))) -+ return CCCryptorStatus(r0) -+} -+ -+var _mkcgo_CCCryptorCreateWithMode_trampoline_addr uintptr -+ -+func CCCryptorCreateWithMode(op CCOperation, mode CCMode, alg CCAlgorithm, padding CCPadding, iv []byte, key []byte, tweak []byte, numRounds int32, options CCModeOptions, cryptorRef *CCCryptorRef) CCCryptorStatus { -+ var r0 uintptr -+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" { -+ r0, _ = syscallN(0, _mkcgo_CCCryptorCreateWithMode_trampoline_addr, uintptr(op), uintptr(mode), uintptr(alg), uintptr(padding), uintptr(unsafe.Pointer(unsafe.SliceData(iv))), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(unsafe.Pointer(unsafe.SliceData(tweak))), uintptr(len(tweak)), uintptr(numRounds)<<32|uintptr(options), uintptr(unsafe.Pointer(cryptorRef))) -+ } else { -+ r0, _ = syscallN(0, _mkcgo_CCCryptorCreateWithMode_trampoline_addr, uintptr(op), uintptr(mode), uintptr(alg), uintptr(padding), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(iv)))), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(key)))), uintptr(len(key)), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(tweak)))), uintptr(len(tweak)), uintptr(numRounds), uintptr(options), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(cryptorRef)))) -+ } -+ return CCCryptorStatus(r0) -+} -+ -+var _mkcgo_CCCryptorRelease_trampoline_addr uintptr -+ -+func CCCryptorRelease(cryptorRef CCCryptorRef) CCCryptorStatus { -+ r0, _ := syscallN(0, _mkcgo_CCCryptorRelease_trampoline_addr, uintptr(cryptorRef)) -+ return CCCryptorStatus(r0) -+} -+ -+var _mkcgo_CCCryptorReset_trampoline_addr uintptr -+ -+func CCCryptorReset(cryptorRef CCCryptorRef, iv []byte) CCCryptorStatus { -+ r0, _ := syscallN(0, _mkcgo_CCCryptorReset_trampoline_addr, uintptr(cryptorRef), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(iv))))) -+ return CCCryptorStatus(r0) -+} -+ -+var _mkcgo_CCCryptorUpdate_trampoline_addr uintptr -+ -+func CCCryptorUpdate(cryptorRef CCCryptorRef, dataIn []byte, dataOut []byte, dataOutMoved *int) CCCryptorStatus { -+ r0, _ := syscallN(0, _mkcgo_CCCryptorUpdate_trampoline_addr, uintptr(cryptorRef), uintptr(unsafe.Pointer(unsafe.SliceData(dataIn))), uintptr(len(dataIn)), uintptr(unsafe.Pointer(unsafe.SliceData(dataOut))), uintptr(len(dataOut)), uintptr(unsafe.Pointer(dataOutMoved))) -+ return CCCryptorStatus(r0) -+} -+ -+var _mkcgo_CCKeyDerivationPBKDF_trampoline_addr uintptr -+ -+func CCKeyDerivationPBKDF(algorithm CCPBKDFAlgorithm, password []byte, salt []uint8, prf CCPseudoRandomAlgorithm, rounds uint32, derivedKey []uint8) CCCryptorStatus { -+ r0, _ := syscallN(0, _mkcgo_CCKeyDerivationPBKDF_trampoline_addr, uintptr(algorithm), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(password)))), uintptr(len(password)), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(salt)))), uintptr(len(salt)), uintptr(prf), uintptr(rounds), uintptr(mkcgoEscapePtrCommoncrypto(unsafe.Pointer(unsafe.SliceData(derivedKey)))), uintptr(len(derivedKey))) -+ return CCCryptorStatus(r0) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/CryptoKit_amd64.syso b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/CryptoKit_amd64.syso -new file mode 100644 -index 0000000000000000000000000000000000000000..7d9406cdef877632dc046249d921ec782fe48d6b -GIT binary patch -literal 181384 -zcmeFa4S1zlT_>380gbjz;;!yS(IF~Inh__h;)He3ThP&4YfAD61#zUO(lphih3<~s -z6$#^$HEnUnyu4h^?86=N?0^$TTI1s&(e=6k4cvl~3iuVqj|scu7<7gWRbV2%@d(Qv-zs~=h^FN>O?|teoKJ$freP{k&AO3^Cufg9T68eVm -zhksvzzZqs8^KbFJEY;UH*l&RNn<)7A#ZK-w9#>--EBd -z=kCkTzIgdHvzH#Ybayv@OKV1SEs$7QKO=qBMsDhRYECwbUA%bL{r5eX3*3!w@)wNn -zb)m%cFPp!iTW{+7+6+q`0lo(>KXA`|uLw!q_;v%n=LLBWfsgu&|89zr5ccv{*5Al4 -z8qrvQAN#+}-^ep>QoVMei~75G@BJ^Ix%0sp{GOP2@%bETI^Y`&NwdIr(!Yxr?|<13 -z-gWVwd+&V3rF-tX`~L3woelVc+4U{<;)|q2hVtG!d*@x3FV5Zf>U-{cIrzK1NPj-y -ztKH(%r6BJ#l~j1~;-#63cRz6Fy_cNXT^}18mTxO?vDGQt-_2-NMf%^2A4B+a -zDKPP*uT(aPGJXA7H}%0Z`f8Im_0?fkDBm|Jh`zq3A>`i<{{AcezWHR;0;2cdvye25 -zKNfw~tJD_0>;Ad>(8%t&|30SSZv=nj=UI~b)%QQ}%Dxf|vIH092zZ`<{{xq@@&)`C -zZ@=>aR7H;BTS9r#ISKBz8-$}yBi}`QFH}RCeBl1OE+(H6eChdtk1qXD|GAR8`01+89@q+cx8L*N?46hIviZjR9z6HH?4JA3 -zHke;wH>C4INOcdYKpY)|=Y^M01NU6E{=4jIY7zn;hyT02_tIrq=*jXzmRFvA;AQt* -ze&Bfho_oRf+!L!OtLH9xGnnJ}dEhm(m+$YwGYa0i@J!r)*PX9AJ9l~J(tVfjxhpn4 -zz(u?TJANSttQXvO|9zKUI5#_c{{!NYaJin?hgty@<)6ecGW_|ZZCZ5@Su^>qBGe&yQW9q%4^ -zT21B8zU1tS&t5qDq8HX5`sfA(oJg88pLyhwiKH=&pq~6zJ$X|dv2)2EO(gA_(%ORx -zHv1W*PYG3w|DqJ54IBRb^h5TZwaBiKPi4;j5azD-UMZiTQD!i^BFhj1-~t07zo -z;c^IY()$cX_IQ7NJB+5T}z<~RiP8x=k_*cd$@!&;WPGunv{-MDoplBsvA%+yH*2EVrWw|y%SpxF59leyRG&aGRVYMR -z>SG?pj5tDZI}PCX&HB_Wj&)SH`x7LOCj!^_AycjeP) -zKM$`UI?%We9xUjK!E}=xPo#nhQne&RY6;SYE37pn2AabRQqxJ=tE%lUw*_tzBx*)Y -zDQ&ZHnUS<1G1I1GOxt5(c$4OM4*f&gVEs)btz{*=AGJKJgysqo&L_V=k-TY9vEM>$ -z2{FL3WuRN=SI{^l#-w>9#I?akw(Dt=IO?gW1QKW&W4Ha)+t~v?vJI;vJphsl0IkNx -zwtlrGdfFn7FjESP-e=cj_86dxt0y0qb0+fCFS>6p<)C6QTT_0*{|F$;pTKE(^c^ -z88CDA-FJV}z|&p}akBA$7@g}LI@iN``i1o?M|}ftfFp3Ve&vH_>R0~y%)lG2_P_tH -zuAZR-F!#m50T`yX7E~a4PyOm=hU+W!GuPolVDx!kP{DcN1fuPF@}+Vft}RD@qn&74X -z#+xpG<-vD~-wl`+|9xluYp#pUgJ&Rp54aEOZ*vy&KzDpMh_MhNSFS;5Xzv*PL3U#l -zz6AKv3;25;#_RE;cc>qm9EHGh0}>>qwiotf&*OV=senA{2lerJm1pp=te>KPIEEn& -z1Hll?a3Xm(9K%7x&LzJK$8ZKFdoKC+82i;elQw$+wjT!R_!wGOKY$S(MReP#BZ%%f -z3Y`VFXnY9Kj#CE_-C*?ddJCPdUbmLn(_WVuP}#Fva0 -zJjXaPvr;gWZxJB1kD7)GR&~RHq-kK#VWpl+eiQ!Rp@7Bck)u7H9#`Q#!gIU>p5q00j^`KQE6k&c;KYk-n}H=?vEcT$DY;Da`%jAA-NF{&6{#4)3&nWx;jOq)hwx@m&~1H9mI -z<__Ns^U~<>Wo{-$E)h=KBpie@FYroCci41Ca_NH$Oy_S_FywNcvF0YBg$KUVB9emd -zw1ntD1Lgn)3!xyY@3&zoR_8ng45Ml61X^nV=I+o9_UhA4D8rWBwsWU -zM$~3oNSiG}O(a*%hJD*9ir^W>G@=8ItMY9d!kf1Hh!C!|Xv&pABOSpnR2qw-8rDSG -z-f8NAxtV*LFoC^Kn*^HAA)-_?0%Y`w;Hy9oB$S0ohalS93O2VKEQ>^Y1wpLhZE@5R -z0J;sq*=wd%@ngep61L}swy}u7UL|D(D%NiV9dZ(FCnohfX|RyA -z?xbY}vK}L}M%#x@KSJR2QE6IJtB7^jNh7(~jXg*v_jN}SH+CgyL%-6de)YJoY=Zd>s|I$I0C{WnM4p5 -zxdy4#>y14qBX}q5Zve#p2Ei(V`lDUz+D3Jh9h@E2nnwLyM|(znEt7HZ-BV@eYh9n` -zl`2dfxLP&00bgSsz6N{_u2x-u&v70;$M{k`xv&Vf?Q=9{q0ra~)Tq4ZB2ctRCdjXt -zQcOMxI#qfovCy;&%?N;nX0t--*s(^yIxDVi!Gm#9?p$D^cKk9Gp+ycI`7*GVmZ{$Q -zSuIo1y#TMH46tY}{h{r5;jb`kQAr=KyDi$-9*{BtBC{0)fOIxClHYW=JPLj(Ou~|;(BPJCX -zjY&%+mbRA*xb~d1qoA>izz)HfnHW~^sMopHfk(sGJn<%B$P3F|%|#~mI0`EuB}d@{ -zKUsDZ?k_nC+bkSrY)NC7gwVG&Mi7Z&G7-kJ2ZS-{b0#_Yh<-sqc&&5A{V6oAVJ;3m -zR_imx@qfze8U2vm>luBBc|Btmta&}djJ2i8M6;lPX<0yD`3s1G4 -z!8!&k*E7}_{d}!weAbH?tI!PmgGH&TxUD7oiP#me7~ONU$0zYh -zL`^d8L5f4cX~zsJ5nH)uu(1AF?PK+cr?yxNTc$}%ormVjgOZ%{Y2jb(c%ZdlsF!Hkwrk(qf_Qy2y{I)HMWiPA}* -zVx-ouSk*EF?FzO-yF$H>Drk)ohcjWGBwGx#;o_!F&0m`d6@Bm{gc1x<>LN+Sk1St^Y+EdEO3`hn+# -zo2%lky{4eKte~-iAmdPp(hEp)8Xb7zd>d7AhyWQ!2nHIjus@}&w9PCK^el7JvuABp -zBXJ2NqCIuQW=jBRn3QJjkW+;u!WWXfU~weLvIPr?R$k+vLQsQLPsB3lq@hAmpOg9v -zNvlp;RG=Q$E{OH*Rd;VDJ6#kNHI+8>D{bmmj|;-a -zDHr6$KVEi0eyZexaFPyGE7EU~@xYGH`<(Lo>;)X;Assk%>in;d -zA9AV>mqXO$0gP|codN_WOMxlH-D7HY=P}(gykqt!8tmm`agQ|UEzd7wR>f_z6@=Ae -z?7djIzxR-C-9)k{1p3cJdhb$Qe0g?_Sh6t -zn}#GVC`u>{K1$HG0UC?(i~1NdnsXa(ABN(%DH>=ul#xQUjk-V{quMn8#FH+ -zoxKBlpr!p|p8bNwtYU`~Tx(QF+WkZm3*aFi8=6DMFZpwU~Sn{AOJ98C)9-$m3imi$X5+rLyzVR5Mnj&3GL -z^+Q2p_cmETO0+Opz!9^Wa~+Hfeb9w!Z6f(#P^)MCspt8syTL*oNO@^HPZGuvs#NDo -zMiryOJfzqsFlxy}lLag|%|(-Hszllncxuy2&aYzmX{{cXT;dMVf^7!FUJV$7^HfK4 -zpz#sbYpPRi@P?^OG!6-lbq)SXKK97u@UjGpIpTL&%Hg`fied|k;B6@=AXHOJKsePS -zh^!s5N;8c75lb-+i(VHv8{&py%|!*RB?RS$IK_-+dj{z}4M%xyID*0e(t5jq2DuFS7bQ%4^Y7~DpFCFp}j84F?+BM!x3Vgv80k5k9H9_K7SHOO- -zI`FhbHg&C+yMGvU|Ii2QFbUb@qv#(B4O|$oOCv;Vh5d}Vfe$)*OiwYL6>+<%Y`DV& -za>E@#w7cOdJKbbfT~$1WSgbnn1iw2=lBrA*RtyTHq>m-1F)x!*uMI}@s8|dlTcCI -zKEz?l%1K+h1V{@VX1eJlbrZ1+*+H3p1&u)jwp%F#GZOp`pgO=QyFDc4uu_`(_+aYe -zgGIZg)Uw+xf#-Hxftn!EZVT8CR&~6ma(p|q{T>NMy9Gjg*xMJ!y9RJtiPaN-faFjvGhu%mPhmy+M3+%{6J -z&eAByLL4EEquGPo3X#0hu^03XKLv+&)CKyU{2c+rETS -zqoL)vcoapWWC5e>M2%(`u=RwEMn;pc(a>(tXfT$|tpz+s72_+6RzE3_z0|KSPLv3fciCVJULn6C4n<@u1R -z5(n_beoH17j?sJ;;{^r?_6rEun%<*M4xPoLyje0R$-O2Pr(CHy4DMjGK=JEAV1okK -z$?7;-9ZR244HKo_LjjJ(cn#*F(`dNo7M3e}z^PRC6Ok5$mg<$yp+4 -zwx=N9>D@Y^V#Tb9x~4Xf`XZAOP0Ub>v|9YCD=1!-@c?)ZlWO0I0eKpFJ)AL1-WPYl -zm#!{;@XV5Cwz{JBlyF6@F#|#eH>;~q6mwQhp`Z=%kO~4kOaai`m3t5>0cAE6sEXX@ -z9y*-{6yywNH+8-3;8~%%qYiq&ud@OnwQs}0n&=BD*fejMOV)JZlL=Bf&pDdAd1IJP3tYs5 -z?@P~rQdRPttzz=GGZ`(VPsyVZ`sqxD$K~Yb#pGM+*E>)OBm_oOBzh8`z1R78txqli -zS+e;_slgKv@1+CAoVEnVXGE{J3+QC+S%vO6KW@(Q8%J_msq%T>!?F- -zQt+}~C&#jN5*BTo1t!8Q*w%;r6O>DBpQ+9oqi@5WT^|f0RJ4bk-sNrU*kkngj+d^n -z{&b;(!3jso#@9_ycEiyK$!i(_2AX$cp+9Y~QSc5=T1LP1LtQaWoC$aVrV3F+1^UBMz|xPf$&+Cg9%&RIE3~(dA0r -zkSF!DD<0_c4j|6fOGs@5yGPzF@Zp;Rkb~P-5$_%u!fst5Nj&<9bA*zLkwo;V=9WOO -zj<_EL_HRW`cW@KBpV$}4Q{DfckPPr{rGCKkM(XBm?C0tOZ-tHNgwMcoXYI^DW6uz~ -zx4Dl-ry_5cHC_EY#LYq!UKDIH;<&mXV2i-wR_JXPwqX-qMVqTA7uVt!oOlL)4*t1sE -zd_h$+5jRwo#etAjRHdGIt7j2G6x>PeVv_hOpTV;veuyB|biAmZ -zgKsT2_=BhSb^-^3T`=qs`pJFRARD+D|9jf)UjJS{!>!lX(y`Eb_-Vhx{BabOlWhK~ -zbP{$@JY&FiFB0M5tTFGDS>&U99Knl|%VBSKUIa9QAoFl&reXXD*vJtKJ5Wb@U0q@T -z+eN{wQiufg8@hFSIX-M~+~9XqtkbM`A7d^qT_5M4kkp_`mSIPaakXfd -zy)wu~&4lgu7#YY!%}ng}VyWj$*cy+)Qkblyo4E|rdGQ%Xt7RY)vt}aO{LZl~=2(_a -z!lGG5kRi-JZGpHYfpV#BG_FO{%jx8pw@$>o&0JhfOcvnbaIf^j2AVvM#*K$nT~*nR -zpw45-oTFm%SH6H=4jYENoZm&?h32;*LQTQ4_kV+v$ssz?Ecr*29G7fYkc&0gc?1?v -zKKhnAF|H(RE5@bg4aK;RTxXT -zJ3t#27IqOGXqH7S19EirX -zlaTpgHQNz~8q~r(f|4EKbcu3&_&Q#jEc(Vh#xM$HL}Qpi;b082hz>OV1z1JR&q^(M -zuYjZ}Bn1PES3B#3k}*swrl%WF{nKQr!k-StVD1qK?AQl&M?R&-!{R61EuX&qbyl};i$&`7`m^d~gF%37%`vJZ3HMBUo!+ua1&rIfC=>BINsn*DBy-Xp6-9YX$EuXV -z^r)1!Y1<7;Dg%vgeRNhjDA{;9={%18cqb}$R$&bvJ=F+^2ThJ5I?#9>JZ@-GrTsck -z)Z|e?V#cA#Jq9w)L&cgy3R=VdMF#_Vok39Qse*9|7_Y?uII7J_?P8KS3HMp$m>sK0 -z3e&C0gCAm#N`Bn31Eu48t%KTW{o29bhw02yy;Z#)*SLJD-v`r+%Y(kyoV|>*D>XIx -z$u=jEgNQ^;FcBlu5y(WAnGKRiK~AxwJ!nEW9Wca(x(*RG`doY#u(7z3s*3M_4>6Xs -z1QBM1!Dm6q+#V1IRKBi?brBy}3`ZMDdH=yGRFg)v4FJi>Basmm6G4qh5UPl3qzcuj -zQSm6IP;C`Z>3k*zvtCqx44u)9@7)gy{`oeBGx$2|z)oLWL^N50`F8ZHy@DXw{0;u_ -z&5a#KPx081zeP9tw8co|uLii%duG?imqPNQ!&9C!D?CtvC>H`kG4`H}dexIhOmokl -zgH@a)NG5Hc2-*)=0F-?of@uen4%EqA*A1rteTed*W;Kp_uCUG;v7f!+=mB5DJzB?W9+(~9Y~j$+~El2*}oRUvHIWrb$5Lh~-9uEUS61iDQZ -zGNn|Dt)MoFo(48H#-PiI(d8!4;}hL9M^O`=pFH-+dx5ikxyqD;`w=DK8P8EMnl;+ft^im4Hv5&%<8fiCyjPg{2SqSKcUINhph -zZ#jKCOP{qAte1#-+DS8cQiD2>t2e|v90fwKe+OPxt`_EV&m0^ziUeaSa`@|b4n4Y; -z6g+bvi$MPpKo#xztdsXpt~hNTgydmr{1byJ$P`bT`}4fZ&Qq&So6Jxr@sTf*$~t7m -zx7DK3SCtgIfxZ6*09>b1P~7?#c-oX-gj1ac>mzzxoRb1tV+gXj_LJTH2vNF8wB_!n -zB}&)=A|{-3Cl`31Qa0_A<=x!?^TY)gUQjBu%Uwiqh2AD1hTtQc9HD}kEpePS4WK*G -zAh&38OANZnF)xza%E@hu+!)BA8xYs&=CD+#IWvSLa4fiy7wo9uoD0sN1VEWx*$vDV -zh_4461C94cNT1+KHdk3VoJmjGYy5@xEG1Fll%Qs9-Q9qIaZU?mf_`E*V5CiB%esL; -zim4Hv5>#~q)OBia%Lqvg>Y%3^criX+02V5Q -z`P?&C-3|OIS3T8cvIUbz*)IC2$3!-b_+V+u0B*a>b0 -z^#bvkfMcNXW$H2g&?>HAv2ZvOgy%2#3yp=Mpq0e()x)EJaZ?p#qA{+s0&uEdNSnr% -zwTnQCsS%zMRJ99fHf`@x!JbjOU079qRV&qW-swjocv`!l4tm87yZAgUt^JowlrWjBsKg>+o*;ICwJB$^)z -zDk)oj6dJqj2fu*&pSNhU3gY$fJs{I6-ytGV;%R}j3zLB+;Xr{!!LDscvUf -z&DLi*A!-sKxFNbOZZ4t{ZtM7^Km)A{sL@fN&CejFld39d{|vha9I%r1WrCDl)!bMG -zBGuCxB2i<#t*=Qqlp+*(+)&UUGy7Wku=@uhBd(`0YiwIYn#+JwJ*^<}D8@n+1XUL6 -zqWTfZ)EE+-;F<=fz1cC<#YlB2qiVK3OOLflgy4qgy1031R!?18Ua^*E$qHBE=MgzU -z%Y*|3LUmF2lmzwOKzOhdiwD;7lI5Ky5x%lMgUF-NG7Ew#i*-?bt*P$0-R|0e4iz-# -zO?5I-oyw^Gt^A)R5rP|{>*D6GK-jIJOUskia*eD|%XLIf&@$mbflyr(-XPH$9GYOu -z9;m`A5Y3w99VHQJc?^+9qh%HZRTk@_`u9zB!&KK51c#zIYO2GL>PSX)r^uvOel*+= -zA-EyBE^d}Vky_TKOYyuE&YzD?B$u|itnTwkhq(HOzd0Pt(7k)S-d=Xt!i((_DNAA3 -zc6^7=>Lqx=;L5ep?)M9xz<;uSblyHZ+&+vB2aC^K*F^OVDrk)=(4$nz<~Q<(cf0D0 -zo^k>o`K8;jr<}k)Zqp0tOWIG;w|QpKLb&tfV9)`bY9y|MsjxW}Hn8^4*<`Jj9gmjK -zm(&I6KCOr06E<2_R4PAHPmIR0nqygW^!VL{bz|A<AoKJ6h -zzhsiwk_%hm?NuBlTgNd5yuCWUig#C6(0MFdC92&iqQof&blW^q_6$wo!Y8PFosrui -zPjRxWJ$z<|$^XU2iDce|A#3a0zsY83wIs}TVwtx#s+P_0lCSgch -zBn{u+ie;=je2ykuXH(ZZ(R>R*BTRphwXhT$o(2motB{0yC0A!9LS*bJ1l950k8D -zh&rY~Z|5Oh-oqkF@4pobE@@Ln6wk2-BifC~%SOcZF483^J`NBxZ|2oKSPJC6E9 -zRMf|CQ6DXIllTIcM7?&IlUu4k{-ak>Kzq -zfjQe@9=31_Y&fS~OzP!qQ+h5v+85pmZEpy(c57`!yGro!RBsxWjOYhpI>CtIn%F;d -zPqZGnDjU&COoriPAc!*^l`YTPFZtsaM_1Hl;T}X+Pjmzi(MBZCT|JRe==cweNOQOH -z7uxLPx9Rc+Er<8+Tbc!w?vBQ4$g66SJlP3EPgE-yXW57Zhx0k|VRh>TRYiY0qI8a2 -z@R)QeXTw$qR}N#DoU_pqX9SHfWg`+CR_Dzb_rJgyeeDSDoOUs(m$TxR6=FeEB6ikg -zGupMb5wW7tY*(GWhM;If2P63%hehNa3>|#I!IR2&A(YM)9!BEb2OgLzy$^QUeTVLR -zy(#(FejjSE{uts5=fBpm1PD`h-=dD8U&yaAWZs4!6_O|B^;Sd2@1+>Mi(35&T -zvkmukOYZBfo>qsfW*Td@y#wYB^oupt&??- -z99bxjudTaC8pajf2Z>WLZ;;f(@zKOD9~9qdHKJ6cu@L>Qo(+yL_(g^T8><;(ehVT{ -zv{J3?sE3TT@KjECY{7T$oB2b90WPEb4WP^;6J_~}-F+b*^yt(5cubdCFMs1LQx$Zi -zk--ln1?*SPp*u`=uh)i9O*rFM8$5?vx?byNUDdDa!_Lsg%W-mdqIt`65xfICwS8~T -zs*;OxUU>Ive1$^LM=wKdQ7<^j!=G|=mr13nyq~g*_Zo}pMK|Q$NL%(mvtDx|XW@Xp6K_B-ZBZN@DnBM_ep3cCzCJsXt>H1ni*E3S>m -zMGdDJM!hV*h`ie}x@>rO<1sWmEE_DNF=0Z$t7YR$LaB!b##igjh2?s4ZgC=g7WhKz -z{>VhKA736|W)KBWai!yHz#t*8AF0-w@(r)>kj~r&b_i!cIFxX&0GD4n@RyeSo-QUr -zdw@fepOs?t3>Peb4B!=nX(XCOf465AuyePf3W*#RHl5LEE`(!p4_#x|ls)Ih61Q~% -zA3g8<_=sz%zkVG0-$|_BxC_%QAM}d6@N*tY;^GW~^V{wTcd?>#gla)J7bn8F6O^9s -zOr+x|avk8?6QQkQd1nU;I+Iw?DXtfty)bz$y)cMMK0KG6AF||EuJxbA^LE+y2T3OV -z(f**8_(@}be^1XE6uxil_v`qGG!ERcDWS4#@bTTjRaQo#hcA-NH}Z#9KsFeCjL!QW -zbKEzsd>~wu&0Ig_yss2pe5W8RgG`B6_2I;WH4+Xf2-toQY$J$PBv?(P?L_#MPB{`M -zER%EyP&lWXW7%?1)O^@?IRVR#vF!HpvYTVsbF>yJzx-)s9!Wejmh7Bv&dX7brH?8( -z>1=F20dRkzWC7jF+UyD;s -zPv=->PQx;5ETKaR2a8g*7W8*Z$i>3XGJ-U;mewkMc;RP_WxepT?r3i<`nsPNemVfc -z!q1vtgIhtfNB{0mLZi8ImV!E9-)i+rmMtRo^SxmO=<9X3#Y-f3ubTN>>iH6%c_DY` -zZ08ZgN?KHspP2F23NR-M^Cb^)`M0Fgruqb|z{u+K4FWJ#6K}dIpRE}E1_pZc?)KSr -zC=|mBt1{5l2k9`P8^A9K;jl27@msag|BCl^v@Nf~*w3e*9?mXsIxx_9xF4Nb`WERB -z$7+xk>Oys~Q1|IIKx`_OB62+YUH{B6OogcK>y0zOclM-LG6EOeOp_d=!Ev21bOn=d(0UE!}D>Bxz_0 -z&&$SPLf_y9rJB&jtK%>XDuo<4eFlN2Skx=hZPHr8b9zC!8LJjz1%Z;hp@d(kwn+s0 -zKa1tX6NRNJKS#`AY6zCtu<8X4d1KY4o*hwpl;-R{OrHyfIoqo$@9dQB%#MM0Fsd4& -z1C4h{NB(4d`Y^MjdJ7tdIS)crHs@i)V9vt;Etqq^R2i2w2n{PDjL@M*Mi38_M-d%p -z{G2JXph?P{2ZfgAJfv7SKO>hmfL-0_beS`8qaIZP2W9Xp3bAZPgcUEh2xWdyCNCD@ -z4H#(i^5O;&B$+u|Oda$_W*;(bo>U4ru-qEIoUZB#FE(K3J%cYOHKnXSuO16khyAe{$_9(%sH;2@enn*rBrD3l<~yg`H*m>7jb%e=TYcfI)hR50X!I0 -zKce^`2Ij-)orwl?m>tzy&^XL_iv_i`utQK^yepV<2dUtfnc$w#Fz0Ng4V1Y$7btV_ -zZlLjQQ)WSvlsR+l$*Tied8)VspIqJO;~XsZ&LHPSD(z-R?t>i*UHFh?oPL8#5^=Ez -zUr4I#mMvfSjH|Bd+g?io%d>R4>IEdE2z@`=>8n=IS|)Y8mZ2IC+-NmaJMndb3VFeBk?uJq+84Q7PM%^wesU#rXjr=rN5y#htiwMUAV-$S&`k575T73k{_)^j+QvHqeMl*JnvOt9h1*5)P#Zg^@*^ -z;LT+Gis!v%+~-Xz2m^X}il*W-p_?6puPJzRBRd-Gs<~O~<>n6q-n^o~b`0Ve33+W&SVLZzje0{S&5MK)yvJkO|M+9{g!o> -zZ17CYJR&E^N;qIARF|x&uy>u~bB_@24C`K+PcEVOW6(ADq8m;$^>Xt!NQ&QI;Wv}I -z)}x>KPF}UOoLs8X@=y4Q=_*z}Zb5z@=9*Zxh^rNUNAPjI{Dt^H2;cv}jBFP5l1(7O -zry}j4C;G->vgy-bmQ|qB>3Ht%C3)BzU7GgRpwtG -zFWsI-@)DB~E;>AAIpqegPjjw^MHCMA2!kU%LQ%j|RG6GgygcNlk9m(ma87PjJFwiu;K1-Ppo%EbgMTu(L*UK4}?bUG|<| -zdd{(IxG0xFI;UaTGL~#HCC9RzW7#y=EX;|vUvL-SU>6<3;dm>JaH3`Pb -z%#0G%MA37z#igM&ww6@>-F1H~H!RSsFtJJl;RCqIp8% -zMf3q&oMDfE0B-V(f@5wpuM0`>M)RM0#b!z@_>DfU*!+%@DG5YSF(&`27jg`(QysBt -zrv<4aFtF0PD!w(TptwR4!DkI_bu^|7K5cNeZU|D?^ze%YVUrcBCI+81IC}wrk022C -zw5guYV;(XV4aQyqzlIQG%S6{T5ow4njvx^bA5K)zrU;lWjFM42hRv}ahZ7VukCd37 -zJmRaQakJwsqb%R_dS%l$gqxZic5Q@&&;7!8GeJ!kllBOI;TnkP?jZ;|YZ0!|WDIEIBp=a%#-)Bu!lWIn$srBW5-O03_p=3n$H+vWu@zBr -zn=1OKUR!8x5+>3c%;^n@-s?dRv#_-Y0|#35h|eY?A4WEW98bSS5QAO!Gd)`z+pHrM -z{wp(4ON2%t!iZ#e(Ru^P4iWN1y4W+{20}Wp;XQH{uL=}b#c7Qfm_Aa6WjrT(x -zLEA90VA+HUja&AiDzsr8)txk%C;5n$XU4ORS82K -zs|>ygMn0RD_I@Bc{V>K9l(qmh1-jiG*l8#!TXQPX#zzwE)8M4Fcy81fV6y;Nv^Ft< -zNEGX_R6YrSX`+YnB?32MuTI@&U@z5d(fGwi$V(UNU;{&+!XrYZ3wDAptAI6JM -zN7=GoLC8XTW$srKZB=Zz!29j8)2OO=tM) -zit&N1Nf+zj7{pfmc;LC@H=z<0N<*P>996pz)+I{ku=Pn}4~(-!m7U+5=P#Twn@Ijr -zY+!UXfZrvH2iC?{Cz3xG0LTA<#*#)0es?K+`)h6u+8z{_k0p%;=O|>{0D5KKjHs!LHh5g|A4~; -zJDgYGlNOvv9P`A4=V`^eb(n?d-H<&@e!`Y_>BUh^*7(VA%%t>Wz%~GP!qz -z$HBjSOwZrweUvBck=FBsJ+fE&JfGis!XD8JKG8p7fDHZk=h+@HTJPd?bh7Y9tRI#> -zA&uXA_@s1y#%gn6r|b7t*Y8f(?~ShC>s`Osx_++~f2Rv?#9dDxsyP~Hw7>@k`%G=P -z!mB~=5G%7By50#fqEdOC!nydM1y3~bQZSB%$qo1*Jp-dDjJ(+juXAv1NaLm#P}8}k -zkW8O~WAtys6IkB=CwPM>J^#k+e8ii3neSvSwySx$WAphW_3Jc%ht7tXrD3EGOM$99BaDkcOC|G%OFRF>=?y -zZ@|Pc|JY{7fL6N=&Q=J8kE~pVlj$FRj^W^?T$rjiZ<+Z7orGQ7!@6D@RzbW5@e&}y -zV-S4ip^n!ep2o2G+&c)`yyfQ*=oyH!8_z+;S$)gl_ISVyQ+z%O;n%p>Wjq78sABXS -zk6y(yWM2j|k65>gol6xj3GVz(S;dP;wYs`hJe%dj>yj-JfQpGJs+i>=ijiBz-_N6t -z*oq4(hTil^sZ7PwEP_2T1euDT{Be}&R`FexD*hDqQJ~`Iqr~YdCK2_@*T4-`+#ggt -ziQhMD#iPPPE3P5dtzzd=#gl?NzgJdq9jVnS9?Np#$CZ5s4Vz(kPB@PiKEY!Z{}rtb -zv*@5=ayCNR(Tep0=N^!jsrcV~tU|^2SE~4@2->`57s2T&CK0Om;N^IVCwfEW%14LG@2Jd)cGo*9Uxo4$&0GGwbl!@ -z(hIfN3pLvd#rD_5SG^l5e5@1qb&-Pu9aMj+nkg*)U~t&U{Jt-Q-J{bXAmE1>Bz^>v -z-^zMZ2cyx8V86?_Zr;Ou-mYyQVGL(1>HA7Q@yz>h5SOI>`;8#&I -zM>s|kdXW48JjNfUqu%=fZp};+jn^`)nK4`*2%14BqcOEoGixkZ(#%UK?u}{Yhdv_B -zdBRx_@mTC~9UW(*|C8%i?&^3vt*CldKt)FKXsV -zoVU3(Mfbc?Ge;y`(##0Oy)n%^7xsysiA%1Jp=S21i$eweP>|obD{5vd(}v&dQALKKs~U#-s`$`V^_o%aGHL#?#jFR>Dm)NKJuqImS=ER -z^bA|y<*!C3uI#K6=RB=`WvuV=vknGgCVzh0!FR-;DK4vPJ~!}&&Qjx@z>c2yOJ1iK -zI{u-9r`{IRKeB!%K$}NEN+hRR)K->Qe`pZz)aW=xaQXFP++0qq_ -z^^T_3L0rqLuH|`gIKEiFvdO5cSb13$*9nqWu`=^2HY}@{aH`^eomDYoc@-;NRje4R -z_<7*|QB?7)SSb#ScYNrEtN4Ncq$>Vz2p+>Ko+e8^;D<&t>0eU_idDRnRjVH|icOj6 -zsHtTHu40uhG-XxsQ{nlBD((+Mz`re3aXvY2Ug*?azl%i8c7go9(>A_1m -z)B0MlTRqb%y;k}Eph@(+R{3im)GX^K5lGa0mNjtmL0|o$Yji02{GQ*}tGNIE^l;@p -zypIwDIripz*L#0D&pV94B-y+MIdQ<0JrxFv4Ft!Z=B>OJ?p@<$T*96~Gl5B9W~{}{ -z5M|?G6t}QzY);qpzG%o~=NY2x4g;J9((8IDHe_;44AJcn)gf+nws6hYkk&OLqXXA9 -z^I7RlTJBAn?Zq|I3q_Z=3;k4Y(pWF9(O#&L-lXB)q`qEUbi})uIP6W@>rL8nQa(3L -z!&@*ifK*1Iw{+)r>)6oGCVqdSeoDg{ZlFo|_y`n{VHcpDY_1?0J40Jkc-y2^M-HFZ -z_veJ`7}m*=d@lJA9u`H1JcA#2U6)d#;NV2^F|05Yzp1M8 -z0<+HMCHi?s0}1wu=C444o@4knG0%}Nu>@|9MNrH!mxaWy7=?4&?$ql|eSlghagl8m -za6ZNT3t!5v(GLhE@uBivVQ!Bp@Kfc9o+J+{+uRTxzaO9KY5Bs5tWjmEbc7eHxK*nh -ziK;UKO^ONXR2Ce}NoP+pNPgQ8)HQ|$GOTrGU3T67cQA;w$sQq_&{o#CY}hqE4B)^{ -z=tIIsd3?E1HNK+@4_FWi?<{3CzKaYOE>s6rzmc5P_#u9v#@R-SHJ;N|jUS1G9vSG9 -zXwj(pGyV!BRO3U0Q{h3yv|1-_xT+u|ZBjv3ubwBX@j7sK%Lzh7j&} -z4C$A@Pn2x31&0gfL1nSV4IW`d~HNFTK)Hr+CVvXl?RcT8ip&DOyG_>)RDiW&kHNvUzs$yCKcTM89x{&x=h}|__ -z2P=k49^L?)+xYL?q8eu=YJAe=Ctb%=BH$&XM9&|_8VqgR;NkmtS&auIEFIy+YWU2% -zuSU8BQ%ux2m4zC&!o#aRp^eWfE4<*8)%ah2Nmk==0iv?TS0PB~)oVFBvBq`nFAbln -zX0LvvyH=|4e$kCJ-j@|F)i{B&8Xv?D)HuiIVvXl?RcS-U%Wh=Y(NNrJ)Tu1gxD_5=P6#zlU89YY;X<$eX)RN# -zSC0!Tl{LPb*Z6kMPOR}oN!wDOHol|;)%c2{vBr7P&axD$13P<2&T4!WKTzX4T{WK5 -zRi&*NFKc|=(NNQ>gJB0Jz3Kj)hFRwri@|m1)#HNEpI}0PS_I)6dAzr{1Tb~Anpy6oiQ@qoQ7poY^);E+OTkj|uZG8*BDlCUUnXRwm -z2i-C%p)mEz>B?MJjF+~)>L_h}hEdt*8e%<^qOC6rOc!s1C@zVM`@+={cHx5p@E&)vkMw;VhA*|b*BnJgg4(N -zYwm38R0DeUbp`DW1>sx49?KhB!d+$S-w01V*m{5P+1n*suUbEx6uR#9L#0OhKEG60 -zKU7Y>erQ0hA1=wVUjTHrY{qiSR=O-(v0lsmQE*zlnpp5juw=Ip%zEdqGv!CK-bND4 -zT7k@Zl(M-CA5%1%bq&8<6D3cCK$%&O;KxLAFVD+m%LzGA+4P{1(x!(TrA_aW4cX!_ -z5_`x*o9<_cWZcilq1RF|>@EvYOQ?n9FcY-Is|f1$!5#n#2F;%^Xd@^ZG!emgj}*|L -z`@{hZ8g~bhcy}OkQUr(1TmfaK>{JzvrfiN)5N}ri-lk0HVan7a_;Fo?kLLzct_gRA -zDf`IE2Y&mwh18xSD+8Fa^em>{gYr1C@;ss`fBGjLS&8q#PGS7e(7{Ol(k`#LcmEZ? -zkMelmk9-3E$=}m`-1YO&M|qMf*_?n)qrs@(?>%|V^GNJ)-5{C^+g-oAPfjnE^Q+Dq -zY5Xo>jYp6Qgmmwy3)dt#EhWKWLQ*Ob^hKb#!)(>|$L;BRIMb15cCHpf9oz`z=E=`+ -zxhq?sqbFmyLZ_s8)^L`S#)l=C#3MKgG_QDMas)k|+@|E(KEE}PHmT!mb+OFZ6tcQF -z>lZR{Hs~n2Ui!L2_*KnWUzU?`#w2iNWZJMbXG8*ja(^V}EUto;IhzJx7iXN%1f9tz -z&UBW$#@#yO1lv4koG}TU8JRvDWX_0$oc#nG!JxCaT2tn1rkAs=oU?65gU&eHuGU#L -z`9()wld^P<7n~WHX3^%1NXXeI!B5~Ut}2u{qZi$!v$dQvPM4v+z}d#JoULX#8D~ra -zXGRuY5~rOJ2|4>GIcIV9d%I?czT%Ddi^E)CrQXCn1WyE3R2VK0PEuljb;> -z=`K1NRJw#;)s;P)#qr`aYa1n@FHiPPq2}p4?6~-!BYq=XaFU+6ijKSvh=4 -zI;HdPd}eT5%18O7yn1a&ouRfOI=oy?B6vR_H4b%N5FB2VOj2j0%16 -zv5sb0p=(_Vtph<&=%k}Tp;P!(tWGq4;i_PVET$rWlqDs)Q<{YOA&g)){aROwQv -zVpJ$U*l;5jy4|JFA#!XB9dx6l!GJsG@BF -zQLvcvijd<`sF-s;ncBmX29muByuype*Wggeb~0 -z107`F!~CFzv+3R6--W;VM19Ht9*6ooc*hOZ=g(Bt=Z~T+>T`-H9!-5d^wDLY3m=+H -z{77+EV@2cb_U|92e&JUu5VY;5xUH- -zq{H5%z22nV-lU!0r0w3Mt=^ggYwPWZzs8hhTG+yM -zx!NGg*O9{WD{T^bCm0KJ%lKiumdIj?hA-Nv@b7V@Qn4n5Hti|IDrghA->sNLOvhvx -zfmjx%O++q-hkBJ${MapMO47K~LfB9ULc;zIPCaye!LF>}EkNZCL8jn6ZtP&* -zqx~H!cu45AG(D`S6nvrNWmsW -z1&<0%b3*}X_ajz8o5-!;J^)C;jAUL)n~0)ll6Tkyh_i+s9;J61)F-N;8*K_ -z2ET@xT@EfQco$g}3SJ>|X-k0?Nw<_B1#c@V1+Pj53b}(=g^+@c3hoGcb4Q%Yg4d8D -z1(Q%o!Ggv7QAKFMCPfABDy_LqG@8tBAfbXbkz2v*h)KbWKr9QR?~z3X69*J*vf)s@ -zzhx8^ObNkoQUvP>eSg?Jofks)uN7V|hn-c|6@VpYF;6+8H;7LX$cR`4`pQZOS>u!Yfk -z$x*??0R@|E+WpEsubLh6e*a5N(vS%*0WTE3N|S!xTdrw2UpV`LP7;?BDaDE -z5tD)$fr2een~0)m)kmkbIw?xz9!#&uv?F`%nEM*l?p4^skDOU5VU#Ak0ChS3P>bc!GV^E)zCa6 -z9%y`fv7wExn(6V?dK2H&_JYl<5b%w(@f9rCEW24LHEUMW6q4=8%}SYhvob8372(vZ -z?x*N#R*aRJm9o^V6mzqh$rZ{d1ezvWQK9;Qv4&V$ -zMifdSQKA1A28605fhX^O4>Sq$PzRP27d^xL -zFI80jM=C4-fS}D=zV)p)Qu#+Zz~eskO>&eRDPhVg(AeTSaJUnqj*uxWIYDW;q!xOVSJTazrG`=1h_&V%u7s;6t^#cPF -zL1PR0<+oHQ@#B?B{5gU)Z}}L4)4L=Ri7jaA*j4WFQVZIum?A6@4@M=SV+-0)f=4Aq -zJt`?*qY`2jR@@Oln1ikB$3iC#N%-j@36WCs5g-N+!L#`+E2beyG2A4RTepT^6;xLQ -z#FIX&hQb6fbp0Vu^2gf4?ZOhp(-=XbnDXX!~fR8fSM*o^#Q~9-;MMA{3qaPTF -zkd{^Z+kdg5+CN=c?QbP$^Ohq7r&l|P1irk|{WC0fV^4kDgpRi7+{A4tkJYpm7rzuKz*z%jf<9j4`+!ld!Bp%LymKd`f2jt5K(={p?~%I@-sU -z{4;fZ+Db!=>-hzm9OREJ`3reTQ12?qq5asBd}*e%Ut6R(ds4|~=OyF(;zMi~VZW(* -zKb4*^?yGj~rz$n>Q+4mBDl_k^4NJFY9=N<)g-F<~LaeY`#dPmhF~;4hA3LUFyy@WU -zv+6DR6{Wfbk-q)s0!7eRboc(GBzM(@r~T;e4Ns*;xl0?K%AwG{r)xkCP~Px-MkX<1 -zxx`AB#EMbkWi-huXR0J|VYf4Et%WDQB{99Ot{ut$P?ET6NFD-Xd>y8|BdOF(;^K~^ -za&n0cNQu28`M+ioGnPxNbV;ljCH`sfcB;gM?Z{qT(jN)@@W9n*~UjA$K>sOoWiOJ^e{E_NI&RQ|N -z?$7NU^R*p}S6fgF$E{8XOZRreeO-1G7(5TLq=1{bebBWA%L#lF%13~So=g4|@FM`i_iXo)3%fXv2%DLM<8dAz-Wl&q -z@Bu*F)%KXJSt_BCy^1@iYxO2xQcj;Oi3&IB=@E;t*3eZpwZgo-p1lgjXR9u(WM`t> -zlJ(9PP}G6Kbkp*4UtSmw52%G}VNEd+*wlh}j4zRs=H^U>&DTitJ{cY&lpDc!vp9}V -zN{AM-p=RdbtA*&P_7JN#^$E>-ilxf9MbO-w%BYwkpk`t%?mta^HtQ)nYjvX%d(P#D -z_$npd$Oz*b)nvQ5xmrlt2FFE-JNO+X-pb;c#LR}o%(28Q4_U-USz;y`lPQ)YewKP` -zNetOFow!knw{+hk!;CQINrKWEc$8`b92X^C!|#~4p2ahXnGK1VV~JTF -zvWShc#7v43?}%`rj(J!lZAxPM0s{^A)~8$bC=3M>k1?pM49M;n>u*Dh{~oD7XN#-bBs5k} -zXZr&}%BHsyE6%3?U*WyQg`>BR08v-Dfv4Rb&L>Hh@1hLJ_@^^5zJOxf@$U5erzKC? -zm%KN5U;Uv!rMmbsLPUNd0TxUq7=Y7bfC+oWBxgY! -zYO)YxR)SIno>t4>r%azrT}RuQdyMT9)%SN7KfiDDLQLwn*el|z(daqhkaEz&(&e54 -zpSDff9O#qHPczL9sYazPPZSF#()B5hC>+$a0JqA}j;Ri~qDNc?jqqfQsuYeX8AHcN -z9?-e1DG+}cTgYwNB4c(;*OjY-;~S3FFqGxvY3Y~-lkK0)^Sikiedcy#4 -zKKcELO4}4wWm8v#U)P4C%h3af7lCCdb9DbBG>byYOEu1zF0T9#JZ-pC_DmRLC{R#`7EtlU_wJ+0#pf18aE^`0dGj)e;_wk0!KIZMg^9)Wv8zw@N_0zk_kMM -zrF9ETXb4PzDuGGkh6EK?99`9zjvy$xOIh;HfOFTVO&% -zU;f05OsDlWpwF!B$R02>?3Fv$DD@^N~*_Y0F-|r;<;FXRoG=Y;rV+1ZTpZU(P!sf51f<(C}T4+#Z_XkC384_`1Ts8KV}57HOt)^IwG>SoRg -z{*DsNK*9@cnN_AZVUV1Mzk%B#xSm+yM5GIE&K!fERY%aKV8x9&Iv;Z@7-_{Wy%RbV -z{+I?F7u-P3g|z2k`Y8*x)mk;=Qyn2Ee)Y^clq(X;fKd4G+W4Zb69;!hm-P0Z#nJuz -zo3o)ku*|Bw0hW){4V+)^V)+oskvv)EZ_XM0A-Kr0i~$#TRA+6Xie-9PHX*b8&p1AV -z{(0vWM -zd~G6~+ejC#l@H<1eIq&*uJvzKb@u53vceYYb5zfI4V8PHvE24)<<5k1ZiQJnbc?;q -zyG45MgAh|`|oei5b&U6W@w!*!&>Y5 -zyV?%ipIn5Bnt -zaqg9PC(Jm*C-HPmH9mY(dJ?*-cK!ZT=n~rMB`}6IH$9#dJ|6Man#hsUFuWa4d7iT2 -z?NbGfSq2q$<(J4KWp@LltYU>7v;CiC-uc}#ooq7K{8=_?kZSkeY$<_h2b;yQ3 -zu}U@$>X91brnX*`&CT~Kmu{%}9#u8pU;1%1-ycWN+k8{KJOtaWWr9C+jm?%1Lzmts -zdFZ1&icmg}6XpVN>JOn4?gm?$$7Zb#=vD&S&%kY -zCETsX?>jQrJjahzia=n>GaF;j#`^v}@Jvc)#|9cWKuaN9SHZvBl)^J1;FU^<`6vYI -zxFiH?55l>akw^%ZfDnrc&M!#R_8h;@c;iYTj8LU<6PdOaVrQw1r4Xf?bu?1S}$v1S|mwrWIf&4J(Yx=fnY_ -znH41nRGkyvU+G6}xVRe+) -zbB|+vIme<}^SDJTs$iYT;h1<8KxBPgU?&Wg8w9YvI*uO0`WADKV|_cvvJ?`daAcPj&*mKGCOzsI{VMTs0UdXqvS1& -zQ~^ZRHNarFK2~2IXKd>yvR-Fy1?wKh(aW;srlB>n70nnOO>s70Msyz03UQe1rPalr -zT*|_4OOJ17ySNuNGRMQ`tvsFd${S`IVm5G=%q{a96_bPL>n&|u^TnYt69|+7@%G|K#A0K`6cNmk_Xl6#Ko{R&E5!psKRGK~R=+xr%^aao}R^0jr -zTVQ1W`!Oh{O?Hsk`s;xQ7n@m&h6i!`Eyg4RJTIAvYrE7taDn%5?N+O)7|Do65*H`$ -zV0uspwG*Ao9buH2WTFpIz(o5^kqAuzSd92Ztk2?ce_aIcSpJ -zi%0{FAievC)`q25e~?x7Y9>9iAtPIFWGsM&9HO!GdjbuHAsI -zhj1g2AiZ+%7_$Jfig&8cfJJyRh`KLP?ccvc&Yh%>u2GPFQSf>x40XTc(xL9xGU?}) -zUYN_Jn*lWB5RIi@Gm3Qutz{QnQFgTX@MMOMgyz!gfLzk*18kHgNUt1!pfWBcqWw8l -zXR0H-sfM$r@-mgGD1fqHKx64= -zjAB+nYtq?M2nux{V3e6lzo+AREgpxAM1u6n@kb~N(mSVYy_#grM3bYhF4!@%vU!oX>hKOfGw04C4n)@$c;UwMX@y);l0*_4{aV -z4mn|6zwmU~>q3sZtGU9HVh<9P+i@{j-*EeRRM#?Kygk -zmw3qB58aPXQC$)95Hq1WrwDF9|+0sg{K)m8>q*z_rO -zy!Oa5hE1F??7bb6F1#`BYy40>#ce$KkHIAl?9OqKe--0RE*-9^prXUDB9D{5dp61C -zHEQfnTh^ntOz<${{slS^=ieB&HclqqeW+l&i#UIqIIA+UMVD1o8~2anlf(Nv9KS(4 -z^b#i%?>-)|)kU1Ydv<{(xvaCxT^-r~fj~TTL?;vP-stai5$A6crI}N*=nq`%bL$?k)R`F5>)c;_MTO#MMWnE%zzDJSe_W5+vz9Yk)vLbo -zKJ}_|2)cUJxRw*@NipxB8+}BV$RYON_Yc+IjqVSr*HDqqF3-&SQ^?_T*SK|qtiR8mBr>=O02;FhT -zUc$Lu-5=+%?j**&eL0a_TIAt8gi8aBx5Lojgc2ek=Y2kPVhNx9SHnye)-fsD$f$>P -zcAl9S=8zPA<5q(|P9NVc_``cC`))nyzg{CC2B6x|zxvl)e9Ioyc?Of4&;7`&7~Jyv -zD4`lVyKx&b&b|#jK;P}j`+{iKMs+%Y-6hZ9&)viery%d{!_N<;I*bHQT~Ns<>SsQM -zPIVMT&_&Hbo45t2L(=0b#+voQgi(*EjmL@Rz2Wp!HpwQLSVlVSp6?#d<;w62-bVRTVTLHOtVk+<){91mVBiQFG -zD=^Wi8K_B(F&x)F#!O+MTDr7_cJOlpb%fV0Y`vuoJ(%wzj^EFkyFKV1#(;BWIA3N? -zz0nQA>IP-l>K1Tu1b151b&PjV1a~`w@#D)s#D*{b2r13GPYD_@-Ju;f`qr`{gNls@ -zlg2$Sp$J@z!$9!%bcM^n_IB*b7;C7&rYejQVQBTvSbCN#NuwfF8)M7sOaADQpouUH -zaX=0S3*HB{s3CeI9D}nz|A7OxG$*&=ho=x7XxxNR3eA{e1;w%%yW?jwE{sQUMcqSE -z{$(@VPty>YYS_kYqJhQ>(E0*aa1|J@dAV^l>&?459B;$o0dz5f;%gaXLZ;SLt7OVU -z13Uvbv4Lw!zefO)e-TYH{O;*nUULuacK1g5mYs0Cx>eH1*vhi;8zdC}%1y#3ZT;NovhjxF+~v -zlRNH$+1|q$N54E09{VdEG4v-I-i!9JERB1!=PHaY5JeYB79Ka+vHvNMKNv@Sx{dmf -zC*HDzn!Ji}XyMuF15Xm60u7J|X}HW&=nliGU{Htma=nkBZgMHd9bQ0Ph=YK3Xe($P -z{GZ`GcIYo_XcMSwVuA@0O(HRcc43i=s@Gu -zpbLhnc#tPJ$P>yX(zh_D9)>Y@L12tGjOW2)L^}o`q8(_wLHKk#4}F6Qr}0otKSwS= -za<|q``lfa((NVvC&*KC+ur%uEhe%ycsj-Nj}IO`Yyq{^ZL5+Pq~RB~I`DXGy)-{fiwuforyv4SPNFaa7PC($MdRp5D7f -zJ&eAe)NhQ@KfhCq{vJx4&Zzh*GP(h7f*D}rV&41`3Pv%;Uy*IDV3Te39yGJe7Sgv6 -z2mF8)1r5pvfSTaKIYzn0dXzA_M>;JTjj0bsf{pegI?%Wsm6&nmXNl8jVWgJ1Kb!NU -zhL+A1=``FF@Hv)nq%<2uha<;0mzc-l#v4OTfuF_3wcgYx4bpf5W5?OM48oJBn_Diq -zjUZTKgObRV_Y!%7OWp^s4D$`QVttVrEroPFPEQKYqog#3LUG_J5QFI#*We3-oIePU -zXD_KL>ifEaICf$4q_yv;+&z|FdF -z|4pUyi&z@KoEBZe_@3t`hnP9zZ|=y}nKF;-U6_aPwl^;Oca@(+d3fvRI~;@p4oqQC -z%y^KDIIjNt=-5us6%NFw7dq#XPCeX8#kHA85^ok=n>^VpGLni(`xpqS#E#TnUwkH+49`x-p2Y9TquuW@ndxMP&4NgEiE=xxg39O>qen -zm*aq2yt#JbyzvNy3vBYI>=d)bv|^f=0?7N%gP-rD3Wb)~0T8OLo@UUA%T$7M!bM&mBxf;$Q$zt6Yo -zbh`VdyA#y;zyIfX=|}nG)H!wP)OK&(d#i8jVwhZZ&Kbp@EoRU3@jQ$`1X73lBxVtm -z6F!aLqlfuuG5bNyH`}kt_dRv2(_-W`rUBQJ6v-8nUb4n5vUyd@I8N8(_^BFJI^FX!WFf9&iZiln!k!5xCc0& -zSH|gUUGsUHhI@wQZzT_(yO4TwPI8yHD>+w%@471A@VPPT0KZ%rG{0zJ&bd#i`LyN; -zpWhpG{{O%H{NRe=jqd3?hPj@;oE!;znx)v*=Lb4GMIA7=K0ny{{D9@h|Gno2Jx^%# -zvE}$&cWmiSj)spdpX-btyf4Fg*RQj-K0k2FqeeZu2(Qu>szv!-60r68!LxnWu!_*L -z04)r}RmPQ~zm8u{@-m5ApC7E(;Mw~8fMxsE=Lai!4|sTM$`Jz_efS@8oICvYAV}e!#F>;GRJ6+?M+l -zTc00neST1Hy}?3b>+=H^r~aO1qJ3vupC4>}e!yyc>+=J*7GLdFM9H66^uQ*3{pW7= -z`-c`=pC9-~5nG=h{DJ2O#~jn>74@*A-HN&wITEg@|Nr{@K<~fb`uzpJ$?11~e_;<^ -z>D9<Z`SwQGuFFho7;(Prjc(LESHX-eg*4Bk=e)V -zn)i3Q4KMzpJkt$Mn!iBhL_fsz+r#GvcKz32<#t;vEkHqNQKVWYKNYS9`JLp@!_yd+S!YO8PxLE{E?ax3|vqR>Hk?wa%dmS?OKZb&dCF -zQRwYCzhiHm24d9SI*G~l*463#?pA)tXxhzp;f!2U$2& -zWr;h-`F1ZEK`{!c#q2}f7a*J!li!sd{z1jS4RNu(|IxPM=_0Vp;`}yjol_PUgjCm -z*so@K-`aNgk~{r`3t8?8_up^j>vNHOD@>ChiD|F>UqEM -zD{k!CTA^bh+gy8qg*K=8Ql6^s+a_vbDb1pR$9SFy!acXrCoT8R9|r#9SmV=|0W)>m -z^4+G(8b!$4X~DX24Aw|-e?}4ElUGzJoG6_%e}T%3K2fe%s04Pm`j8eo#B7gLQXH3V -zd!%Ydv-rCDchK@>H!`@hY&Cy`N0<^RMoCOrS17-QjuhS=8FP#XZ;zaafpb;HAK@1N -zL!ID$agjjeFc8Q$zQ@$LbzSW?#?n=z!hz&R1=9GgU!eSys@#E6XHZ=1_X+tmKpxJz -zFMF|`aJ6OYGiH80p}$y9l({h7dSbf!)2%0}_2>Vm>xpM(4`ImbD~PGEvFiypUHo?k -z{a4%ODsZ=+@CTuK>j^)>>>I*b9Qf(%))O_Z0TSJ7cirTcAj@1Kk-hrfr~3vYD;T$) -z@Po|#28Pd9_w|ABPV>lS`qj9z6aE_hY%%*%cM0P+$n(Bl(!yib^^5I<5C10f6AKY%ztECu9%FD2)CO%DhE -z9VK^7vq}l`7Nj}&m-_J?HrI{r^}UQjE&3US&0L~iPS3ONUfNe5{JD97|EbXh{&jN; -z+|_r~?^g|)_Z*9doOw;#<;?5Tu9^Nx4Y!Rep07A73ciCgcXl`aYL_zC4J>DLp-Y-O -zyE}??)40-8jj5iCKm7JId&8-{?96Ys_6K$v&94#sPX*Z*?ictMCoZt>R`2W<4)f~P -zICGz<{vc)U0u63o@P)2;HViab*W4YG_Et2z*qcAx_H(^?!d`o3Kb7itrTe8pxV}-{ -z5KdBk$hz2Jb`9_+k-0v7Au!VgA#bCxN7prT@VnZ%G;=!tcD|?`o%S9&dsUu)GUcD( -zx_WGgI;5?42dJ3iztrL5e^hbnE=hDfq>GZ^G00z|@SExWl@RW_C48*#HM9BWj|TZ} -zxM}KXHO$;}o2w(scD*M@?-$Z>piCD2wI_b3eS+hFzSe7Bo#i?V2V6Yx^Wa=W*lul2 -zdW`Dkx$V@RS5)ICdC{_}VI0GKA^!K5cOAQ_lI><-x_zS*Qs6S4;Q4L!t?!d -zGP;9YEt$H`N-vvmFMM#llS5i~nD|jVbGgZG$s6vPsDjpAF@B+cAMyYB_staXGMPrM -zG0!;2tuYJ9(eN76^;Gm;8Q1*w?Vzpin_-%CVBChsW)F>PKc?fnZ)WTLT8=}^dA{iq -z{sy(XinUqJ3Mb*M5;bh(sOV2-}0Cxb#rVjnb|6YiSI7BOG))tl{r?{=4;ltxktpCTzW5%MyI+ -z{aU*@p5rb+w%)JpTdM=_*88UR+_E2pq -zZ^WYObDTH-{6V*oPI1ZMpU%~dH|Jvh0^d>gRK<3k`o{{HE0ysRGa -z%f{6P{&|JFO!h%JPwr8}!-{R*Ei1uVy=v3f&HvB?6}fxMDx%J#rK@RL9=7;>Idz++ -zs>AUwqcDqKw}$-NwuoQp#P7$4f3r6mh#DXNYPQK({M00*j@ZKZQ+@nABpO`zP^d0` -zdzJOPTNX#+uW|8bQylRto%ox{NqFmI)SHbPZ2#0q{B)>`|Bfwd{|$=3y^@L7Ck5Nz -zKSH9j=SJdR=;D9TZ*TR71^cnl74j8-;7~`oaL>9P<_~T>Yy7OsiyiVd*8Ll_o_#|7 -z$mEUAu)n=XQ!^tcu7zf$%Q4??42-&cXs-(Ouc5VHiR3L*;Zmy=*t1XYZ?M$6V#A~a -z%_1t158R}f$RFm%|HSHizYER3YZ1#b4A#z&>zGN7tL5HRZrIhRC|63vL`gKnbO-P1 -zuz0RCwkRtL_@{#W5spfUxXN)RF|Iyxn&?9hb_<=Id-1As)dM-~D#K-%t)xIyi%Ckb -z|5fj!oVTK*Yg~H=zx#28EjnMhQ;MChxaFxs99vj*_+r%8oxz-yJ7}+Vkv8H@jkOqB -z_52ov-+uy(lgjJN#V)inBM)s{^ -zzs=)*IKv;3TtNN}iB`Tl1i3@fLKmWYQ_R`{-i_wtUFs_D-0I&0=?nW&ksVs>z3h-zjReTlH7aslAUpLv9kC_@n?(KQ+)jEm3w~uGgh4V -z<)U8vheYBJoN*f)f2|^D@Qj;1IWS)45+l3WwW6 -zNp+`cSA@OjX#o{WbFRY|=^b45$Z6im@$#-c-W_woFQQfR5dTD%-EEq3k)RuP0>AIrE@wVpNYo)IYL9_ViEJ6z*(vz(D)vEbU@KlKZ>bLZ -zJ0Um6z7#O~xvK4R7C76@uZ}wLNnT&s2Y`jQWkrRkOJ<~vFRhv~E^SJ2N!qlD#U({)Ra2&w7nGG1PnnQb -zFePnBnetKk)Pj<#qPqMQ1>=i`7EC*~YW(=3^4!wmDV0U#Y14`;C#Fp)nov+#JhdpT -z5WoD=sXlqC#o^O?bQ{yHOFF(wiqa<+6qZ)_>bcD03kt*DUHteTTvb^xwqy&6@rC`4 -ze@{DW$whOUy`BEVq#r*xyKDdUa*?(DHvCke{~YDPsW|qNW#avG>Z_x+t*6i5(HpF8 -z7GIySo7dl!Ab$o=O7*!dLH^nUyxtveL!o-*uWvvfYL`5Js_7465w%SyrJnyRc17y5 -z566X;p(ge8`Glf8lM(^RG93qVjX^NS=SW=|7@n+|pP`rG{guGfF5k9vK3 -zk9ztn(;v$`J);8RbZ)zl|F!I?VV{0!~v^@-YV^)6n& -ziTv^AZ`z*8^H-bx5c0>1Z~4AHzs7$&{mT8keiaMBc;jc`{$8K4eS-YDd&lRJ9pdND -z=<4;>awfPe?w^cqK524-_N_V6>l3YiYE8c+!SSv7XrDhl!TEi8Z?C_M`o-(N+<{(i -zr*SVt!VfJpeSuG_rwJYSR}uFLCDAIG;aJ{Q0I&)PBoPOJ4qZ(B1d;P^AUjE$kygpHU>t}g= -zqWJRXd3~bzmS5`iiQ+4}((4n&7h3G~Hz$}M%dhwPs}juL-Tk- -zxalSCQd;)9{U;lqS8+D_AC?p -zCmfH7vg?RlvqsqIkg>kFVSgH$Ys^m9Z|)N=cfbPIUMlxy>}n@@f4Yu~u^V_%Q(4OH -zMfofBcDkNRWcLGhW#!&Z*L8{P_Ql8a>E2G)cZuxui;!tEy`5d>)f*>@uLQffW~b}D -z7=KaqU4&ig9Pck|794l-_ZW5?W;bm2F?O|$u-l1tTxE8;9*l`Es-3%FmvyNxSJ#D! -z>_%fZ_YQAo>zlakG7Gzvjj+25yA6%7djq?SI~y){6Lu5LPS=ky^@!?^cJzJq0}Z$H -zAnYbK!mbj#+(y`4i`^Qt)AeOcd{O=J6uR0+tUt^w-gx;EyAF?fyR@KP@5p@HojH+Z -zcHw)B@%$ZyUD%(lKiwxhf1~0XCx0*ca&;XVV>jshZ8d}2k$4ey%ii;LwjPa)mneVt -zV^^yu27Ho@t9P;6`-6u4HRWKQtGxyd`0I$>T(e6S-!SY}e$ueNv#{G>cFFwd+?Mfq -z!~R~xZlc*G^Y;UGHD5IBZ(q(eYs~H=j+rt27BxTmV3+lk_m|AB1iNK=O9`K3c8jn} -z{m$Fjb#G)GSQr{Fk72j?S8vze(<OkFl#UJ6#96Pk5Y0)ng|Pwi~v0;ceFSaEx8l -z`0JvBa%*pwZ2XPJu16#6W?@&>2)nzmTh<7>H?XU1gxx0W_TJCe!>*s>wsSkK-7*gH -zc25S!fi;u*V-R+0+Ba-hiCy)<-p;P8(WGa`*QM|KF8bH^=aIC^ucbS*%g?(c*mgf3G?#-G_G>yJU$ExW1V_$skmX?Dr_ -z<67)KzuEgs7T;6Y)tcQ=HeBM3zb~=dV0Ov+ZTA+Ok8bnj>bgGB_&W-_hwt=uy1q|j -zHx9enzj-@d=O?ne2)pSIdplk4C$hU={{HUmlGWo~>_$E2?UL1_DQnl7mEJB{Jvw5y -zYL&N3R*zxW<-g?ZlGWoZ`Fq*hX^oetzBgl+`%iDD`xx=;{(5Ul=o(ffx4_++gnG?} -zS0GP^2Q~?%S3u4wy-MIV@MP2P2it@~>9617IoH?=?oYlHLfP#GW%tdE-tJZ?yF$ndRnkv_vde?AI~>a2 -zmp7z@eue#^?3+UNnx}85@%G=s6zrdcvcCw*zBB9wcY#abyGv6-e<9yLpycb|3CQQ0 -zd@7uP+{ffLa3=CO+)q-uU5sn5^YZn^5m4<`d#z8u-*`Gam;4i<>Qw+0XD_HYH(ulI -z{|YBzw+zbe1}M9kP<)yo+Yid_hpWBa -z{ZQ?5I#l}%f@+VJa4+(OOn!&^Y$K7MfYM(JCnKL{@+t6q&4sp!~gdh39R?MaEw6G4geS^8ef-Z+A0% -zl=KUr(l=l3{XS%zYdi%izF|;yJ)z>;4=TQ&F7xp{4;9~HsQBh`|59t^#OYaSTM&BJOzOOm3?2Mm(LY6vvyllM5I0vfy -z61Wkb2vv{vmcFy4|GL1Z{{zZ?8I=7MmcA`~i2D9=kuUcFD7zEk!=z_f`ls`Kdt7BK -zfe)ZBgo-yCsy*96wO>=H{{H#Gl+aT69Xy}o)jBu}z6=%btx$Gnz(>fJ1J&-Gxv#8t -zJOC=5XXkoeYb-PNHFkn(zk{IS`Nsvm{ceY9zZ;FyjQye7;g>lnp%s+-6}%t54i(Q5 -zsQO(B<*yW~en&&quPv0_?ojn>0ad?dQ1x3k+t=?&D7&km>Q@9+zvpN9`b~zaUq|CU -zQ1wWKDt7~uPUYSRH6G?c)#p6pNMn1b`fLXuq@2&sO9}lQJ_}X;?NH?(2Gy?nL6!T$ -zxt>?RzoNegs@$`o$}NWKr{kggbb$9^x2f9K<8ml})lmNSH~xH%mp?WxfcKK`JeY$2 -zeJuTlvr|I%kp3oA`Vgr0+1|KjrkC%AitlD9yLnLYO@WH9A5?rTq2l}eET3=9nLduY -zjbn}7jqQwYo#E{+hpJDO$$J=^K+WHO&+vBl8J9w(Uk=r87eK{#G*o{b2-RQv8NZ+I -z<$po7*JDuqb~{u(rdj$amVTV2?`r8Arg{5MpzMdkJE-pfsB*W3@_YN#l+c}|FN8|( -z2Gy>gRe3%Jm!ba~l>Snv_BvZdy^LR$dwHet3gdZD?Kc%Fo?W5Z@0Zhkdwpko)_4_EyA6QLDYqBA4ITg$ -z_ZMZpejh;jdmO5M7sLCoI~~ey98~?rK-F&)RQ-;Gs^4xoCYQPwNBVuEhQP1fTv0Y>NCh*b4m|_$~Hl -zK(*)LQ0@Qoc<=w;Q0?{<{2sd+_#M0o%DxJ!{fEO}NbdpFo`*v9`$6zh%4q{HgH53N -z{p})ecMtrLd}l$G+uPDNj!Ox3COsFnB>e!WerO5R56z(ZVR@l%$Frc?X#i9^zB|_Q -zN~rXHCcj(Y(=UNKuAC1wo~FSR>N6PjqugDg+HpI`BbwG5^L;zM3j32j6>9#R0@eQ` -zjE5Ru8sqi%L+S4}o@YEBD$XuY?b`~f+^0|V|$ -zKb?{i+5o?Ts>f?k{qhi0dtU-&UkKGtnNaP$d9+V|&v*$`yT5d@Z?_dtaTXX`8ecle -zr(bV8!FV)Odv=0~;u&S3#9O1OAAd3im=@m*>a( -zhfw2vHPm>Y3sp`jR5=rky^PJFjyoHNdag6RV_XPz+$n^b7a36X+t&EV30|&*(ziAF -z?OdOJuW_QWm+{vje%yWy_oRJ4f;#S8Xz6D_jpqu;qk-1_;2YHU2&i`a=6K)k4?)Fq -z9aMkMg8#xUAN~`LgtG4n)$V)1cS+wc*tg?4xRmry;XKNDA6^Lm0oC72pxS#1TtmL2 -zp!$0oOMi5bAOES4y$$If4fOr+HdH^Xg6fAdsCGOGs-1R#iu>B*JV!vKZ)ftg1AO`r -zsN+s=sBzRCsy;hI&HvY!%sTEo1KBdy`cbHMycBBwcZ2Hx)=>Swr*R!h$qS(Ll_pO% -z9&6kMD$XA$Ozry)RJpVHN99&Q_0tr{qsG?xkSytk!MEVfQ0@0gUw_jpIro5Ej_PdeJy|3AHa`HvZIhZ-+6 -zQ02~rDz_6eov_KA2`yld#1vj@HYXf~)sy${wwciM+di5|iff`pIclYVfK=sQL -z@O1j)5m*kdH+{9~&xCAEZ(Rx5Z`68}>5njdS2&6E!(a*A)$~7f^ZvhqlS%&^PJu5% -z#dVMAZ-=F%-w4ZK8dSUg1*+Y5H2%A*Z}*p>(pSP8sn6~38h8m@1gqeS@MQQj><@Jw -z*d3mN|LvjfV>W?wd9Mv!=ojMo9*#l(CCrEKK-u393*l{0`EG>Dw-_ql<**3-MQ}Vk -z6Uu%V91QzIB%bD-?Y -z;PIq)fwF($aBu%Gl>IeO{XQ4Uz8sDty&IJM>chPK3Ml&;sPVA?%Ki*^D(QWo>}%8g -zIQ@rl9@Ko91vO4)LXDFG)Au(0(NOcLJJfvI-Sppg^!{Fk^7934>j$J;^8%hE=8?Y5Jj1^L-%He81yhKmM+P8fS}) -zg;3*fn91$nV*J0?Atkf}<8>^QysybM?Y(>wl>WVgyu27n-q+;U5A^axsN+z7;~r4) -zr$Y7L4p9B~X*+NCw6O-t?i#56Sp?NTr<*?4cqo+JK~U}A2CDrx9pL@FV|)FvDEsZ8>{FoHjLD}yK)qgFZ`tR>;{Q2-gsPn)y -z<2d6mV;^G|V>{#S#-_#}_Va#jfokt7q1yWr<5;Nn&NF!cY=&JgsQ7w7wQnX=`~JoB -z+nPQE)tTHBWzSW$Ps9)=BUd>~4dap9N5M -z{oz2;)8X03ZQ=FEKeY6A_dwY#g0edUo`pOGUWJ?uA0e -zy?pgKG64d$c1lWY@o#UXc@0!Ej=zrV8uP1(ioO*kG168kgp!73g8{*F~ -zc7-~>?hUoxUbDNuo>~RfUQfWkkZ%T5zN6ux@Gv+4zk5O1y}O&A*Q;S4^sAu8&0|pG -z<|>$mJQyl}FR1(nLFHe!tIz*FRQ@-i#?uQ>vrOPEczm-@v%E>jr>^ilu$c3435N4f9T?cE?(&3g<5}fgj#>Jg0jDF -zNAGVbyiV<5ay8U=Erc4c2fz(*H>mdC38s>N{SGOi8qya*#WfvHfJIRKeu=v0;SGt{_Q4>fLHf-2`msB$iWD(8Hta?XY-=LD#7`a;c@o>24U -zV5oBTgk#~3P~~h3HLic#){pCVpvqYaHLos$npYRV&CIK6sB#KTe*o0Hdbg>cM+ZTj -z*Y<)sucaD4+Qy&P-hfJf2I{>05c~%J*Filmd83I>e;TeO{Z6R#4=GgkufvZ>|2tIr -z*CC(&KD>qW`%S(DsvplVc@k86XPKM{)h^qa{4-mdr`%yC4>s;^y!Susv8J7;LACd>Q0LzilUHmC -zxpu69YL}@{{!W1^cZBg!Vi6xT%KP_^-rrMD -z{#F<-GY%`|rHnqfqJRLzR1s$s4~7xp8zERD35v+3gQy -z_uhIhFM%3gnNW7WeB;xffU=uua!;snxB6>uw;0M_K9t?QCa?L*kH;FQ@wmWvhH-*% -zm@(UUn6Z_yneoRjy`K+_uNWUQ-fq0oc)qdBc#82jV|QaaMJ9r<*(ieu+E~s@y%`r^q{+{Kn_(fkb`|N`Di)5qTcG -z2A0A_a5#Js9tod@?VHZlA@V&?`R72*r(!65)kp68ed#Ad={rNsk9R%{g|357K&4*| -zbzIGcSHkv|zWD<`{%?aXlfD4Tz6ff(?+l-X-`D!|7od)}mqWEfwQ;iXBx8SL7h^l) -z?#8CZAKv$V?tq-q(rp#0B-@00&TlMjJikiYq-*WU*< -z4(CJpKmHBx|41nR`$74C@AXjVQ0!iVT7SF%Td;0<5Z<8tP~{cEbmR^uuY1jpTY-V_ys9_bs>!exHI%NWWUd?sRwvayOHIS?%Y+X;6MgLis%c%I~kQ -zghB^m|234~&*0AZeGOht`fX5t&w=fc`ucF@(D&B2ibNqh&LMZeU=}$uW -zy#~I9oNw|0Q1ke;=l%S9+<2GqYU3PZg)!ea*m#7oy>WMAit+2`y#IHMtBemAZ#3Sr -ziuNV$#ZcEbmqX3xi{Nk6>rB&+hC2QahMKSajQc>%*BwpX^eo?LM*bPf&pU7t?eGd* -z2%m(Se`i8HKN}0>?_^_!aT}=deZ(`~Usou9dqVl!5nc>`d)m*pJD~hs3gz!Y;~3-N -zQ2s_f<^2tX^4A&4Uwe2FYy~yHo_*5$y9dhOZN{^VgP{DC{=@q_4a(m@D1XPmYSjmfj2*7YSO7a5N*e))I5 -z&V3DP{qiteLOacaTJKJRnm;E(jlcb&{Otf$ZWH614|{nYTulB__&NE8L-{)h%3m|6 -z^VLred4G>X`MVX$-%?|x@gTUE{5wIdkG^}*`+E|~-z`w{=W?j{MnTyh4R0pB9aQ;0 -zKH%-&gqj~WL)l#jwSFptvdf0@djQnM5DwsY -zdo4C^e+({!*F%*v70NyrD!zT;ugH(y8w&L&zI&kJ -zyB&7N&r+!M(0tQRf(x)a70T{J_!)LXpvK*irr!&y9vklQ`~<2VtDx#}8&o|O!5riY -zsJKQ$)gu?G9zCGy(Ggw@cY!MB)4RR>N~riQf~v=%urKlL2NmBwuq%FAK&`tr-sSc0 -z!1>s{3}yEm`~bVhp~m~2roRBH9utkjq3Y2Csvdhm)uSowhy2lah~49?PKW -zaV@+Eo()yb2&j5zK*hJ|4quN8q5Pf;wJtvc>Ueu3JcqasgNplLcoY8HK+U`6rhor- -zANT#n8=&Hz1r_&5sP*JPxFi0$LB)FjRJ_gMA=qtR=FfW{K>5EHs-4e-iaQ5tz4`oY -zKHevw;(Y`v-ZSA${7-?3w-{cF|1nVWf1v5xK(+G^w|ag674K6}@m>WxU_T%3fWN6w -z@fJeGI}j?~W8m4aEtLOnZn5zV74KZAb?lB%?VAD>@2@xecprsl;{P6~cyEVS;D0I9 -zacI8j$3Vr~#n=`q-lkCTzIhY*v3~(J!{38Y@!kX#?|i6u&w*#b0x187L$&Y58-2X1 -zpw`F7LB*R574H#H?Yr@YQ0M~ue+?DyTKE$F--kLLzF_*LQ1Mn83!vid0~POH@Codj -z!|n0+Q;m=JBdB;^fQt8VI2Yak<-Zgv-Xo#fw;9yB`@*F*exVz`(2ZX>8~=wvH-6zW -z_-_MsTyAdq_pkTy-fz4CD&AR8@s5OAuMdRV;jbHX;}tEaU0MQ;h?SJ&gY(h&IIW597VY -zYmM`aM;i|{?rq%G_}$gs&n3pQjK#(g#@@z_oFw;Wyqp77eu?o!V?X1r#?4oGyDyDz -z8J{tBh6`xNUEyK)`}oRG=vcTC&L{nTsD8N#s$b57X)qUFg1!&j%>DJC67 -z2vol1umkqTK*ih9xQ}r=ZA>?|G(JAd+b@M1$#)Ul1WQdGXlw^Bq+a?`-(2|q`F@=J6>1*N -zfpbVd18%0NE1<^B0H|@+1S+m?&huPkEHVx?{(P?2zX=u3Q&92TX7X9a;johOGGRGP -zg&OxCR{MGQ5G*78PN;ZphKlD5n1)?vsCd$hPoLxED~;zHI~bcm#q;CYKAtsD^4-Qc -z@Knkh3rE9jsCagRN5ju&hC(Ni{w~~1JpY7>=T4}2#=>7=XX96A`FV63)VR-wr;z^` -zlUqWK+h5M~`Zr)c^50Cp7*-%pHaQ1s{I)l_3Dms$;0&MtF*pzT8k46&jpN}aXF$!X -zlo_-W3v~)=0y*vdC?iFo*m(~u$AfmGtIa67f|E(71)vd -z&sh4c@E7DIuqpn=LbX!{lwEtMbl!zKJwTiUT1RKIKk)ef7=SwF#bQ2M9gf$(7wyT3u%-36P%YfS&|(|!LvZ+ysj -zGu%XbRKbmuTMU)|1h_xx8Bp!q8n%HuLfOAl=KJRrDEo(?`sYe0`}3jfvf#z|-5bt^ -zJHc5{n}sfbKbCU-z-}>=|JlZJ;}|GE8Bp=HgDP()sQA`R@#U?7%KtQ!{gqJT=Rzp^ -za;W%DfQs*ED7%f5dAA3CUx%geSvUng3Qvd2rN=H0%72zI-PjV!&$<#H-}_MIJqs1z -ztx)A%4wb(e%KikX`1(TGr$fcJ6O{cglf2!7a4d0L3{QmT!BKE3JQ+@cOojBXPxHs0 -zd*Bk}2~fwMekQktI6FChq`s-u`t0al>z66UOxy -zFa<8L^h+)MLQ6lw(lagn5KDi1y!Z1el%MCJ{G0~WP9u%)7J2zO<9K79v8nOfao%pK -zvCybZ+w%8Sq389+`NmY^f5v+K65|ENqo9s=KNWcWN5+Z9;l}Usz5adURZ#gtCVw@? -z>;G=N)i}_&uW<+CJ*Rs6YoNx<*-*!~QO3RDVe~^YsPU5mx8XSO#wlFyl70<53tj>@ -zbN-qOWp^q}!%s(eF8Van?_>IJMtl7Yunl$>8#^1D8oxc+>#sDP4>w^y9&UtLMr}e; -zoa;~W<*$WJi1RTxk@WN7csLCz&N8St`$5IIJDh~RndwtZ|K^EaKMyL-sm4~uFGu?vwNUyGq4WCcCXJInae3H~^9He5n_ceoe%_cZz2 -zT{^Q`8_#Fk$f$8vE -z*bb`wT0^zpF9Ur0Er;?u+gJ|erzI>R-!8Biew5?K`I}IFRzvx@6{;Ujf%4PI*apha -zv;9M%A>@A)=D~$f<8T&~pP5j8@}T^rLiJ~EKkx5Aag#7ow-Qf99<6|0> -zzcMI){h<6chw^t#A3rWmgX+ISpvFb2$?JOiaq&Eq{uVeA{d|+hL-luGlhdI3dpnaq -zIM(;~N~rwTK=t>zCXa^d@2|3az1}uH3stWwsD3Mk>bFxY{Qy{vydOLd?gnRI|MD^3 -z&!fg=P=0cu`mGOCzxA;64M&GUry+k2OW@~l8umBAHgKVFCX}B8q55qfsD9ho(qHPu -zdkT?P!4Yr;WGR~d<5AwvhsIZ+{7i%DuSrn-HOA80z}=Bs!ad;wNBaJm1=W6ip!(+! -zledMMw;vzj^^ZgK&n+fbL-o%XlaGMvpEQ#<_VoSpHe7=L2cY`r8k46&^-uR6{yEDB -z-9w?a$d^IQ!&9N!X&@xz^utYV3Ogci=;rlz!~Mv2Bh)y&5FUd5B={@r58LAJ5V#*~ -z4!e;4ZPySPxSoTuI|Qa7w}qP-*Day^{e*EE`X`|5?t$`mDU`ob*opL`q3YRGdi>OO -z_VVj+Dd{i6BRCE}3u)Tc-J$CD6`93BT1RYx1|5-tH6Qqfq%5nmo%m -z-O^8m8_^Ghs>dOgz8Bnt{8NU{|1Ol>b5M56jAc;u&4a3M7f2P;4~Hsu52$=ipz6UKLM&8e>sfz_#>}}n`!U0Q1(wl`B?~MHxsJ-e5mq|h7^^) -zGgNzjlJ0pkY>mHfX+*{K9#lJCY4RlFD5!dOhw|GJ%J0TQeLsE<+u-LZmEF|x}C4ri%|7?7VZmgfr@VqR9qz{_lJsWd&tml{qq4l_k*87ref>+ -zpyC~DJi_?%{yzO<k0*;l|$ -zq)&jG84o8ym2`(oojV-Mqj -z#$BP>{hPn|_I?|xy|0Aor}K?j#&ly#<2R|^?iHwZdJL-FmYRGV>_xmsL$$|8E%@CL -zl2`B3dM+PHZa-yV+{XBhj#W7K|7?Y4PmpYKbkcCUqM_t&8OE;D@*{1yBCjSubQ -z+pz$u9lM#lhjD##?l+UJcQUKJ?}2@h`|il|LfW+l)O|Gl?t;qc2)BW)Ouu0V?$f9} -zjjtF_fb!b`wnyK_xVf2^Z-EEne=(H*%c1;V1b?GmXPSN#JOKTx+xvF^ALE(EiBSDH -z9G*t}dVjX&Q7fo^eRDgX??`WLE#`w+VVvk4K^A&x25L-U2m$ -z^s~p(&w4OBmV0Oj`~sPQoys{dzL`l;{` -z(g#BI@1DjFns|98RR7V|uHCmW`I8ji?@vJKZ-VOIIVSTg&&?;EMT92OAFN?R#gOUf -z_A{-3EBVU)1MqL~Zul#_1^yde2cLsi!6V=$CeMS%BcBUb!!u2;fQykQn_L8!B9Ae7 -zB)k>*1d|6qJY!+ -zP&XYC>u7N;av8i7S^N^2w$b}lMvLo^^C2;h7S|(>f~O;kKO*Ns>N;Bd2{{K&LKeS6 -z&VsbTXz_dG9TZ;?B|A;{ua$Z2pmviLRf-tc5(@f+k+cm%Te8FDko -z@lro^5c(7usJ};xpChZBy_$q}=>YeEX>boHf4f8Z*&8Z#w=r+F=VXe_~Y^$YmC*#d}Ed|%@{J)?r8aqHO6XVzA?*~W(*l?87QuN -zV~w%em~YH7rWr%VS{lgZH`W-djrqnbW12B!tmU}n@*8W6)y8~dmNCs3GS+hZa`}xl -z#%g1}G0T`{3>j-VPPzQX8e_FF-#xx^v`O*({>)TMxc%^WUptG0trA~bcGQFH{@=_))>*3H!lh2#% -zPxtwENcVF1_hNrBIsE&t4|lZuH+%b$rVsx<>#}hEJG{Qo?8Co5y4K327M>W*H2X&;|IBb=Y(ge%YTA7uJ0(?7eN*QeTeDK>qo>36jJWftH59Jl2! -zgNp@y#+sZ)JLz*WC-fF6X`%4%haP!??2#*^<-{}4^xb^^Ur3W)iz|IbFfZFQN#lph -zz5Z&_q^~`IKlp4QS^D)X8uWRN|D_NAUb)so(r+;RJc}p%d*2I=LEp4GH0pMrf0un_ -zUmZ%b^48E_uD$6eeI7sB+vl5oRx5Ac!R+-LD6(J8$yT4w`g{E-)6b<}q))xj>vzfV -z`driBYxp))0dfk#<4!XUIMI7%Wb{?)!d}k=eNFIztHk8rQcNk`n#Mu -zoSm`gF7UWtsms&Hr*PcJ#R-3;U+kp)&KoC)e-l -z-__=?zxB^5lRpo~&tg%Zsph|j`QOXxpKJcV&hq{zn*UPszta4DWAz_p`4?JztF8Wr -zS^njg|6Z$qhS^_k@og}FUBdlu?fam`muvPTExt1I-#^>OS8e`RS$ylw-@3NwY0qk# -zzxP>xH~{|7PP`>mPk~%JTjfoBaZ_-`nDO(ew*VKiJAoHT{7W-(1t*YWilT -zFR}c~O#hYn?_l~lmcPdI+jHN>&0o`ZJlxkWA3J?=4l~(~e=|*AX8J{@FEjnirmr@A -zt?8>xKd`qiugu!#%Wb{?>YIIeH<^CA>HBQw^;x%h{YKMQoBmqUhwkwDW2`?`S^ZYp -z@utk`w~y&pn|_Jurv=D))H=bQii -zEdIHc|8dJ-W5<`NreAFOy{vv2c6@o+^vg_NYWkIb_2m~?{Z?A}pIZ47t^7VVzaF;y -zpIH8~RX+b@t6#O*?_%-g+WDXj>kp0p)EVCXJkCc>e$>mocJlIiJ0GrV;^i94zsAnr -zD@|@*>GidC{P-K^Ir+=CC0~P`h&?Yea0Kx^W#X?Ytn~*zkFNM=i7R$ -ziTO_(l;RwoOn=K>*LnJM=?_4OTY?X&V=FISly{=N8VIX?gL9^T&oD?e?bm&;5}ZRh0`R^RaNU3WA&{QJ_c -zTYb`O{rsBcuRYS2zX$W7MGEV)wcejnB`;s+wP&XXDj-V{ebew~~jp`sjv`;tT&i_I#7W -zzlZ&el^6c~?^8_<|K9egR(@`0c?*T^G=2E@#9Nvi{{8NEkEBhu;d;Z4hi@L?<;5oN -zbd;Cpnmpa?kFw)Wf0O%|yobphO}^daE+!vg{vI=bNB8pn?=kuBCfAt!fZ6Y7`Mc=+ -zL%h$M{yfwFVDcQx|Eb9-X1~VdrlwCdf3r;A#NT$91bpiV}X|ekEvSa086JzBx##6NaHf>|&R|Ed~1?2bJ#M+NNDOP@v>y&8! -z%X-Gj6UN8NZ!(Xf?b|kum46JhM_UeP(e?*Th?OthHCA3TCRTp5L#%x5s95>yy<_E0 -ze~Fdbo*FB^8Yq8#`&j+Qfp}-`9IO8*(0*?XiPdZ0XLNn{**{j^VOXrZYL{4f&gfYA -z!UJOEPMmL|{r?Zg^=SFK6Jq6axk((YpV2l}-u1v(`ImtG(t!Q6fPJUH{CGNG|4_jG -zu7G`qz<4@pzu0(k0`V*kwEv_)`+UoJEG3i`3V+7B`4EvuxOgJ+1p)n)0sUP8{ZE1R -zKQd6?ubh3T?sHUNe(fEYU$>8ot?#da_UIFsUq=MSqn@{>)Ro3>&W?|jwLc(Qf3>sE -zs>^Ywo39c1KY{vdUsH7cPJ!`u^`uz+oq_RJ7&sml1?tmgkJ$Xj<;Tk31?GSA6Jzzg -z_KB4*3C#aRf%$*$X|eVl0{#!%D^~x{KzpBXa;*N1!14XJ!Lj;5f%*Sc;COd>VXS@s -zK>xosC|18;i&*))!13bIz@8LlEwhs6^>G;_4rU%;hSk}$a@w^pi-)VvN?H1^-$$|DAc}lFmPXg`x -zLZE&3FNn1t8ff2l0`2=!pnZ=FjE|B)`wk4uw+jR9dw-yPrv=)#O<=r?547)tf%d&Q -z(7sm%+BZ9J{JJgBzDok_`&giT9}Bc^i@@>fKRd>@=j~l%<*Wg*^7t;X@~wgM$;A_6 -z^<4w!|1$%}r_SAC?I#DydoNI4dSJb^Dp1~>Kza8C%9|f3Z%Lp$?bD1N-{%L)Yf>Dm -ze>hOy^MUfp-TEnV{6A-`@<-&^yT{6lb7SS}^J3+il32O5n=cW6j}490f9Tdj5&iY4 -zvHH7c2kO%^P@iK0_30d_PgS5k+7B1qK79lAIV(_~;eq;` -z5U9_of%?o1)MwHNl^6N^%blMi@*9Eip#AdE_Vc^M%ButOVdud3)JBTv{FevD%Y%XO -z**q{lhXmreJ1{;o0_Cj^l=oqvyhnz|#*-PS|IhAt7a0$`y7hQOzPLd7Bl4H-_!W@{ -z1p0S%pno@xjLqLX(4Rkyi`DlG^k-q9KhJXQ6Dj{$*M1TC7}sAB`3%=z5xLB@Uqo)@ -z+Akt+=lUliZw&ZNhgr|KouF>jVDp4b0!F -zK!5%mn9tfT7~Q`w1p2dg;P^9eRIL4Hf&SdVt)C<9aciJIR|ooYFE>6yb)Odl=jSFa -zo;r1CV_-ha3appU+)438KKmRSE5Du{D`y7g^R5B=-TgZp8W#nuN&R?inK@bK>faGB7a$R2Db#{bDPKNs{{H0 -z1QVTqgX^z|zt)pu^@{@bEU#kfQ|$D0;pp8yG5Qq&{p^;p`W@Z)isWbSTTK3%fPK4w -z{@8&2{(w9+Aa8Q*5h?G3fWOd~38iBu7F0~^U0OCHG-h(qQYEj|1ih>bE<;CN%YFCk&(XX^>%D95c;?gNy`V>?ajL7UdW@u4ac~M2t -zluDO8WaJP`E2b5XuN+fQQc_xYZ0Yp6SdK56=G=7ctq4j77GpDcT(>TrGRmsPmJ}Bb -zESiy5d`3~VQB*XpzNrs$LQ&_2 -z9!gtyiN>3lH?g3cl4)EeCUiCC*s9`^%HkWaj{HT*T@h`V${2|yeP)d+?5xN -zFQK-KzcEvb$}1pF#*8VPIH{s?(wK1t<HLH#|&73=U-IF?i6xzJt4W>ygZ;``|%+ -z^0Iq$Z`h_=*JL(5U16CSow_8m>eMBN`Cl|HyQ*>`)3dnHP0-$@6F6yCY`hU<_+oGzxUuo23>LnXZNn>xm#XNcBii0>ZSJ>Fr}iXkO@4b^WZ*R -z>#3EkbB``@)4OJNs+S&d*M*#!PHz)3k4J0tZCb -zyLa>u-mN~;HQFGvlTJ&y -z<)xLSg{387qi73rQJ9@^Y>!6R_0FsF5;-~~nOQTkv%@{mKfCvg>HYJDg`;R}{=k^} -zy>7xC_DAxoV}5V`NHzRGPwXdC25x}&DV|VNQOPun*J@_Qcx{Xsp~o?cGZLc8imM&C -zrTrJ%|Jm6Y-3N09FPOk7I^*~F(ggL5_s4xjI`ohEir={n`ONG@M{^ttcMOxTPn;%k -zW>MXo%q*PQ_Pxjn~n2=C4MwUUM9gp-Dy<`zFuE82R8``nDojA_M{6NgW!C>USV -zJ7dP_&G8-5^1~N?IQkCGBYE$oa>v)BCdHx -zWOgqvm==2-)o^HCa+yhywdtSXkU96~I_%mh^Urh`zbT_u<$p#){&9CP&G^UN#Wdm{ -zbr<(K<##n(yo;GX;3)Qr=XW`Ze_8aqT*ZvE%uY(*VfXLjk^n~QE;!n+$rblJF~@-08u#!Tuz%W2Hi -z{&Sp0CV1=_p@(jPZE3aZ=J=oHi)sER_==k8e}XrECJm19sA1S+de3g1x3ulLL+QRz^2}AGBXa -zcHazZvVIvOf@{8H3#&%Eh&^2Vt|(#;4!^@ifhhEql@t|J)QPdT-eXindT22;)|}@tBa17i -zaL;5|!Pt^WjQv=E>280_&3jhD+)=u0?Xkk^0&V*MtQm -zu*}mFlEH<6u^)SvCHh2M?}k}+b}+Yp6yP3R)O&Ifv<=@k)t#N#XDC6-Nc{e(OT!r= -zPdXa34R>oJ!f;;IQw`h7YvU{3u3b*TOHT8O}q@Q -zZ<~0%8?=p_T$6@ccXDlnRdA^qEHdikn$%n1rgYFvgDZ((hCp*io!IMJ#x!As3uP0DY7t$x+5QSRqt?A&mi_mR8So`2KQulf*pv0M)jUY -z)-zBck$GKD?H_wargS|6bTEg2}0*AB60wtI=yc`LpN1EO5T#4(Diq~tt@WP^=LyeL#^mE)C -z@zNt9_$5NnW6V(|$(3s`pYPx;%Ag+Jq6`gOyaq!`T9wFcuVA+LHA!Y4uOi9p)e2h-R -z^&EEU#3em@H^Vo|!n@GeN12y9qoV6@p4;{q(SJ-{G26F_^U7vq_vxQkT-lGmlX>kN -z$E&uR{Xw@1HtMck;$XvpW)o+rhb-hzT#q_*l -zor6mHS*O)I>tz11S>8GRx$M7k#O;)ztUp$RL|*?J=Zwt%N(~Zt{k`jn8UFm15kJ;W -zzjr;+fZN}>o@l_UJ5NTQJ=X2DufO<-T~8!;`(GK|3EKM)&QI?(a;T16BL((Q#@-nU -zUoa&#id?$5tEc3)?!t(p=ZK_c;p?iTMv*<~NzLR-S6oSrB6aYWU&)PKC3FWov&&dL -zchjLZvJEwU6E?y$5`=5W#^k7L&PEuA8?_Opk)~~gakzmSVH&BSZ{~zq^2&O+ubS}$ -zvIkc}1%<_xGnks(>@6Ns+3zGZao*&LzL{mE#WSW)cRP41^Ck~vBX9S@T} -zWDKbL3WBcm0wqV^-q^yjdpB5i|Kw$N(Ivu&?sid<*{yg=Syd&w;0Dvi<;4XhT`CGn -zDzmd2ygS~rZi_A(E&Sf;2{GGlW52MWKB?CZu}_0?v$Okl(G^A)J$AOu-6x!(ZP{bC -z)N@qdR|X7{aoPGu8^BV5<;PsW(M30%&{v`p|DRvG}=0|O1Ftl{RWm@#>5DPI*$)7SoRm=>9- -zF}I59E-a#MC9|a=aqhUcx|8OJci+1a8DejOC(RK5j(E~6(L>0(KdF6W3M8Dt6x1w~9Ym>)XYdq4kaGP0RWw -zNjf8Db4{RS>bA#d#A#XDKiGE39Y?y#O|p8q>-;xln7o+qd`Rp+p+&=vHQJLqj%$(J -zaiqR}_$MwPfhG5rJ9X||RZ++$)Q@k5(}<*DYg5<_)tyqfeu@;>?b- -zA;;&NQF*+}UhFZ_p}q%_xl>qCRaRD7URmKTd|e86*YzBOM+kiX+ojm+BEl(kU#}h% -zI}HO*!yEp3bs&GFrQBeP_g(3PIeafPCQIEFTD-3-2mFU;O(RVGb&)P#8(|zC&5baP -zTyHhPSbjB_6Pnf^1@`r7SMi3vUhRzHxCnl|I+30KdUc?Ulh3no4@7;Rc#HA}#?brL9|(%k>I~x?aGR))z_;7 -zk!(r-2X|m?xi3x71YfV-;Gin{~zhq`n-5h1c -zNn+~%EADEW+QxzKUy7gv_~@hoTA20@_n7AH2Sm7Dsdr^|9YCc_DMQl`^t#}t60xYP -z#NY`BbEwV0Z@<5?R~Pe@X-p3Y(|E;#9Mc_K8nx|XGU^8L?pl$<$vnw7 -zPm64pWck+^fu<;;Pqev%_rPX9%0x1H#lO+(Mz*{^e_TEyx)muNazH7ROF3!&N=q{= -z#09C3#6TyexK$epTVtE58E~ScXZk%`J3;y=s~9j!ze4RO_gky{K1<%#i-{Oy%WMP1 -z8M-Hmy5B8}EV(#Org=`=yqD$GG+Q7fPLh0>XN&a1B3q_s^TqTz&(FT3*b08lF?K1= -z)}z`W0)!ApH}N(f63zpl1SR%Jp3zB& -z$*?TfJ;}iIVCrF6+AnkM7fT;0@QKhQSfSf~qmFr7-=_V?wl{mz>K4!^a -zI9e>QiVSf^}jt;jg+FVH!hm1PYY}&Bd -z_%@THS(d$^d6GJRRKXMD8LVx|uR(3;-=ggEeL{br~G?20lKlqU^3PvQ*Tte^KH2qPam;L)xYrE7IEiTlCLuP3`QMhZXJDM#}e3 -zHBwsjk|U%z>MU_)qC?3|D6GpmG?d-M&dIDjp*i9(M}+p|&Qb3`LbKa%PiP8kIVH4b -zfFg4rgeF3N>@`uuxA|n4Z|C!Dw-+Mb&f@gf78=g<&$l>J+x7)=AgFD14u5?RI8J>3 -zIejEYYKGsH{Jh*JXUGjVXFBKNluR^NFKZcb)TOOo)5NJ-)9&D~y`CIPb9Yr-BBKup1AKTS*!_b3yIPh<(~nb()*OgXPPQN!TfW -z*fD^CCp(ivhlk%$p9V1K5%obQWvFyz2`KU7G{O0UZy$|!kMXzg8E!itd($G1zACpn -zU;w}{=j>TEuuJn>H39%ZdA0bxL)J$5Px6tpB)i4=%TCau)xkFjC&1Rg@I+Pe*KAEUM -zsI23Lm)k@7k`-#Teq@;~nLVKgBDCocMF`b20m6@mYl@%Uh08gR`D1VT&pSOO -z`uRm^kh~)VFMhMkRHLig$ox@g{ydr13U0ou3p6$W-5@XP3zT^WV8;Y5~ZEipjbIuD3!{% -z@Fx)$8IOQ29eAP<986##E^6U_o3k02rj=b9Fd3L@YcgN1(^U%F?($g^Xgeq)GiY~r -ziQ!$Q-lNnxgu83V5sd6b;s{1$u&n9U@2FpQ+(H{gHslT~o4hmU^asLA(_JB+mk_y5 -z%jSw>ahdyp_~SSqh*K+2{|J6IhU!ElGj+9;LJSm&LUF#`%rEFFpuYf1ke&HF%cFSw -z=~En!R)o0#_(HQWoz5(()`lvY>~FoH9Nul#WOX-)!K`cr3m2jC-YIqUQ}%C)4_cY& -z?>~?Vy%*t1sBPo}K{v_=4KgZUC{tbeI7gI9^$-ZxaZLP=Z;@2Fxj>eqJ$9@39__PR -z#rRmS-73CE`|T2Aw7tPUBW}2SV&B*m3ry=Urt>pep=SnpNYi`&S2&ZzgrxqPk4R2H98c#uAxNOj}S -zdP5+Y;sF!9{D~+W@_$yKp?brlQdX}(@bEIh -z9RX#6I|RxEJmP*`CV?l@cKn<*}R1Ns8E5W2Q8rOP47+{CVjjAmGj5$ojPk&4L2bfaObyc$Sb -Mn^_f3=$l3V1Jj|5j{pDw - -literal 0 -HcmV?d00001 - -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/CryptoKit_arm64.syso b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/CryptoKit_arm64.syso -new file mode 100644 -index 0000000000000000000000000000000000000000..ae6d99aad314a9d30478eaa03c171729fd988441 -GIT binary patch -literal 176808 -zcmeFa50q8cecyZTTo?uvb(?**zaRJ~UwNSZ+duu( -zo;ti1691w<73}yB50iq&eIDI6YTGq%J<(pcuwttKWK#Kt1{Jy-f#SJF28NV_RZfcZhi>- -zJ{PV3goD>9UE}Y+IeLE&dV6hBjD;IEY%FZpv^DpQjrL_y9@qYjrSHGl*TIL;W9i?F -znJuPG+(ff-ugq-;|3A!SOM%3sxh8!v|3yfaa?iI0fsjzXg?F?B%lPs9KW+)mZw~_C -z1^033?-TAi$9*aQ|H1WHts)J7KTXQrTq^q0UpH-I<(BQ6X>`Rco0Z13kW2XdwBf@y -zw`_elh~?px$>-^Ea57uAZVbyu;BWX`ZY!dxgAg6Qp6liN2NTRE9yfz`ziC+aZQYXJ -z_{bx!i8Y~rLuSk7{PwL|H*U`Vnt^jS@FIBK|7(wI+xQLA^w*@kCC|QYibvP>;@7to -zH*eVV^({GXIhw$^x95?KTX#4?G=1N@F~6<2V`IkQAvs0x6#wf?PT-S}XG7j5^?k1R -z$S>!%<*hpV_YH8q(No+^ThaR_dZT*ohpHkXFc^&k=l+dIpt#NQKcQD&xetQJgTHdk -z#%)GJuTL+uJiKCSPjTDU@%j6Od%sxp;tA!Ppf}7j9zI)t?U%Q0Nx=D8a7)1X`7Qa} -z*H>)cR@k_CTQTn&ANf4oh+OZN1G{(gmdzXQ-~P+Lyk)DwQTgh8l1;S?Xi`2S1G%l( -zQ~Wv%zAu-5Sdw_V6pXz2XsYsNCg@w0e!Tm9x~Y?z6AW2IptfGkKnQ?Xj1G+GFRq -zUgA2#^+HgC)+f2}s=<@^cMUDc)7H>!4+IP;2|vhHHg2+>A!LuReSX -z9z(+sWJp@|2yz@ij)TZ?2swTaIes5G9!8G8gB+{Kv4R}S$Wb^N9Kfx3Ab{7YY7QI= -zhk{xK8JCf9m^bhVC#Cny1DE#B+6B?FH=e)H)7n>PCI5@$KWpQY4>1r49qvb`@G5+oD%-38I22n -zyz394ZDx7+t`ppU<@W+db%A=6Pki^fSf{Vf^JG1e;rl}0`yji< -zSmP!eYwQbZxxGQHXGc)W?|%{w#2UMaE#O_@Aa}(Yhqx=&803CC_dS1&m_zXf -zzQ)ELvrOz^;tuSzjXh>?zxCQX9+CXB>#fd6XS3KH6DufY=%(Gx -z$L2)ikhKXPk1eBIpNSdPHHjGnuLn4Sx5>hr>U{V;ifek~@OrU*_}#wwscEm~HV3uO -z64%7)-x|+f+#0F>xp<7xvjcm)v$M8o7ybs@DLeWQcGJWddtHpN4QWv+rM}KJ@C>j|a8y(&m3aoFPB@gB!#dM~E}3#2FRhj9452 -zZpEYW{rKN1_#PvUK(1xt4Yg4dk6`nQr(7OvO2|CgviU$UW -zJ7}ZE$K}o>VuDlTKW%MA);*W=#49flui*Cwh$&Qe0iTgO<9y!>__`OZ&TKy`T!>Z9 -z1-0!yRyj+ovVi>XDGR?s+>u9dnZtc2I4&3Nw}Si3I(^8hxWwg=%$6$84D#G+@z_M& -zJ)O17($&q#Vo`v;z%TGCE)HtFZw0j?I_~3>+){8@VsS9Bh<+~vx8;-_oYL3ZMgFTn -zt?-7Wr^)#T}P6jq}v(}LO`^DI6Z8N=6NJ69|A&hfR-YV-XO`5OGk -zuaQo4f1(%zpX -zCVvdwd<@<6enNfK$6ho%Cgzzye|2rbPOt4We!}!u*I}o9e|5c;Tj+aw;9101#B6_W -z0%os;X?)M-xbNAt6`Q{Up6{fs9iV+2a<*T3xXao8-N$sko`CPn^Vw#+O)N>kF)(b!NO*r -z32Lw3=4=)1dD~KWGl&i!wC%K)yZl^Xv-Krad`TthOI9X)2|Um3aAm8MJx1BR)Q|l! -z{mXUqFPFLgCHOtOoc^WymgwA(A^MkH^e^!T75ss>-zuM{yxLW=e_31x{N=psqF!+9 -zAo=l(%k1i)mRsZK?+$8T_V$&sYRknnT#JKRVUg8K*+SWr>_y7a -z9*iw(=XpU8x54e;xxm@reU=ANTU6Lh|8p8;&QkWAg=6G1&D%L!#^?m~73Vs6Q-5Jz -zP%FLwPPY9$CHpTwAY5eQ4V;-2 -zsr14oXx_~4p1M7kER2ocQ%}oQ$%C8?tb;tGFM2jMeu=a3OUAMBXFTnVHh%0w2^+r- -zK6G=n2DYwNbP_vd>U|IKHnttSoApC~QhlWce^7G$iM>HBwu$z=P#nCVISml+z<3@r43+{ -zHtobN>=Iw_1L)|+!|3WB=LgX1;y&jG_Q(A|(>}lfV#kA&ITYyw9CLjDe1Yi$+`tzc -z!51_gZv?l{)`O!ROH7P6(&mcCoqae;o>TY??7kmwEUHZ^op#xu#tve$HSQSp0iH|P -zZESJwlx?@Bee+z-&<8k!Pr)`1VE2tpI8DCioV_`NeZeLvefx{fo}R^@_&&gkZoCpc -z`SD6)+mJ_bxx*c~6uN}_OmL6%0d|sSsmmjoEmI!)3Fw`{qldcJyFNfKvRLf;0N|&- -zgCA4$J|wpc9F|)8irfqOy&PJ)DEl07{mP(Ld?Tn8-m>(V_@8%X9Bw7L^8)qlCSJcn -zo~z@;|Eq&qc1=*rbvs_H4QhYn`vI#hFE$DeGAS$p&&9xB0}kC>b0|BP>lMn=j`9~< -z`-(49*Ts5W#?H;-eY=Cdfbmi9yXFC-oogB}rgNPm-%FO3p6TfSH0PHNSsr9b(>SJJ -z7I)ic(@shEeFNh!=D7Te$pg*?2lyv`nrFvDJr{a9YuVGhTVMALh5e)*BW+(j&Fhyb -zU*+9V3(NS6na*F#9LHary^g<_neZ2_)csmu@q8cfH+}>BO`l*bGH!K!0(dB178Y=| -zSbPdC_WggQF907*Jgsrr@t%Kl?`h_>>|EK~jG6Z{Ch%-&9yVB)=BPBM^7z?uCKw4) -z)+b7y6@K5Hy3e#5#nff&wQO%RrY?5`BU338oky{0_g#}sO)(cVK-<$ejASOb{iQDh -z>yB#{=7$?#R`3l`c$Kt;H49iz69<2{MgD$PwG0jY(4c3**7bDytJnI8j|Yg8`=M>X -z&=x#3SbC6{`YYEowy*k?x19cxxj*gh<eKlWyz -zBQ-LB&1qx2TjSq@*g1_04>?;`PIrSxx5k@mer!c$2h;a6cXU6v$)*a1ozE$!A0Yn& -zF25bGDW|_o+LxhaE%>Yj{|CXh?b`+ieh--6-~(*~&}L{VeFfNG1@>1%oS#LGn(O@0 -zz0aBP`-XU7xOJpFY-K+n-we;{bC;T{oNMMGpFu8Wz7qaw&eG^iJ{8v)eoJR6nbgQa -z^g=SObhziF?xa(Vx?|Gnx>FtvMpD4>`XhN5-2`7#&rndWr{ta!@j*2ojC=tYF`Xi9 -z5qMrgN81@I97Jv#5@UsG4-L9)(ky=JH&!}qoqn#<>fA?+EQZqeA-@^d2H=I-fY%i( -zC*GlFRzIxo>W8)g^v259j-B<>{~Lh+N~@qx1L#j#`ZJuuFW(4Ne24mJ!X3N)4lZ;Gu7N?C -z$wQj*n6zQZLG?${N)}h?pz5j&1%_vySF%6S7nPTPtdwj!B#vX=%ff3mzt?YUk=nOx -zOC5%Ml!x&b&BmcJ@-65)dN-~O!Dh;a$aV<+0CkNSn=D??MvR}~p0E{)@nY?lc0##6 -zwLy(f#@bo6L+PzaLvCtg0~vIwWYfJq%cuA}Mz44;Sqtw<-r636ZwdbK -z+vrrL-qu5%BF*Sehs|SPVsHAvYe06$jWhN;8ueZ}Q%=v2eVNstz7M%I&IR}5hx&~? -z(UnM9>59r;X{skvM*4YI?yxqcoR=NpH*!*Yjq8qIJEOHScNjk;I%k`F8h?zBLu%cO -z*DVVdz8JXNO?}38elNRwErRKh4 -zkTJj^#sH0s@`1HC8SkG{BVKpBj+lJBH~P_0*AK;OdM8>3O4g3_)5hfE`b-zEJudN%6pD85C0MY526l}@S6 -zuJ-fqq#K>>u=dE{i%bWIxhA7`(cjX;XK2%^Lw-bl#rqZ$x8<>^Zk|fz%ENKrCA_`; -z`lHznck&p!KVaelhwas*qfaKy*=P4GTUOz{+NgY&Vj$sS@X0uM -z_#$inXM{E>Z0F>$a*X(obi{w~Y~BM~b+iR-uU?qu=J|(^-KfoL@ppbw_-Cx2wEV<| -z4MpA!*WcN6XftV!Huo$Zhwn>i(`GGQ&Nq=}WSQ4HwYzlPr;%p#f;8{b436mt9vu-p -zOuE`^J->f8c=-3j*54aEpj~ws8uL6$2b>h3K(B4_yH+g|&cspcyi1N+q -z=lR{jD+G`4uQ*uJUBwQYB&D=t)fRK3{I5QcoN_uKu(&IM2P=ifPnUsB=`INWfpWV+Sbb9k&aB71A>dB;1n=d^jV4ibNC)<33i`$yFO -zBv+qp*TJ~!8?Akb$N1jnKvSRQjnr?u%k)E?Pc?W-$879XPFq_f9vJ_C?u31q;kti_ -z^?!%{ZrXWc(Y^<520b01Ju3c=_8&q!+~I5i?~T1s -zyfs?4=h7L~TPDrhv!uWA^J%hM-tY7ihblhye(O(VQ%e?>;y*u^uk~e`cT)Rn3xb(# -ztgS249)2&fuG#lbL~k2@)&I7(#_?y^;R$SG+e&p`(odS;dwHrKc0(IUc>^bJ;Y^c_ -zL?;ACHcPfk&&F=KJO&@0$F+U<^e7&JCtNz5j%hupS=UV*QINetN22Tde7q;W@Sd(g -zLubz49-Msp&fw&EuKvKTVN={C8~G7vzjS-&NoegRrg?b4t+(^<^W_`cv5)VZiw%V*ojE(6r|6jh}#D^z*|3U55*kE|2m|Fe+N!;6H`%9CI -zT?@wm>*GBqnyytRRynS+PRZEX)-PSF -zM&_h -z8e}u;V~w^AVdG63;%?dy_mb^HOV=v2JN&~5jg^P7LPzshp^}cvsgkbKr@oq%&qwJ` -zf8<1R9f;`Fcy+(&yUnHlAH2HgXPh4e2W;|*g*RFI6vn*RW66JDs_!4TKB7ziVVg~V -zx+FXzW9a-gF*bBsA2-R^l2JDvULKxgY>LLb>*L+F|77t@)yMgehx~=s+bITzSJx^X -zlj%RtVC*$jJ(5q2^b+91|m&!WFO%lNF)BvZz}Yv)~(w=3E$4=eCgcK$MR -z0So{6>fgTSpHKVkYG$$-cW!(0H(s6J;bcIX?AJnT^N&>Wla1btee=6>7q$nVGW8BQ -zIq~iu;fV|{%yZ?DHRVsZ@(+K@%eGYKxs&Bg$->CPy^G0oNW7eJEtF|VJe|Q@$82P3 -z*McfG63?tmTOu;G=~kw`uN#$ViqbI_@LIeNm^fmI&zKij1D8avy=ieRh?+&MPw*6WCn-t-nO}G4; -z?@eYH9f_c -z!{cYOtihJtvYfz%|J;ieo+*q69 -zW!m#H>r*bWChHZ}f?PIvs@a!UoGe^%u&*|O{YC=z8xdUJ@_hUVvBI6iVeI#0{&k3X -z*zY;JR6rlIttr+vv4(*-Y}x|rn+w!io@!&T0(cc$SJb38-*RzQ0UUkW52x5N+k08t -zvliURp9O!(PJ3{3>sdQhVvNG|n~Lkm!`hg_TjU#T>nqMlu|F^s?mdi-(QE8RduFz` -z+cEBKlqtMqVQ+Ky0&8JpKePPqUG3ICy$F75f?6-_ut+=f_A(29bI{VW8eXq)IP$FZ -z>cY2h6`ZIeccrsl#^Gz;tNnIUN5s}?eW=p@gtREH=HF@gB0jCcjz#0C;!0#mEcL^? -zU7nS!H?n@{h}MBAhHAUp#!!aWUEm`d@L`)j%Htxk$}S67uL_^BSDNo|upXYDl+AMJ -zTV`nu_jkO|S?kZUXO>vCLL7`;HtVAs{a~-`r`+dM#d#ZiO+JA68dT)VV$=vI#Z)@7?>0=F_ -zHi(NS(gTe%18b*dl7`v+t_AJ`ebe}RqNT8 -zs^#~mY7ZSq)ixeX)ixc%)(QX1>|NFUwWhHSaZ8g}2fN|UZy*-(^U*%u(Kk8K^T$j0C;(CtjjEj*@MPj5=*jV{G#Yp(K -zh8PLI7W1cXMSLEyRzqAPc=$L24}Z`A5C0H@H+@BY4K+I9$1coz`W0pk{5`BsDE6dkpJks>g*YZwW>ccf -zrbwAySBAJJR%Uae%;rd$t-c=OqUfIA9q}^79T8f0dRlFtFXY`WN9*n;yxWt2wjEKGA9dFSI^NV^&Csob1YKNagR6aOiQ;D -zC*Dq+IEOfK4sqh_Yv0F59;WR}{|o49_O#+f#z2S{t6#G5NI~__cJU&37EiA*@yd!> -z?mamBv~S&J)3#qBUVITBK>jRr2>vC-anM+Ni5Q46wH)ONF9)^aYpGh{inS3Y&rA57 -zvo6oe*v)g~d4)WeZJr|Ub4ouB?2FS`Lr#o&v3ZQS{i5IyXTB2DX8%*`|F&OrxShi< -zob5EY^>SD2Uf2uF-P8Me&k|dn8wchY2lEADh%Y*rXMibuC|}rV>5ZOm@>@Ue@|`9h -z?+abiHAn2`j2}N6jmQ4T;hB8_c*lcU?nQLrRKQ+T=saV2P(VKoT{WBDWf#An9i^rQG6;`DEQ+2uJJiPNjV -zCr*F<0T-tqKyRzWGsNjD{*mK(Gu=KY-Eg{nNc%Z%V;tV@D=DtYoXid)&%*(2jCHfb -z(@pN?{F`p%(KDm3cX~^$IJ2c`pKAMlr<(`pSN&tBbNijX -z9|q>2gUP+f??M+a+kx2%%xUAm-0NWOV=u;M9L&AI6h4$MY<2p++vVHC{urNcH~Dy9 -zxOmIB`u@qEvoN!70dFV#Y3U+%MBlHX?{AEw@4KL7r_*=td49+AoixRtMmMGJ;1JXI -zWfu3`(zXHsgkJTTV -zkj^ZDrk-2-dKV+#CF96m%!R!U5 -z@S%L6*Xc};%eM)A^>z1~AvVnsn;IDiSVwL>e^Z7Sz*jq%)_~?}^}IbmqOT%jwK_ -zsY^OjcqckDb49J6@nU}lRr)0~37A_+^jNnJ$-aCHm^~b&-$vg^Rb2t23Wm;B;m=IdbOzL6gR+eANgWt -zD8A5`SYb(EuUf+w$jC7jce> -z)pk?V5A^*W18eSQ6pi6{-n=6pH`l`Sw1qV6Abm~~8s^yi&x&5` -zq3ojUqxLNqXV!5Tmxh_P{J&FqY^?DU*xceK%1^JCe@8ZVx`lbr$tR>?E$P#m&@j#B -z-zOYspK7NC+N(J)p|y^~xHPod^1D?2s%`s)H^6@-S4+LTU{2Tuv{;x$M}r?fdOMwB -zeObEl=CC=3P2(EX*QYR6lfH}boV!>je-|<4UDwWMc+a_H7j7}@vzmj3vn9tkZ*DwZ{dh~_Y}WL2JDzu%xyqNAt2`6b@-Hw~`6A~V -zoaKCjbJrceW1Mc{=dXt66s%_4jWL_Y+PM~R&E=XWTgzPK6|3)N?BWVKwF7#gLSXG=*>+I#+YUu}ay)M4#S&2MWN93_QB9AWQfh{UviwwQX!K=&BsUTb}kHIrntIuSM{S7%9Kly<5b)#c|ltI=6LE&m!tsZ0pfHWL@@C -zmoZGDJdH)w&rZ=<4LWDf@X0+t -zok_DlrhX2J=aJdF?BUOTWKQ>AC53 -zd6Y}+vx>BjLDtyo{NW+i-sk5y_%ne&rwM%M59eHW!Xx;kbGky_?O7nDO$H_iKK<#hy33kUsW})-y%-Fj3EwZ7J<(e~-`H -zEot9@JxAjwR>$y^k*g1WgtHnx%9$PWIE#Kt-`EDt8wb@(d8>D0UkjiuT|NIWu_tFp -zUf2@U*oW~Xdn)@bKN5NVrs5!-KdQzno0o%*xm -zbym)gcrTqPoAtuMtAX=1+Pm_EJ9B>(vbg}Cl}~#9qkGkMLR~lG@NMK(9?5a+KL#gT -zSevH&7d~V4?nn0`tIt@yQ(anDq4RwF_{fD!{k)-zpRbo0`;VO`fn)0U4THzjY6$zY -zHsATrTDa#QW_)2wXU)^3Ixl2sAD{0u@jyTA!=EFncTw0WV!ROU7aiO$TDWEQ?TtMM -z&Fm#Vf4_T2c|+g*(Dk5w7Q8?Grq29ikIEyRwLihXBGbM_UwFKG5&eUOQ-hO*l;zXs -zq2(fHnUBG@R~&EEH@WaN;N=}`Xi*#^y2d^ggmjI4iZ;le&}!Po1<^8>C_5$?ju+K* -zdgSuY$bNDDD|1yLZ+?b6pRlyZR-OL@d*p{%-|uXdXsfW-yUbqr3OZFrr+$_;E&d9& -zhoia;j;i-#7M}V2F^l8a#{;`&XR4hGxbSh&Mq3BI$F<7(-pd`*DSOsMHQh3D`7YtC -za}ezu--Ww6YuZP3zC(NYSqBZCPqoPQ&8m)a`F&J+Z*gBo*>xfAvOTXq3f{MLQqM13 -zJAYeH8z}w4wF|dfoG*#j8-T}o%cGo)_9xJ&vnMXo_Wb$~;2J#?e9eoE-5Jz=%boRo -zfimYQt9Shw_G58>^U?LR@n7Oh^YeCM|o97`NBTw`(b;)?afCgRo+ae -zbpE)J-Pjat41L`5d{^T<{ans_#HQ%npu5Z-fkFDgI)`U~-$-hO_z?Cb -zPuRUtTKmd65aNBiH_ELAp?%qJdf4@^!Y#WS*vwb?Gw~iHt}}g1Vz_(m?Hnvi` -zG2=da@T2Nm?&Ut8b`+gw-_czUu5Y>D_l+WbL5(9FaPST`fp;hY?@$EZpzi}E -z;2n1Gs!iY>O~5-Efp^T~7wHQMzvB+xsV4AFC*Ylqz+y@M$q;_$9K4sBzopFJxm)R(Ic-WyHe -zy_JCXRs>#)U*BNi^{5}k*xEzWSw}IGbrkg5a*QFGdX{&cEYP1cdP$$MK`-ee%)ma* -zz$Tk-&oFiw>Lq;#JLYi*dq?j$p>>#p*mmuq_#SQO`^4afiN$3@3h+C-lywxWuTWol -z+9zDU8QhBWE6g175}Rhm7{O2F6gy=#*0?#KUi!7rpm;QP?m0AMcLX)97x#N~6|b22 -zz*{WL?Zmy?dWdt0Q+2kfVE1y@8S;h2;70$dw=2b%umi7-g?$xEVgqn+ladbE87h%YXjz3 -z>ixjB8KNh6_2J2mM{A*@+ve}#p69ojgF(I)2DFl<=c44zvynG>7p4M}uJr*~>eM>T -zw#nqx9^E%cb9jbn3*ZlQ=Gr53Gdm~;&89B+D8A}ha@IEleoAw|)ah~jiPW_Vo>Ld! -zqnlMk2NcgvSmqZMFVw$5|c?!VRH=H6B!bIOWVBlENH{!B#X%Of&>4*Geo -zv-5kF+cHMxU6J+OXOV0??mRuka_<4>%O-ycI|u#@zU*1=8KUzWkZ<{!utaenJ{vPgme#c}^T8=c8H8SVf$ei?0 -z=FR%}2kUrx`4+0AL1%Pq=0-AKB$-EWH0MM^Uu-<#uUpqH+s@6}X!K7wiC%L?^;Y}b -zrf~{vf%aX+#wSQqA3^7>K5Jso#P^Wq$_~t|&rOow%)7dJ^nI;xUN5Tib4Z`-<|eO# -z6E@S#X|2bn%*0=Nd-_gn=S&Mz=enq!iB9v4f$2d5y@lyE?;j{H_QlK*)3%CTT+<@; -zzr?$X$m84u+VM0C^LL~5FCne9N&T%h@4r{x1Jp6d?}OC6h^r-1f0cK~Ca6;_7UpjQ -z^Lk@KZ7sGPjooFx9VlJ6n6~YLXZmthCzy|aazfu@iu6sAV?+OcuB)-%%Y!th;;c;w_(k>}C2>7rDBofBLa1_oG~cH-FmX+ZX9y?W6s@ -zgx;xt^)mNl|LS5QUZzciaV&9r!`z+VDUKJs*P6h)l7M$50`IEtA4K|Bg7=1l_f`{l -zEr~cAdlKSD|JLFc=?@9sG#9r|ZxXlD501s{#DyU|`o{(yV}@!w#$N~?eQ87Qye9D4 -z6Yz)yLwNKXEPj#xkl-zH@D?|LN8dPxA8}&{kA8y1F9DBu*x*P1x!?+V%x@V62(?=WlZnN#aJ -zS=^Pf-?QA!9sRr~`Yo(I@%noAMAqi-t*_0$UO(%1=v$R(Z<49j`)2p6zh&30UtVVW -z4O$~r+`q!~x90ma@b+oBPrLpF`Lf_HSf&pKec`$D=K9#EVp61&9p}yV&0pB4>F%Dtvg#47o8nt$-&@#Qxk2P+qDt?QP -zH*PzG-+B%n3QPE1j@fh)+ -zU(0!vcoO)zvy^+$`l=##?d$A)?&iMUec*i%ybsyB3Ts!`xw(Cv;reFVZh^a>u}TMb -z8@MPv_X4n1qLa&3*uE(7!9#oNF=`fgTF=|V`}|&8KYni}{mYpJY-@kyoGPtf(7X@v -z)mc3&mda5sOZmcbWVr`E?82V;cxMgo1b;O;=F@hQCO)yg%%{cH3PHPgA>6azD*Vke -z^35S<^NftOhF;HwUC_5Xs4Y;x?`pl@cU}GHxux&xo6wKf(2Xlx?YH#x_Q2;?;PYjt -zA3aV#HUWR|mb!jy9Y;T|LRW9VdTeOhjDEbFVxHOQM=yNY44kFB+lrhA**|d({dg&% -zA3L0W?2N1#-EkfL=mE|;@O}}z&pQ2B;Phi%6a84vc!gVwx(!^!KcgRWko~lXeyok? -z2k^AktcUj+S5TQyKk&o-QT^zS=m*b6KPZ=_d|^8J(G4HgMD$}G?*xBtT^G#w3%KPL -z)zi%P7vP`jRvURo`mx69$02l8`r-SC*VPZ!Zhw6#`oa3`Ue<5-vd+4934ET{!rDZ; -z4pwvI#(pdXKI_Lr`_VOyek^utYL~b*wUKq$;a=oc=To(9d?|3`W^V(!*#s-;qS~kfB#x`cc!i5Mb$yuR2$WvY3%_PP48F^(=EJH -zf=AoWVgqCgitE97S_Eh6@oRkEaUIia9RsRkIXI&?rcd4aE^%(P@cy;np^sVgQu?WH -zxtj)p#5N$W(kPwH02+LPaVsIL>yH~pT`JQm~e{yZ1$VU(N(IWtRV -zaw+aNXMGZ*DXvzWmW-?Q4bf$Lachsg0{YYG7#{!T{?Lv=%}2SojZ^m{i}& -zC^O%zZ?Nl~&T7|Ov(6pYysyrIkDk}Ac>?7dVxGFpIprEt*Lmj`h||1%9AutBd7kFI -zzNew@gqU+YBlEd`l(x1_-_@||wDf(A89du_BUFAceIIic_8SQP49w`c+gc}}v(g7x -zZ{y<^dtSOdZ@$^MlIDKj*D;LrPk!C=2fFxyE>37X?E_u>z%F7}Kd_4*_~;LO^oj~` -z!27mu=mQ`9fsg*%;-h2doM+M_gT(l;bIa)~)YmuLZ`G;KVAmwhBc8YOCw~1XXDbuu -zD~&VB>9Z(yH+>A^a;+ydeHi)#>cePFY;=8{&YXz#W3=|yt*APr+k?ouCJvYAHXZt1(#QG+BU!jjvcHj3K8OR -zuU=EEl# -z2k*vD>wZ?gw~VhYIb?5!=c|D#`d`F_v^cQ%)NxbaWK1o}oUo6s7=k+|W8I1kr^Sl@zdz>ze4pThD{bMbtC;_(e8MzVao -z^~N}|zcs{>u~L1HP-DmjN5+vghU{@X>2bU@_?29%ov-(@*0&$^?IzuIE_)K!3hCw? -zdtw27k3%?DI`q8<%AikCy!9Q3yGg$he=9>4md9V;EeNRFe+NXk==^=rQU<2*DtFjC -zo~D1{X`0=HCdRr9P28K(M7p7=!+zVu&@}95qMgKO8l50bnfmusEZ*)rQPg4Zr_PWj -zV45`Q6y2Vtdp%8eK$F`WxXSGdY@uzMZ#Kb`Y-_Mob6TMchaA1!o6<|Vp?5e!Z(iSZ -zkPH*_mXvn_G8|3N%WosYVMp&!gx-=%%iBDj-rJy8`c_VBzvM4oldY+wTTK09LGZL_ -z)HgE>+z#DmT)Trb#lW&B_fU4~t-;Alz1$}UwSU6z$*JJe@c&7!KIQ_S%yVb`>62%; -z`~83mr`T`PkHOnNqt1)&yI>j<&>VrjC8;`PgDwjP*`SZULz$E;zW$q*4eg5eMkYh{ -z8$m_~Gx}D9WK!QZDtlnRe>nk}3|m-XyW+Ru-4J^X)rLy;+sH;g^DZr8^LUvYgY5zddDb -zoxVRInS3;E7c$B_0htWdzjtN$&Tqpz>M%0N+i!cCcNv$~Ve@#Id?A#{JY=%o%4FEq -zAGQ;I8@QvE#%40P^o{peCZ;Ycle@uD`yc(+?0Z(vLY*7qarR_#^$cl~}|!P9<3wb_39(Y~+z<1NpX^{tL* -zUzv8qp37AA0&9}T*n2rPg|n&Ub8of%`RIPfSj<0s)5!V13Qk^ljI|ae_IUp~bKu~` -zx~#sjZ%3YgGxGeM$n(F^e#dzyp5;4X;o4n%jNRv`@fClzHTQIV@8aA4E2zEwmt23v -z^=Djv%r(mOhg|=e>%VY4%k>|*ewXVA*AUn5uy=v_2B=SCHA9Tes6B&kcrN|euXFao -zV_cMZzUA6++1XeA4SP(#!@k;Yn{yfZR#667eENyGPjxTEwhG2VY^}GUvbD0Ct0p^J -z$~XLEOC=M@Lv<7aJJ0La{{KjImf%0{7N*+1Eq%EJ&ST(wd3aLabg}jUlhg`N@5k -zABNt4$M63Tp*Qd7{hFgU54~S=^s-Od&$ElqQyjeoBj5UW2SR$$mA`R%(bX|@^>Vtk -z@A3xd9p?9ciqQL@qxTmay$?d~FF1PHBOayqKNBxVzE6xt@1OlGp!biVZxnimp!a_0 -z{jdD~?-6>x=;*!I(fdW{z1Puuf1KXmbo7?TqxXOPEui-=q3^GtH#4R0^5>!VRet}! -z5qdxC=*>8KKMTDXNAKt3^xp62ecsVK;9_9es)eNKeBv_wFu#7eOyA7=zcKQRy&crF -zE~JnOp4R$UbCv|pxAI&eeeCT{v&MSt_V3Oe`zGgRkgj}V-{hO4so+!e^R=e7TkrlC -z>wHwFp0Dxz2A9sYUDYHWzk7;}$9=o2V8{Qa+g*jer_LOyvY+zur*yu9Vi=wG=nE|%O{*%J{6aXx8JYAAGN=+@#Mppy~f@v8XF*XF4LEf%12}N8t)F}!}FMz -z56@-#*4lGy -z!prAV5&3*7As^m_^5NOb=NBg`AL66Garu~WvbopHc`3K6{V-<6SW?)2ZgKLt&B=$e -zIYw`D^0~daeC~w)W-+p{Gq=~z@fo|Fvu%D8c*Mwx$Nbqgmv>D3Y#YUNZx7$pr?~b< -z_cq4EHijkMBWBat9?!e8RkUZ1*n;>wzAky9W1tOl-I+Vg*^)h+1)t+A`0V0ICuL*l -zPnmJb0%u@rjiMc=jE_&6F-+Qs#vHYWM)QZ(hG5%_eVcKuaEdk6$GMJjRk;qgz_+$) -zUTee;aP8;X$F-Mh57$nv9b8+vHgolIt>;?DwU(=!YYkTy*K)39TuZr@aIp?u>(2YZ -zU2~p;>Zdb)>f2diW>;-H=X|S-^d#%ndTWj_$2*<*qWuW!cW8{P$i9TB^I4z}>F@CB((m!M#^1CfT-+9(sX4x~b4ZJiTso$ED%(iw( -zc28-pF~@!ijboX5uJTMhrj9pKoPBluG1>y_)HQ}6-N?Sho(5 -zD|DH&te@J>I_lSd)yDkUMXa-DFGP;@_Br-gWZ_#5{s~UcS@tlTTVeN1Pq#Q{Nz0L@ -z_l2vhJARAbSL%BYdf3lVxJdeIq`$nPwt@QFCc`J_&b>nVv@Y`vyDWP-{%x9XD=hxp -zNsSvf$Oai3*}P!)X~bm1UZGGn>=`n$VQ-P)8~co6vN?Jk*&IVQ=uu2IFId`)Y}or0 -z%H~u=Hm4^bn=^Kwn~}|P$Oc_CvN;1^Y#njgaF)5=Z)b1Hm%r|0vl7`HOtBvb*&ISP -z=y?u(H?ld1Yz`%4Lt2hBBb!t3nmt&#;}O}MMmC2@KSugsLN-;>UtAH&W~rAA`bd&Ay0i_97c> -zi;>Mf_+smb%ckWvE1LtU+A|xRYWJ6kxG$Whc -z@Om%5cSU5g2ia^UeJAO?3E6BV{Xktd|AqdfX*bLhG{|P3lg+v&vRM+5%~B_uWFOCOh7hkBeLm6HuwS~o3-%8))AM@MJJo}soL!O -zoosd?n?V*aLu{0r)`NqN~Y -zZ*#$YSE`7=A4^ZIYQMVTJIzU|KUyuNM^?`d`g&heOv&6|N%Mc~VW1x*ItuKyDzeY2 -zcnn^rSTjXBR`W^fL*2kPmCn^_Yf}?k5Uf46wdf_ -z1njpC^lc>VQ#R-Syx?M@<8fHMM>};sXrI=7Wsgx_u?BILU-zZGc%ofrXb8ui94P?>);{u?_ekI*n1S!LDFM7 -z$ZzSO#$-YrTpZEC#R(ncU8sXRCv|YiM0Ak;fYHHqL0t#;!F#WRdz_xEb$YTtF5BYT -zCOWv+=^*`#m=3P9GRp39I=I8ZUhiPG%J0>S%c93_W4)UDTK^#ldF{HR1)EN`>@1{p| -zunXRM9bD%0WSY~Hm2ue?r!~>R<=zgmrXt#>o9=XQiPOPF4)#n3duamp%!CfkaXPrz -z>7W_I;9M&56&4}e#pvJ?r-Sq2uzKf2bZ~AH9i*Jm!MRQc=bJ~O`l>&tpU*3t=8~qjJ`T|$X494#kI~vQ#Y}JE&&!$n&HB9`M)5Fy$>LG& -z&>ARk02i$_(;BlnJ`-49!TJG}32_1j>kABCT8}oL=SoK~($2k(-+czZa~?m&BKV%r -z1B$;bpX8?#anxEkt>+LQf8g$3de6(w`JRd9R39jkFC&zi2s^iH!%ga=Zmt|mkJa>CM>7&N*bTON3Z+R$!=V$`Y -z(gg7wPT&cgIzJtrLkT>A?eYAI$CLir58WJN1wB@Ot=iEtvI>1NeKyU9Fz2B(_1TW3 -zTSj_$r|;Kme~M!1Rj%Krb!x()Lf(6HC$9E!iq1du@0IoheYo2rX;V!Mt@zva<0_vp -z>$pxR##i63%x_?yC`9^mK2OcfQ~KXJyFxL|-O#wI$y{YH+4kqGo@=kZ)AN#DuV(aT -z*sdcB^(Wsl!L?4dT-X+Y6Ut>sYum(^mbm@^+snoGY5qbq%Wlw@X^>AkU6+sIMq8i_z-wpC{c|!TP -z-(Ef^pz((CF|nGHPu{NUGV&R+Ysy0TWG1*4t<<;{EtC)MjC}IxxO{+}l+P1hKE(MA -z@)?cDhxJG0(l1@BV(*N6hSRS7s1KlbzgU+K?~HsXZ`%*+QfU_&?=bDhy^qPqrP=nQ -zzJqH&f0>XEzZ>M^@`UnnzrB3!n}~ey!(sc$OoC6&kCi6H{8*)9(!|H -z@Xp95Gbt{g4%KV@gl|80gZp?faQQovScg0V^$VWTv-r|97JlO0$HMZX4Quf-^=~1Z -zzbjx4(5<0k{?tEfk0J5Seti#+?*g9a=aL<6W9`~N;Mc7OPo2LhsQn6cT)L~i)+_nG -z=-wAhdFH|s<#X=+6XU%9s(W7^=lz%5`{&*J3n`0Vvo_uD&gK%&g?kre`_mh)>G`t` -z&e*$v^Rp2+`tGXu;phI}2|nsGmBD8We6Bl3eM@AH`j*a<-!HAdX6C5Pytn=S%HDkw -zpQAp1Q{o#IALs~c`v30h$fBp-y^h4!=H6!37UWJd{<$ZOO{w>l3THSoSA8Y3*2V9A -z()g#wJJn~>xVy&RwU&T&1aC3#@CMgat}9%xab4zmh3g{M%Uq1J7S3^<<$96p1)b$- -z*V?ve9YCA40fo~m+&O^OcbjqYqbbIGSJ-j#!)}gjpPPp{7N3Xd-M7MwKd)vido^R( -zy$4b?GZtNCo`n8Dmbx`YRM^jakLJIRt}t^9niH1(6e(ZW&%8yI^8$INxn8x?{BigM -z&SpM)Fi|J-fS1y4%=?h7$G|@5U>ve@Jw1cKJ`7A?tKJP78~5|@$4Ec!=0#4WYL9EK -zcTeV|nTL<^23~r%952=Z)sU -zqrADC;LX|yZ`L^8EOmIUOW?UQ!JFldH{Fgm=(6F>GRK>>3Eoh?ungS0p^JCfF2|eo -z@aCecb9JK55eyx61<_j&d${LqI-Cko#S}31m3*n>YSIT -zb7q7$b0fT&<6z8nyqO2=c3=WqXYR##vzYWHb>1BDywN;xgg3Hbu{QM<X%0-|YD(8UmYautiTQ_fngb)ISO474!;!N8Jsg<>J8b8`6ragI6?hlUKk)459~R1YF}7A_EX}O#d6BiuZV#N!SJXV{ -z9l%KLeXIQM@9mx*eeX4UDpk7`UN((o+uVFGe3cK4>D=jv&K-9;cgX47a|!t$O6c5S -zr*o&QE@&*$=-i;wxzh=qqkLfyoj8TQ@Ge_*I(J6(PdnJBc{qI|D$))}kF^7S -zn|8pNDPcR96KMx?677I@VLRYC)(#lg)VB}~FZV=vxd-}oH|OQ0_nMcxEibhv_lE6& -zarjs}*b!+5n_W9t>)OH2gifwaw1f4o9c*>&K;wvt_13v|up`k9C|_8Io^C~ld6(^R -z?O+$}fH>E*gWg1)>m%)8Q=}dAI2fB;JLm=WW?%wa-=~eWgPo-Bs<#97-P(4bu~EiF -zjqJK3vg;=Qn&z_m!oPiw+rb*@q8*&aUYd5mI8{SCSn2&ie2l7hwfsSSd@5`Qt7!)- -z>(?#eo@3M1UJ6I}zFxR$&_C%d?BJE&aq#ew4Fy^^-&<^Yczy!AD%VX_e -z3F%Ag?H~i6tUs{p9E|LyMPxUP{H@Jp_Z#1Rk7d_NU9^Mi&WX3WIq}x!bKaD(*$UY?jwrI+|&4gqtTD$ -zHpPU`!{xr6vKXw|o6Wmnp;w?FjXKs|`hIbiK;k-NS>*L!hNU+?;$Ry-8Y -zXH)yu{<5IY))}zm4xHL2_Z4~q_K=wOwm#xfeXm&W_5D@P$Lv~{w$9!Q#Fjm4;psa3 -zGqJ7t9tbq1sV5IjrabB94$Ofe=A3~kdsKv`Ro<3dkA~+a_bE0ko`Qzcrrt&xT3Y+` -zy+eH~N$?HN)sduzq5;UcQh<^X-n)~Yxop1p^mN5c~nph4^Bd)w7l)!4l`Z?u7iawa`eSfH4|u79<<+lkKF^|#qM5gO(? -z8s<3~=0L+-Xdw2>wU0vs>4t^{bsBDlhTOrr?(2Ia2GBckMrgzqK=IJELmznFPPDktGXYmzJb~)Yttx0wd -zguauIZ3$}njs)j?(f^x48@21+ds=|k>ec}FI{Zn?ktSM%hoR{JY0#nPacDRz8e~(m -zGn=n-)EdX=*()}l>tt-*?loQIz7<)gN4Ce>0qsAPPqgnW9uwVr%6IKY-h8yB@@9#> -zi&KKyg_{&h%GPnNROzm8uXDMy;Tm5v-2djIT@}h0e=x>e&XdmvPkc)J -zIuC8pb7sy1Pkg>ax^z_M(-33C^2A^Z<|Ob8-a6a%q0jA?4?pkbwZ{Yt{8Q+PV4C_! -zi`Ex|1)lyq9Pz4+b6hUE`6J;KE0+mIMAt&r=!qWDR*um0cEwE`YCOV(1dzm`jV&En37=@iUqp -z<>ULN+Yy@nF4x(xe>~mB*_Ja-=zBCN*4JqLAnR8+13DN<>)sKJOwxTcH8NRuVwzU& -z;aN+ik8t)!qp -z9K}>xi`L0=HJ=*!0`L^iX|IEMp5Ixk4hQx*65CZf?E4wm^cmP>?ftHh_Hp1;$glNK -zm(xLCSL&u$tLfB87jQKO5seSE#!7X>V33xCu^Jdhh61w=YXdQ3m6$OGr_=-vX^Sj< -zCf=;(Z5|VIrqvhuh>bbnv%V!XM7;Su;?3_9ZytuvYCk&DQEQpRqyACiPGU#x4Zuz{ -z#GT@?)-;L7DefvS``8b!wO)BZ^CZY_0NE{c@#nx4JKv+V$o(Z-rovtGDb=C$$dL}e -zc2jdK^?3`Oi6^;R93#(}$n&s0%TRgK!Yki`j!E_{BU5zmXt8IxAsf+H$)`qsio4MV -z=$1ZU|3)N3`3-xnnYAnatU=jFgG0u_0G3^kXVyU6=km -z^bdLZiJRDq=wrBY+O8`!b&p1Ajy^m3$!q8*pP_%)(GP6NNo#@MG5wU4tlug9PdfSw -z6QRFD^7m^G?Ob0-e*b8sJ=;#y2GxF| -zvA5P?YJI!<8?yJarL(lFS=<$im!*s2#MrO5x)_^zsdCBkOlKsQ^OK-`1~!NNcCLS+ -z_d4rU@6=ut&&rQT&W6vXynQdenKX~TYv)n?D;bNo;uG06(QV4)ot=bM!+-Lr{V87? -zKF!msSg_n-*NHw`Qf$=4nJ_CVS05ZU=Oo@JUS|!i*<|GF5A~?fZv~n7mD!{ -zxN8kW6mR)e{BfUf?#CC83y*pDrtt8;F?eb1y>Rg8(~k=eztt2T>o;QXSjQ2 -z$livwi+cL0XMlRVz14f!yK;wx`TrPy_0=$532|nu;)XbvY<#RSea!*Ja2|@_%(JnB -zrS3S+{MP<7+lO%Wwi(XU6UF)8JDdy7$A&nkd#!4&%BS~tTW&$=*ANc=O6lgZP*UMxgoF9Ev6r#J=qO-ciBP%JH -zKgjcLyz*akzB-l+U%T=^%Om50_FmH)UaUv5?&e%+}2b?3k|FX!}QjCr{~ -zW$w$&fiXww=fGC~?!@##y71>ngP+Y9+2lU?hD*O5oE$^f -z#+U=vIdvD(>FP9ecQs=Kmzk3dpP4%j=j7pW_^mMfl${ULnbypM;YZ(oP-|)CozOab -z*$16R?fsnm-uYi=Eb;S<(|(chMCa?gF3nHd{``-aa~|W2+)JPDl5+0t#3)Yb$E8M6)c&GiQmpjBeyU(;~eYSl)b-~Y#cEszu-_`fT -zjq1avnlmn0cTqp%vI%|I1@L(40{Z9YVxw~qpK|q;Z&V*PxtdRnT*l^9@QwN|O;h@A -zarNn3P00_N5v}jKZ6`T@%sK}H<1_WPGws=lx19^<-+A;;^uPJ&m+3n_!1p63o3<3| -zXPB|d+lVh&yNZrr6Z@B<-o2Q$Eo!r>t>G#>s4(()_Z9eE-L2=eYco?5I?I=CHZRn)W~)mAFXe)%f9z#?mwY3yX|-E>328aG%Hp|)%MH! -z+R?v3`s(Ue#c_&%pRq!JqmGmR?)^vj_R&XZgLj5;$$S?B>l;q`2BXfI7LJ$jck1sc -zMy#am-e~nLlHZlm7^z}hjrRzK{H6MiI=fk8?&>3|oZgj5Q=F*xvKOjLbqZ$KHzJRX -zEp1!XI|V!!~f-IC^-8+;MSh0{n+@q9#0#b -zLRwf)D_TksS}4;%3-47fJkx_bo}OySjT9atZe_UG900gG7a?c-q43l5+0gU3hB$ZIi(>_ -zA9E_Ak35FAq#OFkC!7s^rTRRAp^v;V`Y02n@2if!a+1Eh{brE*p(cN(#p+ZjKikKu -zr0Zjp@<9#s@!rq}977*@Li*AzcFt_n)5kg`(MKLbAL)iZ@`dzeEFSVThCcGf=%Y-O -zzU%hKZZo*o`(ykD*AqIcBJ7V1$sZ>AW4}MK7$WSC4O{%5Mdvi1?7veJ+tZq!##rTS -z`c<>yW0k{}zxBAn{(d)cL{ooUvSZpNZpgd3u-8%hTh2^s^!+BSJ|1YtnXfa3nU2(h -zjLi6J!Y@>Ztscbu4{0%fI%LnhXz-_{bR&)?E#gn}w%+T;CmHFFi=#T~c*gjVZc>*? -zi|}LA+IZpFlmtcUdyyJ^24M>_|akOwLX2Ecr9(|F#0iC -zkJn=Spe;7Uh9)h-k0IHS>*z)}m -zk0V6K`ZYJ}dsYz^S(jxrGUw=&A&V_qDtk)CeM)WXZGdMx6s -z?bBBsFyot^j%XkPE0D=+$COV`Hf^LlYUdVxn)QYCIYoVk)W0*n&g74bZ&O!vOumynS{3-a%K7;DZvU`! -z*}z5@H5aORDf#M){6Ve2Bz;7XdGTMhYO@~bZ8cQ9PN{jT09UOzT5&zDaW96x^O`GKu7 -zbqu8}KSo_l7s@`tk5Ly(QZD3)E2B8h@Pv2Ky8YN}Iq%{$VCa3NfsMs#SXUcbSUx}tdYIv$miJSw?$03DMokMcGK4%?NR8wzbm-t_?}7xKuJv1dq0 -zKkPYB-ma8~T%0@V$^ygiDDBRPit>oGkVmeZwI8j{-b8qmZgui)!Xw@V$g(^d;ZdZ1 -z!z1d7^62{UcdPtoB>rxduAHb0O{&M=!9*CY-#`{mW -z_uf|}-)k;P<-MIwzVC4Fy^Tt~e<$PV-{-6_ji>i>{+FMN+WW%9+M?#7&NHU}=A)lu -zFIK8?486o!o#79k7$9EMTAd;K!Jem;QP&^vW9!5Ax9bBlcJAh*G#5o2_bm3+erMH= -zp=0Zw8tO4=k$Q%2&|ese -zj8~WH{e?I^P3p-jEmBYB2K98*>nW${pCtPNrFfs@ovs9g^=~ -zxOF}z{&wqph?8}Gh1O!5^*-RLG2440b0V7Ci}ovyFlJk!ZxOEZp>MGP-HDYc#rqaV -z=v!2Vzj8ulw9dLp|6&8SpvoLbCCxl2`f27t88_Fu9_xGEdLQ&d-{sSuy%c(y+>6%_ -z+=V8-2p;~Hn;We_qxuztj5QAs>+8%6&EeJi7LFHb+jqD1**HnxB8m4oe4pih+FkuD -zXBHC85>2aIY%_4Zx|yqLsJkOlH_wVcv?e=Vx6W%;e~G>Udeu%Ie^&EeSAW6P@6WSt -zPJ5HJHknBMJe&H_ZN;K797;A#c!XojLvdWb=5TppBDlEN&i3(~9P$xdcs95UH^Bw_ -zAp8t2yjL8h{QyzEe9qxgo(L}3!UnmNBDnBu`C{vh^Cf~yCO$UpWi%gL#$D_39W%C6 -zkL~zvV!Po~J+>RQeWYk?H|@oV`4d03IzSufcWuDO#y;Nj0Ag; -z$EE}|?fY(H9j%^ele3chq8j(Aq(}UBH@wf%p2P52;~G9bz}`gt)oki9`&5kI(t1;^ -zqnL{h_%#z&hx)Nw8XMEu?~V2`ZjYLcb=bXd*7l60XS4S3!`HrilU?8YH2jl|=uh8< -zeYy>PVvn#%#%^FkiECc{q1$JnGql>$_S@lyv6VyE9?f})$CuJU`2Fz0E8n^9_rn*q -zHhw=G7=32_5_J>;iyL$Qvm^ua{a{IZ??`_Yb2SQH1+xX -zI&Zi^k65p)e!kh?l-3;24EkCcAHmNWocN7igx}2sX7rrP*XhI9bDVUZlh%-Mp*I>& -z^ZKN3R}MK`%(xq4G_t)K#~et{z&5gH65G?x?~9rz9kS0_uiX%#u2u7PZd|&m-%%gi#`%_0Io}dEeP&)6{%JhUz{$A!kf)Ik^{CIOdiwD*1IU{6 -zhImdmX}n4GPo>U<)X_#AI$JGTcLiUgdQ;4251{X#wd3sF^;zRx8f!DO -zeIkAa<}{YgFem& -zf0DCL`U-sa_yRa5ZOX;;WWt!>snD*t`WtM^ki}JVirRBGgnbZhojg~;bv5@Rlzo`{ -ziquWtmd()_TLZK$#g`hl_OgF^82?J0nxnOT-pb3QVUH|d(Pzb4Zj4xCWM*6{Z)FP1y}O;?x@6yHbLXP(Z16VqKI|{ck?V8Aw7G= -zwfhC|BDCY9cFt`o_C#v|8v3aw&GsJ`xpRw;lu~A&X)ALxe~j)*2emghYJX(&e8005 -zTWs>>ZN8+h`X2OuANoa?#oO7%lJ#2^^k_ctjsNISyzG2e+CG=z*#Nu?%TvzKZOS?S -zHJb2W!xQ&kYOk_?p${AKKFsZbE!Fj1Ix5}r-^Ws0@O=`kzpZo#w;5qyP6kuyNuA^rBqSx(Q_He3)M!BVTNMLdMRa-^eeAzM#YA -zS3F^KE1hN!oyAA%o;0uf`aKROWGH$nl=+9cllPO{O*!5<-)HQ&x0$BxI{Y=RE!f*X -z?%<_uyVh8YY3K06_&scfi8F@nngO$JWT?f~tym77`r@75@1%Xbtjn_N5VT%FJTiEh -zXV)fpZ**hSt=o|;=h@VqxA5iDzUa=G4d*C^TbxguWY$-`Z$8b@+~Ct3u9Z?9uP-8p -zDtOAD{eW`+iu>x+&ENhX>1oyfqcmyc2k^th)7X+KHl><>pJ{P8H_$Sa&?)fJoWG~- -z2<7CPe}L}%7WaGb(dYT5&ymqdBUwjN6}u>3ZR8C+>7iZMB7fl4C=m~ub&IC2#=7JA -zLAZ8fpo9)c7ltR*b$`g}(wFBrUG1=XrZZbi8%Vo(E9#R@g|Q=TTyvQ8m#W$;D&0~X -zRUMr)vVv#L)9ZYC-#(rOUO6)voSnY%tTMJu`MD!E{{s%HD~uO1ZoY2V#TM8Mz4z^xC9ZRgg03ZD*+u7Bp%YEi%Pm-7~{_Y99A3pez`30zDp -zK$@u={Kkz1N-odP|Ht0_z(sb}ci$hF*#wm+F{DL{X5!L{$|@=D=MuMmns`ar4`$;(n_DDmR79f78Si|MHeF~RcdKPgXaEx -z&+o^E-GxM3U-$F8p4alyy!ZNlo$FlZ&zwIqmdEai>X_^Mwhl`_sGV6t{?{oc8#^&M$`?fzr`#N^SpS$DvZ0lNmSKQw3*5TO8@A2`y -zix1%c+?&wvn0(!z*I(y5Q+9u=Z}0c(+&!TCB!_t4q=3(Ni65P!{C`r$-Yw$&BA&n2 -zb^I*%N^TptjBAp>6S-u*6^Z}a}hBe)-W_@dos`JZ`W>%wPk&n92~rE@-m4_tVM&P}v# -z?A#d-`#Brib9@eWs=&_aPTF^mXs+lplfD;1<@R3RIp;e_ICqP$@gyIz9bfxl-szcs -zJ=<^RfSLol$0h$<5Vxy2rgkxI7mx4xtT^E3L>+#QfzQDwj{3hj?w@fV;P5`@adDiT -z$HmX`C#|f`0d&nl=Uuw)pzGHk;GA^t_sePB*m;@nTL#WNFVpuP`seo1$qt+Aaenf} -z+r%l$uX9dad(gR*&Q;Fn^YMM|UBq$s^m#IA=V1D-$9UTtIP<(~l5y1afGnSB^&NKP -ziO)mWcW~W3-q)Y89O}+|#f -zg*LShi;oxHu72xa_xPlK>oc^{@2%fw*AX9^sZVoh-_PeKE$#F%_^dwsyN;0^evI55 -zC$6=gICbVZdfad7(*EPS@p1aBa}wrNoF{3|IsbRoi9SE%W?KN$J>*Iem$S>hdrKr>Gmq`PO^>vkFMow4Ayxk^6Yc@@AAIlI`1xi -zoA+A3L%Ocx>z%;(a|iv?_fqMa+jltT>w6INeWn`IuT$j+s -z&*weYWc*ygfBV?an4iCobN)Wg`TIDWe{t>;UteLr`&{;?IuE+9>qWW`cKRCF(cNoc -z=kMd3;J6*1=N`3l>iD?BzvJ_;Q+_->e;?=keVp_6an9ez;j`2E`#9WxK79T@&iVT| -z=kMd_-dOy3bKv}a9DPPSe;?=keH>l4pX5GDeE!URl=xa@huxbxeGQ4Q($C+=`2}5% -z8aRI+=Zx=YI)5K0-tNxd$FX<0C%HC${yvWG@$9+h!u58pb@)BD^Y?LdU*i0Iob&f_ -z&fmxR#oou!bK|?udNiJYzbC$5eg6HP{|~<3bMnv~x|eRxf$O_hxUZt;#p37ve*X7* -z&VEi>_Z4(Lrsqf|lO>#w_%qSR?Osg$J`dZ9o{v8JeIDK0*ZE8Q40VU)Ieic4=+AKv -zh-WBI-vc^)<~^X@HtzF19{R7g@5eo-)9>-{Tuce)5+%FeTgr1NEbA@yyvYy6%LWzTp|$Dd2m -zGf8?6Zg<^IACJ#Xc^=K5;~B8=iO1xqUt>A!&!=_RdpM`Z^teA)Hely6Dx>cril329 -z+Ot@CRxiQ2(f2F-BHK89J>#r);%97#i?4~$_QB7;`uW%HGVt8giKBbog*m+ET^Qn3 -z-|2T@NK^QrKJ5E0%mDAgob=}>kNfkJ1O84-hrc6pRKF|5KIyQ2S4#WD#0byW^E)lp -zuhU_cD}FX`H~plA@AY|0-u-MLcZJ -zxP9U>U)}+K&h5B8gQha^vL4-i55eA1)Hv{*YpLEjI&<0ld*E1(c>kJA#{2y&p5S;m -z$?@-uXF2J!jp3d?owPn(y4xr6#C-{55#PTDxdZJgS(JaIg2#Btt+|2uAj -z^tg@VdzOcPYkAuJU0FQ?9{(2IDZMXFT}hjl`YiN6eRhvJZqf65leDR^JNGzj@2}YN -z?zHXs3KB*BZmfNefbQ4qZnJtXR@dxLzr(`6wLJ0oo$_sq`F1*Pz>oE8e>N6pem|YP -zD@ogjZU3fvv<;u=u=Vl~=6RMjf06a;xVKw>JdbHh{oVJO*5j6@_cPUpy=8x(XH&i3 -z_bi9+|4#0iSNuEP9;r+F?f9A2fwQ*t!@hl;+EdQQ(e`n>+sn^Co_eQcZ~LEBzt37% -z_q^*Af0vuB&;Q1{o8*0#y=_g=);aHH9Od1Nqkb-N*v}=BelBt9%-@04yAe8<_=TJs -z{6}f+r`cEQ+(6ss&vahE`i=LI$#c&O;yD?|`}qKQ<2gRC=X{{!fb)T)`kAd>k6E@?X5vk3+1J_!!AL -zQd?Ti_*i(-+dgUENvvby?Z*q^cinD3UU)}id~7`Z8!Pm|-VN3}>jImuYhy4 -z)5q%F@9m_|@%wy~i`!4$)4uAsNXtzf#qwmK9kY-7G5dHT{w>eApKLd~$Lx=?UCpas -ztap7URrXZ!j*kqKZ09&`-*%XHB@ZX!&tA7DOSV7Ik-Fpd4*QI}`z|owPZRHl*OM2< -zzwN#I+pniMuIt!-C-Lz-pdIyD-)9r=`{_eG=BMIw-#o{y2TwBp;=IH$uKCF?#N(2G -zm_M5zFFVVja}T`>5^qN*{ds{7d*AcJ1NM$&mi9i(d9L1hxUGZZJLkIkUD*B3Jvi@< -z+um(2-sjOa_2=jPJ9FZF?om7Tvy7$je$KSb;fmfSl!mX9aHw*M<;i;1+Qyh_Z)Oj-;P`PGxy_`{_TDD -zQH6J$-skZAx_;lq-t&6s8T$_PclSLcz2k4+3uf$m$f7wmhD_}(8rAN)Mu`%}ny -z><9Q9vilid^{7rAYxFMG8Q<@ddtj#Ke> -z93}0%boW|se7-?kd@gg!&Mo#k4oj=iF4E1I}NA -z)n~Tz*I>_IgSF>;OeoWBOk^}h4hVB@)P>ijiWeeV|6$IoAbJ$3#X?D=c3iCgYI -z%5StBwck1a0QW?=&Yk}>&&T+0m~($jzrCXGY2{il#}(bX`LsU^qwlBHekH!H%{AW> -z$vyj7=9lh66`lR;3+Mg1A5+3}5hecIpFRudxdQ6BWxr=lPS-!+b?VugjsxmHx=;Oa -z+@AUm>$Cbj&$8^+KbfSzx-LI(Zod!uoke?A@#53p4W{20ytm)X-uoPozMpFEIGo`6 -zt;Qh9wf^JDOXJ@^U&S(az|g3x9_ar{?}2RH|V)0`~LT?Ly0HF*Ev|f@iQdHcfU*1@1=Cuc|}|g|Bj!F -zIqJs}u5)BN3h%g`=dSeo+thQ;@159vMVlL!mf3wp`wo7dr{HADE -z*w1u=;J!Rvy^zQ{Hd?ZnE2wy3We8 -zxC4BS-~C>&j(hKSulKvr`~CI*Nxzx9x*w+R5Wbz~!t~n+2lhQ_&)V_bjGu_t?|@&U -zqKWrTeIjdcL -zFQwhzv}Lqy%#JF6LeoHp7%*@J0(0rXX`<~kE8FO+)cA*4}H5G;P+mRpZmR(yU(WC{LuGO+I;w8 -zxgU4pW1{{3@9F(s+%DH7<97YHqxEvs=K7-c7sq{j^SI9vr)6toU-%vUPQ@FZ_r6EH -z;r{Qty~BS0qUa|#efLe5`2;@jjY1P9M|vjP2_*j+!%PA5;E2{U7jS3hVK{kB#=c -z$A9jA_va};Hd062-;+Pza{PubN7pZ6Ig&QlvW&rf9~*5st}pgue1~rz)DbVoQLF1` -zT_2ambKTa}8FS_Mne+bvalSL-`0bW+wv%{nAGJBK@A2}~Zhw8AoZPK*&+|G*cc0g> -z&l}A3ckXVRdS1t#r`CDdo?|X;Y8(5y(tYmjE{~pfjE`Fbd)naNaa@PR#mC&U%OyR} -z@jd1E_ug{xG573phds~9J>~fK-f}wT>iJy#U(bZ>zWd1YS|dd~Q@#6Jw(|wHp1;BO -zX0wkQNhIp^duH)DxAuAVJ-7DUS>;dOKflU%b88)({d;HRO{Dc7{_5lZ-V^rVdH!D- -zfx^4*zWdWJdS#;Uhwk@XzNr4wuPbCqf12G*;aB3&7d*s+yrliThyErG{gsD47KcuF -z=(afYJ`dd*hu-F)H^-qjdgz8Y^coLc6^A-J^iotGU*taDJ!Vo^!1CSa_K-eqH*?Yp%b#Gkx_{-RT>;uIj!bef`xp -zTzjmi=c=n;nLc)P`UO2IN9(UW)_wgIr^{b=?8+-%c)5S5 -z?mzYa=JmbDUeWz?G-HkZH~#y{mw#dL+vVSV`t-YRUHsr>SLIbj{e?*mANJR5@RN;a -z{&{?2frnCAr{|>4u(Q-(JvHr@zVkp!pFE&^F$X{W?HrI^#EXCW^Eu0@=9zz`_mQ5y -zkMt@}FQI1k+2<@@9S;ZVuaT7fmT&NKORuE-e(5~l9RFnxSib&8S$gJx`a2(M>Ej}u -zIA{42kF)gh`|scX@~2w*LE~3>AL%vskzViVE6juamcRU2)_y%-fWBXPTZ^T48t07v -z?0uwHy!hVB58X%lhNma!|Hb>P|BYbvA2fd3_mQ4@*}a!v_Vls?)_+TfmG3sr9Uo7x -zv2=#`%)fFU*iuE8oI8K2J$;Ll%l+0**K4f4xr_Esui}HM{$|*C_AB4=CQJ8b&gp;N -z(+?`YI&kmh8wM@?pz_@}-h25)Pd}*q_RzhTZ@cN<+aJ97-pj9h`Yhwe|IQho%-gN} -zLFr|B`<%an(x+~<^a@T=OZKUMDc-Rp61A4?oc4?V#1fVd*uOMRT6zN;&wlHF_>-32 -zc|iS}_mST6*Y{pNe;?`PpSt(*8Bbqj``>ST+UKl%h3$FI8K1$=+ExqA@{U`gx_^;p(UYIE8dw4-f@nwlLF=hOJjcW?}^K-LA -zqPh5CC4XA*CxxS_L(1!FL7f* -z;sm|fd2?*EjZZF29NEH43KQL%X4t?>39p-B5mj!%jI#K|MB+%7TkY-)5>I_A?t&y= -zvs>k^4HP8aUXVDlitOsUSIn@Cmk?euLk=0|Bb}&v%8^xjqzqNA)C?u4a>Zs?`y(qi -zjw;uROxYtXsB+C_XhM~1G(!cdy`?u5B#Oyjk1C(SM-Wb+%I{=i!#1k?mKhdN<)=~Q -z+wpmXYw=eZ&l)o%@G$ACZ?yOoGfZFy@fnZr_xJ{U9r0<8FZcL0=J7j-??m;p%H4W{ -zg=gF$$$F{raEUwLUy!(!@^h%=nl-}=YPs@e7(p#pBdVPQQpJ&-*IT)5Gi;&CZJJ>o -zRW5@n*MP62Ts^A2Iy2Ow%GH>m1XXVS53JlUK9X`nsB(j5$e_ygo1qm|t^_sy%M6;v -ze+o7JIWzR(qeyS__*RdvLUv6@iab8$@e52khWyARs-6imbmO~-FGh{8Ca0Ej{swal -z7fByQ^>f4w8GJhVIx!wsRJ{#mD8)M{x5Iu;%Q1zjKPxHMUVH+wC8!wl`Hc1qpV>nxl{^?w>w-;^0fQ2p;h^}im~|2i{lv;S8Amr?Z= -zq1s=1jXCaixh-zFyWT@SmNzFU*XMR(J>ez~m$@mA-@c|GaX;Ey$4lt%ni)p%GU}^D -z)mMZUk#Fm2>;D`oegYLg;_U+eJ|9zXr+g2X?PZwl2;&I~=MdeZn$q?dYniKowW -z+jw-jwfGO@t3lOMZH6M$_^!Rm#&H%kzB6VR!9OQ`7~jo)dB}_gag1=rj9O9ary5nh -z$_(qjUyxX!-B~QgIxMAJtr=BeIpIn(Dn|~bO=V`3Vt%zTg4$mRqW -z-7zy{P~+Q-caUC#8lP%2l%U497&X2{W|TsWZ^Dc=uCVc)L6y&&VGuRG&8YER?6mP3 -zmekwswxGtP8P&fgGt{B_x52?cFR+)Lc8*#9R#Ee74%LrYGmPLI<@!*|Uxli_T#|pj -z-5hl@ZW;a^`HNBQ6`5i3<(9u6XG!lyrFWTOBDBIMUBVW@0ip0*Mz4~`Eq6$M2&AdY8>lO<6CQnV$}9kgzsV=rpzdTe@uAi#j(*6 -zs=ql@`AIW$;-^(Fsz3P_oA1+RG>Mw;6J|7qn(w1#REb(YWs>?QUu5>W4Q`3M^FmuM -zTX+e}xoL(W)OzW{QtIzCqjpsLZD!PpYQM#dc7EH|$1wgs^gn~2#5UA&wwfW08s9Qh -zyQOB>X}0lQK#lJds$9+t!>I8cLXGdB8D&u8+iyl)sPU~um9H^F0yVx1FR<}#LXB6E -zB>&29nTx3Tx`686yczPS_1}dWpPk>d&Ot66CT7%Sgwp2y76|>%TfIrf4;RdW=12Zc81Mp5YxmS^ElHDt2SjI=v{*oE> -zqVo0NFOjd?44wFEc2v1GGc=&q -zX9Yfh^b~5nCCsq&9Gh>8_-FKE!HnkdgM{bID2tkJ{iyPNW~jjnska!5>CgPLEq%@m -z?a2R*$e!So>mzwt%nJz{<}-hviNRE{Ms|kLDc@a5AR2N -zU8r&BG(#=2t30w*Z|h+L`OM$6Zbqw;{;ZfGkL-$%G@|BPC2C$*m{A%v-^$IX3^m_M -z&8YtwR;~?IuGNfMQ01D7A%?YBxgzYQ9vW*7sJOmESbOG-@98qSkk6n$K%bwB=evEms~dz)@7YBWCDEZQnJhajrI_O4K-4m{B=uoXgB;;|W}M -zp}kqu_CAB!-t%UdKyB|WsQxTH-s)d8qj^;Qb7nMysy}Z={iyv!Gin^FB=zl7`*^q` -zQu#bw?5;e{@{PG&ZW^_nm7(?rrDiC>%W1#ZjB<~)e3Pi{al#Dam?qzt8Fk{F)Yp!e -zus+(%P=Q*H8%L}k3#fUP$8{XXZ{ZlK+^8A)QR}e{zejo+|m^fb;Lv7ESk7m75eh#&MXHn~S#tf6F -z_1l2)aTm27Rvu-`+vXNa;wLICzTBO8r0vhAQ1dy98i#Q+^k6ITRjBneK -z@%l5v=C9d)F@u_K?Wp%U -z&C3K{L_aqwtlz_^erHhgr{4^H_%O=%no$?NgnZTbT}+|YSHcVnhi!j8f&WJOIBJ~6 -z%+QaTFYT!HU4<%NX@-qQ*gVRi)^`soz1s}69P)@Ku{pN(c%eYlP9ENXmb%qWi<-)S?NLXB_Ej9O6RT8$f6f#1Zm#cyFVsy|I;s6mZe3bmcBms@>nW|%{5XS1m7Y{rc8sO@apjK)#p-i;d9 -zE;Cf)cc^#!S8Uw7QR7)D$-nbZa}zaQ8>s%Rn_(H%zai9oE=Mg_5o)bxXFwvQROPku=QXow}}Jf+c2Yb93;GEMpIZoIA=y#)O;B?qfXR3 -zsX)z>V$?h-GNWx)(lqN~89#z~{Giq!{wwz3m$4PqPKy~eq1tIQqf⪚Sw_{#wXKW -z5&jnIJ!OXN66PD@v4z)>f76UMu$S<<87-meTQs9A-avTVjK)y)kD}@yF~cCL{tUj3 -z{QYLshkro0*Noax^|hH%6&@p8X+{;O`qQZT%gs=Ns=pXJ$X{eeDdc`+Q^Jfk9%S{c -zn^7KLN&2)IO`+<~q3WMB!#Jw`F}#ZWqh>UMzfXABjQUXZ^_o!wzM62o8P%ccuSL~g -zV}?pp{S|l(`O{`pjy;6S%qWGbFJVT@543qSgqla)sCm?7Ms=wDWhL^zBgOnj^J<%& -zA-kd@t9Ui(qxf>dWvKiqRQ`2#1|PvCRQ?(4BE1Kdf9nC3e-)K~4mD4wQ2EF3736P1 -zwH*wb(GY4o7&N1HRQqjas6v&i#CZQ`Mrn-qk7l%WfwymlyoaYfJcz0%gW68| -z&8QExo%EVfGphY2GnAvsm7(^trDjxu+Rql7(b^#^w`zt-4^Mcw7gbLWYCGySqb}5T -z)M-ZbsP^m3P>d>9gxX)H%qW4{U+<)1qa{?iMKg?fc+|t4sCwE_+gY0#wW7AO7Bi|w -z)l+4Lourl9M(y{v%xDv}-`_B!9BO~e`^PdGN9~Wt%%~N$-!DRKuN#H7y{?;44s-Oc -z4S$97g#rurqrw~1s`PPGxYWaocPHX-3o5Rc@Ng-ro)XkND>kDd -z)I3X>(aMh1vuuW}hsQnKjjE>$HD5Z-s2w$5+RUg1)t_oJZ1a4d!dqsTL)9~jTJJMv -zlt-=iX*23Xt@m~_YC)~{W;3cl?Z-+{>woFTiFp0bp!U~!Gs@x1*pE#jrySiAW*Eh% -zQ+^oLpCMF#2F)mg>QBEJ)uHOCMb%Sdh6+?Y<*0hfP~%f-MkT26DK?{pA6Y%~sCwqi -zFpa7whpJ~1wZ10ID2rNO<7U)`>Q5`Go)$ASpz5hZ)l-X_KQ(4ljha7IX0)+w^{k`n -zSu?{Ds-6W@J@csfJZDC;sQEl&M%~CE>_`P_y`{}azmB8zrnkp2TK=J}uQAm2nnA6v -zelzO9hZ5h3YPTJ=UfRs46}4Vk%%~cbzXFv%jT--QGb%%kf2kR5{+H!nL*-vZjq{2b -zEu+SH$&98@^-rMkXHnxhZboCM@fqO;iMCGf(cM?wHl*;{w -z<;$Y-4Wsh);t1g`JVCe?*Nx^-`DV?K#XqP0anyPl -zGow+|dKodJUR1drGc=>hHKEpjqZu`z)_=VjRiMhH&5%Hq+xfoDvu!ilLd~;HGg?5E -zn>Rxi<9?#%^OzZpqUQ668Fiz|b(x_aRjv-T-PD><4QjioHlqY;-tF*wH%6PNdADIk -zQ>gR79P*_c-IHdRz)J{c&CrOyOSuL!sz;rV*Wt5RZ?$Hq!e>)o2`YcF8BP70?Z^Aw -zF4TExBXY`oq#Tc88EPJsnxPnfg?ft2XlBFe8N_F>{Jr>6%Jrbib(^6KwO=d7R!rb1 -zZhhCbmqn~0Jcw~U7}tYwJ!UAwxE_q_!FQ^j@7VUVh;cm_*Mo6A7}sNlGK}lNxE>r) -zJ>RzNZ4u*oFs=vVdN8iX3}qPCgK<5m?Qv_}w#P+OJ>#hDX9%^u4WhQUj2Ze-_4b*e -z4VAwXHP1@Su<$LPuVxtX@SulFQR}<&&P3vR)>FF~wV~!mEB+?!w3wk0r|4e;zK;C$ -zW>klNK)BY7Dp2*M&1mzRiNwnZZZVuX4~5&YI~b7 -zLl(8YjhmqekC1=il+E`(d@SKKJ_)nmNF-iG{o`gdhU)Jqs=p&<7)13qgV&J1-;DaO -zhj6bMwWI25GouoGBIQ!}G2HpOg*Q>#?FwFmdE_JKk!jR?nli&AK9u?<%xD<@f_j=z -z_159*u^KhsE3u7wDp2*L&5%OP_nlSWeo@D}b^Ivt%h-+csQuv_YB^`kXa=>Mc{3VE -zZ6AH8_PbH-ccR*FN44K(hI&-{wW#gB8g(44K($|rS7Hj)egZWwcD@!HZKLMJmKiOh -z+MhLIzG3f+Hb~otjG9xfE~0~YeqHLNx0gKN>S}^ -z{;RdWhR-0pf@*&m)&7zh^7wSpr%?NuNz`$F9M%3Xz83pY?f0R!>s~YJL2cLFX4H&o -zzZ|u{DM9U@ic$NgA~U2={YaQ${a-BqBx?UOVTN|p{%2{$&Ywn6=TH6kVA}07qfXTM -zS}PV{J?gr1=6_p!FWyBxZK(M1uUh;F{wMK$sQB5hSo}0<9u9jrgPIqu9&SRdrwR|3 -zp~h`<*~+h>&WlE{fPM~}(I8$xIAcbQsPn=qOK++)qY6uJN}JKnmurdp*7hHLf+NaVkc&yYWS9 -zcioKEQ0=ao(F&^FWiy&xvT|8ef5**e3{`H_j7Cu9hRvu1)!(%*SbtZ|FpcVOkH>d= -zd;@BISE2fwLiKm;e_6Y$X0(E8ciD`VQ0*?7QT`4qH-_r(s2Ppm#p<6K4WY^nno$v| -zzblK@-(@r8Q2p)l_)d?nL(RhqRDX9qZ|$z2+FdrICA^sMq8Tlq+MPF}(SNpfyHMLv -zrx|Kd?QVU};y2AOkDBLwsQxy2dZVY8qslEWSh*!L{U0|&FKYX$K$YA6M@!!_!#t|JL66UPd@IJ=;k<2U -z&8YoHEk2lWt1+W8+@bzr)c7y{Ln85Cgy&G1U~@8Kr=3&K_SVU@!P-1tl)v4RWu -zMVvsbzpNRJ;RS?8&8QpW?H|>zQdGZ6%xLTH6N#Tv&pN6fIou|k^>8QtfN-maD^b_6 -zi|`{VHIEf9OUhnCpsChd#lSr&$ -z7FGYa8G2Fkvl_pGC7xdF=^LN2dDxEnJl2LfKWsHa3+nu^*$g{>ZTYrQ`L@ikiORQO -zhA~uqqn6%1VuoQ$?;bKk4Ju!?rFU1Eq0-X3E6lL?Nz1o@YIoiYbEtM_%}|4yA7xm; -zdM`Dj64X2@Hly{t&5tG2{8%)jetaU^aS!Tzvki5=S&wl)@nxhJqsF<&3>$xyNc@C+ -zv#9tPGmPW&i0}0Hc8{+`&9`#Y{Mi14wY!08cNx|0465B6w$bhos{TPUbm0$4uk-j? -zk1xYU;#a3F|B4x=QS)~U)o$;{t=%qEyDg}8Yfl -z{2T`##m|~y1mp8S)bf_0+D)O_UHNb#@daE$wYzAB1^gx2oj0Qy{1@_#pz0qsLnkf~ -zU+M7`9=~B~GtA=}@xvZJ -zhozCYClnGh7#mEdAf_uutg!2+ccwj)P7_Lb^PnW2b11y -zMy>c{+H1jh|7eCfq{<^TIDu8D?R@oviTJseK8%kCe`e*UQRS!1FpereiXXsX)b?7B -zdM;*}N>#oL)qW|ee2E!$j$8RH%u;>>wcTY=qo{e)h$`3eCmdf`&&_7kh?fv< -zFrzvwAY5xk)u`i2l^IRb8O@t9RK8I&8bRe7Hlt3|ylO(tt41@bM13A8LX}UMkrqs8FpA$orkWX=Hnu29*m;e>s37U^_WpNs=Y2V -z>O{5IZblpLvGx}6$BbVN)!w8Tx=`&kq2_NLs=WlNz11;mZ^ew3QSB|6(ITq71v6?z -zEngk#e5(xAUa1+D-fivWQS*Hg)m|5>Toe8!@s+4@6=qobV=Fh0n&+da{C%kNu@+SR -zW;2wamTT)>Hoxal`SYmrvoTcuQ8RR+@;76=KSt#*#Z~fev5_hNrWs~Y`E#iGoI&O9 -zL7l%fqw+VIp&XUJ2sMv~Z{p>gHuI|VJs{I_Q{G=KBP|MYZy3Vu3PUWTaZ_|u6P|LH9&!zq~Gc2Rd -zmu67;^JX-Jw-FvRqYSEiKmLgFeP-xJ>kd{w6c3LXAhUtDT(2W8)n*9?Piln8!Aa -z8)|v7X6Q$aM;~fDdd<*=PbYs1vTHt4gKEDNRldXwt8cgEnnR688@`18wVF{2YI&OR -zH>khK4E3n9!_Es!|W;_#c#CHNz5WJItf`Qi?;NsAI5L51cL=q-t*G_fVum#8e0=IgTizUMc_+;< -zfm+_I85)sIrm4Y<>QT#EhaaLJwPvV7?Z-<{`HRhH?aj8lb8a5Byc4M9&EQk8U-6Xd -zGowz_`fWokZ>t&VQOjG4>@tp&q1xRUwB=nuE$_S;Mp2&wDp2b;jauGvGnAp0x6}+X -z1BnEu22FW0nno?}6n>3<tJidw(5ZWU^I%TUX^^+)#kViPZ-+=dw~ -zqn39OwY&>vm_{vc4ms61GK^}s2ep3dQOjFrh9cDGkFht|@{XdGcf<_CsO23pLp5^h -z(Ntwdm8j*dz-9W8HbW`uIJ%v&{99(UfLh+1n?)_}Flu?bP@ii$v6yz+&8P{rybY-3 -ztv5p@YI)PhDbyElZZkOBU -zHoFaOt($VU-{9@ItL~CJ?M}Mm?ua|+HoFaOty|@$-GpR4<@>GOoSSt=-F~;n?Q~n+ -zCU^1m9FG{s8GIJwIF7%AgZL-JXHe^@-wfUObkdu#1}pJ4@>QVj8>P*ln`%m5{R6I3 -z(BB1AJ@aOm#yZm5Fy1e^4Q{Plz3#}@3ww-Dcss=v()O{jiWqxw;V -zHZfjwVOZ_6^jTCtbEtYI%`l4UXC11a)oz7b<`%mnHzX3*(M~_ApKbU;Y{1tL -zUyrK4&J0zkewLv6x&B)2x07!T)z4Kk%%ak>sD2Kk>KQUaFRGtqsQts%_2#0RbKCKG -z^>dBj77>9`O -z_V_N3uR|S|%00f!<2SD5JdXGUR6X-%7{@;)zTe~fJiZBaJa2eSBJtboZ|cpc4z*va -z#ahOz#tfAh_aA?o{6%K8+{1TE6J9c-MO66(d>ZBF%`k)NcNUd@+>E;M#e}=es1sGb -z9iLA5HZwG%`dfp_Uu{OE_(axEkvn^hg{R$7cgU@GYur+|$eq2~%e$kJ{xo~I!L4%B -z?((ax+^jq8cDpU8{d^;8zhC3wGB<_e#BX%7KgVU%_K?Tl!7&^oeiSv&N6avc@w_%e -zH`b897Bwza?%Jy?yx`8deQrCde=Vr~)qA+YEx{X!-~N4`)50}W|K_j-C-9Gm&!YM_ -zZiX>b|3=Nwhw5Jgs(-ca=2aG6b{E`1w;R>Jc2xhGJY4OTV-N8uyc##VtbdF6LfV)H^m-bcV(lqw-gy_Uma>`{iaRLhaXAj`6vG -zdZtnHCX2_hAIm7$hbq@=hEDu-%C(~MRioM~_3%!+)w6-RK9|D>VirF_zA=0};X%|m -z_T%N)i@HwNh4*85I?bpR)5O=I+N(m9t3Z`2N0lqaBFYt+(ay`Q+!p>a^KjD)>-bBA -z*UYels&5`u-z=)WNxYEyCd_CAA3=NCmI&8IH6&27eb -zKZ_SpZyKM>dMZM#*PS*iw~5NPgqjx%sP^a0kVnmnEUMfnDt{Mdu^Hcujrhk{kMF@6 -zd^`EqUh4DRU2tbn^-Q4pH-hS4AF7>h)OOO2%GZGEUmdD{wPvV9^{)g~E``d!{CkPS -zTX7cOgn7*16b|474wJtH)lQ>Z=T@WYDMj^97gN-~^_N&XE2wgdsC?6?{^d~pn>521 -z{yOULm -zDGPV!JU)ZkzqWgPo5xq9&c8}LzS!eeIp}IXI*V#|#tb7EpJ#CrqR+|msLzdaW|+lG -zl-~?psC=E4-ra77HcRhrHA4!OPbW93Z>J?TY@_PiGD8-XZ`{(m$ILKl>D?n{s7I}z -z8h7JG7G8C8Zr1I0d)!L5++F7&`b6qmar17@?Q~n+3b)MN=A`k7%#RgGJ&W#;+wV5I -zb#A$&+(NUJn{_AMaks^-bF1C;7g)I!)V!NV9S?Hu5Y`hOM9tfb8T#-L`Ek&@})dJ;qgn) -z=6)LS)2RGYX2^KB-@{EFZuD@Ohf6)Y-jGNfAAEttVuu^+X*`pnRaT3EX%@d`hCFKCj(Pm3$9JLTTa(8(dVD!*zU^?*qx!eauz;FxQy!o5_zb>|_;!zP -z^Z07id@J?%5|3Yds?E2-S{tVxw+%H;+fT81vw^n|UPZ-E;yZByM{x|_rg1>6&uX_E -zl|TPvpC_n!l10ULVLx`_A7U%sO!*Y5p3NtjE2#W^sCm(iniuUJUx`-|uD~uV!<#5y -z#bi)DWo`;p&jgWL|6{22Ka7fR#b3h~ti;VH*!rD8jep(@?Wpxz=kc{3pFpkO<;Pq8 -zB{Pg;yg%{yUXQOst>03QFY);0YFoe4sCK8!(1%*T%^u(6@ujHsyZJcFzhQ=H)c&O8 -zv5W&Q9zpgWlvRt97@2&BkL1HQrO$sPd?KhEe7E -zQ03BiMB{=Q=Q1-Cqt@g4uiAQAMvZqbR$&inJ$0L*3st_;42`JzYf$AXQR}G~)vvV* -z-fJN}hgwgQX6W^BkB8IvILeP7w*HSu%C~#C-mOB7Pcf>UjYn8J^Y|Rvna0Pf9@IP= -zL-l{u3?r!i51XL})&DkB|C>?u)}i{J#s<>2FSq`0nPCn!&w3>3os#@j9!|I$X-i*5 -z^?Mps|0t^dZdAXUJif}~w=c8!8PxJj;iEB&swab5zis#!EJv-cGSu>xnxO=>y!=du -z44V(P!BF69*WFp2Dyp6ZRQWtU94Aoy -z?Zt-@Ub)z}SJZefpvHUN46_)oS2JX>hVp%=_15d@J)Yi%T91vW^-djK_4s1c`dWXG#q{E{wmC9`y#7n!_B)nH|u8HF4TCpp~k<_!=?BF!X+55H#000bKi{kS&YZo -z45O%V?s01{p5N}q11vm;zfJiZYTQRq6{buMzwbNsU7F7OfRQ<*7)ctMT -zb7p8qt&e(-uk-j44;OoQ^?uyPBHt`(|2<=d5&T`^$BKA9i18gYqY>2g^kG!LhRiUC -zmlDpHp$k>6(~KG<ml?#|G)U#|xOQ`l2QSC37VIE5e&zT{I -zDmQ6HgIGhkVtgXwr<)H_zwaw&CF#@nhlI1J`89}|Ul}uMLFI3BOI`hrm*Usm71Vs1 -z_wY1oo=xJ5k)Ohf_X{Ja+v-n&%QF=UzB1$+p8MulDd2_~(RQ?&06XJmKH= -z@N-e+kD}^-8mj!0JbVOI{*fN$^eZmU;W*CEZZ^TPzk$sy@i1iZ5--9G(&uuy!y@(J -zy9mp>2=^e%ST27`xC>dmuc7LBG^%_RLZTAW7scD}1qpYRni=B@wEvb_ -zH{-Uu^={ftxU1}M@VZ;uJ)%2XWVwT-c7p+ca_X>c{l53+;+F#O}hzqmF0;i_(ksO*vJS-~+cX?P|PPpE~^5KNFL94uEN6vs<;pFAH%Zmy}sz$4d -z3TLb4`0vz_=_ABEW%MaUg{x0lIsaI_C-=&V_4qES=>Eypx%v?cg -z?`UsP;Y#l+|IJ-Lb$wCc_VqjbcmA~tuPrJZy!T+(7UXX%C@LI$ -zOTo}vaOo`t%W`6;**Kv8hU`0-TyCC;%9Q#he_;+yX?taB%qx8n9#;m#Niy|-}qy*Toxg`ANeFZ1KTA2GPuB;TUuHf9i6wdz(Zhx(C=WDpS -zTDZ1~%WH)zYdHPQ!u&Teb7$e;ow)Mt!qsnM{yT*;-@(D}77l$ESHD-d_C1{We&Ou* -zacHw}coT=W3rDtb{6~e^AK~ne3+H}}>vt7y+=U}QDIEO?PG*w1jJB?UlcRr(`FAI0-i^7j7I(w{y7uk>tilaN<+R$xq?n=aWO9 -z$NA4E7v#uda&!^b|24VsuZsU#a^Y*3T}@7`;^t~{OU`~hIrnuO|3)(V4P5+2a!GFe -zFuDChoZ3!KZ!7&r$?T7C`A5kWIrrn_{EsnnS90(!T)Qi|E=PBgV>`ILliZP$KS}0( -zg1Mp8)DZin(VJ3ZH{s$bUWs6PtC~rkEa$sj_diFl9= -z7IU{9nz{{_KX7Q}14{q!q1=ZtpF1>@lb<>?^C_G?d1&q==00<1>NAS}?4g;@;?%;S -z=>=T*+@aOaDg8@_roMzTUp_SZWqIeJ**kIWdxz$~hZFyPX!752@CS#6et^qAIJ6>j -z|8Z#QKXCk~hq6D#ou3}c+>I-DA6k{unG5on3;yJK4rUx!cmH^2BJn`ZInp;-Qvxf(7wy?gW -zQ2iV6_8-OhkHS43elv9`yy)R|&##Be^mmiDH~dMf??F$p_BTEJA3k0!e{JcH_i*0B -z*ZBCAf6CJT*2lkV&B7JC%kw=8KiB(H?d^Z?G1gxC(bk_FA6~TlyT3dCUwqhCxZTr# -z&`naUe2{~LP=vkqq8V&N`@Ij0@c2Xg+}uO-a-*qyIme+^;Ixx0Kk -zPAbefeAdIdzV*Nh)2G8tO6N1el&Al1Ef1eL@*W;km=nHj9%|IzLpcGwtRRzErB405 -zkpC;J&k6ebtKT48m`U__|9?tdO7DG{rN771n>~Hi(_86-{{HIOR=#VuJoT!4iI;Ek -z^gd6&)zdd$VddZ9>5ZQLB~Kq`O!W6XmS6RaowD#_`FyEx)1xf>rdB;CoKDno5k`N< -zSis8&FMIn>XtMPF2U|Lyf#Y=Df6(9Eth>t!DevvShd7nj{RjQs=IOiZ_aBKr+`uli2`BRz1h_C;ehpD|xqSfkAIoxzr4}Pmw33#>#y?q+n!_T -zeV%^Y>+kaVKlMzjpN|xAhw2_~`HMXNtG)h&ho`;%=5JX4$G!d@Pe0}LZ)vB;U+J@~ -z{;b#kF0X&v$LmrrKjP)vy!@Ol=<(O${ag3)U-aeg^8BCl{#AQe*H1KlrFX`~6DwXn -zAEDxi!@ho+z5Z8w|MFh{_q>0Vp8w**R^OU$zsvQuJiGhDmw12beR=-L=Xc+Q*8UT` -z|BGJ#$31_u*Z%`gpZE0Zy!}Q`f4=u`*3%a}z24K`>E%~F{Sr@a_w<~XU-tAPm(l-1 -zwqH+wVYMw^`BSaGS93hq_-zCWANTZ1PycIA-}dw^Pp|Rx3p|{9nU#M{gS9v5QCHg>Hp~IQ=VSJxT*c&Axppf*;YR9>0O>)cC)2lQBQg*6TfVzm^*!cGwI9sjCxBi -z^7DsTPoMJiulfFA%hEIjU)IxGJ-v6p(#z_t{!Jg>_jvtdUVnp^pY`%L -zd-=(?S^05KU-a}-o?bs<>06$@>giAODE9f4_4a??$8Xci|GAf6 -z`;e8t)t5i-`M-LIhX}vmbBa@=nV?*<|6RaSPwik7rvQ7Jen?6DnVK%EAxw -z@WPsf-^}@h(&xTm;ZJ+GoaNTv(>#B<=YL<4{HbiB#Mj>=t|NRwHj(l3h2Y^K4}X{Q -z6Q%E-kNlyBxik{j|4z@}=iz_!@Q8<}Jb#aezs32Aj?YzZjEg5m>7T;+H(B^gp58EM -z;p-@`^u-%3{Ewc#?(_9ZPtW-A<=?&)4pdv9u9ukqqtVCWFHhp`#=K%zAr>AFj -zGCMnyxw|uY5O3~u-|o5Dp6=ehw|BaipcIv|A{BoC8l)gtQe}x$w331>Ug?C#g+dz|xq=R2?OJEyOF9zt-24(&yF -zxyRmZ8d1MDLQoSwZxa0fxz6EdKb7OZ5XKe!d>ib8{0gFf;MWN6108;I|CPbol9r`ff3Zz1_v=zke0~Vt6~}ckkCY> -z5%4$uo0mVZ#_3O7&*6?}?>EkK81I2%eXkSip{I!UKX-%ktBd;n_8x~{B--=+B8RUK -zz|Rve;Qa1+jDdI-%J_fa6CC~$$YJ{VB8PDpK=`3|a`+0N-?#iJhyPRXyYo>F -ze;WJ~@lSt%!^?u-l@D;ZE!zLtZ*jN^;}PP&4#oxid`PtSo|7E@q|nceV*LK3D1Y#! -zynIXOV+(?b`1z1%@85YGzC++Y3PCOW+#&4wFBqVMPh04V0r1Ctp?#j@-@H}Gf8l`R -zKP=$8A-NMjvqJuj4u|g-@*jmuHu!m)kbn0p8F=E~MfrO%a0s7m0nhX}{L~v@e0bVh -zPJBX)cRzS7hd(Req9}hv!0&q1`*xxl|#z^@YJrv>~$QT`eM_h3Bd -zn&JBUHmsji_?fUDP~rRU(&1eg|JCv**LC>g1iyMxFTVo%i%Ngl)8Q3TUj0SA{7J&E -zMc}6s_}<%f`o|Y^_|vb^;ooTL@DEhIqKS|{O9N~}oTB^LYt91AoZ`9!*ZRzkMg#R0098vjQ -z596*1|K_uF_`y4L_@Qfc_=iu^Va!KY`CVh_@bB;F@b8fRv+y##{3W|O{Fem(0fK)E -z!T&nJ|1!b<9Kk&k9Bz!k1|3gy#XQcdd -zr2J!~zdNM8&mr(0@vqkt|N4xpw|C|hI(#+EcdC7Vg7n8%k^cIR#9zPjOFF&F@TEQu -znZHW-rOX}@z7ysLRsJoczx{bjFaO(Z9sYGP9vY-QUx#&>%D?OAFy^DH<;HC~{0vwh -zsO7gmTZcbF{QvJS=;ddL|9_9@^LL594~hSOkBsklFHx;ekNE$ekn!$abshhJ_{0Bf -z=;i-L#*1rySucNr_=8Et-^Yo5PZRyVo9OpuqTh#!eqVN{F8`&ZKm01u?+w@J_}?M= -z{R+`iCOS>+qY2exFJF>0Ly>r}uRF0nzVM -z$oTbcqTin+{o@@(zZZ#qA0qmF3(;?d^p`4`U+yFN#e2G{e*c>2w?_2abani{A^LrU -z==WZt->(w=mWh7<>X|zK&&=s?<0c)xudKtLBJ;_IJ-z&PGTyE}T`#|NUWeaF&2hu<=OJf0eCIB>Yo5I{sa3{U*yl-_XlH!1{+QA6%iAKZUgC -z)ucU7C+%@bdu}D|c@JsNi%5GekoLU)yk4J^q&5+WuYA -z{*SZq?#4(V3v4|u;SaO%Si*S!LG9liV&Ctw@lN8Oyj92l2R44m@)r<$+QgpM6MMd& -z=||Fklj%>wF0+?}@&1xp-}{;VWVy-oC*kXueI$HxU8nyt;s5d(z5KI;|2qi(dkFvY -zg#Rl^``%3W|1=w)Wc?l`{NF_U_dUd(FRJVHec*XI{2#=g9`Vlf=Z5>|y86AE@MTh@)Nr!idKjZy)wLV`U_%^9; -zaY4ub*EJn}7Ab#hLoa^`fj@ahFYl4^=acq+ozw^4B~$B&0@}ShT!LPCo_T -z_nK`d==a=Q_(s`x-Fh6ASF`B`=Z0N(X}ICEn=Q9~);Vz3+LcZ_a0kJOmVL?(dZ$W@ -zr_Q&1r{Qk&181-0Zaard{YJy>ZFM|A?9Ci{!TwC!ZGsjqxidA;lcX&Q+FV4o(B8`C -zcBN{c*)*5!Yx!4eo1n3V=Qh2zS*y9eAAaSw>*5QcD#JLn0)3-3wG)G}k-W%8}4s&#O1x&Aq#TdRvsBXQQ`T -z;2Ef`#i(}}g-XA7$z?vZIgjODyScfz6}sHc1|eA3II~{en4eq7LYm(=vuv3Q^P_R* -z%2_yzOqfw9ma?#lrPE*$w{G@>eHd!I8XIgXow^&VePI@dwi1qPo8_~eb}f!FYgVnz -z+11KM8bayxhFOVmp0iGy#qwP2`-Qc(@77>2+ML~3F2{ovFAW3NH%&?}<+5g& -zu4xoe>np+yvM6{>^N^r2Y}BGz8_7RZcn;JB#uwF`139!v4phz;&6EQf`DUW37U2`9 -zS+Nd6#e!K?1fz&k>{hQ6bZVVeh@@f&7B#c5w2%X@Vntl!=#b%AL(>c`uxeI@gH`KX -zSc|;$q)#1{O=z%5=+Q7orI*d%9X*|ofe5UFFMCbb55NtRv?kD?zve-Mswbc&^aMp# -zV(I$0_S5ZenuYldnEIV2%;JTk@InXW%A1^*H0Wf!l8rlxr%?n$!#EZi2Aps?K_v`L -zF>@B0V&)VyA#H1M4~Fmxt}$Ve+`R4FU2J`%tj=S@{Z_#!;1ZQDVk?E=#ky_d|JLsM -zE!Fkb3h-#zt=6RjzIe0`I`w|bWm|}hrOmSEcb%ZNPiCS~D-Nr?dBRT*t?w;TSM%Kn#Acvfwfy^t9jHkRWl!e^>R5h&cZ5c -z(^#ywYfjhib8)a1hkEQ7MPFHln=lh^UA58{c#>S3PJnp?78j%?4vdd -z^TKtP3zK;6^toccn?6_Ue$(cfsopuh%brZT(VpEXRV%RR#w|QM`~s8J-QM_vt>)Cz -zVye0JbeKv9*Jp$UJkA@p*^!S=jTgB26nH6~J_T-kCZ&B`>4pn~#ktvWbywO-^2f=! -zCi&x}TvOIcvw_nby%0%UBjqH`TJ6E1yI2Fd_0hG^h7{@j>N2Y^$B)cc3TCw+RJKys -zp=-XZg;j1A`fzciTIhqr5m=-Q1z{UtH(CkRP>ri0+4sjHrp}&|IL*6rl50JIdbKil -zhwNYr8g&PlbdtNnH25Tq2S=$-(g=``k2n%tf*8{U4DCeW4hD!=M0p;L^~1nJYdF(@ -zJ#&4g?X_kO_q~=o({CU4oNgC3g)>fjX0wZj@esMVaXbXb -z91Fr>5lzo+xsD%!`tiM1#6l+9Iy%IscDsdU_ -zeKoYH<-YpBsdaq5pJzd;hEoIbym34(sqG%h-JOWct@Jtv7EHlo@A@|giS%k^FJLt( -zTI9Ytu=KTeoR{K|ncUQAM1&FI%;a>Dijwnul{T42Ak-6BijmD&9%`|}{8dUF@gIel -zEhajcP3518F`6+u;LBv3h>^`$wpSeGrV2>Gv@rIvQ6qg{Kfh6@_}EdLX;Nw)WMDy& -zSWJZCh9|OkW~4`FD5k7GkLQdgkTH~zxS?5dRD*FvOO3`wuK6%!<3#8wrN*iy_-P%+ -zTezyM%y0|GiPOWuuo`ViL&I1LwMZ;DfT4jDB$!~u(Q*b7=qiR3uW=HCEGOZCp45gx -z5P{Y?n;Sh!r_}T)ou8y9Vo9w4Q#@}^#FA=B!77$T7$Y7}w!6EVd&IdDkF&MS+J>W( -zWUag7xakY*IBxn%n&QgIHM6SG%8tX< -zSj5VbtWs#dUj~)V7I$n_zo1@FE3#i<>Wv#UOWj5ZMGb{`lfYUr%JSJ(k{`qVEa)lXI0rwcI0->`eV+DBLh*BFU`_ -z+dXCDvW*dpo;#Un;l3&pNoKoeq9HHbab+UOHt_9NHZp4jo`4&rJ&fq#P%9H$lU0}l -zRaSy2G7m+h&K$_0Qgfh6)#gAB6`TWAwvekimBi{UunTz*mt26IkW=%5A-EcSO?pXB0OJhv23xMhX9yM+X3vi7{2WM@&uvO>AG#Z-1i}- -zYLp!1z7D`jhO)T3P*u*S>{uS`AXqoo3Tx5j2Hfcp$?EaOn6fJ)Wv^z-F5wnoXI^Yd -zj5)8}?FW!ww*fltc}}b3JFUPpN1l!^M#;aB!ojn$n_5Dzeia0564Qeo4caozY6*83 -zB@9N3wDFrSW5TyRE@#EIKBOKC+m_pSwTfEURP8y48`P{ufzpe1u&#Cp(#Ff?#qDjo -zSBSS%v-s#5sa8&^Q6+zkI$Oy#;{9NbZySwr*LVB%&NgfzI|tAkN?yCsG0L5O0KFp` -z*B~+>&AwXLVWxpU3bxgR?YyQLdUp#ufVoZ-hNPjo{Nce~2QJjkfVm;Xzd0j4RXZw* -zHWtcJG9)^rQzssEXHq1cd*>j~55Y4Dl261lNz^VR%%6!bT_6Q}$P~S*=sCmbXXL#q -zDmBiB2kOTn$rddq3^pZ>QG>B5vnvu#o@3M?Kgnp(xPTc`bUu=7(Nc+gz8<3raniA_ -z`9k{2w!V-`^yWBPk_)F{>3$o>N_N&bUV?|lkz#HcN69dTmRv(L6Q##skHcl@D%D*! -zV`(bpWHIW9|0u+4F`+-C^H0SX%@})oHseH$Y{s&^y!)pMNWp}&<>G9m?+1{A#%^=L -zy=J&QA9!$%=I?H?W$dnXPW)4yM#YNLOi0M#bi?2*Blq}UyX>zx2lyIJ3dLIiKHK>6 -z#})X)8W2K&o8{~q@u)`lO>}YljP8ac8b12sHldfAVx2AN7IrEHw?ZD0Xor?`5t{H1 -zy(R}L-xuNbH3xFon{%Mb{ZB%JlX2`%GqA?zg$|l>aeM4~NrO&SFWE;`4O$)AFAGgE -zvw{Yb1mux>umN|K4C>1AX*M@B-L~6nBVp>b;KmDKQt29n -zI&940*bMj$hb#K*BDKV3hlPd*8SaoT4;Lnu!`tiWG+eW}h{7R9BAbOunuKs*$c>Dh -zCKoav_;Jmqp&JE!bwpS*)?PNbVIQY7vIiv7#Hs~yWOtx6eA%bS$a3PrDkq2Q>$V@% -zTi%}S`I{Cz$AwP?nZX&jQxFW7Ji}f(g#VTf17`X7__0`nH^A`V!G}}|epww){-Q`T -zM2H0`eUQn(*a5!o72tz7dZ=1SoQUX^^F94^0?(tgYCur>5RM($daLVid-mmCt7;Uy -zwim#`8FWvm>Tu8&D84aoJHC(0yiR+?@mlcMj%}A3aD}7P^4e~>(Q=x;Uq0)?QgG7; -z-^JI+YJ7nRNeGsC+UomrnCAgW30&-iJk4Sf%LTiEPhYVou0)FI81+ozX&p+vu^{Ad -zUR2+=9Y_>51JFhde!ntGk9 -z#z~B`UqdO(!PPN%(hpvU84moy9N%d#8HTdW4hMmF#={X3_pq%wk}PzU@OgBu-^Ilh -z3vsabY(|GRbT;vr$;2$9UNCx)ny>LECapb)w%Hd8nYF)cdN*y`_y?Tw8xR!HTf)Wa -zhi@rk{Pe}bBY+uwK9rZ_R2Tz-0H5ksrgugJSyEbf{GyV_i_r$MzB|Php%7gTADz-oOm=4Z3FQ_?xrmUToNV>R -zB$TWD{DiW?+NFg244}&D9fVPYao-z7VXgbsIUioQ^#()3u=;zJd$AAs!|u(OEsrnT -zTYv#i|E6Qa=LZ9}6Z>#08Lwz7`MZo?47*qcY`FZ4`&`&1Bh5;u$KEofwApi-G0W$) -zGjNT&=d>Wd(;~yCTDfljJqrSnKYls}FGT-^DF -zW@S*b&L!{R`i)9#SXAG2Wy>94013k?=U7w&R%vloqi-@MJTYai;_`QVX=MAUP25uz -zqwPSCPfYqoYl^MWJUuBtV~Vnffz+WY{)*qxdx2)2;}W77=Xiu@rpXwzrf#7hm#h(k -z@l@M2VnCjvtW2}X%V<-Sm^^(dq7okAn#{du4>>MbNme@^S#n9H59kSRzlDzmX;J=qT{M>- -zqa1A#IyO16v?snKOjxCjRE_kq5mP2O*3mub*m#qpjD$tYQR=OD#4*%7A+wF!?!l&XCGxHi=fA(D0n9YMi}95lK`Lj=C=sS!b05dYMs`P#Q+l -zA?zA!n36M0!I2IF##hC -zSY~wVBeZXN+>#cGipz~xH}-2hvlrmuYWx+F*exNvI?c>wS;iv#SQmZb-?IFIF{}Lq -zz!KcEkyJ&)-s8V^#WM!PL7_3<4;l;jBSYsQErE6BdCxbk%G#P`Ep;*H0+KI6HnP*n -zNmW}=nbqNX%$1W@n;EEdftZM@%wWk?5RX~Le`AdQs1*E!87MRr>6R@hg>x^=D?!^Z -z08=+2AWSlfzTly{2yDRHl^jTTu49t-KhBx#$c-klOnhTEjqk*FcGDP7dTTe0@5J|Z -zkulg_=0C%Wl&@DqaK_0SkH|G7W*HNG|)CBG@(V**A-QSdt;I5zt=YwY503MV-d+Q -zcPug(g_H2XH#7VKpZsB#()tEGT^R3#Y<=l}^o^ -iykRDUiltLLTXm-84B_(V%z@`0;BPIxW(IyX_WuA9Ry^|n - -literal 0 -HcmV?d00001 - -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit.go -new file mode 100644 -index 00000000000000..b43df0b67d646b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit.go -@@ -0,0 +1,8 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package cryptokit -+ -+//go:generate go run ../../cmd/mkcgo -out zcryptokit.go -package cryptokit --noerrors shims.h -+//go:generate go run ../../cmd/mkcgo -out zcryptokit.go -nocgo -package cryptokit --noerrors shims.h -+//go:generate go run ../../cmd/genswiftimports -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit_cgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit_cgo.go -new file mode 100644 -index 00000000000000..e134697ed96de7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/cryptokit_cgo.go -@@ -0,0 +1,10 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build cgo && darwin -+ -+package cryptokit -+ -+// #cgo CFLAGS: -Wno-deprecated-declarations -+// #cgo LDFLAGS: -framework Security -framework CoreFoundation -Wl,-undefined,dynamic_lookup -+import "C" -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/shims.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/shims.h -new file mode 100644 -index 00000000000000..7025a366a1513b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/shims.h -@@ -0,0 +1,127 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// This header declares the C API for the CryptoKit Swift bindings. -+// -+// It serves two purposes: -+// 1. The mkcgo tool parses it to generate cgo and Go bindings. -+// Run "go generate ." to regenerate them. -+// 2. Swift's @implementation @c validates that Swift function signatures -+// match these declarations at compile time (via cryptokit.h wrapper). -+// -+// Type conventions: -+// - Return types and length parameters use `long` (not int64_t) because -+// Swift imports `long` as `Int` and `int64_t` as `Int64`. The Swift -+// implementations use `Int`, so the header must use `long` to match. -+// On macOS (LP64), both are 64-bit. -+// - Buffer size parameters use `size_t` where the mkcgo `slice()` attribute -+// pairs them with a pointer for Go slice generation. -+// - Pointer nullability is declared via `#pragma clang assume_nonnull` -+// (guarded by __clang__) so Swift sees non-optional pointer types. -+// mkcgo parses this file as text and ignores the pragma. -+// - Custom __attribute__ annotations (noescape, nocallback, static, slice) -+// are mkcgo extensions. The cryptokit.h wrapper strips them for clang. -+// -+// Do not include this file directly; import "zcryptokit.h" instead. -+ -+// mkcgo:static_imports -+ -+#ifndef _GO_CRYPTOKIT_SHIMS_H // only include this header once -+#define _GO_CRYPTOKIT_SHIMS_H -+ -+#include -+#include -+ -+// When compiled by clang (e.g. via Swift bridging header), assume all -+// pointers are nonnull. mkcgo parses this file as text, not via clang, -+// so the #ifdef ensures mkcgo never sees these pragmas. -+#ifdef __clang__ -+#pragma clang assume_nonnull begin -+#endif -+ -+// AES GCM encryption and decryption -+long go_encryptAESGCM(const uint8_t *key, size_t keyLength, const uint8_t *data, size_t dataLength, const uint8_t *nonce, size_t nonceLength, const uint8_t *aad, size_t aadLength, uint8_t *cipherText, size_t cipherTextLength, uint8_t *tag) __attribute__((noescape, nocallback, static, slice(key, keyLength), slice(data, dataLength), slice(nonce, nonceLength), slice(aad, aadLength), slice(cipherText, cipherTextLength), slice(tag))); -+long go_decryptAESGCM(const uint8_t *key, size_t keyLength, const uint8_t *data, size_t dataLength, const uint8_t *nonce, size_t nonceLength, const uint8_t *aad, size_t aadLength, const uint8_t *tag, size_t tagLength, uint8_t *out, size_t *outLength) __attribute__((noescape, nocallback, static, slice(key, keyLength), slice(data, dataLength), slice(nonce, nonceLength), slice(aad, aadLength), slice(tag, tagLength), slice(out, outLength))); -+ -+// ChaChaPoly encryption and decryption -+long go_encryptChaChaPoly(const uint8_t *key, size_t keyLength, const uint8_t *data, size_t dataLength, const uint8_t *nonce, size_t nonceLength, const uint8_t *aad, size_t aadLength, uint8_t *cipherText, size_t cipherTextLength, uint8_t *tag) __attribute__((noescape, nocallback, static, slice(key, keyLength), slice(data, dataLength), slice(nonce, nonceLength), slice(aad, aadLength), slice(cipherText, cipherTextLength), slice(tag))); -+long go_decryptChaChaPoly(const uint8_t *key, size_t keyLength, const uint8_t *data, size_t dataLength, const uint8_t *nonce, size_t nonceLength, const uint8_t *aad, size_t aadLength, const uint8_t *tag, size_t tagLength, uint8_t *out, size_t *outLength) __attribute__((noescape, nocallback, static, slice(key, keyLength), slice(data, dataLength), slice(nonce, nonceLength), slice(aad, aadLength), slice(tag, tagLength), slice(out, outLength))); -+ -+// Generates an Ed25519 keypair. -+// The private key is 64 bytes (first 32 bytes are the seed, next 32 bytes are the public key). The public key is 32 bytes. -+void go_generateKeyEd25519(uint8_t *key) __attribute__((noescape, nocallback, static, slice(key))); -+long go_newPrivateKeyEd25519FromSeed(uint8_t *key, const uint8_t *seed) __attribute__((noescape, nocallback, static, slice(key), slice(seed))); -+long go_newPublicKeyEd25519(uint8_t *key, const uint8_t *pub) __attribute__((noescape, nocallback, static, slice(key), slice(pub))); -+long go_signEd25519(const uint8_t *privateKey, const uint8_t *message, size_t messageLength, uint8_t *sigBuffer) __attribute__((noescape, nocallback, static, slice(privateKey), slice(message, messageLength), slice(sigBuffer))); -+long go_verifyEd25519(const uint8_t *publicKey, const uint8_t *message, size_t messageLength, const uint8_t *sig) __attribute__((noescape, nocallback, static, slice(publicKey), slice(message, messageLength), slice(sig))); -+ -+// HKDF key derivation -+long go_extractHKDF(int32_t hashFunction, const uint8_t *secret, size_t secretLength, const uint8_t *salt, size_t saltLength, uint8_t *prk, size_t prkLength) __attribute__((noescape, nocallback, static, slice(secret, secretLength), slice(salt, saltLength), slice(prk, prkLength))); -+long go_expandHKDF(int32_t hashFunction, const uint8_t *prk, size_t prkLength, const uint8_t *info, size_t infoLength, uint8_t *okm, size_t okmLength) __attribute__((noescape, nocallback, static, slice(prk, prkLength), slice(info, infoLength), slice(okm, okmLength))); -+ -+void *go_initHMAC(int32_t hashFunction, const uint8_t *key, long keyLength) __attribute__((noescape, nocallback, static, slice(key, keyLength))); -+void go_freeHMAC(int32_t hashFunction, void *ptr) __attribute__((noescape, nocallback, static)); -+void go_updateHMAC(int32_t hashFunction, void *ptr, const uint8_t *data, long length) __attribute__((noescape, nocallback, static, slice(data, length))); -+void go_finalizeHMAC(int32_t hashFunction, void *ptr, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(outputPointer))); -+void *go_copyHMAC(int32_t hashAlgorithm, void *ptr) __attribute__((noescape, nocallback, static)); -+ -+void go_MD5(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+void go_SHA1(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+void go_SHA256(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+void go_SHA384(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+void go_SHA512(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+long go_supportsSHA3() __attribute__((noescape, nocallback, static)); -+void go_SHA3_256(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+void go_SHA3_384(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+void go_SHA3_512(const uint8_t *inputPointer, size_t inputLength, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(inputPointer, inputLength), slice(outputPointer))); -+ -+void *go_hashNew(int32_t hashAlgorithm) __attribute__((noescape, nocallback, static)); -+void go_hashWrite(int32_t hashAlgorithm, void *ptr, const uint8_t *data, long length) __attribute__((noescape, nocallback, static, slice(data, length))); -+void go_hashSum(int32_t hashAlgorithm, void *ptr, uint8_t *outputPointer) __attribute__((noescape, nocallback, static, slice(outputPointer))); -+void go_hashReset(int32_t hashAlgorithm, void *ptr) __attribute__((noescape, nocallback, static)); -+long go_hashSize(int32_t hashAlgorithm) __attribute__((noescape, nocallback, static)); -+long go_hashBlockSize(int32_t hashAlgorithm) __attribute__((noescape, nocallback, static)); -+void *go_hashCopy(int32_t hashAlgorithm, void *ptr) __attribute__((noescape, nocallback, static)); -+void go_hashFree(int32_t hashAlgorithm, void *ptr) __attribute__((noescape, nocallback, static)); -+ -+// ML-KEM (Post-quantum key encapsulation mechanism) -+long go_supportsMLKEM() __attribute__((noescape, nocallback, static)); -+long go_generateKeyMLKEM768(uint8_t *seed, long seedLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen))); -+long go_generateKeyMLKEM1024(uint8_t *seed, long seedLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen))); -+long go_deriveEncapsulationKeyMLKEM768(const uint8_t *seed, long seedLen, uint8_t *encapKey, long encapKeyLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(encapKey, encapKeyLen))); -+long go_deriveEncapsulationKeyMLKEM1024(const uint8_t *seed, long seedLen, uint8_t *encapKey, long encapKeyLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(encapKey, encapKeyLen))); -+long go_encapsulateMLKEM768(const uint8_t *encapKey, long encapKeyLen, uint8_t *sharedKey, long sharedKeyLen, uint8_t *ciphertext, long ciphertextLen) __attribute__((noescape, nocallback, static, slice(encapKey, encapKeyLen), slice(sharedKey, sharedKeyLen), slice(ciphertext, ciphertextLen))); -+long go_encapsulateMLKEM1024(const uint8_t *encapKey, long encapKeyLen, uint8_t *sharedKey, long sharedKeyLen, uint8_t *ciphertext, long ciphertextLen) __attribute__((noescape, nocallback, static, slice(encapKey, encapKeyLen), slice(sharedKey, sharedKeyLen), slice(ciphertext, ciphertextLen))); -+long go_decapsulateMLKEM768(const uint8_t *seed, long seedLen, const uint8_t *ciphertext, long ciphertextLen, uint8_t *sharedKey, long sharedKeyLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(ciphertext, ciphertextLen), slice(sharedKey, sharedKeyLen))); -+long go_decapsulateMLKEM1024(const uint8_t *seed, long seedLen, const uint8_t *ciphertext, long ciphertextLen, uint8_t *sharedKey, long sharedKeyLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(ciphertext, ciphertextLen), slice(sharedKey, sharedKeyLen))); -+ -+// ML-DSA (Post-quantum digital signature algorithm) -+long go_supportsMLDSA() __attribute__((noescape, nocallback, static)); -+long go_generateKeyMLDSA65(uint8_t *seed, long seedLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen))); -+long go_generateKeyMLDSA87(uint8_t *seed, long seedLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen))); -+long go_derivePublicKeyMLDSA65(const uint8_t *seed, long seedLen, uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(publicKey, publicKeyLen))); -+long go_derivePublicKeyMLDSA87(const uint8_t *seed, long seedLen, uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(publicKey, publicKeyLen))); -+long go_signMLDSA65(const uint8_t *seed, long seedLen, const uint8_t *message, long messageLen, const uint8_t *context, long contextLen, uint8_t *signature, long *signatureLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(message, messageLen), slice(context, contextLen), slice(signature, signatureLen))); -+long go_signMLDSA87(const uint8_t *seed, long seedLen, const uint8_t *message, long messageLen, const uint8_t *context, long contextLen, uint8_t *signature, long *signatureLen) __attribute__((noescape, nocallback, static, slice(seed, seedLen), slice(message, messageLen), slice(context, contextLen), slice(signature, signatureLen))); -+long go_verifyMLDSA65(const uint8_t *publicKey, long publicKeyLen, const uint8_t *message, long messageLen, const uint8_t *context, long contextLen, const uint8_t *signature, long signatureLen) __attribute__((noescape, nocallback, static, slice(publicKey, publicKeyLen), slice(message, messageLen), slice(context, contextLen), slice(signature, signatureLen))); -+long go_verifyMLDSA87(const uint8_t *publicKey, long publicKeyLen, const uint8_t *message, long messageLen, const uint8_t *context, long contextLen, const uint8_t *signature, long signatureLen) __attribute__((noescape, nocallback, static, slice(publicKey, publicKeyLen), slice(message, messageLen), slice(context, contextLen), slice(signature, signatureLen))); -+long go_validatePublicKeyMLDSA65(const uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(publicKey, publicKeyLen))); -+long go_validatePublicKeyMLDSA87(const uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(publicKey, publicKeyLen))); -+ -+// ECDH -+long go_generateKeyECDH(int32_t curveID, uint8_t *privateKey, long privateKeyLen, uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(privateKey, privateKeyLen), slice(publicKey, publicKeyLen))); -+long go_publicKeyFromPrivateECDH(int32_t curveID, const uint8_t *privateKey, long privateKeyLen, uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(privateKey, privateKeyLen), slice(publicKey, publicKeyLen))); -+long go_ecdhSharedSecret(int32_t curveID, const uint8_t *privateKey, long privateKeyLen, const uint8_t *publicKey, long publicKeyLen, uint8_t *sharedSecret, long sharedSecretLen) __attribute__((noescape, nocallback, static, slice(privateKey, privateKeyLen), slice(publicKey, publicKeyLen), slice(sharedSecret, sharedSecretLen))); -+long go_validatePrivateKeyECDH(int32_t curveID, const uint8_t *privateKey, long privateKeyLen) __attribute__((noescape, nocallback, static, slice(privateKey, privateKeyLen))); -+long go_validatePublicKeyECDH(int32_t curveID, const uint8_t *publicKey, long publicKeyLen) __attribute__((noescape, nocallback, static, slice(publicKey, publicKeyLen))); -+ -+// ECDSA -+long go_generateKeyECDSA(int32_t curveID, uint8_t *x, long xLen, uint8_t *y, long yLen, uint8_t *d, long dLen) __attribute__((noescape, nocallback, static, slice(x, xLen), slice(y, yLen), slice(d, dLen))); -+long go_ecdsaSign(int32_t curveID, const uint8_t *d, long dLen, const uint8_t *message, long messageLen, uint8_t *signature, long *signatureLen) __attribute__((noescape, nocallback, static, slice(d, dLen), slice(message, messageLen), slice(signature, signatureLen))); -+long go_ecdsaVerify(int32_t curveID, const uint8_t *x, long xLen, const uint8_t *y, long yLen, const uint8_t *message, long messageLen, const uint8_t *signature, long signatureLen) __attribute__((noescape, nocallback, static, slice(x, xLen), slice(y, yLen), slice(message, messageLen), slice(signature, signatureLen))); -+ -+#ifdef __clang__ -+#pragma clang assume_nonnull end -+#endif -+ -+#endif // _GO_CRYPTOKIT_SHIMS_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/syscall_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/syscall_nocgo.go -new file mode 100644 -index 00000000000000..c83bb8660303f6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/syscall_nocgo.go -@@ -0,0 +1,15 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package cryptokit -+ -+import ( -+ "github.com/microsoft/go-crypto-darwin/internal/xsyscall" -+) -+ -+//go:nosplit -+func syscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ return xsyscall.SyscallN(errType, fn, args...) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/xcodebuild_version.txt b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/xcodebuild_version.txt -new file mode 100644 -index 00000000000000..e96680e304c47d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/xcodebuild_version.txt -@@ -0,0 +1,2 @@ -+Xcode 26.4.1 -+Build version 17E202 -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.c b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.c -new file mode 100644 -index 00000000000000..d0d2a5bbd3475d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.c -@@ -0,0 +1,317 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#include -+#include -+#include -+#include -+#include "zcryptokit.h" -+ -+void go_MD5(const uint8_t*, size_t, uint8_t*); -+void go_SHA1(const uint8_t*, size_t, uint8_t*); -+void go_SHA256(const uint8_t*, size_t, uint8_t*); -+void go_SHA384(const uint8_t*, size_t, uint8_t*); -+void go_SHA3_256(const uint8_t*, size_t, uint8_t*); -+void go_SHA3_384(const uint8_t*, size_t, uint8_t*); -+void go_SHA3_512(const uint8_t*, size_t, uint8_t*); -+void go_SHA512(const uint8_t*, size_t, uint8_t*); -+void* go_copyHMAC(int32_t, void*); -+long go_decapsulateMLKEM1024(const uint8_t*, long, const uint8_t*, long, uint8_t*, long); -+long go_decapsulateMLKEM768(const uint8_t*, long, const uint8_t*, long, uint8_t*, long); -+long go_decryptAESGCM(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t*); -+long go_decryptChaChaPoly(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t*); -+long go_deriveEncapsulationKeyMLKEM1024(const uint8_t*, long, uint8_t*, long); -+long go_deriveEncapsulationKeyMLKEM768(const uint8_t*, long, uint8_t*, long); -+long go_derivePublicKeyMLDSA65(const uint8_t*, long, uint8_t*, long); -+long go_derivePublicKeyMLDSA87(const uint8_t*, long, uint8_t*, long); -+long go_ecdhSharedSecret(int32_t, const uint8_t*, long, const uint8_t*, long, uint8_t*, long); -+long go_ecdsaSign(int32_t, const uint8_t*, long, const uint8_t*, long, uint8_t*, long*); -+long go_ecdsaVerify(int32_t, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long); -+long go_encapsulateMLKEM1024(const uint8_t*, long, uint8_t*, long, uint8_t*, long); -+long go_encapsulateMLKEM768(const uint8_t*, long, uint8_t*, long, uint8_t*, long); -+long go_encryptAESGCM(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t, uint8_t*); -+long go_encryptChaChaPoly(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t, uint8_t*); -+long go_expandHKDF(int32_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t); -+long go_extractHKDF(int32_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t); -+void go_finalizeHMAC(int32_t, void*, uint8_t*); -+void go_freeHMAC(int32_t, void*); -+long go_generateKeyECDH(int32_t, uint8_t*, long, uint8_t*, long); -+long go_generateKeyECDSA(int32_t, uint8_t*, long, uint8_t*, long, uint8_t*, long); -+void go_generateKeyEd25519(uint8_t*); -+long go_generateKeyMLDSA65(uint8_t*, long); -+long go_generateKeyMLDSA87(uint8_t*, long); -+long go_generateKeyMLKEM1024(uint8_t*, long); -+long go_generateKeyMLKEM768(uint8_t*, long); -+long go_hashBlockSize(int32_t); -+void* go_hashCopy(int32_t, void*); -+void go_hashFree(int32_t, void*); -+void* go_hashNew(int32_t); -+void go_hashReset(int32_t, void*); -+long go_hashSize(int32_t); -+void go_hashSum(int32_t, void*, uint8_t*); -+void go_hashWrite(int32_t, void*, const uint8_t*, long); -+void* go_initHMAC(int32_t, const uint8_t*, long); -+long go_newPrivateKeyEd25519FromSeed(uint8_t*, const uint8_t*); -+long go_newPublicKeyEd25519(uint8_t*, const uint8_t*); -+long go_publicKeyFromPrivateECDH(int32_t, const uint8_t*, long, uint8_t*, long); -+long go_signEd25519(const uint8_t*, const uint8_t*, size_t, uint8_t*); -+long go_signMLDSA65(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, uint8_t*, long*); -+long go_signMLDSA87(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, uint8_t*, long*); -+long go_supportsMLDSA(void); -+long go_supportsMLKEM(void); -+long go_supportsSHA3(void); -+void go_updateHMAC(int32_t, void*, const uint8_t*, long); -+long go_validatePrivateKeyECDH(int32_t, const uint8_t*, long); -+long go_validatePublicKeyECDH(int32_t, const uint8_t*, long); -+long go_validatePublicKeyMLDSA65(const uint8_t*, long); -+long go_validatePublicKeyMLDSA87(const uint8_t*, long); -+long go_verifyEd25519(const uint8_t*, const uint8_t*, size_t, const uint8_t*); -+long go_verifyMLDSA65(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long); -+long go_verifyMLDSA87(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long); -+ -+void _mkcgo_go_MD5(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_MD5(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA1(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA1(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA256(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA256(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA384(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA384(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA3_256(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA3_256(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA3_384(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA3_384(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA3_512(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA3_512(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_SHA512(const uint8_t* _arg0, size_t _arg1, uint8_t* _arg2) { -+ go_SHA512(_arg0, _arg1, _arg2); -+} -+ -+void* _mkcgo_go_copyHMAC(int32_t _arg0, void* _arg1) { -+ return go_copyHMAC(_arg0, _arg1); -+} -+ -+long _mkcgo_go_decapsulateMLKEM1024(const uint8_t* _arg0, long _arg1, const uint8_t* _arg2, long _arg3, uint8_t* _arg4, long _arg5) { -+ return go_decapsulateMLKEM1024(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+} -+ -+long _mkcgo_go_decapsulateMLKEM768(const uint8_t* _arg0, long _arg1, const uint8_t* _arg2, long _arg3, uint8_t* _arg4, long _arg5) { -+ return go_decapsulateMLKEM768(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+} -+ -+long _mkcgo_go_decryptAESGCM(const uint8_t* _arg0, size_t _arg1, const uint8_t* _arg2, size_t _arg3, const uint8_t* _arg4, size_t _arg5, const uint8_t* _arg6, size_t _arg7, const uint8_t* _arg8, size_t _arg9, uint8_t* _arg10, size_t* _arg11) { -+ return go_decryptAESGCM(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11); -+} -+ -+long _mkcgo_go_decryptChaChaPoly(const uint8_t* _arg0, size_t _arg1, const uint8_t* _arg2, size_t _arg3, const uint8_t* _arg4, size_t _arg5, const uint8_t* _arg6, size_t _arg7, const uint8_t* _arg8, size_t _arg9, uint8_t* _arg10, size_t* _arg11) { -+ return go_decryptChaChaPoly(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11); -+} -+ -+long _mkcgo_go_deriveEncapsulationKeyMLKEM1024(const uint8_t* _arg0, long _arg1, uint8_t* _arg2, long _arg3) { -+ return go_deriveEncapsulationKeyMLKEM1024(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_deriveEncapsulationKeyMLKEM768(const uint8_t* _arg0, long _arg1, uint8_t* _arg2, long _arg3) { -+ return go_deriveEncapsulationKeyMLKEM768(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_derivePublicKeyMLDSA65(const uint8_t* _arg0, long _arg1, uint8_t* _arg2, long _arg3) { -+ return go_derivePublicKeyMLDSA65(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_derivePublicKeyMLDSA87(const uint8_t* _arg0, long _arg1, uint8_t* _arg2, long _arg3) { -+ return go_derivePublicKeyMLDSA87(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_ecdhSharedSecret(int32_t _arg0, const uint8_t* _arg1, long _arg2, const uint8_t* _arg3, long _arg4, uint8_t* _arg5, long _arg6) { -+ return go_ecdhSharedSecret(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6); -+} -+ -+long _mkcgo_go_ecdsaSign(int32_t _arg0, const uint8_t* _arg1, long _arg2, const uint8_t* _arg3, long _arg4, uint8_t* _arg5, long* _arg6) { -+ return go_ecdsaSign(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6); -+} -+ -+long _mkcgo_go_ecdsaVerify(int32_t _arg0, const uint8_t* _arg1, long _arg2, const uint8_t* _arg3, long _arg4, const uint8_t* _arg5, long _arg6, const uint8_t* _arg7, long _arg8) { -+ return go_ecdsaVerify(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8); -+} -+ -+long _mkcgo_go_encapsulateMLKEM1024(const uint8_t* _arg0, long _arg1, uint8_t* _arg2, long _arg3, uint8_t* _arg4, long _arg5) { -+ return go_encapsulateMLKEM1024(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+} -+ -+long _mkcgo_go_encapsulateMLKEM768(const uint8_t* _arg0, long _arg1, uint8_t* _arg2, long _arg3, uint8_t* _arg4, long _arg5) { -+ return go_encapsulateMLKEM768(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+} -+ -+long _mkcgo_go_encryptAESGCM(const uint8_t* _arg0, size_t _arg1, const uint8_t* _arg2, size_t _arg3, const uint8_t* _arg4, size_t _arg5, const uint8_t* _arg6, size_t _arg7, uint8_t* _arg8, size_t _arg9, uint8_t* _arg10) { -+ return go_encryptAESGCM(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10); -+} -+ -+long _mkcgo_go_encryptChaChaPoly(const uint8_t* _arg0, size_t _arg1, const uint8_t* _arg2, size_t _arg3, const uint8_t* _arg4, size_t _arg5, const uint8_t* _arg6, size_t _arg7, uint8_t* _arg8, size_t _arg9, uint8_t* _arg10) { -+ return go_encryptChaChaPoly(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10); -+} -+ -+long _mkcgo_go_expandHKDF(int32_t _arg0, const uint8_t* _arg1, size_t _arg2, const uint8_t* _arg3, size_t _arg4, uint8_t* _arg5, size_t _arg6) { -+ return go_expandHKDF(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6); -+} -+ -+long _mkcgo_go_extractHKDF(int32_t _arg0, const uint8_t* _arg1, size_t _arg2, const uint8_t* _arg3, size_t _arg4, uint8_t* _arg5, size_t _arg6) { -+ return go_extractHKDF(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6); -+} -+ -+void _mkcgo_go_finalizeHMAC(int32_t _arg0, void* _arg1, uint8_t* _arg2) { -+ go_finalizeHMAC(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_freeHMAC(int32_t _arg0, void* _arg1) { -+ go_freeHMAC(_arg0, _arg1); -+} -+ -+long _mkcgo_go_generateKeyECDH(int32_t _arg0, uint8_t* _arg1, long _arg2, uint8_t* _arg3, long _arg4) { -+ return go_generateKeyECDH(_arg0, _arg1, _arg2, _arg3, _arg4); -+} -+ -+long _mkcgo_go_generateKeyECDSA(int32_t _arg0, uint8_t* _arg1, long _arg2, uint8_t* _arg3, long _arg4, uint8_t* _arg5, long _arg6) { -+ return go_generateKeyECDSA(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6); -+} -+ -+void _mkcgo_go_generateKeyEd25519(uint8_t* _arg0) { -+ go_generateKeyEd25519(_arg0); -+} -+ -+long _mkcgo_go_generateKeyMLDSA65(uint8_t* _arg0, long _arg1) { -+ return go_generateKeyMLDSA65(_arg0, _arg1); -+} -+ -+long _mkcgo_go_generateKeyMLDSA87(uint8_t* _arg0, long _arg1) { -+ return go_generateKeyMLDSA87(_arg0, _arg1); -+} -+ -+long _mkcgo_go_generateKeyMLKEM1024(uint8_t* _arg0, long _arg1) { -+ return go_generateKeyMLKEM1024(_arg0, _arg1); -+} -+ -+long _mkcgo_go_generateKeyMLKEM768(uint8_t* _arg0, long _arg1) { -+ return go_generateKeyMLKEM768(_arg0, _arg1); -+} -+ -+long _mkcgo_go_hashBlockSize(int32_t _arg0) { -+ return go_hashBlockSize(_arg0); -+} -+ -+void* _mkcgo_go_hashCopy(int32_t _arg0, void* _arg1) { -+ return go_hashCopy(_arg0, _arg1); -+} -+ -+void _mkcgo_go_hashFree(int32_t _arg0, void* _arg1) { -+ go_hashFree(_arg0, _arg1); -+} -+ -+void* _mkcgo_go_hashNew(int32_t _arg0) { -+ return go_hashNew(_arg0); -+} -+ -+void _mkcgo_go_hashReset(int32_t _arg0, void* _arg1) { -+ go_hashReset(_arg0, _arg1); -+} -+ -+long _mkcgo_go_hashSize(int32_t _arg0) { -+ return go_hashSize(_arg0); -+} -+ -+void _mkcgo_go_hashSum(int32_t _arg0, void* _arg1, uint8_t* _arg2) { -+ go_hashSum(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_go_hashWrite(int32_t _arg0, void* _arg1, const uint8_t* _arg2, long _arg3) { -+ go_hashWrite(_arg0, _arg1, _arg2, _arg3); -+} -+ -+void* _mkcgo_go_initHMAC(int32_t _arg0, const uint8_t* _arg1, long _arg2) { -+ return go_initHMAC(_arg0, _arg1, _arg2); -+} -+ -+long _mkcgo_go_newPrivateKeyEd25519FromSeed(uint8_t* _arg0, const uint8_t* _arg1) { -+ return go_newPrivateKeyEd25519FromSeed(_arg0, _arg1); -+} -+ -+long _mkcgo_go_newPublicKeyEd25519(uint8_t* _arg0, const uint8_t* _arg1) { -+ return go_newPublicKeyEd25519(_arg0, _arg1); -+} -+ -+long _mkcgo_go_publicKeyFromPrivateECDH(int32_t _arg0, const uint8_t* _arg1, long _arg2, uint8_t* _arg3, long _arg4) { -+ return go_publicKeyFromPrivateECDH(_arg0, _arg1, _arg2, _arg3, _arg4); -+} -+ -+long _mkcgo_go_signEd25519(const uint8_t* _arg0, const uint8_t* _arg1, size_t _arg2, uint8_t* _arg3) { -+ return go_signEd25519(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_signMLDSA65(const uint8_t* _arg0, long _arg1, const uint8_t* _arg2, long _arg3, const uint8_t* _arg4, long _arg5, uint8_t* _arg6, long* _arg7) { -+ return go_signMLDSA65(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7); -+} -+ -+long _mkcgo_go_signMLDSA87(const uint8_t* _arg0, long _arg1, const uint8_t* _arg2, long _arg3, const uint8_t* _arg4, long _arg5, uint8_t* _arg6, long* _arg7) { -+ return go_signMLDSA87(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7); -+} -+ -+long _mkcgo_go_supportsMLDSA(void) { -+ return go_supportsMLDSA(); -+} -+ -+long _mkcgo_go_supportsMLKEM(void) { -+ return go_supportsMLKEM(); -+} -+ -+long _mkcgo_go_supportsSHA3(void) { -+ return go_supportsSHA3(); -+} -+ -+void _mkcgo_go_updateHMAC(int32_t _arg0, void* _arg1, const uint8_t* _arg2, long _arg3) { -+ go_updateHMAC(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_validatePrivateKeyECDH(int32_t _arg0, const uint8_t* _arg1, long _arg2) { -+ return go_validatePrivateKeyECDH(_arg0, _arg1, _arg2); -+} -+ -+long _mkcgo_go_validatePublicKeyECDH(int32_t _arg0, const uint8_t* _arg1, long _arg2) { -+ return go_validatePublicKeyECDH(_arg0, _arg1, _arg2); -+} -+ -+long _mkcgo_go_validatePublicKeyMLDSA65(const uint8_t* _arg0, long _arg1) { -+ return go_validatePublicKeyMLDSA65(_arg0, _arg1); -+} -+ -+long _mkcgo_go_validatePublicKeyMLDSA87(const uint8_t* _arg0, long _arg1) { -+ return go_validatePublicKeyMLDSA87(_arg0, _arg1); -+} -+ -+long _mkcgo_go_verifyEd25519(const uint8_t* _arg0, const uint8_t* _arg1, size_t _arg2, const uint8_t* _arg3) { -+ return go_verifyEd25519(_arg0, _arg1, _arg2, _arg3); -+} -+ -+long _mkcgo_go_verifyMLDSA65(const uint8_t* _arg0, long _arg1, const uint8_t* _arg2, long _arg3, const uint8_t* _arg4, long _arg5, const uint8_t* _arg6, long _arg7) { -+ return go_verifyMLDSA65(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7); -+} -+ -+long _mkcgo_go_verifyMLDSA87(const uint8_t* _arg0, long _arg1, const uint8_t* _arg2, long _arg3, const uint8_t* _arg4, long _arg5, const uint8_t* _arg6, long _arg7) { -+ return go_verifyMLDSA87(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7); -+} -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.h -new file mode 100644 -index 00000000000000..f933f59c3013da ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.h -@@ -0,0 +1,77 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#ifndef MKCGO_H // only include this header once -+#define MKCGO_H -+ -+#include -+#include -+ -+ -+uintptr_t mkcgo_err_retrieve(); -+ -+void _mkcgo_go_MD5(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA1(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA256(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA384(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA3_256(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA3_384(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA3_512(const uint8_t*, size_t, uint8_t*); -+void _mkcgo_go_SHA512(const uint8_t*, size_t, uint8_t*); -+void* _mkcgo_go_copyHMAC(int32_t, void*); -+long _mkcgo_go_decapsulateMLKEM1024(const uint8_t*, long, const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_decapsulateMLKEM768(const uint8_t*, long, const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_decryptAESGCM(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t*); -+long _mkcgo_go_decryptChaChaPoly(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t*); -+long _mkcgo_go_deriveEncapsulationKeyMLKEM1024(const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_deriveEncapsulationKeyMLKEM768(const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_derivePublicKeyMLDSA65(const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_derivePublicKeyMLDSA87(const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_ecdhSharedSecret(int32_t, const uint8_t*, long, const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_ecdsaSign(int32_t, const uint8_t*, long, const uint8_t*, long, uint8_t*, long*); -+long _mkcgo_go_ecdsaVerify(int32_t, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long); -+long _mkcgo_go_encapsulateMLKEM1024(const uint8_t*, long, uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_encapsulateMLKEM768(const uint8_t*, long, uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_encryptAESGCM(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t, uint8_t*); -+long _mkcgo_go_encryptChaChaPoly(const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t, uint8_t*); -+long _mkcgo_go_expandHKDF(int32_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t); -+long _mkcgo_go_extractHKDF(int32_t, const uint8_t*, size_t, const uint8_t*, size_t, uint8_t*, size_t); -+void _mkcgo_go_finalizeHMAC(int32_t, void*, uint8_t*); -+void _mkcgo_go_freeHMAC(int32_t, void*); -+long _mkcgo_go_generateKeyECDH(int32_t, uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_generateKeyECDSA(int32_t, uint8_t*, long, uint8_t*, long, uint8_t*, long); -+void _mkcgo_go_generateKeyEd25519(uint8_t*); -+long _mkcgo_go_generateKeyMLDSA65(uint8_t*, long); -+long _mkcgo_go_generateKeyMLDSA87(uint8_t*, long); -+long _mkcgo_go_generateKeyMLKEM1024(uint8_t*, long); -+long _mkcgo_go_generateKeyMLKEM768(uint8_t*, long); -+long _mkcgo_go_hashBlockSize(int32_t); -+void* _mkcgo_go_hashCopy(int32_t, void*); -+void _mkcgo_go_hashFree(int32_t, void*); -+void* _mkcgo_go_hashNew(int32_t); -+void _mkcgo_go_hashReset(int32_t, void*); -+long _mkcgo_go_hashSize(int32_t); -+void _mkcgo_go_hashSum(int32_t, void*, uint8_t*); -+void _mkcgo_go_hashWrite(int32_t, void*, const uint8_t*, long); -+void* _mkcgo_go_initHMAC(int32_t, const uint8_t*, long); -+long _mkcgo_go_newPrivateKeyEd25519FromSeed(uint8_t*, const uint8_t*); -+long _mkcgo_go_newPublicKeyEd25519(uint8_t*, const uint8_t*); -+long _mkcgo_go_publicKeyFromPrivateECDH(int32_t, const uint8_t*, long, uint8_t*, long); -+long _mkcgo_go_signEd25519(const uint8_t*, const uint8_t*, size_t, uint8_t*); -+long _mkcgo_go_signMLDSA65(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, uint8_t*, long*); -+long _mkcgo_go_signMLDSA87(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, uint8_t*, long*); -+long _mkcgo_go_supportsMLDSA(void); -+long _mkcgo_go_supportsMLKEM(void); -+long _mkcgo_go_supportsSHA3(void); -+void _mkcgo_go_updateHMAC(int32_t, void*, const uint8_t*, long); -+long _mkcgo_go_validatePrivateKeyECDH(int32_t, const uint8_t*, long); -+long _mkcgo_go_validatePublicKeyECDH(int32_t, const uint8_t*, long); -+long _mkcgo_go_validatePublicKeyMLDSA65(const uint8_t*, long); -+long _mkcgo_go_validatePublicKeyMLDSA87(const uint8_t*, long); -+long _mkcgo_go_verifyEd25519(const uint8_t*, const uint8_t*, size_t, const uint8_t*); -+long _mkcgo_go_verifyMLDSA65(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long); -+long _mkcgo_go_verifyMLDSA87(const uint8_t*, long, const uint8_t*, long, const uint8_t*, long, const uint8_t*, long); -+ -+#endif // MKCGO_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.s -new file mode 100644 -index 00000000000000..5be36f4b35dedb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit.s -@@ -0,0 +1,400 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+#ifndef GOARCH_amd64 -+#ifndef GOARCH_arm64 -+#ifndef GOARCH_riscv64 -+#ifndef GOARCH_loong64 -+#ifndef GOARCH_mips64 -+#ifndef GOARCH_mips64le -+#ifndef GOARCH_ppc64 -+#ifndef GOARCH_ppc64le -+#ifndef GOARCH_s390x -+#ifndef GOARCH_sparc64 -+#define _GOPTRSIZE 4 -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+ -+#ifndef _GOPTRSIZE -+#define _GOPTRSIZE 8 -+#endif -+TEXT _mkcgo_go_MD5_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_MD5(SB) -+ -+GLOBL ·_mkcgo_go_MD5_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_MD5_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_MD5_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA1_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA1(SB) -+ -+GLOBL ·_mkcgo_go_SHA1_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA1_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA1_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA256_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA256(SB) -+ -+GLOBL ·_mkcgo_go_SHA256_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA256_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA256_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA384_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA384(SB) -+ -+GLOBL ·_mkcgo_go_SHA384_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA384_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA384_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA3_256_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA3_256(SB) -+ -+GLOBL ·_mkcgo_go_SHA3_256_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA3_256_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA3_256_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA3_384_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA3_384(SB) -+ -+GLOBL ·_mkcgo_go_SHA3_384_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA3_384_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA3_384_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA3_512_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA3_512(SB) -+ -+GLOBL ·_mkcgo_go_SHA3_512_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA3_512_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA3_512_trampoline<>(SB) -+ -+TEXT _mkcgo_go_SHA512_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_SHA512(SB) -+ -+GLOBL ·_mkcgo_go_SHA512_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_SHA512_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_SHA512_trampoline<>(SB) -+ -+TEXT _mkcgo_go_copyHMAC_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_copyHMAC(SB) -+ -+GLOBL ·_mkcgo_go_copyHMAC_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_copyHMAC_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_copyHMAC_trampoline<>(SB) -+ -+TEXT _mkcgo_go_decapsulateMLKEM1024_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_decapsulateMLKEM1024(SB) -+ -+GLOBL ·_mkcgo_go_decapsulateMLKEM1024_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_decapsulateMLKEM1024_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_decapsulateMLKEM1024_trampoline<>(SB) -+ -+TEXT _mkcgo_go_decapsulateMLKEM768_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_decapsulateMLKEM768(SB) -+ -+GLOBL ·_mkcgo_go_decapsulateMLKEM768_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_decapsulateMLKEM768_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_decapsulateMLKEM768_trampoline<>(SB) -+ -+TEXT _mkcgo_go_decryptAESGCM_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_decryptAESGCM(SB) -+ -+GLOBL ·_mkcgo_go_decryptAESGCM_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_decryptAESGCM_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_decryptAESGCM_trampoline<>(SB) -+ -+TEXT _mkcgo_go_decryptChaChaPoly_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_decryptChaChaPoly(SB) -+ -+GLOBL ·_mkcgo_go_decryptChaChaPoly_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_decryptChaChaPoly_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_decryptChaChaPoly_trampoline<>(SB) -+ -+TEXT _mkcgo_go_deriveEncapsulationKeyMLKEM1024_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_deriveEncapsulationKeyMLKEM1024(SB) -+ -+GLOBL ·_mkcgo_go_deriveEncapsulationKeyMLKEM1024_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_deriveEncapsulationKeyMLKEM1024_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_deriveEncapsulationKeyMLKEM1024_trampoline<>(SB) -+ -+TEXT _mkcgo_go_deriveEncapsulationKeyMLKEM768_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_deriveEncapsulationKeyMLKEM768(SB) -+ -+GLOBL ·_mkcgo_go_deriveEncapsulationKeyMLKEM768_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_deriveEncapsulationKeyMLKEM768_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_deriveEncapsulationKeyMLKEM768_trampoline<>(SB) -+ -+TEXT _mkcgo_go_derivePublicKeyMLDSA65_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_derivePublicKeyMLDSA65(SB) -+ -+GLOBL ·_mkcgo_go_derivePublicKeyMLDSA65_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_derivePublicKeyMLDSA65_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_derivePublicKeyMLDSA65_trampoline<>(SB) -+ -+TEXT _mkcgo_go_derivePublicKeyMLDSA87_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_derivePublicKeyMLDSA87(SB) -+ -+GLOBL ·_mkcgo_go_derivePublicKeyMLDSA87_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_derivePublicKeyMLDSA87_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_derivePublicKeyMLDSA87_trampoline<>(SB) -+ -+TEXT _mkcgo_go_ecdhSharedSecret_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_ecdhSharedSecret(SB) -+ -+GLOBL ·_mkcgo_go_ecdhSharedSecret_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_ecdhSharedSecret_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_ecdhSharedSecret_trampoline<>(SB) -+ -+TEXT _mkcgo_go_ecdsaSign_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_ecdsaSign(SB) -+ -+GLOBL ·_mkcgo_go_ecdsaSign_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_ecdsaSign_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_ecdsaSign_trampoline<>(SB) -+ -+TEXT _mkcgo_go_ecdsaVerify_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_ecdsaVerify(SB) -+ -+GLOBL ·_mkcgo_go_ecdsaVerify_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_ecdsaVerify_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_ecdsaVerify_trampoline<>(SB) -+ -+TEXT _mkcgo_go_encapsulateMLKEM1024_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_encapsulateMLKEM1024(SB) -+ -+GLOBL ·_mkcgo_go_encapsulateMLKEM1024_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_encapsulateMLKEM1024_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_encapsulateMLKEM1024_trampoline<>(SB) -+ -+TEXT _mkcgo_go_encapsulateMLKEM768_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_encapsulateMLKEM768(SB) -+ -+GLOBL ·_mkcgo_go_encapsulateMLKEM768_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_encapsulateMLKEM768_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_encapsulateMLKEM768_trampoline<>(SB) -+ -+TEXT _mkcgo_go_encryptAESGCM_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_encryptAESGCM(SB) -+ -+GLOBL ·_mkcgo_go_encryptAESGCM_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_encryptAESGCM_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_encryptAESGCM_trampoline<>(SB) -+ -+TEXT _mkcgo_go_encryptChaChaPoly_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_encryptChaChaPoly(SB) -+ -+GLOBL ·_mkcgo_go_encryptChaChaPoly_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_encryptChaChaPoly_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_encryptChaChaPoly_trampoline<>(SB) -+ -+TEXT _mkcgo_go_expandHKDF_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_expandHKDF(SB) -+ -+GLOBL ·_mkcgo_go_expandHKDF_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_expandHKDF_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_expandHKDF_trampoline<>(SB) -+ -+TEXT _mkcgo_go_extractHKDF_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_extractHKDF(SB) -+ -+GLOBL ·_mkcgo_go_extractHKDF_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_extractHKDF_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_extractHKDF_trampoline<>(SB) -+ -+TEXT _mkcgo_go_finalizeHMAC_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_finalizeHMAC(SB) -+ -+GLOBL ·_mkcgo_go_finalizeHMAC_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_finalizeHMAC_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_finalizeHMAC_trampoline<>(SB) -+ -+TEXT _mkcgo_go_freeHMAC_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_freeHMAC(SB) -+ -+GLOBL ·_mkcgo_go_freeHMAC_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_freeHMAC_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_freeHMAC_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyECDH_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyECDH(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyECDH_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyECDH_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyECDH_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyECDSA_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyECDSA(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyECDSA_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyECDSA_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyECDSA_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyEd25519_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyEd25519(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyEd25519_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyEd25519_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyEd25519_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyMLDSA65_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyMLDSA65(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyMLDSA65_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyMLDSA65_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyMLDSA65_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyMLDSA87_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyMLDSA87(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyMLDSA87_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyMLDSA87_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyMLDSA87_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyMLKEM1024_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyMLKEM1024(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyMLKEM1024_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyMLKEM1024_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyMLKEM1024_trampoline<>(SB) -+ -+TEXT _mkcgo_go_generateKeyMLKEM768_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_generateKeyMLKEM768(SB) -+ -+GLOBL ·_mkcgo_go_generateKeyMLKEM768_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_generateKeyMLKEM768_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_generateKeyMLKEM768_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashBlockSize_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashBlockSize(SB) -+ -+GLOBL ·_mkcgo_go_hashBlockSize_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashBlockSize_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashBlockSize_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashCopy_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashCopy(SB) -+ -+GLOBL ·_mkcgo_go_hashCopy_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashCopy_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashCopy_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashFree_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashFree(SB) -+ -+GLOBL ·_mkcgo_go_hashFree_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashFree_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashFree_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashNew_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashNew(SB) -+ -+GLOBL ·_mkcgo_go_hashNew_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashNew_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashNew_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashReset_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashReset(SB) -+ -+GLOBL ·_mkcgo_go_hashReset_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashReset_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashReset_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashSize_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashSize(SB) -+ -+GLOBL ·_mkcgo_go_hashSize_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashSize_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashSize_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashSum_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashSum(SB) -+ -+GLOBL ·_mkcgo_go_hashSum_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashSum_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashSum_trampoline<>(SB) -+ -+TEXT _mkcgo_go_hashWrite_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_hashWrite(SB) -+ -+GLOBL ·_mkcgo_go_hashWrite_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_hashWrite_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_hashWrite_trampoline<>(SB) -+ -+TEXT _mkcgo_go_initHMAC_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_initHMAC(SB) -+ -+GLOBL ·_mkcgo_go_initHMAC_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_initHMAC_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_initHMAC_trampoline<>(SB) -+ -+TEXT _mkcgo_go_newPrivateKeyEd25519FromSeed_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_newPrivateKeyEd25519FromSeed(SB) -+ -+GLOBL ·_mkcgo_go_newPrivateKeyEd25519FromSeed_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_newPrivateKeyEd25519FromSeed_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_newPrivateKeyEd25519FromSeed_trampoline<>(SB) -+ -+TEXT _mkcgo_go_newPublicKeyEd25519_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_newPublicKeyEd25519(SB) -+ -+GLOBL ·_mkcgo_go_newPublicKeyEd25519_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_newPublicKeyEd25519_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_newPublicKeyEd25519_trampoline<>(SB) -+ -+TEXT _mkcgo_go_publicKeyFromPrivateECDH_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_publicKeyFromPrivateECDH(SB) -+ -+GLOBL ·_mkcgo_go_publicKeyFromPrivateECDH_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_publicKeyFromPrivateECDH_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_publicKeyFromPrivateECDH_trampoline<>(SB) -+ -+TEXT _mkcgo_go_signEd25519_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_signEd25519(SB) -+ -+GLOBL ·_mkcgo_go_signEd25519_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_signEd25519_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_signEd25519_trampoline<>(SB) -+ -+TEXT _mkcgo_go_signMLDSA65_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_signMLDSA65(SB) -+ -+GLOBL ·_mkcgo_go_signMLDSA65_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_signMLDSA65_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_signMLDSA65_trampoline<>(SB) -+ -+TEXT _mkcgo_go_signMLDSA87_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_signMLDSA87(SB) -+ -+GLOBL ·_mkcgo_go_signMLDSA87_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_signMLDSA87_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_signMLDSA87_trampoline<>(SB) -+ -+TEXT _mkcgo_go_supportsMLDSA_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_supportsMLDSA(SB) -+ -+GLOBL ·_mkcgo_go_supportsMLDSA_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_supportsMLDSA_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_supportsMLDSA_trampoline<>(SB) -+ -+TEXT _mkcgo_go_supportsMLKEM_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_supportsMLKEM(SB) -+ -+GLOBL ·_mkcgo_go_supportsMLKEM_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_supportsMLKEM_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_supportsMLKEM_trampoline<>(SB) -+ -+TEXT _mkcgo_go_supportsSHA3_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_supportsSHA3(SB) -+ -+GLOBL ·_mkcgo_go_supportsSHA3_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_supportsSHA3_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_supportsSHA3_trampoline<>(SB) -+ -+TEXT _mkcgo_go_updateHMAC_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_updateHMAC(SB) -+ -+GLOBL ·_mkcgo_go_updateHMAC_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_updateHMAC_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_updateHMAC_trampoline<>(SB) -+ -+TEXT _mkcgo_go_validatePrivateKeyECDH_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_validatePrivateKeyECDH(SB) -+ -+GLOBL ·_mkcgo_go_validatePrivateKeyECDH_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_validatePrivateKeyECDH_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_validatePrivateKeyECDH_trampoline<>(SB) -+ -+TEXT _mkcgo_go_validatePublicKeyECDH_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_validatePublicKeyECDH(SB) -+ -+GLOBL ·_mkcgo_go_validatePublicKeyECDH_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_validatePublicKeyECDH_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_validatePublicKeyECDH_trampoline<>(SB) -+ -+TEXT _mkcgo_go_validatePublicKeyMLDSA65_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_validatePublicKeyMLDSA65(SB) -+ -+GLOBL ·_mkcgo_go_validatePublicKeyMLDSA65_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_validatePublicKeyMLDSA65_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_validatePublicKeyMLDSA65_trampoline<>(SB) -+ -+TEXT _mkcgo_go_validatePublicKeyMLDSA87_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_validatePublicKeyMLDSA87(SB) -+ -+GLOBL ·_mkcgo_go_validatePublicKeyMLDSA87_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_validatePublicKeyMLDSA87_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_validatePublicKeyMLDSA87_trampoline<>(SB) -+ -+TEXT _mkcgo_go_verifyEd25519_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_verifyEd25519(SB) -+ -+GLOBL ·_mkcgo_go_verifyEd25519_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_verifyEd25519_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_verifyEd25519_trampoline<>(SB) -+ -+TEXT _mkcgo_go_verifyMLDSA65_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_verifyMLDSA65(SB) -+ -+GLOBL ·_mkcgo_go_verifyMLDSA65_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_verifyMLDSA65_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_verifyMLDSA65_trampoline<>(SB) -+ -+TEXT _mkcgo_go_verifyMLDSA87_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_go_verifyMLDSA87(SB) -+ -+GLOBL ·_mkcgo_go_verifyMLDSA87_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_go_verifyMLDSA87_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_go_verifyMLDSA87_trampoline<>(SB) -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_cgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_cgo.go -new file mode 100644 -index 00000000000000..5bd022affd7811 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_cgo.go -@@ -0,0 +1,401 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package cryptokit -+ -+/* -+#cgo CFLAGS: -Wno-attributes -+ -+#include "zcryptokit.h" -+#cgo noescape _mkcgo_go_MD5 -+#cgo nocallback _mkcgo_go_MD5 -+#cgo noescape _mkcgo_go_SHA1 -+#cgo nocallback _mkcgo_go_SHA1 -+#cgo noescape _mkcgo_go_SHA256 -+#cgo nocallback _mkcgo_go_SHA256 -+#cgo noescape _mkcgo_go_SHA384 -+#cgo nocallback _mkcgo_go_SHA384 -+#cgo noescape _mkcgo_go_SHA3_256 -+#cgo nocallback _mkcgo_go_SHA3_256 -+#cgo noescape _mkcgo_go_SHA3_384 -+#cgo nocallback _mkcgo_go_SHA3_384 -+#cgo noescape _mkcgo_go_SHA3_512 -+#cgo nocallback _mkcgo_go_SHA3_512 -+#cgo noescape _mkcgo_go_SHA512 -+#cgo nocallback _mkcgo_go_SHA512 -+#cgo noescape _mkcgo_go_copyHMAC -+#cgo nocallback _mkcgo_go_copyHMAC -+#cgo noescape _mkcgo_go_decapsulateMLKEM1024 -+#cgo nocallback _mkcgo_go_decapsulateMLKEM1024 -+#cgo noescape _mkcgo_go_decapsulateMLKEM768 -+#cgo nocallback _mkcgo_go_decapsulateMLKEM768 -+#cgo noescape _mkcgo_go_decryptAESGCM -+#cgo nocallback _mkcgo_go_decryptAESGCM -+#cgo noescape _mkcgo_go_decryptChaChaPoly -+#cgo nocallback _mkcgo_go_decryptChaChaPoly -+#cgo noescape _mkcgo_go_deriveEncapsulationKeyMLKEM1024 -+#cgo nocallback _mkcgo_go_deriveEncapsulationKeyMLKEM1024 -+#cgo noescape _mkcgo_go_deriveEncapsulationKeyMLKEM768 -+#cgo nocallback _mkcgo_go_deriveEncapsulationKeyMLKEM768 -+#cgo noescape _mkcgo_go_derivePublicKeyMLDSA65 -+#cgo nocallback _mkcgo_go_derivePublicKeyMLDSA65 -+#cgo noescape _mkcgo_go_derivePublicKeyMLDSA87 -+#cgo nocallback _mkcgo_go_derivePublicKeyMLDSA87 -+#cgo noescape _mkcgo_go_ecdhSharedSecret -+#cgo nocallback _mkcgo_go_ecdhSharedSecret -+#cgo noescape _mkcgo_go_ecdsaSign -+#cgo nocallback _mkcgo_go_ecdsaSign -+#cgo noescape _mkcgo_go_ecdsaVerify -+#cgo nocallback _mkcgo_go_ecdsaVerify -+#cgo noescape _mkcgo_go_encapsulateMLKEM1024 -+#cgo nocallback _mkcgo_go_encapsulateMLKEM1024 -+#cgo noescape _mkcgo_go_encapsulateMLKEM768 -+#cgo nocallback _mkcgo_go_encapsulateMLKEM768 -+#cgo noescape _mkcgo_go_encryptAESGCM -+#cgo nocallback _mkcgo_go_encryptAESGCM -+#cgo noescape _mkcgo_go_encryptChaChaPoly -+#cgo nocallback _mkcgo_go_encryptChaChaPoly -+#cgo noescape _mkcgo_go_expandHKDF -+#cgo nocallback _mkcgo_go_expandHKDF -+#cgo noescape _mkcgo_go_extractHKDF -+#cgo nocallback _mkcgo_go_extractHKDF -+#cgo noescape _mkcgo_go_finalizeHMAC -+#cgo nocallback _mkcgo_go_finalizeHMAC -+#cgo noescape _mkcgo_go_freeHMAC -+#cgo nocallback _mkcgo_go_freeHMAC -+#cgo noescape _mkcgo_go_generateKeyECDH -+#cgo nocallback _mkcgo_go_generateKeyECDH -+#cgo noescape _mkcgo_go_generateKeyECDSA -+#cgo nocallback _mkcgo_go_generateKeyECDSA -+#cgo noescape _mkcgo_go_generateKeyEd25519 -+#cgo nocallback _mkcgo_go_generateKeyEd25519 -+#cgo noescape _mkcgo_go_generateKeyMLDSA65 -+#cgo nocallback _mkcgo_go_generateKeyMLDSA65 -+#cgo noescape _mkcgo_go_generateKeyMLDSA87 -+#cgo nocallback _mkcgo_go_generateKeyMLDSA87 -+#cgo noescape _mkcgo_go_generateKeyMLKEM1024 -+#cgo nocallback _mkcgo_go_generateKeyMLKEM1024 -+#cgo noescape _mkcgo_go_generateKeyMLKEM768 -+#cgo nocallback _mkcgo_go_generateKeyMLKEM768 -+#cgo noescape _mkcgo_go_hashBlockSize -+#cgo nocallback _mkcgo_go_hashBlockSize -+#cgo noescape _mkcgo_go_hashCopy -+#cgo nocallback _mkcgo_go_hashCopy -+#cgo noescape _mkcgo_go_hashFree -+#cgo nocallback _mkcgo_go_hashFree -+#cgo noescape _mkcgo_go_hashNew -+#cgo nocallback _mkcgo_go_hashNew -+#cgo noescape _mkcgo_go_hashReset -+#cgo nocallback _mkcgo_go_hashReset -+#cgo noescape _mkcgo_go_hashSize -+#cgo nocallback _mkcgo_go_hashSize -+#cgo noescape _mkcgo_go_hashSum -+#cgo nocallback _mkcgo_go_hashSum -+#cgo noescape _mkcgo_go_hashWrite -+#cgo nocallback _mkcgo_go_hashWrite -+#cgo noescape _mkcgo_go_initHMAC -+#cgo nocallback _mkcgo_go_initHMAC -+#cgo noescape _mkcgo_go_newPrivateKeyEd25519FromSeed -+#cgo nocallback _mkcgo_go_newPrivateKeyEd25519FromSeed -+#cgo noescape _mkcgo_go_newPublicKeyEd25519 -+#cgo nocallback _mkcgo_go_newPublicKeyEd25519 -+#cgo noescape _mkcgo_go_publicKeyFromPrivateECDH -+#cgo nocallback _mkcgo_go_publicKeyFromPrivateECDH -+#cgo noescape _mkcgo_go_signEd25519 -+#cgo nocallback _mkcgo_go_signEd25519 -+#cgo noescape _mkcgo_go_signMLDSA65 -+#cgo nocallback _mkcgo_go_signMLDSA65 -+#cgo noescape _mkcgo_go_signMLDSA87 -+#cgo nocallback _mkcgo_go_signMLDSA87 -+#cgo noescape _mkcgo_go_supportsMLDSA -+#cgo nocallback _mkcgo_go_supportsMLDSA -+#cgo noescape _mkcgo_go_supportsMLKEM -+#cgo nocallback _mkcgo_go_supportsMLKEM -+#cgo noescape _mkcgo_go_supportsSHA3 -+#cgo nocallback _mkcgo_go_supportsSHA3 -+#cgo noescape _mkcgo_go_updateHMAC -+#cgo nocallback _mkcgo_go_updateHMAC -+#cgo noescape _mkcgo_go_validatePrivateKeyECDH -+#cgo nocallback _mkcgo_go_validatePrivateKeyECDH -+#cgo noescape _mkcgo_go_validatePublicKeyECDH -+#cgo nocallback _mkcgo_go_validatePublicKeyECDH -+#cgo noescape _mkcgo_go_validatePublicKeyMLDSA65 -+#cgo nocallback _mkcgo_go_validatePublicKeyMLDSA65 -+#cgo noescape _mkcgo_go_validatePublicKeyMLDSA87 -+#cgo nocallback _mkcgo_go_validatePublicKeyMLDSA87 -+#cgo noescape _mkcgo_go_verifyEd25519 -+#cgo nocallback _mkcgo_go_verifyEd25519 -+#cgo noescape _mkcgo_go_verifyMLDSA65 -+#cgo nocallback _mkcgo_go_verifyMLDSA65 -+#cgo noescape _mkcgo_go_verifyMLDSA87 -+#cgo nocallback _mkcgo_go_verifyMLDSA87 -+*/ -+import "C" -+import "unsafe" -+ -+//go:nosplit -+func mkcgoNoEscape(p *C.uintptr_t) *C.uintptr_t { -+ x := uintptr(unsafe.Pointer(p)) -+ return (*C.uintptr_t)(unsafe.Pointer(x ^ 0)) -+} -+ -+func MD5(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_MD5((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA1(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA1((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA256(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA256((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA384(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA384((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA3_256(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA3_256((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA3_384(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA3_384((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA3_512(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA3_512((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA512(inputPointer []uint8, outputPointer []uint8) { -+ C._mkcgo_go_SHA512((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(inputPointer))), C.size_t(len(inputPointer)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func CopyHMAC(hashAlgorithm int32, ptr unsafe.Pointer) unsafe.Pointer { -+ return C._mkcgo_go_copyHMAC(C.int32_t(hashAlgorithm), ptr) -+} -+ -+func DecapsulateMLKEM1024(seed []uint8, ciphertext []uint8, sharedKey []uint8) int64 { -+ return int64(C._mkcgo_go_decapsulateMLKEM1024((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(ciphertext))), C.long(len(ciphertext)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sharedKey))), C.long(len(sharedKey)))) -+} -+ -+func DecapsulateMLKEM768(seed []uint8, ciphertext []uint8, sharedKey []uint8) int64 { -+ return int64(C._mkcgo_go_decapsulateMLKEM768((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(ciphertext))), C.long(len(ciphertext)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sharedKey))), C.long(len(sharedKey)))) -+} -+ -+func DecryptAESGCM(key []uint8, data []uint8, nonce []uint8, aad []uint8, tag []uint8, out []uint8, outLength *int) int64 { -+ if outLength != nil && int(*outLength) > len(out) { -+ panic("DecryptAESGCM: *outLength exceeds len(out)") -+ } -+ return int64(C._mkcgo_go_decryptAESGCM((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(data))), C.size_t(len(data)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(nonce))), C.size_t(len(nonce)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(aad))), C.size_t(len(aad)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(tag))), C.size_t(len(tag)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(out))), (*C.size_t)(unsafe.Pointer(outLength)))) -+} -+ -+func DecryptChaChaPoly(key []uint8, data []uint8, nonce []uint8, aad []uint8, tag []uint8, out []uint8, outLength *int) int64 { -+ if outLength != nil && int(*outLength) > len(out) { -+ panic("DecryptChaChaPoly: *outLength exceeds len(out)") -+ } -+ return int64(C._mkcgo_go_decryptChaChaPoly((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(data))), C.size_t(len(data)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(nonce))), C.size_t(len(nonce)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(aad))), C.size_t(len(aad)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(tag))), C.size_t(len(tag)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(out))), (*C.size_t)(unsafe.Pointer(outLength)))) -+} -+ -+func DeriveEncapsulationKeyMLKEM1024(seed []uint8, encapKey []uint8) int64 { -+ return int64(C._mkcgo_go_deriveEncapsulationKeyMLKEM1024((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(encapKey))), C.long(len(encapKey)))) -+} -+ -+func DeriveEncapsulationKeyMLKEM768(seed []uint8, encapKey []uint8) int64 { -+ return int64(C._mkcgo_go_deriveEncapsulationKeyMLKEM768((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(encapKey))), C.long(len(encapKey)))) -+} -+ -+func DerivePublicKeyMLDSA65(seed []uint8, publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_derivePublicKeyMLDSA65((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func DerivePublicKeyMLDSA87(seed []uint8, publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_derivePublicKeyMLDSA87((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func EcdhSharedSecret(curveID int32, privateKey []uint8, publicKey []uint8, sharedSecret []uint8) int64 { -+ return int64(C._mkcgo_go_ecdhSharedSecret(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(privateKey))), C.long(len(privateKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sharedSecret))), C.long(len(sharedSecret)))) -+} -+ -+func EcdsaSign(curveID int32, d []uint8, message []uint8, signature []uint8, signatureLen *int64) int64 { -+ if signatureLen != nil && int(*signatureLen) > len(signature) { -+ panic("EcdsaSign: *signatureLen exceeds len(signature)") -+ } -+ return int64(C._mkcgo_go_ecdsaSign(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(d))), C.long(len(d)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.long(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(signature))), (*C.long)(unsafe.Pointer(signatureLen)))) -+} -+ -+func EcdsaVerify(curveID int32, x []uint8, y []uint8, message []uint8, signature []uint8) int64 { -+ return int64(C._mkcgo_go_ecdsaVerify(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(x))), C.long(len(x)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(y))), C.long(len(y)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.long(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(signature))), C.long(len(signature)))) -+} -+ -+func EncapsulateMLKEM1024(encapKey []uint8, sharedKey []uint8, ciphertext []uint8) int64 { -+ return int64(C._mkcgo_go_encapsulateMLKEM1024((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(encapKey))), C.long(len(encapKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sharedKey))), C.long(len(sharedKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(ciphertext))), C.long(len(ciphertext)))) -+} -+ -+func EncapsulateMLKEM768(encapKey []uint8, sharedKey []uint8, ciphertext []uint8) int64 { -+ return int64(C._mkcgo_go_encapsulateMLKEM768((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(encapKey))), C.long(len(encapKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sharedKey))), C.long(len(sharedKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(ciphertext))), C.long(len(ciphertext)))) -+} -+ -+func EncryptAESGCM(key []uint8, data []uint8, nonce []uint8, aad []uint8, cipherText []uint8, tag []uint8) int64 { -+ return int64(C._mkcgo_go_encryptAESGCM((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(data))), C.size_t(len(data)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(nonce))), C.size_t(len(nonce)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(aad))), C.size_t(len(aad)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(cipherText))), C.size_t(len(cipherText)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(tag))))) -+} -+ -+func EncryptChaChaPoly(key []uint8, data []uint8, nonce []uint8, aad []uint8, cipherText []uint8, tag []uint8) int64 { -+ return int64(C._mkcgo_go_encryptChaChaPoly((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(data))), C.size_t(len(data)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(nonce))), C.size_t(len(nonce)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(aad))), C.size_t(len(aad)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(cipherText))), C.size_t(len(cipherText)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(tag))))) -+} -+ -+func ExpandHKDF(hashFunction int32, prk []uint8, info []uint8, okm []uint8) int64 { -+ return int64(C._mkcgo_go_expandHKDF(C.int32_t(hashFunction), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(prk))), C.size_t(len(prk)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(info))), C.size_t(len(info)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(okm))), C.size_t(len(okm)))) -+} -+ -+func ExtractHKDF(hashFunction int32, secret []uint8, salt []uint8, prk []uint8) int64 { -+ return int64(C._mkcgo_go_extractHKDF(C.int32_t(hashFunction), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(secret))), C.size_t(len(secret)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(salt))), C.size_t(len(salt)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(prk))), C.size_t(len(prk)))) -+} -+ -+func FinalizeHMAC(hashFunction int32, ptr unsafe.Pointer, outputPointer []uint8) { -+ C._mkcgo_go_finalizeHMAC(C.int32_t(hashFunction), ptr, (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func FreeHMAC(hashFunction int32, ptr unsafe.Pointer) { -+ C._mkcgo_go_freeHMAC(C.int32_t(hashFunction), ptr) -+} -+ -+func GenerateKeyECDH(curveID int32, privateKey []uint8, publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_generateKeyECDH(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(privateKey))), C.long(len(privateKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func GenerateKeyECDSA(curveID int32, x []uint8, y []uint8, d []uint8) int64 { -+ return int64(C._mkcgo_go_generateKeyECDSA(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(x))), C.long(len(x)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(y))), C.long(len(y)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(d))), C.long(len(d)))) -+} -+ -+func GenerateKeyEd25519(key []uint8) { -+ C._mkcgo_go_generateKeyEd25519((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key)))) -+} -+ -+func GenerateKeyMLDSA65(seed []uint8) int64 { -+ return int64(C._mkcgo_go_generateKeyMLDSA65((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)))) -+} -+ -+func GenerateKeyMLDSA87(seed []uint8) int64 { -+ return int64(C._mkcgo_go_generateKeyMLDSA87((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)))) -+} -+ -+func GenerateKeyMLKEM1024(seed []uint8) int64 { -+ return int64(C._mkcgo_go_generateKeyMLKEM1024((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)))) -+} -+ -+func GenerateKeyMLKEM768(seed []uint8) int64 { -+ return int64(C._mkcgo_go_generateKeyMLKEM768((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)))) -+} -+ -+func HashBlockSize(hashAlgorithm int32) int64 { -+ return int64(C._mkcgo_go_hashBlockSize(C.int32_t(hashAlgorithm))) -+} -+ -+func HashCopy(hashAlgorithm int32, ptr unsafe.Pointer) unsafe.Pointer { -+ return C._mkcgo_go_hashCopy(C.int32_t(hashAlgorithm), ptr) -+} -+ -+func HashFree(hashAlgorithm int32, ptr unsafe.Pointer) { -+ C._mkcgo_go_hashFree(C.int32_t(hashAlgorithm), ptr) -+} -+ -+func HashNew(hashAlgorithm int32) unsafe.Pointer { -+ return C._mkcgo_go_hashNew(C.int32_t(hashAlgorithm)) -+} -+ -+func HashReset(hashAlgorithm int32, ptr unsafe.Pointer) { -+ C._mkcgo_go_hashReset(C.int32_t(hashAlgorithm), ptr) -+} -+ -+func HashSize(hashAlgorithm int32) int64 { -+ return int64(C._mkcgo_go_hashSize(C.int32_t(hashAlgorithm))) -+} -+ -+func HashSum(hashAlgorithm int32, ptr unsafe.Pointer, outputPointer []uint8) { -+ C._mkcgo_go_hashSum(C.int32_t(hashAlgorithm), ptr, (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func HashWrite(hashAlgorithm int32, ptr unsafe.Pointer, data []uint8) { -+ C._mkcgo_go_hashWrite(C.int32_t(hashAlgorithm), ptr, (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(data))), C.long(len(data))) -+} -+ -+func InitHMAC(hashFunction int32, key []uint8) unsafe.Pointer { -+ return C._mkcgo_go_initHMAC(C.int32_t(hashFunction), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), C.long(len(key))) -+} -+ -+func NewPrivateKeyEd25519FromSeed(key []uint8, seed []uint8) int64 { -+ return int64(C._mkcgo_go_newPrivateKeyEd25519FromSeed((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))))) -+} -+ -+func NewPublicKeyEd25519(key []uint8, pub []uint8) int64 { -+ return int64(C._mkcgo_go_newPublicKeyEd25519((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(key))), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(pub))))) -+} -+ -+func PublicKeyFromPrivateECDH(curveID int32, privateKey []uint8, publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_publicKeyFromPrivateECDH(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(privateKey))), C.long(len(privateKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func SignEd25519(privateKey []uint8, message []uint8, sigBuffer []uint8) int64 { -+ return int64(C._mkcgo_go_signEd25519((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(privateKey))), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.size_t(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sigBuffer))))) -+} -+ -+func SignMLDSA65(seed []uint8, message []uint8, context []uint8, signature []uint8, signatureLen *int64) int64 { -+ if signatureLen != nil && int(*signatureLen) > len(signature) { -+ panic("SignMLDSA65: *signatureLen exceeds len(signature)") -+ } -+ return int64(C._mkcgo_go_signMLDSA65((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.long(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(context))), C.long(len(context)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(signature))), (*C.long)(unsafe.Pointer(signatureLen)))) -+} -+ -+func SignMLDSA87(seed []uint8, message []uint8, context []uint8, signature []uint8, signatureLen *int64) int64 { -+ if signatureLen != nil && int(*signatureLen) > len(signature) { -+ panic("SignMLDSA87: *signatureLen exceeds len(signature)") -+ } -+ return int64(C._mkcgo_go_signMLDSA87((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(seed))), C.long(len(seed)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.long(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(context))), C.long(len(context)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(signature))), (*C.long)(unsafe.Pointer(signatureLen)))) -+} -+ -+func SupportsMLDSA() int64 { -+ return int64(C._mkcgo_go_supportsMLDSA()) -+} -+ -+func SupportsMLKEM() int64 { -+ return int64(C._mkcgo_go_supportsMLKEM()) -+} -+ -+func SupportsSHA3() int64 { -+ return int64(C._mkcgo_go_supportsSHA3()) -+} -+ -+func UpdateHMAC(hashFunction int32, ptr unsafe.Pointer, data []uint8) { -+ C._mkcgo_go_updateHMAC(C.int32_t(hashFunction), ptr, (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(data))), C.long(len(data))) -+} -+ -+func ValidatePrivateKeyECDH(curveID int32, privateKey []uint8) int64 { -+ return int64(C._mkcgo_go_validatePrivateKeyECDH(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(privateKey))), C.long(len(privateKey)))) -+} -+ -+func ValidatePublicKeyECDH(curveID int32, publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_validatePublicKeyECDH(C.int32_t(curveID), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func ValidatePublicKeyMLDSA65(publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_validatePublicKeyMLDSA65((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func ValidatePublicKeyMLDSA87(publicKey []uint8) int64 { -+ return int64(C._mkcgo_go_validatePublicKeyMLDSA87((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)))) -+} -+ -+func VerifyEd25519(publicKey []uint8, message []uint8, sig []uint8) int64 { -+ return int64(C._mkcgo_go_verifyEd25519((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.size_t(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(sig))))) -+} -+ -+func VerifyMLDSA65(publicKey []uint8, message []uint8, context []uint8, signature []uint8) int64 { -+ return int64(C._mkcgo_go_verifyMLDSA65((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.long(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(context))), C.long(len(context)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(signature))), C.long(len(signature)))) -+} -+ -+func VerifyMLDSA87(publicKey []uint8, message []uint8, context []uint8, signature []uint8) int64 { -+ return int64(C._mkcgo_go_verifyMLDSA87((*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(publicKey))), C.long(len(publicKey)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(message))), C.long(len(message)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(context))), C.long(len(context)), (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(signature))), C.long(len(signature)))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_nocgo.go -new file mode 100644 -index 00000000000000..81adf32bc70763 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_nocgo.go -@@ -0,0 +1,456 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+package cryptokit -+ -+import ( -+ "runtime" -+ "unsafe" -+) -+ -+var _ = runtime.GOOS -+ -+var _mkcgoAlwaysFalseCryptokit bool -+var _mkcgoEscapeSinkCryptokit unsafe.Pointer -+ -+// mkcgoEscapePtrCryptokit forces p to escape to the heap. -+// This implementation is also used in the standard library: -+// https://github.com/golang/go/blob/f71432d223eeb2139b460957817400750fd13655/src/internal/abi/escape.go#L24-L33 -+func mkcgoEscapePtrCryptokit(p unsafe.Pointer) unsafe.Pointer { -+ if _mkcgoAlwaysFalseCryptokit { -+ _mkcgoEscapeSinkCryptokit = p -+ } -+ return p -+} -+ -+//go:linkname go_MD5 go_MD5 -+//go:linkname go_SHA1 go_SHA1 -+//go:linkname go_SHA256 go_SHA256 -+//go:linkname go_SHA384 go_SHA384 -+//go:linkname go_SHA3_256 go_SHA3_256 -+//go:linkname go_SHA3_384 go_SHA3_384 -+//go:linkname go_SHA3_512 go_SHA3_512 -+//go:linkname go_SHA512 go_SHA512 -+//go:linkname go_copyHMAC go_copyHMAC -+//go:linkname go_decapsulateMLKEM1024 go_decapsulateMLKEM1024 -+//go:linkname go_decapsulateMLKEM768 go_decapsulateMLKEM768 -+//go:linkname go_decryptAESGCM go_decryptAESGCM -+//go:linkname go_decryptChaChaPoly go_decryptChaChaPoly -+//go:linkname go_deriveEncapsulationKeyMLKEM1024 go_deriveEncapsulationKeyMLKEM1024 -+//go:linkname go_deriveEncapsulationKeyMLKEM768 go_deriveEncapsulationKeyMLKEM768 -+//go:linkname go_derivePublicKeyMLDSA65 go_derivePublicKeyMLDSA65 -+//go:linkname go_derivePublicKeyMLDSA87 go_derivePublicKeyMLDSA87 -+//go:linkname go_ecdhSharedSecret go_ecdhSharedSecret -+//go:linkname go_ecdsaSign go_ecdsaSign -+//go:linkname go_ecdsaVerify go_ecdsaVerify -+//go:linkname go_encapsulateMLKEM1024 go_encapsulateMLKEM1024 -+//go:linkname go_encapsulateMLKEM768 go_encapsulateMLKEM768 -+//go:linkname go_encryptAESGCM go_encryptAESGCM -+//go:linkname go_encryptChaChaPoly go_encryptChaChaPoly -+//go:linkname go_expandHKDF go_expandHKDF -+//go:linkname go_extractHKDF go_extractHKDF -+//go:linkname go_finalizeHMAC go_finalizeHMAC -+//go:linkname go_freeHMAC go_freeHMAC -+//go:linkname go_generateKeyECDH go_generateKeyECDH -+//go:linkname go_generateKeyECDSA go_generateKeyECDSA -+//go:linkname go_generateKeyEd25519 go_generateKeyEd25519 -+//go:linkname go_generateKeyMLDSA65 go_generateKeyMLDSA65 -+//go:linkname go_generateKeyMLDSA87 go_generateKeyMLDSA87 -+//go:linkname go_generateKeyMLKEM1024 go_generateKeyMLKEM1024 -+//go:linkname go_generateKeyMLKEM768 go_generateKeyMLKEM768 -+//go:linkname go_hashBlockSize go_hashBlockSize -+//go:linkname go_hashCopy go_hashCopy -+//go:linkname go_hashFree go_hashFree -+//go:linkname go_hashNew go_hashNew -+//go:linkname go_hashReset go_hashReset -+//go:linkname go_hashSize go_hashSize -+//go:linkname go_hashSum go_hashSum -+//go:linkname go_hashWrite go_hashWrite -+//go:linkname go_initHMAC go_initHMAC -+//go:linkname go_newPrivateKeyEd25519FromSeed go_newPrivateKeyEd25519FromSeed -+//go:linkname go_newPublicKeyEd25519 go_newPublicKeyEd25519 -+//go:linkname go_publicKeyFromPrivateECDH go_publicKeyFromPrivateECDH -+//go:linkname go_signEd25519 go_signEd25519 -+//go:linkname go_signMLDSA65 go_signMLDSA65 -+//go:linkname go_signMLDSA87 go_signMLDSA87 -+//go:linkname go_supportsMLDSA go_supportsMLDSA -+//go:linkname go_supportsMLKEM go_supportsMLKEM -+//go:linkname go_supportsSHA3 go_supportsSHA3 -+//go:linkname go_updateHMAC go_updateHMAC -+//go:linkname go_validatePrivateKeyECDH go_validatePrivateKeyECDH -+//go:linkname go_validatePublicKeyECDH go_validatePublicKeyECDH -+//go:linkname go_validatePublicKeyMLDSA65 go_validatePublicKeyMLDSA65 -+//go:linkname go_validatePublicKeyMLDSA87 go_validatePublicKeyMLDSA87 -+//go:linkname go_verifyEd25519 go_verifyEd25519 -+//go:linkname go_verifyMLDSA65 go_verifyMLDSA65 -+//go:linkname go_verifyMLDSA87 go_verifyMLDSA87 -+ -+var go_MD5 byte -+var go_SHA1 byte -+var go_SHA256 byte -+var go_SHA384 byte -+var go_SHA3_256 byte -+var go_SHA3_384 byte -+var go_SHA3_512 byte -+var go_SHA512 byte -+var go_copyHMAC byte -+var go_decapsulateMLKEM1024 byte -+var go_decapsulateMLKEM768 byte -+var go_decryptAESGCM byte -+var go_decryptChaChaPoly byte -+var go_deriveEncapsulationKeyMLKEM1024 byte -+var go_deriveEncapsulationKeyMLKEM768 byte -+var go_derivePublicKeyMLDSA65 byte -+var go_derivePublicKeyMLDSA87 byte -+var go_ecdhSharedSecret byte -+var go_ecdsaSign byte -+var go_ecdsaVerify byte -+var go_encapsulateMLKEM1024 byte -+var go_encapsulateMLKEM768 byte -+var go_encryptAESGCM byte -+var go_encryptChaChaPoly byte -+var go_expandHKDF byte -+var go_extractHKDF byte -+var go_finalizeHMAC byte -+var go_freeHMAC byte -+var go_generateKeyECDH byte -+var go_generateKeyECDSA byte -+var go_generateKeyEd25519 byte -+var go_generateKeyMLDSA65 byte -+var go_generateKeyMLDSA87 byte -+var go_generateKeyMLKEM1024 byte -+var go_generateKeyMLKEM768 byte -+var go_hashBlockSize byte -+var go_hashCopy byte -+var go_hashFree byte -+var go_hashNew byte -+var go_hashReset byte -+var go_hashSize byte -+var go_hashSum byte -+var go_hashWrite byte -+var go_initHMAC byte -+var go_newPrivateKeyEd25519FromSeed byte -+var go_newPublicKeyEd25519 byte -+var go_publicKeyFromPrivateECDH byte -+var go_signEd25519 byte -+var go_signMLDSA65 byte -+var go_signMLDSA87 byte -+var go_supportsMLDSA byte -+var go_supportsMLKEM byte -+var go_supportsSHA3 byte -+var go_updateHMAC byte -+var go_validatePrivateKeyECDH byte -+var go_validatePublicKeyECDH byte -+var go_validatePublicKeyMLDSA65 byte -+var go_validatePublicKeyMLDSA87 byte -+var go_verifyEd25519 byte -+var go_verifyMLDSA65 byte -+var go_verifyMLDSA87 byte -+ -+func MD5(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_MD5)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA1(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA1)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA256(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA256)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA384(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA384)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA3_256(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA3_256)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA3_384(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA3_384)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA3_512(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA3_512)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func SHA512(inputPointer []uint8, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_SHA512)), uintptr(unsafe.Pointer(unsafe.SliceData(inputPointer))), uintptr(len(inputPointer)), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func CopyHMAC(hashAlgorithm int32, ptr unsafe.Pointer) unsafe.Pointer { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_copyHMAC)), uintptr(hashAlgorithm), uintptr(ptr)) -+ return unsafe.Pointer(r0) -+} -+ -+func DecapsulateMLKEM1024(seed []uint8, ciphertext []uint8, sharedKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_decapsulateMLKEM1024)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(ciphertext))), uintptr(len(ciphertext)), uintptr(unsafe.Pointer(unsafe.SliceData(sharedKey))), uintptr(len(sharedKey))) -+ return int64(r0) -+} -+ -+func DecapsulateMLKEM768(seed []uint8, ciphertext []uint8, sharedKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_decapsulateMLKEM768)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(ciphertext))), uintptr(len(ciphertext)), uintptr(unsafe.Pointer(unsafe.SliceData(sharedKey))), uintptr(len(sharedKey))) -+ return int64(r0) -+} -+ -+func DecryptAESGCM(key []uint8, data []uint8, nonce []uint8, aad []uint8, tag []uint8, out []uint8, outLength *int) int64 { -+ if outLength != nil && int(*outLength) > len(out) { -+ panic("DecryptAESGCM: *outLength exceeds len(out)") -+ } -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_decryptAESGCM)), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data)), uintptr(unsafe.Pointer(unsafe.SliceData(nonce))), uintptr(len(nonce)), uintptr(unsafe.Pointer(unsafe.SliceData(aad))), uintptr(len(aad)), uintptr(unsafe.Pointer(unsafe.SliceData(tag))), uintptr(len(tag)), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outLength))) -+ return int64(r0) -+} -+ -+func DecryptChaChaPoly(key []uint8, data []uint8, nonce []uint8, aad []uint8, tag []uint8, out []uint8, outLength *int) int64 { -+ if outLength != nil && int(*outLength) > len(out) { -+ panic("DecryptChaChaPoly: *outLength exceeds len(out)") -+ } -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_decryptChaChaPoly)), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data)), uintptr(unsafe.Pointer(unsafe.SliceData(nonce))), uintptr(len(nonce)), uintptr(unsafe.Pointer(unsafe.SliceData(aad))), uintptr(len(aad)), uintptr(unsafe.Pointer(unsafe.SliceData(tag))), uintptr(len(tag)), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outLength))) -+ return int64(r0) -+} -+ -+func DeriveEncapsulationKeyMLKEM1024(seed []uint8, encapKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_deriveEncapsulationKeyMLKEM1024)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(encapKey))), uintptr(len(encapKey))) -+ return int64(r0) -+} -+ -+func DeriveEncapsulationKeyMLKEM768(seed []uint8, encapKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_deriveEncapsulationKeyMLKEM768)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(encapKey))), uintptr(len(encapKey))) -+ return int64(r0) -+} -+ -+func DerivePublicKeyMLDSA65(seed []uint8, publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_derivePublicKeyMLDSA65)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func DerivePublicKeyMLDSA87(seed []uint8, publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_derivePublicKeyMLDSA87)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func EcdhSharedSecret(curveID int32, privateKey []uint8, publicKey []uint8, sharedSecret []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_ecdhSharedSecret)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(privateKey))), uintptr(len(privateKey)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey)), uintptr(unsafe.Pointer(unsafe.SliceData(sharedSecret))), uintptr(len(sharedSecret))) -+ return int64(r0) -+} -+ -+func EcdsaSign(curveID int32, d []uint8, message []uint8, signature []uint8, signatureLen *int64) int64 { -+ if signatureLen != nil && int(*signatureLen) > len(signature) { -+ panic("EcdsaSign: *signatureLen exceeds len(signature)") -+ } -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_ecdsaSign)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(d))), uintptr(len(d)), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(signature))), uintptr(unsafe.Pointer(signatureLen))) -+ return int64(r0) -+} -+ -+func EcdsaVerify(curveID int32, x []uint8, y []uint8, message []uint8, signature []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_ecdsaVerify)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(x))), uintptr(len(x)), uintptr(unsafe.Pointer(unsafe.SliceData(y))), uintptr(len(y)), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(signature))), uintptr(len(signature))) -+ return int64(r0) -+} -+ -+func EncapsulateMLKEM1024(encapKey []uint8, sharedKey []uint8, ciphertext []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_encapsulateMLKEM1024)), uintptr(unsafe.Pointer(unsafe.SliceData(encapKey))), uintptr(len(encapKey)), uintptr(unsafe.Pointer(unsafe.SliceData(sharedKey))), uintptr(len(sharedKey)), uintptr(unsafe.Pointer(unsafe.SliceData(ciphertext))), uintptr(len(ciphertext))) -+ return int64(r0) -+} -+ -+func EncapsulateMLKEM768(encapKey []uint8, sharedKey []uint8, ciphertext []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_encapsulateMLKEM768)), uintptr(unsafe.Pointer(unsafe.SliceData(encapKey))), uintptr(len(encapKey)), uintptr(unsafe.Pointer(unsafe.SliceData(sharedKey))), uintptr(len(sharedKey)), uintptr(unsafe.Pointer(unsafe.SliceData(ciphertext))), uintptr(len(ciphertext))) -+ return int64(r0) -+} -+ -+func EncryptAESGCM(key []uint8, data []uint8, nonce []uint8, aad []uint8, cipherText []uint8, tag []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_encryptAESGCM)), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data)), uintptr(unsafe.Pointer(unsafe.SliceData(nonce))), uintptr(len(nonce)), uintptr(unsafe.Pointer(unsafe.SliceData(aad))), uintptr(len(aad)), uintptr(unsafe.Pointer(unsafe.SliceData(cipherText))), uintptr(len(cipherText)), uintptr(unsafe.Pointer(unsafe.SliceData(tag)))) -+ return int64(r0) -+} -+ -+func EncryptChaChaPoly(key []uint8, data []uint8, nonce []uint8, aad []uint8, cipherText []uint8, tag []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_encryptChaChaPoly)), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data)), uintptr(unsafe.Pointer(unsafe.SliceData(nonce))), uintptr(len(nonce)), uintptr(unsafe.Pointer(unsafe.SliceData(aad))), uintptr(len(aad)), uintptr(unsafe.Pointer(unsafe.SliceData(cipherText))), uintptr(len(cipherText)), uintptr(unsafe.Pointer(unsafe.SliceData(tag)))) -+ return int64(r0) -+} -+ -+func ExpandHKDF(hashFunction int32, prk []uint8, info []uint8, okm []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_expandHKDF)), uintptr(hashFunction), uintptr(unsafe.Pointer(unsafe.SliceData(prk))), uintptr(len(prk)), uintptr(unsafe.Pointer(unsafe.SliceData(info))), uintptr(len(info)), uintptr(unsafe.Pointer(unsafe.SliceData(okm))), uintptr(len(okm))) -+ return int64(r0) -+} -+ -+func ExtractHKDF(hashFunction int32, secret []uint8, salt []uint8, prk []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_extractHKDF)), uintptr(hashFunction), uintptr(unsafe.Pointer(unsafe.SliceData(secret))), uintptr(len(secret)), uintptr(unsafe.Pointer(unsafe.SliceData(salt))), uintptr(len(salt)), uintptr(unsafe.Pointer(unsafe.SliceData(prk))), uintptr(len(prk))) -+ return int64(r0) -+} -+ -+func FinalizeHMAC(hashFunction int32, ptr unsafe.Pointer, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_finalizeHMAC)), uintptr(hashFunction), uintptr(ptr), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func FreeHMAC(hashFunction int32, ptr unsafe.Pointer) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_freeHMAC)), uintptr(hashFunction), uintptr(ptr)) -+} -+ -+func GenerateKeyECDH(curveID int32, privateKey []uint8, publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyECDH)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(privateKey))), uintptr(len(privateKey)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func GenerateKeyECDSA(curveID int32, x []uint8, y []uint8, d []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyECDSA)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(x))), uintptr(len(x)), uintptr(unsafe.Pointer(unsafe.SliceData(y))), uintptr(len(y)), uintptr(unsafe.Pointer(unsafe.SliceData(d))), uintptr(len(d))) -+ return int64(r0) -+} -+ -+func GenerateKeyEd25519(key []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyEd25519)), uintptr(unsafe.Pointer(unsafe.SliceData(key)))) -+} -+ -+func GenerateKeyMLDSA65(seed []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyMLDSA65)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed))) -+ return int64(r0) -+} -+ -+func GenerateKeyMLDSA87(seed []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyMLDSA87)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed))) -+ return int64(r0) -+} -+ -+func GenerateKeyMLKEM1024(seed []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyMLKEM1024)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed))) -+ return int64(r0) -+} -+ -+func GenerateKeyMLKEM768(seed []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_generateKeyMLKEM768)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed))) -+ return int64(r0) -+} -+ -+func HashBlockSize(hashAlgorithm int32) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_hashBlockSize)), uintptr(hashAlgorithm)) -+ return int64(r0) -+} -+ -+func HashCopy(hashAlgorithm int32, ptr unsafe.Pointer) unsafe.Pointer { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_hashCopy)), uintptr(hashAlgorithm), uintptr(ptr)) -+ return unsafe.Pointer(r0) -+} -+ -+func HashFree(hashAlgorithm int32, ptr unsafe.Pointer) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_hashFree)), uintptr(hashAlgorithm), uintptr(ptr)) -+} -+ -+func HashNew(hashAlgorithm int32) unsafe.Pointer { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_hashNew)), uintptr(hashAlgorithm)) -+ return unsafe.Pointer(r0) -+} -+ -+func HashReset(hashAlgorithm int32, ptr unsafe.Pointer) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_hashReset)), uintptr(hashAlgorithm), uintptr(ptr)) -+} -+ -+func HashSize(hashAlgorithm int32) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_hashSize)), uintptr(hashAlgorithm)) -+ return int64(r0) -+} -+ -+func HashSum(hashAlgorithm int32, ptr unsafe.Pointer, outputPointer []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_hashSum)), uintptr(hashAlgorithm), uintptr(ptr), uintptr(unsafe.Pointer(unsafe.SliceData(outputPointer)))) -+} -+ -+func HashWrite(hashAlgorithm int32, ptr unsafe.Pointer, data []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_hashWrite)), uintptr(hashAlgorithm), uintptr(ptr), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data))) -+} -+ -+func InitHMAC(hashFunction int32, key []uint8) unsafe.Pointer { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_initHMAC)), uintptr(hashFunction), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key))) -+ return unsafe.Pointer(r0) -+} -+ -+func NewPrivateKeyEd25519FromSeed(key []uint8, seed []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_newPrivateKeyEd25519FromSeed)), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(unsafe.Pointer(unsafe.SliceData(seed)))) -+ return int64(r0) -+} -+ -+func NewPublicKeyEd25519(key []uint8, pub []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_newPublicKeyEd25519)), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(unsafe.Pointer(unsafe.SliceData(pub)))) -+ return int64(r0) -+} -+ -+func PublicKeyFromPrivateECDH(curveID int32, privateKey []uint8, publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_publicKeyFromPrivateECDH)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(privateKey))), uintptr(len(privateKey)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func SignEd25519(privateKey []uint8, message []uint8, sigBuffer []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_signEd25519)), uintptr(unsafe.Pointer(unsafe.SliceData(privateKey))), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(sigBuffer)))) -+ return int64(r0) -+} -+ -+func SignMLDSA65(seed []uint8, message []uint8, context []uint8, signature []uint8, signatureLen *int64) int64 { -+ if signatureLen != nil && int(*signatureLen) > len(signature) { -+ panic("SignMLDSA65: *signatureLen exceeds len(signature)") -+ } -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_signMLDSA65)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(context))), uintptr(len(context)), uintptr(unsafe.Pointer(unsafe.SliceData(signature))), uintptr(unsafe.Pointer(signatureLen))) -+ return int64(r0) -+} -+ -+func SignMLDSA87(seed []uint8, message []uint8, context []uint8, signature []uint8, signatureLen *int64) int64 { -+ if signatureLen != nil && int(*signatureLen) > len(signature) { -+ panic("SignMLDSA87: *signatureLen exceeds len(signature)") -+ } -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_signMLDSA87)), uintptr(unsafe.Pointer(unsafe.SliceData(seed))), uintptr(len(seed)), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(context))), uintptr(len(context)), uintptr(unsafe.Pointer(unsafe.SliceData(signature))), uintptr(unsafe.Pointer(signatureLen))) -+ return int64(r0) -+} -+ -+func SupportsMLDSA() int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_supportsMLDSA))) -+ return int64(r0) -+} -+ -+func SupportsMLKEM() int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_supportsMLKEM))) -+ return int64(r0) -+} -+ -+func SupportsSHA3() int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_supportsSHA3))) -+ return int64(r0) -+} -+ -+func UpdateHMAC(hashFunction int32, ptr unsafe.Pointer, data []uint8) { -+ syscallN(0, uintptr(unsafe.Pointer(&go_updateHMAC)), uintptr(hashFunction), uintptr(ptr), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data))) -+} -+ -+func ValidatePrivateKeyECDH(curveID int32, privateKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_validatePrivateKeyECDH)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(privateKey))), uintptr(len(privateKey))) -+ return int64(r0) -+} -+ -+func ValidatePublicKeyECDH(curveID int32, publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_validatePublicKeyECDH)), uintptr(curveID), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func ValidatePublicKeyMLDSA65(publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_validatePublicKeyMLDSA65)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func ValidatePublicKeyMLDSA87(publicKey []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_validatePublicKeyMLDSA87)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey))) -+ return int64(r0) -+} -+ -+func VerifyEd25519(publicKey []uint8, message []uint8, sig []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_verifyEd25519)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(sig)))) -+ return int64(r0) -+} -+ -+func VerifyMLDSA65(publicKey []uint8, message []uint8, context []uint8, signature []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_verifyMLDSA65)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey)), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(context))), uintptr(len(context)), uintptr(unsafe.Pointer(unsafe.SliceData(signature))), uintptr(len(signature))) -+ return int64(r0) -+} -+ -+func VerifyMLDSA87(publicKey []uint8, message []uint8, context []uint8, signature []uint8) int64 { -+ r0, _ := syscallN(0, uintptr(unsafe.Pointer(&go_verifyMLDSA87)), uintptr(unsafe.Pointer(unsafe.SliceData(publicKey))), uintptr(len(publicKey)), uintptr(unsafe.Pointer(unsafe.SliceData(message))), uintptr(len(message)), uintptr(unsafe.Pointer(unsafe.SliceData(context))), uintptr(len(context)), uintptr(unsafe.Pointer(unsafe.SliceData(signature))), uintptr(len(signature))) -+ return int64(r0) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_amd64.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_amd64.go -new file mode 100644 -index 00000000000000..2b9858f5e5ce80 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_amd64.go -@@ -0,0 +1,307 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+// Code generated by genswiftimports. DO NOT EDIT. -+ -+//go:build !cgo && darwin && amd64 -+ -+package cryptokit -+ -+//go:cgo_import_dynamic $s10Foundation12DataProtocolPAAE9copyBytes2toSiSw_tF $s10Foundation12DataProtocolPAAE9copyBytes2toSiSw_tF "" -+//go:cgo_import_dynamic $s10Foundation15ContiguousBytesP010withUnsafeC0yqd__qd__SWKXEKlFTj $s10Foundation15ContiguousBytesP010withUnsafeC0yqd__qd__SWKXEKlFTj "" -+//go:cgo_import_dynamic $s10Foundation4DataV15withUnsafeBytesyxxSWKXEKlF $s10Foundation4DataV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s10Foundation4DataV5bytes5countACSV_SitcfC $s10Foundation4DataV5bytes5countACSV_SitcfC "" -+//go:cgo_import_dynamic $s10Foundation4DataV5countSivg $s10Foundation4DataV5countSivg "" -+//go:cgo_import_dynamic $s10Foundation4DataV9copyBytes2to5countySpys5UInt8VG_SitF $s10Foundation4DataV9copyBytes2to5countySpys5UInt8VG_SitF "" -+//go:cgo_import_dynamic $s10Foundation4DataV9repeating5countACs5UInt8V_SitcfC $s10Foundation4DataV9repeating5countACs5UInt8V_SitcfC "" -+//go:cgo_import_dynamic $s10Foundation4DataVAA0B8ProtocolAAMc $s10Foundation4DataVAA0B8ProtocolAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVAA15ContiguousBytesAAWP $s10Foundation4DataVAA15ContiguousBytesAAWP "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVACycfC $s10Foundation4DataVACycfC "" -+//go:cgo_import_dynamic $s10Foundation4DataVN $s10Foundation4DataVN "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSKAAMc $s10Foundation4DataVSKAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSTAAMc $s10Foundation4DataVSTAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSlAAMc $s10Foundation4DataVSlAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSmAAMc $s10Foundation4DataVSmAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVyACxcSTRzs5UInt8V7ElementRtzlufC $s10Foundation4DataVyACxcSTRzs5UInt8V7ElementRtzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO4open_5using14authenticating10Foundation4DataVAC9SealedBoxV_AA12SymmetricKeyVxtKAG0I8ProtocolRzlFZ $s9CryptoKit03ChaC4PolyO4open_5using14authenticating10Foundation4DataVAC9SealedBoxV_AA12SymmetricKeyVxtKAG0I8ProtocolRzlFZ "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO4seal_5using5nonce14authenticatingAC9SealedBoxVx_AA12SymmetricKeyVAC5NonceVSgq_tK10Foundation12DataProtocolRzAoPR_r0_lFZ $s9CryptoKit03ChaC4PolyO4seal_5using5nonce14authenticatingAC9SealedBoxVx_AA12SymmetricKeyVAC5NonceVSgq_tK10Foundation12DataProtocolRzAoPR_r0_lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO5NonceV4dataAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit03ChaC4PolyO5NonceV4dataAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO5NonceVMa $s9CryptoKit03ChaC4PolyO5NonceVMa "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO5NonceVMn $s9CryptoKit03ChaC4PolyO5NonceVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO9SealedBoxV10ciphertext10Foundation4DataVvg $s9CryptoKit03ChaC4PolyO9SealedBoxV10ciphertext10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO9SealedBoxV3tag10Foundation4DataVvg $s9CryptoKit03ChaC4PolyO9SealedBoxV3tag10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO9SealedBoxV5nonce10ciphertext3tagAeC5NonceV_xq_tKc10Foundation12DataProtocolRzAkLR_r0_lufC $s9CryptoKit03ChaC4PolyO9SealedBoxV5nonce10ciphertext3tagAeC5NonceV_xq_tKc10Foundation12DataProtocolRzAkLR_r0_lufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0VMa $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VAGycfC $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VAGycfC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VMa $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV9signature3for10Foundation4DataVx_tKAJ0J8ProtocolRzlF $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV9signature3for10Foundation4DataVx_tKAJ0J8ProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVAGycfC $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVAGycfC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVMa $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAjKR_r0_lF $s9CryptoKit10Curve25519O7SigningO9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAjKR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMa $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMn $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12HashFunctionPAAE4hash4data6DigestQzqd___t10Foundation12DataProtocolRd__lFZ $s9CryptoKit12HashFunctionPAAE4hash4data6DigestQzqd___t10Foundation12DataProtocolRd__lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit12HashFunctionPAAE6update4datayqd___t10Foundation12DataProtocolRd__lF $s9CryptoKit12HashFunctionPAAE6update4datayqd___t10Foundation12DataProtocolRd__lF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA256DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SHA256DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA256DigestVAA0D0AAMc $s9CryptoKit12SHA256DigestVAA0D0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SHA256DigestVMa $s9CryptoKit12SHA256DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA384DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SHA384DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA384DigestVAA0D0AAMc $s9CryptoKit12SHA384DigestVAA0D0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SHA384DigestVMa $s9CryptoKit12SHA384DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA512DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SHA512DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA512DigestVAA0D0AAMc $s9CryptoKit12SHA512DigestVAA0D0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SHA512DigestVMa $s9CryptoKit12SHA512DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SharedSecretV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SharedSecretV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SharedSecretVMa $s9CryptoKit12SharedSecretVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyV10Foundation15ContiguousBytesAAMc $s9CryptoKit12SymmetricKeyV10Foundation15ContiguousBytesAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SymmetricKeyV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyV4dataACx_tc10Foundation15ContiguousBytesRzlufC $s9CryptoKit12SymmetricKeyV4dataACx_tc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyVMa $s9CryptoKit12SymmetricKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_256DigestVMa $s9CryptoKit14SHA3_256DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_256DigestVSTAAMc $s9CryptoKit14SHA3_256DigestVSTAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_384DigestVMa $s9CryptoKit14SHA3_384DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_384DigestVSTAAMc $s9CryptoKit14SHA3_384DigestVSTAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_512DigestVMa $s9CryptoKit14SHA3_512DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_512DigestVSTAAMc $s9CryptoKit14SHA3_512DigestVSTAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit24HashedAuthenticationCodeVMn $s9CryptoKit24HashedAuthenticationCodeVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit24HashedAuthenticationCodeVyxGAA07MessagedE0AAMc $s9CryptoKit24HashedAuthenticationCodeVyxGAA07MessagedE0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit24HashedAuthenticationCodeVyxGSTAAMc $s9CryptoKit24HashedAuthenticationCodeVyxGSTAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO4open_5using14authenticating10Foundation4DataVAE9SealedBoxV_AA12SymmetricKeyVxtKAI0I8ProtocolRzlFZ $s9CryptoKit3AESO3GCMO4open_5using14authenticating10Foundation4DataVAE9SealedBoxV_AA12SymmetricKeyVxtKAI0I8ProtocolRzlFZ "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO4seal_5using5nonce14authenticatingAE9SealedBoxVx_AA12SymmetricKeyVAE5NonceVSgq_tK10Foundation12DataProtocolRzAqRR_r0_lFZ $s9CryptoKit3AESO3GCMO4seal_5using5nonce14authenticatingAE9SealedBoxVx_AA12SymmetricKeyVAE5NonceVSgq_tK10Foundation12DataProtocolRzAqRR_r0_lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO5NonceV4dataAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit3AESO3GCMO5NonceV4dataAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO5NonceVMa $s9CryptoKit3AESO3GCMO5NonceVMa "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO5NonceVMn $s9CryptoKit3AESO3GCMO5NonceVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxV10ciphertext10Foundation4DataVvg $s9CryptoKit3AESO3GCMO9SealedBoxV10ciphertext10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxV3tag10Foundation4DataVvg $s9CryptoKit3AESO3GCMO9SealedBoxV3tag10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxV5nonce10ciphertext3tagAgE5NonceV_xq_tKc10Foundation12DataProtocolRzAmNR_r0_lufC $s9CryptoKit3AESO3GCMO9SealedBoxV5nonce10ciphertext3tagAgE5NonceV_xq_tKc10Foundation12DataProtocolRzAmNR_r0_lufC "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxVMa $s9CryptoKit3AESO3GCMO9SealedBoxVMa "" -+//go:cgo_import_dynamic $s9CryptoKit3KEMO19EncapsulationResultV12encapsulated10Foundation4DataVvg $s9CryptoKit3KEMO19EncapsulationResultV12encapsulated10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3KEMO19EncapsulationResultV12sharedSecretAA12SymmetricKeyVvg $s9CryptoKit3KEMO19EncapsulationResultV12sharedSecretAA12SymmetricKeyVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3KEMO19EncapsulationResultVMa $s9CryptoKit3KEMO19EncapsulationResultVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4HKDFV6expand15pseudoRandomKey4info15outputByteCountAA09SymmetricG0Vqd___qd_0_SgSit10Foundation15ContiguousBytesRd__AK12DataProtocolRd_0_r0_lFZ $s9CryptoKit4HKDFV6expand15pseudoRandomKey4info15outputByteCountAA09SymmetricG0Vqd___qd_0_SgSit10Foundation15ContiguousBytesRd__AK12DataProtocolRd_0_r0_lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit4HKDFV7extract16inputKeyMaterial4saltAA24HashedAuthenticationCodeVyxGAA09SymmetricF0V_qd__Sgt10Foundation12DataProtocolRd__lFZ $s9CryptoKit4HKDFV7extract16inputKeyMaterial4saltAA24HashedAuthenticationCodeVyxGAA09SymmetricF0V_qd__Sgt10Foundation12DataProtocolRd__lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACV3keyACyxGAA12SymmetricKeyV_tcfC $s9CryptoKit4HMACV3keyACyxGAA12SymmetricKeyV_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACV6update4datayqd___t10Foundation12DataProtocolRd__lF $s9CryptoKit4HMACV6update4datayqd___t10Foundation12DataProtocolRd__lF "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACV8finalizeAA24HashedAuthenticationCodeVyxGyF $s9CryptoKit4HMACV8finalizeAA24HashedAuthenticationCodeVyxGyF "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACVMn $s9CryptoKit4HMACVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO06PublicD0VMa $s9CryptoKit4P256O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0VMa $s9CryptoKit4P256O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit4P256O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC $s9CryptoKit4P256O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF $s9CryptoKit4P256O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyVMa $s9CryptoKit4P256O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO14ECDSASignatureVMa $s9CryptoKit4P256O7SigningO14ECDSASignatureVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF $s9CryptoKit4P256O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyVMa $s9CryptoKit4P256O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO06PublicD0VMa $s9CryptoKit4P384O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0VMa $s9CryptoKit4P384O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit4P384O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC $s9CryptoKit4P384O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF $s9CryptoKit4P384O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyVMa $s9CryptoKit4P384O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO14ECDSASignatureVMa $s9CryptoKit4P384O7SigningO14ECDSASignatureVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF $s9CryptoKit4P384O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyVMa $s9CryptoKit4P384O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO06PublicD0VMa $s9CryptoKit4P521O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0VMa $s9CryptoKit4P521O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit4P521O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC $s9CryptoKit4P521O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF $s9CryptoKit4P521O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyVMa $s9CryptoKit4P521O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO14ECDSASignatureVMa $s9CryptoKit4P521O7SigningO14ECDSASignatureVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF $s9CryptoKit4P521O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyVMa $s9CryptoKit4P521O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit6DigestP9byteCountSivgZTj $s9CryptoKit6DigestP9byteCountSivgZTj "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256V14blockByteCountSivgZ $s9CryptoKit6SHA256V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256V8finalizeAA0C6DigestVyF $s9CryptoKit6SHA256V8finalizeAA0C6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256V9byteCountSivgZ $s9CryptoKit6SHA256V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VAA12HashFunctionAAMc $s9CryptoKit6SHA256VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VACycfC $s9CryptoKit6SHA256VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VMa $s9CryptoKit6SHA256VMa "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VMn $s9CryptoKit6SHA256VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384V14blockByteCountSivgZ $s9CryptoKit6SHA384V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384V8finalizeAA0C6DigestVyF $s9CryptoKit6SHA384V8finalizeAA0C6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384V9byteCountSivgZ $s9CryptoKit6SHA384V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VAA12HashFunctionAAMc $s9CryptoKit6SHA384VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VACycfC $s9CryptoKit6SHA384VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VMa $s9CryptoKit6SHA384VMa "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VMn $s9CryptoKit6SHA384VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512V14blockByteCountSivgZ $s9CryptoKit6SHA512V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512V8finalizeAA0C6DigestVyF $s9CryptoKit6SHA512V8finalizeAA0C6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512V9byteCountSivgZ $s9CryptoKit6SHA512V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VAA12HashFunctionAAMc $s9CryptoKit6SHA512VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VACycfC $s9CryptoKit6SHA512VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VMa $s9CryptoKit6SHA512VMa "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VMn $s9CryptoKit6SHA512VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit7MLDSA65O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyVAEyKcfC $s9CryptoKit7MLDSA65O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyVMa $s9CryptoKit7MLDSA65O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyVMa $s9CryptoKit7MLDSA65O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyVMn $s9CryptoKit7MLDSA65O9PublicKeyVMn "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit7MLDSA87O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyVAEyKcfC $s9CryptoKit7MLDSA87O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyVMa $s9CryptoKit7MLDSA87O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyVMa $s9CryptoKit7MLDSA87O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyVMn $s9CryptoKit7MLDSA87O9PublicKeyVMn "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO10SHA1DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit8InsecureO10SHA1DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO10SHA1DigestVMa $s9CryptoKit8InsecureO10SHA1DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5V14blockByteCountSivgZ $s9CryptoKit8InsecureO3MD5V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5V8finalizeAC0D6DigestVyF $s9CryptoKit8InsecureO3MD5V8finalizeAC0D6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5V9byteCountSivgZ $s9CryptoKit8InsecureO3MD5V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VAA12HashFunctionAAMc $s9CryptoKit8InsecureO3MD5VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VAEycfC $s9CryptoKit8InsecureO3MD5VAEycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VMa $s9CryptoKit8InsecureO3MD5VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VMn $s9CryptoKit8InsecureO3MD5VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1V14blockByteCountSivgZ $s9CryptoKit8InsecureO4SHA1V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1V8finalizeAC0D6DigestVyF $s9CryptoKit8InsecureO4SHA1V8finalizeAC0D6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1V9byteCountSivgZ $s9CryptoKit8InsecureO4SHA1V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VAA12HashFunctionAAMc $s9CryptoKit8InsecureO4SHA1VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VAEycfC $s9CryptoKit8InsecureO4SHA1VAEycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VMa $s9CryptoKit8InsecureO4SHA1VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VMn $s9CryptoKit8InsecureO4SHA1VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO9MD5DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit8InsecureO9MD5DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO9MD5DigestVMa $s9CryptoKit8InsecureO9MD5DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit8MLKEM768O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF $s9CryptoKit8MLKEM768O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyVAEyKcfC $s9CryptoKit8MLKEM768O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyVMa $s9CryptoKit8MLKEM768O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF $s9CryptoKit8MLKEM768O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyVMa $s9CryptoKit8MLKEM768O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyVMn $s9CryptoKit8MLKEM768O9PublicKeyVMn "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256V14blockByteCountSivgZ $s9CryptoKit8SHA3_256V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256V8finalizeAA0C10_256DigestVyF $s9CryptoKit8SHA3_256V8finalizeAA0C10_256DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256V9byteCountSivgZ $s9CryptoKit8SHA3_256V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256VAA12HashFunctionAAMc $s9CryptoKit8SHA3_256VAA12HashFunctionAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256VACycfC $s9CryptoKit8SHA3_256VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256VMa $s9CryptoKit8SHA3_256VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384V14blockByteCountSivgZ $s9CryptoKit8SHA3_384V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384V8finalizeAA0C10_384DigestVyF $s9CryptoKit8SHA3_384V8finalizeAA0C10_384DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384V9byteCountSivgZ $s9CryptoKit8SHA3_384V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384VAA12HashFunctionAAMc $s9CryptoKit8SHA3_384VAA12HashFunctionAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384VACycfC $s9CryptoKit8SHA3_384VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384VMa $s9CryptoKit8SHA3_384VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512V14blockByteCountSivgZ $s9CryptoKit8SHA3_512V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512V8finalizeAA0C10_512DigestVyF $s9CryptoKit8SHA3_512V8finalizeAA0C10_512DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512V9byteCountSivgZ $s9CryptoKit8SHA3_512V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512VAA12HashFunctionAAMc $s9CryptoKit8SHA3_512VAA12HashFunctionAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512VACycfC $s9CryptoKit8SHA3_512VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512VMa $s9CryptoKit8SHA3_512VMa "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit9MLKEM1024O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF $s9CryptoKit9MLKEM1024O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyVAEyKcfC $s9CryptoKit9MLKEM1024O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyVMa $s9CryptoKit9MLKEM1024O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF $s9CryptoKit9MLKEM1024O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyVMa $s9CryptoKit9MLKEM1024O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyVMn $s9CryptoKit9MLKEM1024O9PublicKeyVMn "" -+//go:cgo_import_dynamic $sSKsE6suffixy11SubSequenceQzSiF $sSKsE6suffixy11SubSequenceQzSiF "" -+//go:cgo_import_dynamic $sSS19stringInterpolationSSs013DefaultStringB0V_tcfC $sSS19stringInterpolationSSs013DefaultStringB0V_tcfC "" -+//go:cgo_import_dynamic $sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC $sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC "" -+//go:cgo_import_dynamic $sSW10Foundation12DataProtocolAAMc $sSW10Foundation12DataProtocolAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $sSW4load14fromByteOffset2asxSi_xmtlF $sSW4load14fromByteOffset2asxSi_xmtlF "" -+//go:cgo_import_dynamic $sSW5countSivg $sSW5countSivg "" -+//go:cgo_import_dynamic $sSWN $sSWN "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSWSTsWP $sSWSTsWP "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSWSlsMc $sSWSlsMc "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSiN $sSiN "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSis23CustomStringConvertiblesWP $sSis23CustomStringConvertiblesWP "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSlsE6prefixy11SubSequenceQzSiF $sSlsE6prefixy11SubSequenceQzSiF "" -+//go:cgo_import_dynamic $sSmsE1poiyxx_qd__tSmRd__7ElementQyd__ABRtzlFZ $sSmsE1poiyxx_qd__tSmRd__7ElementQyd__ABRtzlFZ "" -+//go:cgo_import_dynamic $sSp10deallocateyyF $sSp10deallocateyyF "" -+//go:cgo_import_dynamic $sSp8allocate8capacitySpyxGSi_tFZ $sSp8allocate8capacitySpyxGSi_tFZ "" -+//go:cgo_import_dynamic $sSw9copyBytes4fromyx_tSlRzs5UInt8V7ElementRtzlF $sSw9copyBytes4fromyx_tSlRzs5UInt8V7ElementRtzlF "" -+//go:cgo_import_dynamic $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF "" -+//go:cgo_import_dynamic $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF "" -+//go:cgo_import_dynamic $ss18_fatalErrorMessage__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF $ss18_fatalErrorMessage__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF "" -+//go:cgo_import_dynamic $ss26DefaultStringInterpolationV06appendC0yyxs06CustomB11ConvertibleRzlF $ss26DefaultStringInterpolationV06appendC0yyxs06CustomB11ConvertibleRzlF "" -+//go:cgo_import_dynamic $ss26DefaultStringInterpolationV13appendLiteralyySSF $ss26DefaultStringInterpolationV13appendLiteralyySSF "" -+//go:cgo_import_dynamic $ss26DefaultStringInterpolationV15literalCapacity18interpolationCountABSi_SitcfC $ss26DefaultStringInterpolationV15literalCapacity18interpolationCountABSi_SitcfC "" -+//go:cgo_import_dynamic $ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF $ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF "" -+//go:cgo_import_dynamic $sytN $sytN "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic ___chkstk_darwin ___chkstk_darwin "" -+//go:cgo_import_dynamic memcpy memcpy "" -+//go:cgo_import_dynamic memset memset "" -+//go:cgo_import_dynamic swift_allocBox swift_allocBox "" -+//go:cgo_import_dynamic swift_beginAccess swift_beginAccess "" -+//go:cgo_import_dynamic swift_bridgeObjectRelease swift_bridgeObjectRelease "" -+//go:cgo_import_dynamic swift_bridgeObjectRetain swift_bridgeObjectRetain "" -+//go:cgo_import_dynamic swift_endAccess swift_endAccess "" -+//go:cgo_import_dynamic swift_errorRelease swift_errorRelease "" -+//go:cgo_import_dynamic swift_getTypeByMangledNameInContext swift_getTypeByMangledNameInContext "" -+//go:cgo_import_dynamic swift_getTypeByMangledNameInContextInMetadataState swift_getTypeByMangledNameInContextInMetadataState "" -+//go:cgo_import_dynamic swift_getWitnessTable swift_getWitnessTable "" -+//go:cgo_import_dynamic swift_release swift_release "" -+//go:cgo_import_dynamic swift_retain swift_retain "" -+//go:cgo_import_dynamic swift_unexpectedError swift_unexpectedError "" -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_arm64.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_arm64.go -new file mode 100644 -index 00000000000000..ce5806b1910da9 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/cryptokit/zcryptokit_swift_arm64.go -@@ -0,0 +1,306 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+// Code generated by genswiftimports. DO NOT EDIT. -+ -+//go:build !cgo && darwin && arm64 -+ -+package cryptokit -+ -+//go:cgo_import_dynamic $s10Foundation12DataProtocolPAAE9copyBytes2toSiSw_tF $s10Foundation12DataProtocolPAAE9copyBytes2toSiSw_tF "" -+//go:cgo_import_dynamic $s10Foundation15ContiguousBytesP010withUnsafeC0yqd__qd__SWKXEKlFTj $s10Foundation15ContiguousBytesP010withUnsafeC0yqd__qd__SWKXEKlFTj "" -+//go:cgo_import_dynamic $s10Foundation4DataV15withUnsafeBytesyxxSWKXEKlF $s10Foundation4DataV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s10Foundation4DataV5bytes5countACSV_SitcfC $s10Foundation4DataV5bytes5countACSV_SitcfC "" -+//go:cgo_import_dynamic $s10Foundation4DataV5countSivg $s10Foundation4DataV5countSivg "" -+//go:cgo_import_dynamic $s10Foundation4DataV9copyBytes2to5countySpys5UInt8VG_SitF $s10Foundation4DataV9copyBytes2to5countySpys5UInt8VG_SitF "" -+//go:cgo_import_dynamic $s10Foundation4DataV9repeating5countACs5UInt8V_SitcfC $s10Foundation4DataV9repeating5countACs5UInt8V_SitcfC "" -+//go:cgo_import_dynamic $s10Foundation4DataVAA0B8ProtocolAAMc $s10Foundation4DataVAA0B8ProtocolAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVAA15ContiguousBytesAAWP $s10Foundation4DataVAA15ContiguousBytesAAWP "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVACycfC $s10Foundation4DataVACycfC "" -+//go:cgo_import_dynamic $s10Foundation4DataVN $s10Foundation4DataVN "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSKAAMc $s10Foundation4DataVSKAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSTAAMc $s10Foundation4DataVSTAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSlAAMc $s10Foundation4DataVSlAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVSmAAMc $s10Foundation4DataVSmAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $s10Foundation4DataVyACxcSTRzs5UInt8V7ElementRtzlufC $s10Foundation4DataVyACxcSTRzs5UInt8V7ElementRtzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO4open_5using14authenticating10Foundation4DataVAC9SealedBoxV_AA12SymmetricKeyVxtKAG0I8ProtocolRzlFZ $s9CryptoKit03ChaC4PolyO4open_5using14authenticating10Foundation4DataVAC9SealedBoxV_AA12SymmetricKeyVxtKAG0I8ProtocolRzlFZ "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO4seal_5using5nonce14authenticatingAC9SealedBoxVx_AA12SymmetricKeyVAC5NonceVSgq_tK10Foundation12DataProtocolRzAoPR_r0_lFZ $s9CryptoKit03ChaC4PolyO4seal_5using5nonce14authenticatingAC9SealedBoxVx_AA12SymmetricKeyVAC5NonceVSgq_tK10Foundation12DataProtocolRzAoPR_r0_lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO5NonceV4dataAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit03ChaC4PolyO5NonceV4dataAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO5NonceVMa $s9CryptoKit03ChaC4PolyO5NonceVMa "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO5NonceVMn $s9CryptoKit03ChaC4PolyO5NonceVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO9SealedBoxV10ciphertext10Foundation4DataVvg $s9CryptoKit03ChaC4PolyO9SealedBoxV10ciphertext10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO9SealedBoxV3tag10Foundation4DataVvg $s9CryptoKit03ChaC4PolyO9SealedBoxV3tag10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit03ChaC4PolyO9SealedBoxV5nonce10ciphertext3tagAeC5NonceV_xq_tKc10Foundation12DataProtocolRzAkLR_r0_lufC $s9CryptoKit03ChaC4PolyO9SealedBoxV5nonce10ciphertext3tagAeC5NonceV_xq_tKc10Foundation12DataProtocolRzAkLR_r0_lufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0VMa $s9CryptoKit10Curve25519O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VAGycfC $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VAGycfC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VMa $s9CryptoKit10Curve25519O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV9signature3for10Foundation4DataVx_tKAJ0J8ProtocolRzlF $s9CryptoKit10Curve25519O7SigningO10PrivateKeyV9signature3for10Foundation4DataVx_tKAJ0J8ProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVAGycfC $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVAGycfC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVMa $s9CryptoKit10Curve25519O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAjKR_r0_lF $s9CryptoKit10Curve25519O7SigningO9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAjKR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit10Curve25519O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMa $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMn $s9CryptoKit10Curve25519O7SigningO9PublicKeyVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12HashFunctionPAAE4hash4data6DigestQzqd___t10Foundation12DataProtocolRd__lFZ $s9CryptoKit12HashFunctionPAAE4hash4data6DigestQzqd___t10Foundation12DataProtocolRd__lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit12HashFunctionPAAE6update4datayqd___t10Foundation12DataProtocolRd__lF $s9CryptoKit12HashFunctionPAAE6update4datayqd___t10Foundation12DataProtocolRd__lF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA256DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SHA256DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA256DigestVAA0D0AAMc $s9CryptoKit12SHA256DigestVAA0D0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SHA256DigestVMa $s9CryptoKit12SHA256DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA384DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SHA384DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA384DigestVAA0D0AAMc $s9CryptoKit12SHA384DigestVAA0D0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SHA384DigestVMa $s9CryptoKit12SHA384DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA512DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SHA512DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SHA512DigestVAA0D0AAMc $s9CryptoKit12SHA512DigestVAA0D0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SHA512DigestVMa $s9CryptoKit12SHA512DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SharedSecretV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SharedSecretV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SharedSecretVMa $s9CryptoKit12SharedSecretVMa "" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyV10Foundation15ContiguousBytesAAMc $s9CryptoKit12SymmetricKeyV10Foundation15ContiguousBytesAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit12SymmetricKeyV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyV4dataACx_tc10Foundation15ContiguousBytesRzlufC $s9CryptoKit12SymmetricKeyV4dataACx_tc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit12SymmetricKeyVMa $s9CryptoKit12SymmetricKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_256DigestVMa $s9CryptoKit14SHA3_256DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_256DigestVSTAAMc $s9CryptoKit14SHA3_256DigestVSTAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_384DigestVMa $s9CryptoKit14SHA3_384DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_384DigestVSTAAMc $s9CryptoKit14SHA3_384DigestVSTAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_512DigestVMa $s9CryptoKit14SHA3_512DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit14SHA3_512DigestVSTAAMc $s9CryptoKit14SHA3_512DigestVSTAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit24HashedAuthenticationCodeVMn $s9CryptoKit24HashedAuthenticationCodeVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit24HashedAuthenticationCodeVyxGAA07MessagedE0AAMc $s9CryptoKit24HashedAuthenticationCodeVyxGAA07MessagedE0AAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit24HashedAuthenticationCodeVyxGSTAAMc $s9CryptoKit24HashedAuthenticationCodeVyxGSTAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO4open_5using14authenticating10Foundation4DataVAE9SealedBoxV_AA12SymmetricKeyVxtKAI0I8ProtocolRzlFZ $s9CryptoKit3AESO3GCMO4open_5using14authenticating10Foundation4DataVAE9SealedBoxV_AA12SymmetricKeyVxtKAI0I8ProtocolRzlFZ "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO4seal_5using5nonce14authenticatingAE9SealedBoxVx_AA12SymmetricKeyVAE5NonceVSgq_tK10Foundation12DataProtocolRzAqRR_r0_lFZ $s9CryptoKit3AESO3GCMO4seal_5using5nonce14authenticatingAE9SealedBoxVx_AA12SymmetricKeyVAE5NonceVSgq_tK10Foundation12DataProtocolRzAqRR_r0_lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO5NonceV4dataAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit3AESO3GCMO5NonceV4dataAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO5NonceVMa $s9CryptoKit3AESO3GCMO5NonceVMa "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO5NonceVMn $s9CryptoKit3AESO3GCMO5NonceVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxV10ciphertext10Foundation4DataVvg $s9CryptoKit3AESO3GCMO9SealedBoxV10ciphertext10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxV3tag10Foundation4DataVvg $s9CryptoKit3AESO3GCMO9SealedBoxV3tag10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxV5nonce10ciphertext3tagAgE5NonceV_xq_tKc10Foundation12DataProtocolRzAmNR_r0_lufC $s9CryptoKit3AESO3GCMO9SealedBoxV5nonce10ciphertext3tagAgE5NonceV_xq_tKc10Foundation12DataProtocolRzAmNR_r0_lufC "" -+//go:cgo_import_dynamic $s9CryptoKit3AESO3GCMO9SealedBoxVMa $s9CryptoKit3AESO3GCMO9SealedBoxVMa "" -+//go:cgo_import_dynamic $s9CryptoKit3KEMO19EncapsulationResultV12encapsulated10Foundation4DataVvg $s9CryptoKit3KEMO19EncapsulationResultV12encapsulated10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3KEMO19EncapsulationResultV12sharedSecretAA12SymmetricKeyVvg $s9CryptoKit3KEMO19EncapsulationResultV12sharedSecretAA12SymmetricKeyVvg "" -+//go:cgo_import_dynamic $s9CryptoKit3KEMO19EncapsulationResultVMa $s9CryptoKit3KEMO19EncapsulationResultVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4HKDFV6expand15pseudoRandomKey4info15outputByteCountAA09SymmetricG0Vqd___qd_0_SgSit10Foundation15ContiguousBytesRd__AK12DataProtocolRd_0_r0_lFZ $s9CryptoKit4HKDFV6expand15pseudoRandomKey4info15outputByteCountAA09SymmetricG0Vqd___qd_0_SgSit10Foundation15ContiguousBytesRd__AK12DataProtocolRd_0_r0_lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit4HKDFV7extract16inputKeyMaterial4saltAA24HashedAuthenticationCodeVyxGAA09SymmetricF0V_qd__Sgt10Foundation12DataProtocolRd__lFZ $s9CryptoKit4HKDFV7extract16inputKeyMaterial4saltAA24HashedAuthenticationCodeVyxGAA09SymmetricF0V_qd__Sgt10Foundation12DataProtocolRd__lFZ "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACV3keyACyxGAA12SymmetricKeyV_tcfC $s9CryptoKit4HMACV3keyACyxGAA12SymmetricKeyV_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACV6update4datayqd___t10Foundation12DataProtocolRd__lF $s9CryptoKit4HMACV6update4datayqd___t10Foundation12DataProtocolRd__lF "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACV8finalizeAA24HashedAuthenticationCodeVyxGyF $s9CryptoKit4HMACV8finalizeAA24HashedAuthenticationCodeVyxGyF "" -+//go:cgo_import_dynamic $s9CryptoKit4HMACVMn $s9CryptoKit4HMACVMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO06PublicD0VMa $s9CryptoKit4P256O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC $s9CryptoKit4P256O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O12KeyAgreementO07PrivateD0VMa $s9CryptoKit4P256O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit4P256O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC $s9CryptoKit4P256O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF $s9CryptoKit4P256O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO10PrivateKeyVMa $s9CryptoKit4P256O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit4P256O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO14ECDSASignatureVMa $s9CryptoKit4P256O7SigningO14ECDSASignatureVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF $s9CryptoKit4P256O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P256O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P256O7SigningO9PublicKeyVMa $s9CryptoKit4P256O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO06PublicD0VMa $s9CryptoKit4P384O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC $s9CryptoKit4P384O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O12KeyAgreementO07PrivateD0VMa $s9CryptoKit4P384O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit4P384O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC $s9CryptoKit4P384O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF $s9CryptoKit4P384O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO10PrivateKeyVMa $s9CryptoKit4P384O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit4P384O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO14ECDSASignatureVMa $s9CryptoKit4P384O7SigningO14ECDSASignatureVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF $s9CryptoKit4P384O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P384O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P384O7SigningO9PublicKeyVMa $s9CryptoKit4P384O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963Representation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O12KeyAgreementO06PublicD0V18x963RepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO06PublicD0VMa $s9CryptoKit4P521O12KeyAgreementO06PublicD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V016sharedSecretFromdE04withAA06SharedH0VAE06PublicD0V_tKF "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V06publicD0AE06PublicD0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC $s9CryptoKit4P521O12KeyAgreementO07PrivateD0V20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O12KeyAgreementO07PrivateD0VMa $s9CryptoKit4P521O12KeyAgreementO07PrivateD0VMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg $s9CryptoKit4P521O7SigningO10PrivateKeyV06publicF0AE06PublicF0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O7SigningO10PrivateKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC $s9CryptoKit4P521O7SigningO10PrivateKeyV20compactRepresentableAGSb_tcfC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF $s9CryptoKit4P521O7SigningO10PrivateKeyV9signature3forAE14ECDSASignatureVx_tKAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO10PrivateKeyVMa $s9CryptoKit4P521O7SigningO10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit4P521O7SigningO14ECDSASignatureV17derRepresentationAGx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO14ECDSASignatureVMa $s9CryptoKit4P521O7SigningO14ECDSASignatureVMa "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF $s9CryptoKit4P521O7SigningO9PublicKeyV16isValidSignature_3forSbAE14ECDSASignatureV_xtAA6DigestRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC $s9CryptoKit4P521O7SigningO9PublicKeyV17rawRepresentationAGx_tKc10Foundation15ContiguousBytesRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit4P521O7SigningO9PublicKeyVMa $s9CryptoKit4P521O7SigningO9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit6DigestP9byteCountSivgZTj $s9CryptoKit6DigestP9byteCountSivgZTj "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256V14blockByteCountSivgZ $s9CryptoKit6SHA256V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256V8finalizeAA0C6DigestVyF $s9CryptoKit6SHA256V8finalizeAA0C6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256V9byteCountSivgZ $s9CryptoKit6SHA256V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VAA12HashFunctionAAMc $s9CryptoKit6SHA256VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VACycfC $s9CryptoKit6SHA256VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VMa $s9CryptoKit6SHA256VMa "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA256VMn $s9CryptoKit6SHA256VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384V14blockByteCountSivgZ $s9CryptoKit6SHA384V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384V8finalizeAA0C6DigestVyF $s9CryptoKit6SHA384V8finalizeAA0C6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384V9byteCountSivgZ $s9CryptoKit6SHA384V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VAA12HashFunctionAAMc $s9CryptoKit6SHA384VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VACycfC $s9CryptoKit6SHA384VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VMa $s9CryptoKit6SHA384VMa "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA384VMn $s9CryptoKit6SHA384VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512V14blockByteCountSivgZ $s9CryptoKit6SHA512V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512V8finalizeAA0C6DigestVyF $s9CryptoKit6SHA512V8finalizeAA0C6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512V9byteCountSivgZ $s9CryptoKit6SHA512V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VAA12HashFunctionAAMc $s9CryptoKit6SHA512VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VACycfC $s9CryptoKit6SHA512VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VMa $s9CryptoKit6SHA512VMa "" -+//go:cgo_import_dynamic $s9CryptoKit6SHA512VMn $s9CryptoKit6SHA512VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit7MLDSA65O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA65O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF $s9CryptoKit7MLDSA65O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyVAEyKcfC $s9CryptoKit7MLDSA65O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O10PrivateKeyVMa $s9CryptoKit7MLDSA65O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF $s9CryptoKit7MLDSA65O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA65O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyVMa $s9CryptoKit7MLDSA65O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA65O9PublicKeyVMn $s9CryptoKit7MLDSA65O9PublicKeyVMn "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit7MLDSA87O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA87O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for10Foundation4DataVx_tKAH0I8ProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF $s9CryptoKit7MLDSA87O10PrivateKeyV9signature3for7context10Foundation4DataVx_q_tKAI0J8ProtocolRzAiLR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyVAEyKcfC $s9CryptoKit7MLDSA87O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O10PrivateKeyVMa $s9CryptoKit7MLDSA87O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3for7contextSbx_q_q0_t10Foundation12DataProtocolRzAiJR_AiJR0_r1_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF $s9CryptoKit7MLDSA87O9PublicKeyV16isValidSignature_3forSbx_q_t10Foundation12DataProtocolRzAhIR_r0_lF "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit7MLDSA87O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyVMa $s9CryptoKit7MLDSA87O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit7MLDSA87O9PublicKeyVMn $s9CryptoKit7MLDSA87O9PublicKeyVMn "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO10SHA1DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit8InsecureO10SHA1DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO10SHA1DigestVMa $s9CryptoKit8InsecureO10SHA1DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5V14blockByteCountSivgZ $s9CryptoKit8InsecureO3MD5V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5V8finalizeAC0D6DigestVyF $s9CryptoKit8InsecureO3MD5V8finalizeAC0D6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5V9byteCountSivgZ $s9CryptoKit8InsecureO3MD5V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VAA12HashFunctionAAMc $s9CryptoKit8InsecureO3MD5VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VAEycfC $s9CryptoKit8InsecureO3MD5VAEycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VMa $s9CryptoKit8InsecureO3MD5VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO3MD5VMn $s9CryptoKit8InsecureO3MD5VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1V14blockByteCountSivgZ $s9CryptoKit8InsecureO4SHA1V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1V8finalizeAC0D6DigestVyF $s9CryptoKit8InsecureO4SHA1V8finalizeAC0D6DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1V9byteCountSivgZ $s9CryptoKit8InsecureO4SHA1V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VAA12HashFunctionAAMc $s9CryptoKit8InsecureO4SHA1VAA12HashFunctionAAMc "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VAEycfC $s9CryptoKit8InsecureO4SHA1VAEycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VMa $s9CryptoKit8InsecureO4SHA1VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO4SHA1VMn $s9CryptoKit8InsecureO4SHA1VMn "/System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO9MD5DigestV15withUnsafeBytesyxxSWKXEKlF $s9CryptoKit8InsecureO9MD5DigestV15withUnsafeBytesyxxSWKXEKlF "" -+//go:cgo_import_dynamic $s9CryptoKit8InsecureO9MD5DigestVMa $s9CryptoKit8InsecureO9MD5DigestVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit8MLKEM768O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF $s9CryptoKit8MLKEM768O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit8MLKEM768O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyVAEyKcfC $s9CryptoKit8MLKEM768O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O10PrivateKeyVMa $s9CryptoKit8MLKEM768O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF $s9CryptoKit8MLKEM768O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit8MLKEM768O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyVMa $s9CryptoKit8MLKEM768O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit8MLKEM768O9PublicKeyVMn $s9CryptoKit8MLKEM768O9PublicKeyVMn "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256V14blockByteCountSivgZ $s9CryptoKit8SHA3_256V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256V8finalizeAA0C10_256DigestVyF $s9CryptoKit8SHA3_256V8finalizeAA0C10_256DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256V9byteCountSivgZ $s9CryptoKit8SHA3_256V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256VAA12HashFunctionAAMc $s9CryptoKit8SHA3_256VAA12HashFunctionAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256VACycfC $s9CryptoKit8SHA3_256VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_256VMa $s9CryptoKit8SHA3_256VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384V14blockByteCountSivgZ $s9CryptoKit8SHA3_384V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384V8finalizeAA0C10_384DigestVyF $s9CryptoKit8SHA3_384V8finalizeAA0C10_384DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384V9byteCountSivgZ $s9CryptoKit8SHA3_384V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384VAA12HashFunctionAAMc $s9CryptoKit8SHA3_384VAA12HashFunctionAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384VACycfC $s9CryptoKit8SHA3_384VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_384VMa $s9CryptoKit8SHA3_384VMa "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512V14blockByteCountSivgZ $s9CryptoKit8SHA3_512V14blockByteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512V8finalizeAA0C10_512DigestVyF $s9CryptoKit8SHA3_512V8finalizeAA0C10_512DigestVyF "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512V9byteCountSivgZ $s9CryptoKit8SHA3_512V9byteCountSivgZ "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512VAA12HashFunctionAAMc $s9CryptoKit8SHA3_512VAA12HashFunctionAAMc "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512VACycfC $s9CryptoKit8SHA3_512VACycfC "" -+//go:cgo_import_dynamic $s9CryptoKit8SHA3_512VMa $s9CryptoKit8SHA3_512VMa "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV06publicE0AC06PublicE0Vvg $s9CryptoKit9MLKEM1024O10PrivateKeyV06publicE0AC06PublicE0Vvg "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF $s9CryptoKit9MLKEM1024O10PrivateKeyV11decapsulateyAA09SymmetricE0VxK10Foundation12DataProtocolRzlF "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation06publicE0AEx_AC06PublicE0VSgtKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation10Foundation4DataVvg $s9CryptoKit9MLKEM1024O10PrivateKeyV18seedRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyVAEyKcfC $s9CryptoKit9MLKEM1024O10PrivateKeyVAEyKcfC "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O10PrivateKeyVMa $s9CryptoKit9MLKEM1024O10PrivateKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF $s9CryptoKit9MLKEM1024O9PublicKeyV11encapsulateAA3KEMO19EncapsulationResultVyKF "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentation10Foundation4DataVvg $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentation10Foundation4DataVvg "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC $s9CryptoKit9MLKEM1024O9PublicKeyV17rawRepresentationAEx_tKc10Foundation12DataProtocolRzlufC "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyVMa $s9CryptoKit9MLKEM1024O9PublicKeyVMa "" -+//go:cgo_import_dynamic $s9CryptoKit9MLKEM1024O9PublicKeyVMn $s9CryptoKit9MLKEM1024O9PublicKeyVMn "" -+//go:cgo_import_dynamic $sSKsE6suffixy11SubSequenceQzSiF $sSKsE6suffixy11SubSequenceQzSiF "" -+//go:cgo_import_dynamic $sSS19stringInterpolationSSs013DefaultStringB0V_tcfC $sSS19stringInterpolationSSs013DefaultStringB0V_tcfC "" -+//go:cgo_import_dynamic $sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC $sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC "" -+//go:cgo_import_dynamic $sSW10Foundation12DataProtocolAAMc $sSW10Foundation12DataProtocolAAMc "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" -+//go:cgo_import_dynamic $sSW4load14fromByteOffset2asxSi_xmtlF $sSW4load14fromByteOffset2asxSi_xmtlF "" -+//go:cgo_import_dynamic $sSW5countSivg $sSW5countSivg "" -+//go:cgo_import_dynamic $sSWN $sSWN "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSWSTsWP $sSWSTsWP "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSWSlsMc $sSWSlsMc "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSiN $sSiN "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSis23CustomStringConvertiblesWP $sSis23CustomStringConvertiblesWP "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic $sSlsE6prefixy11SubSequenceQzSiF $sSlsE6prefixy11SubSequenceQzSiF "" -+//go:cgo_import_dynamic $sSmsE1poiyxx_qd__tSmRd__7ElementQyd__ABRtzlFZ $sSmsE1poiyxx_qd__tSmRd__7ElementQyd__ABRtzlFZ "" -+//go:cgo_import_dynamic $sSp10deallocateyyF $sSp10deallocateyyF "" -+//go:cgo_import_dynamic $sSp8allocate8capacitySpyxGSi_tFZ $sSp8allocate8capacitySpyxGSi_tFZ "" -+//go:cgo_import_dynamic $sSw9copyBytes4fromyx_tSlRzs5UInt8V7ElementRtzlF $sSw9copyBytes4fromyx_tSlRzs5UInt8V7ElementRtzlF "" -+//go:cgo_import_dynamic $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF "" -+//go:cgo_import_dynamic $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF "" -+//go:cgo_import_dynamic $ss18_fatalErrorMessage__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF $ss18_fatalErrorMessage__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF "" -+//go:cgo_import_dynamic $ss26DefaultStringInterpolationV06appendC0yyxs06CustomB11ConvertibleRzlF $ss26DefaultStringInterpolationV06appendC0yyxs06CustomB11ConvertibleRzlF "" -+//go:cgo_import_dynamic $ss26DefaultStringInterpolationV13appendLiteralyySSF $ss26DefaultStringInterpolationV13appendLiteralyySSF "" -+//go:cgo_import_dynamic $ss26DefaultStringInterpolationV15literalCapacity18interpolationCountABSi_SitcfC $ss26DefaultStringInterpolationV15literalCapacity18interpolationCountABSi_SitcfC "" -+//go:cgo_import_dynamic $ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF $ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF "" -+//go:cgo_import_dynamic $sytN $sytN "/usr/lib/swift/libswiftCore.dylib" -+//go:cgo_import_dynamic __chkstk_darwin __chkstk_darwin "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic memcpy memcpy "" -+//go:cgo_import_dynamic swift_allocBox swift_allocBox "" -+//go:cgo_import_dynamic swift_beginAccess swift_beginAccess "" -+//go:cgo_import_dynamic swift_bridgeObjectRelease swift_bridgeObjectRelease "" -+//go:cgo_import_dynamic swift_bridgeObjectRetain swift_bridgeObjectRetain "" -+//go:cgo_import_dynamic swift_endAccess swift_endAccess "" -+//go:cgo_import_dynamic swift_errorRelease swift_errorRelease "" -+//go:cgo_import_dynamic swift_getTypeByMangledNameInContext swift_getTypeByMangledNameInContext "" -+//go:cgo_import_dynamic swift_getTypeByMangledNameInContextInMetadataState swift_getTypeByMangledNameInContextInMetadataState "" -+//go:cgo_import_dynamic swift_getWitnessTable swift_getWitnessTable "" -+//go:cgo_import_dynamic swift_release swift_release "" -+//go:cgo_import_dynamic swift_retain swift_retain "" -+//go:cgo_import_dynamic swift_unexpectedError swift_unexpectedError "" -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_amd64.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_amd64.h -new file mode 100644 -index 00000000000000..6bb31c929849a8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_amd64.h -@@ -0,0 +1,101 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2021 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI0. -+// -+// These save the frame pointer, so in general, functions that use -+// these should have zero frame size to suppress the automatic frame -+// pointer, though it's harmless to not do this. -+ -+#ifdef GOOS_windows -+ -+// REGS_HOST_TO_ABI0_STACK is the stack bytes used by -+// PUSH_REGS_HOST_TO_ABI0. -+#define REGS_HOST_TO_ABI0_STACK (28*8 + 8) -+ -+// PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from -+// the host ABI to Go ABI0 code. It saves all registers that are -+// callee-save in the host ABI and caller-save in Go ABI0 and prepares -+// for entry to Go. -+// -+// Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag. -+// Clear the DF flag for the Go ABI. -+// MXCSR matches the Go ABI, so we don't have to set that, -+// and Go doesn't modify it, so we don't have to save it. -+#define PUSH_REGS_HOST_TO_ABI0() \ -+ PUSHFQ \ -+ CLD \ -+ ADJSP $(REGS_HOST_TO_ABI0_STACK - 8) \ -+ MOVQ DI, (0*0)(SP) \ -+ MOVQ SI, (1*8)(SP) \ -+ MOVQ BP, (2*8)(SP) \ -+ MOVQ BX, (3*8)(SP) \ -+ MOVQ R12, (4*8)(SP) \ -+ MOVQ R13, (5*8)(SP) \ -+ MOVQ R14, (6*8)(SP) \ -+ MOVQ R15, (7*8)(SP) \ -+ MOVUPS X6, (8*8)(SP) \ -+ MOVUPS X7, (10*8)(SP) \ -+ MOVUPS X8, (12*8)(SP) \ -+ MOVUPS X9, (14*8)(SP) \ -+ MOVUPS X10, (16*8)(SP) \ -+ MOVUPS X11, (18*8)(SP) \ -+ MOVUPS X12, (20*8)(SP) \ -+ MOVUPS X13, (22*8)(SP) \ -+ MOVUPS X14, (24*8)(SP) \ -+ MOVUPS X15, (26*8)(SP) -+ -+#define POP_REGS_HOST_TO_ABI0() \ -+ MOVQ (0*0)(SP), DI \ -+ MOVQ (1*8)(SP), SI \ -+ MOVQ (2*8)(SP), BP \ -+ MOVQ (3*8)(SP), BX \ -+ MOVQ (4*8)(SP), R12 \ -+ MOVQ (5*8)(SP), R13 \ -+ MOVQ (6*8)(SP), R14 \ -+ MOVQ (7*8)(SP), R15 \ -+ MOVUPS (8*8)(SP), X6 \ -+ MOVUPS (10*8)(SP), X7 \ -+ MOVUPS (12*8)(SP), X8 \ -+ MOVUPS (14*8)(SP), X9 \ -+ MOVUPS (16*8)(SP), X10 \ -+ MOVUPS (18*8)(SP), X11 \ -+ MOVUPS (20*8)(SP), X12 \ -+ MOVUPS (22*8)(SP), X13 \ -+ MOVUPS (24*8)(SP), X14 \ -+ MOVUPS (26*8)(SP), X15 \ -+ ADJSP $-(REGS_HOST_TO_ABI0_STACK - 8) \ -+ POPFQ -+ -+#else -+// SysV ABI -+ -+#define REGS_HOST_TO_ABI0_STACK (6*8) -+ -+// SysV MXCSR matches the Go ABI, so we don't have to set that, -+// and Go doesn't modify it, so we don't have to save it. -+// Both SysV and Go require DF to be cleared, so that's already clear. -+// The SysV and Go frame pointer conventions are compatible. -+#define PUSH_REGS_HOST_TO_ABI0() \ -+ ADJSP $(REGS_HOST_TO_ABI0_STACK) \ -+ MOVQ BP, (5*8)(SP) \ -+ LEAQ (5*8)(SP), BP \ -+ MOVQ BX, (0*8)(SP) \ -+ MOVQ R12, (1*8)(SP) \ -+ MOVQ R13, (2*8)(SP) \ -+ MOVQ R14, (3*8)(SP) \ -+ MOVQ R15, (4*8)(SP) -+ -+#define POP_REGS_HOST_TO_ABI0() \ -+ MOVQ (0*8)(SP), BX \ -+ MOVQ (1*8)(SP), R12 \ -+ MOVQ (2*8)(SP), R13 \ -+ MOVQ (3*8)(SP), R14 \ -+ MOVQ (4*8)(SP), R15 \ -+ MOVQ (5*8)(SP), BP \ -+ ADJSP $-(REGS_HOST_TO_ABI0_STACK) -+ -+#endif -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_arm64.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_arm64.h -new file mode 100644 -index 00000000000000..4957e129eae27e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/abi_arm64.h -@@ -0,0 +1,41 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2021 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI0. -+// -+// These macros save and restore the callee-saved registers -+// from the stack, but they don't adjust stack pointer, so -+// the user should prepare stack space in advance. -+// SAVE_R19_TO_R28(offset) saves R19 ~ R28 to the stack space -+// of ((offset)+0*8)(RSP) ~ ((offset)+9*8)(RSP). -+// -+// SAVE_F8_TO_F15(offset) saves F8 ~ F15 to the stack space -+// of ((offset)+0*8)(RSP) ~ ((offset)+7*8)(RSP). -+// -+// R29 is not saved because Go will save and restore it. -+ -+#define SAVE_R19_TO_R28(offset) \ -+ STP (R19, R20), ((offset)+0*8)(RSP) \ -+ STP (R21, R22), ((offset)+2*8)(RSP) \ -+ STP (R23, R24), ((offset)+4*8)(RSP) \ -+ STP (R25, R26), ((offset)+6*8)(RSP) \ -+ STP (R27, g), ((offset)+8*8)(RSP) -+#define RESTORE_R19_TO_R28(offset) \ -+ LDP ((offset)+0*8)(RSP), (R19, R20) \ -+ LDP ((offset)+2*8)(RSP), (R21, R22) \ -+ LDP ((offset)+4*8)(RSP), (R23, R24) \ -+ LDP ((offset)+6*8)(RSP), (R25, R26) \ -+ LDP ((offset)+8*8)(RSP), (R27, g) /* R28 */ -+#define SAVE_F8_TO_F15(offset) \ -+ FSTPD (F8, F9), ((offset)+0*8)(RSP) \ -+ FSTPD (F10, F11), ((offset)+2*8)(RSP) \ -+ FSTPD (F12, F13), ((offset)+4*8)(RSP) \ -+ FSTPD (F14, F15), ((offset)+6*8)(RSP) -+#define RESTORE_F8_TO_F15(offset) \ -+ FLDPD ((offset)+0*8)(RSP), (F8, F9) \ -+ FLDPD ((offset)+2*8)(RSP), (F10, F11) \ -+ FLDPD ((offset)+4*8)(RSP), (F12, F13) \ -+ FLDPD ((offset)+6*8)(RSP), (F14, F15) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_amd64.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_amd64.s -new file mode 100644 -index 00000000000000..623852da4937cb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_amd64.s -@@ -0,0 +1,41 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_amd64.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+// This signature is known to SWIG, so we can't change it. -+TEXT crosscall2(SB), NOSPLIT, $0-0 -+ PUSH_REGS_HOST_TO_ABI0() -+ -+ // Make room for arguments to cgocallback. -+ ADJSP $0x18 -+ -+#ifndef GOOS_windows -+ MOVQ DI, 0x0(SP) // fn -+ MOVQ SI, 0x8(SP) // arg -+ -+ // Skip n in DX. -+ MOVQ CX, 0x10(SP) // ctxt -+ -+#else -+ MOVQ CX, 0x0(SP) // fn -+ MOVQ DX, 0x8(SP) // arg -+ -+ // Skip n in R8. -+ MOVQ R9, 0x10(SP) // ctxt -+ -+#endif -+ -+ CALL runtime·cgocallback(SB) -+ -+ ADJSP $-0x18 -+ POP_REGS_HOST_TO_ABI0() -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_arm64.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_arm64.s -new file mode 100644 -index 00000000000000..ff58b16c050af6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/asm_arm64.s -@@ -0,0 +1,37 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_arm64.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+/* -+ * We still need to save all callee save register as before, and then -+ * push 3 args for fn (R0, R1, R3), skipping R2. -+ * Also note that at procedure entry in gc world, 8(RSP) will be the -+ * first arg. -+ */ -+ SUB $(8*24), RSP -+ STP (R0, R1), (8*1)(RSP) -+ MOVD R3, (8*3)(RSP) -+ -+ SAVE_R19_TO_R28(8*4) -+ SAVE_F8_TO_F15(8*14) -+ STP (R29, R30), (8*22)(RSP) -+ -+ // Initialize Go ABI environment -+ BL runtime·cgocallback(SB) -+ -+ RESTORE_R19_TO_R28(8*4) -+ RESTORE_F8_TO_F15(8*14) -+ LDP (8*22)(RSP), (R29, R30) -+ -+ ADD $(8*24), RSP -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/callbacks.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/callbacks.go -new file mode 100644 -index 00000000000000..ff5d7f336c9a2a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/callbacks.go -@@ -0,0 +1,95 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+import ( -+ _ "unsafe" -+) -+ -+// TODO: decide if we need _runtime_cgo_panic_internal -+ -+//go:linkname x_cgo_init_trampoline x_cgo_init_trampoline -+//go:linkname _cgo_init _cgo_init -+var x_cgo_init_trampoline byte -+var _cgo_init = &x_cgo_init_trampoline -+ -+// Creates a new system thread without updating any Go state. -+// -+// This method is invoked during shared library loading to create a new OS -+// thread to perform the runtime initialization. This method is similar to -+// _cgo_sys_thread_start except that it doesn't update any Go state. -+ -+//go:linkname x_cgo_thread_start_trampoline x_cgo_thread_start_trampoline -+//go:linkname _cgo_thread_start _cgo_thread_start -+var x_cgo_thread_start_trampoline byte -+var _cgo_thread_start = &x_cgo_thread_start_trampoline -+ -+// Notifies that the runtime has been initialized. -+// -+// We currently block at every CGO entry point (via _cgo_wait_runtime_init_done) -+// to ensure that the runtime has been initialized before the CGO call is -+// executed. This is necessary for shared libraries where we kickoff runtime -+// initialization in a separate thread and return without waiting for this -+// thread to complete the init. -+ -+//go:linkname x_cgo_notify_runtime_init_done_trampoline x_cgo_notify_runtime_init_done_trampoline -+//go:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_done -+var x_cgo_notify_runtime_init_done_trampoline byte -+var _cgo_notify_runtime_init_done = &x_cgo_notify_runtime_init_done_trampoline -+ -+// Indicates whether a dummy thread key has been created or not. -+// -+// When calling go exported function from C, we register a destructor -+// callback, for a dummy thread key, by using pthread_key_create. -+ -+//go:linkname _cgo_pthread_key_created _cgo_pthread_key_created -+var x_cgo_pthread_key_created uintptr -+var _cgo_pthread_key_created = &x_cgo_pthread_key_created -+ -+// Set the x_crosscall2_ptr C function pointer variable point to crosscall2. -+// It's for the runtime package to call at init time. -+func set_crosscall2() { -+ // nothing needs to be done here for fakecgo -+ // because it's possible to just call cgocallback directly -+} -+ -+//go:linkname _set_crosscall2 runtime.set_crosscall2 -+var _set_crosscall2 = set_crosscall2 -+ -+// Store the g into the thread-specific value. -+// So that pthread_key_destructor will dropm when the thread is exiting. -+ -+//go:linkname x_cgo_bindm_trampoline x_cgo_bindm_trampoline -+//go:linkname _cgo_bindm _cgo_bindm -+var x_cgo_bindm_trampoline byte -+var _cgo_bindm = &x_cgo_bindm_trampoline -+ -+// TODO: decide if we need x_cgo_set_context_function -+// TODO: decide if we need _cgo_yield -+ -+var ( -+ // In Go 1.20 the race detector was rewritten to pure Go -+ // on darwin. This means that when CGO_ENABLED=0 is set -+ // fakecgo is built with race detector code. This is not -+ // good since this code is pretending to be C. The go:norace -+ // pragma is not enough, since it only applies to the native -+ // ABIInternal function. The ABIO wrapper (which is necessary, -+ // since all references to text symbols from assembly will use it) -+ // does not inherit the go:norace pragma, so it will still be -+ // instrumented by the race detector. -+ // -+ // To circumvent this issue, using closure calls in the -+ // assembly, which forces the compiler to use the ABIInternal -+ // native implementation (which has go:norace) instead. -+ threadentry_call = threadentry -+ x_cgo_init_call = x_cgo_init -+ x_cgo_setenv_call = x_cgo_setenv -+ x_cgo_unsetenv_call = x_cgo_unsetenv -+ x_cgo_thread_start_call = x_cgo_thread_start -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.go -new file mode 100644 -index 00000000000000..45ffff7707b65e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.go -@@ -0,0 +1,16 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2025 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+import _ "unsafe" -+ -+// setg_trampoline calls setg with the G provided -+func setg_trampoline(setg uintptr, G uintptr) -+ -+// call5 takes fn the C function and 5 arguments and calls the function with those arguments -+func call5(fn, a1, a2, a3, a4, a5 uintptr) uintptr -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.lock b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.lock -new file mode 100644 -index 00000000000000..3a842170f1f5e8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/fakecgo.lock -@@ -0,0 +1,3 @@ -+{ -+ "commit_hash": "1512f327e9958354283654ee4497800e33a7b838" -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/generate.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/generate.go -new file mode 100644 -index 00000000000000..88c4cdf9ec04cc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/generate.go -@@ -0,0 +1,6 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package fakecgo -+ -+//go:generate go run update_tool.go -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_darwin.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_darwin.go -new file mode 100644 -index 00000000000000..e49117058f381e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_darwin.go -@@ -0,0 +1,90 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:nosplit -+//go:norace -+func _cgo_sys_thread_start(ts *ThreadStart) { -+ var attr pthread_attr_t -+ var ign, oset sigset_t -+ var p pthread_t -+ var size size_t -+ var err int -+ -+ sigfillset(&ign) -+ pthread_sigmask(SIG_SETMASK, &ign, &oset) -+ -+ size = pthread_get_stacksize_np(pthread_self()) -+ pthread_attr_init(&attr) -+ pthread_attr_setstacksize(&attr, size) -+ // Leave stacklo=0 and set stackhi=size; mstart will do the rest. -+ ts.g.stackhi = uintptr(size) -+ -+ err = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts) -+ -+ pthread_sigmask(SIG_SETMASK, &oset, nil) -+ -+ if err != 0 { -+ print("fakecgo: pthread_create failed: ") -+ println(err) -+ abort() -+ } -+} -+ -+// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function -+// -+//go:linkname x_threadentry_trampoline threadentry_trampoline -+var x_threadentry_trampoline byte -+var threadentry_trampolineABI0 = &x_threadentry_trampoline -+ -+//go:nosplit -+//go:norace -+func threadentry(v unsafe.Pointer) unsafe.Pointer { -+ ts := *(*ThreadStart)(v) -+ free(v) -+ -+ // TODO: support ios -+ //#if TARGET_OS_IPHONE -+ // darwin_arm_init_thread_exception_port(); -+ //#endif -+ setg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g))) -+ -+ // faking funcs in go is a bit a... involved - but the following works :) -+ fn := uintptr(unsafe.Pointer(&ts.fn)) -+ (*(*func())(unsafe.Pointer(&fn)))() -+ -+ return nil -+} -+ -+// here we will store a pointer to the provided setg func -+var setg_func uintptr -+ -+// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c) -+// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us -+// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup -+// This function can't be go:systemstack since go is not in a state where the systemcheck would work. -+// -+//go:nosplit -+//go:norace -+func x_cgo_init(g *G, setg uintptr) { -+ var size size_t -+ -+ setg_func = setg -+ size = pthread_get_stacksize_np(pthread_self()) -+ g.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096)) -+ -+ //TODO: support ios -+ //#if TARGET_OS_IPHONE -+ // darwin_arm_init_mach_exception_handler(); -+ // darwin_arm_init_thread_exception_port(); -+ // init_working_dir(); -+ //#endif -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_libinit.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_libinit.go -new file mode 100644 -index 00000000000000..b8bfc86edc973a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_libinit.go -@@ -0,0 +1,74 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+var ( -+ pthread_g pthread_key_t -+ -+ runtime_init_cond = PTHREAD_COND_INITIALIZER -+ runtime_init_mu = PTHREAD_MUTEX_INITIALIZER -+ runtime_init_done int -+) -+ -+//go:nosplit -+//go:norace -+func x_cgo_notify_runtime_init_done() { -+ pthread_mutex_lock(&runtime_init_mu) -+ runtime_init_done = 1 -+ pthread_cond_broadcast(&runtime_init_cond) -+ pthread_mutex_unlock(&runtime_init_mu) -+} -+ -+// Store the g into a thread-specific value associated with the pthread key pthread_g. -+// And pthread_key_destructor will dropm when the thread is exiting. -+// -+//go:norace -+func x_cgo_bindm(g unsafe.Pointer) { -+ // We assume this will always succeed, otherwise, there might be extra M leaking, -+ // when a C thread exits after a cgo call. -+ // We only invoke this function once per thread in runtime.needAndBindM, -+ // and the next calls just reuse the bound m. -+ pthread_setspecific(pthread_g, g) -+} -+ -+// _cgo_try_pthread_create retries pthread_create if it fails with -+// EAGAIN. -+// -+//go:nosplit -+//go:norace -+func _cgo_try_pthread_create(thread *pthread_t, attr *pthread_attr_t, pfn unsafe.Pointer, arg *ThreadStart) int { -+ var ts syscall.Timespec -+ // tries needs to be the same type as syscall.Timespec.Nsec -+ // but the fields are int32 on 32bit and int64 on 64bit. -+ // tries is assigned to syscall.Timespec.Nsec in order to match its type. -+ tries := ts.Nsec -+ var err int -+ -+ for tries = 0; tries < 20; tries++ { -+ // inlined this call because it ran out of stack when inlining was disabled -+ err = int(call5(pthread_createABI0, uintptr(unsafe.Pointer(thread)), uintptr(unsafe.Pointer(attr)), uintptr(pfn), uintptr(unsafe.Pointer(arg)), 0)) -+ if err == 0 { -+ // inlined this call because it ran out of stack when inlining was disabled -+ call5(pthread_detachABI0, uintptr(*thread), 0, 0, 0, 0) -+ return 0 -+ } -+ if err != int(syscall.EAGAIN) { -+ return err -+ } -+ ts.Sec = 0 -+ ts.Nsec = (tries + 1) * 1000 * 1000 // Milliseconds. -+ // inlined this call because it ran out of stack when inlining was disabled -+ call5(nanosleepABI0, uintptr(unsafe.Pointer(&ts)), 0, 0, 0, 0) -+ } -+ return int(syscall.EAGAIN) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_setenv.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_setenv.go -new file mode 100644 -index 00000000000000..ac0ca35aa25dc0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_setenv.go -@@ -0,0 +1,20 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+//go:nosplit -+//go:norace -+func x_cgo_setenv(arg *[2]*byte) { -+ setenv(arg[0], arg[1], 1) -+} -+ -+//go:nosplit -+//go:norace -+func x_cgo_unsetenv(arg *[1]*byte) { -+ unsetenv(arg[0]) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_util.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_util.go -new file mode 100644 -index 00000000000000..0e316cc82c12f6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/go_util.go -@@ -0,0 +1,40 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+import "unsafe" -+ -+// _cgo_thread_start is split into three parts in cgo since only one part is system dependent (keep it here for easier handling) -+ -+// _cgo_thread_start(ThreadStart *arg) (runtime/cgo/gcc_util.c) -+// This get's called instead of the go code for creating new threads -+// -> pthread_* stuff is used, so threads are setup correctly for C -+// If this is missing, TLS is only setup correctly on thread 1! -+// This function should be go:systemstack instead of go:nosplit (but that requires runtime) -+// -+//go:nosplit -+//go:norace -+func x_cgo_thread_start(arg *ThreadStart) { -+ var ts *ThreadStart -+ // Make our own copy that can persist after we return. -+ // _cgo_tsan_acquire(); -+ ts = (*ThreadStart)(malloc(unsafe.Sizeof(*ts))) -+ // _cgo_tsan_release(); -+ if ts == nil { -+ println("fakecgo: out of memory in thread_start") -+ abort() -+ } -+ // *ts = *arg would cause a writebarrier so copy using slices -+ const ptrSize = unsafe.Sizeof(uintptr(0)) -+ s1 := unsafe.Slice((*uintptr)(unsafe.Pointer(ts)), unsafe.Sizeof(*ts)/ptrSize) -+ s2 := unsafe.Slice((*uintptr)(unsafe.Pointer(arg)), unsafe.Sizeof(*arg)/ptrSize) -+ for i := range s2 { -+ s1[i] = s2[i] -+ } -+ _cgo_sys_thread_start(ts) // OS-dependent half -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/iscgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/iscgo.go -new file mode 100644 -index 00000000000000..7c0b38637a85da ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/iscgo.go -@@ -0,0 +1,21 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2010 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && darwin -+ -+// The runtime package contains an uninitialized definition -+// for runtime·iscgo. Override it to tell the runtime we're here. -+// There are various function pointers that should be set too, -+// but those depend on dynamic linker magic to get initialized -+// correctly, and sometimes they break. This variable is a -+// backup: it depends only on old C style static linking rules. -+ -+package fakecgo -+ -+import _ "unsafe" // for go:linkname -+ -+//go:linkname _iscgo runtime.iscgo -+var _iscgo bool = true -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo.go -new file mode 100644 -index 00000000000000..666398d611c7e6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo.go -@@ -0,0 +1,41 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+type ( -+ size_t uintptr -+ // Sources: -+ // Darwin (32 bytes) - https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/_types.h#L74 -+ // FreeBSD (32 bytes) - https://github.com/DoctorWkt/xv6-freebsd/blob/d2a294c2a984baed27676068b15ed9a29b06ab6f/include/signal.h#L98C9-L98C21 -+ // Linux (128 bytes) - https://github.com/torvalds/linux/blob/ab75170520d4964f3acf8bb1f91d34cbc650688e/arch/x86/include/asm/signal.h#L25 -+ sigset_t [128]byte -+ pthread_attr_t [64]byte -+ pthread_t int -+ pthread_key_t uint64 -+) -+ -+// for pthread_sigmask: -+ -+type sighow int32 -+ -+const ( -+ SIG_BLOCK sighow = 0 -+ SIG_UNBLOCK sighow = 1 -+ SIG_SETMASK sighow = 2 -+) -+ -+type G struct { -+ stacklo uintptr -+ stackhi uintptr -+} -+ -+type ThreadStart struct { -+ g *G -+ tls *uintptr -+ fn uintptr -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo_darwin.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo_darwin.go -new file mode 100644 -index 00000000000000..2f7a973b34a3a3 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/libcgo_darwin.go -@@ -0,0 +1,28 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+type ( -+ pthread_mutex_t struct { -+ sig int64 -+ opaque [56]byte -+ } -+ pthread_cond_t struct { -+ sig int64 -+ opaque [40]byte -+ } -+) -+ -+var ( -+ PTHREAD_COND_INITIALIZER = pthread_cond_t{sig: 0x3CB0B1BB} -+ PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t{sig: 0x32AAABA7} -+) -+ -+type stack_t struct { -+ /* not implemented */ -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/setenv.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/setenv.go -new file mode 100644 -index 00000000000000..3579d5e7dd1bad ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/setenv.go -@@ -0,0 +1,21 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+import _ "unsafe" // for go:linkname -+ -+//go:linkname x_cgo_setenv_trampoline x_cgo_setenv_trampoline -+//go:linkname _cgo_setenv runtime._cgo_setenv -+var x_cgo_setenv_trampoline byte -+var _cgo_setenv = &x_cgo_setenv_trampoline -+ -+//go:linkname x_cgo_unsetenv_trampoline x_cgo_unsetenv_trampoline -+//go:linkname _cgo_unsetenv runtime._cgo_unsetenv -+var x_cgo_unsetenv_trampoline byte -+var _cgo_unsetenv = &x_cgo_unsetenv_trampoline -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_amd64.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_amd64.s -new file mode 100644 -index 00000000000000..0ec577fa374ed6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_amd64.s -@@ -0,0 +1,109 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+/* -+trampoline for emulating required C functions for cgo in go (see cgo.go) -+(we convert cdecl calling convention to go and vice-versa) -+ -+C Calling convention cdecl used here (we only need integer args): -+1. arg: DI -+2. arg: SI -+3. arg: DX -+4. arg: CX -+5. arg: R8 -+6. arg: R9 -+We don't need floats with these functions -> AX=0 -+return value will be in AX -+temporary register is R11 -+*/ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_amd64.h" -+ -+// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16 -+ MOVQ DI, AX -+ MOVQ SI, BX -+ MOVQ ·x_cgo_init_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_thread_start_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_setenv_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_unsetenv_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 -+ JMP ·x_cgo_notify_runtime_init_done(SB) -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ JMP ·x_cgo_bindm(SB) -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 -+ MOVQ G+8(FP), DI -+ MOVQ setg+0(FP), R11 -+ XORL AX, AX -+ CALL R11 -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $0 -+ // See crosscall2. -+ PUSH_REGS_HOST_TO_ABI0() -+ -+ // X15 is designated by Go as a fixed zero register. -+ // Calling directly into ABIInternal, ensure it is zero. -+ PXOR X15, X15 -+ -+ MOVQ DI, AX -+ MOVQ ·threadentry_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ -+ POP_REGS_HOST_TO_ABI0() -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $0-56 -+ MOVQ fn+0(FP), R11 -+ MOVQ a1+8(FP), DI -+ MOVQ a2+16(FP), SI -+ MOVQ a3+24(FP), DX -+ MOVQ a4+32(FP), CX -+ MOVQ a5+40(FP), R8 -+ -+ XORL AX, AX // no floats -+ -+ PUSHQ BP // save BP -+ MOVQ SP, BP // save SP inside BP bc BP is callee-saved -+ SUBQ $16, SP // allocate space for alignment -+ ANDQ $-16, SP // align on 16 bytes for SSE -+ -+ CALL R11 -+ -+ MOVQ BP, SP // get SP back -+ POPQ BP // restore BP -+ -+ MOVQ AX, ret+48(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_arm64.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_arm64.s -new file mode 100644 -index 00000000000000..a9c6f3d0d59e21 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/trampolines_arm64.s -@@ -0,0 +1,83 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_arm64.h" -+ -+// These trampolines map the gcc ABI to Go ABIInternal and then calls into the Go equivalent functions. -+// Note that C arguments are passed in R0-R7, which matches Go ABIInternal for the first eight arguments. -+// R9 is used as a temporary register. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_init_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_thread_start_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_setenv_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_unsetenv_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 -+ MOVD G+8(FP), R0 -+ MOVD setg+0(FP), R9 -+ CALL R9 -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $0-0 -+ // See crosscall2. -+ SUB $(8*24), RSP -+ STP (R0, R1), (8*1)(RSP) -+ MOVD R3, (8*3)(RSP) -+ -+ SAVE_R19_TO_R28(8*4) -+ SAVE_F8_TO_F15(8*14) -+ -+ MOVD ·threadentry_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ MOVD $0, R0 // TODO: get the return value from threadentry -+ -+ RESTORE_R19_TO_R28(8*4) -+ RESTORE_F8_TO_F15(8*14) -+ ADD $(8*24), RSP -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $0-0 -+ MOVD fn+0(FP), R9 -+ MOVD a1+8(FP), R0 -+ MOVD a2+16(FP), R1 -+ MOVD a3+24(FP), R2 -+ MOVD a4+32(FP), R3 -+ MOVD a5+40(FP), R4 -+ CALL R9 -+ MOVD R0, ret+48(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols.go -new file mode 100644 -index 00000000000000..e0394bb59562a2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols.go -@@ -0,0 +1,167 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+package fakecgo -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+//go:nosplit -+//go:norace -+func malloc(size uintptr) unsafe.Pointer { -+ ret := call5(mallocABI0, uintptr(size), 0, 0, 0, 0) -+ // this indirection is to avoid go vet complaining about possible misuse of unsafe.Pointer -+ return *(*unsafe.Pointer)(unsafe.Pointer(&ret)) -+} -+ -+//go:nosplit -+//go:norace -+func free(ptr unsafe.Pointer) { -+ call5(freeABI0, uintptr(ptr), 0, 0, 0, 0) -+} -+ -+//go:nosplit -+//go:norace -+func setenv(name *byte, value *byte, overwrite int32) int32 { -+ return int32(call5(setenvABI0, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), uintptr(overwrite), 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func unsetenv(name *byte) int32 { -+ return int32(call5(unsetenvABI0, uintptr(unsafe.Pointer(name)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func sigfillset(set *sigset_t) int32 { -+ return int32(call5(sigfillsetABI0, uintptr(unsafe.Pointer(set)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func nanosleep(ts *syscall.Timespec, rem *syscall.Timespec) int32 { -+ return int32(call5(nanosleepABI0, uintptr(unsafe.Pointer(ts)), uintptr(unsafe.Pointer(rem)), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func abort() { -+ call5(abortABI0, 0, 0, 0, 0, 0) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_init(attr *pthread_attr_t) int32 { -+ return int32(call5(pthread_attr_initABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_create(thread *pthread_t, attr *pthread_attr_t, start unsafe.Pointer, arg unsafe.Pointer) int32 { -+ return int32(call5(pthread_createABI0, uintptr(unsafe.Pointer(thread)), uintptr(unsafe.Pointer(attr)), uintptr(start), uintptr(arg), 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_detach(thread pthread_t) int32 { -+ return int32(call5(pthread_detachABI0, uintptr(thread), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_sigmask(how sighow, ign *sigset_t, oset *sigset_t) int32 { -+ return int32(call5(pthread_sigmaskABI0, uintptr(how), uintptr(unsafe.Pointer(ign)), uintptr(unsafe.Pointer(oset)), 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_mutex_lock(mutex *pthread_mutex_t) int32 { -+ return int32(call5(pthread_mutex_lockABI0, uintptr(unsafe.Pointer(mutex)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_mutex_unlock(mutex *pthread_mutex_t) int32 { -+ return int32(call5(pthread_mutex_unlockABI0, uintptr(unsafe.Pointer(mutex)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_cond_broadcast(cond *pthread_cond_t) int32 { -+ return int32(call5(pthread_cond_broadcastABI0, uintptr(unsafe.Pointer(cond)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_setspecific(key pthread_key_t, value unsafe.Pointer) int32 { -+ return int32(call5(pthread_setspecificABI0, uintptr(key), uintptr(value), 0, 0, 0)) -+} -+ -+//go:linkname _malloc _malloc -+var _malloc uint8 -+var mallocABI0 = uintptr(unsafe.Pointer(&_malloc)) -+ -+//go:linkname _free _free -+var _free uint8 -+var freeABI0 = uintptr(unsafe.Pointer(&_free)) -+ -+//go:linkname _setenv _setenv -+var _setenv uint8 -+var setenvABI0 = uintptr(unsafe.Pointer(&_setenv)) -+ -+//go:linkname _unsetenv _unsetenv -+var _unsetenv uint8 -+var unsetenvABI0 = uintptr(unsafe.Pointer(&_unsetenv)) -+ -+//go:linkname _sigfillset _sigfillset -+var _sigfillset uint8 -+var sigfillsetABI0 = uintptr(unsafe.Pointer(&_sigfillset)) -+ -+//go:linkname _nanosleep _nanosleep -+var _nanosleep uint8 -+var nanosleepABI0 = uintptr(unsafe.Pointer(&_nanosleep)) -+ -+//go:linkname _abort _abort -+var _abort uint8 -+var abortABI0 = uintptr(unsafe.Pointer(&_abort)) -+ -+//go:linkname _pthread_attr_init _pthread_attr_init -+var _pthread_attr_init uint8 -+var pthread_attr_initABI0 = uintptr(unsafe.Pointer(&_pthread_attr_init)) -+ -+//go:linkname _pthread_create _pthread_create -+var _pthread_create uint8 -+var pthread_createABI0 = uintptr(unsafe.Pointer(&_pthread_create)) -+ -+//go:linkname _pthread_detach _pthread_detach -+var _pthread_detach uint8 -+var pthread_detachABI0 = uintptr(unsafe.Pointer(&_pthread_detach)) -+ -+//go:linkname _pthread_sigmask _pthread_sigmask -+var _pthread_sigmask uint8 -+var pthread_sigmaskABI0 = uintptr(unsafe.Pointer(&_pthread_sigmask)) -+ -+//go:linkname _pthread_mutex_lock _pthread_mutex_lock -+var _pthread_mutex_lock uint8 -+var pthread_mutex_lockABI0 = uintptr(unsafe.Pointer(&_pthread_mutex_lock)) -+ -+//go:linkname _pthread_mutex_unlock _pthread_mutex_unlock -+var _pthread_mutex_unlock uint8 -+var pthread_mutex_unlockABI0 = uintptr(unsafe.Pointer(&_pthread_mutex_unlock)) -+ -+//go:linkname _pthread_cond_broadcast _pthread_cond_broadcast -+var _pthread_cond_broadcast uint8 -+var pthread_cond_broadcastABI0 = uintptr(unsafe.Pointer(&_pthread_cond_broadcast)) -+ -+//go:linkname _pthread_setspecific _pthread_setspecific -+var _pthread_setspecific uint8 -+var pthread_setspecificABI0 = uintptr(unsafe.Pointer(&_pthread_setspecific)) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols_darwin.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols_darwin.go -new file mode 100644 -index 00000000000000..a7a0d9e69d4d8b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/zsymbols_darwin.go -@@ -0,0 +1,61 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:cgo_import_dynamic purego_malloc malloc "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_free free "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_setenv setenv "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_unsetenv unsetenv "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_sigfillset sigfillset "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_nanosleep nanosleep "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_abort abort "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_create pthread_create "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_detach pthread_detach "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_self pthread_self "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize "/usr/lib/libSystem.B.dylib" -+ -+//go:nosplit -+//go:norace -+func pthread_self() pthread_t { -+ return pthread_t(call5(pthread_selfABI0, 0, 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_get_stacksize_np(thread pthread_t) size_t { -+ return size_t(call5(pthread_get_stacksize_npABI0, uintptr(thread), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_setstacksize(attr *pthread_attr_t, size size_t) int32 { -+ return int32(call5(pthread_attr_setstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(size), 0, 0, 0)) -+} -+ -+//go:linkname _pthread_self _pthread_self -+var _pthread_self uint8 -+var pthread_selfABI0 = uintptr(unsafe.Pointer(&_pthread_self)) -+ -+//go:linkname _pthread_get_stacksize_np _pthread_get_stacksize_np -+var _pthread_get_stacksize_np uint8 -+var pthread_get_stacksize_npABI0 = uintptr(unsafe.Pointer(&_pthread_get_stacksize_np)) -+ -+//go:linkname _pthread_attr_setstacksize _pthread_attr_setstacksize -+var _pthread_attr_setstacksize uint8 -+var pthread_attr_setstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_setstacksize)) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_darwin.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_darwin.s -new file mode 100644 -index 00000000000000..9038f8394965e8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_darwin.s -@@ -0,0 +1,21 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+// these stubs are here because it is not possible to go:linkname directly the C functions -+ -+TEXT _pthread_self(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_self(SB) -+ -+TEXT _pthread_get_stacksize_np(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_get_stacksize_np(SB) -+ -+TEXT _pthread_attr_setstacksize(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_setstacksize(SB) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_stubs.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_stubs.s -new file mode 100644 -index 00000000000000..5e6229a8a9bca5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/fakecgo/ztrampolines_stubs.s -@@ -0,0 +1,57 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && darwin -+ -+#include "textflag.h" -+ -+// these stubs are here because it is not possible to go:linkname directly the C functions -+ -+TEXT _malloc(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_malloc(SB) -+ -+TEXT _free(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_free(SB) -+ -+TEXT _setenv(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setenv(SB) -+ -+TEXT _unsetenv(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_unsetenv(SB) -+ -+TEXT _sigfillset(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_sigfillset(SB) -+ -+TEXT _nanosleep(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_nanosleep(SB) -+ -+TEXT _abort(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_abort(SB) -+ -+TEXT _pthread_attr_init(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_init(SB) -+ -+TEXT _pthread_create(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_create(SB) -+ -+TEXT _pthread_detach(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_detach(SB) -+ -+TEXT _pthread_sigmask(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_sigmask(SB) -+ -+TEXT _pthread_mutex_lock(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_mutex_lock(SB) -+ -+TEXT _pthread_mutex_unlock(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_mutex_unlock(SB) -+ -+TEXT _pthread_cond_broadcast(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_cond_broadcast(SB) -+ -+TEXT _pthread_setspecific(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_setspecific(SB) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/security.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/security.go -new file mode 100644 -index 00000000000000..74ee18d383784e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/security.go -@@ -0,0 +1,9 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Package security provides a Go interface to the Security framework -+package security -+ -+//go:generate go run ../../cmd/checkheader shims.h -+//go:generate go run ../../cmd/mkcgo -out zsecurity.go -package security --noerrors shims.h -+//go:generate go run ../../cmd/mkcgo -out zsecurity.go -nocgo -package security --noerrors shims.h -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/shims.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/shims.h -new file mode 100644 -index 00000000000000..d37be58038a718 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/shims.h -@@ -0,0 +1,107 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// This header file is used by the mkcgo tool to generate cgo and Go bindings for the -+// Security framework C API. Run "go generate ." to regenerate the bindings. -+// Do not include this file, import "zsecurity.h" instead. -+ -+#ifndef _GO_SECURITY_SHIMS_H // only include this header once -+#define _GO_SECURITY_SHIMS_H -+ -+#include // bool -+#include // uint64_t -+#include // size_t -+ -+// The following includes are used by the checkheader tool. -+// #include -+ -+typedef unsigned char Boolean; -+typedef void *SecRandomRef; -+typedef void *SecKeyRef; -+typedef void *CFDataRef; -+typedef void *CFTypeRef; -+typedef void *CFStringRef; -+typedef void *CFDictionaryRef; -+typedef void *CFMutableDictionaryRef; -+typedef void *CFNumberRef; -+typedef void *CFErrorRef; -+typedef void *CFAllocatorRef; -+typedef void *CFDictionaryKeyCallBacks; -+typedef void *CFDictionaryValueCallBacks; -+typedef long CFIndex; -+typedef CFStringRef SecKeyAlgorithm; -+ -+typedef enum { -+ kSecKeyOperationTypeSign = 0, -+ kSecKeyOperationTypeVerify = 1, -+ kSecKeyOperationTypeEncrypt = 2, -+ kSecKeyOperationTypeDecrypt = 3, -+} SecKeyOperationType; -+ -+typedef enum { -+ kCFStringEncodingUTF8 = 0x08000100 -+} CFStringEncoding; -+ -+typedef enum { -+ kCFNumberLongType = 10 -+} CFNumberType; -+ -+extern const CFAllocatorRef kCFAllocatorDefault __attribute__((framework(CoreFoundation, A))); -+extern const SecRandomRef kSecRandomDefault __attribute__((framework(Security, A))); -+extern const CFStringRef kSecAttrKeyTypeRSA __attribute__((framework(Security, A))); -+extern const CFStringRef kSecAttrKeyClassPublic __attribute__((framework(Security, A))); -+extern const CFStringRef kSecAttrKeyClassPrivate __attribute__((framework(Security, A))); -+extern const CFStringRef kSecAttrKeyType __attribute__((framework(Security, A))); -+extern const CFStringRef kSecAttrKeySizeInBits __attribute__((framework(Security, A))); -+extern const CFStringRef kSecAttrKeyClass __attribute__((framework(Security, A))); -+// PSS -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA1 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA224 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA256 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA384 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA512 __attribute__((framework(Security, A))); -+// RAW -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionRaw __attribute__((framework(Security, A))); -+// PKCS1v15 -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionPKCS1 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw __attribute__((framework(Security, A))); -+// OAEP -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA1 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA224 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA256 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA384 __attribute__((framework(Security, A))); -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA512 __attribute__((framework(Security, A))); -+// ECDSA -+extern const CFStringRef kSecKeyAlgorithmECDSASignatureDigestX962 __attribute__((framework(Security, A))); -+ -+int SecRandomCopyBytes(SecRandomRef rnd, size_t count, void *bytes) __attribute__((framework(Security, A), noescape, nocallback, slice(bytes, count))); -+SecKeyRef SecKeyCopyPublicKey(SecKeyRef key) __attribute__((framework(Security, A))); -+SecKeyRef SecKeyCreateWithData(CFDataRef keyData, CFDictionaryRef attributes, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+SecKeyRef SecKeyCreateRandomKey(CFDictionaryRef parameters, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+CFDataRef SecKeyCopyExternalRepresentation(SecKeyRef key, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+CFDataRef SecKeyCreateDecryptedData(SecKeyRef key, SecKeyAlgorithm algorithm, CFDataRef ciphertext, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+CFDataRef SecKeyCreateEncryptedData(SecKeyRef key, SecKeyAlgorithm algorithm, CFDataRef plaintext, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+CFDataRef SecKeyCreateSignature(SecKeyRef key, SecKeyAlgorithm algorithm, CFDataRef data, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+Boolean SecKeyVerifySignature(SecKeyRef key, SecKeyAlgorithm algorithm, CFDataRef signedData, CFDataRef signature, CFErrorRef *error) __attribute__((noescape, nocallback, framework(Security, A))); -+Boolean SecKeyIsAlgorithmSupported(SecKeyRef key, SecKeyOperationType operation, SecKeyAlgorithm algorithm) __attribute__((framework(Security, A))); -+size_t SecKeyGetBlockSize(SecKeyRef key) __attribute__((framework(Security, A))); -+ -+CFDataRef CFDataCreate(CFAllocatorRef allocator, const uint8_t *bytes, CFIndex length) __attribute__((noescape, nocallback, framework(CoreFoundation, A), slice(bytes, length))); -+CFDictionaryRef CFDictionaryCreate(CFAllocatorRef allocator, const void **keys, const void **values, CFIndex numValues, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks) __attribute__((framework(CoreFoundation, A))); -+CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks) __attribute__((framework(CoreFoundation, A))); -+CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr) __attribute__((noescape, nocallback, framework(CoreFoundation, A))); -+CFIndex CFDataGetLength(CFDataRef data) __attribute__((framework(CoreFoundation, A))); -+const uint8_t *CFDataGetBytePtr(CFDataRef data) __attribute__((framework(CoreFoundation, A))); -+void CFRelease(CFTypeRef cf) __attribute__((framework(CoreFoundation, A))); -+void CFDictionarySetValue(CFMutableDictionaryRef theDict, const void *key, const void *value) __attribute__((framework(CoreFoundation, A))); -+CFStringRef CFErrorCopyDescription(CFErrorRef error) __attribute__((framework(CoreFoundation, A))); -+const char *CFStringGetCStringPtr(CFStringRef str, CFStringEncoding encoding) __attribute__((framework(CoreFoundation, A))); -+CFIndex CFStringGetLength(CFStringRef str) __attribute__((framework(CoreFoundation, A))); -+CFIndex CFErrorGetCode(CFErrorRef error) __attribute__((framework(CoreFoundation, A))); -+ -+#endif // _GO_SECURITY_SHIMS_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/syscall_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/syscall_nocgo.go -new file mode 100644 -index 00000000000000..3a03e583346c1c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/syscall_nocgo.go -@@ -0,0 +1,15 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package security -+ -+import ( -+ "github.com/microsoft/go-crypto-darwin/internal/xsyscall" -+) -+ -+//go:nosplit -+func syscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ return xsyscall.SyscallN(errType, fn, args...) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.c b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.c -new file mode 100644 -index 00000000000000..a74278d02fd6ef ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.c -@@ -0,0 +1,127 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#include -+#include -+#include -+#include -+#include "zsecurity.h" -+ -+CFDataRef CFDataCreate(CFAllocatorRef, const uint8_t*, CFIndex); -+const uint8_t* CFDataGetBytePtr(CFDataRef); -+CFIndex CFDataGetLength(CFDataRef); -+CFDictionaryRef CFDictionaryCreate(CFAllocatorRef, const void**, const void**, CFIndex, const CFDictionaryKeyCallBacks*, const CFDictionaryValueCallBacks*); -+CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef, CFIndex, const CFDictionaryKeyCallBacks*, const CFDictionaryValueCallBacks*); -+void CFDictionarySetValue(CFMutableDictionaryRef, const void*, const void*); -+CFStringRef CFErrorCopyDescription(CFErrorRef); -+CFIndex CFErrorGetCode(CFErrorRef); -+CFNumberRef CFNumberCreate(CFAllocatorRef, CFNumberType, const void*); -+void CFRelease(CFTypeRef); -+const char* CFStringGetCStringPtr(CFStringRef, CFStringEncoding); -+CFIndex CFStringGetLength(CFStringRef); -+CFDataRef SecKeyCopyExternalRepresentation(SecKeyRef, CFErrorRef*); -+SecKeyRef SecKeyCopyPublicKey(SecKeyRef); -+CFDataRef SecKeyCreateDecryptedData(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFErrorRef*); -+CFDataRef SecKeyCreateEncryptedData(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFErrorRef*); -+SecKeyRef SecKeyCreateRandomKey(CFDictionaryRef, CFErrorRef*); -+CFDataRef SecKeyCreateSignature(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFErrorRef*); -+SecKeyRef SecKeyCreateWithData(CFDataRef, CFDictionaryRef, CFErrorRef*); -+size_t SecKeyGetBlockSize(SecKeyRef); -+Boolean SecKeyIsAlgorithmSupported(SecKeyRef, SecKeyOperationType, SecKeyAlgorithm); -+Boolean SecKeyVerifySignature(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFDataRef, CFErrorRef*); -+int SecRandomCopyBytes(SecRandomRef, size_t, unsigned char*); -+ -+CFDataRef _mkcgo_CFDataCreate(CFAllocatorRef _arg0, const uint8_t* _arg1, CFIndex _arg2) { -+ return CFDataCreate(_arg0, _arg1, _arg2); -+} -+ -+const uint8_t* _mkcgo_CFDataGetBytePtr(CFDataRef _arg0) { -+ return CFDataGetBytePtr(_arg0); -+} -+ -+CFIndex _mkcgo_CFDataGetLength(CFDataRef _arg0) { -+ return CFDataGetLength(_arg0); -+} -+ -+CFDictionaryRef _mkcgo_CFDictionaryCreate(CFAllocatorRef _arg0, const void** _arg1, const void** _arg2, CFIndex _arg3, const CFDictionaryKeyCallBacks* _arg4, const CFDictionaryValueCallBacks* _arg5) { -+ return CFDictionaryCreate(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+} -+ -+CFMutableDictionaryRef _mkcgo_CFDictionaryCreateMutable(CFAllocatorRef _arg0, CFIndex _arg1, const CFDictionaryKeyCallBacks* _arg2, const CFDictionaryValueCallBacks* _arg3) { -+ return CFDictionaryCreateMutable(_arg0, _arg1, _arg2, _arg3); -+} -+ -+void _mkcgo_CFDictionarySetValue(CFMutableDictionaryRef _arg0, const void* _arg1, const void* _arg2) { -+ CFDictionarySetValue(_arg0, _arg1, _arg2); -+} -+ -+CFStringRef _mkcgo_CFErrorCopyDescription(CFErrorRef _arg0) { -+ return CFErrorCopyDescription(_arg0); -+} -+ -+CFIndex _mkcgo_CFErrorGetCode(CFErrorRef _arg0) { -+ return CFErrorGetCode(_arg0); -+} -+ -+CFNumberRef _mkcgo_CFNumberCreate(CFAllocatorRef _arg0, CFNumberType _arg1, const void* _arg2) { -+ return CFNumberCreate(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_CFRelease(CFTypeRef _arg0) { -+ CFRelease(_arg0); -+} -+ -+const char* _mkcgo_CFStringGetCStringPtr(CFStringRef _arg0, CFStringEncoding _arg1) { -+ return CFStringGetCStringPtr(_arg0, _arg1); -+} -+ -+CFIndex _mkcgo_CFStringGetLength(CFStringRef _arg0) { -+ return CFStringGetLength(_arg0); -+} -+ -+CFDataRef _mkcgo_SecKeyCopyExternalRepresentation(SecKeyRef _arg0, CFErrorRef* _arg1) { -+ return SecKeyCopyExternalRepresentation(_arg0, _arg1); -+} -+ -+SecKeyRef _mkcgo_SecKeyCopyPublicKey(SecKeyRef _arg0) { -+ return SecKeyCopyPublicKey(_arg0); -+} -+ -+CFDataRef _mkcgo_SecKeyCreateDecryptedData(SecKeyRef _arg0, SecKeyAlgorithm _arg1, CFDataRef _arg2, CFErrorRef* _arg3) { -+ return SecKeyCreateDecryptedData(_arg0, _arg1, _arg2, _arg3); -+} -+ -+CFDataRef _mkcgo_SecKeyCreateEncryptedData(SecKeyRef _arg0, SecKeyAlgorithm _arg1, CFDataRef _arg2, CFErrorRef* _arg3) { -+ return SecKeyCreateEncryptedData(_arg0, _arg1, _arg2, _arg3); -+} -+ -+SecKeyRef _mkcgo_SecKeyCreateRandomKey(CFDictionaryRef _arg0, CFErrorRef* _arg1) { -+ return SecKeyCreateRandomKey(_arg0, _arg1); -+} -+ -+CFDataRef _mkcgo_SecKeyCreateSignature(SecKeyRef _arg0, SecKeyAlgorithm _arg1, CFDataRef _arg2, CFErrorRef* _arg3) { -+ return SecKeyCreateSignature(_arg0, _arg1, _arg2, _arg3); -+} -+ -+SecKeyRef _mkcgo_SecKeyCreateWithData(CFDataRef _arg0, CFDictionaryRef _arg1, CFErrorRef* _arg2) { -+ return SecKeyCreateWithData(_arg0, _arg1, _arg2); -+} -+ -+size_t _mkcgo_SecKeyGetBlockSize(SecKeyRef _arg0) { -+ return SecKeyGetBlockSize(_arg0); -+} -+ -+Boolean _mkcgo_SecKeyIsAlgorithmSupported(SecKeyRef _arg0, SecKeyOperationType _arg1, SecKeyAlgorithm _arg2) { -+ return SecKeyIsAlgorithmSupported(_arg0, _arg1, _arg2); -+} -+ -+Boolean _mkcgo_SecKeyVerifySignature(SecKeyRef _arg0, SecKeyAlgorithm _arg1, CFDataRef _arg2, CFDataRef _arg3, CFErrorRef* _arg4) { -+ return SecKeyVerifySignature(_arg0, _arg1, _arg2, _arg3, _arg4); -+} -+ -+int _mkcgo_SecRandomCopyBytes(SecRandomRef _arg0, size_t _arg1, unsigned char* _arg2) { -+ return SecRandomCopyBytes(_arg0, _arg1, _arg2); -+} -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.go -new file mode 100644 -index 00000000000000..41aa0341b8a2b2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.go -@@ -0,0 +1,21 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package security -+ -+const ( -+ KSecKeyOperationTypeSign SecKeyOperationType = 0 -+ KSecKeyOperationTypeVerify SecKeyOperationType = 1 -+ KSecKeyOperationTypeEncrypt SecKeyOperationType = 2 -+ KSecKeyOperationTypeDecrypt SecKeyOperationType = 3 -+) -+ -+const ( -+ KCFStringEncodingUTF8 CFStringEncoding = 0x08000100 -+) -+ -+const ( -+ KCFNumberLongType CFNumberType = 10 -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.h b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.h -new file mode 100644 -index 00000000000000..8a2524b3cd0fe6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.h -@@ -0,0 +1,98 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#ifndef MKCGO_H // only include this header once -+#define MKCGO_H -+ -+#include -+#include -+#include -+ -+typedef unsigned char Boolean; -+typedef void* SecRandomRef; -+typedef void* SecKeyRef; -+typedef void* CFDataRef; -+typedef void* CFTypeRef; -+typedef void* CFStringRef; -+typedef void* CFDictionaryRef; -+typedef void* CFMutableDictionaryRef; -+typedef void* CFNumberRef; -+typedef void* CFErrorRef; -+typedef void* CFAllocatorRef; -+typedef void* CFDictionaryKeyCallBacks; -+typedef void* CFDictionaryValueCallBacks; -+typedef long CFIndex; -+typedef CFStringRef SecKeyAlgorithm; -+ -+extern const CFAllocatorRef kCFAllocatorDefault; -+extern const SecRandomRef kSecRandomDefault; -+extern const CFStringRef kSecAttrKeyTypeRSA; -+extern const CFStringRef kSecAttrKeyClassPublic; -+extern const CFStringRef kSecAttrKeyClassPrivate; -+extern const CFStringRef kSecAttrKeyType; -+extern const CFStringRef kSecAttrKeySizeInBits; -+extern const CFStringRef kSecAttrKeyClass; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA1; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA224; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA256; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA384; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPSSSHA512; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionRaw; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionPKCS1; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512; -+extern const CFStringRef kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA1; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA224; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA256; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA384; -+extern const CFStringRef kSecKeyAlgorithmRSAEncryptionOAEPSHA512; -+extern const CFStringRef kSecKeyAlgorithmECDSASignatureDigestX962; -+ -+typedef enum { -+ kSecKeyOperationTypeSign = 0, -+ kSecKeyOperationTypeVerify = 1, -+ kSecKeyOperationTypeEncrypt = 2, -+ kSecKeyOperationTypeDecrypt = 3, -+} SecKeyOperationType; -+ -+typedef enum { -+ kCFStringEncodingUTF8 = 0x08000100, -+} CFStringEncoding; -+ -+typedef enum { -+ kCFNumberLongType = 10, -+} CFNumberType; -+ -+uintptr_t mkcgo_err_retrieve(); -+ -+CFDataRef _mkcgo_CFDataCreate(CFAllocatorRef, const uint8_t*, CFIndex); -+const uint8_t* _mkcgo_CFDataGetBytePtr(CFDataRef); -+CFIndex _mkcgo_CFDataGetLength(CFDataRef); -+CFDictionaryRef _mkcgo_CFDictionaryCreate(CFAllocatorRef, const void**, const void**, CFIndex, const CFDictionaryKeyCallBacks*, const CFDictionaryValueCallBacks*); -+CFMutableDictionaryRef _mkcgo_CFDictionaryCreateMutable(CFAllocatorRef, CFIndex, const CFDictionaryKeyCallBacks*, const CFDictionaryValueCallBacks*); -+void _mkcgo_CFDictionarySetValue(CFMutableDictionaryRef, const void*, const void*); -+CFStringRef _mkcgo_CFErrorCopyDescription(CFErrorRef); -+CFIndex _mkcgo_CFErrorGetCode(CFErrorRef); -+CFNumberRef _mkcgo_CFNumberCreate(CFAllocatorRef, CFNumberType, const void*); -+void _mkcgo_CFRelease(CFTypeRef); -+const char* _mkcgo_CFStringGetCStringPtr(CFStringRef, CFStringEncoding); -+CFIndex _mkcgo_CFStringGetLength(CFStringRef); -+CFDataRef _mkcgo_SecKeyCopyExternalRepresentation(SecKeyRef, CFErrorRef*); -+SecKeyRef _mkcgo_SecKeyCopyPublicKey(SecKeyRef); -+CFDataRef _mkcgo_SecKeyCreateDecryptedData(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFErrorRef*); -+CFDataRef _mkcgo_SecKeyCreateEncryptedData(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFErrorRef*); -+SecKeyRef _mkcgo_SecKeyCreateRandomKey(CFDictionaryRef, CFErrorRef*); -+CFDataRef _mkcgo_SecKeyCreateSignature(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFErrorRef*); -+SecKeyRef _mkcgo_SecKeyCreateWithData(CFDataRef, CFDictionaryRef, CFErrorRef*); -+size_t _mkcgo_SecKeyGetBlockSize(SecKeyRef); -+Boolean _mkcgo_SecKeyIsAlgorithmSupported(SecKeyRef, SecKeyOperationType, SecKeyAlgorithm); -+Boolean _mkcgo_SecKeyVerifySignature(SecKeyRef, SecKeyAlgorithm, CFDataRef, CFDataRef, CFErrorRef*); -+int _mkcgo_SecRandomCopyBytes(SecRandomRef, size_t, unsigned char*); -+ -+#endif // MKCGO_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.s -new file mode 100644 -index 00000000000000..5b021a6afed14b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity.s -@@ -0,0 +1,172 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+#ifndef GOARCH_amd64 -+#ifndef GOARCH_arm64 -+#ifndef GOARCH_riscv64 -+#ifndef GOARCH_loong64 -+#ifndef GOARCH_mips64 -+#ifndef GOARCH_mips64le -+#ifndef GOARCH_ppc64 -+#ifndef GOARCH_ppc64le -+#ifndef GOARCH_s390x -+#ifndef GOARCH_sparc64 -+#define _GOPTRSIZE 4 -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+ -+#ifndef _GOPTRSIZE -+#define _GOPTRSIZE 8 -+#endif -+TEXT _mkcgo_CFDataCreate_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFDataCreate(SB) -+ -+GLOBL ·_mkcgo_CFDataCreate_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFDataCreate_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFDataCreate_trampoline<>(SB) -+ -+TEXT _mkcgo_CFDataGetBytePtr_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFDataGetBytePtr(SB) -+ -+GLOBL ·_mkcgo_CFDataGetBytePtr_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFDataGetBytePtr_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFDataGetBytePtr_trampoline<>(SB) -+ -+TEXT _mkcgo_CFDataGetLength_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFDataGetLength(SB) -+ -+GLOBL ·_mkcgo_CFDataGetLength_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFDataGetLength_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFDataGetLength_trampoline<>(SB) -+ -+TEXT _mkcgo_CFDictionaryCreate_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFDictionaryCreate(SB) -+ -+GLOBL ·_mkcgo_CFDictionaryCreate_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFDictionaryCreate_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFDictionaryCreate_trampoline<>(SB) -+ -+TEXT _mkcgo_CFDictionaryCreateMutable_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFDictionaryCreateMutable(SB) -+ -+GLOBL ·_mkcgo_CFDictionaryCreateMutable_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFDictionaryCreateMutable_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFDictionaryCreateMutable_trampoline<>(SB) -+ -+TEXT _mkcgo_CFDictionarySetValue_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFDictionarySetValue(SB) -+ -+GLOBL ·_mkcgo_CFDictionarySetValue_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFDictionarySetValue_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFDictionarySetValue_trampoline<>(SB) -+ -+TEXT _mkcgo_CFErrorCopyDescription_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFErrorCopyDescription(SB) -+ -+GLOBL ·_mkcgo_CFErrorCopyDescription_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFErrorCopyDescription_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFErrorCopyDescription_trampoline<>(SB) -+ -+TEXT _mkcgo_CFErrorGetCode_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFErrorGetCode(SB) -+ -+GLOBL ·_mkcgo_CFErrorGetCode_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFErrorGetCode_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFErrorGetCode_trampoline<>(SB) -+ -+TEXT _mkcgo_CFNumberCreate_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFNumberCreate(SB) -+ -+GLOBL ·_mkcgo_CFNumberCreate_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFNumberCreate_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFNumberCreate_trampoline<>(SB) -+ -+TEXT _mkcgo_CFRelease_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFRelease(SB) -+ -+GLOBL ·_mkcgo_CFRelease_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFRelease_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFRelease_trampoline<>(SB) -+ -+TEXT _mkcgo_CFStringGetCStringPtr_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFStringGetCStringPtr(SB) -+ -+GLOBL ·_mkcgo_CFStringGetCStringPtr_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFStringGetCStringPtr_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFStringGetCStringPtr_trampoline<>(SB) -+ -+TEXT _mkcgo_CFStringGetLength_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_CFStringGetLength(SB) -+ -+GLOBL ·_mkcgo_CFStringGetLength_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_CFStringGetLength_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_CFStringGetLength_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCopyExternalRepresentation_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCopyExternalRepresentation(SB) -+ -+GLOBL ·_mkcgo_SecKeyCopyExternalRepresentation_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCopyExternalRepresentation_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCopyExternalRepresentation_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCopyPublicKey_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCopyPublicKey(SB) -+ -+GLOBL ·_mkcgo_SecKeyCopyPublicKey_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCopyPublicKey_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCopyPublicKey_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCreateDecryptedData_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCreateDecryptedData(SB) -+ -+GLOBL ·_mkcgo_SecKeyCreateDecryptedData_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCreateDecryptedData_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCreateDecryptedData_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCreateEncryptedData_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCreateEncryptedData(SB) -+ -+GLOBL ·_mkcgo_SecKeyCreateEncryptedData_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCreateEncryptedData_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCreateEncryptedData_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCreateRandomKey_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCreateRandomKey(SB) -+ -+GLOBL ·_mkcgo_SecKeyCreateRandomKey_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCreateRandomKey_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCreateRandomKey_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCreateSignature_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCreateSignature(SB) -+ -+GLOBL ·_mkcgo_SecKeyCreateSignature_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCreateSignature_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCreateSignature_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyCreateWithData_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyCreateWithData(SB) -+ -+GLOBL ·_mkcgo_SecKeyCreateWithData_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyCreateWithData_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyCreateWithData_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyGetBlockSize_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyGetBlockSize(SB) -+ -+GLOBL ·_mkcgo_SecKeyGetBlockSize_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyGetBlockSize_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyGetBlockSize_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyIsAlgorithmSupported_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyIsAlgorithmSupported(SB) -+ -+GLOBL ·_mkcgo_SecKeyIsAlgorithmSupported_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyIsAlgorithmSupported_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyIsAlgorithmSupported_trampoline<>(SB) -+ -+TEXT _mkcgo_SecKeyVerifySignature_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecKeyVerifySignature(SB) -+ -+GLOBL ·_mkcgo_SecKeyVerifySignature_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecKeyVerifySignature_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecKeyVerifySignature_trampoline<>(SB) -+ -+TEXT _mkcgo_SecRandomCopyBytes_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_SecRandomCopyBytes(SB) -+ -+GLOBL ·_mkcgo_SecRandomCopyBytes_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_SecRandomCopyBytes_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_SecRandomCopyBytes_trampoline<>(SB) -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_cgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_cgo.go -new file mode 100644 -index 00000000000000..c17b764ee90662 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_cgo.go -@@ -0,0 +1,388 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package security -+ -+/* -+#cgo CFLAGS: -Wno-attributes -+#cgo darwin LDFLAGS: -framework CoreFoundation -+#cgo darwin LDFLAGS: -framework Security -+ -+#include "zsecurity.h" -+#cgo noescape _mkcgo_CFDataCreate -+#cgo nocallback _mkcgo_CFDataCreate -+#cgo noescape _mkcgo_CFNumberCreate -+#cgo nocallback _mkcgo_CFNumberCreate -+#cgo noescape _mkcgo_SecKeyCopyExternalRepresentation -+#cgo nocallback _mkcgo_SecKeyCopyExternalRepresentation -+#cgo noescape _mkcgo_SecKeyCreateDecryptedData -+#cgo nocallback _mkcgo_SecKeyCreateDecryptedData -+#cgo noescape _mkcgo_SecKeyCreateEncryptedData -+#cgo nocallback _mkcgo_SecKeyCreateEncryptedData -+#cgo noescape _mkcgo_SecKeyCreateRandomKey -+#cgo nocallback _mkcgo_SecKeyCreateRandomKey -+#cgo noescape _mkcgo_SecKeyCreateSignature -+#cgo nocallback _mkcgo_SecKeyCreateSignature -+#cgo noescape _mkcgo_SecKeyCreateWithData -+#cgo nocallback _mkcgo_SecKeyCreateWithData -+#cgo noescape _mkcgo_SecKeyVerifySignature -+#cgo nocallback _mkcgo_SecKeyVerifySignature -+#cgo noescape _mkcgo_SecRandomCopyBytes -+#cgo nocallback _mkcgo_SecRandomCopyBytes -+*/ -+import "C" -+import "unsafe" -+ -+//go:cgo_import_dynamic _mkcgo_kCFAllocatorDefault kCFAllocatorDefault "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_kSecRandomDefault kSecRandomDefault "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyTypeRSA kSecAttrKeyTypeRSA "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyClassPublic kSecAttrKeyClassPublic "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyClassPrivate kSecAttrKeyClassPrivate "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyType kSecAttrKeyType "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeySizeInBits kSecAttrKeySizeInBits "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyClass kSecAttrKeyClass "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 kSecKeyAlgorithmRSASignatureDigestPSSSHA1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 kSecKeyAlgorithmRSASignatureDigestPSSSHA224 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 kSecKeyAlgorithmRSASignatureDigestPSSSHA256 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 kSecKeyAlgorithmRSASignatureDigestPSSSHA384 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 kSecKeyAlgorithmRSASignatureDigestPSSSHA512 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw kSecKeyAlgorithmRSAEncryptionRaw "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 kSecKeyAlgorithmRSAEncryptionPKCS1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 kSecKeyAlgorithmRSAEncryptionOAEPSHA1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 kSecKeyAlgorithmRSAEncryptionOAEPSHA224 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 kSecKeyAlgorithmRSAEncryptionOAEPSHA256 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 kSecKeyAlgorithmRSAEncryptionOAEPSHA384 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 kSecKeyAlgorithmRSAEncryptionOAEPSHA512 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 kSecKeyAlgorithmECDSASignatureDigestX962 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+ -+//go:linkname _mkcgo_kCFAllocatorDefault _mkcgo_kCFAllocatorDefault -+//go:linkname _mkcgo_kSecRandomDefault _mkcgo_kSecRandomDefault -+//go:linkname _mkcgo_kSecAttrKeyTypeRSA _mkcgo_kSecAttrKeyTypeRSA -+//go:linkname _mkcgo_kSecAttrKeyClassPublic _mkcgo_kSecAttrKeyClassPublic -+//go:linkname _mkcgo_kSecAttrKeyClassPrivate _mkcgo_kSecAttrKeyClassPrivate -+//go:linkname _mkcgo_kSecAttrKeyType _mkcgo_kSecAttrKeyType -+//go:linkname _mkcgo_kSecAttrKeySizeInBits _mkcgo_kSecAttrKeySizeInBits -+//go:linkname _mkcgo_kSecAttrKeyClass _mkcgo_kSecAttrKeyClass -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 -+//go:linkname _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 -+ -+var ( -+ _mkcgo_kCFAllocatorDefault CFAllocatorRef -+ _mkcgo_kSecRandomDefault SecRandomRef -+ _mkcgo_kSecAttrKeyTypeRSA CFStringRef -+ _mkcgo_kSecAttrKeyClassPublic CFStringRef -+ _mkcgo_kSecAttrKeyClassPrivate CFStringRef -+ _mkcgo_kSecAttrKeyType CFStringRef -+ _mkcgo_kSecAttrKeySizeInBits CFStringRef -+ _mkcgo_kSecAttrKeyClass CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 CFStringRef -+ _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 CFStringRef -+) -+ -+//go:noinline -+func _mkcgo_addr_kCFAllocatorDefault() *CFAllocatorRef { return &_mkcgo_kCFAllocatorDefault } -+ -+//go:noinline -+func _mkcgo_addr_kSecRandomDefault() *SecRandomRef { return &_mkcgo_kSecRandomDefault } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyTypeRSA() *CFStringRef { return &_mkcgo_kSecAttrKeyTypeRSA } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyClassPublic() *CFStringRef { return &_mkcgo_kSecAttrKeyClassPublic } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyClassPrivate() *CFStringRef { return &_mkcgo_kSecAttrKeyClassPrivate } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyType() *CFStringRef { return &_mkcgo_kSecAttrKeyType } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeySizeInBits() *CFStringRef { return &_mkcgo_kSecAttrKeySizeInBits } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyClass() *CFStringRef { return &_mkcgo_kSecAttrKeyClass } -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA224() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA256() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA384() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA512() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionRaw() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionRaw -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionPKCS1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA224() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA256() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA384() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA512() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmECDSASignatureDigestX962() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 -+} -+ -+var ( -+ KCFAllocatorDefault CFAllocatorRef = *_mkcgo_addr_kCFAllocatorDefault() -+ KSecRandomDefault SecRandomRef = *_mkcgo_addr_kSecRandomDefault() -+ KSecAttrKeyTypeRSA CFStringRef = *_mkcgo_addr_kSecAttrKeyTypeRSA() -+ KSecAttrKeyClassPublic CFStringRef = *_mkcgo_addr_kSecAttrKeyClassPublic() -+ KSecAttrKeyClassPrivate CFStringRef = *_mkcgo_addr_kSecAttrKeyClassPrivate() -+ KSecAttrKeyType CFStringRef = *_mkcgo_addr_kSecAttrKeyType() -+ KSecAttrKeySizeInBits CFStringRef = *_mkcgo_addr_kSecAttrKeySizeInBits() -+ KSecAttrKeyClass CFStringRef = *_mkcgo_addr_kSecAttrKeyClass() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA1() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA224 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA224() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA256 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA256() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA384 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA384() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA512 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA512() -+ KSecKeyAlgorithmRSAEncryptionRaw CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionRaw() -+ KSecKeyAlgorithmRSAEncryptionPKCS1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionPKCS1() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA1() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA224 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA224() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA256 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA256() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA384 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA384() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA512 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA512() -+ KSecKeyAlgorithmECDSASignatureDigestX962 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmECDSASignatureDigestX962() -+) -+ -+type Boolean = C.Boolean -+type CFAllocatorRef = C.CFAllocatorRef -+type CFDataRef = C.CFDataRef -+type CFDictionaryKeyCallBacks = C.CFDictionaryKeyCallBacks -+type CFDictionaryRef = C.CFDictionaryRef -+type CFDictionaryValueCallBacks = C.CFDictionaryValueCallBacks -+type CFErrorRef = C.CFErrorRef -+type CFIndex = C.CFIndex -+type CFMutableDictionaryRef = C.CFMutableDictionaryRef -+type CFNumberRef = C.CFNumberRef -+type CFNumberType = C.CFNumberType -+type CFStringEncoding = C.CFStringEncoding -+type CFStringRef = C.CFStringRef -+type CFTypeRef = C.CFTypeRef -+type SecKeyAlgorithm = C.SecKeyAlgorithm -+type SecKeyOperationType = C.SecKeyOperationType -+type SecKeyRef = C.SecKeyRef -+type SecRandomRef = C.SecRandomRef -+ -+//go:nosplit -+func mkcgoNoEscape(p *C.uintptr_t) *C.uintptr_t { -+ x := uintptr(unsafe.Pointer(p)) -+ return (*C.uintptr_t)(unsafe.Pointer(x ^ 0)) -+} -+ -+func CFDataCreate(allocator CFAllocatorRef, bytes []uint8) CFDataRef { -+ return C._mkcgo_CFDataCreate(allocator, (*C.uint8_t)(unsafe.Pointer(unsafe.SliceData(bytes))), CFIndex(len(bytes))) -+} -+ -+func CFDataGetBytePtr(data CFDataRef) *uint8 { -+ return (*uint8)(unsafe.Pointer(C._mkcgo_CFDataGetBytePtr(data))) -+} -+ -+func CFDataGetLength(data CFDataRef) CFIndex { -+ return C._mkcgo_CFDataGetLength(data) -+} -+ -+func CFDictionaryCreate(allocator CFAllocatorRef, keys *unsafe.Pointer, values *unsafe.Pointer, numValues CFIndex, keyCallBacks *CFDictionaryKeyCallBacks, valueCallBacks *CFDictionaryValueCallBacks) CFDictionaryRef { -+ return C._mkcgo_CFDictionaryCreate(allocator, keys, values, numValues, keyCallBacks, valueCallBacks) -+} -+ -+func CFDictionaryCreateMutable(allocator CFAllocatorRef, capacity CFIndex, keyCallBacks *CFDictionaryKeyCallBacks, valueCallBacks *CFDictionaryValueCallBacks) CFMutableDictionaryRef { -+ return C._mkcgo_CFDictionaryCreateMutable(allocator, capacity, keyCallBacks, valueCallBacks) -+} -+ -+func CFDictionarySetValue(theDict CFMutableDictionaryRef, key unsafe.Pointer, value unsafe.Pointer) { -+ C._mkcgo_CFDictionarySetValue(theDict, key, value) -+} -+ -+func CFErrorCopyDescription(__error CFErrorRef) CFStringRef { -+ return C._mkcgo_CFErrorCopyDescription(__error) -+} -+ -+func CFErrorGetCode(__error CFErrorRef) CFIndex { -+ return C._mkcgo_CFErrorGetCode(__error) -+} -+ -+func CFNumberCreate(allocator CFAllocatorRef, theType CFNumberType, valuePtr unsafe.Pointer) CFNumberRef { -+ return C._mkcgo_CFNumberCreate(allocator, theType, valuePtr) -+} -+ -+func CFRelease(cf CFTypeRef) { -+ C._mkcgo_CFRelease(cf) -+} -+ -+func CFStringGetCStringPtr(str CFStringRef, encoding CFStringEncoding) *byte { -+ return (*byte)(unsafe.Pointer(C._mkcgo_CFStringGetCStringPtr(str, encoding))) -+} -+ -+func CFStringGetLength(str CFStringRef) CFIndex { -+ return C._mkcgo_CFStringGetLength(str) -+} -+ -+func SecKeyCopyExternalRepresentation(key SecKeyRef, __error *CFErrorRef) CFDataRef { -+ return C._mkcgo_SecKeyCopyExternalRepresentation(key, __error) -+} -+ -+func SecKeyCopyPublicKey(key SecKeyRef) SecKeyRef { -+ return C._mkcgo_SecKeyCopyPublicKey(key) -+} -+ -+func SecKeyCreateDecryptedData(key SecKeyRef, algorithm SecKeyAlgorithm, ciphertext CFDataRef, __error *CFErrorRef) CFDataRef { -+ return C._mkcgo_SecKeyCreateDecryptedData(key, algorithm, ciphertext, __error) -+} -+ -+func SecKeyCreateEncryptedData(key SecKeyRef, algorithm SecKeyAlgorithm, plaintext CFDataRef, __error *CFErrorRef) CFDataRef { -+ return C._mkcgo_SecKeyCreateEncryptedData(key, algorithm, plaintext, __error) -+} -+ -+func SecKeyCreateRandomKey(parameters CFDictionaryRef, __error *CFErrorRef) SecKeyRef { -+ return C._mkcgo_SecKeyCreateRandomKey(parameters, __error) -+} -+ -+func SecKeyCreateSignature(key SecKeyRef, algorithm SecKeyAlgorithm, data CFDataRef, __error *CFErrorRef) CFDataRef { -+ return C._mkcgo_SecKeyCreateSignature(key, algorithm, data, __error) -+} -+ -+func SecKeyCreateWithData(keyData CFDataRef, attributes CFDictionaryRef, __error *CFErrorRef) SecKeyRef { -+ return C._mkcgo_SecKeyCreateWithData(keyData, attributes, __error) -+} -+ -+func SecKeyGetBlockSize(key SecKeyRef) int { -+ return int(C._mkcgo_SecKeyGetBlockSize(key)) -+} -+ -+func SecKeyIsAlgorithmSupported(key SecKeyRef, operation SecKeyOperationType, algorithm SecKeyAlgorithm) Boolean { -+ return C._mkcgo_SecKeyIsAlgorithmSupported(key, operation, algorithm) -+} -+ -+func SecKeyVerifySignature(key SecKeyRef, algorithm SecKeyAlgorithm, signedData CFDataRef, signature CFDataRef, __error *CFErrorRef) Boolean { -+ return C._mkcgo_SecKeyVerifySignature(key, algorithm, signedData, signature, __error) -+} -+ -+func SecRandomCopyBytes(rnd SecRandomRef, bytes []byte) int32 { -+ return int32(C._mkcgo_SecRandomCopyBytes(rnd, C.size_t(len(bytes)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(bytes))))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_nocgo.go -new file mode 100644 -index 00000000000000..7e5d52ef2d3c63 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/security/zsecurity_nocgo.go -@@ -0,0 +1,466 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+package security -+ -+import ( -+ "runtime" -+ "unsafe" -+) -+ -+var _ = runtime.GOOS -+ -+var _mkcgoAlwaysFalseSecurity bool -+var _mkcgoEscapeSinkSecurity unsafe.Pointer -+ -+// mkcgoEscapePtrSecurity forces p to escape to the heap. -+// This implementation is also used in the standard library: -+// https://github.com/golang/go/blob/f71432d223eeb2139b460957817400750fd13655/src/internal/abi/escape.go#L24-L33 -+func mkcgoEscapePtrSecurity(p unsafe.Pointer) unsafe.Pointer { -+ if _mkcgoAlwaysFalseSecurity { -+ _mkcgoEscapeSinkSecurity = p -+ } -+ return p -+} -+ -+type Boolean = byte -+type SecRandomRef unsafe.Pointer -+type SecKeyRef unsafe.Pointer -+type CFDataRef unsafe.Pointer -+type CFTypeRef unsafe.Pointer -+type CFStringRef unsafe.Pointer -+type CFDictionaryRef unsafe.Pointer -+type CFMutableDictionaryRef unsafe.Pointer -+type CFNumberRef unsafe.Pointer -+type CFErrorRef unsafe.Pointer -+type CFAllocatorRef unsafe.Pointer -+type CFDictionaryKeyCallBacks unsafe.Pointer -+type CFDictionaryValueCallBacks unsafe.Pointer -+type CFIndex = int64 -+type SecKeyAlgorithm = CFStringRef -+ -+type SecKeyOperationType int32 -+type CFStringEncoding int32 -+type CFNumberType int32 -+ -+//go:cgo_import_dynamic _mkcgo_kCFAllocatorDefault kCFAllocatorDefault "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_kSecRandomDefault kSecRandomDefault "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyTypeRSA kSecAttrKeyTypeRSA "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyClassPublic kSecAttrKeyClassPublic "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyClassPrivate kSecAttrKeyClassPrivate "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyType kSecAttrKeyType "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeySizeInBits kSecAttrKeySizeInBits "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecAttrKeyClass kSecAttrKeyClass "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 kSecKeyAlgorithmRSASignatureDigestPSSSHA1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 kSecKeyAlgorithmRSASignatureDigestPSSSHA224 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 kSecKeyAlgorithmRSASignatureDigestPSSSHA256 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 kSecKeyAlgorithmRSASignatureDigestPSSSHA384 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 kSecKeyAlgorithmRSASignatureDigestPSSSHA512 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw kSecKeyAlgorithmRSAEncryptionRaw "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 kSecKeyAlgorithmRSAEncryptionPKCS1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 kSecKeyAlgorithmRSAEncryptionOAEPSHA1 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 kSecKeyAlgorithmRSAEncryptionOAEPSHA224 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 kSecKeyAlgorithmRSAEncryptionOAEPSHA256 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 kSecKeyAlgorithmRSAEncryptionOAEPSHA384 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 kSecKeyAlgorithmRSAEncryptionOAEPSHA512 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 kSecKeyAlgorithmECDSASignatureDigestX962 "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+ -+//go:linkname _mkcgo_kCFAllocatorDefault _mkcgo_kCFAllocatorDefault -+//go:linkname _mkcgo_kSecRandomDefault _mkcgo_kSecRandomDefault -+//go:linkname _mkcgo_kSecAttrKeyTypeRSA _mkcgo_kSecAttrKeyTypeRSA -+//go:linkname _mkcgo_kSecAttrKeyClassPublic _mkcgo_kSecAttrKeyClassPublic -+//go:linkname _mkcgo_kSecAttrKeyClassPrivate _mkcgo_kSecAttrKeyClassPrivate -+//go:linkname _mkcgo_kSecAttrKeyType _mkcgo_kSecAttrKeyType -+//go:linkname _mkcgo_kSecAttrKeySizeInBits _mkcgo_kSecAttrKeySizeInBits -+//go:linkname _mkcgo_kSecAttrKeyClass _mkcgo_kSecAttrKeyClass -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 -+//go:linkname _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 -+//go:linkname _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 -+ -+var ( -+ _mkcgo_kCFAllocatorDefault CFAllocatorRef -+ _mkcgo_kSecRandomDefault SecRandomRef -+ _mkcgo_kSecAttrKeyTypeRSA CFStringRef -+ _mkcgo_kSecAttrKeyClassPublic CFStringRef -+ _mkcgo_kSecAttrKeyClassPrivate CFStringRef -+ _mkcgo_kSecAttrKeyType CFStringRef -+ _mkcgo_kSecAttrKeySizeInBits CFStringRef -+ _mkcgo_kSecAttrKeyClass CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionRaw CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 CFStringRef -+ _mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 CFStringRef -+ _mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 CFStringRef -+) -+ -+//go:noinline -+func _mkcgo_addr_kCFAllocatorDefault() *CFAllocatorRef { return &_mkcgo_kCFAllocatorDefault } -+ -+//go:noinline -+func _mkcgo_addr_kSecRandomDefault() *SecRandomRef { return &_mkcgo_kSecRandomDefault } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyTypeRSA() *CFStringRef { return &_mkcgo_kSecAttrKeyTypeRSA } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyClassPublic() *CFStringRef { return &_mkcgo_kSecAttrKeyClassPublic } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyClassPrivate() *CFStringRef { return &_mkcgo_kSecAttrKeyClassPrivate } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyType() *CFStringRef { return &_mkcgo_kSecAttrKeyType } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeySizeInBits() *CFStringRef { return &_mkcgo_kSecAttrKeySizeInBits } -+ -+//go:noinline -+func _mkcgo_addr_kSecAttrKeyClass() *CFStringRef { return &_mkcgo_kSecAttrKeyClass } -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA224() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA224 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA256() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA256 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA384() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA384 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA512() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPSSSHA512 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionRaw() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionRaw -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionPKCS1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionPKCS1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA1() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA1 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA224() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA224 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA256() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA256 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA384() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA384 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA512() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmRSAEncryptionOAEPSHA512 -+} -+ -+//go:noinline -+func _mkcgo_addr_kSecKeyAlgorithmECDSASignatureDigestX962() *CFStringRef { -+ return &_mkcgo_kSecKeyAlgorithmECDSASignatureDigestX962 -+} -+ -+var ( -+ KCFAllocatorDefault CFAllocatorRef = *_mkcgo_addr_kCFAllocatorDefault() -+ KSecRandomDefault SecRandomRef = *_mkcgo_addr_kSecRandomDefault() -+ KSecAttrKeyTypeRSA CFStringRef = *_mkcgo_addr_kSecAttrKeyTypeRSA() -+ KSecAttrKeyClassPublic CFStringRef = *_mkcgo_addr_kSecAttrKeyClassPublic() -+ KSecAttrKeyClassPrivate CFStringRef = *_mkcgo_addr_kSecAttrKeyClassPrivate() -+ KSecAttrKeyType CFStringRef = *_mkcgo_addr_kSecAttrKeyType() -+ KSecAttrKeySizeInBits CFStringRef = *_mkcgo_addr_kSecAttrKeySizeInBits() -+ KSecAttrKeyClass CFStringRef = *_mkcgo_addr_kSecAttrKeyClass() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA1() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA224 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA224() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA256 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA256() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA384 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA384() -+ KSecKeyAlgorithmRSASignatureDigestPSSSHA512 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPSSSHA512() -+ KSecKeyAlgorithmRSAEncryptionRaw CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionRaw() -+ KSecKeyAlgorithmRSAEncryptionPKCS1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionPKCS1() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512() -+ KSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA1 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA1() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA224 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA224() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA256 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA256() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA384 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA384() -+ KSecKeyAlgorithmRSAEncryptionOAEPSHA512 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmRSAEncryptionOAEPSHA512() -+ KSecKeyAlgorithmECDSASignatureDigestX962 CFStringRef = *_mkcgo_addr_kSecKeyAlgorithmECDSASignatureDigestX962() -+) -+ -+//go:cgo_import_dynamic _mkcgo_CFDataCreate CFDataCreate "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFDataGetBytePtr CFDataGetBytePtr "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFDataGetLength CFDataGetLength "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFDictionaryCreate CFDictionaryCreate "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFDictionaryCreateMutable CFDictionaryCreateMutable "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFDictionarySetValue CFDictionarySetValue "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFErrorCopyDescription CFErrorCopyDescription "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFErrorGetCode CFErrorGetCode "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFNumberCreate CFNumberCreate "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFRelease CFRelease "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFStringGetCStringPtr CFStringGetCStringPtr "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_CFStringGetLength CFStringGetLength "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" -+//go:cgo_import_dynamic _mkcgo_SecKeyCopyExternalRepresentation SecKeyCopyExternalRepresentation "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyCopyPublicKey SecKeyCopyPublicKey "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyCreateDecryptedData SecKeyCreateDecryptedData "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyCreateEncryptedData SecKeyCreateEncryptedData "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyCreateRandomKey SecKeyCreateRandomKey "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyCreateSignature SecKeyCreateSignature "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyCreateWithData SecKeyCreateWithData "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyGetBlockSize SecKeyGetBlockSize "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyIsAlgorithmSupported SecKeyIsAlgorithmSupported "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecKeyVerifySignature SecKeyVerifySignature "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+//go:cgo_import_dynamic _mkcgo_SecRandomCopyBytes SecRandomCopyBytes "/System/Library/Frameworks/Security.framework/Versions/A/Security" -+ -+var _mkcgo_CFDataCreate_trampoline_addr uintptr -+ -+func CFDataCreate(allocator CFAllocatorRef, bytes []uint8) CFDataRef { -+ r0, _ := syscallN(0, _mkcgo_CFDataCreate_trampoline_addr, uintptr(allocator), uintptr(unsafe.Pointer(unsafe.SliceData(bytes))), uintptr(len(bytes))) -+ return CFDataRef(r0) -+} -+ -+var _mkcgo_CFDataGetBytePtr_trampoline_addr uintptr -+ -+func CFDataGetBytePtr(data CFDataRef) *uint8 { -+ r0, _ := syscallN(0, _mkcgo_CFDataGetBytePtr_trampoline_addr, uintptr(data)) -+ return (*uint8)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_CFDataGetLength_trampoline_addr uintptr -+ -+func CFDataGetLength(data CFDataRef) CFIndex { -+ r0, _ := syscallN(0, _mkcgo_CFDataGetLength_trampoline_addr, uintptr(data)) -+ return CFIndex(r0) -+} -+ -+var _mkcgo_CFDictionaryCreate_trampoline_addr uintptr -+ -+func CFDictionaryCreate(allocator CFAllocatorRef, keys *unsafe.Pointer, values *unsafe.Pointer, numValues CFIndex, keyCallBacks *CFDictionaryKeyCallBacks, valueCallBacks *CFDictionaryValueCallBacks) CFDictionaryRef { -+ r0, _ := syscallN(0, _mkcgo_CFDictionaryCreate_trampoline_addr, uintptr(allocator), uintptr(mkcgoEscapePtrSecurity(unsafe.Pointer(keys))), uintptr(mkcgoEscapePtrSecurity(unsafe.Pointer(values))), uintptr(numValues), uintptr(mkcgoEscapePtrSecurity(unsafe.Pointer(keyCallBacks))), uintptr(mkcgoEscapePtrSecurity(unsafe.Pointer(valueCallBacks)))) -+ return CFDictionaryRef(r0) -+} -+ -+var _mkcgo_CFDictionaryCreateMutable_trampoline_addr uintptr -+ -+func CFDictionaryCreateMutable(allocator CFAllocatorRef, capacity CFIndex, keyCallBacks *CFDictionaryKeyCallBacks, valueCallBacks *CFDictionaryValueCallBacks) CFMutableDictionaryRef { -+ r0, _ := syscallN(0, _mkcgo_CFDictionaryCreateMutable_trampoline_addr, uintptr(allocator), uintptr(capacity), uintptr(mkcgoEscapePtrSecurity(unsafe.Pointer(keyCallBacks))), uintptr(mkcgoEscapePtrSecurity(unsafe.Pointer(valueCallBacks)))) -+ return CFMutableDictionaryRef(r0) -+} -+ -+var _mkcgo_CFDictionarySetValue_trampoline_addr uintptr -+ -+func CFDictionarySetValue(theDict CFMutableDictionaryRef, key unsafe.Pointer, value unsafe.Pointer) { -+ syscallN(0, _mkcgo_CFDictionarySetValue_trampoline_addr, uintptr(theDict), uintptr(key), uintptr(value)) -+} -+ -+var _mkcgo_CFErrorCopyDescription_trampoline_addr uintptr -+ -+func CFErrorCopyDescription(__error CFErrorRef) CFStringRef { -+ r0, _ := syscallN(0, _mkcgo_CFErrorCopyDescription_trampoline_addr, uintptr(__error)) -+ return CFStringRef(r0) -+} -+ -+var _mkcgo_CFErrorGetCode_trampoline_addr uintptr -+ -+func CFErrorGetCode(__error CFErrorRef) CFIndex { -+ r0, _ := syscallN(0, _mkcgo_CFErrorGetCode_trampoline_addr, uintptr(__error)) -+ return CFIndex(r0) -+} -+ -+var _mkcgo_CFNumberCreate_trampoline_addr uintptr -+ -+func CFNumberCreate(allocator CFAllocatorRef, theType CFNumberType, valuePtr unsafe.Pointer) CFNumberRef { -+ r0, _ := syscallN(0, _mkcgo_CFNumberCreate_trampoline_addr, uintptr(allocator), uintptr(theType), uintptr(valuePtr)) -+ return CFNumberRef(r0) -+} -+ -+var _mkcgo_CFRelease_trampoline_addr uintptr -+ -+func CFRelease(cf CFTypeRef) { -+ syscallN(0, _mkcgo_CFRelease_trampoline_addr, uintptr(cf)) -+} -+ -+var _mkcgo_CFStringGetCStringPtr_trampoline_addr uintptr -+ -+func CFStringGetCStringPtr(str CFStringRef, encoding CFStringEncoding) *byte { -+ r0, _ := syscallN(0, _mkcgo_CFStringGetCStringPtr_trampoline_addr, uintptr(str), uintptr(encoding)) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_CFStringGetLength_trampoline_addr uintptr -+ -+func CFStringGetLength(str CFStringRef) CFIndex { -+ r0, _ := syscallN(0, _mkcgo_CFStringGetLength_trampoline_addr, uintptr(str)) -+ return CFIndex(r0) -+} -+ -+var _mkcgo_SecKeyCopyExternalRepresentation_trampoline_addr uintptr -+ -+func SecKeyCopyExternalRepresentation(key SecKeyRef, __error *CFErrorRef) CFDataRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCopyExternalRepresentation_trampoline_addr, uintptr(key), uintptr(unsafe.Pointer(__error))) -+ return CFDataRef(r0) -+} -+ -+var _mkcgo_SecKeyCopyPublicKey_trampoline_addr uintptr -+ -+func SecKeyCopyPublicKey(key SecKeyRef) SecKeyRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCopyPublicKey_trampoline_addr, uintptr(key)) -+ return SecKeyRef(r0) -+} -+ -+var _mkcgo_SecKeyCreateDecryptedData_trampoline_addr uintptr -+ -+func SecKeyCreateDecryptedData(key SecKeyRef, algorithm SecKeyAlgorithm, ciphertext CFDataRef, __error *CFErrorRef) CFDataRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCreateDecryptedData_trampoline_addr, uintptr(key), uintptr(algorithm), uintptr(ciphertext), uintptr(unsafe.Pointer(__error))) -+ return CFDataRef(r0) -+} -+ -+var _mkcgo_SecKeyCreateEncryptedData_trampoline_addr uintptr -+ -+func SecKeyCreateEncryptedData(key SecKeyRef, algorithm SecKeyAlgorithm, plaintext CFDataRef, __error *CFErrorRef) CFDataRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCreateEncryptedData_trampoline_addr, uintptr(key), uintptr(algorithm), uintptr(plaintext), uintptr(unsafe.Pointer(__error))) -+ return CFDataRef(r0) -+} -+ -+var _mkcgo_SecKeyCreateRandomKey_trampoline_addr uintptr -+ -+func SecKeyCreateRandomKey(parameters CFDictionaryRef, __error *CFErrorRef) SecKeyRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCreateRandomKey_trampoline_addr, uintptr(parameters), uintptr(unsafe.Pointer(__error))) -+ return SecKeyRef(r0) -+} -+ -+var _mkcgo_SecKeyCreateSignature_trampoline_addr uintptr -+ -+func SecKeyCreateSignature(key SecKeyRef, algorithm SecKeyAlgorithm, data CFDataRef, __error *CFErrorRef) CFDataRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCreateSignature_trampoline_addr, uintptr(key), uintptr(algorithm), uintptr(data), uintptr(unsafe.Pointer(__error))) -+ return CFDataRef(r0) -+} -+ -+var _mkcgo_SecKeyCreateWithData_trampoline_addr uintptr -+ -+func SecKeyCreateWithData(keyData CFDataRef, attributes CFDictionaryRef, __error *CFErrorRef) SecKeyRef { -+ r0, _ := syscallN(0, _mkcgo_SecKeyCreateWithData_trampoline_addr, uintptr(keyData), uintptr(attributes), uintptr(unsafe.Pointer(__error))) -+ return SecKeyRef(r0) -+} -+ -+var _mkcgo_SecKeyGetBlockSize_trampoline_addr uintptr -+ -+func SecKeyGetBlockSize(key SecKeyRef) int { -+ r0, _ := syscallN(0, _mkcgo_SecKeyGetBlockSize_trampoline_addr, uintptr(key)) -+ return int(r0) -+} -+ -+var _mkcgo_SecKeyIsAlgorithmSupported_trampoline_addr uintptr -+ -+func SecKeyIsAlgorithmSupported(key SecKeyRef, operation SecKeyOperationType, algorithm SecKeyAlgorithm) Boolean { -+ r0, _ := syscallN(0, _mkcgo_SecKeyIsAlgorithmSupported_trampoline_addr, uintptr(key), uintptr(operation), uintptr(algorithm)) -+ return Boolean(r0) -+} -+ -+var _mkcgo_SecKeyVerifySignature_trampoline_addr uintptr -+ -+func SecKeyVerifySignature(key SecKeyRef, algorithm SecKeyAlgorithm, signedData CFDataRef, signature CFDataRef, __error *CFErrorRef) Boolean { -+ r0, _ := syscallN(0, _mkcgo_SecKeyVerifySignature_trampoline_addr, uintptr(key), uintptr(algorithm), uintptr(signedData), uintptr(signature), uintptr(unsafe.Pointer(__error))) -+ return Boolean(r0) -+} -+ -+var _mkcgo_SecRandomCopyBytes_trampoline_addr uintptr -+ -+func SecRandomCopyBytes(rnd SecRandomRef, bytes []byte) int32 { -+ r0, _ := syscallN(0, _mkcgo_SecRandomCopyBytes_trampoline_addr, uintptr(rnd), uintptr(len(bytes)), uintptr(unsafe.Pointer(unsafe.SliceData(bytes)))) -+ return int32(r0) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_amd64.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_amd64.s -new file mode 100644 -index 00000000000000..512d8087daf527 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_amd64.s -@@ -0,0 +1,120 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16 -+#ifdef GOOS_windows -+ MOVQ CX, 0(SP) -+ -+#else -+ MOVQ DI, 0(SP) -+ -+#endif -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+#ifdef GOOS_windows -+#define RegArgsN 4 -+#else -+#define RegArgsN 6 -+#endif -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $16-8 -+ // Load pointer from stack (ABI0 calling convention) -+ // Store argument and original SP in a callee-saved register -+ MOVQ libcArgs+0(FP), R13 -+ MOVQ SP, R14 -+ -+ // Align stack to 16 bytes -+ ANDQ $~15, SP -+ -+ MOVQ libcCallInfo_fn(R13), R11 -+ MOVQ libcCallInfo_n(R13), CX -+ MOVQ libcCallInfo_args(R13), R10 -+ -+ // Fast version, do not store args on the stack. -+ CMPL CX, $0; JE _0args -+ CMPL CX, $1; JE _1args -+ CMPL CX, $2; JE _2args -+ CMPL CX, $3; JE _3args -+ CMPL CX, $4; JE _4args -+ -+#ifndef GOOS_windows // Windows does not pass more than 4 args in registers -+ CMPL CX, $5; JE _5args -+ CMPL CX, $6; JE _6args -+ -+#endif -+ -+ // Reserve stack space for remaining args -+ MOVQ CX, R12 -+ SUBQ $RegArgsN, R12 -+ ADDQ $1, R12 // make even number of words for stack alignment -+ ANDQ $~1, R12 -+ SHLQ $3, R12 -+ SUBQ R12, SP -+ -+ // Copy args to the stack. -+ // CX: count of stack arguments (n-RegArgsN) -+ // SI: &args[RegArgsN] -+ // DI: copy of RSP -+ SUBQ $RegArgsN, CX -+ MOVQ R10, SI -+ ADDQ $(8*RegArgsN), SI -+ MOVQ SP, DI -+ CLD -+ REP; MOVSQ -+ -+#ifndef GOOS_windows -+_6args: -+ MOVQ (5*8)(R10), R9 -+ -+_5args: -+ MOVQ (4*8)(R10), R8 -+ -+#endif -+_4args: -+ MOVQ (3*8)(R10), CX -+ -+_3args: -+ MOVQ (2*8)(R10), DX -+ -+_2args: -+ MOVQ (1*8)(R10), SI -+ -+_1args: -+ MOVQ (0*8)(R10), DI -+ -+_0args: -+ -+ XORL AX, AX // vararg: say "no float args" -+ -+#ifdef GOOS_windows -+ // Windows x64 syscall ABI: first four integer args in CX, DX, R8, R9 -+ // and 32 bytes of shadow space on the stack. -+ ADJSP $32 -+ MOVQ CX, R9 -+ MOVQ DX, R8 -+ MOVQ SI, DX -+ MOVQ DI, CX -+ -+#endif -+ -+ CALL R11 -+ -+#ifdef GOOS_windows -+ ADJSP $-32 -+ -+#endif -+ -+ MOVQ R14, SP // free stack space -+ -+ // Return result. -+ MOVQ AX, libcCallInfo_r1(R13) -+ MOVQ DX, libcCallInfo_r2(R13) -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_arm64.s b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_arm64.s -new file mode 100644 -index 00000000000000..261a7e4cb90d56 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/asm_arm64.s -@@ -0,0 +1,97 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16 -+ MOVD R0, 8(RSP) -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $0-16 -+ // Save original stack pointer -+ MOVD RSP, R20 -+ -+ // Load pointer from stack (ABI0 calling convention) -+ MOVD libcArgs+0(FP), R3 -+ -+ MOVD libcCallInfo_args(R3), R12 -+ MOVD libcCallInfo_fn(R3), R13 -+ -+ // Do we have more than 8 arguments? -+ MOVD libcCallInfo_n(R3), R0 -+ CMP $0, R0; BEQ _0args -+ CMP $1, R0; BEQ _1args -+ CMP $2, R0; BEQ _2args -+ CMP $3, R0; BEQ _3args -+ CMP $4, R0; BEQ _4args -+ CMP $5, R0; BEQ _5args -+ CMP $6, R0; BEQ _6args -+ CMP $7, R0; BEQ _7args -+ CMP $8, R0; BEQ _8args -+ -+ // Reserve stack space for remaining args -+ SUB $8, R0, R2 -+ ADD $1, R2, R3 // make even number of words for stack alignment -+ AND $~1, R3 -+ LSL $3, R3 -+ SUB R3, RSP -+ -+ // R4: size of stack arguments (n-8)*8 -+ // R5: &args[8] -+ // R6: loop counter, from 0 to (n-8)*8 -+ // R7: scratch -+ // R8: copy of RSP - (R2)(RSP) assembles as (R2)(ZR) -+ SUB $8, R0, R4 -+ LSL $3, R4 -+ ADD $(8*8), R12, R5 -+ MOVD $0, R6 -+ MOVD RSP, R8 -+ -+stackargs: -+ MOVD (R6)(R5), R7 -+ MOVD R7, (R6)(R8) -+ ADD $8, R6 -+ CMP R6, R4 -+ BNE stackargs -+ -+_8args: -+ MOVD (7*8)(R12), R7 -+ -+_7args: -+ MOVD (6*8)(R12), R6 -+ -+_6args: -+ MOVD (5*8)(R12), R5 -+ -+_5args: -+ MOVD (4*8)(R12), R4 -+ -+_4args: -+ MOVD (3*8)(R12), R3 -+ -+_3args: -+ MOVD (2*8)(R12), R2 -+ -+_2args: -+ MOVD (1*8)(R12), R1 -+ -+_1args: -+ MOVD (0*8)(R12), R0 -+ -+_0args: -+ -+ BL (R13) -+ -+ // Restore original stack pointer -+ MOVD R20, RSP -+ -+ MOVD libcArgs+0(FP), R3 -+ MOVD R0, libcCallInfo_r1(R3) // save r1 -+ MOVD R1, libcCallInfo_r2(R3) // save r2 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo.go -new file mode 100644 -index 00000000000000..a9ad56e22fa2ac ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo.go -@@ -0,0 +1,72 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo && (amd64 || arm64) -+ -+package xsyscall -+ -+import ( -+ "unsafe" -+) -+ -+//go:linkname runtime_cgocall runtime.cgocall -+ -+//go:noescape -+func runtime_cgocall(fn uintptr, arg unsafe.Pointer) int32 // from runtime/sys_libc.go -+ -+//go:linkname noescape -+//go:nosplit -+func noescape(p unsafe.Pointer) unsafe.Pointer { -+ x := uintptr(p) -+ return unsafe.Pointer(x ^ 0) -+} -+ -+type libcCallInfo struct { -+ fn uintptr -+ n uintptr // number of parameters -+ args uintptr // parameters -+ r1, r2 uintptr // return values -+ errType uintptr -+} -+ -+//go:noescape -+func syscallNAsm(libcArgs *libcCallInfo) -+ -+// syscallNSystemStack performs a syscall on the system stack. -+// It can't allocate Go memory nor grow the stack over the nosplit limit. -+// -+//go:nosplit -+func syscallNSystemStack(libcArgs *libcCallInfo) { -+ syscallNAsm(libcArgs) -+} -+ -+var syscallNSystemStack_trampoline byte -+var syscallNSystemStackABIInternal = uintptr(unsafe.Pointer(&syscallNSystemStack_trampoline)) -+ -+// SyscallN performs a syscall with the given function and arguments. -+// -+// All its parameters and return values must be uintptr in order -+// for the Go compiler to automatically set the //go:uintptrkeepalive -+// directive (which we can't set manually here). -+// See https://github.com/golang/go/blob/9a5a1202f4c4d5a7048b149b65c3e5b82a2de9aa/src/cmd/compile/internal/escape/call.go#L275. -+// -+//go:nosplit -+func SyscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ libcArgs := libcCallInfo{ -+ fn: fn, -+ n: uintptr(len(args)), -+ errType: errType, -+ } -+ if libcArgs.n != 0 { -+ libcArgs.args = uintptr(noescape(unsafe.Pointer(&args[0]))) -+ } -+ runtime_cgocall(syscallNSystemStackABIInternal, unsafe.Pointer(&libcArgs)) -+ return libcArgs.r1, libcArgs.r2 -+} -+ -+// Shim syscallN calls SyscallN. -+// -+//go:nosplit -+func syscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ return SyscallN(errType, fn, args...) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_darwin.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_darwin.go -new file mode 100644 -index 00000000000000..2d4d32fca87fdb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_darwin.go -@@ -0,0 +1,10 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package xsyscall -+ -+import ( -+ _ "github.com/microsoft/go-crypto-darwin/internal/fakecgo" -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_others.go b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_others.go -new file mode 100644 -index 00000000000000..28dba16a23340e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/internal/xsyscall/syscall_nocgo_others.go -@@ -0,0 +1,14 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo && !(amd64 || arm64) -+ -+package xsyscall -+ -+// Implement a mock version of SyscallN for unsupported architectures. -+// This will simply panic to indicate that the syscall is not supported. -+ -+//go:nosplit -+func SyscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ panic("SyscallN is not supported on this architecture") -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/aes.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/aes.go -new file mode 100644 -index 00000000000000..5f005eda956f2c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/aes.go -@@ -0,0 +1,152 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ "slices" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/commoncrypto" -+) -+ -+//go:generate go run github.com/microsoft/go-crypto-darwin/cmd/gentestvectors -out vectors_test.go -+ -+type cipherGCMTLS uint8 -+ -+const ( -+ cipherGCMTLSNone cipherGCMTLS = iota -+ cipherGCMTLS12 -+ cipherGCMTLS13 -+) -+ -+const ( -+ // AES block size is the same for all key sizes -+ aesBlockSize = commoncrypto.KCCBlockSizeAES128 -+ gcmTagSize = 16 -+ gcmStandardNonceSize = 12 -+ // TLS 1.2 additional data is constructed as: -+ // -+ // additional_data = seq_num(8) + TLSCompressed.type(1) + TLSCompressed.version(2) + TLSCompressed.length(2); -+ gcmTls12AddSize = 13 -+ // TLS 1.3 additional data is constructed as: -+ // -+ // additional_data = TLSCiphertext.opaque_type(1) || TLSCiphertext.legacy_record_version(2) || TLSCiphertext.length(2) -+ gcmTls13AddSize = 5 -+ gcmTlsFixedNonceSize = 4 -+) -+ -+type aesCipher struct { -+ key []byte -+ kind commoncrypto.CCAlgorithm -+} -+ -+func NewAESCipher(key []byte) (cipher.Block, error) { -+ var alg commoncrypto.CCAlgorithm -+ switch len(key) { -+ case 16, 24, 32: -+ alg = commoncrypto.KCCAlgorithmAES -+ default: -+ return nil, errors.New("crypto/aes: invalid key size") -+ } -+ c := &aesCipher{ -+ key: slices.Clone(key), -+ kind: alg, -+ } -+ return c, nil -+} -+ -+func (c *aesCipher) BlockSize() int { return aesBlockSize } -+ -+func (c *aesCipher) Encrypt(dst, src []byte) { -+ blockSize := c.BlockSize() -+ if len(src) < blockSize || len(dst) < blockSize { -+ panic("crypto/aes: input or output block is too small") -+ } -+ -+ src, dst = src[:blockSize], dst[:blockSize] -+ -+ if inexactOverlap(dst, src) { -+ panic("crypto/aes: invalid buffer overlap") -+ } -+ -+ status := commoncrypto.CCCrypt( -+ commoncrypto.KCCEncrypt, // Operation -+ commoncrypto.CCAlgorithm(c.kind), // Algorithm -+ 0, // Options -+ c.key, // Key -+ nil, // IV -+ src, // Input -+ dst, // Output -+ nil, // Output length -+ ) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/aes: encryption failed") -+ } -+} -+ -+func (c *aesCipher) Decrypt(dst, src []byte) { -+ blockSize := c.BlockSize() -+ if len(src) < blockSize || len(dst) < blockSize { -+ panic("crypto/aes: input or output block is too small") -+ } -+ -+ src, dst = src[:blockSize], dst[:blockSize] -+ -+ if inexactOverlap(dst, src) { -+ panic("crypto/aes: invalid buffer overlap") -+ } -+ -+ status := commoncrypto.CCCrypt( -+ commoncrypto.KCCDecrypt, // Operation -+ commoncrypto.CCAlgorithm(c.kind), // Algorithm -+ 0, // Options -+ c.key, // Key -+ nil, // IV -+ src, // Input -+ dst, // Output -+ nil, // Output length -+ ) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/aes: decryption failed") -+ } -+} -+ -+var errOpen = errors.New("cipher: message authentication failed") -+ -+func (c *aesCipher) NewCBCEncrypter(iv []byte) cipher.BlockMode { -+ return newCBC(commoncrypto.KCCEncrypt, c.kind, c.key, iv) -+} -+ -+func (c *aesCipher) NewFIPSCBCEncrypter(iv []byte) cipher.BlockMode { -+ return newCBC(commoncrypto.KCCEncrypt, c.kind, c.key, iv) -+} -+ -+func (c *aesCipher) NewCBCDecrypter(iv []byte) cipher.BlockMode { -+ return newCBC(commoncrypto.KCCDecrypt, c.kind, c.key, iv) -+} -+ -+func (c *aesCipher) NewFIPSCBCDecrypter(iv []byte) cipher.BlockMode { -+ return newCBC(commoncrypto.KCCDecrypt, c.kind, c.key, iv) -+} -+ -+// sliceForAppend is a mirror of crypto/cipher.sliceForAppend. -+func sliceForAppend(in []byte, n int) (head, tail []byte) { -+ if total := len(in) + n; cap(in) >= total { -+ head = in[:total] -+ } else { -+ head = make([]byte, total) -+ copy(head, in) -+ } -+ tail = head[len(in):] -+ return -+} -+ -+func bigUint64(b []byte) uint64 { -+ _ = b[7] // bounds check hint to compiler; see go.dev/issue/14808 -+ return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | -+ uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/big.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/big.go -new file mode 100644 -index 00000000000000..865e22ab6a3dda ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/big.go -@@ -0,0 +1,16 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package xcrypto -+ -+// This file does not have build constraints to -+// facilitate using BigInt in Go crypto. -+// Go crypto references BigInt unconditionally, -+// even if it is not finally used. -+ -+// A BigInt is the big-endian bytes from a math/big BigInt, -+// which are normalized to remove any leading 0 byte. -+// Windows BCrypt accepts this specific data format. -+// This definition allows us to avoid importing math/big. -+// Conversion between BigInt and *big.Int is in xcrypto/bbig. -+type BigInt []byte -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/chacha20poly1305.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/chacha20poly1305.go -new file mode 100644 -index 00000000000000..b0ad6c0aeaff09 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/chacha20poly1305.go -@@ -0,0 +1,88 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+const ( -+ chacha20Poly1305KeySize = 32 -+ chacha20Poly1305NonceSize = 12 -+ chacha20Poly1305Overhead = 16 -+) -+ -+type chacha20poly1305 struct { -+ key [chacha20Poly1305KeySize]byte -+} -+ -+// NewChaCha20Poly1305 returns a ChaCha20-Poly1305 AEAD that uses the given 256-bit key. -+func NewChaCha20Poly1305(key []byte) (cipher.AEAD, error) { -+ if len(key) != chacha20Poly1305KeySize { -+ return nil, errors.New("chacha20poly1305: bad key length") -+ } -+ ret := new(chacha20poly1305) -+ copy(ret.key[:], key) -+ return ret, nil -+} -+ -+func (c *chacha20poly1305) NonceSize() int { -+ return chacha20Poly1305NonceSize -+} -+ -+func (c *chacha20poly1305) Overhead() int { -+ return chacha20Poly1305Overhead -+} -+ -+func (c *chacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { -+ if len(nonce) != chacha20Poly1305NonceSize { -+ panic("chacha20poly1305: bad nonce length passed to Seal") -+ } -+ if uint64(len(plaintext)) > (1<<38)-64 { -+ panic("chacha20poly1305: plaintext too large") -+ } -+ ret, out := sliceForAppend(dst, len(plaintext)+chacha20Poly1305Overhead) -+ if inexactOverlap(out, plaintext) { -+ panic("chacha20poly1305: invalid buffer overlap of output and input") -+ } -+ if anyOverlap(out, additionalData) { -+ panic("chacha20poly1305: invalid buffer overlap of output and additional data") -+ } -+ tag := out[len(out)-chacha20Poly1305Overhead:] -+ if cryptokit.EncryptChaChaPoly(c.key[:], plaintext, nonce, additionalData, out[:len(plaintext)], tag) != 0 { -+ panic("chacha20poly1305: encryption failed") -+ } -+ return ret -+} -+ -+func (c *chacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { -+ if len(nonce) != chacha20Poly1305NonceSize { -+ panic("chacha20poly1305: bad nonce length passed to Open") -+ } -+ if len(ciphertext) < 16 { -+ return nil, errOpen -+ } -+ if uint64(len(ciphertext)) > (1<<38)-48 { -+ panic("chacha20poly1305: ciphertext too large") -+ } -+ tag := ciphertext[len(ciphertext)-chacha20Poly1305Overhead:] -+ ciphertext = ciphertext[:len(ciphertext)-chacha20Poly1305Overhead] -+ ret, out := sliceForAppend(dst, len(ciphertext)) -+ if inexactOverlap(out, ciphertext) { -+ panic("chacha20poly1305: invalid buffer overlap of output and input") -+ } -+ if anyOverlap(out, additionalData) { -+ panic("chacha20poly1305: invalid buffer overlap of output and additional data") -+ } -+ var outLen int -+ if cryptokit.DecryptChaChaPoly(c.key[:], ciphertext, nonce, additionalData, tag, out, &outLen) != 0 { -+ return nil, errOpen -+ } -+ return ret[:len(dst)+outLen], nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/cipher.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/cipher.go -new file mode 100644 -index 00000000000000..d4c550b90fafae ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/cipher.go -@@ -0,0 +1,114 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/commoncrypto" -+) -+ -+type cbcCipher struct { -+ blockSize int -+ cryptor commoncrypto.CCCryptorRef -+} -+ -+func newCBC(operation commoncrypto.CCOperation, kind commoncrypto.CCAlgorithm, key, iv []byte) *cbcCipher { -+ var blockSize int -+ switch kind { -+ case commoncrypto.KCCAlgorithmAES: -+ blockSize = aesBlockSize -+ case commoncrypto.KCCAlgorithmDES, commoncrypto.KCCAlgorithm3DES: -+ blockSize = desBlockSize -+ default: -+ panic("invalid algorithm") -+ } -+ -+ // Create and initialize the cbcMode struct with CCCryptorCreateWithMode here -+ x := &cbcCipher{blockSize: blockSize} -+ status := commoncrypto.CCCryptorCreateWithMode( -+ operation, // Specifies whether encryption or decryption is performed (kCCEncrypt or kCCDecrypt). -+ commoncrypto.KCCModeCBC, // Mode of operation, here explicitly set to CBC (Cipher Block Chaining). -+ commoncrypto.CCAlgorithm(kind), // The encryption algorithm (e.g., kCCAlgorithmAES128, kCCAlgorithmDES). -+ commoncrypto.CcNoPadding, // Padding option, set to no padding; padding can be handled at a higher level if necessary. -+ iv, // Initialization Vector (IV) for the cipher, required for CBC mode. Should be nil for ECB mode. -+ key, // PEncryption key. -+ nil, // Tweak key, used only for XTS mode; here set to nil as it’s not required for CBC. -+ 0, // Number of rounds, mainly for RC2 and Blowfish; not used here, so set to 0. -+ 0, // Mode options for CTR and F8 modes; not used for CBC, so set to 0. -+ &x.cryptor, // Pointer to the CCCryptorRef output, which will hold the state for encryption or decryption. -+ ) -+ -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/des: CCCryptorCreateWithMode failed") -+ } -+ -+ runtime.SetFinalizer(x, (*cbcCipher).finalize) -+ return x -+ -+} -+ -+func (x *cbcCipher) finalize() { -+ if x.cryptor != nil { -+ commoncrypto.CCCryptorRelease(x.cryptor) -+ x.cryptor = nil -+ } -+} -+ -+func (x *cbcCipher) BlockSize() int { return x.blockSize } -+ -+func (x *cbcCipher) CryptBlocks(dst, src []byte) { -+ if inexactOverlap(dst, src) { -+ panic("crypto/cipher: invalid buffer overlap") -+ } -+ if len(src)%x.blockSize != 0 { -+ panic("crypto/cipher: input not full blocks") -+ } -+ if len(dst) < len(src) { -+ panic("crypto/cipher: output smaller than input") -+ } -+ if len(src) == 0 { -+ return -+ } -+ var outLength int -+ status := commoncrypto.CCCryptorUpdate( -+ x.cryptor, // CCCryptorRef created by CCCryptorCreateWithMode; holds the encryption/decryption state. -+ src, // Input data (source buffer) to be encrypted or decrypted. -+ dst, // Output buffer (destination buffer) where the result will be stored. -+ &outLength, // Pointer to a variable that will contain the number of bytes written to the output buffer. -+ ) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/cipher: CCCryptorUpdate failed") -+ } -+ runtime.KeepAlive(x) -+} -+ -+func (x *cbcCipher) SetIV(iv []byte) { -+ if len(iv) != x.blockSize { -+ panic("crypto/cipher: incorrect IV length") -+ } -+ status := commoncrypto.CCCryptorReset(x.cryptor, iv) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/cipher: CCCryptorReset failed") -+ } -+ runtime.KeepAlive(x) -+} -+ -+// The following two functions are a mirror of golang.org/x/crypto/internal/subtle. -+ -+func anyOverlap(x, y []byte) bool { -+ return len(x) > 0 && len(y) > 0 && -+ uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) && -+ uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1])) -+} -+ -+func inexactOverlap(x, y []byte) bool { -+ if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] { -+ return false -+ } -+ return anyOverlap(x, y) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/des.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/des.go -new file mode 100644 -index 00000000000000..c27d6db4fe472a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/des.go -@@ -0,0 +1,111 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ "slices" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/commoncrypto" -+) -+ -+const desBlockSize = commoncrypto.KCCBlockSizeDES -+ -+type desCipher struct { -+ key []byte -+ kind commoncrypto.CCAlgorithm -+} -+ -+// NewDESCipher creates a new DES cipher block using the specified key (8 bytes). -+func NewDESCipher(key []byte) (cipher.Block, error) { -+ if len(key) != 8 { -+ return nil, errors.New("crypto/des: invalid key size for DES") -+ } -+ -+ c := &desCipher{ -+ key: slices.Clone(key), -+ kind: commoncrypto.KCCAlgorithmDES, -+ } -+ return c, nil -+} -+ -+// NewTripleDESCipher creates a new 3DES cipher block using the specified key (24 bytes). -+func NewTripleDESCipher(key []byte) (cipher.Block, error) { -+ if len(key) != 24 { -+ return nil, errors.New("crypto/des: invalid key size for 3DES") -+ } -+ -+ c := &desCipher{ -+ key: slices.Clone(key), -+ kind: commoncrypto.KCCAlgorithm3DES, -+ } -+ return c, nil -+} -+ -+func (c *desCipher) BlockSize() int { return desBlockSize } -+ -+func (c *desCipher) Encrypt(dst, src []byte) { -+ blockSize := c.BlockSize() -+ if len(src) < blockSize || len(dst) < blockSize { -+ panic("crypto/des: input or output block is too small") -+ } -+ -+ if inexactOverlap(dst[:blockSize], src[:blockSize]) { -+ panic("crypto/des: invalid buffer overlap") -+ } -+ -+ var outLength int -+ status := commoncrypto.CCCrypt( -+ commoncrypto.KCCEncrypt, -+ commoncrypto.CCAlgorithm(c.kind), -+ commoncrypto.KCCOptionECBMode, -+ c.key, -+ nil, -+ src[:blockSize], -+ dst[:blockSize], -+ &outLength, -+ ) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/des: encryption failed") -+ } -+} -+ -+func (c *desCipher) Decrypt(dst, src []byte) { -+ blockSize := c.BlockSize() -+ if len(src) < blockSize || len(dst) < blockSize { -+ panic("crypto/des: input or output block is too small") -+ } -+ -+ if inexactOverlap(dst[:blockSize], src[:blockSize]) { -+ panic("crypto/des: invalid buffer overlap") -+ } -+ -+ var outLength int -+ status := commoncrypto.CCCrypt( -+ commoncrypto.KCCDecrypt, -+ commoncrypto.CCAlgorithm(c.kind), -+ commoncrypto.KCCOptionECBMode, -+ c.key, -+ nil, -+ src[:blockSize], -+ dst[:blockSize], -+ &outLength, -+ ) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/des: decryption failed") -+ } -+} -+ -+// CBC mode encrypter -+func (c *desCipher) NewCBCEncrypter(iv []byte) cipher.BlockMode { -+ return newCBC(commoncrypto.KCCEncrypt, c.kind, c.key, iv) -+} -+ -+// CBC mode decrypter -+func (c *desCipher) NewCBCDecrypter(iv []byte) cipher.BlockMode { -+ return newCBC(commoncrypto.KCCDecrypt, c.kind, c.key, iv) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ec.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ec.go -new file mode 100644 -index 00000000000000..b14fc4ddb1c235 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ec.go -@@ -0,0 +1,39 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import "errors" -+ -+// curveToID maps a curve name to its corresponding CryptoKit curve ID. -+func curveToID(curve string) (int32, error) { -+ switch curve { -+ case "P-256": -+ return 1, nil -+ case "P-384": -+ return 2, nil -+ case "P-521": -+ return 3, nil -+ case "X25519": -+ return 0, nil -+ default: -+ return -1, errors.New("unsupported curve") -+ } -+} -+ -+func curveToKeySizeInBytes(curve string) int { -+ switch curve { -+ case "P-256": -+ return (256 + 7) / 8 -+ case "P-384": -+ return (384 + 7) / 8 -+ case "P-521": -+ return (521 + 7) / 8 -+ case "X25519": -+ return 32 -+ default: -+ return 0 -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdh.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdh.go -new file mode 100644 -index 00000000000000..d59db1be807ac5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdh.go -@@ -0,0 +1,146 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "errors" -+ "slices" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+type PublicKeyECDH struct { -+ bytes []byte -+} -+ -+type PrivateKeyECDH struct { -+ pub []byte -+ priv []byte // For X25519: the actual private key bytes -+ curve string // Track the curve type -+} -+ -+func NewPublicKeyECDH(curve string, bytes []byte) (*PublicKeyECDH, error) { -+ if len(bytes) < 1 { -+ return nil, errors.New("NewPublicKeyECDH: missing key") -+ } -+ -+ curveID, err := curveToID(curve) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Validate the public key -+ ret := cryptokit.ValidatePublicKeyECDH(curveID, bytes) -+ if ret != 0 { -+ return nil, errors.New("invalid public key") -+ } -+ -+ // For all curves (including EC curves), we just store the bytes -+ // X25519 uses raw 32-byte format -+ // EC curves use uncompressed X9.63 format (0x04 || x || y) -+ return &PublicKeyECDH{bytes: slices.Clone(bytes)}, nil -+} -+ -+func (k *PublicKeyECDH) Bytes() []byte { return k.bytes } -+ -+// bytes expects the public key to be in uncompressed ANSI X9.63 format -+func NewPrivateKeyECDH(curve string, priv []byte) (*PrivateKeyECDH, error) { -+ curveID, err := curveToID(curve) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Validate the private key -+ ret := cryptokit.ValidatePrivateKeyECDH(curveID, priv) -+ if ret != 0 { -+ return nil, errors.New("invalid private key") -+ } -+ -+ // Derive the public key -+ keySize := curveToKeySizeInBytes(curve) -+ var pubKeySize int -+ if curve == "X25519" { -+ pubKeySize = 32 -+ } else { -+ pubKeySize = 1 + keySize*2 -+ } -+ -+ publicKey := make([]byte, pubKeySize) -+ ret = cryptokit.PublicKeyFromPrivateECDH(curveID, priv, publicKey) -+ if ret != 0 { -+ return nil, errors.New("failed to derive public key") -+ } -+ -+ privKey := &PrivateKeyECDH{ -+ pub: publicKey, -+ priv: slices.Clone(priv), -+ curve: curve, -+ } -+ return privKey, nil -+} -+ -+func (k *PrivateKeyECDH) PublicKey() (*PublicKeyECDH, error) { -+ // For all curves, just return the stored public key bytes -+ return &PublicKeyECDH{ -+ bytes: slices.Clone(k.pub), -+ }, nil -+} -+ -+func ECDH(priv *PrivateKeyECDH, pub *PublicKeyECDH) ([]byte, error) { -+ if priv == nil || pub == nil { -+ return nil, errors.New("invalid keys") -+ } -+ -+ curveID, err := curveToID(priv.curve) -+ if err != nil { -+ return nil, err -+ } -+ -+ keySize := curveToKeySizeInBytes(priv.curve) -+ sharedSecret := make([]byte, keySize) -+ -+ ret := cryptokit.EcdhSharedSecret(curveID, priv.priv, pub.bytes, sharedSecret) -+ if ret != 0 { -+ return nil, errors.New("ECDH: key exchange failed") -+ } -+ -+ return sharedSecret, nil -+} -+ -+func GenerateKeyECDH(curve string) (*PrivateKeyECDH, []byte, error) { -+ keySize := curveToKeySizeInBytes(curve) -+ if keySize == 0 { -+ return nil, nil, errors.New("unsupported curve") -+ } -+ -+ curveID, err := curveToID(curve) -+ if err != nil { -+ return nil, nil, err -+ } -+ -+ var pubKeySize int -+ if curve == "X25519" { -+ pubKeySize = 32 -+ } else { -+ pubKeySize = 1 + keySize*2 -+ } -+ -+ privateKey := make([]byte, keySize) -+ publicKey := make([]byte, pubKeySize) -+ -+ ret := cryptokit.GenerateKeyECDH(curveID, privateKey, publicKey) -+ if ret != 0 { -+ return nil, nil, errors.New("EC key generation failed") -+ } -+ -+ // Store the public key in X9.63 format and the private key -+ k := &PrivateKeyECDH{ -+ pub: slices.Clone(publicKey), -+ priv: slices.Clone(privateKey), -+ curve: curve, -+ } -+ return k, slices.Clone(privateKey), nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdsa.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdsa.go -new file mode 100644 -index 00000000000000..82d68bfabe9c62 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ecdsa.go -@@ -0,0 +1,154 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+type PrivateKeyECDSA struct { -+ x BigInt // public key x coordinate -+ y BigInt // public key y coordinate -+ d BigInt // private key -+ curve string // curve name -+} -+ -+type PublicKeyECDSA struct { -+ x BigInt // public key x coordinate -+ y BigInt // public key y coordinate -+ curve string // curve name -+} -+ -+func NewPublicKeyECDSA(curve string, x, y BigInt) (*PublicKeyECDSA, error) { -+ keySize := curveToKeySizeInBytes(curve) -+ if keySize == 0 { -+ return nil, errors.New("unsupported curve") -+ } -+ // Validate that x and y are of appropriate length -+ if len(x) > keySize || len(y) > keySize { -+ return nil, errors.New("public key coordinates are too large") -+ } -+ pubKey := &PublicKeyECDSA{ -+ x: x, -+ y: y, -+ curve: curve, -+ } -+ return pubKey, nil -+} -+ -+// NewPrivateKeyECDSA creates a new ECDSA private key using the provided curve name and parameters (x, y, d). -+func NewPrivateKeyECDSA(curve string, x, y, d BigInt) (*PrivateKeyECDSA, error) { -+ keySize := curveToKeySizeInBytes(curve) -+ if keySize == 0 { -+ return nil, errors.New("unsupported curve") -+ } -+ // Validate that x, y, and d are of appropriate length -+ if len(x) > keySize || len(y) > keySize || len(d) > keySize { -+ return nil, errors.New("key parameters are too large") -+ } -+ privKey := &PrivateKeyECDSA{ -+ x: x, -+ y: y, -+ d: d, -+ curve: curve, -+ } -+ return privKey, nil -+} -+ -+func GenerateKeyECDSA(curve string) (x, y, d BigInt, err error) { -+ keySize := curveToKeySizeInBytes(curve) -+ if keySize == 0 { -+ return nil, nil, nil, errors.New("unsupported curve") -+ } -+ -+ curveID, err := curveToID(curve) -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ -+ // Generate key using CryptoKit -+ xBytes := make([]byte, keySize) -+ yBytes := make([]byte, keySize) -+ dBytes := make([]byte, keySize) -+ -+ ret := cryptokit.GenerateKeyECDSA(curveID, xBytes, yBytes, dBytes) -+ if ret != 0 { -+ return nil, nil, nil, errors.New("ECDSA key generation failed") -+ } -+ -+ return normalizeBigInt(xBytes), normalizeBigInt(yBytes), normalizeBigInt(dBytes), nil -+} -+ -+func SignMarshalECDSA(priv *PrivateKeyECDSA, hashed []byte) ([]byte, error) { -+ if priv == nil || len(hashed) == 0 { -+ return nil, errors.New("invalid parameters") -+ } -+ -+ curveID, err := curveToID(priv.curve) -+ if err != nil { -+ return nil, err -+ } -+ -+ keySize := curveToKeySizeInBytes(priv.curve) -+ -+ // Normalize private key to proper size -+ dBytes := make([]byte, keySize) -+ copy(dBytes[len(dBytes)-len(priv.d):], priv.d) -+ -+ // Allocate signature buffer (max size for DER-encoded signature) -+ maxSigLen := 256 -+ signature := make([]byte, maxSigLen) -+ sigLen := int64(0) -+ -+ ret := cryptokit.EcdsaSign(curveID, dBytes, hashed, signature, &sigLen) -+ if ret != 0 { -+ return nil, errors.New("ECDSA signing failed") -+ } -+ -+ if sigLen <= 0 || sigLen > int64(len(signature)) { -+ return nil, errors.New("invalid signature length") -+ } -+ -+ return signature[:sigLen], nil -+} -+ -+func VerifyECDSA(pub *PublicKeyECDSA, hashed []byte, sig []byte) bool { -+ if pub == nil || len(hashed) == 0 || len(sig) == 0 { -+ return false -+ } -+ -+ curveID, err := curveToID(pub.curve) -+ if err != nil { -+ return false -+ } -+ -+ keySize := curveToKeySizeInBytes(pub.curve) -+ -+ // Normalize public key coordinates to proper size -+ xBytes := make([]byte, keySize) -+ yBytes := make([]byte, keySize) -+ -+ // Safety check: ensure BigInts are not longer than keySize -+ if len(pub.x) > keySize || len(pub.y) > keySize { -+ return false -+ } -+ -+ copy(xBytes[len(xBytes)-len(pub.x):], pub.x) -+ copy(yBytes[len(yBytes)-len(pub.y):], pub.y) -+ -+ ret := cryptokit.EcdsaVerify(curveID, xBytes, yBytes, hashed, sig) -+ return ret == 1 -+} -+ -+func normalizeBigInt(b []byte) BigInt { -+ // Remove leading zero bytes -+ for len(b) > 0 && b[0] == 0 { -+ b = b[1:] -+ } -+ return b -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ed25519.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ed25519.go -new file mode 100644 -index 00000000000000..316ecba6792d47 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/ed25519.go -@@ -0,0 +1,124 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "errors" -+ "strconv" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+const ( -+ // publicKeySizeEd25519 is the size, in bytes, of public keys as used in crypto/ed25519. -+ publicKeySizeEd25519 = 32 -+ // privateKeySizeEd25519 is the size, in bytes, of private keys as used in crypto/ed25519. -+ privateKeySizeEd25519 = 64 -+ // signatureSizeEd25519 is the size, in bytes, of signatures generated and verified by crypto/ed25519. -+ signatureSizeEd25519 = 64 -+ // seedSizeEd25519 is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. -+ seedSizeEd25519 = 32 -+) -+ -+// PublicKeyEd25519 represents an Ed25519 public key. -+type PublicKeyEd25519 []byte -+ -+// PrivateKeyEd25519 represents an Ed25519 private key. -+type PrivateKeyEd25519 []byte -+ -+func (k PrivateKeyEd25519) Public() PublicKeyEd25519 { -+ publicKey := make([]byte, publicKeySizeEd25519) -+ copy(publicKey, k[seedSizeEd25519:]) -+ return PublicKeyEd25519(publicKey) -+} -+ -+// GenerateKeyEd25519 generates a new Ed25519 private key. -+func GenerateKeyEd25519() PrivateKeyEd25519 { -+ pkeyPriv := make([]byte, privateKeySizeEd25519) -+ cryptokit.GenerateKeyEd25519(pkeyPriv) -+ return pkeyPriv -+} -+ -+func NewPrivateKeyEd25519(priv []byte) (PrivateKeyEd25519, error) { -+ if len(priv) != privateKeySizeEd25519 { -+ panic("ed25519: bad private key length: " + strconv.Itoa(len(priv))) -+ } -+ return NewPrivateKeyEd25519FromSeed(priv[:seedSizeEd25519]) -+} -+ -+func (k PrivateKeyEd25519) Bytes() ([]byte, error) { -+ return k, nil -+} -+ -+func NewPublicKeyEd25519(pub []byte) (PublicKeyEd25519, error) { -+ if len(pub) != publicKeySizeEd25519 { -+ panic("ed25519: bad public key length: " + strconv.Itoa(len(pub))) -+ } -+ pkey := make([]byte, publicKeySizeEd25519) -+ result := cryptokit.NewPublicKeyEd25519(pkey, pub) -+ if result != 0 { -+ return nil, errors.New("failed to create Ed25519 public key") -+ } -+ return pkey, nil -+} -+ -+func (k PublicKeyEd25519) Bytes() ([]byte, error) { -+ return k, nil -+} -+ -+// NewPrivateKeyEd25519FromSeed calculates a private key from a seed. It will panic if -+// len(seed) is not [SeedSize]. RFC 8032's private keys correspond to seeds in this -+// package. -+// NewPrivateKeyEd25519FromSeed creates an Ed25519 private key from a seed. -+func NewPrivateKeyEd25519FromSeed(seed []byte) (PrivateKeyEd25519, error) { -+ if len(seed) != seedSizeEd25519 { -+ panic("ed25519: bad seed length: " + strconv.Itoa(len(seed))) -+ } -+ pkey := make([]byte, privateKeySizeEd25519) -+ result := cryptokit.NewPrivateKeyEd25519FromSeed(pkey, seed) -+ if result != 0 { -+ return nil, errors.New("failed to generate Ed25519 key from seed") -+ } -+ return pkey, nil -+} -+ -+// SignEd25519 signs the message with priv and returns a signature. -+func SignEd25519(priv PrivateKeyEd25519, message []byte) ([]byte, error) { -+ sig := make([]byte, signatureSizeEd25519) -+ result := cryptokit.SignEd25519(priv, message, sig) -+ if result < 0 { -+ switch result { -+ case -1: -+ return nil, errors.New("invalid inputs to SignEd25519") -+ case -2: -+ return nil, errors.New("failed to reconstruct private key") -+ case -3: -+ return nil, errors.New("failed to sign the message") -+ case -4: -+ return nil, errors.New("signature buffer too small") -+ default: -+ return nil, errors.New("unknown error in SignEd25519") -+ } -+ } -+ return sig, nil -+} -+ -+// VerifyEd25519 reports whether sig is a valid signature of message by pub. -+func VerifyEd25519(pub PublicKeyEd25519, message, sig []byte) error { -+ result := cryptokit.VerifyEd25519(pub, message, sig) -+ switch result { -+ case 1: -+ return nil // Valid signature -+ case 0: -+ return errors.New("ed25519: invalid signature") -+ case -1: -+ return errors.New("invalid inputs to VerifyEd25519") -+ case -2: -+ return errors.New("failed to reconstruct public key") -+ default: -+ return errors.New("unknown error in VerifyEd25519") -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/evp.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/evp.go -new file mode 100644 -index 00000000000000..a085303b10ac00 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/evp.go -@@ -0,0 +1,339 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "slices" -+ "strconv" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/security" -+) -+ -+type algorithmType int -+ -+const ( -+ algorithmTypePSS algorithmType = iota -+ algorithmTypeRAW -+ algorithmTypePKCS1v15Enc -+ algorithmTypePKCS1v15Sig -+ algorithmTypeOAEP -+ algorithmTypeECDSA -+) -+ -+type withKeyFunc func(func(security.SecKeyRef) error) error -+ -+// Encrypt encrypts a plaintext message using a given key and algorithm. -+func evpEncrypt(withKey withKeyFunc, algorithmType algorithmType, plaintext []byte, hash hash.Hash) ([]byte, error) { -+ var cryptoHash crypto.Hash -+ if hash != nil { -+ var err error -+ cryptoHash, err = hashToCryptoHash(hash) -+ if err != nil { -+ return nil, err -+ } -+ } -+ algorithm, err := selectAlgorithm(cryptoHash, algorithmType) -+ if err != nil { -+ return nil, err -+ } -+ -+ dataRef := bytesToCFData(plaintext) -+ defer cfRelease(unsafe.Pointer(dataRef)) -+ -+ var encryptedDataRef security.CFDataRef -+ err = withKey(func(key security.SecKeyRef) error { -+ if security.SecKeyIsAlgorithmSupported(key, security.KSecKeyOperationTypeEncrypt, algorithm) != 1 { -+ return errors.New("algorithm not supported by the key") -+ } -+ encryptedDataRef = security.SecKeyCreateEncryptedData(key, algorithm, dataRef, nil) -+ if encryptedDataRef == nil { -+ return errors.New("encryption failed") -+ } -+ return nil -+ }) -+ if err != nil { -+ return nil, err -+ } -+ defer cfRelease(unsafe.Pointer(encryptedDataRef)) -+ -+ return cfDataToBytes(encryptedDataRef), nil -+} -+ -+// Decrypt decrypts a ciphertext using a given key and algorithm. -+func evpDecrypt(withKey withKeyFunc, algorithmType algorithmType, ciphertext []byte, hash hash.Hash) ([]byte, error) { -+ var cryptoHash crypto.Hash -+ if hash != nil { -+ var err error -+ cryptoHash, err = hashToCryptoHash(hash) -+ if err != nil { -+ return nil, err -+ } -+ } -+ algorithm, err := selectAlgorithm(cryptoHash, algorithmType) -+ if err != nil { -+ return nil, err -+ } -+ -+ msg := bytesToCFData(ciphertext) -+ -+ var decryptedDataRef security.CFDataRef -+ var cfErr security.CFErrorRef -+ err = withKey(func(key security.SecKeyRef) error { -+ if security.SecKeyIsAlgorithmSupported(key, security.KSecKeyOperationTypeDecrypt, algorithm) != 1 { -+ return errors.New("algorithm not supported by the key") -+ } -+ decryptedDataRef = security.SecKeyCreateDecryptedData(key, algorithm, msg, &cfErr) -+ if decryptedDataRef == nil { -+ return errors.New("decryption failed") -+ } -+ return nil -+ }) -+ -+ if err := goCFErrorRef(cfErr); err != nil { -+ return nil, err -+ } -+ -+ if err != nil { -+ return nil, err -+ } -+ defer cfRelease(unsafe.Pointer(decryptedDataRef)) -+ -+ return cfDataToBytes(decryptedDataRef), nil -+} -+ -+func evpSign(withKey withKeyFunc, algorithmType algorithmType, hash crypto.Hash, hashed []byte) ([]byte, error) { -+ algorithm, err := selectAlgorithm(hash, algorithmType) -+ if err != nil { -+ return nil, err -+ } -+ -+ var signedDataRef security.CFDataRef -+ var cfErr security.CFErrorRef -+ err = withKey(func(key security.SecKeyRef) error { -+ if security.SecKeyIsAlgorithmSupported(key, security.KSecKeyOperationTypeSign, algorithm) != 1 { -+ return errors.New("algorithm not supported by the key") -+ } -+ signedDataRef = security.SecKeyCreateSignature(key, algorithm, bytesToCFData(hashed), &cfErr) -+ if signedDataRef == nil { -+ return errors.New("signing failed") -+ } -+ return nil -+ }) -+ -+ if err := goCFErrorRef(cfErr); err != nil { -+ return nil, err -+ } -+ -+ if err != nil { -+ return nil, err -+ } -+ defer cfRelease(unsafe.Pointer(signedDataRef)) -+ -+ return cfDataToBytes(signedDataRef), nil -+} -+ -+func evpVerify(withKey withKeyFunc, algorithmType algorithmType, hash crypto.Hash, hashed, signature []byte) error { -+ algorithm, err := selectAlgorithm(hash, algorithmType) -+ if err != nil { -+ return err -+ } -+ -+ var cfErr security.CFErrorRef -+ err = withKey(func(key security.SecKeyRef) error { -+ if security.SecKeyIsAlgorithmSupported(key, security.KSecKeyOperationTypeVerify, algorithm) != 1 { -+ return errors.New("algorithm not supported by the key") -+ } -+ if security.SecKeyVerifySignature(key, algorithm, bytesToCFData(hashed), bytesToCFData(signature), &cfErr) != 1 { -+ return errors.New("verification failed") -+ } -+ return nil -+ }) -+ -+ if err := goCFErrorRef(cfErr); err != nil { -+ return err -+ } -+ -+ return err -+} -+ -+// hashToCryptoHash converts a hash.Hash to a crypto.Hash. -+func hashToCryptoHash(hash hash.Hash) (crypto.Hash, error) { -+ switch h := hash.(type) { -+ case *Hash: -+ return h.alg.ch, nil -+ default: -+ return 0, errors.New("unsupported hash function") -+ } -+} -+ -+// selectAlgorithm selects the appropriate SecKeyAlgorithm based on hash and algorithm type. -+func selectAlgorithm(hash crypto.Hash, algorithmType algorithmType) (security.CFStringRef, error) { -+ var algo security.CFStringRef -+ switch algorithmType { -+ case algorithmTypePSS: -+ switch hash { -+ case crypto.SHA1: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPSSSHA1 -+ case crypto.SHA224: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPSSSHA224 -+ case crypto.SHA256: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPSSSHA256 -+ case crypto.SHA384: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPSSSHA384 -+ case crypto.SHA512: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPSSSHA512 -+ default: -+ return nil, errors.New("unsupported PSS hash: " + hash.String()) -+ } -+ case algorithmTypeRAW: -+ algo = security.KSecKeyAlgorithmRSAEncryptionRaw -+ case algorithmTypePKCS1v15Enc: -+ return security.KSecKeyAlgorithmRSAEncryptionPKCS1, nil -+ case algorithmTypePKCS1v15Sig: -+ switch hash { -+ case crypto.SHA1: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1 -+ case crypto.SHA224: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224 -+ case crypto.SHA256: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256 -+ case crypto.SHA384: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384 -+ case crypto.SHA512: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512 -+ case 0: -+ algo = security.KSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw -+ default: -+ return nil, errors.New("unsupported PKCS1v15 hash: " + hash.String()) -+ } -+ case algorithmTypeOAEP: -+ switch hash { -+ case crypto.SHA1: -+ algo = security.KSecKeyAlgorithmRSAEncryptionOAEPSHA1 -+ case crypto.SHA224: -+ algo = security.KSecKeyAlgorithmRSAEncryptionOAEPSHA224 -+ case crypto.SHA256: -+ algo = security.KSecKeyAlgorithmRSAEncryptionOAEPSHA256 -+ case crypto.SHA384: -+ algo = security.KSecKeyAlgorithmRSAEncryptionOAEPSHA384 -+ case crypto.SHA512: -+ algo = security.KSecKeyAlgorithmRSAEncryptionOAEPSHA512 -+ default: -+ return nil, errors.New("unsupported OAEP hash: " + hash.String()) -+ } -+ case algorithmTypeECDSA: -+ return security.KSecKeyAlgorithmECDSASignatureDigestX962, nil -+ default: -+ return nil, errors.New("unsupported algorithm type: " + strconv.Itoa(int(algorithmType))) -+ } -+ return algo, nil -+} -+ -+// bytesToCFData turns a byte slice into a CFDataRef. Caller then "owns" the -+// CFDataRef and must CFRelease the CFDataRef when done. -+func bytesToCFData(buf []byte) security.CFDataRef { -+ return security.CFDataCreate(security.KCFAllocatorDefault, buf) -+} -+ -+// cfDataToBytes turns a CFDataRef into a byte slice. -+func cfDataToBytes(cfData security.CFDataRef) []byte { -+ // TODO: remove this allocation -+ return slices.Clone(unsafe.Slice(security.CFDataGetBytePtr(cfData), security.CFDataGetLength(cfData))) -+} -+ -+// cfRelease releases a CoreFoundation object. -+func cfRelease(ref unsafe.Pointer) { -+ security.CFRelease(security.CFTypeRef(ref)) -+} -+ -+// createSecKeyWithData creates a SecKey from the provided encoded key and attributes dictionary. -+func createSecKeyWithData(encodedKey []byte, keyType, keyClass security.CFStringRef) (security.SecKeyRef, error) { -+ encodedKeyCF := security.CFDataCreate(security.KCFAllocatorDefault, encodedKey) -+ if encodedKeyCF == nil { -+ return nil, errors.New("xcrypto: failed to create CFData for private key") -+ } -+ defer security.CFRelease(security.CFTypeRef(encodedKeyCF)) -+ -+ attrKeys := []security.CFTypeRef{ -+ security.CFTypeRef(security.KSecAttrKeyType), -+ security.CFTypeRef(security.KSecAttrKeyClass), -+ } -+ -+ attrValues := []security.CFTypeRef{ -+ security.CFTypeRef(keyType), -+ security.CFTypeRef(keyClass), -+ } -+ -+ // Create attributes dictionary for the key -+ attrDict := security.CFDictionaryCreate( -+ security.KCFAllocatorDefault, -+ (*unsafe.Pointer)(unsafe.Pointer(&attrKeys[0])), -+ (*unsafe.Pointer)(unsafe.Pointer(&attrValues[0])), -+ security.CFIndex(len(attrKeys)), -+ nil, -+ nil, -+ ) -+ if attrDict == nil { -+ return nil, errors.New("xcrypto: failed to create attributes dictionary") -+ } -+ defer security.CFRelease(security.CFTypeRef(attrDict)) -+ -+ // Generate the SecKey -+ var errorRef security.CFErrorRef -+ key := security.SecKeyCreateWithData(encodedKeyCF, attrDict, &errorRef) -+ if err := goCFErrorRef(errorRef); err != nil { -+ return nil, err -+ } -+ return key, nil -+} -+ -+// createSecKeyRandom creates a new SecKey with the provided attributes dictionary. -+func createSecKeyRandom(keyType security.CFStringRef, keySize int) ([]byte, security.SecKeyRef, error) { -+ keyAttrs := security.CFDictionaryCreateMutable(security.KCFAllocatorDefault, 0, nil, nil) -+ if keyAttrs == nil { -+ return nil, nil, errors.New("failed to create key attributes dictionary") -+ } -+ defer security.CFRelease(security.CFTypeRef(keyAttrs)) -+ -+ security.CFDictionarySetValue( -+ keyAttrs, -+ unsafe.Pointer(security.KSecAttrKeyType), -+ unsafe.Pointer(keyType), -+ ) -+ -+ cfNum := security.CFNumberCreate(security.KCFAllocatorDefault, security.KCFNumberLongType, unsafe.Pointer(&keySize)) -+ defer security.CFRelease(security.CFTypeRef(cfNum)) -+ -+ security.CFDictionarySetValue( -+ keyAttrs, -+ unsafe.Pointer(security.KSecAttrKeySizeInBits), -+ unsafe.Pointer(cfNum), -+ ) -+ -+ // Generate the private key -+ var errorRef security.CFErrorRef -+ privKeyRef := security.SecKeyCreateRandomKey(security.CFDictionaryRef(keyAttrs), &errorRef) -+ if err := goCFErrorRef(errorRef); err != nil { -+ return nil, nil, err -+ } -+ -+ // Export the private key as DER -+ privData := security.SecKeyCopyExternalRepresentation(privKeyRef, &errorRef) -+ if err := goCFErrorRef(errorRef); err != nil { -+ return nil, nil, err -+ } -+ defer security.CFRelease(security.CFTypeRef(privData)) -+ -+ privKeyDER := cfDataToBytes(privData) -+ if privKeyDER == nil { -+ return nil, nil, errors.New("failed to convert CFData to bytes") -+ } -+ return privKeyDER, privKeyRef, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/gcm.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/gcm.go -new file mode 100644 -index 00000000000000..82a961d974f129 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/gcm.go -@@ -0,0 +1,218 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+type aesGCM struct { -+ key []byte -+ tls cipherGCMTLS -+ // minNextNonce is the minimum value that the next nonce can be, enforced by -+ // all TLS modes. -+ minNextNonce uint64 -+ // mask is the nonce mask used in TLS 1.3 mode. -+ mask uint64 -+ // maskInitialized is true if mask has been initialized. This happens during -+ // the first Seal. The initialized mask may be 0. Used by TLS 1.3 mode. -+ maskInitialized bool -+} -+ -+type noGCM struct { -+ cipher.Block -+} -+ -+// NewGCM constructs a GCM block mode for AES using the cryptokit package -+func (c *aesCipher) NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) { -+ if nonceSize != gcmStandardNonceSize && tagSize != gcmTagSize { -+ return nil, errors.New("crypto/aes: GCM tag and nonce sizes can't be non-standard at the same time") -+ } -+ // Fall back to standard library for GCM with non-standard nonce or tag size. -+ if nonceSize != gcmStandardNonceSize { -+ return cipher.NewGCMWithNonceSize(&noGCM{c}, nonceSize) -+ } -+ if tagSize != gcmTagSize { -+ return cipher.NewGCMWithTagSize(&noGCM{c}, tagSize) -+ } -+ return &aesGCM{key: c.key, tls: cipherGCMTLSNone}, nil -+} -+ -+func (g *aesGCM) NonceSize() int { return gcmStandardNonceSize } -+ -+func (g *aesGCM) Overhead() int { return gcmTagSize } -+ -+func (g *aesGCM) Seal(dst, nonce, plaintext, additionalData []byte) []byte { -+ if len(nonce) != gcmStandardNonceSize { -+ panic("cipher: incorrect nonce length given to GCM") -+ } -+ if uint64(len(plaintext)) > ((1<<32)-2)*aesBlockSize || len(plaintext)+gcmTagSize < len(plaintext) { -+ panic("cipher: message too large for GCM") -+ } -+ if len(dst)+len(plaintext)+gcmTagSize < len(dst) { -+ panic("cipher: message too large for buffer") -+ } -+ -+ if g.tls != cipherGCMTLSNone { -+ if g.tls == cipherGCMTLS12 && len(additionalData) != gcmTls12AddSize { -+ panic("cipher: incorrect additional data length given to GCM TLS 1.2") -+ } else if g.tls == cipherGCMTLS13 && len(additionalData) != gcmTls13AddSize { -+ panic("cipher: incorrect additional data length given to GCM TLS 1.3") -+ } -+ counter := bigUint64(nonce[gcmTlsFixedNonceSize:]) -+ -+ // TLS 1.3 Masking -+ if g.tls == cipherGCMTLS13 { -+ if !g.maskInitialized { -+ g.mask = counter -+ g.maskInitialized = true -+ } -+ // Apply mask to the counter -+ counter ^= g.mask -+ } -+ -+ // Enforce monotonicity and max limit -+ const maxUint64 = 1<<64 - 1 -+ if counter == maxUint64 { -+ panic("cipher: nonce counter must be less than 2^64 - 1") -+ } -+ if counter < g.minNextNonce { -+ panic("cipher: nonce counter must be strictly monotonically increasing") -+ } -+ -+ defer func() { -+ g.minNextNonce = counter + 1 -+ }() -+ } -+ -+ // Make room in dst to append plaintext+overhead. -+ ret, out := sliceForAppend(dst, len(plaintext)+gcmTagSize) -+ -+ // Check delayed until now to make sure len(dst) is accurate. -+ if inexactOverlap(out, plaintext) { -+ panic("cipher: invalid buffer overlap") -+ } -+ -+ err := cryptokit.EncryptAESGCM( -+ g.key, -+ plaintext, -+ nonce, -+ additionalData, -+ out[:len(out)-gcmTagSize], -+ out[len(out)-gcmTagSize:], -+ ) -+ if err != 0 { -+ panic("cipher: encryption failed") -+ } -+ return ret -+} -+ -+func (g *aesGCM) SealWithRandomNonce(out, nonce, plaintext, additionalData []byte) { -+ if uint64(len(plaintext)) > uint64((1<<32)-2)*aesBlockSize { -+ panic("crypto/cipher: message too large for GCM") -+ } -+ if len(nonce) != gcmStandardNonceSize { -+ panic("crypto/cipher: incorrect nonce length given to GCMWithRandomNonce") -+ } -+ if len(out) != len(plaintext)+gcmTagSize { -+ panic("crypto/cipher: incorrect output length given to GCMWithRandomNonce") -+ } -+ if inexactOverlap(out, plaintext) { -+ panic("crypto/cipher: invalid buffer overlap of output and input") -+ } -+ if anyOverlap(out, additionalData) { -+ panic("crypto/cipher: invalid buffer overlap of output and additional data") -+ } -+ -+ if g.tls != cipherGCMTLSNone { -+ panic("cipher: TLS 1.2 and 1.3 modes do not support random nonce") -+ } -+ -+ // Generate a random nonce -+ RandReader.Read(nonce) -+ err := cryptokit.EncryptAESGCM( -+ g.key, -+ plaintext, -+ nonce, -+ additionalData, -+ out[:len(out)-gcmTagSize], -+ out[len(out)-gcmTagSize:], -+ ) -+ if err != 0 { -+ panic("cipher: encryption failed") -+ } -+} -+ -+func (g *aesGCM) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { -+ if len(nonce) != gcmStandardNonceSize { -+ panic("cipher: incorrect nonce length given to GCM") -+ } -+ if len(ciphertext) < gcmTagSize { -+ return nil, errOpen -+ } -+ if uint64(len(ciphertext)) > ((1<<32)-2)*aesBlockSize+gcmTagSize { -+ return nil, errOpen -+ } -+ // BoringCrypto does not do any TLS check when decrypting, neither do we. -+ -+ // Ensure we don't process if ciphertext lacks both ciphertext and tag -+ if len(ciphertext) < gcmTagSize { -+ return nil, errors.New("decryption failed: ciphertext too short for tag") -+ } -+ -+ tag := ciphertext[len(ciphertext)-gcmTagSize:] -+ ciphertext = ciphertext[:len(ciphertext)-gcmTagSize] -+ -+ // Make room in dst to append ciphertext without tag. -+ ret, out := sliceForAppend(dst, len(ciphertext)) -+ -+ // Check delayed until now to make sure len(dst) is accurate. -+ if inexactOverlap(out, ciphertext) { -+ panic("cipher: invalid buffer overlap") -+ } -+ -+ var decSize int -+ err := cryptokit.DecryptAESGCM( -+ g.key, -+ ciphertext, -+ nonce, -+ additionalData, -+ tag, -+ out, -+ &decSize, -+ ) -+ if err != 0 || int(decSize) != len(ciphertext) { -+ // If the decrypted data size does not match, zero out `out` and return `errOpen` -+ for i := range out { -+ out[i] = 0 -+ } -+ return nil, errOpen -+ } -+ return ret, nil -+} -+ -+// NewGCMTLS returns a GCM cipher specific to TLS -+// and should not be used for non-TLS purposes. -+func NewGCMTLS(block cipher.Block) (cipher.AEAD, error) { -+ cipher, ok := block.(*aesCipher) -+ if !ok { -+ return nil, errors.New("crypto/aes: invalid block cipher") -+ } -+ return &aesGCM{key: cipher.key, tls: cipherGCMTLS12}, nil -+} -+ -+// NewGCMTLS13 returns a GCM cipher specific to TLS 1.3 and should not be used -+// for non-TLS purposes. -+func NewGCMTLS13(block cipher.Block) (cipher.AEAD, error) { -+ cipher, ok := block.(*aesCipher) -+ if !ok { -+ return nil, errors.New("crypto/aes: invalid block cipher") -+ } -+ return &aesGCM{key: cipher.key, tls: cipherGCMTLS13}, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hash.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hash.go -new file mode 100644 -index 00000000000000..3a3f76b9fd0453 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hash.go -@@ -0,0 +1,335 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "runtime" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+const ( -+ md5 = 1 -+ sha1 = 2 -+ sha256 = 3 -+ sha384 = 4 -+ sha512 = 5 -+ sha3256 = 6 -+ sha3384 = 7 -+ sha3512 = 8 -+) -+ -+type hashAlgorithm struct { -+ id int32 -+ ch crypto.Hash -+ size int -+ blockSize int -+} -+ -+var cacheHash sync.Map // map[crypto.Hash]*hashAlgorithm -+ -+// supportsSHA3 returns true if SHA-3 is available on this macOS version. -+func supportsSHA3() bool { -+ return cryptokit.SupportsSHA3() == 1 -+} -+ -+// loadHash converts a crypto.Hash to a hashAlgorithm. -+func loadHash(ch crypto.Hash, required bool) *hashAlgorithm { -+ if v, ok := cacheHash.Load(ch); ok { -+ if v == nil && required { -+ panic("cryptokit: " + ch.String() + " not available") -+ } -+ return v.(*hashAlgorithm) -+ } -+ -+ var hash hashAlgorithm -+ hash.ch = ch -+ supported := true -+ -+ switch ch { -+ case crypto.MD5: -+ hash.id = md5 -+ hash.size = int(cryptokit.HashSize(md5)) -+ hash.blockSize = int(cryptokit.HashBlockSize(md5)) -+ case crypto.SHA1: -+ hash.id = sha1 -+ hash.size = int(cryptokit.HashSize(sha1)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha1)) -+ case crypto.SHA256: -+ hash.id = sha256 -+ hash.size = int(cryptokit.HashSize(sha256)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha256)) -+ case crypto.SHA384: -+ hash.id = sha384 -+ hash.size = int(cryptokit.HashSize(sha384)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha384)) -+ case crypto.SHA512: -+ hash.id = sha512 -+ hash.size = int(cryptokit.HashSize(sha512)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha512)) -+ case crypto.SHA3_256: -+ if !supportsSHA3() { -+ supported = false -+ break -+ } -+ hash.id = sha3256 -+ hash.size = int(cryptokit.HashSize(sha3256)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha3256)) -+ case crypto.SHA3_384: -+ if !supportsSHA3() { -+ supported = false -+ break -+ } -+ hash.id = sha3384 -+ hash.size = int(cryptokit.HashSize(sha3384)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha3384)) -+ case crypto.SHA3_512: -+ if !supportsSHA3() { -+ supported = false -+ break -+ } -+ hash.id = sha3512 -+ hash.size = int(cryptokit.HashSize(sha3512)) -+ hash.blockSize = int(cryptokit.HashBlockSize(sha3512)) -+ default: -+ supported = false -+ } -+ -+ if !supported { -+ if required { -+ panic("cryptokit: " + ch.String() + " not available") -+ } -+ cacheHash.Store(ch, (*hashAlgorithm)(nil)) -+ return nil -+ } -+ -+ cacheHash.Store(ch, &hash) -+ return &hash -+} -+ -+// Hash implements generic hash methods. -+type Hash struct { -+ ptr unsafe.Pointer -+ alg *hashAlgorithm -+} -+ -+// SupportsHash returns true if a hash.Hash implementation is supported for h. -+func SupportsHash(h crypto.Hash) bool { -+ return loadHash(h, false) != nil -+} -+ -+func newHash(ch crypto.Hash) *Hash { -+ alg := loadHash(ch, true) -+ -+ h := &Hash{ -+ ptr: cryptokit.HashNew(alg.id), -+ alg: alg, -+ } -+ -+ runtime.SetFinalizer(h, (*Hash).finalize) -+ -+ return h -+} -+ -+func (h *Hash) finalize() { -+ if h.ptr != nil { -+ cryptokit.HashFree(h.alg.id, h.ptr) -+ h.ptr = nil -+ } -+} -+ -+func (h *Hash) Clone() (hash.Cloner, error) { -+ if h.ptr == nil { -+ panic("cryptokit: hash already finalized") -+ } -+ -+ newHash := &Hash{ -+ ptr: cryptokit.HashCopy(h.alg.id, h.ptr), -+ alg: h.alg, -+ } -+ -+ runtime.SetFinalizer(newHash, (*Hash).finalize) -+ -+ runtime.KeepAlive(h) -+ -+ return newHash, nil -+} -+ -+func (h *Hash) Write(p []byte) (int, error) { -+ if len(p) == 0 { -+ return 0, nil -+ } -+ cryptokit.HashWrite(h.alg.id, h.ptr, p) -+ -+ runtime.KeepAlive(h) -+ -+ return len(p), nil -+} -+ -+func (h *Hash) WriteString(s string) (int, error) { -+ if len(s) == 0 { -+ return 0, nil -+ } -+ cryptokit.HashWrite(h.alg.id, h.ptr, unsafe.Slice(unsafe.StringData(s), len(s))) -+ -+ runtime.KeepAlive(h) -+ -+ return len(s), nil -+} -+ -+func (h *Hash) WriteByte(c byte) error { -+ cryptokit.HashWrite(h.alg.id, h.ptr, unsafe.Slice(&c, 1)) -+ -+ runtime.KeepAlive(h) -+ -+ return nil -+} -+ -+func (h *Hash) Sum(b []byte) []byte { -+ hashSlice := make([]byte, h.alg.size, 64) // explicit cap to allow stack allocation -+ cryptokit.HashSum(h.alg.id, h.ptr, hashSlice) -+ runtime.KeepAlive(h) -+ b = append(b, hashSlice...) -+ return b -+} -+ -+type errMarshallUnsupported struct{} -+ -+func (e errMarshallUnsupported) Error() string { -+ return "cryptokit: hash state is not marshallable" -+} -+ -+func (e errMarshallUnsupported) Unwrap() error { -+ return errors.ErrUnsupported -+} -+ -+func (h *Hash) MarshalBinary() ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (h *Hash) AppendBinary(b []byte) ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (h *Hash) UnmarshalBinary(data []byte) error { -+ return errMarshallUnsupported{} -+} -+ -+func (h *Hash) Reset() { -+ cryptokit.HashReset(h.alg.id, h.ptr) -+} -+ -+func (h *Hash) BlockSize() int { -+ return h.alg.blockSize -+} -+ -+func (h *Hash) Size() int { -+ return h.alg.size -+} -+ -+// FIPSApprovedHash reports whether this hash algorithm is FIPS 140-3 approved. -+func FIPSApprovedHash(h hash.Hash) bool { -+ xh, ok := h.(*Hash) -+ if !ok { -+ return false -+ } -+ switch xh.alg.ch { -+ case crypto.SHA256, crypto.SHA384, crypto.SHA512, -+ crypto.SHA3_256, crypto.SHA3_384, crypto.SHA3_512: -+ return true -+ default: -+ return false -+ } -+} -+ -+var _ hash.Hash = (*Hash)(nil) -+var _ hash.Cloner = (*Hash)(nil) -+ -+func MD5(p []byte) (sum [16]byte) { -+ cryptokit.MD5(p, sum[:]) -+ return -+} -+ -+func SHA1(p []byte) (sum [20]byte) { -+ cryptokit.SHA1(p, sum[:]) -+ return -+} -+ -+func SHA256(p []byte) (sum [32]byte) { -+ cryptokit.SHA256(p, sum[:]) -+ return -+} -+ -+func SHA384(p []byte) (sum [48]byte) { -+ cryptokit.SHA384(p, sum[:]) -+ return -+} -+ -+func SHA512(p []byte) (sum [64]byte) { -+ cryptokit.SHA512(p, sum[:]) -+ return -+} -+ -+func SumSHA3_256(p []byte) (sum [32]byte) { -+ cryptokit.SHA3_256(p, sum[:]) -+ return -+} -+ -+func SumSHA3_384(p []byte) (sum [48]byte) { -+ cryptokit.SHA3_384(p, sum[:]) -+ return -+} -+ -+func SumSHA3_512(p []byte) (sum [64]byte) { -+ cryptokit.SHA3_512(p, sum[:]) -+ return -+} -+ -+// NewMD5 initializes a new MD5 hasher. -+func NewMD5() *Hash { -+ return newHash(crypto.MD5) -+ -+} -+ -+// NewSHA1 initializes a new SHA1 hasher. -+func NewSHA1() *Hash { -+ return newHash(crypto.SHA1) -+} -+ -+// NewSHA256 initializes a new SHA256 hasher. -+func NewSHA256() *Hash { -+ return newHash(crypto.SHA256) -+} -+ -+// NewSHA384 initializes a new SHA384 hasher. -+func NewSHA384() *Hash { -+ return newHash(crypto.SHA384) -+} -+ -+// NewSHA512 initializes a new SHA512 hasher. -+func NewSHA512() *Hash { -+ return newHash(crypto.SHA512) -+} -+ -+// NewSHA3_256 creates a new SHA3-256 hash. -+func NewSHA3_256() *Hash { -+ return newHash(crypto.SHA3_256) -+} -+ -+// NewSHA3_384 creates a new SHA3-384 hash. -+func NewSHA3_384() *Hash { -+ return newHash(crypto.SHA3_384) -+} -+ -+// NewSHA3_512 creates a new SHA3-512 hash. -+func NewSHA3_512() *Hash { -+ return newHash(crypto.SHA3_512) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hkdf.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hkdf.go -new file mode 100644 -index 00000000000000..a49b6f2ab41e3c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hkdf.go -@@ -0,0 +1,103 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+// ExtractHKDF performs the extract step of HKDF using the specified hash function. -+func ExtractHKDF[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ // Handle empty secret -+ if len(secret) == 0 { -+ return nil, errors.New("secret cannot be empty") -+ } -+ -+ hash, err := hashToCryptoHash(h()) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Default salt to a zero-filled array if not provided -+ if len(salt) == 0 { -+ salt = make([]byte, hash.Size()) -+ } -+ -+ swiftHash, err := cryptoHashToSwift(hash) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Allocate buffer for derived key -+ prk := make([]byte, hash.Size()) -+ -+ result := cryptokit.ExtractHKDF(swiftHash, secret, salt, prk) -+ if result != 0 { -+ return nil, errors.New("HKDF derivation failed") -+ } -+ -+ return prk, nil -+} -+ -+// ExpandHKDF performs the expand step of HKDF using the specified hash function. -+func ExpandHKDF[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLength int) ([]byte, error) { -+ // Handle empty secret -+ if len(pseudorandomKey) == 0 { -+ return nil, errors.New("pseudorandom key cannot be empty") -+ } -+ -+ hash, err := hashToCryptoHash(h()) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Determine the maximum expandable key length based on the hash function -+ maxAllowedLength := hash.Size() * 255 -+ -+ // Validate requested key length -+ if keyLength > maxAllowedLength { -+ return nil, errors.New("requested key length exceeds maximum allowable size") -+ } -+ -+ swiftHash, err := cryptoHashToSwift(hash) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Allocate buffer for derived key -+ expandedKey := make([]byte, keyLength) -+ if len(expandedKey) == 0 { -+ // Nothing to do, and CryptoKit may error on zero-length output. -+ // We do need to validate the inputs for consistency, though. -+ return expandedKey, nil -+ } -+ -+ result := cryptokit.ExpandHKDF(swiftHash, pseudorandomKey, info, expandedKey) -+ if result != 0 { -+ return nil, errors.New("HKDF derivation failed") -+ } -+ -+ return expandedKey, nil -+} -+ -+func cryptoHashToSwift(hash crypto.Hash) (int32, error) { -+ switch hash { -+ case crypto.SHA1: -+ return 1, nil -+ case crypto.SHA256: -+ return 2, nil -+ case crypto.SHA384: -+ return 3, nil -+ case crypto.SHA512: -+ return 4, nil -+ default: -+ return 0, errors.New("unsupported hash function") -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hmac.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hmac.go -new file mode 100644 -index 00000000000000..5f73e60f5465cf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/hmac.go -@@ -0,0 +1,106 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "hash" -+ "runtime" -+ "slices" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+var _ hash.Hash = (*cryptoKitHMAC)(nil) -+var _ hash.Cloner = (*cryptoKitHMAC)(nil) -+ -+type cryptoKitHMAC struct { -+ ptr unsafe.Pointer -+ -+ kind int32 -+ key []byte -+ -+ blockSize int -+ size int -+} -+ -+// NewHMAC returns a new HMAC using xcrypto. -+// The function fh must return a hash implemented by -+// CommonCrypto (for example, [NewSHA256]). -+// If fh is not recognized, NewHMAC returns nil. -+func NewHMAC[H hash.Hash](fh func() H, key []byte) hash.Hash { -+ h, ok := any(fh()).(*Hash) -+ if !ok || h == nil { -+ return nil -+ } -+ -+ // copying the key here to ensure that it is not modified -+ // while this algorithm is using it. -+ key = slices.Clone(key) -+ kind := h.alg.id -+ -+ hmac := &cryptoKitHMAC{ -+ ptr: cryptokit.InitHMAC(kind, key), -+ kind: kind, -+ key: key, -+ blockSize: h.alg.blockSize, -+ size: h.alg.size, -+ } -+ -+ runtime.SetFinalizer(hmac, func(h *cryptoKitHMAC) { -+ cryptokit.FreeHMAC(h.kind, h.ptr) -+ }) -+ -+ return hmac -+} -+ -+func (h *cryptoKitHMAC) Write(p []byte) (n int, err error) { -+ cryptokit.UpdateHMAC(h.kind, h.ptr, p) -+ runtime.KeepAlive(h) -+ -+ return len(p), nil -+} -+ -+func (h *cryptoKitHMAC) Sum(b []byte) []byte { -+ hashSlice := make([]byte, h.size, 64) // explicit cap to allow stack allocation -+ cryptokit.FinalizeHMAC(h.kind, h.ptr, hashSlice) -+ runtime.KeepAlive(h) -+ -+ b = append(b, hashSlice...) -+ -+ return b -+} -+ -+func (h *cryptoKitHMAC) Clone() (hash.Cloner, error) { -+ if h.ptr == nil { -+ panic("cryptokit: hash already finalized") -+ } -+ -+ hmac := &cryptoKitHMAC{ptr: cryptokit.CopyHMAC(h.kind, h.ptr), kind: h.kind, key: slices.Clone(h.key), blockSize: h.blockSize, size: h.size} -+ -+ runtime.KeepAlive(h) -+ -+ runtime.SetFinalizer(hmac, func(h *cryptoKitHMAC) { -+ cryptokit.FreeHMAC(h.kind, h.ptr) -+ }) -+ -+ return hmac, nil -+} -+ -+func (h *cryptoKitHMAC) Reset() { -+ cryptokit.FreeHMAC(h.kind, h.ptr) -+ -+ h.ptr = cryptokit.InitHMAC(h.kind, h.key) -+ runtime.KeepAlive(h) -+} -+ -+func (h *cryptoKitHMAC) Size() int { -+ return h.size -+} -+ -+func (h *cryptoKitHMAC) BlockSize() int { -+ return h.blockSize -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mldsa.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mldsa.go -new file mode 100644 -index 00000000000000..7bc762de80ff3d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mldsa.go -@@ -0,0 +1,241 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto/subtle" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+const ( -+ // privateKeySizeMLDSA is the size of an ML-DSA private key seed. -+ privateKeySizeMLDSA = 32 -+ -+ // publicKeySizeMLDSA65 is the size of an ML-DSA-65 public key encoding. -+ publicKeySizeMLDSA65 = 1952 -+ -+ // publicKeySizeMLDSA87 is the size of an ML-DSA-87 public key encoding. -+ publicKeySizeMLDSA87 = 2592 -+ -+ // signatureSizeMLDSA65 is the size of an ML-DSA-65 signature. -+ signatureSizeMLDSA65 = 3309 -+ -+ // signatureSizeMLDSA87 is the size of an ML-DSA-87 signature. -+ signatureSizeMLDSA87 = 4627 -+) -+ -+// SupportsMLDSA returns true if the given ML-DSA parameter set is supported -+// on this platform. -+func SupportsMLDSA(params MLDSAParameters) bool { -+ switch params.publicKeySize { -+ case publicKeySizeMLDSA65, publicKeySizeMLDSA87: -+ return cryptokit.SupportsMLDSA() == 1 -+ default: -+ return false -+ } -+} -+ -+// MLDSAParameters represents one of the fixed ML-DSA parameter sets. -+type MLDSAParameters struct { -+ name string -+ publicKeySize int -+ signatureSize int -+ generateKey func(seed []uint8) int64 -+ derivePublic func(seed []uint8, publicKey []uint8) int64 -+ sign func(seed []uint8, message []uint8, context []uint8, signature []uint8, signatureLen *int64) int64 -+ verify func(publicKey []uint8, message []uint8, context []uint8, signature []uint8) int64 -+ validatePub func(publicKey []uint8) int64 -+} -+ -+var ( -+ mldsa65 = MLDSAParameters{ -+ name: "ML-DSA-65", -+ publicKeySize: publicKeySizeMLDSA65, -+ signatureSize: signatureSizeMLDSA65, -+ generateKey: cryptokit.GenerateKeyMLDSA65, -+ derivePublic: cryptokit.DerivePublicKeyMLDSA65, -+ sign: cryptokit.SignMLDSA65, -+ verify: cryptokit.VerifyMLDSA65, -+ validatePub: cryptokit.ValidatePublicKeyMLDSA65, -+ } -+ mldsa87 = MLDSAParameters{ -+ name: "ML-DSA-87", -+ publicKeySize: publicKeySizeMLDSA87, -+ signatureSize: signatureSizeMLDSA87, -+ generateKey: cryptokit.GenerateKeyMLDSA87, -+ derivePublic: cryptokit.DerivePublicKeyMLDSA87, -+ sign: cryptokit.SignMLDSA87, -+ verify: cryptokit.VerifyMLDSA87, -+ validatePub: cryptokit.ValidatePublicKeyMLDSA87, -+ } -+) -+ -+// MLDSA65 returns the ML-DSA-65 parameter set. -+func MLDSA65() MLDSAParameters { return mldsa65 } -+ -+// MLDSA87 returns the ML-DSA-87 parameter set. -+func MLDSA87() MLDSAParameters { return mldsa87 } -+ -+func (params MLDSAParameters) valid() bool { -+ return params.generateKey != nil -+} -+ -+// PublicKeySize returns the size of public keys for this parameter set, in bytes. -+func (params MLDSAParameters) PublicKeySize() int { return params.publicKeySize } -+ -+// SignatureSize returns the size of signatures for this parameter set, in bytes. -+func (params MLDSAParameters) SignatureSize() int { return params.signatureSize } -+ -+// String returns the name of the parameter set. -+func (params MLDSAParameters) String() string { return params.name } -+ -+var errInvalidMLDSAParameters = errors.New("mldsa: invalid parameters") -+ -+// PrivateKeyMLDSA is an ML-DSA private key seed. -+type PrivateKeyMLDSA struct { -+ params MLDSAParameters -+ seed [privateKeySizeMLDSA]byte -+} -+ -+// GenerateKeyMLDSA generates a new ML-DSA private key. -+func GenerateKeyMLDSA(params MLDSAParameters) (*PrivateKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ key := &PrivateKeyMLDSA{params: params} -+ if ret := params.generateKey(key.seed[:]); ret != 0 { -+ return nil, errors.New("mldsa: key generation failed") -+ } -+ return key, nil -+} -+ -+// NewPrivateKeyMLDSA constructs an ML-DSA private key from its seed. -+func NewPrivateKeyMLDSA(params MLDSAParameters, seed []byte) (*PrivateKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ if len(seed) != privateKeySizeMLDSA { -+ return nil, errors.New("mldsa: invalid private key size") -+ } -+ key := &PrivateKeyMLDSA{params: params} -+ copy(key.seed[:], seed) -+ return key, nil -+} -+ -+// Bytes returns the private key seed. -+func (key *PrivateKeyMLDSA) Bytes() []byte { -+ return key.seed[:] -+} -+ -+// Equal reports whether key and other represent the same private key. -+func (key *PrivateKeyMLDSA) Equal(other *PrivateKeyMLDSA) bool { -+ if other == nil { -+ return false -+ } -+ return key.params.name == other.params.name && -+ subtle.ConstantTimeCompare(key.seed[:], other.seed[:]) == 1 -+} -+ -+// Parameters returns the parameters associated with this private key. -+func (key *PrivateKeyMLDSA) Parameters() MLDSAParameters { return key.params } -+ -+// PublicKey returns the corresponding public key. -+func (key *PrivateKeyMLDSA) PublicKey() *PublicKeyMLDSA { -+ publicKey := &PublicKeyMLDSA{params: key.params} -+ if ret := key.params.derivePublic(key.seed[:], publicKey.bytes[:key.params.publicKeySize]); ret != 0 { -+ panic("mldsa: failed to derive public key") -+ } -+ return publicKey -+} -+ -+// Sign signs message with context using ML-DSA. -+func (key *PrivateKeyMLDSA) Sign(message []byte, context string) ([]byte, error) { -+ if len(context) > 255 { -+ return nil, errors.New("mldsa: context too long") -+ } -+ signature := make([]byte, key.params.signatureSize) -+ sigLen := int64(key.params.signatureSize) -+ contextBytes := []byte(context) -+ if ret := key.params.sign(key.seed[:], message, contextBytes, signature, &sigLen); ret != 0 { -+ return nil, errors.New("mldsa: signing failed") -+ } -+ return signature[:sigLen], nil -+} -+ -+// SignExternalMu signs a pre-hashed mu message representative using ML-DSA. -+func (key *PrivateKeyMLDSA) SignExternalMu(mu []byte) ([]byte, error) { -+ if len(mu) != 64 { -+ return nil, errors.New("mldsa: invalid message hash length") -+ } -+ return nil, errors.New("mldsa: external mu not supported") -+} -+ -+// PublicKeyMLDSA is an ML-DSA public key. -+type PublicKeyMLDSA struct { -+ params MLDSAParameters -+ bytes [publicKeySizeMLDSA87]byte -+} -+ -+// NewPublicKeyMLDSA constructs an ML-DSA public key from its encoding. -+func NewPublicKeyMLDSA(params MLDSAParameters, publicKey []byte) (*PublicKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ if len(publicKey) != params.publicKeySize { -+ return nil, errors.New("mldsa: invalid public key size") -+ } -+ if ret := params.validatePub(publicKey); ret != 0 { -+ return nil, errors.New("mldsa: invalid public key") -+ } -+ key := &PublicKeyMLDSA{params: params} -+ copy(key.bytes[:], publicKey) -+ return key, nil -+} -+ -+// Bytes returns the public key encoding. -+func (key *PublicKeyMLDSA) Bytes() []byte { -+ return key.bytes[:key.params.publicKeySize] -+} -+ -+// Equal reports whether key and other represent the same public key. -+func (key *PublicKeyMLDSA) Equal(other *PublicKeyMLDSA) bool { -+ if other == nil { -+ return false -+ } -+ return key.params.name == other.params.name && -+ subtle.ConstantTimeCompare(key.bytes[:key.params.publicKeySize], other.bytes[:other.params.publicKeySize]) == 1 -+} -+ -+// Parameters returns the parameters associated with this public key. -+func (key *PublicKeyMLDSA) Parameters() MLDSAParameters { return key.params } -+ -+// Verify verifies an ML-DSA signature. -+func (key *PublicKeyMLDSA) Verify(message, signature []byte, context string) error { -+ if len(signature) != key.params.signatureSize { -+ return errors.New("mldsa: invalid signature length") -+ } -+ if len(context) > 255 { -+ return errors.New("mldsa: context too long") -+ } -+ contextBytes := []byte(context) -+ if ret := key.params.verify(key.bytes[:key.params.publicKeySize], message, contextBytes, signature); ret != 0 { -+ return errors.New("mldsa: verification failed") -+ } -+ return nil -+} -+ -+// VerifyExternalMu verifies an ML-DSA signature over a pre-hashed mu message representative. -+func (key *PublicKeyMLDSA) VerifyExternalMu(mu, signature []byte) error { -+ if len(mu) != 64 { -+ return errors.New("mldsa: invalid message hash length") -+ } -+ if len(signature) != key.params.signatureSize { -+ return errors.New("mldsa: invalid signature length") -+ } -+ return errors.New("mldsa: external mu not supported") -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mlkem.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mlkem.go -new file mode 100644 -index 00000000000000..b5131703afdbcc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/mlkem.go -@@ -0,0 +1,261 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/cryptokit" -+) -+ -+const ( -+ // sharedKeySizeMLKEM is the size of a shared key produced by ML-KEM. -+ sharedKeySizeMLKEM = 32 -+ -+ // seedSizeMLKEM is the size of a seed used to generate a decapsulation key. -+ seedSizeMLKEM = 64 -+ -+ // ciphertextSizeMLKEM768 is the size of a ciphertext produced by ML-KEM-768. -+ ciphertextSizeMLKEM768 = 1088 -+ -+ // encapsulationKeySizeMLKEM768 is the size of an ML-KEM-768 encapsulation key. -+ encapsulationKeySizeMLKEM768 = 1184 -+ -+ // ciphertextSizeMLKEM1024 is the size of a ciphertext produced by ML-KEM-1024. -+ ciphertextSizeMLKEM1024 = 1568 -+ -+ // encapsulationKeySizeMLKEM1024 is the size of an ML-KEM-1024 encapsulation key. -+ encapsulationKeySizeMLKEM1024 = 1568 -+) -+ -+// SupportsMLKEM returns true if ML-KEM is supported on this platform. -+func SupportsMLKEM() bool { -+ return cryptokit.SupportsMLKEM() == 1 -+} -+ -+// DecapsulationKeyMLKEM768 is the secret key used to decapsulate a shared key -+// from a ciphertext. It includes various precomputed values. -+type DecapsulationKeyMLKEM768 [seedSizeMLKEM]byte -+ -+// GenerateKeyMLKEM768 generates a new decapsulation key, drawing random bytes from -+// the default crypto/rand source. The decapsulation key must be kept secret. -+func GenerateKeyMLKEM768() (DecapsulationKeyMLKEM768, error) { -+ var dk DecapsulationKeyMLKEM768 -+ ret := cryptokit.GenerateKeyMLKEM768(dk[:]) -+ if ret != 0 { -+ return DecapsulationKeyMLKEM768{}, errors.New("mlkem: key generation failed") -+ } -+ return dk, nil -+} -+ -+// NewDecapsulationKeyMLKEM768 expands a decapsulation key from a 64-byte seed in the -+// "d || z" form. The seed must be uniformly random. -+func NewDecapsulationKeyMLKEM768(seed []byte) (DecapsulationKeyMLKEM768, error) { -+ if len(seed) != seedSizeMLKEM { -+ return DecapsulationKeyMLKEM768{}, errors.New("mlkem: invalid seed size") -+ } -+ -+ var dk DecapsulationKeyMLKEM768 -+ copy(dk[:], seed) -+ return dk, nil -+} -+ -+// Bytes returns the decapsulation key as a 64-byte seed in the "d || z" form. -+// -+// The decapsulation key must be kept secret. -+func (dk DecapsulationKeyMLKEM768) Bytes() []byte { -+ return dk[:] -+} -+ -+// Decapsulate generates a shared key from a ciphertext and a decapsulation -+// key. If the ciphertext is not valid, Decapsulate returns an error. -+// -+// The shared key must be kept secret. -+func (dk DecapsulationKeyMLKEM768) Decapsulate(ciphertext []byte) (sharedKey []byte, err error) { -+ if len(ciphertext) != ciphertextSizeMLKEM768 { -+ return nil, errors.New("mlkem: invalid ciphertext size") -+ } -+ -+ sharedKey = make([]byte, sharedKeySizeMLKEM) -+ ret := cryptokit.DecapsulateMLKEM768( -+ dk[:], -+ ciphertext, -+ sharedKey, -+ ) -+ -+ if ret != 0 { -+ return nil, errors.New("mlkem: decapsulation failed") -+ } -+ return sharedKey, nil -+} -+ -+// EncapsulationKey returns the public encapsulation key necessary to produce -+// ciphertexts. -+func (dk DecapsulationKeyMLKEM768) EncapsulationKey() EncapsulationKeyMLKEM768 { -+ var ek EncapsulationKeyMLKEM768 -+ ret := cryptokit.DeriveEncapsulationKeyMLKEM768( -+ dk[:], -+ ek[:], -+ ) -+ -+ if ret != 0 { -+ return EncapsulationKeyMLKEM768{} -+ } -+ return ek -+} -+ -+// An EncapsulationKeyMLKEM768 is the public key used to produce ciphertexts to be -+// decapsulated by the corresponding DecapsulationKeyMLKEM768. -+type EncapsulationKeyMLKEM768 [encapsulationKeySizeMLKEM768]byte -+ -+// NewEncapsulationKeyMLKEM768 parses an encapsulation key from its encoded form. If -+// the encapsulation key is not valid, NewEncapsulationKeyMLKEM768 returns an error. -+func NewEncapsulationKeyMLKEM768(encapsulationKey []byte) (EncapsulationKeyMLKEM768, error) { -+ if len(encapsulationKey) != encapsulationKeySizeMLKEM768 { -+ return EncapsulationKeyMLKEM768{}, errors.New("mlkem: invalid encapsulation key size") -+ } -+ -+ var ek EncapsulationKeyMLKEM768 -+ copy(ek[:], encapsulationKey) -+ return ek, nil -+} -+ -+// Bytes returns the encapsulation key as a byte slice. -+func (ek EncapsulationKeyMLKEM768) Bytes() []byte { -+ return ek[:] -+} -+ -+// Encapsulate generates a shared key and an associated ciphertext from an -+// encapsulation key, drawing random bytes from the default crypto/rand source. -+// -+// The shared key must be kept secret. -+func (ek EncapsulationKeyMLKEM768) Encapsulate() (sharedKey, ciphertext []byte) { -+ sharedKey = make([]byte, sharedKeySizeMLKEM) -+ ciphertext = make([]byte, ciphertextSizeMLKEM768) -+ -+ ret := cryptokit.EncapsulateMLKEM768( -+ ek[:], -+ sharedKey, -+ ciphertext, -+ ) -+ -+ if ret != 0 { -+ return nil, nil -+ } -+ return sharedKey, ciphertext -+} -+ -+// DecapsulationKeyMLKEM1024 is the secret key used to decapsulate a shared key -+// from a ciphertext. It includes various precomputed values. -+type DecapsulationKeyMLKEM1024 [seedSizeMLKEM]byte -+ -+// GenerateKeyMLKEM1024 generates a new decapsulation key, drawing random bytes from -+// the default crypto/rand source. The decapsulation key must be kept secret. -+func GenerateKeyMLKEM1024() (DecapsulationKeyMLKEM1024, error) { -+ var dk DecapsulationKeyMLKEM1024 -+ ret := cryptokit.GenerateKeyMLKEM1024(dk[:]) -+ if ret != 0 { -+ return DecapsulationKeyMLKEM1024{}, errors.New("mlkem: key generation failed") -+ } -+ return dk, nil -+} -+ -+// NewDecapsulationKeyMLKEM1024 expands a decapsulation key from a 64-byte seed in the -+// "d || z" form. The seed must be uniformly random. -+func NewDecapsulationKeyMLKEM1024(seed []byte) (DecapsulationKeyMLKEM1024, error) { -+ if len(seed) != seedSizeMLKEM { -+ return DecapsulationKeyMLKEM1024{}, errors.New("mlkem: invalid seed size") -+ } -+ -+ var dk DecapsulationKeyMLKEM1024 -+ copy(dk[:], seed) -+ return dk, nil -+} -+ -+// Bytes returns the decapsulation key as a 64-byte seed in the "d || z" form. -+// -+// The decapsulation key must be kept secret. -+func (dk DecapsulationKeyMLKEM1024) Bytes() []byte { -+ return dk[:] -+} -+ -+// Decapsulate generates a shared key from a ciphertext and a decapsulation -+// key. If the ciphertext is not valid, Decapsulate returns an error. -+// -+// The shared key must be kept secret. -+func (dk DecapsulationKeyMLKEM1024) Decapsulate(ciphertext []byte) (sharedKey []byte, err error) { -+ if len(ciphertext) != ciphertextSizeMLKEM1024 { -+ return nil, errors.New("mlkem: invalid ciphertext size") -+ } -+ -+ sharedKey = make([]byte, sharedKeySizeMLKEM) -+ ret := cryptokit.DecapsulateMLKEM1024( -+ dk[:], -+ ciphertext, -+ sharedKey, -+ ) -+ -+ if ret != 0 { -+ return nil, errors.New("mlkem: decapsulation failed") -+ } -+ return sharedKey, nil -+} -+ -+// EncapsulationKey returns the public encapsulation key necessary to produce -+// ciphertexts. -+func (dk DecapsulationKeyMLKEM1024) EncapsulationKey() EncapsulationKeyMLKEM1024 { -+ var ek EncapsulationKeyMLKEM1024 -+ ret := cryptokit.DeriveEncapsulationKeyMLKEM1024( -+ dk[:], -+ ek[:], -+ ) -+ -+ if ret != 0 { -+ return EncapsulationKeyMLKEM1024{} -+ } -+ return ek -+} -+ -+// An EncapsulationKeyMLKEM1024 is the public key used to produce ciphertexts to be -+// decapsulated by the corresponding DecapsulationKeyMLKEM1024. -+type EncapsulationKeyMLKEM1024 [encapsulationKeySizeMLKEM1024]byte -+ -+// NewEncapsulationKeyMLKEM1024 parses an encapsulation key from its encoded form. If -+// the encapsulation key is not valid, NewEncapsulationKeyMLKEM1024 returns an error. -+func NewEncapsulationKeyMLKEM1024(encapsulationKey []byte) (EncapsulationKeyMLKEM1024, error) { -+ if len(encapsulationKey) != encapsulationKeySizeMLKEM1024 { -+ return EncapsulationKeyMLKEM1024{}, errors.New("mlkem: invalid encapsulation key size") -+ } -+ -+ var ek EncapsulationKeyMLKEM1024 -+ copy(ek[:], encapsulationKey) -+ return ek, nil -+} -+ -+// Bytes returns the encapsulation key as a byte slice. -+func (ek EncapsulationKeyMLKEM1024) Bytes() []byte { -+ return ek[:] -+} -+ -+// Encapsulate generates a shared key and an associated ciphertext from an -+// encapsulation key, drawing random bytes from the default crypto/rand source. -+// -+// The shared key must be kept secret. -+func (ek EncapsulationKeyMLKEM1024) Encapsulate() (sharedKey, ciphertext []byte) { -+ sharedKey = make([]byte, sharedKeySizeMLKEM) -+ ciphertext = make([]byte, ciphertextSizeMLKEM1024) -+ -+ ret := cryptokit.EncapsulateMLKEM1024( -+ ek[:], -+ sharedKey, -+ ciphertext, -+ ) -+ -+ if ret != 0 { -+ return nil, nil -+ } -+ return sharedKey, ciphertext -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/pbkdf2.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/pbkdf2.go -new file mode 100644 -index 00000000000000..ce9bf09c010354 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/pbkdf2.go -@@ -0,0 +1,76 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "math" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/commoncrypto" -+) -+ -+func PBKDF2[H hash.Hash](password, salt []byte, iter, keyLen int, fh func() H) ([]byte, error) { -+ // CommonCrypto's CCKeyDerivationPBKDF takes an unsigned 32-bit iteration -+ // count, so reject values that would overflow or wrap. In practice the -+ // recommended iteration count is around 300,000. -+ if iter <= 0 || iter > math.MaxUint32 { -+ return nil, errors.New("PBKDF2: invalid iteration count") -+ } -+ -+ // Map Go hash function to CommonCrypto hash constant -+ ccDigest, err := hashToCCDigestPBKDF2(fh()) -+ if err != nil { -+ return nil, err -+ } -+ -+ if len(password) == 0 { -+ // CommonCrypto requires a non-empty password -+ // Substitute empty password with placeholder -+ password = make([]byte, 1) -+ } -+ -+ // Allocate output buffer for the derived key -+ derivedKey := make([]byte, keyLen) -+ -+ // Call CommonCrypto's PBKDF2 implementation -+ status := commoncrypto.CCKeyDerivationPBKDF( -+ commoncrypto.KCCPBKDF2, // PBKDF2 algorithm -+ password, // Password -+ salt, // Salt -+ ccDigest, // Digest algorithm -+ uint32(iter), // Iteration count -+ derivedKey, // Output buffer for derived key -+ ) -+ -+ if status != commoncrypto.KCCSuccess { -+ return nil, errors.New("PBKDF2 key derivation failed") -+ } -+ -+ return derivedKey, nil -+} -+ -+// Mapping Go hash functions to CommonCrypto hash constants -+func hashToCCDigestPBKDF2(hash hash.Hash) (commoncrypto.CCPseudoRandomAlgorithm, error) { -+ switch h := hash.(type) { -+ case *Hash: -+ switch h.alg.ch { -+ case crypto.SHA1: -+ return commoncrypto.KCCPRFHmacAlgSHA1, nil -+ case crypto.SHA256: -+ return commoncrypto.KCCPRFHmacAlgSHA256, nil -+ case crypto.SHA384: -+ return commoncrypto.KCCPRFHmacAlgSHA384, nil -+ case crypto.SHA512: -+ return commoncrypto.KCCPRFHmacAlgSHA512, nil -+ default: -+ return 0, errors.New("unsupported hash function") -+ } -+ default: -+ return 0, errors.New("unsupported hash function") -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rand.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rand.go -new file mode 100644 -index 00000000000000..f8fc6ab81a3eb8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rand.go -@@ -0,0 +1,28 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/security" -+) -+ -+type randReader int -+ -+func (randReader) Read(b []byte) (int, error) { -+ // Note: RAND_bytes should never fail; the return value exists only for historical reasons. -+ // We check it even so. -+ if len(b) == 0 { -+ return 0, nil -+ } -+ if security.SecRandomCopyBytes(security.KSecRandomDefault, b) != 0 { -+ return 0, errors.New("crypto/rand: unable to read from source") -+ } -+ return len(b), nil -+} -+ -+const RandReader = randReader(0) -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rc4.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rc4.go -new file mode 100644 -index 00000000000000..01258b7f65a263 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rc4.go -@@ -0,0 +1,81 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "errors" -+ "runtime" -+ "slices" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/commoncrypto" -+) -+ -+// RC4Cipher is an instance of RC4 using a particular key. -+type RC4Cipher struct { -+ ctx commoncrypto.CCCryptorRef -+} -+ -+// NewRC4Cipher creates and returns a new RC4 cipher with the given key. -+func NewRC4Cipher(key []byte) (*RC4Cipher, error) { -+ // Clone the key to prevent modification. -+ key = slices.Clone(key) -+ var ctx commoncrypto.CCCryptorRef -+ status := commoncrypto.CCCryptorCreate( -+ commoncrypto.KCCEncrypt, // Operation (RC4 stream) -+ commoncrypto.KCCAlgorithmRC4, // Algorithm -+ 0, // No padding or other options -+ key, // Key -+ nil, // No IV needed for RC4 -+ &ctx, // Output: CCCryptorRef -+ ) -+ if status != commoncrypto.KCCSuccess { -+ return nil, errors.New("failed to create RC4 cipher") -+ } -+ c := &RC4Cipher{ctx: ctx} -+ runtime.SetFinalizer(c, (*RC4Cipher).finalize) -+ return c, nil -+} -+ -+// finalize releases the RC4 cipher context when no longer needed. -+func (c *RC4Cipher) finalize() { -+ if c.ctx != nil { -+ commoncrypto.CCCryptorRelease(c.ctx) -+ } -+} -+ -+// Reset zeros the key data and makes the cipher unusable. -+func (c *RC4Cipher) Reset() { -+ if c.ctx != nil { -+ commoncrypto.CCCryptorRelease(c.ctx) -+ c.ctx = nil -+ } -+} -+ -+// XORKeyStream sets dst to the result of XORing src with the key stream. -+func (c *RC4Cipher) XORKeyStream(dst, src []byte) { -+ if c.ctx == nil || len(src) == 0 { -+ return -+ } -+ if inexactOverlap(dst[:len(src)], src) { -+ panic("crypto/rc4: invalid buffer overlap") -+ } -+ // Ensures `dst` has sufficient space. -+ _ = dst[len(src)-1] -+ var outLen int -+ status := commoncrypto.CCCryptorUpdate( -+ c.ctx, -+ src, // Input -+ dst, // Output -+ &outLen, -+ ) -+ if status != commoncrypto.KCCSuccess { -+ panic("crypto/cipher: CCCryptorUpdate failed") -+ } -+ if int(outLen) != len(src) { -+ panic("crypto/rc4: src not fully XORed") -+ } -+ runtime.KeepAlive(c) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rsa.go b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rsa.go -new file mode 100644 -index 00000000000000..8e25affa681753 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-darwin/xcrypto/rsa.go -@@ -0,0 +1,208 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build darwin -+ -+package xcrypto -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "runtime" -+ "strconv" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-darwin/internal/security" -+) -+ -+// GenerateKeyRSA generates an RSA key pair on macOS. -+// asn1Data is encoded as PKCS#1 ASN1 DER. -+func GenerateKeyRSA(bits int) (asn1Data []byte, err error) { -+ privKeyDER, privKeyRef, err := createSecKeyRandom(security.KSecAttrKeyTypeRSA, bits) -+ if err != nil { -+ return nil, err -+ } -+ security.CFRelease(security.CFTypeRef(privKeyRef)) -+ return privKeyDER, nil -+} -+ -+type PublicKeyRSA struct { -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey security.SecKeyRef -+} -+ -+func (k *PublicKeyRSA) finalize() { -+ if k._pkey != nil { -+ security.CFRelease(security.CFTypeRef(k._pkey)) -+ } -+} -+ -+// NewPublicKeyRSA creates a new RSA public key from ASN1 DER encoded data. -+func NewPublicKeyRSA(asn1Data []byte) (*PublicKeyRSA, error) { -+ pubKeyRef, err := createSecKeyWithData(asn1Data, security.KSecAttrKeyTypeRSA, security.KSecAttrKeyClassPublic) -+ if err != nil { -+ return nil, err -+ } -+ -+ key := &PublicKeyRSA{_pkey: pubKeyRef} -+ runtime.SetFinalizer(key, (*PublicKeyRSA).finalize) -+ return key, nil -+} -+ -+func (k *PublicKeyRSA) withKey(f func(security.SecKeyRef) error) error { -+ // Because of the finalizer, any time key is passed to cgo, that call must -+ // be followed by a call to runtime.KeepAlive, to make sure k is not -+ // collected (and finalized) before the cgo call returns. -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+type PrivateKeyRSA struct { -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey security.SecKeyRef -+} -+ -+func (k *PrivateKeyRSA) finalize() { -+ if k._pkey != nil { -+ security.CFRelease(security.CFTypeRef(k._pkey)) -+ } -+} -+ -+// NewPrivateKeyRSA creates a new RSA private key from ASN1 DER encoded data. -+func NewPrivateKeyRSA(asn1Data []byte) (*PrivateKeyRSA, error) { -+ privKeyRef, err := createSecKeyWithData(asn1Data, security.KSecAttrKeyTypeRSA, security.KSecAttrKeyClassPrivate) -+ if err != nil { -+ return nil, err -+ } -+ -+ key := &PrivateKeyRSA{_pkey: privKeyRef} -+ runtime.SetFinalizer(key, (*PrivateKeyRSA).finalize) -+ return key, nil -+} -+ -+func (k *PrivateKeyRSA) PublicKey() *PublicKeyRSA { -+ var pubKeyRef security.SecKeyRef -+ k.withKey(func(key security.SecKeyRef) error { -+ pubKeyRef = security.SecKeyCopyPublicKey(k._pkey) -+ return nil -+ }) -+ pubKey := &PublicKeyRSA{_pkey: pubKeyRef} -+ runtime.SetFinalizer(pubKey, (*PublicKeyRSA).finalize) -+ return pubKey -+} -+ -+func (k *PrivateKeyRSA) withKey(f func(security.SecKeyRef) error) error { -+ // Because of the finalizer, any time _pkey is passed to cgo, that call must -+ // be followed by a call to runtime.KeepAlive, to make sure k is not -+ // collected (and finalized) before the cgo call returns. -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+// DecryptRSAOAEP decrypts data using RSA-OAEP. -+func DecryptRSAOAEP(h hash.Hash, priv *PrivateKeyRSA, ciphertext, label []byte) ([]byte, error) { -+ if len(label) > 0 { -+ // https://github.com/microsoft/go-crypto-darwin/issues/22 -+ panic("crypto/rsa: label is not supported on macOS") -+ } -+ return evpDecrypt(priv.withKey, algorithmTypeOAEP, ciphertext, h) -+} -+ -+// EncryptRSAOAEP encrypts data using RSA-OAEP. -+func EncryptRSAOAEP(h hash.Hash, pub *PublicKeyRSA, msg, label []byte) ([]byte, error) { -+ if len(label) > 0 { -+ // https://github.com/microsoft/go-crypto-darwin/issues/22 -+ panic("crypto/rsa: label is not supported on macOS") -+ } -+ return evpEncrypt(pub.withKey, algorithmTypeOAEP, msg, h) -+} -+ -+// SignRSAPSS signs data with RSA-PSS. -+func SignRSAPSS(priv *PrivateKeyRSA, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ return evpSign(priv.withKey, algorithmTypePSS, h, hashed) -+} -+ -+// VerifyRSAPSS verifies data with RSA-PSS. -+func VerifyRSAPSS(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ return evpVerify(pub.withKey, algorithmTypePSS, h, hashed, sig) -+} -+ -+func SignRSAPKCS1v15(priv *PrivateKeyRSA, h crypto.Hash, hashed []byte) ([]byte, error) { -+ return evpSign(priv.withKey, algorithmTypePKCS1v15Sig, h, hashed) -+} -+ -+func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte) error { -+ if pub.withKey(func(key security.SecKeyRef) error { -+ size := security.SecKeyGetBlockSize(key) -+ if len(sig) < int(size) { -+ return errors.New("crypto/rsa: signature too short") -+ } -+ return nil -+ }) != nil { -+ return errors.New("crypto/rsa: verification error") -+ } -+ return evpVerify(pub.withKey, algorithmTypePKCS1v15Sig, h, hashed, sig) -+} -+ -+// DecryptRSAPKCS1 decrypts data using RSA PKCS#1 v1.5 padding. -+func DecryptRSAPKCS1(priv *PrivateKeyRSA, ciphertext []byte) ([]byte, error) { -+ return evpDecrypt(priv.withKey, algorithmTypePKCS1v15Enc, ciphertext, nil) -+} -+ -+// EncryptRSAPKCS1 encrypts data using RSA PKCS#1 v1.5 padding. -+func EncryptRSAPKCS1(pub *PublicKeyRSA, msg []byte) ([]byte, error) { -+ return evpEncrypt(pub.withKey, algorithmTypePKCS1v15Enc, msg, nil) -+} -+ -+func DecryptRSANoPadding(priv *PrivateKeyRSA, ciphertext []byte) ([]byte, error) { -+ return evpDecrypt(priv.withKey, algorithmTypeRAW, ciphertext, nil) -+} -+ -+func EncryptRSANoPadding(pub *PublicKeyRSA, msg []byte) ([]byte, error) { -+ return evpEncrypt(pub.withKey, algorithmTypeRAW, msg, nil) -+} -+ -+// Helper functions -+ -+type cfError struct { -+ code int -+ message string -+} -+ -+func (e *cfError) Error() string { -+ if e.message == "" { -+ return "CFError(" + strconv.Itoa(e.code) + "): unknown error" -+ } -+ return "CFError(" + strconv.Itoa(e.code) + "): " + e.message -+} -+ -+func goCFErrorRef(ref security.CFErrorRef) error { -+ if ref == nil { -+ return nil -+ } -+ var message string -+ if desc := security.CFErrorCopyDescription(ref); desc != nil { -+ defer security.CFRelease(security.CFTypeRef(desc)) -+ if cstr := security.CFStringGetCStringPtr(desc, security.KCFStringEncodingUTF8); cstr != nil { -+ message = string(cstrBytes(cstr)) -+ } -+ } -+ return &cfError{ -+ code: int(security.CFErrorGetCode(ref)), -+ message: message, -+ } -+} -+ -+// cstrBytes returns a byte slice containing the contents of the C string -+// pointed to by p. The slice does not include the terminating null byte. -+func cstrBytes(p *byte) []byte { -+ if p == nil { -+ return nil -+ } -+ end := unsafe.Pointer(p) -+ for *(*byte)(end) != 0 { -+ end = unsafe.Add(end, 1) -+ } -+ return unsafe.Slice((*byte)(unsafe.Pointer(p)), uintptr(end)-uintptr(unsafe.Pointer(p))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/LICENSE b/src/vendor/github.com/microsoft/go-crypto-openssl/LICENSE -new file mode 100644 -index 00000000000000..48ea6616b5b858 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/LICENSE -@@ -0,0 +1,21 @@ -+MIT License -+ -+Copyright (c) Microsoft Corporation. -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in all -+copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+SOFTWARE -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/bbig/big.go b/src/vendor/github.com/microsoft/go-crypto-openssl/bbig/big.go -new file mode 100644 -index 00000000000000..32ce383bd966c2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/bbig/big.go -@@ -0,0 +1,40 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// This is a mirror of -+// https://github.com/golang/go/blob/36b87f273cc43e21685179dc1664ebb5493d26ae/src/crypto/internal/boring/bbig/big.go. -+ -+package bbig -+ -+import ( -+ "math/big" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Enc(b *big.Int) openssl.BigInt { -+ if b == nil { -+ return nil -+ } -+ x := b.Bits() -+ if len(x) == 0 { -+ return openssl.BigInt{} -+ } -+ return unsafe.Slice((*uint)(&x[0]), len(x)) -+} -+ -+func Dec(b openssl.BigInt) *big.Int { -+ if b == nil { -+ return nil -+ } -+ if len(b) == 0 { -+ return new(big.Int) -+ } -+ x := unsafe.Slice((*big.Word)(&b[0]), len(b)) -+ return new(big.Int).SetBits(x) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_amd64.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_amd64.h -new file mode 100644 -index 00000000000000..6bb31c929849a8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_amd64.h -@@ -0,0 +1,101 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2021 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI0. -+// -+// These save the frame pointer, so in general, functions that use -+// these should have zero frame size to suppress the automatic frame -+// pointer, though it's harmless to not do this. -+ -+#ifdef GOOS_windows -+ -+// REGS_HOST_TO_ABI0_STACK is the stack bytes used by -+// PUSH_REGS_HOST_TO_ABI0. -+#define REGS_HOST_TO_ABI0_STACK (28*8 + 8) -+ -+// PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from -+// the host ABI to Go ABI0 code. It saves all registers that are -+// callee-save in the host ABI and caller-save in Go ABI0 and prepares -+// for entry to Go. -+// -+// Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag. -+// Clear the DF flag for the Go ABI. -+// MXCSR matches the Go ABI, so we don't have to set that, -+// and Go doesn't modify it, so we don't have to save it. -+#define PUSH_REGS_HOST_TO_ABI0() \ -+ PUSHFQ \ -+ CLD \ -+ ADJSP $(REGS_HOST_TO_ABI0_STACK - 8) \ -+ MOVQ DI, (0*0)(SP) \ -+ MOVQ SI, (1*8)(SP) \ -+ MOVQ BP, (2*8)(SP) \ -+ MOVQ BX, (3*8)(SP) \ -+ MOVQ R12, (4*8)(SP) \ -+ MOVQ R13, (5*8)(SP) \ -+ MOVQ R14, (6*8)(SP) \ -+ MOVQ R15, (7*8)(SP) \ -+ MOVUPS X6, (8*8)(SP) \ -+ MOVUPS X7, (10*8)(SP) \ -+ MOVUPS X8, (12*8)(SP) \ -+ MOVUPS X9, (14*8)(SP) \ -+ MOVUPS X10, (16*8)(SP) \ -+ MOVUPS X11, (18*8)(SP) \ -+ MOVUPS X12, (20*8)(SP) \ -+ MOVUPS X13, (22*8)(SP) \ -+ MOVUPS X14, (24*8)(SP) \ -+ MOVUPS X15, (26*8)(SP) -+ -+#define POP_REGS_HOST_TO_ABI0() \ -+ MOVQ (0*0)(SP), DI \ -+ MOVQ (1*8)(SP), SI \ -+ MOVQ (2*8)(SP), BP \ -+ MOVQ (3*8)(SP), BX \ -+ MOVQ (4*8)(SP), R12 \ -+ MOVQ (5*8)(SP), R13 \ -+ MOVQ (6*8)(SP), R14 \ -+ MOVQ (7*8)(SP), R15 \ -+ MOVUPS (8*8)(SP), X6 \ -+ MOVUPS (10*8)(SP), X7 \ -+ MOVUPS (12*8)(SP), X8 \ -+ MOVUPS (14*8)(SP), X9 \ -+ MOVUPS (16*8)(SP), X10 \ -+ MOVUPS (18*8)(SP), X11 \ -+ MOVUPS (20*8)(SP), X12 \ -+ MOVUPS (22*8)(SP), X13 \ -+ MOVUPS (24*8)(SP), X14 \ -+ MOVUPS (26*8)(SP), X15 \ -+ ADJSP $-(REGS_HOST_TO_ABI0_STACK - 8) \ -+ POPFQ -+ -+#else -+// SysV ABI -+ -+#define REGS_HOST_TO_ABI0_STACK (6*8) -+ -+// SysV MXCSR matches the Go ABI, so we don't have to set that, -+// and Go doesn't modify it, so we don't have to save it. -+// Both SysV and Go require DF to be cleared, so that's already clear. -+// The SysV and Go frame pointer conventions are compatible. -+#define PUSH_REGS_HOST_TO_ABI0() \ -+ ADJSP $(REGS_HOST_TO_ABI0_STACK) \ -+ MOVQ BP, (5*8)(SP) \ -+ LEAQ (5*8)(SP), BP \ -+ MOVQ BX, (0*8)(SP) \ -+ MOVQ R12, (1*8)(SP) \ -+ MOVQ R13, (2*8)(SP) \ -+ MOVQ R14, (3*8)(SP) \ -+ MOVQ R15, (4*8)(SP) -+ -+#define POP_REGS_HOST_TO_ABI0() \ -+ MOVQ (0*8)(SP), BX \ -+ MOVQ (1*8)(SP), R12 \ -+ MOVQ (2*8)(SP), R13 \ -+ MOVQ (3*8)(SP), R14 \ -+ MOVQ (4*8)(SP), R15 \ -+ MOVQ (5*8)(SP), BP \ -+ ADJSP $-(REGS_HOST_TO_ABI0_STACK) -+ -+#endif -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_arm64.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_arm64.h -new file mode 100644 -index 00000000000000..4957e129eae27e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_arm64.h -@@ -0,0 +1,41 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2021 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI0. -+// -+// These macros save and restore the callee-saved registers -+// from the stack, but they don't adjust stack pointer, so -+// the user should prepare stack space in advance. -+// SAVE_R19_TO_R28(offset) saves R19 ~ R28 to the stack space -+// of ((offset)+0*8)(RSP) ~ ((offset)+9*8)(RSP). -+// -+// SAVE_F8_TO_F15(offset) saves F8 ~ F15 to the stack space -+// of ((offset)+0*8)(RSP) ~ ((offset)+7*8)(RSP). -+// -+// R29 is not saved because Go will save and restore it. -+ -+#define SAVE_R19_TO_R28(offset) \ -+ STP (R19, R20), ((offset)+0*8)(RSP) \ -+ STP (R21, R22), ((offset)+2*8)(RSP) \ -+ STP (R23, R24), ((offset)+4*8)(RSP) \ -+ STP (R25, R26), ((offset)+6*8)(RSP) \ -+ STP (R27, g), ((offset)+8*8)(RSP) -+#define RESTORE_R19_TO_R28(offset) \ -+ LDP ((offset)+0*8)(RSP), (R19, R20) \ -+ LDP ((offset)+2*8)(RSP), (R21, R22) \ -+ LDP ((offset)+4*8)(RSP), (R23, R24) \ -+ LDP ((offset)+6*8)(RSP), (R25, R26) \ -+ LDP ((offset)+8*8)(RSP), (R27, g) /* R28 */ -+#define SAVE_F8_TO_F15(offset) \ -+ FSTPD (F8, F9), ((offset)+0*8)(RSP) \ -+ FSTPD (F10, F11), ((offset)+2*8)(RSP) \ -+ FSTPD (F12, F13), ((offset)+4*8)(RSP) \ -+ FSTPD (F14, F15), ((offset)+6*8)(RSP) -+#define RESTORE_F8_TO_F15(offset) \ -+ FLDPD ((offset)+0*8)(RSP), (F8, F9) \ -+ FLDPD ((offset)+2*8)(RSP), (F10, F11) \ -+ FLDPD ((offset)+4*8)(RSP), (F12, F13) \ -+ FLDPD ((offset)+6*8)(RSP), (F14, F15) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_loong64.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_loong64.h -new file mode 100644 -index 00000000000000..3752c54045960b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_loong64.h -@@ -0,0 +1,62 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI0. -+// -+// These macros save and restore the callee-saved registers -+// from the stack, but they don't adjust stack pointer, so -+// the user should prepare stack space in advance. -+// SAVE_R22_TO_R31(offset) saves R22 ~ R31 to the stack space -+// of ((offset)+0*8)(R3) ~ ((offset)+9*8)(R3). -+// -+// SAVE_F24_TO_F31(offset) saves F24 ~ F31 to the stack space -+// of ((offset)+0*8)(R3) ~ ((offset)+7*8)(R3). -+// -+// Note: g is R22 -+ -+#define SAVE_R22_TO_R31(offset) \ -+ MOVV g, ((offset)+(0*8))(R3) \ -+ MOVV R23, ((offset)+(1*8))(R3) \ -+ MOVV R24, ((offset)+(2*8))(R3) \ -+ MOVV R25, ((offset)+(3*8))(R3) \ -+ MOVV R26, ((offset)+(4*8))(R3) \ -+ MOVV R27, ((offset)+(5*8))(R3) \ -+ MOVV R28, ((offset)+(6*8))(R3) \ -+ MOVV R29, ((offset)+(7*8))(R3) \ -+ MOVV R30, ((offset)+(8*8))(R3) \ -+ MOVV R31, ((offset)+(9*8))(R3) -+ -+#define SAVE_F24_TO_F31(offset) \ -+ MOVD F24, ((offset)+(0*8))(R3) \ -+ MOVD F25, ((offset)+(1*8))(R3) \ -+ MOVD F26, ((offset)+(2*8))(R3) \ -+ MOVD F27, ((offset)+(3*8))(R3) \ -+ MOVD F28, ((offset)+(4*8))(R3) \ -+ MOVD F29, ((offset)+(5*8))(R3) \ -+ MOVD F30, ((offset)+(6*8))(R3) \ -+ MOVD F31, ((offset)+(7*8))(R3) -+ -+#define RESTORE_R22_TO_R31(offset) \ -+ MOVV ((offset)+(0*8))(R3), g \ -+ MOVV ((offset)+(1*8))(R3), R23 \ -+ MOVV ((offset)+(2*8))(R3), R24 \ -+ MOVV ((offset)+(3*8))(R3), R25 \ -+ MOVV ((offset)+(4*8))(R3), R26 \ -+ MOVV ((offset)+(5*8))(R3), R27 \ -+ MOVV ((offset)+(6*8))(R3), R28 \ -+ MOVV ((offset)+(7*8))(R3), R29 \ -+ MOVV ((offset)+(8*8))(R3), R30 \ -+ MOVV ((offset)+(9*8))(R3), R31 -+ -+#define RESTORE_F24_TO_F31(offset) \ -+ MOVD ((offset)+(0*8))(R3), F24 \ -+ MOVD ((offset)+(1*8))(R3), F25 \ -+ MOVD ((offset)+(2*8))(R3), F26 \ -+ MOVD ((offset)+(3*8))(R3), F27 \ -+ MOVD ((offset)+(4*8))(R3), F28 \ -+ MOVD ((offset)+(5*8))(R3), F29 \ -+ MOVD ((offset)+(6*8))(R3), F30 \ -+ MOVD ((offset)+(7*8))(R3), F31 -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_ppc64x.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_ppc64x.h -new file mode 100644 -index 00000000000000..4a6086502ee07b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_ppc64x.h -@@ -0,0 +1,197 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI -+// -+// On PPC64/ELFv2 targets, the following registers are callee -+// saved when called from C. They must be preserved before -+// calling into Go which does not preserve any of them. -+// -+// R14-R31 -+// CR2-4 -+// VR20-31 -+// F14-F31 -+// -+// xcoff(aix) and ELFv1 are similar, but may only require a -+// subset of these. -+// -+// These macros assume a 16 byte aligned stack pointer. This -+// is required by ELFv1, ELFv2, and AIX PPC64. -+ -+#define SAVE_GPR_SIZE (18*8) -+#define SAVE_GPR(offset) \ -+ MOVD R14, (offset+8*0)(R1) \ -+ MOVD R15, (offset+8*1)(R1) \ -+ MOVD R16, (offset+8*2)(R1) \ -+ MOVD R17, (offset+8*3)(R1) \ -+ MOVD R18, (offset+8*4)(R1) \ -+ MOVD R19, (offset+8*5)(R1) \ -+ MOVD R20, (offset+8*6)(R1) \ -+ MOVD R21, (offset+8*7)(R1) \ -+ MOVD R22, (offset+8*8)(R1) \ -+ MOVD R23, (offset+8*9)(R1) \ -+ MOVD R24, (offset+8*10)(R1) \ -+ MOVD R25, (offset+8*11)(R1) \ -+ MOVD R26, (offset+8*12)(R1) \ -+ MOVD R27, (offset+8*13)(R1) \ -+ MOVD R28, (offset+8*14)(R1) \ -+ MOVD R29, (offset+8*15)(R1) \ -+ MOVD g, (offset+8*16)(R1) \ -+ MOVD R31, (offset+8*17)(R1) -+ -+#define RESTORE_GPR(offset) \ -+ MOVD (offset+8*0)(R1), R14 \ -+ MOVD (offset+8*1)(R1), R15 \ -+ MOVD (offset+8*2)(R1), R16 \ -+ MOVD (offset+8*3)(R1), R17 \ -+ MOVD (offset+8*4)(R1), R18 \ -+ MOVD (offset+8*5)(R1), R19 \ -+ MOVD (offset+8*6)(R1), R20 \ -+ MOVD (offset+8*7)(R1), R21 \ -+ MOVD (offset+8*8)(R1), R22 \ -+ MOVD (offset+8*9)(R1), R23 \ -+ MOVD (offset+8*10)(R1), R24 \ -+ MOVD (offset+8*11)(R1), R25 \ -+ MOVD (offset+8*12)(R1), R26 \ -+ MOVD (offset+8*13)(R1), R27 \ -+ MOVD (offset+8*14)(R1), R28 \ -+ MOVD (offset+8*15)(R1), R29 \ -+ MOVD (offset+8*16)(R1), g \ -+ MOVD (offset+8*17)(R1), R31 -+ -+#define SAVE_FPR_SIZE (18*8) -+#define SAVE_FPR(offset) \ -+ FMOVD F14, (offset+8*0)(R1) \ -+ FMOVD F15, (offset+8*1)(R1) \ -+ FMOVD F16, (offset+8*2)(R1) \ -+ FMOVD F17, (offset+8*3)(R1) \ -+ FMOVD F18, (offset+8*4)(R1) \ -+ FMOVD F19, (offset+8*5)(R1) \ -+ FMOVD F20, (offset+8*6)(R1) \ -+ FMOVD F21, (offset+8*7)(R1) \ -+ FMOVD F22, (offset+8*8)(R1) \ -+ FMOVD F23, (offset+8*9)(R1) \ -+ FMOVD F24, (offset+8*10)(R1) \ -+ FMOVD F25, (offset+8*11)(R1) \ -+ FMOVD F26, (offset+8*12)(R1) \ -+ FMOVD F27, (offset+8*13)(R1) \ -+ FMOVD F28, (offset+8*14)(R1) \ -+ FMOVD F29, (offset+8*15)(R1) \ -+ FMOVD F30, (offset+8*16)(R1) \ -+ FMOVD F31, (offset+8*17)(R1) -+ -+#define RESTORE_FPR(offset) \ -+ FMOVD (offset+8*0)(R1), F14 \ -+ FMOVD (offset+8*1)(R1), F15 \ -+ FMOVD (offset+8*2)(R1), F16 \ -+ FMOVD (offset+8*3)(R1), F17 \ -+ FMOVD (offset+8*4)(R1), F18 \ -+ FMOVD (offset+8*5)(R1), F19 \ -+ FMOVD (offset+8*6)(R1), F20 \ -+ FMOVD (offset+8*7)(R1), F21 \ -+ FMOVD (offset+8*8)(R1), F22 \ -+ FMOVD (offset+8*9)(R1), F23 \ -+ FMOVD (offset+8*10)(R1), F24 \ -+ FMOVD (offset+8*11)(R1), F25 \ -+ FMOVD (offset+8*12)(R1), F26 \ -+ FMOVD (offset+8*13)(R1), F27 \ -+ FMOVD (offset+8*14)(R1), F28 \ -+ FMOVD (offset+8*15)(R1), F29 \ -+ FMOVD (offset+8*16)(R1), F30 \ -+ FMOVD (offset+8*17)(R1), F31 -+ -+// Save and restore VR20-31 (aka VSR56-63). These -+// macros must point to a 16B aligned offset. -+#define SAVE_VR_SIZE (12*16) -+#define SAVE_VR(offset, rtmp) \ -+ MOVD $(offset+16*0), rtmp \ -+ STVX V20, (rtmp)(R1) \ -+ MOVD $(offset+16*1), rtmp \ -+ STVX V21, (rtmp)(R1) \ -+ MOVD $(offset+16*2), rtmp \ -+ STVX V22, (rtmp)(R1) \ -+ MOVD $(offset+16*3), rtmp \ -+ STVX V23, (rtmp)(R1) \ -+ MOVD $(offset+16*4), rtmp \ -+ STVX V24, (rtmp)(R1) \ -+ MOVD $(offset+16*5), rtmp \ -+ STVX V25, (rtmp)(R1) \ -+ MOVD $(offset+16*6), rtmp \ -+ STVX V26, (rtmp)(R1) \ -+ MOVD $(offset+16*7), rtmp \ -+ STVX V27, (rtmp)(R1) \ -+ MOVD $(offset+16*8), rtmp \ -+ STVX V28, (rtmp)(R1) \ -+ MOVD $(offset+16*9), rtmp \ -+ STVX V29, (rtmp)(R1) \ -+ MOVD $(offset+16*10), rtmp \ -+ STVX V30, (rtmp)(R1) \ -+ MOVD $(offset+16*11), rtmp \ -+ STVX V31, (rtmp)(R1) -+ -+#define RESTORE_VR(offset, rtmp) \ -+ MOVD $(offset+16*0), rtmp \ -+ LVX (rtmp)(R1), V20 \ -+ MOVD $(offset+16*1), rtmp \ -+ LVX (rtmp)(R1), V21 \ -+ MOVD $(offset+16*2), rtmp \ -+ LVX (rtmp)(R1), V22 \ -+ MOVD $(offset+16*3), rtmp \ -+ LVX (rtmp)(R1), V23 \ -+ MOVD $(offset+16*4), rtmp \ -+ LVX (rtmp)(R1), V24 \ -+ MOVD $(offset+16*5), rtmp \ -+ LVX (rtmp)(R1), V25 \ -+ MOVD $(offset+16*6), rtmp \ -+ LVX (rtmp)(R1), V26 \ -+ MOVD $(offset+16*7), rtmp \ -+ LVX (rtmp)(R1), V27 \ -+ MOVD $(offset+16*8), rtmp \ -+ LVX (rtmp)(R1), V28 \ -+ MOVD $(offset+16*9), rtmp \ -+ LVX (rtmp)(R1), V29 \ -+ MOVD $(offset+16*10), rtmp \ -+ LVX (rtmp)(R1), V30 \ -+ MOVD $(offset+16*11), rtmp \ -+ LVX (rtmp)(R1), V31 -+ -+// LR and CR are saved in the caller's frame. The callee must -+// make space for all other callee-save registers. -+#define SAVE_ALL_REG_SIZE (SAVE_GPR_SIZE+SAVE_FPR_SIZE+SAVE_VR_SIZE) -+ -+// Stack a frame and save all callee-save registers following the -+// host OS's ABI. Fortunately, this is identical for AIX, ELFv1, and -+// ELFv2. All host ABIs require the stack pointer to maintain 16 byte -+// alignment, and save the callee-save registers in the same places. -+// -+// To restate, R1 is assumed to be aligned when this macro is used. -+// This assumes the caller's frame is compliant with the host ABI. -+// CR and LR are saved into the caller's frame per the host ABI. -+// R0 is initialized to $0 as expected by Go. -+#define STACK_AND_SAVE_HOST_TO_GO_ABI(extra) \ -+ MOVD LR, R0 \ -+ MOVD R0, 16(R1) \ -+ MOVW CR, R0 \ -+ MOVD R0, 8(R1) \ -+ MOVDU R1, -(extra)-FIXED_FRAME-SAVE_ALL_REG_SIZE(R1) \ -+ SAVE_GPR(extra+FIXED_FRAME) \ -+ SAVE_FPR(extra+FIXED_FRAME+SAVE_GPR_SIZE) \ -+ SAVE_VR(extra+FIXED_FRAME+SAVE_GPR_SIZE+SAVE_FPR_SIZE, R0) \ -+ MOVD $0, R0 -+ -+// This unstacks the frame, restoring all callee-save registers -+// as saved by STACK_AND_SAVE_HOST_TO_GO_ABI. -+// -+// R0 is not guaranteed to contain $0 after this macro. -+#define UNSTACK_AND_RESTORE_GO_TO_HOST_ABI(extra) \ -+ RESTORE_GPR(extra+FIXED_FRAME) \ -+ RESTORE_FPR(extra+FIXED_FRAME+SAVE_GPR_SIZE) \ -+ RESTORE_VR(extra+FIXED_FRAME+SAVE_GPR_SIZE+SAVE_FPR_SIZE, R0) \ -+ ADD $(extra+FIXED_FRAME+SAVE_ALL_REG_SIZE), R1 \ -+ MOVD 16(R1), R0 \ -+ MOVD R0, LR \ -+ MOVD 8(R1), R0 \ -+ MOVW R0, CR -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_riscv64.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_riscv64.h -new file mode 100644 -index 00000000000000..f728bd3300cf18 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/abi_riscv64.h -@@ -0,0 +1,74 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Macros for transitioning from the host ABI to Go ABI0. -+// -+// These macros save and restore the callee-saved registers -+// from the stack, but they don't adjust stack pointer, so -+// the user should prepare stack space in advance. -+// SAVE_GPR(offset) saves X8, X9, X18-X27 to the stack space -+// of ((offset)+0*8)(X2) ~ ((offset)+11*8)(X2). -+// -+// SAVE_FPR(offset) saves F8, F9, F18-F27 to the stack space -+// of ((offset)+0*8)(X2) ~ ((offset)+11*8)(X2). -+// -+// Note: g is X27 -+ -+#define SAVE_GPR(offset) \ -+ MOV X8, ((offset)+0*8)(X2) \ -+ MOV X9, ((offset)+1*8)(X2) \ -+ MOV X18, ((offset)+2*8)(X2) \ -+ MOV X19, ((offset)+3*8)(X2) \ -+ MOV X20, ((offset)+4*8)(X2) \ -+ MOV X21, ((offset)+5*8)(X2) \ -+ MOV X22, ((offset)+6*8)(X2) \ -+ MOV X23, ((offset)+7*8)(X2) \ -+ MOV X24, ((offset)+8*8)(X2) \ -+ MOV X25, ((offset)+9*8)(X2) \ -+ MOV X26, ((offset)+10*8)(X2) \ -+ MOV g, ((offset)+11*8)(X2) -+ -+#define RESTORE_GPR(offset) \ -+ MOV ((offset)+0*8)(X2), X8 \ -+ MOV ((offset)+1*8)(X2), X9 \ -+ MOV ((offset)+2*8)(X2), X18 \ -+ MOV ((offset)+3*8)(X2), X19 \ -+ MOV ((offset)+4*8)(X2), X20 \ -+ MOV ((offset)+5*8)(X2), X21 \ -+ MOV ((offset)+6*8)(X2), X22 \ -+ MOV ((offset)+7*8)(X2), X23 \ -+ MOV ((offset)+8*8)(X2), X24 \ -+ MOV ((offset)+9*8)(X2), X25 \ -+ MOV ((offset)+10*8)(X2), X26 \ -+ MOV ((offset)+11*8)(X2), g -+ -+#define SAVE_FPR(offset) \ -+ MOVD F8, ((offset)+0*8)(X2) \ -+ MOVD F9, ((offset)+1*8)(X2) \ -+ MOVD F18, ((offset)+2*8)(X2) \ -+ MOVD F19, ((offset)+3*8)(X2) \ -+ MOVD F20, ((offset)+4*8)(X2) \ -+ MOVD F21, ((offset)+5*8)(X2) \ -+ MOVD F22, ((offset)+6*8)(X2) \ -+ MOVD F23, ((offset)+7*8)(X2) \ -+ MOVD F24, ((offset)+8*8)(X2) \ -+ MOVD F25, ((offset)+9*8)(X2) \ -+ MOVD F26, ((offset)+10*8)(X2) \ -+ MOVD F27, ((offset)+11*8)(X2) -+ -+#define RESTORE_FPR(offset) \ -+ MOVD ((offset)+0*8)(X2), F8 \ -+ MOVD ((offset)+1*8)(X2), F9 \ -+ MOVD ((offset)+2*8)(X2), F18 \ -+ MOVD ((offset)+3*8)(X2), F19 \ -+ MOVD ((offset)+4*8)(X2), F20 \ -+ MOVD ((offset)+5*8)(X2), F21 \ -+ MOVD ((offset)+6*8)(X2), F22 \ -+ MOVD ((offset)+7*8)(X2), F23 \ -+ MOVD ((offset)+8*8)(X2), F24 \ -+ MOVD ((offset)+9*8)(X2), F25 \ -+ MOVD ((offset)+10*8)(X2), F26 \ -+ MOVD ((offset)+11*8)(X2), F27 -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_386.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_386.s -new file mode 100644 -index 00000000000000..350233acccc89b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_386.s -@@ -0,0 +1,31 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT, $28-16 -+ MOVL BP, 24(SP) -+ MOVL BX, 20(SP) -+ MOVL SI, 16(SP) -+ MOVL DI, 12(SP) -+ -+ MOVL ctxt+12(FP), AX -+ MOVL AX, 8(SP) -+ MOVL a+4(FP), AX -+ MOVL AX, 4(SP) -+ MOVL fn+0(FP), AX -+ MOVL AX, 0(SP) -+ CALL runtime·cgocallback(SB) -+ -+ MOVL 12(SP), DI -+ MOVL 16(SP), SI -+ MOVL 20(SP), BX -+ MOVL 24(SP), BP -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_amd64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_amd64.s -new file mode 100644 -index 00000000000000..623852da4937cb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_amd64.s -@@ -0,0 +1,41 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_amd64.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+// This signature is known to SWIG, so we can't change it. -+TEXT crosscall2(SB), NOSPLIT, $0-0 -+ PUSH_REGS_HOST_TO_ABI0() -+ -+ // Make room for arguments to cgocallback. -+ ADJSP $0x18 -+ -+#ifndef GOOS_windows -+ MOVQ DI, 0x0(SP) // fn -+ MOVQ SI, 0x8(SP) // arg -+ -+ // Skip n in DX. -+ MOVQ CX, 0x10(SP) // ctxt -+ -+#else -+ MOVQ CX, 0x0(SP) // fn -+ MOVQ DX, 0x8(SP) // arg -+ -+ // Skip n in R8. -+ MOVQ R9, 0x10(SP) // ctxt -+ -+#endif -+ -+ CALL runtime·cgocallback(SB) -+ -+ ADJSP $-0x18 -+ POP_REGS_HOST_TO_ABI0() -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm.s -new file mode 100644 -index 00000000000000..2a24150b337120 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm.s -@@ -0,0 +1,52 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2012 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+ SUB $(8*9), R13 // Reserve space for the floating point registers. -+ -+ // The C arguments arrive in R0, R1, R2, and R3. We want to -+ // pass R0, R1, and R3 to Go, so we push those on the stack. -+ // Also, save C callee-save registers R4-R12. -+ MOVM.WP [R0, R1, R3, R4, R5, R6, R7, R8, R9, g, R11, R12], (R13) -+ -+ // Finally, save the link register R14. This also puts the -+ // arguments we pushed for cgocallback where they need to be, -+ // starting at 4(R13). -+ MOVW.W R14, -4(R13) -+ -+ // Save VFP callee-saved registers D8-D15 (same as S16-S31). -+ // Note: We always save these since we target hard-float ABI. -+ MOVD F8, (13*4+8*1)(R13) -+ MOVD F9, (13*4+8*2)(R13) -+ MOVD F10, (13*4+8*3)(R13) -+ MOVD F11, (13*4+8*4)(R13) -+ MOVD F12, (13*4+8*5)(R13) -+ MOVD F13, (13*4+8*6)(R13) -+ MOVD F14, (13*4+8*7)(R13) -+ MOVD F15, (13*4+8*8)(R13) -+ -+ // We set up the arguments to cgocallback when saving registers above. -+ BL runtime·cgocallback(SB) -+ -+ MOVD (13*4+8*1)(R13), F8 -+ MOVD (13*4+8*2)(R13), F9 -+ MOVD (13*4+8*3)(R13), F10 -+ MOVD (13*4+8*4)(R13), F11 -+ MOVD (13*4+8*5)(R13), F12 -+ MOVD (13*4+8*6)(R13), F13 -+ MOVD (13*4+8*7)(R13), F14 -+ MOVD (13*4+8*8)(R13), F15 -+ -+ MOVW.P 4(R13), R14 -+ MOVM.IAW (R13), [R0, R1, R3, R4, R5, R6, R7, R8, R9, g, R11, R12] -+ ADD $(8*9), R13 -+ MOVW R14, R15 -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm64.s -new file mode 100644 -index 00000000000000..ff58b16c050af6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_arm64.s -@@ -0,0 +1,37 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_arm64.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+/* -+ * We still need to save all callee save register as before, and then -+ * push 3 args for fn (R0, R1, R3), skipping R2. -+ * Also note that at procedure entry in gc world, 8(RSP) will be the -+ * first arg. -+ */ -+ SUB $(8*24), RSP -+ STP (R0, R1), (8*1)(RSP) -+ MOVD R3, (8*3)(RSP) -+ -+ SAVE_R19_TO_R28(8*4) -+ SAVE_F8_TO_F15(8*14) -+ STP (R29, R30), (8*22)(RSP) -+ -+ // Initialize Go ABI environment -+ BL runtime·cgocallback(SB) -+ -+ RESTORE_R19_TO_R28(8*4) -+ RESTORE_F8_TO_F15(8*14) -+ LDP (8*22)(RSP), (R29, R30) -+ -+ ADD $(8*24), RSP -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_loong64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_loong64.s -new file mode 100644 -index 00000000000000..e3c8afb0d7f7de ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_loong64.s -@@ -0,0 +1,40 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_loong64.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+/* -+ * We still need to save all callee save register as before, and then -+ * push 3 args for fn (R4, R5, R7), skipping R6. -+ * Also note that at procedure entry in gc world, 8(R29) will be the -+ * first arg. -+ */ -+ -+ ADDV $(-23*8), R3 -+ MOVV R4, (1*8)(R3) // fn unsafe.Pointer -+ MOVV R5, (2*8)(R3) // a unsafe.Pointer -+ MOVV R7, (3*8)(R3) // ctxt uintptr -+ -+ SAVE_R22_TO_R31((4*8)) -+ SAVE_F24_TO_F31((14*8)) -+ MOVV R1, (22*8)(R3) -+ -+ // Initialize Go ABI environment -+ JAL runtime·cgocallback(SB) -+ -+ RESTORE_R22_TO_R31((4*8)) -+ RESTORE_F24_TO_F31((14*8)) -+ MOVV (22*8)(R3), R1 -+ -+ ADDV $(23*8), R3 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_ppc64le.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_ppc64le.s -new file mode 100644 -index 00000000000000..98fa0d54133219 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_ppc64le.s -@@ -0,0 +1,81 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2014 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_ppc64x.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+// -+// This is a simplified version that only saves GPR and FPR registers, -+// not vector registers. This keeps the stack frame smaller to avoid -+// exceeding the nosplit stack limit. -+// -+// On PPC64LE ELFv2, callee-save registers are: -+// R14-R31 (18 GPRs = 144 bytes) -+// F14-F31 (18 FPRs = 144 bytes) -+// CR2-CR4 (saved in CR field) -+// -+// Stack layout (must be 16-byte aligned): -+// 32 (FIXED_FRAME) + 24 (args) + 144 (GPR) + 144 (FPR) = 344 -+// Rounded to 352 for 16-byte alignment. -+ -+#define FIXED_FRAME 32 -+#define SAVE_SIZE 352 -+#define GPR_OFFSET (FIXED_FRAME+24) -+#define FPR_OFFSET (GPR_OFFSET+SAVE_GPR_SIZE) -+ -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+ // Save LR and CR in caller's frame per ELFv2 ABI -+ MOVD LR, R0 -+ MOVD R0, 16(R1) -+ MOVW CR, R0 -+ MOVD R0, 8(R1) -+ -+ // Allocate our stack frame -+ MOVDU R1, -SAVE_SIZE(R1) -+ -+ // Save TOC (R2) in case needed -+ MOVD R2, 24(R1) -+ -+ // Save callee-save GPRs -+ SAVE_GPR(GPR_OFFSET) -+ -+ // Save callee-save FPRs -+ SAVE_FPR(FPR_OFFSET) -+ -+ // Initialize R0 to 0 as expected by Go -+ MOVD $0, R0 -+ -+ // Set up arguments for cgocallback -+ MOVD R3, FIXED_FRAME+0(R1) // fn unsafe.Pointer -+ MOVD R4, FIXED_FRAME+8(R1) // a unsafe.Pointer -+ -+ // Skip R5 = n uint32 -+ MOVD R6, FIXED_FRAME+16(R1) // ctxt uintptr -+ BL runtime·cgocallback(SB) -+ -+ // Restore callee-save FPRs -+ RESTORE_FPR(FPR_OFFSET) -+ -+ // Restore callee-save GPRs -+ RESTORE_GPR(GPR_OFFSET) -+ -+ // Restore TOC -+ MOVD 24(R1), R2 -+ -+ // Deallocate stack frame -+ ADD $SAVE_SIZE, R1 -+ -+ // Restore LR and CR from caller's frame -+ MOVD 16(R1), R0 -+ MOVD R0, LR -+ MOVD 8(R1), R0 -+ MOVW R0, CR -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_riscv64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_riscv64.s -new file mode 100644 -index 00000000000000..4bb9b1d3a0a2ad ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_riscv64.s -@@ -0,0 +1,38 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2020 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+#include "abi_riscv64.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+/* -+ * Push arguments for fn (X10, X11, X13), along with all callee-save -+ * registers. Note that at procedure entry the first argument is at -+ * 8(X2). -+ */ -+ ADD $(-8*29), X2 -+ MOV X10, (8*1)(X2) // fn unsafe.Pointer -+ MOV X11, (8*2)(X2) // a unsafe.Pointer -+ MOV X13, (8*3)(X2) // ctxt uintptr -+ -+ SAVE_GPR((8*4)) -+ MOV X1, (8*16)(X2) -+ SAVE_FPR((8*17)) -+ -+ // Initialize Go ABI environment -+ CALL runtime·cgocallback(SB) -+ -+ RESTORE_GPR((8*4)) -+ MOV (8*16)(X2), X1 -+ RESTORE_FPR((8*17)) -+ -+ ADD $(8*29), X2 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_s390x.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_s390x.s -new file mode 100644 -index 00000000000000..fb393d4c534a8b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/asm_s390x.s -@@ -0,0 +1,54 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2016 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+#include "textflag.h" -+ -+// Called by C code generated by cmd/cgo. -+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) -+// Saves C callee-saved registers and calls cgocallback with three arguments. -+// fn is the PC of a func(a unsafe.Pointer) function. -+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 -+ // Start with standard C stack frame layout and linkage. -+ -+ // Save R6-R15 in the register save area of the calling function. -+ STMG R6, R15, 48(R15) -+ -+ // Allocate 96 bytes on the stack. -+ MOVD $-96(R15), R15 -+ -+ // Save F8-F15 in our stack frame. -+ FMOVD F8, 32(R15) -+ FMOVD F9, 40(R15) -+ FMOVD F10, 48(R15) -+ FMOVD F11, 56(R15) -+ FMOVD F12, 64(R15) -+ FMOVD F13, 72(R15) -+ FMOVD F14, 80(R15) -+ FMOVD F15, 88(R15) -+ -+ MOVD R2, 8(R15) // fn unsafe.Pointer -+ MOVD R3, 16(R15) // a unsafe.Pointer -+ -+ // Skip R4 = n uint32 -+ MOVD R5, 24(R15) // ctxt uintptr -+ BL runtime·cgocallback(SB) -+ -+ FMOVD 32(R15), F8 -+ FMOVD 40(R15), F9 -+ FMOVD 48(R15), F10 -+ FMOVD 56(R15), F11 -+ FMOVD 64(R15), F12 -+ FMOVD 72(R15), F13 -+ FMOVD 80(R15), F14 -+ FMOVD 88(R15), F15 -+ -+ // De-allocate stack frame. -+ MOVD $96(R15), R15 -+ -+ // Restore R6-R15. -+ LMG 48(R15), R6, R15 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/callbacks.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/callbacks.go -new file mode 100644 -index 00000000000000..b6ef14af7ef4f8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/callbacks.go -@@ -0,0 +1,95 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+import ( -+ _ "unsafe" -+) -+ -+// TODO: decide if we need _runtime_cgo_panic_internal -+ -+//go:linkname x_cgo_init_trampoline x_cgo_init_trampoline -+//go:linkname _cgo_init _cgo_init -+var x_cgo_init_trampoline byte -+var _cgo_init = &x_cgo_init_trampoline -+ -+// Creates a new system thread without updating any Go state. -+// -+// This method is invoked during shared library loading to create a new OS -+// thread to perform the runtime initialization. This method is similar to -+// _cgo_sys_thread_start except that it doesn't update any Go state. -+ -+//go:linkname x_cgo_thread_start_trampoline x_cgo_thread_start_trampoline -+//go:linkname _cgo_thread_start _cgo_thread_start -+var x_cgo_thread_start_trampoline byte -+var _cgo_thread_start = &x_cgo_thread_start_trampoline -+ -+// Notifies that the runtime has been initialized. -+// -+// We currently block at every CGO entry point (via _cgo_wait_runtime_init_done) -+// to ensure that the runtime has been initialized before the CGO call is -+// executed. This is necessary for shared libraries where we kickoff runtime -+// initialization in a separate thread and return without waiting for this -+// thread to complete the init. -+ -+//go:linkname x_cgo_notify_runtime_init_done_trampoline x_cgo_notify_runtime_init_done_trampoline -+//go:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_done -+var x_cgo_notify_runtime_init_done_trampoline byte -+var _cgo_notify_runtime_init_done = &x_cgo_notify_runtime_init_done_trampoline -+ -+// Indicates whether a dummy thread key has been created or not. -+// -+// When calling go exported function from C, we register a destructor -+// callback, for a dummy thread key, by using pthread_key_create. -+ -+//go:linkname _cgo_pthread_key_created _cgo_pthread_key_created -+var x_cgo_pthread_key_created uintptr -+var _cgo_pthread_key_created = &x_cgo_pthread_key_created -+ -+// Set the x_crosscall2_ptr C function pointer variable point to crosscall2. -+// It's for the runtime package to call at init time. -+func set_crosscall2() { -+ // nothing needs to be done here for fakecgo -+ // because it's possible to just call cgocallback directly -+} -+ -+//go:linkname _set_crosscall2 runtime.set_crosscall2 -+var _set_crosscall2 = set_crosscall2 -+ -+// Store the g into the thread-specific value. -+// So that pthread_key_destructor will dropm when the thread is exiting. -+ -+//go:linkname x_cgo_bindm_trampoline x_cgo_bindm_trampoline -+//go:linkname _cgo_bindm _cgo_bindm -+var x_cgo_bindm_trampoline byte -+var _cgo_bindm = &x_cgo_bindm_trampoline -+ -+// TODO: decide if we need x_cgo_set_context_function -+// TODO: decide if we need _cgo_yield -+ -+var ( -+ // In Go 1.20 the race detector was rewritten to pure Go -+ // on darwin. This means that when CGO_ENABLED=0 is set -+ // fakecgo is built with race detector code. This is not -+ // good since this code is pretending to be C. The go:norace -+ // pragma is not enough, since it only applies to the native -+ // ABIInternal function. The ABIO wrapper (which is necessary, -+ // since all references to text symbols from assembly will use it) -+ // does not inherit the go:norace pragma, so it will still be -+ // instrumented by the race detector. -+ // -+ // To circumvent this issue, using closure calls in the -+ // assembly, which forces the compiler to use the ABIInternal -+ // native implementation (which has go:norace) instead. -+ threadentry_call = threadentry -+ x_cgo_init_call = x_cgo_init -+ x_cgo_setenv_call = x_cgo_setenv -+ x_cgo_unsetenv_call = x_cgo_unsetenv -+ x_cgo_thread_start_call = x_cgo_thread_start -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.go -new file mode 100644 -index 00000000000000..17c6f83475ce5e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.go -@@ -0,0 +1,16 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2025 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+import _ "unsafe" -+ -+// setg_trampoline calls setg with the G provided -+func setg_trampoline(setg uintptr, G uintptr) -+ -+// call5 takes fn the C function and 5 arguments and calls the function with those arguments -+func call5(fn, a1, a2, a3, a4, a5 uintptr) uintptr -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.lock b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.lock -new file mode 100644 -index 00000000000000..3a842170f1f5e8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/fakecgo.lock -@@ -0,0 +1,3 @@ -+{ -+ "commit_hash": "1512f327e9958354283654ee4497800e33a7b838" -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/freebsd.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/freebsd.go -new file mode 100644 -index 00000000000000..fd301098885920 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/freebsd.go -@@ -0,0 +1,29 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2010 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build freebsd && !cgo -+ -+package fakecgo -+ -+import _ "unsafe" // for go:linkname -+ -+// Supply environ and __progname, because we don't -+// link against the standard FreeBSD crt0.o and the -+// libc dynamic library needs them. -+ -+// Note: when building with cross-compiling or CGO_ENABLED=0, add -+// the following argument to `go` so that these symbols are defined by -+// making fakecgo the Cgo. -+// -gcflags="github.com/ebitengine/purego/internal/fakecgo=-std" -+ -+//go:linkname _environ environ -+//go:linkname _progname __progname -+ -+//go:cgo_export_dynamic environ -+//go:cgo_export_dynamic __progname -+ -+var _environ uintptr -+var _progname uintptr -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/generate.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/generate.go -new file mode 100644 -index 00000000000000..88c4cdf9ec04cc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/generate.go -@@ -0,0 +1,6 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package fakecgo -+ -+//go:generate go run update_tool.go -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_darwin.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_darwin.go -new file mode 100644 -index 00000000000000..e49117058f381e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_darwin.go -@@ -0,0 +1,90 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:nosplit -+//go:norace -+func _cgo_sys_thread_start(ts *ThreadStart) { -+ var attr pthread_attr_t -+ var ign, oset sigset_t -+ var p pthread_t -+ var size size_t -+ var err int -+ -+ sigfillset(&ign) -+ pthread_sigmask(SIG_SETMASK, &ign, &oset) -+ -+ size = pthread_get_stacksize_np(pthread_self()) -+ pthread_attr_init(&attr) -+ pthread_attr_setstacksize(&attr, size) -+ // Leave stacklo=0 and set stackhi=size; mstart will do the rest. -+ ts.g.stackhi = uintptr(size) -+ -+ err = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts) -+ -+ pthread_sigmask(SIG_SETMASK, &oset, nil) -+ -+ if err != 0 { -+ print("fakecgo: pthread_create failed: ") -+ println(err) -+ abort() -+ } -+} -+ -+// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function -+// -+//go:linkname x_threadentry_trampoline threadentry_trampoline -+var x_threadentry_trampoline byte -+var threadentry_trampolineABI0 = &x_threadentry_trampoline -+ -+//go:nosplit -+//go:norace -+func threadentry(v unsafe.Pointer) unsafe.Pointer { -+ ts := *(*ThreadStart)(v) -+ free(v) -+ -+ // TODO: support ios -+ //#if TARGET_OS_IPHONE -+ // darwin_arm_init_thread_exception_port(); -+ //#endif -+ setg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g))) -+ -+ // faking funcs in go is a bit a... involved - but the following works :) -+ fn := uintptr(unsafe.Pointer(&ts.fn)) -+ (*(*func())(unsafe.Pointer(&fn)))() -+ -+ return nil -+} -+ -+// here we will store a pointer to the provided setg func -+var setg_func uintptr -+ -+// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c) -+// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us -+// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup -+// This function can't be go:systemstack since go is not in a state where the systemcheck would work. -+// -+//go:nosplit -+//go:norace -+func x_cgo_init(g *G, setg uintptr) { -+ var size size_t -+ -+ setg_func = setg -+ size = pthread_get_stacksize_np(pthread_self()) -+ g.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096)) -+ -+ //TODO: support ios -+ //#if TARGET_OS_IPHONE -+ // darwin_arm_init_mach_exception_handler(); -+ // darwin_arm_init_thread_exception_port(); -+ // init_working_dir(); -+ //#endif -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_freebsd.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_freebsd.go -new file mode 100644 -index 00000000000000..928c5245c84d29 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_freebsd.go -@@ -0,0 +1,81 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:nosplit -+func _cgo_sys_thread_start(ts *ThreadStart) { -+ var attr pthread_attr_t -+ var ign, oset sigset_t -+ var p pthread_t -+ var size size_t -+ var err int -+ -+ // fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug -+ sigfillset(&ign) -+ pthread_sigmask(SIG_SETMASK, &ign, &oset) -+ -+ pthread_attr_init(&attr) -+ pthread_attr_getstacksize(&attr, &size) -+ // Leave stacklo=0 and set stackhi=size; mstart will do the rest. -+ ts.g.stackhi = uintptr(size) -+ -+ err = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts) -+ -+ pthread_sigmask(SIG_SETMASK, &oset, nil) -+ -+ if err != 0 { -+ print("fakecgo: pthread_create failed: ") -+ println(err) -+ abort() -+ } -+} -+ -+// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function -+// -+//go:linkname x_threadentry_trampoline threadentry_trampoline -+var x_threadentry_trampoline byte -+var threadentry_trampolineABI0 = &x_threadentry_trampoline -+ -+//go:nosplit -+func threadentry(v unsafe.Pointer) unsafe.Pointer { -+ ts := *(*ThreadStart)(v) -+ free(v) -+ -+ setg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g))) -+ -+ // faking funcs in go is a bit a... involved - but the following works :) -+ fn := uintptr(unsafe.Pointer(&ts.fn)) -+ (*(*func())(unsafe.Pointer(&fn)))() -+ -+ return nil -+} -+ -+// here we will store a pointer to the provided setg func -+var setg_func uintptr -+ -+// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c) -+// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us -+// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup -+// This function can't be go:systemstack since go is not in a state where the systemcheck would work. -+// -+//go:nosplit -+func x_cgo_init(g *G, setg uintptr) { -+ var size size_t -+ var attr pthread_attr_t -+ -+ setg_func = setg -+ pthread_attr_init(&attr) -+ pthread_attr_getstacksize(&attr, &size) -+ // runtime/cgo uses __builtin_frame_address(0) instead of `uintptr(unsafe.Pointer(&size))` -+ // but this should be OK since we are taking the address of the first variable in this function. -+ g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 -+ pthread_attr_destroy(&attr) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_libinit.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_libinit.go -new file mode 100644 -index 00000000000000..38ba01bb4f273d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_libinit.go -@@ -0,0 +1,74 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+var ( -+ pthread_g pthread_key_t -+ -+ runtime_init_cond = PTHREAD_COND_INITIALIZER -+ runtime_init_mu = PTHREAD_MUTEX_INITIALIZER -+ runtime_init_done int -+) -+ -+//go:nosplit -+//go:norace -+func x_cgo_notify_runtime_init_done() { -+ pthread_mutex_lock(&runtime_init_mu) -+ runtime_init_done = 1 -+ pthread_cond_broadcast(&runtime_init_cond) -+ pthread_mutex_unlock(&runtime_init_mu) -+} -+ -+// Store the g into a thread-specific value associated with the pthread key pthread_g. -+// And pthread_key_destructor will dropm when the thread is exiting. -+// -+//go:norace -+func x_cgo_bindm(g unsafe.Pointer) { -+ // We assume this will always succeed, otherwise, there might be extra M leaking, -+ // when a C thread exits after a cgo call. -+ // We only invoke this function once per thread in runtime.needAndBindM, -+ // and the next calls just reuse the bound m. -+ pthread_setspecific(pthread_g, g) -+} -+ -+// _cgo_try_pthread_create retries pthread_create if it fails with -+// EAGAIN. -+// -+//go:nosplit -+//go:norace -+func _cgo_try_pthread_create(thread *pthread_t, attr *pthread_attr_t, pfn unsafe.Pointer, arg *ThreadStart) int { -+ var ts syscall.Timespec -+ // tries needs to be the same type as syscall.Timespec.Nsec -+ // but the fields are int32 on 32bit and int64 on 64bit. -+ // tries is assigned to syscall.Timespec.Nsec in order to match its type. -+ tries := ts.Nsec -+ var err int -+ -+ for tries = 0; tries < 20; tries++ { -+ // inlined this call because it ran out of stack when inlining was disabled -+ err = int(call5(pthread_createABI0, uintptr(unsafe.Pointer(thread)), uintptr(unsafe.Pointer(attr)), uintptr(pfn), uintptr(unsafe.Pointer(arg)), 0)) -+ if err == 0 { -+ // inlined this call because it ran out of stack when inlining was disabled -+ call5(pthread_detachABI0, uintptr(*thread), 0, 0, 0, 0) -+ return 0 -+ } -+ if err != int(syscall.EAGAIN) { -+ return err -+ } -+ ts.Sec = 0 -+ ts.Nsec = (tries + 1) * 1000 * 1000 // Milliseconds. -+ // inlined this call because it ran out of stack when inlining was disabled -+ call5(nanosleepABI0, uintptr(unsafe.Pointer(&ts)), 0, 0, 0, 0) -+ } -+ return int(syscall.EAGAIN) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_linux.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_linux.go -new file mode 100644 -index 00000000000000..2018c6dc2e1b85 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_linux.go -@@ -0,0 +1,81 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:nosplit -+func _cgo_sys_thread_start(ts *ThreadStart) { -+ var attr pthread_attr_t -+ var ign, oset sigset_t -+ var p pthread_t -+ var size size_t -+ var err int -+ -+ //fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug -+ sigfillset(&ign) -+ pthread_sigmask(SIG_SETMASK, &ign, &oset) -+ -+ pthread_attr_init(&attr) -+ pthread_attr_getstacksize(&attr, &size) -+ // Leave stacklo=0 and set stackhi=size; mstart will do the rest. -+ ts.g.stackhi = uintptr(size) -+ -+ err = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts) -+ -+ pthread_sigmask(SIG_SETMASK, &oset, nil) -+ -+ if err != 0 { -+ print("fakecgo: pthread_create failed: ") -+ println(err) -+ abort() -+ } -+} -+ -+// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function -+// -+//go:linkname x_threadentry_trampoline threadentry_trampoline -+var x_threadentry_trampoline byte -+var threadentry_trampolineABI0 = &x_threadentry_trampoline -+ -+//go:nosplit -+func threadentry(v unsafe.Pointer) unsafe.Pointer { -+ ts := *(*ThreadStart)(v) -+ free(v) -+ -+ setg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g))) -+ -+ // faking funcs in go is a bit a... involved - but the following works :) -+ fn := uintptr(unsafe.Pointer(&ts.fn)) -+ (*(*func())(unsafe.Pointer(&fn)))() -+ -+ return nil -+} -+ -+// here we will store a pointer to the provided setg func -+var setg_func uintptr -+ -+// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c) -+// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us -+// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup -+// This function can't be go:systemstack since go is not in a state where the systemcheck would work. -+// -+//go:nosplit -+func x_cgo_init(g *G, setg uintptr) { -+ var size size_t -+ var attr pthread_attr_t -+ -+ setg_func = setg -+ pthread_attr_init(&attr) -+ pthread_attr_getstacksize(&attr, &size) -+ // runtime/cgo uses __builtin_frame_address(0) instead of `uintptr(unsafe.Pointer(&size))` -+ // but this should be OK since we are taking the address of the first variable in this function. -+ g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 -+ pthread_attr_destroy(&attr) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_setenv.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_setenv.go -new file mode 100644 -index 00000000000000..4d24dae4e11cc4 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_setenv.go -@@ -0,0 +1,20 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+//go:nosplit -+//go:norace -+func x_cgo_setenv(arg *[2]*byte) { -+ setenv(arg[0], arg[1], 1) -+} -+ -+//go:nosplit -+//go:norace -+func x_cgo_unsetenv(arg *[1]*byte) { -+ unsetenv(arg[0]) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_util.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_util.go -new file mode 100644 -index 00000000000000..6a1731e3bee8e5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/go_util.go -@@ -0,0 +1,40 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+import "unsafe" -+ -+// _cgo_thread_start is split into three parts in cgo since only one part is system dependent (keep it here for easier handling) -+ -+// _cgo_thread_start(ThreadStart *arg) (runtime/cgo/gcc_util.c) -+// This get's called instead of the go code for creating new threads -+// -> pthread_* stuff is used, so threads are setup correctly for C -+// If this is missing, TLS is only setup correctly on thread 1! -+// This function should be go:systemstack instead of go:nosplit (but that requires runtime) -+// -+//go:nosplit -+//go:norace -+func x_cgo_thread_start(arg *ThreadStart) { -+ var ts *ThreadStart -+ // Make our own copy that can persist after we return. -+ // _cgo_tsan_acquire(); -+ ts = (*ThreadStart)(malloc(unsafe.Sizeof(*ts))) -+ // _cgo_tsan_release(); -+ if ts == nil { -+ println("fakecgo: out of memory in thread_start") -+ abort() -+ } -+ // *ts = *arg would cause a writebarrier so copy using slices -+ const ptrSize = unsafe.Sizeof(uintptr(0)) -+ s1 := unsafe.Slice((*uintptr)(unsafe.Pointer(ts)), unsafe.Sizeof(*ts)/ptrSize) -+ s2 := unsafe.Slice((*uintptr)(unsafe.Pointer(arg)), unsafe.Sizeof(*arg)/ptrSize) -+ for i := range s2 { -+ s1[i] = s2[i] -+ } -+ _cgo_sys_thread_start(ts) // OS-dependent half -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/iscgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/iscgo.go -new file mode 100644 -index 00000000000000..eb8ec0e7f94b99 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/iscgo.go -@@ -0,0 +1,21 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2010 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+// The runtime package contains an uninitialized definition -+// for runtime·iscgo. Override it to tell the runtime we're here. -+// There are various function pointers that should be set too, -+// but those depend on dynamic linker magic to get initialized -+// correctly, and sometimes they break. This variable is a -+// backup: it depends only on old C style static linking rules. -+ -+package fakecgo -+ -+import _ "unsafe" // for go:linkname -+ -+//go:linkname _iscgo runtime.iscgo -+var _iscgo bool = true -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo.go -new file mode 100644 -index 00000000000000..418a3951bfc621 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo.go -@@ -0,0 +1,41 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+type ( -+ size_t uintptr -+ // Sources: -+ // Darwin (32 bytes) - https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/_types.h#L74 -+ // FreeBSD (32 bytes) - https://github.com/DoctorWkt/xv6-freebsd/blob/d2a294c2a984baed27676068b15ed9a29b06ab6f/include/signal.h#L98C9-L98C21 -+ // Linux (128 bytes) - https://github.com/torvalds/linux/blob/ab75170520d4964f3acf8bb1f91d34cbc650688e/arch/x86/include/asm/signal.h#L25 -+ sigset_t [128]byte -+ pthread_attr_t [64]byte -+ pthread_t int -+ pthread_key_t uint64 -+) -+ -+// for pthread_sigmask: -+ -+type sighow int32 -+ -+const ( -+ SIG_BLOCK sighow = 0 -+ SIG_UNBLOCK sighow = 1 -+ SIG_SETMASK sighow = 2 -+) -+ -+type G struct { -+ stacklo uintptr -+ stackhi uintptr -+} -+ -+type ThreadStart struct { -+ g *G -+ tls *uintptr -+ fn uintptr -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_darwin.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_darwin.go -new file mode 100644 -index 00000000000000..2f7a973b34a3a3 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_darwin.go -@@ -0,0 +1,28 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+type ( -+ pthread_mutex_t struct { -+ sig int64 -+ opaque [56]byte -+ } -+ pthread_cond_t struct { -+ sig int64 -+ opaque [40]byte -+ } -+) -+ -+var ( -+ PTHREAD_COND_INITIALIZER = pthread_cond_t{sig: 0x3CB0B1BB} -+ PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t{sig: 0x32AAABA7} -+) -+ -+type stack_t struct { -+ /* not implemented */ -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_freebsd.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_freebsd.go -new file mode 100644 -index 00000000000000..d7cc9f31a98255 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_freebsd.go -@@ -0,0 +1,22 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+type ( -+ pthread_cond_t uintptr -+ pthread_mutex_t uintptr -+) -+ -+var ( -+ PTHREAD_COND_INITIALIZER = pthread_cond_t(0) -+ PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t(0) -+) -+ -+type stack_t struct { -+ /* not implemented */ -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_linux.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_linux.go -new file mode 100644 -index 00000000000000..ace87e2201bfba ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/libcgo_linux.go -@@ -0,0 +1,22 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+type ( -+ pthread_cond_t [48]byte -+ pthread_mutex_t [48]byte -+) -+ -+var ( -+ PTHREAD_COND_INITIALIZER = pthread_cond_t{} -+ PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t{} -+) -+ -+type stack_t struct { -+ /* not implemented */ -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/linux.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/linux.go -new file mode 100644 -index 00000000000000..0fbf6bcac87f2b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/linux.go -@@ -0,0 +1,186 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2016 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && linux -+ -+package fakecgo -+ -+import "unsafe" -+ -+// argset matches runtime/cgocall.go:argset. -+type argset struct { -+ args *uintptr -+ retval uintptr -+} -+ -+//go:nosplit -+//go:norace -+func (a *argset) arg(i int) unsafe.Pointer { -+ return *(*unsafe.Pointer)(unsafe.Add(unsafe.Pointer(a.args), uintptr(i)*unsafe.Sizeof(uintptr(0)))) -+} -+ -+//go:linkname _cgo_libc_setegid syscall.cgo_libc_setegid -+//go:linkname _cgo_libc_seteuid syscall.cgo_libc_seteuid -+//go:linkname _cgo_libc_setgid syscall.cgo_libc_setgid -+//go:linkname _cgo_libc_setregid syscall.cgo_libc_setregid -+//go:linkname _cgo_libc_setresgid syscall.cgo_libc_setresgid -+//go:linkname _cgo_libc_setresuid syscall.cgo_libc_setresuid -+//go:linkname _cgo_libc_setreuid syscall.cgo_libc_setreuid -+//go:linkname _cgo_libc_setuid syscall.cgo_libc_setuid -+//go:linkname _cgo_libc_setgroups syscall.cgo_libc_setgroups -+ -+var _cgo_libc_setegid = &_cgo_purego_setegid_trampoline -+var _cgo_libc_seteuid = &_cgo_purego_seteuid_trampoline -+var _cgo_libc_setgid = &_cgo_purego_setgid_trampoline -+var _cgo_libc_setregid = &_cgo_purego_setregid_trampoline -+var _cgo_libc_setresgid = &_cgo_purego_setresgid_trampoline -+var _cgo_libc_setresuid = &_cgo_purego_setresuid_trampoline -+var _cgo_libc_setreuid = &_cgo_purego_setreuid_trampoline -+var _cgo_libc_setuid = &_cgo_purego_setuid_trampoline -+var _cgo_libc_setgroups = &_cgo_purego_setgroups_trampoline -+ -+//go:nosplit -+//go:norace -+func errno() int32 { -+ // this indirection is to avoid go vet complaining about possible misuse of unsafe.Pointer -+ loc := __errno_location() -+ return **(**int32)(unsafe.Pointer(&loc)) -+} -+ -+//go:linkname _cgo_purego_setegid_trampoline _cgo_purego_setegid_trampoline -+var _cgo_purego_setegid_trampoline byte -+var x_cgo_purego_setegid_call = x_cgo_purego_setegid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setegid(c *argset) { -+ ret := setegid(uint32(uintptr(c.arg(0)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_seteuid_trampoline _cgo_purego_seteuid_trampoline -+var _cgo_purego_seteuid_trampoline byte -+var x_cgo_purego_seteuid_call = x_cgo_purego_seteuid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_seteuid(c *argset) { -+ ret := seteuid(uint32(uintptr(c.arg(0)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setgid_trampoline _cgo_purego_setgid_trampoline -+var _cgo_purego_setgid_trampoline byte -+var x_cgo_purego_setgid_call = x_cgo_purego_setgid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setgid(c *argset) { -+ ret := setgid(uint32(uintptr(c.arg(0)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setregid_trampoline _cgo_purego_setregid_trampoline -+var _cgo_purego_setregid_trampoline byte -+var x_cgo_purego_setregid_call = x_cgo_purego_setregid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setregid(c *argset) { -+ ret := setregid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setresgid_trampoline _cgo_purego_setresgid_trampoline -+var _cgo_purego_setresgid_trampoline byte -+var x_cgo_purego_setresgid_call = x_cgo_purego_setresgid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setresgid(c *argset) { -+ ret := setresgid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1))), uint32(uintptr(c.arg(2)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setresuid_trampoline _cgo_purego_setresuid_trampoline -+var _cgo_purego_setresuid_trampoline byte -+var x_cgo_purego_setresuid_call = x_cgo_purego_setresuid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setresuid(c *argset) { -+ ret := setresuid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1))), uint32(uintptr(c.arg(2)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setreuid_trampoline _cgo_purego_setreuid_trampoline -+var _cgo_purego_setreuid_trampoline byte -+var x_cgo_purego_setreuid_call = x_cgo_purego_setreuid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setreuid(c *argset) { -+ ret := setreuid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setuid_trampoline _cgo_purego_setuid_trampoline -+var _cgo_purego_setuid_trampoline byte -+var x_cgo_purego_setuid_call = x_cgo_purego_setuid -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setuid(c *argset) { -+ ret := setuid(uint32(uintptr(c.arg(0)))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -+ -+//go:linkname _cgo_purego_setgroups_trampoline _cgo_purego_setgroups_trampoline -+var _cgo_purego_setgroups_trampoline byte -+var x_cgo_purego_setgroups_call = x_cgo_purego_setgroups -+ -+//go:nosplit -+//go:norace -+func x_cgo_purego_setgroups(c *argset) { -+ ret := setgroups(uint32(uintptr(c.arg(0))), (*uint32)(c.arg(1))) -+ if ret == -1 { -+ c.retval = uintptr(errno()) -+ } else { -+ c.retval = uintptr(ret) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/setenv.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/setenv.go -new file mode 100644 -index 00000000000000..30b9e8eb88c83d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/setenv.go -@@ -0,0 +1,21 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Copyright 2011 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+import _ "unsafe" // for go:linkname -+ -+//go:linkname x_cgo_setenv_trampoline x_cgo_setenv_trampoline -+//go:linkname _cgo_setenv runtime._cgo_setenv -+var x_cgo_setenv_trampoline byte -+var _cgo_setenv = &x_cgo_setenv_trampoline -+ -+//go:linkname x_cgo_unsetenv_trampoline x_cgo_unsetenv_trampoline -+//go:linkname _cgo_unsetenv runtime._cgo_unsetenv -+var x_cgo_unsetenv_trampoline byte -+var _cgo_unsetenv = &x_cgo_unsetenv_trampoline -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_386.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_386.s -new file mode 100644 -index 00000000000000..5067c5533d14ae ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_386.s -@@ -0,0 +1,123 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+#include "go_asm.h" -+ -+// These trampolines map the gcc ABI to Go ABI0 and then call into the Go equivalent functions. -+// On i386, both GCC and Go use stack-based calling conventions. -+// -+// When C calls a function, the stack looks like: -+// 0(SP) = return address -+// 4(SP) = arg1 -+// 8(SP) = arg2 -+// ... -+// -+// When we declare a Go function with frame size $N-0, Go's prologue -+// effectively does SUB $N, SP, so the C arguments shift up by N bytes: -+// N+0(SP) = return address -+// N+4(SP) = arg1 -+// N+8(SP) = arg2 -+// -+// Go ABI0 on 386 expects arguments starting at 0(FP) which equals N+4(SP) -+// after the prologue (where N is the local frame size). -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $8-0 -+ // C args at 12(SP) and 16(SP) after frame setup (8 bytes local + 4 bytes ret addr) -+ // Go function expects args at 0(SP) and 4(SP) in local frame -+ MOVL 12(SP), AX // first C arg -+ MOVL 16(SP), BX // second C arg -+ MOVL AX, 0(SP) // Go arg 1 -+ MOVL BX, 4(SP) // Go arg 2 -+ MOVL ·x_cgo_init_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $4-0 -+ // C args at 8(SP) after frame setup (4 bytes local + 4 bytes ret addr) -+ MOVL 8(SP), AX // first C arg -+ MOVL AX, 0(SP) // Go arg 1 -+ MOVL ·x_cgo_thread_start_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX // first C arg -+ MOVL AX, 0(SP) // Go arg 1 -+ MOVL ·x_cgo_setenv_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX // first C arg -+ MOVL AX, 0(SP) // Go arg 1 -+ MOVL ·x_cgo_unsetenv_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+// This is called from Go, so args are at normal FP positions -+TEXT ·setg_trampoline(SB), NOSPLIT, $4-8 -+ MOVL g+4(FP), AX -+ MOVL setg+0(FP), BX -+ -+ // setg expects g in 0(SP) -+ MOVL AX, 0(SP) -+ CALL BX -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $24-4 -+ // Save callee-saved registers -+ MOVL BP, 20(SP) -+ MOVL BX, 16(SP) -+ MOVL SI, 12(SP) -+ MOVL DI, 8(SP) -+ -+ // Move C argument (arg) to stack for Go function -+ MOVL arg+0(FP), AX -+ MOVL AX, 0(SP) -+ -+ MOVL ·threadentry_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ -+ // Restore callee-saved registers -+ MOVL 8(SP), DI -+ MOVL 12(SP), SI -+ MOVL 16(SP), BX -+ MOVL 20(SP), BP -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $24-28 -+ MOVL fn+0(FP), AX -+ MOVL a1+4(FP), BX -+ MOVL a2+8(FP), CX -+ MOVL a3+12(FP), DX -+ MOVL a4+16(FP), SI -+ MOVL a5+20(FP), DI -+ -+ // Place arguments on local stack frame for C calling convention -+ MOVL BX, 0(SP) // a1 -+ MOVL CX, 4(SP) // a2 -+ MOVL DX, 8(SP) // a3 -+ MOVL SI, 12(SP) // a4 -+ MOVL DI, 16(SP) // a5 -+ CALL AX -+ MOVL AX, r1+24(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_amd64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_amd64.s -new file mode 100644 -index 00000000000000..049e2bbb1e7f44 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_amd64.s -@@ -0,0 +1,109 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+/* -+trampoline for emulating required C functions for cgo in go (see cgo.go) -+(we convert cdecl calling convention to go and vice-versa) -+ -+C Calling convention cdecl used here (we only need integer args): -+1. arg: DI -+2. arg: SI -+3. arg: DX -+4. arg: CX -+5. arg: R8 -+6. arg: R9 -+We don't need floats with these functions -> AX=0 -+return value will be in AX -+temporary register is R11 -+*/ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_amd64.h" -+ -+// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16 -+ MOVQ DI, AX -+ MOVQ SI, BX -+ MOVQ ·x_cgo_init_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_thread_start_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_setenv_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_unsetenv_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 -+ JMP ·x_cgo_notify_runtime_init_done(SB) -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ JMP ·x_cgo_bindm(SB) -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 -+ MOVQ G+8(FP), DI -+ MOVQ setg+0(FP), R11 -+ XORL AX, AX -+ CALL R11 -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $0 -+ // See crosscall2. -+ PUSH_REGS_HOST_TO_ABI0() -+ -+ // X15 is designated by Go as a fixed zero register. -+ // Calling directly into ABIInternal, ensure it is zero. -+ PXOR X15, X15 -+ -+ MOVQ DI, AX -+ MOVQ ·threadentry_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ -+ POP_REGS_HOST_TO_ABI0() -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $0-56 -+ MOVQ fn+0(FP), R11 -+ MOVQ a1+8(FP), DI -+ MOVQ a2+16(FP), SI -+ MOVQ a3+24(FP), DX -+ MOVQ a4+32(FP), CX -+ MOVQ a5+40(FP), R8 -+ -+ XORL AX, AX // no floats -+ -+ PUSHQ BP // save BP -+ MOVQ SP, BP // save SP inside BP bc BP is callee-saved -+ SUBQ $16, SP // allocate space for alignment -+ ANDQ $-16, SP // align on 16 bytes for SSE -+ -+ CALL R11 -+ -+ MOVQ BP, SP // get SP back -+ POPQ BP // restore BP -+ -+ MOVQ AX, ret+48(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm.s -new file mode 100644 -index 00000000000000..3c0e1d00bd90f6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm.s -@@ -0,0 +1,124 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+#include "go_asm.h" -+ -+// These trampolines map the gcc ABI to Go ABI0 and then call into the Go equivalent functions. -+// On ARM32, Go ABI0 uses stack-based calling convention. -+// Arguments are placed on the stack starting at 4(SP) after the prologue. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW R1, 8(R13) -+ MOVW ·x_cgo_init_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_thread_start_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_setenv_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_unsetenv_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0-8 -+ MOVW G+4(FP), R0 -+ MOVW setg+0(FP), R12 -+ BL (R12) -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $104-0 -+ // Save C callee-saved registers at C-to-Go boundary. -+ // See crosscall2 in asm_arm.s. -+ // ARM AAPCS callee-saved: R4-R11 (includes g=R10), D8-D15. -+ // LR is saved/restored by the Go-managed frame prologue/epilogue. -+ MOVW R0, 4(R13) // arg for threadentry_call -+ -+ MOVW R4, 8(R13) -+ MOVW R5, 12(R13) -+ MOVW R6, 16(R13) -+ MOVW R7, 20(R13) -+ MOVW R8, 24(R13) -+ MOVW R9, 28(R13) -+ MOVW g, 32(R13) // R10 -+ MOVW R11, 36(R13) -+ -+ MOVD F8, 40(R13) -+ MOVD F9, 48(R13) -+ MOVD F10, 56(R13) -+ MOVD F11, 64(R13) -+ MOVD F12, 72(R13) -+ MOVD F13, 80(R13) -+ MOVD F14, 88(R13) -+ MOVD F15, 96(R13) -+ -+ MOVW ·threadentry_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ -+ MOVD 40(R13), F8 -+ MOVD 48(R13), F9 -+ MOVD 56(R13), F10 -+ MOVD 64(R13), F11 -+ MOVD 72(R13), F12 -+ MOVD 80(R13), F13 -+ MOVD 88(R13), F14 -+ MOVD 96(R13), F15 -+ -+ MOVW 8(R13), R4 -+ MOVW 12(R13), R5 -+ MOVW 16(R13), R6 -+ MOVW 20(R13), R7 -+ MOVW 24(R13), R8 -+ MOVW 28(R13), R9 -+ MOVW 32(R13), g -+ MOVW 36(R13), R11 -+ -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $8-28 -+ MOVW fn+0(FP), R12 -+ MOVW a1+4(FP), R0 -+ MOVW a2+8(FP), R1 -+ MOVW a3+12(FP), R2 -+ MOVW a4+16(FP), R3 -+ MOVW a5+20(FP), R4 -+ -+ // Store 5th arg below SP (in local frame area) -+ MOVW R4, arg5-8(SP) -+ -+ // Align SP to 8 bytes for call (required by ARM AAPCS) -+ SUB $8, R13 -+ CALL (R12) -+ ADD $8, R13 -+ MOVW R0, r1+24(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm64.s -new file mode 100644 -index 00000000000000..1a072538b12e3e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_arm64.s -@@ -0,0 +1,83 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_arm64.h" -+ -+// These trampolines map the gcc ABI to Go ABIInternal and then calls into the Go equivalent functions. -+// Note that C arguments are passed in R0-R7, which matches Go ABIInternal for the first eight arguments. -+// R9 is used as a temporary register. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_init_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_thread_start_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_setenv_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_unsetenv_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 -+ MOVD G+8(FP), R0 -+ MOVD setg+0(FP), R9 -+ CALL R9 -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $0-0 -+ // See crosscall2. -+ SUB $(8*24), RSP -+ STP (R0, R1), (8*1)(RSP) -+ MOVD R3, (8*3)(RSP) -+ -+ SAVE_R19_TO_R28(8*4) -+ SAVE_F8_TO_F15(8*14) -+ -+ MOVD ·threadentry_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ MOVD $0, R0 // TODO: get the return value from threadentry -+ -+ RESTORE_R19_TO_R28(8*4) -+ RESTORE_F8_TO_F15(8*14) -+ ADD $(8*24), RSP -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $0-0 -+ MOVD fn+0(FP), R9 -+ MOVD a1+8(FP), R0 -+ MOVD a2+16(FP), R1 -+ MOVD a3+24(FP), R2 -+ MOVD a4+32(FP), R3 -+ MOVD a5+40(FP), R4 -+ CALL R9 -+ MOVD R0, ret+48(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_386.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_386.s -new file mode 100644 -index 00000000000000..a917675cc5862a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_386.s -@@ -0,0 +1,80 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setegid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_seteuid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setgid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setregid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setresgid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setresuid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setreuid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setuid_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $4-0 -+ MOVL 8(SP), AX -+ MOVL AX, 0(SP) -+ MOVL ·x_cgo_purego_setgroups_call(SB), CX -+ MOVL (CX), CX -+ CALL CX -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_amd64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_amd64.s -new file mode 100644 -index 00000000000000..fc2e4476c4813c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_amd64.s -@@ -0,0 +1,71 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setegid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_seteuid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setgid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setregid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setresgid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setresuid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setreuid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setuid_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $8 -+ MOVQ DI, AX -+ MOVQ ·x_cgo_purego_setgroups_call(SB), R11 -+ MOVQ (R11), R11 -+ CALL R11 -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm.s -new file mode 100644 -index 00000000000000..4b84a54da30cc7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm.s -@@ -0,0 +1,71 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setegid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_seteuid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setgid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setregid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setresgid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setresuid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setreuid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setuid_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $8-0 -+ MOVW R0, 4(R13) -+ MOVW ·x_cgo_purego_setgroups_call(SB), R12 -+ MOVW (R12), R12 -+ CALL (R12) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm64.s -new file mode 100644 -index 00000000000000..1d895b9dea7a87 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_arm64.s -@@ -0,0 +1,62 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setegid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_seteuid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setgid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setregid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setresgid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setresuid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setreuid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setuid_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_purego_setgroups_call(SB), R9 -+ MOVD (R9), R9 -+ CALL R9 -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_loong64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_loong64.s -new file mode 100644 -index 00000000000000..d390a5f1da0af5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_loong64.s -@@ -0,0 +1,62 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setegid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_seteuid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setgid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setregid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setresgid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setresuid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setreuid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setuid_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_purego_setgroups_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_ppc64le.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_ppc64le.s -new file mode 100644 -index 00000000000000..1abccdc7a0ebdd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_ppc64le.s -@@ -0,0 +1,71 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setegid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_seteuid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setgid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setregid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setresgid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setresuid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setreuid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setuid_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $8-0 -+ MOVD ·x_cgo_purego_setgroups_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_riscv64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_riscv64.s -new file mode 100644 -index 00000000000000..c78f98e8c89c09 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_riscv64.s -@@ -0,0 +1,62 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && linux -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setegid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_seteuid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setgid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setregid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setresgid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setresuid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setreuid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setuid_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_purego_setgroups_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_s390x.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_s390x.s -new file mode 100644 -index 00000000000000..ce4247c989f4c1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_linux_s390x.s -@@ -0,0 +1,53 @@ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build go1.27 && !cgo -+ -+#include "textflag.h" -+ -+TEXT _cgo_purego_setegid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setegid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_seteuid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_seteuid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setgid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setgid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setregid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setregid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setresgid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setresgid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setresuid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setresuid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setreuid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setreuid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setuid_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setuid_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -+ -+TEXT _cgo_purego_setgroups_trampoline(SB), NOSPLIT|NOFRAME, $0 -+ MOVD ·x_cgo_purego_setgroups_call(SB), R1 -+ MOVD (R1), R1 -+ BR R1 -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_loong64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_loong64.s -new file mode 100644 -index 00000000000000..512a8dddf0be56 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_loong64.s -@@ -0,0 +1,80 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2025 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_loong64.h" -+ -+// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions. -+// R23 is used as temporary register. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16 -+ MOVV ·x_cgo_init_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_thread_start_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_setenv_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8 -+ MOVV ·x_cgo_unsetenv_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0 -+ MOVV G+8(FP), R4 -+ MOVV setg+0(FP), R23 -+ CALL (R23) -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $176 -+ // See crosscall2. -+ MOVV R4, (1*8)(R3) // fn unsafe.Pointer -+ MOVV R5, (2*8)(R3) // a unsafe.Pointer -+ MOVV R7, (3*8)(R3) // ctxt uintptr -+ -+ SAVE_R22_TO_R31((4*8)) -+ SAVE_F24_TO_F31((14*8)) -+ -+ MOVV ·threadentry_call(SB), R23 -+ MOVV (R23), R23 -+ CALL (R23) -+ -+ RESTORE_R22_TO_R31((4*8)) -+ RESTORE_F24_TO_F31((14*8)) -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $0-0 -+ MOVV fn+0(FP), R23 -+ MOVV a1+8(FP), R4 -+ MOVV a2+16(FP), R5 -+ MOVV a3+24(FP), R6 -+ MOVV a4+32(FP), R7 -+ MOVV a5+40(FP), R8 -+ CALL (R23) -+ MOVV R4, ret+48(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_ppc64le.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_ppc64le.s -new file mode 100644 -index 00000000000000..55f88c03cd4795 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_ppc64le.s -@@ -0,0 +1,134 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_ppc64x.h" -+ -+// These trampolines map the C ABI to Go ABI and call into the Go equivalent functions. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_init_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_thread_start_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_setenv_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $0-0 -+ MOVD ·x_cgo_unsetenv_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0-0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $16-16 -+ MOVD R31, 8(R1) // save R31 -+ -+ MOVD setg+0(FP), R12 -+ MOVD newg+8(FP), R3 -+ -+ MOVD R3, 16(R1) // save newg before call -+ -+ MOVD R12, CTR -+ CALL CTR -+ -+ // Assign g directly instead of calling runtime·load_g -+ // setg_gcc has already stored newg into TLS; put it in the g register too. -+ MOVD 16(R1), g -+ -+ MOVD 8(R1), R31 -+ XOR R0, R0, R0 -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ // Called from C (pthread_create). Must save all C callee-saved registers. -+ // Uses NOFRAME for proper ELFv2 backchain via MOVDU. -+ MOVD LR, R0 -+ MOVD R0, 16(R1) -+ MOVW CR, R0 -+ MOVD R0, 8(R1) -+ -+ MOVDU R1, -320(R1) -+ -+ SAVE_GPR(32) -+ SAVE_FPR(32+SAVE_GPR_SIZE) -+ -+ MOVD $0, R0 -+ -+ MOVD ·threadentry_call(SB), R12 -+ MOVD (R12), R12 -+ MOVD R12, CTR -+ CALL CTR -+ -+ RESTORE_FPR(32+SAVE_GPR_SIZE) -+ RESTORE_GPR(32) -+ -+ ADD $320, R1 -+ -+ MOVD 16(R1), R0 -+ MOVD R0, LR -+ MOVD 8(R1), R0 -+ MOVW R0, CR -+ RET -+ -+TEXT ·call5(SB), NOSPLIT|NOFRAME, $0-56 -+ MOVD LR, R20 -+ MOVW CR, R21 -+ -+ // Load arguments from Go stack into C argument registers -+ // Go placed args at 32(R1), 40(R1), etc. -+ MOVD 32(R1), R12 // fn -+ MOVD 40(R1), R3 // a1 → first C arg -+ MOVD 48(R1), R4 // a2 → second C arg -+ MOVD 56(R1), R5 // a3 → third C arg -+ MOVD 64(R1), R6 // a4 → fourth C arg -+ MOVD 72(R1), R7 // a5 → fifth C arg -+ -+ MOVDU R1, -32(R1) -+ -+ MOVD R12, CTR -+ CALL CTR -+ -+ // Store return value -+ // After MOVDU -32, original 80(R1) is now at 80+32=112(R1) -+ MOVD R3, (80+32)(R1) -+ -+ // Deallocate frame -+ ADD $32, R1 -+ -+ // Clear R0 before returning to Go code. -+ // Go uses R0 as a constant 0 register for things like "std r0,X(r1)" -+ // to zero stack locations. C functions may leave garbage in R0. -+ XOR R0, R0, R0 -+ -+ // Restore LR/CR from non-volatile registers -+ MOVD R20, LR -+ MOVW R21, CR -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_riscv64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_riscv64.s -new file mode 100644 -index 00000000000000..2e4f60db002a44 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_riscv64.s -@@ -0,0 +1,78 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+#include "go_asm.h" -+#include "abi_riscv64.h" -+ -+// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions. -+// X5 is used as temporary register. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16 -+ MOV ·x_cgo_init_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_thread_start_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_setenv_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8 -+ MOV ·x_cgo_unsetenv_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ RET -+ -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_notify_runtime_init_done(SB) -+ RET -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 -+ CALL ·x_cgo_bindm(SB) -+ RET -+ -+// func setg_trampoline(setg uintptr, g uintptr) -+TEXT ·setg_trampoline(SB), NOSPLIT, $0 -+ MOV gp+8(FP), X10 -+ MOV setg+0(FP), X5 -+ CALL X5 -+ RET -+ -+TEXT threadentry_trampoline(SB), NOSPLIT, $200 -+ MOV X10, 8(SP) -+ -+ SAVE_GPR(8*2) -+ SAVE_FPR(8*14) -+ -+ MOV ·threadentry_call(SB), X5 -+ MOV (X5), X5 -+ CALL X5 -+ -+ RESTORE_GPR(8*2) -+ RESTORE_FPR(8*14) -+ -+ RET -+ -+TEXT ·call5(SB), NOSPLIT, $0-48 -+ MOV fn+0(FP), X5 -+ MOV a1+8(FP), X10 -+ MOV a2+16(FP), X11 -+ MOV a3+24(FP), X12 -+ MOV a4+32(FP), X13 -+ MOV a5+40(FP), X14 -+ CALL X5 -+ MOV X10, ret+48(FP) -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_s390x.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_s390x.s -new file mode 100644 -index 00000000000000..258c4a33c368e4 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/trampolines_s390x.s -@@ -0,0 +1,158 @@ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors -+ -+//go:build go1.27 && !cgo && linux -+ -+#include "textflag.h" -+#include "go_asm.h" -+ -+// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions. -+// Note that C arguments are passed in R2-R6, which matches Go ABIInternal for the first five arguments. -+// R1 is used as a temporary register. -+ -+TEXT x_cgo_init_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ MOVD R15, R1 -+ SUB $192, R15 -+ MOVD R1, 0(R15) // backchain -+ MOVD R14, 160(R15) // save R14 -+ MOVD R9, 168(R15) // save R9 (Go runtime needs this preserved) -+ -+ MOVD ·x_cgo_init_call(SB), R1 -+ MOVD (R1), R1 -+ BL R1 -+ -+ MOVD 168(R15), R9 -+ MOVD 160(R15), R14 -+ ADD $192, R15 -+ BR R14 -+ -+TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ MOVD R15, R1 -+ SUB $176, R15 -+ MOVD R1, 0(R15) // backchain -+ MOVD R14, 152(R15) // save R14 -+ -+ MOVD ·x_cgo_thread_start_call(SB), R1 -+ MOVD (R1), R1 -+ BL R1 -+ -+ MOVD 152(R15), R14 -+ ADD $176, R15 -+ BR R14 -+ -+TEXT x_cgo_setenv_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ MOVD R15, R1 -+ SUB $176, R15 -+ MOVD R1, 0(R15) // backchain -+ MOVD R14, 152(R15) // save R14 -+ -+ MOVD ·x_cgo_setenv_call(SB), R1 -+ MOVD (R1), R1 -+ BL R1 -+ -+ MOVD 152(R15), R14 -+ ADD $176, R15 -+ BR R14 -+ -+TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ MOVD R15, R1 -+ SUB $176, R15 -+ MOVD R1, 0(R15) // backchain -+ MOVD R14, 152(R15) // save R14 -+ -+ MOVD ·x_cgo_unsetenv_call(SB), R1 -+ MOVD (R1), R1 -+ BL R1 -+ -+ MOVD 152(R15), R14 -+ ADD $176, R15 -+ BR R14 -+ -+// These just tail-call into Go functions -+TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ BR ·x_cgo_notify_runtime_init_done(SB) -+ -+TEXT x_cgo_bindm_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ BR ·x_cgo_bindm(SB) -+ -+// setg_trampoline(setg uintptr, g uintptr) - called from Go -+TEXT ·setg_trampoline(SB), NOSPLIT|NOFRAME, $0-16 -+ MOVD 8(R15), R1 // setg function pointer -+ MOVD 16(R15), R2 // g pointer -> C arg -+ -+ MOVD R14, R0 -+ MOVD R15, R3 -+ SUB $160, R15 -+ MOVD R3, 0(R15) -+ MOVD R0, 112(R15) -+ MOVD R2, 120(R15) // save newg before call -+ -+ BL R1 // call setg_gcc -+ -+ // Assign g directly instead of calling runtime·load_g -+ // setg_gcc has already stored newg into TLS; put it in the g register too. -+ MOVD 120(R15), g -+ -+ MOVD 112(R15), R14 -+ ADD $160, R15 -+ BR R14 -+ -+TEXT threadentry_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ STMG R6, R15, 48(R15) // C save area -+ MOVD R15, R1 -+ SUB $176, R15 -+ MOVD R1, 0(R15) // backchain -+ -+ MOVD ·threadentry_call(SB), R1 -+ MOVD (R1), R1 -+ BL R1 -+ -+ ADD $176, R15 -+ LMG 48(R15), R6, R15 -+ RET -+ -+TEXT ·call5(SB), NOSPLIT|NOFRAME, $0-56 -+ // Load Go args before modifying R15 -+ MOVD 8(R15), R1 // fn -+ MOVD 16(R15), R7 // a1 -+ MOVD 24(R15), R8 // a2 -+ MOVD 32(R15), R9 // a3 -+ MOVD 40(R15), R10 // a4 -+ MOVD 48(R15), R11 // a5 -+ -+ // Save state -+ MOVD R15, R0 // original R15 -+ MOVD R12, R6 // Go's R12 -+ ADD $-128, R15 -+ -+ // Set up C frame with backchain -+ MOVD R0, 0(R15) // backchain -> original R15 -+ MOVD R0, R3 // R3 = original R15 (can't use R0 as base!) -+ MOVD 0(R3), R7 // save 0(original R15) -+ MOVD $0, 0(R3) // terminate backchain -+ -+ // Save context -+ MOVD R14, 8(R15) -+ MOVD R6, 16(R15) // R12 -+ MOVD R0, 24(R15) // original R15 -+ MOVD R7, 32(R15) // saved backchain -+ -+ // Set up C args (reload a1 since R7 was clobbered) -+ MOVD 16(R3), R2 // a1 (use R3 as base, not R0!) -+ MOVD R8, R3 // a2 -+ MOVD R9, R4 // a3 -+ MOVD R10, R5 // a4 -+ MOVD R11, R6 // a5 -+ -+ BL R1 -+ -+ // Store result and restore -+ MOVD 24(R15), R3 // original R15 -+ MOVD R2, 56(R3) // return value -+ MOVD 32(R15), R7 -+ MOVD R7, 0(R3) // restore backchain -+ -+ MOVD 8(R15), R14 -+ MOVD 16(R15), R12 -+ MOVD 24(R15), R15 -+ BR R14 -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols.go -new file mode 100644 -index 00000000000000..eb26fa04fee744 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols.go -@@ -0,0 +1,167 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+package fakecgo -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+//go:nosplit -+//go:norace -+func malloc(size uintptr) unsafe.Pointer { -+ ret := call5(mallocABI0, uintptr(size), 0, 0, 0, 0) -+ // this indirection is to avoid go vet complaining about possible misuse of unsafe.Pointer -+ return *(*unsafe.Pointer)(unsafe.Pointer(&ret)) -+} -+ -+//go:nosplit -+//go:norace -+func free(ptr unsafe.Pointer) { -+ call5(freeABI0, uintptr(ptr), 0, 0, 0, 0) -+} -+ -+//go:nosplit -+//go:norace -+func setenv(name *byte, value *byte, overwrite int32) int32 { -+ return int32(call5(setenvABI0, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), uintptr(overwrite), 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func unsetenv(name *byte) int32 { -+ return int32(call5(unsetenvABI0, uintptr(unsafe.Pointer(name)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func sigfillset(set *sigset_t) int32 { -+ return int32(call5(sigfillsetABI0, uintptr(unsafe.Pointer(set)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func nanosleep(ts *syscall.Timespec, rem *syscall.Timespec) int32 { -+ return int32(call5(nanosleepABI0, uintptr(unsafe.Pointer(ts)), uintptr(unsafe.Pointer(rem)), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func abort() { -+ call5(abortABI0, 0, 0, 0, 0, 0) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_init(attr *pthread_attr_t) int32 { -+ return int32(call5(pthread_attr_initABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_create(thread *pthread_t, attr *pthread_attr_t, start unsafe.Pointer, arg unsafe.Pointer) int32 { -+ return int32(call5(pthread_createABI0, uintptr(unsafe.Pointer(thread)), uintptr(unsafe.Pointer(attr)), uintptr(start), uintptr(arg), 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_detach(thread pthread_t) int32 { -+ return int32(call5(pthread_detachABI0, uintptr(thread), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_sigmask(how sighow, ign *sigset_t, oset *sigset_t) int32 { -+ return int32(call5(pthread_sigmaskABI0, uintptr(how), uintptr(unsafe.Pointer(ign)), uintptr(unsafe.Pointer(oset)), 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_mutex_lock(mutex *pthread_mutex_t) int32 { -+ return int32(call5(pthread_mutex_lockABI0, uintptr(unsafe.Pointer(mutex)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_mutex_unlock(mutex *pthread_mutex_t) int32 { -+ return int32(call5(pthread_mutex_unlockABI0, uintptr(unsafe.Pointer(mutex)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_cond_broadcast(cond *pthread_cond_t) int32 { -+ return int32(call5(pthread_cond_broadcastABI0, uintptr(unsafe.Pointer(cond)), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_setspecific(key pthread_key_t, value unsafe.Pointer) int32 { -+ return int32(call5(pthread_setspecificABI0, uintptr(key), uintptr(value), 0, 0, 0)) -+} -+ -+//go:linkname _malloc _malloc -+var _malloc uint8 -+var mallocABI0 = uintptr(unsafe.Pointer(&_malloc)) -+ -+//go:linkname _free _free -+var _free uint8 -+var freeABI0 = uintptr(unsafe.Pointer(&_free)) -+ -+//go:linkname _setenv _setenv -+var _setenv uint8 -+var setenvABI0 = uintptr(unsafe.Pointer(&_setenv)) -+ -+//go:linkname _unsetenv _unsetenv -+var _unsetenv uint8 -+var unsetenvABI0 = uintptr(unsafe.Pointer(&_unsetenv)) -+ -+//go:linkname _sigfillset _sigfillset -+var _sigfillset uint8 -+var sigfillsetABI0 = uintptr(unsafe.Pointer(&_sigfillset)) -+ -+//go:linkname _nanosleep _nanosleep -+var _nanosleep uint8 -+var nanosleepABI0 = uintptr(unsafe.Pointer(&_nanosleep)) -+ -+//go:linkname _abort _abort -+var _abort uint8 -+var abortABI0 = uintptr(unsafe.Pointer(&_abort)) -+ -+//go:linkname _pthread_attr_init _pthread_attr_init -+var _pthread_attr_init uint8 -+var pthread_attr_initABI0 = uintptr(unsafe.Pointer(&_pthread_attr_init)) -+ -+//go:linkname _pthread_create _pthread_create -+var _pthread_create uint8 -+var pthread_createABI0 = uintptr(unsafe.Pointer(&_pthread_create)) -+ -+//go:linkname _pthread_detach _pthread_detach -+var _pthread_detach uint8 -+var pthread_detachABI0 = uintptr(unsafe.Pointer(&_pthread_detach)) -+ -+//go:linkname _pthread_sigmask _pthread_sigmask -+var _pthread_sigmask uint8 -+var pthread_sigmaskABI0 = uintptr(unsafe.Pointer(&_pthread_sigmask)) -+ -+//go:linkname _pthread_mutex_lock _pthread_mutex_lock -+var _pthread_mutex_lock uint8 -+var pthread_mutex_lockABI0 = uintptr(unsafe.Pointer(&_pthread_mutex_lock)) -+ -+//go:linkname _pthread_mutex_unlock _pthread_mutex_unlock -+var _pthread_mutex_unlock uint8 -+var pthread_mutex_unlockABI0 = uintptr(unsafe.Pointer(&_pthread_mutex_unlock)) -+ -+//go:linkname _pthread_cond_broadcast _pthread_cond_broadcast -+var _pthread_cond_broadcast uint8 -+var pthread_cond_broadcastABI0 = uintptr(unsafe.Pointer(&_pthread_cond_broadcast)) -+ -+//go:linkname _pthread_setspecific _pthread_setspecific -+var _pthread_setspecific uint8 -+var pthread_setspecificABI0 = uintptr(unsafe.Pointer(&_pthread_setspecific)) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_darwin.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_darwin.go -new file mode 100644 -index 00000000000000..a7a0d9e69d4d8b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_darwin.go -@@ -0,0 +1,61 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:cgo_import_dynamic purego_malloc malloc "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_free free "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_setenv setenv "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_unsetenv unsetenv "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_sigfillset sigfillset "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_nanosleep nanosleep "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_abort abort "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_create pthread_create "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_detach pthread_detach "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_self pthread_self "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np "/usr/lib/libSystem.B.dylib" -+//go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize "/usr/lib/libSystem.B.dylib" -+ -+//go:nosplit -+//go:norace -+func pthread_self() pthread_t { -+ return pthread_t(call5(pthread_selfABI0, 0, 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_get_stacksize_np(thread pthread_t) size_t { -+ return size_t(call5(pthread_get_stacksize_npABI0, uintptr(thread), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_setstacksize(attr *pthread_attr_t, size size_t) int32 { -+ return int32(call5(pthread_attr_setstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(size), 0, 0, 0)) -+} -+ -+//go:linkname _pthread_self _pthread_self -+var _pthread_self uint8 -+var pthread_selfABI0 = uintptr(unsafe.Pointer(&_pthread_self)) -+ -+//go:linkname _pthread_get_stacksize_np _pthread_get_stacksize_np -+var _pthread_get_stacksize_np uint8 -+var pthread_get_stacksize_npABI0 = uintptr(unsafe.Pointer(&_pthread_get_stacksize_np)) -+ -+//go:linkname _pthread_attr_setstacksize _pthread_attr_setstacksize -+var _pthread_attr_setstacksize uint8 -+var pthread_attr_setstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_setstacksize)) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_freebsd.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_freebsd.go -new file mode 100644 -index 00000000000000..d5a24b1cde00a7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_freebsd.go -@@ -0,0 +1,50 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:cgo_import_dynamic purego_malloc malloc "libc.so.7" -+//go:cgo_import_dynamic purego_free free "libc.so.7" -+//go:cgo_import_dynamic purego_setenv setenv "libc.so.7" -+//go:cgo_import_dynamic purego_unsetenv unsetenv "libc.so.7" -+//go:cgo_import_dynamic purego_sigfillset sigfillset "libc.so.7" -+//go:cgo_import_dynamic purego_nanosleep nanosleep "libc.so.7" -+//go:cgo_import_dynamic purego_abort abort "libc.so.7" -+//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_create pthread_create "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_detach pthread_detach "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_attr_getstacksize pthread_attr_getstacksize "libpthread.so" -+//go:cgo_import_dynamic purego_pthread_attr_destroy pthread_attr_destroy "libpthread.so" -+ -+//go:nosplit -+//go:norace -+func pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 { -+ return int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_destroy(attr *pthread_attr_t) int32 { -+ return int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) -+} -+ -+//go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize -+var _pthread_attr_getstacksize uint8 -+var pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize)) -+ -+//go:linkname _pthread_attr_destroy _pthread_attr_destroy -+var _pthread_attr_destroy uint8 -+var pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy)) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_linux.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_linux.go -new file mode 100644 -index 00000000000000..ab4e0d77cf70d0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/zsymbols_linux.go -@@ -0,0 +1,160 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+package fakecgo -+ -+import "unsafe" -+ -+//go:cgo_import_dynamic purego_malloc malloc "libc.so.6" -+//go:cgo_import_dynamic purego_free free "libc.so.6" -+//go:cgo_import_dynamic purego_setenv setenv "libc.so.6" -+//go:cgo_import_dynamic purego_unsetenv unsetenv "libc.so.6" -+//go:cgo_import_dynamic purego_sigfillset sigfillset "libc.so.6" -+//go:cgo_import_dynamic purego_nanosleep nanosleep "libc.so.6" -+//go:cgo_import_dynamic purego_abort abort "libc.so.6" -+//go:cgo_import_dynamic purego___errno_location __errno_location "libc.so.6" -+//go:cgo_import_dynamic purego_setegid setegid "libc.so.6" -+//go:cgo_import_dynamic purego_seteuid seteuid "libc.so.6" -+//go:cgo_import_dynamic purego_setgid setgid "libc.so.6" -+//go:cgo_import_dynamic purego_setregid setregid "libc.so.6" -+//go:cgo_import_dynamic purego_setresgid setresgid "libc.so.6" -+//go:cgo_import_dynamic purego_setresuid setresuid "libc.so.6" -+//go:cgo_import_dynamic purego_setreuid setreuid "libc.so.6" -+//go:cgo_import_dynamic purego_setuid setuid "libc.so.6" -+//go:cgo_import_dynamic purego_setgroups setgroups "libc.so.6" -+//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_create pthread_create "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_detach pthread_detach "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_attr_getstacksize pthread_attr_getstacksize "libpthread.so.0" -+//go:cgo_import_dynamic purego_pthread_attr_destroy pthread_attr_destroy "libpthread.so.0" -+ -+//go:nosplit -+//go:norace -+func __errno_location() uintptr { -+ return uintptr(call5(__errno_locationABI0, 0, 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setegid(egid uint32) int32 { -+ return int32(call5(setegidABI0, uintptr(egid), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func seteuid(euid uint32) int32 { -+ return int32(call5(seteuidABI0, uintptr(euid), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setgid(gid uint32) int32 { -+ return int32(call5(setgidABI0, uintptr(gid), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setregid(rgid uint32, egid uint32) int32 { -+ return int32(call5(setregidABI0, uintptr(rgid), uintptr(egid), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setresgid(rgid uint32, egid uint32, sgid uint32) int32 { -+ return int32(call5(setresgidABI0, uintptr(rgid), uintptr(egid), uintptr(sgid), 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setresuid(ruid uint32, euid uint32, suid uint32) int32 { -+ return int32(call5(setresuidABI0, uintptr(ruid), uintptr(euid), uintptr(suid), 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setreuid(ruid uint32, euid uint32) int32 { -+ return int32(call5(setreuidABI0, uintptr(ruid), uintptr(euid), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setuid(uid uint32) int32 { -+ return int32(call5(setuidABI0, uintptr(uid), 0, 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func setgroups(ngid uint32, gidset *uint32) int32 { -+ return int32(call5(setgroupsABI0, uintptr(ngid), uintptr(unsafe.Pointer(gidset)), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 { -+ return int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0)) -+} -+ -+//go:nosplit -+//go:norace -+func pthread_attr_destroy(attr *pthread_attr_t) int32 { -+ return int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) -+} -+ -+//go:linkname ___errno_location ___errno_location -+var ___errno_location uint8 -+var __errno_locationABI0 = uintptr(unsafe.Pointer(&___errno_location)) -+ -+//go:linkname _setegid _setegid -+var _setegid uint8 -+var setegidABI0 = uintptr(unsafe.Pointer(&_setegid)) -+ -+//go:linkname _seteuid _seteuid -+var _seteuid uint8 -+var seteuidABI0 = uintptr(unsafe.Pointer(&_seteuid)) -+ -+//go:linkname _setgid _setgid -+var _setgid uint8 -+var setgidABI0 = uintptr(unsafe.Pointer(&_setgid)) -+ -+//go:linkname _setregid _setregid -+var _setregid uint8 -+var setregidABI0 = uintptr(unsafe.Pointer(&_setregid)) -+ -+//go:linkname _setresgid _setresgid -+var _setresgid uint8 -+var setresgidABI0 = uintptr(unsafe.Pointer(&_setresgid)) -+ -+//go:linkname _setresuid _setresuid -+var _setresuid uint8 -+var setresuidABI0 = uintptr(unsafe.Pointer(&_setresuid)) -+ -+//go:linkname _setreuid _setreuid -+var _setreuid uint8 -+var setreuidABI0 = uintptr(unsafe.Pointer(&_setreuid)) -+ -+//go:linkname _setuid _setuid -+var _setuid uint8 -+var setuidABI0 = uintptr(unsafe.Pointer(&_setuid)) -+ -+//go:linkname _setgroups _setgroups -+var _setgroups uint8 -+var setgroupsABI0 = uintptr(unsafe.Pointer(&_setgroups)) -+ -+//go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize -+var _pthread_attr_getstacksize uint8 -+var pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize)) -+ -+//go:linkname _pthread_attr_destroy _pthread_attr_destroy -+var _pthread_attr_destroy uint8 -+var pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy)) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_darwin.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_darwin.s -new file mode 100644 -index 00000000000000..9038f8394965e8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_darwin.s -@@ -0,0 +1,21 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+// these stubs are here because it is not possible to go:linkname directly the C functions -+ -+TEXT _pthread_self(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_self(SB) -+ -+TEXT _pthread_get_stacksize_np(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_get_stacksize_np(SB) -+ -+TEXT _pthread_attr_setstacksize(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_setstacksize(SB) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_freebsd.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_freebsd.s -new file mode 100644 -index 00000000000000..0e0dbfaaed15dd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_freebsd.s -@@ -0,0 +1,18 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+// these stubs are here because it is not possible to go:linkname directly the C functions -+ -+TEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_getstacksize(SB) -+ -+TEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_destroy(SB) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_linux.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_linux.s -new file mode 100644 -index 00000000000000..561f4af7545d4e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_linux.s -@@ -0,0 +1,48 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo -+ -+#include "textflag.h" -+ -+// these stubs are here because it is not possible to go:linkname directly the C functions -+ -+TEXT ___errno_location(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego___errno_location(SB) -+ -+TEXT _setegid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setegid(SB) -+ -+TEXT _seteuid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_seteuid(SB) -+ -+TEXT _setgid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setgid(SB) -+ -+TEXT _setregid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setregid(SB) -+ -+TEXT _setresgid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setresgid(SB) -+ -+TEXT _setresuid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setresuid(SB) -+ -+TEXT _setreuid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setreuid(SB) -+ -+TEXT _setuid(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setuid(SB) -+ -+TEXT _setgroups(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setgroups(SB) -+ -+TEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_getstacksize(SB) -+ -+TEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_destroy(SB) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_stubs.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_stubs.s -new file mode 100644 -index 00000000000000..6adce1818015af ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/fakecgo/ztrampolines_stubs.s -@@ -0,0 +1,57 @@ -+// Code generated by update_tool.go from ebitengine/purego; DO NOT EDIT. -+ -+// Code generated by 'go generate' with gen.go. DO NOT EDIT. -+ -+// SPDX-License-Identifier: Apache-2.0 -+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors -+ -+//go:build !cgo && (darwin || freebsd || linux) -+ -+#include "textflag.h" -+ -+// these stubs are here because it is not possible to go:linkname directly the C functions -+ -+TEXT _malloc(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_malloc(SB) -+ -+TEXT _free(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_free(SB) -+ -+TEXT _setenv(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_setenv(SB) -+ -+TEXT _unsetenv(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_unsetenv(SB) -+ -+TEXT _sigfillset(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_sigfillset(SB) -+ -+TEXT _nanosleep(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_nanosleep(SB) -+ -+TEXT _abort(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_abort(SB) -+ -+TEXT _pthread_attr_init(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_attr_init(SB) -+ -+TEXT _pthread_create(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_create(SB) -+ -+TEXT _pthread_detach(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_detach(SB) -+ -+TEXT _pthread_sigmask(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_sigmask(SB) -+ -+TEXT _pthread_mutex_lock(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_mutex_lock(SB) -+ -+TEXT _pthread_mutex_unlock(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_mutex_unlock(SB) -+ -+TEXT _pthread_cond_broadcast(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_cond_broadcast(SB) -+ -+TEXT _pthread_setspecific(SB), NOSPLIT|NOFRAME, $0-0 -+ JMP purego_pthread_setspecific(SB) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_386.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_386.s -new file mode 100644 -index 00000000000000..4442c19e74564e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_386.s -@@ -0,0 +1,101 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16-0 -+ MOVL 20(SP), AX // libcArgs from C caller (frame_size + ret_addr = 16 + 4) -+ MOVL AX, 0(SP) // pass to Go function -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $16-4 -+ // Frame layout: 16 bytes local storage -+ // 0(SP) - saved BP (original SP) -+ // 4(SP) - saved libcArgs pointer -+ // 8(SP) - saved fn pointer -+ // 12(SP) - scratch -+ -+ // Load args pointer FIRST before any stack modifications -+ MOVL libcArgs+0(FP), SI -+ -+ // Save original SP and libcArgs in local frame -+ MOVL SP, BP -+ ADDL $16, BP // BP = original SP (before frame allocation) -+ MOVL BP, 0(SP) // save original SP -+ MOVL SI, 4(SP) // save libcArgs pointer -+ -+ // Load struct fields -+ MOVL libcCallInfo_fn(SI), AX -+ MOVL AX, 8(SP) // save fn pointer -+ MOVL libcCallInfo_n(SI), CX -+ MOVL libcCallInfo_args(SI), BX -+ -+ // Allocate 16 bytes for fast path (0-3 args) -+ MOVL SP, BP -+ SUBL $16, SP -+ -+ // Fast path for 0-3 args, otherwise fall through to manyargs -+ CMPL CX, $0; JE _0args -+ CMPL CX, $1; JE _1args -+ CMPL CX, $2; JE _2args -+ CMPL CX, $3; JE _3args -+ -+ // manyargs: 4+ args, restore SP and reallocate -+ MOVL BP, SP -+ -+ // Calculate stack space needed: n*4 bytes, aligned to 16 -+ MOVL CX, AX -+ SHLL $2, AX // AX = n * 4 -+ ADDL $15, AX -+ ANDL $~15, AX // 16-byte align -+ SUBL AX, SP -+ -+ // Copy all args to stack -+ // BX = args pointer, CX = count, DI = dest -+ MOVL SP, DI -+ -+copy_loop: -+ DECL CX -+ MOVL (BX)(CX*4), AX -+ MOVL AX, (DI)(CX*4) -+ CMPL CX, $0 -+ JNE copy_loop -+ JMP _0args -+ -+// Fast path: fall through to copy args -+_3args: -+ MOVL 8(BX), AX -+ MOVL AX, 8(SP) -+ -+_2args: -+ MOVL 4(BX), AX -+ MOVL AX, 4(SP) -+ -+_1args: -+ MOVL 0(BX), AX -+ MOVL AX, 0(SP) -+ -+_0args: -+ MOVL 8(BP), DX // fn pointer from saved location -+ CALL DX -+ MOVL BP, SP -+ -+ret: -+ // Reload libcArgs pointer from saved location -+ MOVL 4(SP), SI -+ -+ // Save return values (AX already has r1, need to save DX before it's clobbered) -+ MOVL DX, 12(SP) // temporarily save r2 -+ MOVL AX, libcCallInfo_r1(SI) -+ MOVL 12(SP), AX -+ MOVL AX, libcCallInfo_r2(SI) -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_amd64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_amd64.s -new file mode 100644 -index 00000000000000..8be7dba90de142 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_amd64.s -@@ -0,0 +1,123 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16 -+#ifdef GOOS_windows -+ MOVQ CX, 0(SP) -+ -+#else -+ MOVQ DI, 0(SP) -+ -+#endif -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+#ifdef GOOS_windows -+#define RegArgsN 4 -+#else -+#define RegArgsN 6 -+#endif -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $16-8 -+ // Load pointer from stack (ABI0 calling convention) -+ // Store argument and original SP in a callee-saved register -+ MOVQ libcArgs+0(FP), R13 -+ MOVQ SP, R14 -+ -+ // Align stack to 16 bytes -+ ANDQ $~15, SP -+ -+ MOVQ libcCallInfo_fn(R13), R11 -+ MOVQ libcCallInfo_n(R13), CX -+ MOVQ libcCallInfo_args(R13), R10 -+ -+ // Fast version, do not store args on the stack. -+ CMPL CX, $0; JE _0args -+ CMPL CX, $1; JE _1args -+ CMPL CX, $2; JE _2args -+ CMPL CX, $3; JE _3args -+ CMPL CX, $4; JE _4args -+ -+#ifndef GOOS_windows // Windows does not pass more than 4 args in registers -+ CMPL CX, $5; JE _5args -+ CMPL CX, $6; JE _6args -+ -+#endif -+ -+ // Reserve stack space for remaining args -+ MOVQ CX, R12 -+ SUBQ $RegArgsN, R12 -+ ADDQ $1, R12 // make even number of words for stack alignment -+ ANDQ $~1, R12 -+ SHLQ $3, R12 -+ SUBQ R12, SP -+ -+ // Copy args to the stack. -+ // CX: count of stack arguments (n-RegArgsN) -+ // SI: &args[RegArgsN] -+ // DI: copy of RSP -+ SUBQ $RegArgsN, CX -+ MOVQ R10, SI -+ ADDQ $(8*RegArgsN), SI -+ MOVQ SP, DI -+ CLD -+ REP; MOVSQ -+ -+#ifndef GOOS_windows -+_6args: -+ MOVQ (5*8)(R10), R9 -+ -+_5args: -+ MOVQ (4*8)(R10), R8 -+ -+#endif -+_4args: -+ MOVQ (3*8)(R10), CX -+ -+_3args: -+ MOVQ (2*8)(R10), DX -+ -+_2args: -+ MOVQ (1*8)(R10), SI -+ -+_1args: -+ MOVQ (0*8)(R10), DI -+ -+_0args: -+ -+ XORL AX, AX // vararg: say "no float args" -+ -+#ifdef GOOS_windows -+ // Windows x64 syscall ABI: first four integer args in CX, DX, R8, R9 -+ // and 32 bytes of shadow space on the stack. -+ ADJSP $32 -+ MOVQ CX, R9 -+ MOVQ DX, R8 -+ MOVQ SI, DX -+ MOVQ DI, CX -+ -+#endif -+ -+ CALL R11 -+ -+#ifdef GOOS_windows -+ ADJSP $-32 -+ -+#endif -+ -+ MOVQ R14, SP // free stack space -+ -+ // Return result. -+ MOVQ AX, libcCallInfo_r1(R13) -+ MOVQ DX, libcCallInfo_r2(R13) -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm.s -new file mode 100644 -index 00000000000000..948ff9cf4a84e1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm.s -@@ -0,0 +1,107 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $8 -+ MOVW R0, 4(R13) -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $0-4 -+ // Load args pointer first, before modifying SP -+ MOVW libcArgs+0(FP), R0 -+ -+ // Save callee-saved registers R4-R7 and LR. -+ // We use R4 for libcArgs pointer. -+ // We use R5 for args pointer. -+ // We use R6 for n, then reused for saving SP. -+ // We use R7 for scratch. -+ MOVM.DB.W [R4-R7, R14], (R13) -+ -+ MOVW R0, R4 // Move libcArgs to R4 -+ -+ MOVW libcCallInfo_n(R4), R6 -+ MOVW libcCallInfo_args(R4), R5 -+ MOVW libcCallInfo_fn(R4), R12 -+ -+ CMP $4, R6 -+ BGT args_stack -+ -+ CMP $0, R6 -+ BEQ call -+ CMP $1, R6 -+ BEQ args_1 -+ CMP $2, R6 -+ BEQ args_2 -+ CMP $3, R6 -+ BEQ args_3 -+ -+args_4: -+ MOVM.IA (R5), [R0, R1, R2, R3] -+ B call -+ -+args_3: -+ MOVM.IA (R5), [R0, R1, R2] -+ B call -+ -+args_2: -+ MOVM.IA (R5), [R0, R1] -+ B call -+ -+args_1: -+ MOVW (R5), R0 -+ B call -+ -+args_stack: -+ // Calculate stack space needed: (n-4)*4 -+ SUB $4, R6, R7 -+ MOVW R7, R2 -+ SLL $2, R2 // bytes -+ -+ // Save SP (R6 is free now, n no longer needed) -+ MOVW R13, R6 -+ -+ // Allocate stack -+ SUB R2, R13 -+ BIC $7, R13 // Align to 8 bytes -+ -+ // Copy args -+ ADD $16, R5, R14 // Src = args + 16 -+ MOVW R13, R3 // Dst = SP -+ -+copy_loop: -+ MOVW.P 4(R14), R1 // read -+ MOVW.P R1, 4(R3) // write -+ SUB $1, R7 -+ CMP $0, R7 -+ BNE copy_loop -+ -+ // Load first 4 args -+ MOVM.IA (R5), [R0, R1, R2, R3] -+ -+ // Reload fn -+ MOVW libcCallInfo_fn(R4), R12 -+ -+ BL (R12) -+ -+ // Restore SP -+ MOVW R6, R13 -+ B ret -+ -+call: -+ BL (R12) -+ -+ret: -+ MOVW R0, libcCallInfo_r1(R4) -+ MOVW R1, libcCallInfo_r2(R4) -+ -+ MOVM.IA.W (R13), [R4-R7, R14] -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm64.s -new file mode 100644 -index 00000000000000..ea2a33662a89f0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_arm64.s -@@ -0,0 +1,100 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16 -+ MOVD R0, 8(RSP) -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $0-16 -+ // Save original stack pointer -+ MOVD RSP, R20 -+ -+ // Load pointer from stack (ABI0 calling convention) -+ MOVD libcArgs+0(FP), R3 -+ -+ MOVD libcCallInfo_args(R3), R12 -+ MOVD libcCallInfo_fn(R3), R13 -+ -+ // Do we have more than 8 arguments? -+ MOVD libcCallInfo_n(R3), R0 -+ CMP $0, R0; BEQ _0args -+ CMP $1, R0; BEQ _1args -+ CMP $2, R0; BEQ _2args -+ CMP $3, R0; BEQ _3args -+ CMP $4, R0; BEQ _4args -+ CMP $5, R0; BEQ _5args -+ CMP $6, R0; BEQ _6args -+ CMP $7, R0; BEQ _7args -+ CMP $8, R0; BEQ _8args -+ -+ // Reserve stack space for remaining args -+ SUB $8, R0, R2 -+ ADD $1, R2, R3 // make even number of words for stack alignment -+ AND $~1, R3 -+ LSL $3, R3 -+ SUB R3, RSP -+ -+ // R4: size of stack arguments (n-8)*8 -+ // R5: &args[8] -+ // R6: loop counter, from 0 to (n-8)*8 -+ // R7: scratch -+ // R8: copy of RSP - (R2)(RSP) assembles as (R2)(ZR) -+ SUB $8, R0, R4 -+ LSL $3, R4 -+ ADD $(8*8), R12, R5 -+ MOVD $0, R6 -+ MOVD RSP, R8 -+ -+stackargs: -+ MOVD (R6)(R5), R7 -+ MOVD R7, (R6)(R8) -+ ADD $8, R6 -+ CMP R6, R4 -+ BNE stackargs -+ -+_8args: -+ MOVD (7*8)(R12), R7 -+ -+_7args: -+ MOVD (6*8)(R12), R6 -+ -+_6args: -+ MOVD (5*8)(R12), R5 -+ -+_5args: -+ MOVD (4*8)(R12), R4 -+ -+_4args: -+ MOVD (3*8)(R12), R3 -+ -+_3args: -+ MOVD (2*8)(R12), R2 -+ -+_2args: -+ MOVD (1*8)(R12), R1 -+ -+_1args: -+ MOVD (0*8)(R12), R0 -+ -+_0args: -+ -+ BL (R13) -+ -+ // Restore original stack pointer -+ MOVD R20, RSP -+ -+ MOVD libcArgs+0(FP), R3 -+ MOVD R0, libcCallInfo_r1(R3) // save r1 -+ MOVD R1, libcCallInfo_r2(R3) // save r2 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_loong64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_loong64.s -new file mode 100644 -index 00000000000000..0036346faededf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_loong64.s -@@ -0,0 +1,119 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16 -+ MOVV R4, 8(R3) -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $0-8 -+ // Load pointer from stack (ABI0 calling convention) -+ MOVV libcArgs+0(FP), R12 -+ -+ // Save original stack pointer -+ MOVV R3, R23 -+ -+ // Align stack to 16 bytes for C calling convention -+ MOVV $-16, R15 -+ AND R15, R3 -+ -+ MOVV libcCallInfo_args(R12), R13 -+ MOVV libcCallInfo_fn(R12), R14 -+ -+ // Do we have more than 8 arguments? -+ MOVV libcCallInfo_n(R12), R4 -+ BEQ R4, R0, _0args -+ MOVV $1, R15 -+ BEQ R4, R15, _1args -+ MOVV $2, R15 -+ BEQ R4, R15, _2args -+ MOVV $3, R15 -+ BEQ R4, R15, _3args -+ MOVV $4, R15 -+ BEQ R4, R15, _4args -+ MOVV $5, R15 -+ BEQ R4, R15, _5args -+ MOVV $6, R15 -+ BEQ R4, R15, _6args -+ MOVV $7, R15 -+ BEQ R4, R15, _7args -+ MOVV $8, R15 -+ BEQ R4, R15, _8args -+ -+ // Reserve stack space for remaining args -+ MOVV R4, R16 -+ ADDV $-8, R16 // R16 = n-8 -+ MOVV R16, R12 // R12 = n-8 (reuse R12, no longer need libcArgs) -+ ADDV $1, R12 // R12 = (n-8)+1 -+ MOVV $-2, R15 -+ AND R15, R12 // make even number of words for stack alignment -+ SLLV $3, R12 // R12 = bytes to reserve -+ SUBV R12, R3 // SP -= bytes -+ -+ // R16: size of stack arguments (n-8)*8 -+ // R15: &args[8] -+ // R17: loop counter, from 0 to (n-8)*8 -+ // R18: scratch -+ // R19: copy of R3 (SP) -+ // R20: scratch -+ SLLV $3, R16 // R16 = (n-8)*8 -+ MOVV R13, R15 -+ ADDV $(8*8), R15 // R15 = args + 64 = &args[8] -+ MOVV R0, R17 // R17 = 0 (loop counter) -+ MOVV R3, R19 // R19 = SP copy -+ -+stackargs: -+ MOVV R15, R18 -+ ADDV R17, R18 // R18 = &args[8] + counter -+ MOVV (R18), R18 // R18 = args[8 + counter/8] -+ MOVV R19, R20 -+ ADDV R17, R20 // R20 = SP_copy + counter -+ MOVV R18, (R20) // stack[counter/8] = R18 -+ ADDV $8, R17 // counter += 8 -+ BNE R17, R16, stackargs // while counter != (n-8)*8 -+ -+_8args: -+ MOVV (7*8)(R13), R11 -+ -+_7args: -+ MOVV (6*8)(R13), R10 -+ -+_6args: -+ MOVV (5*8)(R13), R9 -+ -+_5args: -+ MOVV (4*8)(R13), R8 -+ -+_4args: -+ MOVV (3*8)(R13), R7 -+ -+_3args: -+ MOVV (2*8)(R13), R6 -+ -+_2args: -+ MOVV (1*8)(R13), R5 -+ -+_1args: -+ MOVV (0*8)(R13), R4 -+ -+_0args: -+ -+ CALL (R14) -+ -+ // Restore original stack pointer -+ MOVV R23, R3 -+ -+ MOVV libcArgs+0(FP), R12 -+ MOVV R4, libcCallInfo_r1(R12) // save r1 -+ MOVV R5, libcCallInfo_r2(R12) // save r2 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_others.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_others.s -new file mode 100644 -index 00000000000000..05b68fa204a71b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_others.s -@@ -0,0 +1,10 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo && !arm && !arm64 && !386 && !amd64 && !loong64 && !ppc64le && !riscv64 && (!s390x || !go1.27) -+ -+// This file silences errors about body-less functions. -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_ppc64le.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_ppc64le.s -new file mode 100644 -index 00000000000000..1eacc7832ab330 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_ppc64le.s -@@ -0,0 +1,144 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ // R3 already contains the libcArgs pointer from cgocall -+ MOVD LR, R0 -+ MOVD R0, 16(R1) -+ MOVDU R1, -32(R1) -+ MOVD R3, 32(R1) -+ CALL ·syscallNSystemStack(SB) -+ ADD $32, R1 -+ MOVD 16(R1), R0 -+ MOVD R0, LR -+ RET -+ -+// PPC64LE ELFv2 ABI: R3-R10 args, R3-R4 return, R14-R31 callee-saved -+// Go ABI: R3-R10, R14-R17 args, R20-R21 scratch, R30=g, R31=scratch -+// We use R24-R28 which are callee-saved in both ABIs. -+// Go frame: 48 locals + 32 linkage = 80 bytes. Locals start at 32(R1). -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $48-8 -+ // Save callee-saved registers we'll use -+ MOVD R24, 32(R1) -+ MOVD R25, 40(R1) -+ MOVD R26, 48(R1) -+ MOVD R27, 56(R1) -+ MOVD R28, 64(R1) -+ -+ // Load libcArgs pointer from stack (ABI0 calling convention) -+ MOVD libcArgs+0(FP), R11 -+ -+ // Store values we need across the C call in callee-saved registers -+ MOVD R1, R24 // R24 = original SP -+ MOVD R11, R25 // R25 = libcArgs -+ MOVD libcCallInfo_args(R11), R26 // R26 = args -+ MOVD libcCallInfo_fn(R11), R27 // R27 = fn -+ MOVD libcCallInfo_n(R11), R28 // R28 = n -+ -+ // Do we have more than 8 arguments? -+ CMP R28, $8 -+ BLE _allocsmall -+ -+ // >8 args: allocate large frame ((n-8+1) & ~1) * 8 + 96 -+ SUB $8, R28, R3 -+ ADD $1, R3 -+ MOVD $~1, R4 -+ AND R4, R3 -+ SLD $3, R3 -+ ADD $96, R3 -+ NEG R3, R4 -+ ADD R4, R24, R1 -+ MOVD $~15, R3 -+ AND R3, R1 // 16-byte align -+ MOVD R24, 0(R1) // back chain -+ MOVD R2, 24(R1) // save TOC -+ -+ // Copy args[8..n-1] to stack at offset 96 -+ MOVD $8, R3 -+ -+_stackargs: -+ SLD $3, R3, R5 -+ MOVD (R26)(R5), R6 -+ SUB $8, R3, R7 -+ SLD $3, R7 -+ ADD $96, R7 -+ MOVD R6, (R1)(R7) -+ ADD $1, R3 -+ CMP R3, R28 -+ BLT _stackargs -+ BR _8args -+ -+_allocsmall: -+ // <=8 args: allocate minimum 96-byte C frame -+ ADD $-96, R24, R1 -+ MOVD $~15, R3 -+ AND R3, R1 -+ MOVD R24, 0(R1) // back chain -+ MOVD R2, 24(R1) // save TOC -+ -+ // Branch to appropriate label based on arg count -+ CMP R28, $0; BEQ _0args -+ CMP R28, $1; BEQ _1args -+ CMP R28, $2; BEQ _2args -+ CMP R28, $3; BEQ _3args -+ CMP R28, $4; BEQ _4args -+ CMP R28, $5; BEQ _5args -+ CMP R28, $6; BEQ _6args -+ CMP R28, $7; BEQ _7args -+ -+_8args: -+ MOVD (7*8)(R26), R10 -+ -+_7args: -+ MOVD (6*8)(R26), R9 -+ -+_6args: -+ MOVD (5*8)(R26), R8 -+ -+_5args: -+ MOVD (4*8)(R26), R7 -+ -+_4args: -+ MOVD (3*8)(R26), R6 -+ -+_3args: -+ MOVD (2*8)(R26), R5 -+ -+_2args: -+ MOVD (1*8)(R26), R4 -+ -+_1args: -+ MOVD (0*8)(R26), R3 -+ -+_0args: -+ // ELFv2: function address in R12 and CTR -+ MOVD R27, R12 -+ MOVD R12, CTR -+ BL (CTR) -+ -+ // Restore TOC and stack pointer -+ MOVD 24(R1), R2 -+ MOVD R24, R1 -+ -+ // Save return values -+ MOVD R3, libcCallInfo_r1(R25) -+ MOVD R4, libcCallInfo_r2(R25) -+ -+ // Restore callee-saved registers -+ MOVD 32(R1), R24 -+ MOVD 40(R1), R25 -+ MOVD 48(R1), R26 -+ MOVD 56(R1), R27 -+ MOVD 64(R1), R28 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_riscv64.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_riscv64.s -new file mode 100644 -index 00000000000000..e7676e6aa8c2ef ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_riscv64.s -@@ -0,0 +1,112 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT, $16 -+ MOV A0, 8(X2) -+ CALL ·syscallNSystemStack(SB) -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $0-8 -+ // Load pointer from stack (ABI0 calling convention) -+ MOV libcArgs+0(FP), X5 -+ -+ // Save original stack pointer -+ MOV X2, X20 -+ -+ // Align stack to 16 bytes for C calling convention -+ ANDI $-16, X2, X2 -+ -+ MOV libcCallInfo_args(X5), X30 -+ MOV libcCallInfo_fn(X5), X29 -+ -+ // Do we have more than 8 arguments? -+ MOV libcCallInfo_n(X5), X10 -+ BEQ X10, ZERO, _0args -+ MOV $1, X6 -+ BEQ X10, X6, _1args -+ MOV $2, X6 -+ BEQ X10, X6, _2args -+ MOV $3, X6 -+ BEQ X10, X6, _3args -+ MOV $4, X6 -+ BEQ X10, X6, _4args -+ MOV $5, X6 -+ BEQ X10, X6, _5args -+ MOV $6, X6 -+ BEQ X10, X6, _6args -+ MOV $7, X6 -+ BEQ X10, X6, _7args -+ MOV $8, X6 -+ BEQ X10, X6, _8args -+ -+ // Reserve stack space for remaining args -+ ADDI $-8, X10, X7 -+ ADDI $1, X7, X5 // make even number of words for stack alignment -+ ANDI $-2, X5, X5 -+ SLLI $3, X5, X5 -+ SUB X5, X2, X2 -+ -+ // X6: size of stack arguments (n-8)*8 -+ // X7: &args[8] -+ // X8: loop counter, from 0 to (n-8)*8 -+ // X9: scratch -+ // X28: copy of X2 (SP) -+ ADDI $-8, X10, X6 -+ SLLI $3, X6, X6 -+ ADDI $(8*8), X7, X7 -+ MOV ZERO, X8 -+ MOV X2, X28 -+ -+stackargs: -+ ADD X8, X7, X9 -+ MOV (X9), X9 -+ ADD X8, X28, X31 -+ MOV X9, (X31) -+ ADDI $8, X8, X8 -+ BNE X8, X6, stackargs -+ -+_8args: -+ MOV (7*8)(X30), X17 -+ -+_7args: -+ MOV (6*8)(X30), X16 -+ -+_6args: -+ MOV (5*8)(X30), X15 -+ -+_5args: -+ MOV (4*8)(X30), X14 -+ -+_4args: -+ MOV (3*8)(X30), X13 -+ -+_3args: -+ MOV (2*8)(X30), X12 -+ -+_2args: -+ MOV (1*8)(X30), X11 -+ -+_1args: -+ MOV (0*8)(X30), X10 -+ -+_0args: -+ -+ CALL X29 -+ -+ // Restore original stack pointer -+ MOV X20, X2 -+ -+ MOV libcArgs+0(FP), X5 -+ MOV X10, libcCallInfo_r1(X5) // save r1 -+ MOV X11, libcCallInfo_r2(X5) // save r2 -+ -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_s390x.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_s390x.s -new file mode 100644 -index 00000000000000..6a8c18c0f111c6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/asm_s390x.s -@@ -0,0 +1,120 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build go1.27 && !cgo -+ -+#include "go_asm.h" -+#include "textflag.h" -+ -+// S390X ELF ABI: -+// - Args in R2-R6, float args in F0, F2, F4, F6 -+// - Return values in R2, R3 (and F0 for floats) -+// - Callee-saved: R6-R13, R15, F8-F15 -+// - R14 is link register (return address) -+// - R15 is stack pointer -+// - Standard frame: 160 bytes minimum with register save area at 48(R15) -+ -+TEXT ·syscallNSystemStack_trampoline(SB), NOSPLIT|NOFRAME, $0-0 -+ // R2 already contains the libcArgs pointer from cgocall -+ // Save callee-saved registers to caller's save area -+ STMG R6, R15, 48(R15) -+ MOVD R15, R1 -+ SUB $32, R15 -+ MOVD R1, 0(R15) -+ MOVD R2, 8(R15) -+ BL ·syscallNSystemStack(SB) -+ ADD $32, R15 -+ LMG 48(R15), R6, R15 -+ RET -+ -+TEXT ·syscallNAsm(SB), NOSPLIT, $64-8 -+ // Save callee-saved registers we'll use (R6-R11) -+ STMG R6, R11, 8(R15) -+ -+ // Load libcArgs pointer from stack (ABI0 calling convention) -+ MOVD libcArgs+0(FP), R11 -+ -+ // Store values we need across the C call in callee-saved registers -+ MOVD R15, R7 // R7 = original SP -+ MOVD R11, R8 // R8 = libcArgs -+ MOVD libcCallInfo_args(R11), R9 // R9 = args -+ MOVD libcCallInfo_fn(R11), R10 // R10 = fn -+ MOVD libcCallInfo_n(R11), R6 // R6 = n -+ -+ // Do we have more than 5 arguments? -+ CMPBLE R6, $5, _allocsmall -+ -+ // >5 args: allocate frame for stack args ((n-5+1) & ~1) * 8 + 160 -+ MOVD R6, R1 -+ SUB $5, R1 -+ ADD $1, R1 -+ MOVD $~1, R0 -+ AND R0, R1 -+ SLD $3, R1 -+ ADD $160, R1 -+ SUB R1, R7, R15 -+ MOVD $~15, R0 -+ AND R0, R15 // 16-byte align -+ MOVD R7, 0(R15) // back chain -+ -+ // Copy args[5..n-1] to stack at offset 160 -+ MOVD $5, R1 -+ -+_stackargs: -+ SLD $3, R1, R3 -+ MOVD (R9)(R3*1), R0 -+ SUB $5, R1, R4 -+ SLD $3, R4 -+ ADD $160, R4 -+ MOVD R0, (R15)(R4*1) -+ ADD $1, R1 -+ CMP R1, R6 -+ BLT _stackargs -+ BR _5args -+ -+_allocsmall: -+ // <=5 args: allocate minimum 160-byte C frame -+ SUB $160, R7, R15 -+ MOVD $~15, R0 -+ AND R0, R15 -+ MOVD R7, 0(R15) // back chain -+ -+ // Branch to appropriate label based on arg count -+ CMPBEQ R6, $0, _0args -+ CMPBEQ R6, $1, _1args -+ CMPBEQ R6, $2, _2args -+ CMPBEQ R6, $3, _3args -+ CMPBEQ R6, $4, _4args -+ -+_5args: -+ MOVD (4*8)(R9), R6 -+ -+_4args: -+ MOVD (3*8)(R9), R5 -+ -+_3args: -+ MOVD (2*8)(R9), R4 -+ -+_2args: -+ MOVD (1*8)(R9), R3 -+ -+_1args: -+ MOVD (0*8)(R9), R2 -+ -+_0args: -+ BL R10 -+ -+ // Restore stack pointer -+ MOVD R7, R15 -+ -+ // Save return values -+ MOVD R2, libcCallInfo_r1(R8) -+ MOVD R3, libcCallInfo_r2(R8) -+ -+ // Restore callee-saved registers (R6-R11) -+ LMG 8(R15), R6, R11 -+ RET -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/dl.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/dl.h -new file mode 100644 -index 00000000000000..4ff00b18668375 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/dl.h -@@ -0,0 +1,15 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// This header file is used by the mkcgo tool to generate cgo and Go bindings for the -+// OpenSSL C API. Run "go generate ." to regenerate the bindings. -+ -+#ifndef _GO_DL_SHIMS_H // only include this header once -+#define _GO_DL_SHIMS_H -+ -+void *dlopen(const char *path, int flags); -+int dlclose(void *handle); -+void *dlsym(void *handle, const char *symbol); -+char *dlerror(void); -+ -+#endif // _GO_DL_SHIMS_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors.go -new file mode 100644 -index 00000000000000..5f589254830a4d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors.go -@@ -0,0 +1,37 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package ossl -+ -+import ( -+ "errors" -+ "unsafe" -+) -+ -+// newMkcgoErr constructs an error from the given message and OpenSSL error state. -+func newMkcgoErr(msg string, state uintptr) error { -+ if state == 0 { -+ // No error -+ return nil -+ } -+ bio := BIO_PTR(state) -+ defer BIO_free(bio) -+ // Retrieve pointer to data, which is owned by bio. -+ var data *byte -+ n := BIO_ctrl(bio, BIO_CTRL_INFO, 0, unsafe.Pointer(&data)) -+ if n == 0 { -+ // If no errors in queue, return simple message -+ return errors.New(msg + " failed") -+ } -+ const extra = "\nopenssl error(s):\n" -+ buf := make([]byte, len(msg)+len(extra)+int(n)) -+ copy(buf, msg) -+ copy(buf[len(msg):], extra) -+ copy(buf[len(msg)+len(extra):], unsafe.Slice(data, n)) -+ // Remove trailing line jump if present. -+ if buf[len(buf)-1] == '\n' { -+ buf = buf[:len(buf)-1] -+ } -+ // Avoid an allocation by constructing the string directly from the byte slice. -+ return errors.New(unsafe.String(unsafe.SliceData(buf), len(buf))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_cgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_cgo.go -new file mode 100644 -index 00000000000000..86b001762fba83 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_cgo.go -@@ -0,0 +1,33 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package ossl -+ -+/* -+#include "zossl.h" -+ -+// Force mkcgo_err_retrieve to be stack-guarded, -+// even when it doesn't actually need it. -+// This is necessary to ensure Go binaries built -+// with -fstack-protector-strong comply with BinSkim BA3003, -+// so that at least one function in the binary uses __stack_chk_guard. -+// See https://github.com/microsoft/go/issues/2240. -+ -+#define MKCGO_STACK_PROTECT -+ -+#if defined(__has_attribute) -+#if __has_attribute(stack_protect) -+#undef MKCGO_STACK_PROTECT -+#define MKCGO_STACK_PROTECT __attribute__((stack_protect)) -+#endif -+#endif -+ -+// mkcgo_err_retrieve retrieves the error state from OpenSSL. -+uintptr_t MKCGO_STACK_PROTECT mkcgo_err_retrieve() { -+ // BIO operations using BIO_s_mem should not fail. -+ _BIO_PTR bio = _mkcgo_BIO_new(_mkcgo_BIO_s_mem(), NULL); -+ _mkcgo_ERR_print_errors(bio); -+ return (uintptr_t)bio; -+} -+*/ -+import "C" -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_nocgo.go -new file mode 100644 -index 00000000000000..ec42d4f6f9c26c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/errors_nocgo.go -@@ -0,0 +1,19 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package ossl -+ -+// retrieveErrorState retrieves errors from the OpenSSL error queue. -+// It might run on the system stack, so it can't allocate Go memory -+// nor grow the stack over the nosplit limit. -+// -+//go:nosplit -+func retrieveErrorState() uintptr { -+ // BIO operations using BIO_s_mem should not fail. -+ smem := syscallNRaw(_mkcgo_BIO_s_mem) -+ bio := syscallNRaw(_mkcgo_BIO_new, smem) -+ syscallNRaw(_mkcgo_ERR_print_errors, bio) -+ return bio -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/ossl.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/ossl.go -new file mode 100644 -index 00000000000000..9acac55865dc17 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/ossl.go -@@ -0,0 +1,62 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Package ossl provides a Go interface to OpenSSL. -+package ossl -+ -+//go:generate go run ../../cmd/mkcgo -out zossl.go -mode dynload -package ossl shims.h -+//go:generate go run ../../cmd/mkcgo -out zossl.go -nocgo -mode dynload -package ossl shims.h -+//go:generate go run ../../cmd/mkcgo -out zdl.go -nocgo -mode dynamic -noerrors -package ossl -tags unix dl.h -+ -+import "unsafe" -+ -+const _OSSL_PARAM_UNMODIFIED uint = uint(^uintptr(0)) -+ -+// OSSL_PARAM is a structure to pass or request object parameters. -+// https://docs.openssl.org/3.0/man3/OSSL_PARAM/. -+type OSSL_PARAM struct { -+ Key *byte -+ DataType uint32 -+ Data unsafe.Pointer -+ DataSize uint -+ ReturnSize uint -+} -+ -+func ossl_param_construct(key *byte, dataType uint32, data unsafe.Pointer, dataSize int) OSSL_PARAM { -+ return OSSL_PARAM{ -+ Key: key, -+ DataType: dataType, -+ Data: data, -+ DataSize: uint(dataSize), -+ ReturnSize: _OSSL_PARAM_UNMODIFIED, -+ } -+} -+ -+func OSSL_PARAM_construct_octet_string(key *byte, data unsafe.Pointer, dataSize int) OSSL_PARAM { -+ return ossl_param_construct(key, OSSL_PARAM_OCTET_STRING, data, dataSize) -+} -+ -+func OSSL_PARAM_construct_int32(key *byte, data *int32) OSSL_PARAM { -+ return ossl_param_construct(key, OSSL_PARAM_INTEGER, unsafe.Pointer(data), 4) -+} -+ -+func OSSL_PARAM_construct_end() OSSL_PARAM { -+ return OSSL_PARAM{} -+} -+ -+func OSSL_PARAM_modified(param *OSSL_PARAM) bool { -+ // If ReturnSize is not set, the parameter has not been modified. -+ return param != nil && param.ReturnSize != _OSSL_PARAM_UNMODIFIED -+} -+ -+// goString converts a C string (byte pointer) to a Go string -+func goString(p *byte) string { -+ if p == nil { -+ return "" -+ } -+ end := unsafe.Pointer(p) -+ for *(*byte)(end) != 0 { -+ end = unsafe.Add(end, 1) -+ } -+ return string(unsafe.Slice(p, uintptr(end)-uintptr(unsafe.Pointer(p)))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/shims.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/shims.h -new file mode 100644 -index 00000000000000..f5f4918ac54163 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/shims.h -@@ -0,0 +1,448 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// This header file is used by the mkcgo tool to generate cgo and Go bindings for the -+// OpenSSL C API. Run "go generate ." to regenerate the bindings. -+// Do not include this file, import "zossl.h" instead. -+ -+#ifndef _GO_OSSL_SHIMS_H // only include this header once -+#define _GO_OSSL_SHIMS_H -+ -+#include // size_t -+#include // uint64_t -+ -+// The following includes are used by the checkheader tool. -+// #include -+// #include -+// #include -+// #include -+// #include -+// #include -+// #include -+// #include -+// #include -+// #include -+// #include -+// #if OPENSSL_VERSION_NUMBER >= 0x30000000L -+// #include -+// #include -+// #include -+// #include -+// #endif -+// #if OPENSSL_VERSION_NUMBER < 0x10100000L -+// #include -+// #endif -+ -+enum { -+ _POINT_CONVERSION_UNCOMPRESSED = 4, -+ -+ _OPENSSL_INIT_LOAD_CRYPTO_STRINGS = 0x00000002, -+ _OPENSSL_INIT_ADD_ALL_CIPHERS = 0x00000004, -+ _OPENSSL_INIT_ADD_ALL_DIGESTS = 0x00000008, -+ _OPENSSL_INIT_LOAD_CONFIG = 0x00000040, -+ -+ _EVP_CTRL_GCM_GET_TAG = 0x10, -+ _EVP_CTRL_GCM_SET_TAG = 0x11, -+ _EVP_CTRL_AEAD_SET_IVLEN = 0x9, -+ _EVP_CTRL_AEAD_GET_TAG = 0x10, -+ _EVP_CTRL_AEAD_SET_TAG = 0x11, -+ _EVP_PKEY_CTRL_MD = 1, -+ _EVP_PKEY_RSA = 6, -+ _EVP_PKEY_EC = 408, -+ _EVP_PKEY_TLS1_PRF = 1021, -+ _EVP_PKEY_X25519 = 1034, -+ _EVP_PKEY_HKDF = 1036, -+ _EVP_PKEY_ED25519 = 1087, -+ _EVP_PKEY_DSA = 116, -+ _EVP_PKEY_MLKEM_768 = 1455, -+ _EVP_PKEY_MLKEM_1024 = 1456, -+ _EVP_PKEY_ML_DSA_44 = 1457, -+ _EVP_PKEY_ML_DSA_65 = 1458, -+ _EVP_PKEY_ML_DSA_87 = 1459, -+ _EVP_PKEY_OP_DERIVE = (1 << 10), // this value differs between OpenSSL 1 and 3, but we only use it in 1 -+ _EVP_MAX_MD_SIZE = 64, -+ -+ _EVP_PKEY_PUBLIC_KEY = 0x86, -+ _EVP_PKEY_KEYPAIR = 0x87, -+ -+ _EVP_MD_CTRL_XOF_LEN = 0x3, -+ -+ _EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID = 0x1001, -+ -+ _EVP_KDF_HKDF_MODE_EXTRACT_ONLY = 1, -+ _EVP_KDF_HKDF_MODE_EXPAND_ONLY = 2, -+ -+ _EVP_PKEY_CTRL_TLS_MD = 0x1000, -+ _EVP_PKEY_CTRL_TLS_SECRET = 0x1001, -+ _EVP_PKEY_CTRL_TLS_SEED = 0x1002, -+ _EVP_PKEY_CTRL_HKDF_MD = 0x1003, -+ _EVP_PKEY_CTRL_HKDF_SALT = 0x1004, -+ _EVP_PKEY_CTRL_HKDF_KEY = 0x1005, -+ _EVP_PKEY_CTRL_HKDF_INFO = 0x1006, -+ _EVP_PKEY_CTRL_HKDF_MODE = 0x1007, -+ -+ _NID_X9_62_prime256v1 = 415, -+ _NID_secp224r1 = 713, -+ _NID_secp384r1 = 715, -+ _NID_secp521r1 = 716, -+ -+ _NID_ML_KEM_768 = 1455, -+ _NID_ML_KEM_1024 = 1456, -+ _NID_ML_DSA_44 = 1457, -+ _NID_ML_DSA_65 = 1458, -+ _NID_ML_DSA_87 = 1459, -+ -+ _RSA_PKCS1_PADDING = 1, -+ _RSA_NO_PADDING = 3, -+ _RSA_PKCS1_OAEP_PADDING = 4, -+ _RSA_PKCS1_PSS_PADDING = 6, -+ _RSA_PSS_SALTLEN_DIGEST = -1, -+ _RSA_PSS_SALTLEN_AUTO = -2, -+ _RSA_PSS_SALTLEN_MAX_SIGN = -2, -+ _RSA_PSS_SALTLEN_MAX = -3, -+ _EVP_PKEY_CTRL_RSA_PADDING = 0x1001, -+ _EVP_PKEY_CTRL_RSA_PSS_SALTLEN = 0x1002, -+ _EVP_PKEY_CTRL_RSA_KEYGEN_BITS = 0x1003, -+ _EVP_PKEY_CTRL_RSA_MGF1_MD = 0x1005, -+ _EVP_PKEY_CTRL_RSA_OAEP_MD = 0x1009, -+ _EVP_PKEY_CTRL_RSA_OAEP_LABEL = 0x100A, -+ _EVP_PKEY_CTRL_DSA_PARAMGEN_BITS = 0x1001, -+ _EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS = 0x1002, -+ -+ _OSSL_PARAM_INTEGER = 1, -+ _OSSL_PARAM_OCTET_STRING = 5, -+ -+ BIO_CTRL_INFO = 3, -+}; -+ -+typedef void* _OPENSSL_INIT_SETTINGS_PTR; -+typedef void* _OSSL_LIB_CTX_PTR; -+typedef void* _OSSL_PROVIDER_PTR; -+typedef void* _ENGINE_PTR; -+typedef void* _EVP_PKEY_PTR; -+typedef void* _EVP_PKEY_CTX_PTR; -+typedef void* _EVP_MD_PTR; -+typedef void* _EVP_MD_CTX_PTR; -+typedef void* _HMAC_CTX_PTR; -+typedef void* _EVP_CIPHER_PTR; -+typedef void* _EVP_CIPHER_CTX_PTR; -+typedef void* _EC_KEY_PTR; -+typedef void* _EC_POINT_PTR; -+typedef void* _EC_GROUP_PTR; -+typedef void* _RSA_PTR; -+typedef void* _BIGNUM_PTR; -+typedef void* _BN_CTX_PTR; -+typedef void* _EVP_MAC_PTR; -+typedef void* _EVP_MAC_CTX_PTR; -+typedef void* _OSSL_PARAM_BLD_PTR; -+typedef void* _OSSL_PARAM_PTR; -+typedef void* _EVP_SIGNATURE_PTR; -+typedef void* _EVP_KEYMGMT_PTR; -+typedef void* _DSA_PTR; -+typedef void* _EVP_KDF_PTR; -+typedef void* _EVP_KDF_CTX_PTR; -+typedef void* _BIO_METHOD_PTR; -+typedef void* _BIO_PTR; -+typedef int point_conversion_form_t; -+ -+// Tags used by mkcgo to determine which OpenSSL version each function is available in: -+// - no tag: available in all supported versions (OpenSSL 1.1.1+) -+// - legacy_1: Only OpenSSL 1 -+// - 3: OpenSSL 3.0 or later -+// - 33: OpenSSL 3.3 or later -+ -+// The noescape/nocallback attributes are performance optimizations. -+// Only add functions that have been observed to benefit from these -+// directives, not every function that is merely expected to meet -+// the noescape/nocallback criteria. -+ -+// BIO API -+const _BIO_METHOD_PTR BIO_s_mem(void) __attribute__((tag(""),tag("init_3"),noerror)); -+_BIO_PTR BIO_new(const _BIO_METHOD_PTR type) __attribute__((tag(""),tag("init_3"))); -+int BIO_free(_BIO_PTR a) __attribute__((tag(""),tag("init_3"),noerror,noescape,nocallback)); -+long BIO_ctrl(_BIO_PTR bp, int cmd, long larg, void *parg) __attribute__((tag(""),tag("init_3"),noerror,noescape,nocallback)); -+ -+// ERR API -+unsigned long ERR_peek_error(void) __attribute__((noerror)); -+void ERR_print_errors(_BIO_PTR bp) __attribute__((tag(""),tag("init_3"),noescape,nocallback)); -+ -+// OPENSSL API -+const char *OpenSSL_version(int type) __attribute__((noerror)); -+void OPENSSL_init(void); -+int OPENSSL_init_crypto(uint64_t ops, const _OPENSSL_INIT_SETTINGS_PTR settings); -+unsigned long OpenSSL_version_num(void) __attribute__((tag("version"),optional,noerror)); -+unsigned int OPENSSL_version_major(void) __attribute__((tag("version"),optional,noerror)); -+unsigned int OPENSSL_version_minor(void) __attribute__((tag("version"),optional,noerror)); -+unsigned int OPENSSL_version_patch(void) __attribute__((tag("version"),optional,noerror)); -+ -+// CRYPTO API -+void *CRYPTO_malloc(size_t num, const char *file, int line); -+void CRYPTO_free(void *str, const char *file, int line); -+ -+// FIPS API -+int FIPS_mode(void) __attribute__((tag("legacy_1"),tag("init_1"),noerror)); -+int FIPS_mode_set(int r) __attribute__((tag("legacy_1"),tag("init_1"))); -+ -+// EVP Config API -+int EVP_default_properties_is_fips_enabled(_OSSL_LIB_CTX_PTR libctx) __attribute__((tag("3"),tag("init_3"),noerror)); -+int EVP_default_properties_enable_fips(_OSSL_LIB_CTX_PTR libctx, int enable) __attribute__((tag("3"))); -+ -+// OSSL_PROVIDER API -+int OSSL_PROVIDER_available(_OSSL_LIB_CTX_PTR libctx, const char *name) __attribute__((tag("3"),noerror)); -+_OSSL_PROVIDER_PTR OSSL_PROVIDER_try_load(_OSSL_LIB_CTX_PTR libctx, const char *name, int retain_fallbacks) __attribute__((tag("3"))); -+const char *OSSL_PROVIDER_get0_name(const _OSSL_PROVIDER_PTR prov) __attribute__((tag("3"),noerror)); -+ -+// RAND API -+int RAND_bytes(unsigned char *buf, int num) __attribute__((tag("legacy_1"),noescape,nocallback,slice("buf","num"))); -+int RAND_bytes_ex(_OSSL_LIB_CTX_PTR ctx, unsigned char *buf, size_t num, unsigned int strength) __attribute__((tag("3"),noescape,nocallback,slice("buf","num"))); -+ -+// EVP_MD API -+_EVP_MD_PTR EVP_MD_fetch(_OSSL_LIB_CTX_PTR ctx, const char *algorithm, const char *properties) __attribute__((tag("3"),tag("init_3"))); -+void EVP_MD_free(_EVP_MD_PTR md) __attribute__((tag("3"),tag("init_3"))); -+const char *EVP_MD_get0_name(const _EVP_MD_PTR md) __attribute__((tag("3"),noerror)); -+int EVP_MD_get_type(const _EVP_MD_PTR md) __attribute__((tag("3"),noerror)); -+const _OSSL_PROVIDER_PTR EVP_MD_get0_provider(const _EVP_MD_PTR md) __attribute__((tag("3"),tag("init_3"),noerror)); -+int EVP_MD_get_size(const _EVP_MD_PTR md) __attribute__((tag("3"),tag("legacy_1","EVP_MD_size"),noerror)); -+int EVP_MD_get_block_size(const _EVP_MD_PTR md) __attribute__((tag("3"),tag("legacy_1","EVP_MD_block_size"),noerror)); -+const _EVP_MD_PTR EVP_md5_sha1(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_ripemd160(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_md4(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_md5(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha1(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha224(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha256(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha384(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha512(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha512_224(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha512_256(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha3_224(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha3_256(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha3_384(void) __attribute__((noerror)); -+const _EVP_MD_PTR EVP_sha3_512(void) __attribute__((noerror)); -+ -+_EVP_MD_CTX_PTR EVP_MD_CTX_new(void); -+void EVP_MD_CTX_free(_EVP_MD_CTX_PTR ctx); -+int EVP_MD_CTX_ctrl(_EVP_MD_CTX_PTR ctx, int cmd, int p1, void *p2); -+int EVP_MD_CTX_copy_ex(_EVP_MD_CTX_PTR out, const _EVP_MD_CTX_PTR in); -+const _OSSL_PARAM_PTR EVP_MD_CTX_gettable_params(_EVP_MD_CTX_PTR ctx) __attribute__((tag("3"))); -+const _OSSL_PARAM_PTR EVP_MD_CTX_settable_params(_EVP_MD_CTX_PTR ctx) __attribute__((tag("3"))); -+int EVP_MD_CTX_get_params(_EVP_MD_CTX_PTR ctx, _OSSL_PARAM_PTR params) __attribute__((tag("3"),noescape,nocallback)); -+int EVP_MD_CTX_set_params(_EVP_MD_CTX_PTR ctx, const _OSSL_PARAM_PTR params) __attribute__((tag("3"),noescape,nocallback)); -+int EVP_Digest(const void *data, size_t count, unsigned char *md, unsigned int *size, const _EVP_MD_PTR type, _ENGINE_PTR impl) __attribute__((noescape,nocallback,slice("data","count"),slice("md","size"))); -+int EVP_DigestInit_ex(_EVP_MD_CTX_PTR ctx, const _EVP_MD_PTR type, _ENGINE_PTR impl); -+int EVP_DigestInit(_EVP_MD_CTX_PTR ctx, const _EVP_MD_PTR type); -+int EVP_DigestUpdate(_EVP_MD_CTX_PTR ctx, const void *d, size_t cnt) __attribute__((noescape,nocallback,slice("d","cnt"))); -+int EVP_DigestFinal_ex(_EVP_MD_CTX_PTR ctx, unsigned char *md, unsigned int *s) __attribute__((noescape,nocallback,slice("md","s"))); -+int EVP_DigestFinalXOF(_EVP_MD_CTX_PTR ctx, unsigned char *md, size_t mdlen) __attribute__((tag("33"),noescape,nocallback,slice("md","mdlen"))); -+int EVP_DigestSqueeze(_EVP_MD_CTX_PTR ctx, unsigned char *out, size_t outlen) __attribute__((tag("33"),optional,noescape,nocallback,slice("out","outlen"))); -+int EVP_DigestSign(_EVP_MD_CTX_PTR ctx, unsigned char *sigret, size_t *siglen, const unsigned char *tbs, size_t tbslen) __attribute__((noescape,nocallback,slice("sigret","siglen"),slice("tbs","tbslen"))); -+int EVP_DigestSignInit(_EVP_MD_CTX_PTR ctx, _EVP_PKEY_CTX_PTR *pctx, const _EVP_MD_PTR type, _ENGINE_PTR e, _EVP_PKEY_PTR pkey); -+int EVP_DigestSignFinal(_EVP_MD_CTX_PTR ctx, unsigned char *sig, size_t *siglen) __attribute__((slice("sig","siglen"))); -+int EVP_DigestVerifyInit(_EVP_MD_CTX_PTR ctx, _EVP_PKEY_CTX_PTR *pctx, const _EVP_MD_PTR type, _ENGINE_PTR e, _EVP_PKEY_PTR pkey); -+int EVP_DigestVerifyFinal(_EVP_MD_CTX_PTR ctx, const unsigned char *sig, size_t siglen) __attribute__((slice("sig","siglen"))); -+int EVP_DigestVerify(_EVP_MD_CTX_PTR ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen) __attribute__((slice("sigret","siglen"),slice("tbs","tbslen"))); -+ -+// HMAC API -+int HMAC_Init_ex(_HMAC_CTX_PTR arg0, const void *arg1, int arg2, const _EVP_MD_PTR arg3, _ENGINE_PTR arg4) __attribute__((tag("legacy_1"),noescape,nocallback,slice("arg1","arg2"))); -+int HMAC_Update(_HMAC_CTX_PTR arg0, const unsigned char *arg1, size_t arg2) __attribute__((tag("legacy_1"),noescape,nocallback,slice("arg1","arg2"))); -+int HMAC_Final(_HMAC_CTX_PTR arg0, unsigned char *arg1, unsigned int *arg2) __attribute__((tag("legacy_1"),noescape,nocallback,slice("arg1","arg2"))); -+ -+_HMAC_CTX_PTR HMAC_CTX_new(void) __attribute__((tag("legacy_1"))); -+int HMAC_CTX_copy(_HMAC_CTX_PTR dest, _HMAC_CTX_PTR src) __attribute__((tag("legacy_1"),noescape,nocallback)); -+void HMAC_CTX_free(_HMAC_CTX_PTR arg0) __attribute__((tag("legacy_1"),noescape,nocallback)); -+ -+// EVP_CIPHER API -+_EVP_CIPHER_PTR EVP_CIPHER_fetch(_OSSL_LIB_CTX_PTR ctx, const char *algorithm, const char *properties) __attribute__((tag("3"))); -+const char *EVP_CIPHER_get0_name(const _EVP_CIPHER_PTR cipher) __attribute__((tag("3"),noerror)); -+const _EVP_CIPHER_PTR EVP_aes_128_gcm(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_128_cbc(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_128_ctr(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_128_ecb(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_192_gcm(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_192_cbc(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_192_ctr(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_192_ecb(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_256_cbc(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_256_ctr(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_256_ecb(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_aes_256_gcm(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_des_ecb(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_des_cbc(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_des_ede3_ecb(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_des_ede3_cbc(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_rc4(void) __attribute__((noerror)); -+const _EVP_CIPHER_PTR EVP_chacha20_poly1305(void) __attribute__((optional,noerror)); -+int EVP_CIPHER_get_block_size(const _EVP_CIPHER_PTR cipher) __attribute__((tag("3"),tag("legacy_1","EVP_CIPHER_block_size"),noerror)); -+ -+_EVP_CIPHER_CTX_PTR EVP_CIPHER_CTX_new(void); -+int EVP_CIPHER_CTX_set_padding(_EVP_CIPHER_CTX_PTR x, int padding); -+int EVP_CIPHER_CTX_set_key_length(_EVP_CIPHER_CTX_PTR x, int keylen); -+void EVP_CIPHER_CTX_free(_EVP_CIPHER_CTX_PTR arg0); -+int EVP_CIPHER_CTX_ctrl(_EVP_CIPHER_CTX_PTR ctx, int type, int arg, void *ptr); -+int EVP_CipherInit_ex(_EVP_CIPHER_CTX_PTR ctx, const _EVP_CIPHER_PTR type, _ENGINE_PTR impl, const unsigned char *key, const unsigned char *iv, int enc); -+int EVP_CipherInit_ex2(_EVP_CIPHER_CTX_PTR ctx, const _EVP_CIPHER_PTR type, const unsigned char *key, const unsigned char *iv, int enc, const _OSSL_PARAM_PTR params) __attribute__((tag("3"))); -+int EVP_CipherUpdate(_EVP_CIPHER_CTX_PTR ctx, unsigned char *out, int *outl, const unsigned char *in, int inl) __attribute__((noescape,nocallback,slice("out","outl"),slice("in","inl"))); -+int EVP_EncryptInit_ex(_EVP_CIPHER_CTX_PTR ctx, const _EVP_CIPHER_PTR type, _ENGINE_PTR impl, const unsigned char *key, const unsigned char *iv); -+int EVP_EncryptUpdate(_EVP_CIPHER_CTX_PTR ctx, unsigned char *out, int *outl, const unsigned char *in, int inl) __attribute__((noescape,nocallback,slice("out","outl"),slice("in","inl"))); -+int EVP_EncryptFinal_ex(_EVP_CIPHER_CTX_PTR ctx, unsigned char *out, int *outl) __attribute__((noescape,nocallback,slice("out","outl"))); -+int EVP_DecryptInit_ex(_EVP_CIPHER_CTX_PTR ctx, const _EVP_CIPHER_PTR type, _ENGINE_PTR impl, const unsigned char *key, const unsigned char *iv); -+int EVP_DecryptUpdate(_EVP_CIPHER_CTX_PTR ctx, unsigned char *out, int *outl, const unsigned char *in, int inl) __attribute__((noescape,nocallback,slice("out","outl"),slice("in","inl"))); -+int EVP_DecryptFinal_ex(_EVP_CIPHER_CTX_PTR ctx, unsigned char *outm, int *outl) __attribute__((noescape,nocallback,slice("outm","outl"))); -+ -+// EVP_PKEY API -+_EVP_PKEY_PTR EVP_PKEY_new(void); -+_EVP_PKEY_PTR EVP_PKEY_new_raw_private_key(int type, _ENGINE_PTR e, const unsigned char *key, size_t keylen) __attribute__((slice("key","keylen"))); -+_EVP_PKEY_PTR EVP_PKEY_new_raw_public_key(int type, _ENGINE_PTR e, const unsigned char *key, size_t keylen) __attribute__((slice("key","keylen"))); -+int EVP_PKEY_get_size(const _EVP_PKEY_PTR pkey) __attribute__((tag("3"),tag("legacy_1","EVP_PKEY_size"))); -+int EVP_PKEY_get_bits(const _EVP_PKEY_PTR pkey) __attribute__((tag("3"),tag("legacy_1","EVP_PKEY_bits"))); -+void EVP_PKEY_free(_EVP_PKEY_PTR arg0); -+_RSA_PTR EVP_PKEY_get1_RSA(_EVP_PKEY_PTR pkey) __attribute__((tag("legacy_1"))); -+int EVP_PKEY_assign(_EVP_PKEY_PTR pkey, int type, void *key) __attribute__((tag("legacy_1"))); -+_EC_KEY_PTR EVP_PKEY_get0_EC_KEY(_EVP_PKEY_PTR pkey) __attribute__((tag("legacy_1"))); -+_DSA_PTR EVP_PKEY_get0_DSA(_EVP_PKEY_PTR pkey) __attribute__((tag("legacy_1"))); -+int EVP_PKEY_set1_encoded_public_key(_EVP_PKEY_PTR pkey, const unsigned char *pub, size_t publen) __attribute__((tag("3"),slice("pub","publen"))); -+size_t EVP_PKEY_get1_encoded_public_key(_EVP_PKEY_PTR pkey, unsigned char **ppub) __attribute__((tag("3"))); -+int EVP_PKEY_get_bn_param(const _EVP_PKEY_PTR pkey, const char *key_name, _BIGNUM_PTR *bn) __attribute__((tag("3"),noescape,nocallback)); -+int EVP_PKEY_get_octet_string_param(const _EVP_PKEY_PTR pkey, const char *key_name, unsigned char *buf, size_t buf_len, size_t *out_len) __attribute__((tag("3"),slice("buf","buf_len"))); -+int EVP_PKEY_eq(const _EVP_PKEY_PTR a, const _EVP_PKEY_PTR b) __attribute__((tag("3"),noescape,nocallback)); -+int EVP_PKEY_up_ref(_EVP_PKEY_PTR key); -+int EVP_PKEY_set1_EC_KEY(_EVP_PKEY_PTR pkey, _EC_KEY_PTR key) __attribute__((tag("legacy_1"))); -+int EVP_PKEY_CTX_set0_rsa_oaep_label(_EVP_PKEY_CTX_PTR ctx, void *label, int labellen) __attribute__((tag("3"),slice("label","labellen"))); -+int EVP_PKEY_get_raw_public_key(const _EVP_PKEY_PTR pkey, unsigned char *pub, size_t *publen) __attribute__((noescape,nocallback,slice("pub","publen"))); -+int EVP_PKEY_get_raw_private_key(const _EVP_PKEY_PTR pkey, unsigned char *priv, size_t *privlen) __attribute__((noescape,nocallback,slice("priv","privlen"))); -+int EVP_PKEY_fromdata_init(_EVP_PKEY_CTX_PTR ctx) __attribute__((tag("3"))); -+int EVP_PKEY_fromdata(_EVP_PKEY_CTX_PTR ctx, _EVP_PKEY_PTR *pkey, int selection, _OSSL_PARAM_PTR params) __attribute__((tag("3"))); -+int EVP_PKEY_paramgen_init(_EVP_PKEY_CTX_PTR ctx); -+int EVP_PKEY_paramgen(_EVP_PKEY_CTX_PTR ctx, _EVP_PKEY_PTR *ppkey); -+int EVP_PKEY_keygen_init(_EVP_PKEY_CTX_PTR ctx); -+int EVP_PKEY_keygen(_EVP_PKEY_CTX_PTR ctx, _EVP_PKEY_PTR *ppkey) __attribute__((noescape,nocallback)); -+int EVP_PKEY_decrypt(_EVP_PKEY_CTX_PTR arg0, unsigned char *arg1, size_t *arg2, const unsigned char *arg3, size_t arg4) __attribute__((slice("arg1","arg2"),slice("arg3","arg4"))); -+int EVP_PKEY_encrypt(_EVP_PKEY_CTX_PTR arg0, unsigned char *arg1, size_t *arg2, const unsigned char *arg3, size_t arg4) __attribute__((slice("arg1","arg2"),slice("arg3","arg4"))); -+int EVP_PKEY_decrypt_init(_EVP_PKEY_CTX_PTR arg0); -+int EVP_PKEY_encrypt_init(_EVP_PKEY_CTX_PTR arg0); -+int EVP_PKEY_sign_init(_EVP_PKEY_CTX_PTR arg0); -+int EVP_PKEY_verify_init(_EVP_PKEY_CTX_PTR arg0); -+int EVP_PKEY_sign(_EVP_PKEY_CTX_PTR arg0, unsigned char *arg1, size_t *arg2, const unsigned char *arg3, size_t arg4) __attribute__((slice("arg1","arg2"),slice("arg3","arg4"))); -+int EVP_PKEY_verify(_EVP_PKEY_CTX_PTR ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen) __attribute__((slice("sig","siglen"),slice("tbs","tbslen"))); -+int EVP_PKEY_derive_init(_EVP_PKEY_CTX_PTR ctx); -+int EVP_PKEY_derive_set_peer(_EVP_PKEY_CTX_PTR ctx, _EVP_PKEY_PTR peer); -+int EVP_PKEY_derive(_EVP_PKEY_CTX_PTR ctx, unsigned char *key, size_t *keylen) __attribute__((noescape,nocallback,slice("key","keylen"))); -+int EVP_PKEY_public_check_quick(_EVP_PKEY_CTX_PTR ctx) __attribute__((tag("3"))); -+int EVP_PKEY_private_check(_EVP_PKEY_CTX_PTR ctx) __attribute__((tag("3"))); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type, ...) __attribute__((tag("3"))); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen_RSA(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type, size_t arg1) __attribute__((tag("3"),variadic("EVP_PKEY_Q_keygen"),noescape,nocallback)); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen_EC(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type, const char *arg1) __attribute__((tag("3"),variadic("EVP_PKEY_Q_keygen"),noescape,nocallback)); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen_ED25519(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type) __attribute__((tag("3"),variadic("EVP_PKEY_Q_keygen"),noescape,nocallback)); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen_X25519(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type) __attribute__((tag("3"),variadic("EVP_PKEY_Q_keygen"),noescape,nocallback)); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen_MLKEM(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type) __attribute__((tag("3"),variadic("EVP_PKEY_Q_keygen"),noescape,nocallback)); -+_EVP_PKEY_PTR EVP_PKEY_Q_keygen_MLDSA(_OSSL_LIB_CTX_PTR ctx, const char *propq, const char *type) __attribute__((tag("3"),variadic("EVP_PKEY_Q_keygen"),noescape,nocallback)); -+ -+_EVP_PKEY_CTX_PTR EVP_PKEY_CTX_new(_EVP_PKEY_PTR arg0, _ENGINE_PTR arg1); -+_EVP_PKEY_CTX_PTR EVP_PKEY_CTX_new_id(int id, _ENGINE_PTR e); -+_EVP_PKEY_CTX_PTR EVP_PKEY_CTX_new_from_pkey(_OSSL_LIB_CTX_PTR libctx, _EVP_PKEY_PTR pkey, const char *propquery) __attribute__((tag("3"))); -+void EVP_PKEY_CTX_free(_EVP_PKEY_CTX_PTR arg0); -+int EVP_PKEY_CTX_ctrl(_EVP_PKEY_CTX_PTR ctx, int keytype, int optype, int cmd, int p1, void *p2); -+int EVP_PKEY_CTX_set_params(_EVP_PKEY_CTX_PTR ctx, const _OSSL_PARAM_PTR params) __attribute__((tag("3"),noescape,nocallback)); -+int EVP_PKEY_CTX_set_hkdf_mode(_EVP_PKEY_CTX_PTR arg0, int arg1) __attribute__((tag("3"))); -+int EVP_PKEY_CTX_set_hkdf_md(_EVP_PKEY_CTX_PTR arg0, const _EVP_MD_PTR arg1) __attribute__((tag("3"))); -+int EVP_PKEY_CTX_set1_hkdf_salt(_EVP_PKEY_CTX_PTR arg0, const unsigned char *arg1, int arg2) __attribute__((tag("3"),slice("arg1","arg2"))); -+int EVP_PKEY_CTX_set1_hkdf_key(_EVP_PKEY_CTX_PTR arg0, const unsigned char *arg1, int arg2) __attribute__((tag("3"),slice("arg1","arg2"))); -+int EVP_PKEY_CTX_add1_hkdf_info(_EVP_PKEY_CTX_PTR arg0, const unsigned char *arg1, int arg2) __attribute__((tag("3"),slice("arg1","arg2"))); -+ -+// RSA API -+_RSA_PTR RSA_new(void) __attribute__((tag("legacy_1"))); -+void RSA_free(_RSA_PTR arg0) __attribute__((tag("legacy_1"))); -+void RSA_get0_factors(const _RSA_PTR rsa, const _BIGNUM_PTR *p, const _BIGNUM_PTR *q) __attribute__((tag("legacy_1"),noerror)); -+int RSA_set0_factors(_RSA_PTR rsa, _BIGNUM_PTR p, _BIGNUM_PTR q) __attribute__((tag("legacy_1"))); -+void RSA_get0_crt_params(const _RSA_PTR r, const _BIGNUM_PTR *dmp1, const _BIGNUM_PTR *dmq1, const _BIGNUM_PTR *iqmp) __attribute__((tag("legacy_1"),noerror)); -+int RSA_set0_crt_params(_RSA_PTR rsa, _BIGNUM_PTR dmp1, _BIGNUM_PTR dmp2, _BIGNUM_PTR iqmp) __attribute__((tag("legacy_1"))); -+void RSA_get0_key(const _RSA_PTR rsa, const _BIGNUM_PTR *n, const _BIGNUM_PTR *e, const _BIGNUM_PTR *d) __attribute__((tag("legacy_1"),noerror)); -+int RSA_set0_key(_RSA_PTR r, _BIGNUM_PTR n, _BIGNUM_PTR e, _BIGNUM_PTR d) __attribute__((tag("legacy_1"))); -+ -+// BIGNUM API -+_BIGNUM_PTR BN_new(void); -+void BN_free(_BIGNUM_PTR arg0); -+void BN_clear(_BIGNUM_PTR arg0); -+void BN_clear_free(_BIGNUM_PTR arg0); -+int BN_num_bits(const _BIGNUM_PTR arg0) __attribute__((noerror)); -+_BIGNUM_PTR BN_bin2bn(const unsigned char *arg0, int arg1, _BIGNUM_PTR arg2) __attribute__((slice("arg0","arg1"))); -+_BIGNUM_PTR BN_lebin2bn(const unsigned char *s, int slen, _BIGNUM_PTR ret) __attribute__((slice("s","slen"))); -+int BN_bn2lebinpad(const _BIGNUM_PTR a, unsigned char *to, int tolen) __attribute__((errcond("== -1"),slice("to","tolen"))); -+int BN_bn2binpad(const _BIGNUM_PTR a, unsigned char *to, int tolen) __attribute__((errcond("== -1"),slice("to","tolen"))); -+ -+// EC API -+int EC_KEY_set_public_key_affine_coordinates(_EC_KEY_PTR key, _BIGNUM_PTR x, _BIGNUM_PTR y) __attribute__((tag("legacy_1"))); -+int EC_KEY_set_public_key(_EC_KEY_PTR key, const _EC_POINT_PTR pub) __attribute__((tag("legacy_1"))); -+void EC_KEY_free(_EC_KEY_PTR arg0) __attribute__((tag("legacy_1"))); -+const _EC_GROUP_PTR EC_KEY_get0_group(const _EC_KEY_PTR arg0) __attribute__((tag("legacy_1"),noerror)); -+const _BIGNUM_PTR EC_KEY_get0_private_key(const _EC_KEY_PTR arg0) __attribute__((tag("legacy_1"),noerror)); -+const _EC_POINT_PTR EC_KEY_get0_public_key(const _EC_KEY_PTR arg0) __attribute__((tag("legacy_1"),noerror)); -+_EC_KEY_PTR EC_KEY_new_by_curve_name(int arg0) __attribute__((tag("legacy_1"))); -+int EC_KEY_set_private_key(_EC_KEY_PTR arg0, const _BIGNUM_PTR arg1) __attribute__((tag("legacy_1"))); -+int EC_KEY_check_key(const _EC_KEY_PTR key) __attribute__((tag("legacy_1"))); -+_EC_POINT_PTR EC_POINT_new(const _EC_GROUP_PTR arg0); -+void EC_POINT_free(_EC_POINT_PTR arg0); -+int EC_POINT_mul(const _EC_GROUP_PTR group, _EC_POINT_PTR r, const _BIGNUM_PTR n, const _EC_POINT_PTR q, const _BIGNUM_PTR m, _BN_CTX_PTR ctx); -+int EC_POINT_get_affine_coordinates_GFp(const _EC_GROUP_PTR arg0, const _EC_POINT_PTR arg1, _BIGNUM_PTR arg2, _BIGNUM_PTR arg3, _BN_CTX_PTR arg4) __attribute__((tag("legacy_1"))); -+int EC_POINT_set_affine_coordinates(const _EC_GROUP_PTR arg0, _EC_POINT_PTR arg1, const _BIGNUM_PTR arg2, const _BIGNUM_PTR arg3, _BN_CTX_PTR arg4) __attribute__((tag("3"))); -+size_t EC_POINT_point2oct(const _EC_GROUP_PTR group, const _EC_POINT_PTR p, point_conversion_form_t form, unsigned char *buf, size_t buflen, _BN_CTX_PTR ctx) __attribute__((slice("buf","buflen"))); -+int EC_POINT_oct2point(const _EC_GROUP_PTR group, _EC_POINT_PTR p, const unsigned char *buf, size_t buflen, _BN_CTX_PTR ctx) __attribute__((slice("buf","buflen"))); -+_EC_GROUP_PTR EC_GROUP_new_by_curve_name(int nid); -+void EC_GROUP_free(_EC_GROUP_PTR group); -+ -+// EVP_MAC API -+_EVP_MAC_PTR EVP_MAC_fetch(_OSSL_LIB_CTX_PTR ctx, const char *algorithm, const char *properties) __attribute__((tag("3"))); -+_EVP_MAC_CTX_PTR EVP_MAC_CTX_new(_EVP_MAC_PTR arg0) __attribute__((tag("3"))); -+int EVP_MAC_CTX_set_params(_EVP_MAC_CTX_PTR ctx, const _OSSL_PARAM_PTR params) __attribute__((tag("3"))); -+void EVP_MAC_CTX_free(_EVP_MAC_CTX_PTR arg0) __attribute__((tag("3"),noescape,nocallback)); -+_EVP_MAC_CTX_PTR EVP_MAC_CTX_dup(const _EVP_MAC_CTX_PTR arg0) __attribute__((tag("3"))); -+int EVP_MAC_init(_EVP_MAC_CTX_PTR ctx, const unsigned char *key, size_t keylen, const _OSSL_PARAM_PTR params) __attribute__((tag("3"),noescape,nocallback,slice("key","keylen"))); -+int EVP_MAC_update(_EVP_MAC_CTX_PTR ctx, const unsigned char *data, size_t datalen) __attribute__((tag("3"),noescape,nocallback,slice("data","datalen"))); -+int EVP_MAC_final(_EVP_MAC_CTX_PTR ctx, unsigned char *out, size_t *outl, size_t outsize) __attribute__((tag("3"),noescape,nocallback,slice("out","outsize"))); -+ -+// OSSL_PARAM API -+void OSSL_PARAM_free(_OSSL_PARAM_PTR p) __attribute__((tag("3"))); -+const _OSSL_PARAM_PTR OSSL_PARAM_locate_const(const _OSSL_PARAM_PTR p, const char *key) __attribute__((tag("3"))); -+_OSSL_PARAM_BLD_PTR OSSL_PARAM_BLD_new(void) __attribute__((tag("3"),noerror)); -+void OSSL_PARAM_BLD_free(_OSSL_PARAM_BLD_PTR bld) __attribute__((tag("3"))); -+_OSSL_PARAM_PTR OSSL_PARAM_BLD_to_param(_OSSL_PARAM_BLD_PTR bld) __attribute__((tag("3"))); -+int OSSL_PARAM_BLD_push_utf8_string(_OSSL_PARAM_BLD_PTR bld, const char *key, const char *buf, size_t bsize) __attribute__((tag("3"),slice("buf","bsize"))); -+int OSSL_PARAM_BLD_push_octet_string(_OSSL_PARAM_BLD_PTR bld, const char *key, const void *buf, size_t bsize) __attribute__((tag("3"),slice("buf","bsize"))); -+int OSSL_PARAM_BLD_push_BN(_OSSL_PARAM_BLD_PTR bld, const char *key, const _BIGNUM_PTR bn) __attribute__((tag("3"))); -+int OSSL_PARAM_BLD_push_int32(_OSSL_PARAM_BLD_PTR bld, const char *key, int32_t num) __attribute__((tag("3"))); -+ -+// EVP_SIGNATURE API -+_EVP_SIGNATURE_PTR EVP_SIGNATURE_fetch(_OSSL_LIB_CTX_PTR ctx, const char *algorithm, const char *properties) __attribute__((tag("3"))); -+void EVP_SIGNATURE_free(_EVP_SIGNATURE_PTR signature) __attribute__((tag("3"))); -+ -+// DSA API -+_DSA_PTR DSA_new(void) __attribute__((tag("legacy_1"))); -+void DSA_free(_DSA_PTR r) __attribute__((tag("legacy_1"))); -+int DSA_generate_key(_DSA_PTR a) __attribute__((tag("legacy_1"))); -+void DSA_get0_pqg(const _DSA_PTR d, const _BIGNUM_PTR *p, const _BIGNUM_PTR *q, const _BIGNUM_PTR *g) __attribute__((tag("legacy_1"))); -+int DSA_set0_pqg(_DSA_PTR d, _BIGNUM_PTR p, _BIGNUM_PTR q, _BIGNUM_PTR g) __attribute__((tag("legacy_1"))); -+void DSA_get0_key(const _DSA_PTR d, const _BIGNUM_PTR *pub_key, const _BIGNUM_PTR *priv_key) __attribute__((tag("legacy_1"))); -+int DSA_set0_key(_DSA_PTR d, _BIGNUM_PTR pub_key, _BIGNUM_PTR priv_key) __attribute__((tag("legacy_1"))); -+ -+// EVP_KDF API -+_EVP_KDF_PTR EVP_KDF_fetch(_OSSL_LIB_CTX_PTR libctx, const char *algorithm, const char *properties) __attribute__((tag("3"))); -+void EVP_KDF_free(_EVP_KDF_PTR kdf) __attribute__((tag("3"))); -+_EVP_KDF_CTX_PTR EVP_KDF_CTX_new(_EVP_KDF_PTR kdf) __attribute__((tag("3"))); -+int EVP_KDF_CTX_set_params(_EVP_KDF_CTX_PTR ctx, const _OSSL_PARAM_PTR params) __attribute__((tag("3"))); -+void EVP_KDF_CTX_free(_EVP_KDF_CTX_PTR ctx) __attribute__((tag("3"))); -+size_t EVP_KDF_CTX_get_kdf_size(_EVP_KDF_CTX_PTR ctx) __attribute__((tag("3"))); -+int EVP_KDF_derive(_EVP_KDF_CTX_PTR ctx, unsigned char *key, size_t keylen, const _OSSL_PARAM_PTR params) __attribute__((tag("3"),slice("key","keylen"))); -+int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, const _EVP_MD_PTR digest, int keylen, unsigned char *out) __attribute__((tag("legacy_1"),slice("pass","passlen"),slice("salt","saltlen"),slice("out","keylen"))); -+ -+// OBJ API -+const char *OBJ_nid2sn(int n) __attribute__((noerror)); -+ -+// EVP KEM API for ML-KEM (OpenSSL 3.x) -+_EVP_KEYMGMT_PTR EVP_KEYMGMT_fetch(_OSSL_LIB_CTX_PTR libctx, const char *algorithm, const char *properties) __attribute__((tag("3"),optional)); -+void EVP_KEYMGMT_free(_EVP_KEYMGMT_PTR keymgmt) __attribute__((tag("3"))); -+int EVP_PKEY_encapsulate_init(_EVP_PKEY_CTX_PTR ctx, const _OSSL_PARAM_PTR params) __attribute__((tag("3"))); -+int EVP_PKEY_encapsulate(_EVP_PKEY_CTX_PTR ctx, unsigned char *wrappedkey, size_t *wrappedkeylen, unsigned char *genkey, size_t *genkeylen) __attribute__((tag("3"))); -+int EVP_PKEY_decapsulate_init(_EVP_PKEY_CTX_PTR ctx, const _OSSL_PARAM_PTR params) __attribute__((tag("3"))); -+int EVP_PKEY_decapsulate(_EVP_PKEY_CTX_PTR ctx, unsigned char *genkey, size_t *genkeylen, const unsigned char *wrappedkey, size_t wrappedkeylen) __attribute__((tag("3"))); -+ -+#endif // _GO_OSSL_SHIMS_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo.go -new file mode 100644 -index 00000000000000..45c9ce7215a2bd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo.go -@@ -0,0 +1,87 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package ossl -+ -+import ( -+ "unsafe" -+) -+ -+//go:linkname runtime_cgocall runtime.cgocall -+ -+//go:noescape -+func runtime_cgocall(fn uintptr, arg unsafe.Pointer) int32 // from runtime/sys_libc.go -+ -+//go:linkname noescape -+//go:nosplit -+func noescape(p unsafe.Pointer) unsafe.Pointer { -+ x := uintptr(p) -+ return unsafe.Pointer(x ^ 0) -+} -+ -+type libcCallInfo struct { -+ fn uintptr -+ n uintptr // number of parameters -+ args uintptr // parameters -+ r1, r2 uintptr // return values -+ errType uintptr -+} -+ -+//go:noescape -+func syscallNAsm(libcArgs *libcCallInfo) -+ -+// syscallNSystemStack performs a syscall on the system stack. -+// It can't allocate Go memory nor grow the stack over the nosplit limit. -+// -+//go:nosplit -+func syscallNSystemStack(libcArgs *libcCallInfo) { -+ if libcArgs.errType != 0 { -+ libcArgs.n-- -+ } -+ syscallNAsm(libcArgs) -+ if libcArgs.errType != 0 { -+ _mkcgo_error_check(libcArgs.errType, libcArgs.r1, libcArgs.args, libcArgs.n) -+ } -+} -+ -+var syscallNSystemStack_trampoline byte -+var syscallNSystemStackABIInternal = uintptr(unsafe.Pointer(&syscallNSystemStack_trampoline)) -+ -+// syscallN performs a syscall with the given function and arguments. -+// -+// All its parameters and return values must be uintptr in order -+// for the Go compiler to automatically set the //go:uintptrkeepalive -+// directive (which we can't set manually here). -+// See https://github.com/golang/go/blob/9a5a1202f4c4d5a7048b149b65c3e5b82a2de9aa/src/cmd/compile/internal/escape/call.go#L275. -+// -+//go:nosplit -+func syscallN(errType uintptr, fn uintptr, args ...uintptr) (r1, r2 uintptr) { -+ libcArgs := libcCallInfo{ -+ fn: fn, -+ n: uintptr(len(args)), -+ errType: errType, -+ } -+ if libcArgs.n != 0 { -+ libcArgs.args = uintptr(noescape(unsafe.Pointer(&args[0]))) -+ } -+ runtime_cgocall(syscallNSystemStackABIInternal, unsafe.Pointer(&libcArgs)) -+ return libcArgs.r1, libcArgs.r2 -+} -+ -+// syscallNRaw performs a syscall with the given function and arguments, -+// without any error checking nor switching to the system stack. -+// -+//go:nosplit -+func syscallNRaw(fn uintptr, args ...uintptr) uintptr { -+ libcArgs := libcCallInfo{ -+ fn: fn, -+ n: uintptr(len(args)), -+ } -+ if libcArgs.n != 0 { -+ libcArgs.args = uintptr(noescape(unsafe.Pointer(&args[0]))) -+ } -+ syscallNAsm(&libcArgs) -+ return libcArgs.r1 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_darwin.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_darwin.go -new file mode 100644 -index 00000000000000..70dbcb15a9142d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_darwin.go -@@ -0,0 +1,8 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package ossl -+ -+//go:cgo_import_dynamic _ _ "/usr/lib/libSystem.B.dylib" -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_freebsd.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_freebsd.go -new file mode 100644 -index 00000000000000..4a8747b4d6b2a9 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_freebsd.go -@@ -0,0 +1,8 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package ossl -+ -+//go:cgo_import_dynamic _ _ "libc.so.7" -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_linux.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_linux.go -new file mode 100644 -index 00000000000000..236f6361eb0935 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_linux.go -@@ -0,0 +1,8 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package ossl -+ -+//go:cgo_import_dynamic _ _ "libdl.so.2" -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_unix.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_unix.go -new file mode 100644 -index 00000000000000..24c7b8aaa3e5bd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_unix.go -@@ -0,0 +1,23 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo && unix && (go1.27 || !s390x) -+ -+package ossl -+ -+import ( -+ "unsafe" -+ -+ _ "github.com/microsoft/go-crypto-openssl/internal/fakecgo" -+) -+ -+func dlsym(handle unsafe.Pointer, symbol string, optional bool) uintptr { -+ r0 := Dlsym(handle, unsafe.StringData(symbol)) -+ if r0 == nil { -+ if !optional { -+ panic("cannot get required symbol " + symbol) -+ } -+ return 0 -+ } -+ return uintptr(r0) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_windows.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_windows.go -new file mode 100644 -index 00000000000000..38fb4882eb487d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/syscall_nocgo_windows.go -@@ -0,0 +1,25 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo && windows -+ -+package ossl -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+var modkernel32 = syscall.NewLazyDLL("kernel32.dll") -+var procGetProcAddress = modkernel32.NewProc("GetProcAddress") -+ -+func dlsym(handle unsafe.Pointer, symbol string, optional bool) uintptr { -+ r0, _, err := syscall.SyscallN(procGetProcAddress.Addr(), uintptr(handle), uintptr(unsafe.Pointer(unsafe.StringData(symbol)))) -+ if err != 0 { -+ if !optional { -+ panic("cannot get required symbol " + symbol + ": " + err.Error()) -+ } -+ return 0 -+ } -+ return r0 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl.s b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl.s -new file mode 100644 -index 00000000000000..51fd1af1cf33fd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl.s -@@ -0,0 +1,58 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo && unix -+ -+#include "textflag.h" -+ -+#ifndef GOARCH_amd64 -+#ifndef GOARCH_arm64 -+#ifndef GOARCH_riscv64 -+#ifndef GOARCH_loong64 -+#ifndef GOARCH_mips64 -+#ifndef GOARCH_mips64le -+#ifndef GOARCH_ppc64 -+#ifndef GOARCH_ppc64le -+#ifndef GOARCH_s390x -+#ifndef GOARCH_sparc64 -+#define _GOPTRSIZE 4 -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+#endif -+ -+#ifndef _GOPTRSIZE -+#define _GOPTRSIZE 8 -+#endif -+TEXT _mkcgo_dlclose_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_dlclose(SB) -+ -+GLOBL ·_mkcgo_dlclose_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_dlclose_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlclose_trampoline<>(SB) -+ -+TEXT _mkcgo_dlerror_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_dlerror(SB) -+ -+GLOBL ·_mkcgo_dlerror_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_dlerror_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlerror_trampoline<>(SB) -+ -+TEXT _mkcgo_dlopen_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_dlopen(SB) -+ -+GLOBL ·_mkcgo_dlopen_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_dlopen_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlopen_trampoline<>(SB) -+ -+TEXT _mkcgo_dlsym_trampoline<>(SB), NOSPLIT, $0-0 -+ JMP _mkcgo_dlsym(SB) -+ -+GLOBL ·_mkcgo_dlsym_trampoline_addr(SB), RODATA, $_GOPTRSIZE -+DATA ·_mkcgo_dlsym_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlsym_trampoline<>(SB) -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl_nocgo.go -new file mode 100644 -index 00000000000000..7d382b9a5c288c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zdl_nocgo.go -@@ -0,0 +1,61 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo && unix -+ -+package ossl -+ -+import ( -+ "runtime" -+ "unsafe" -+) -+ -+var _ = runtime.GOOS -+ -+var _mkcgoAlwaysFalseDl bool -+var _mkcgoEscapeSinkDl unsafe.Pointer -+ -+// mkcgoEscapePtrDl forces p to escape to the heap. -+// This implementation is also used in the standard library: -+// https://github.com/golang/go/blob/f71432d223eeb2139b460957817400750fd13655/src/internal/abi/escape.go#L24-L33 -+func mkcgoEscapePtrDl(p unsafe.Pointer) unsafe.Pointer { -+ if _mkcgoAlwaysFalseDl { -+ _mkcgoEscapeSinkDl = p -+ } -+ return p -+} -+ -+//go:cgo_import_dynamic _mkcgo_dlclose dlclose "" -+//go:cgo_import_dynamic _mkcgo_dlerror dlerror "" -+//go:cgo_import_dynamic _mkcgo_dlopen dlopen "" -+//go:cgo_import_dynamic _mkcgo_dlsym dlsym "" -+ -+var _mkcgo_dlclose_trampoline_addr uintptr -+ -+func Dlclose(handle unsafe.Pointer) int32 { -+ r0, _ := syscallN(0, _mkcgo_dlclose_trampoline_addr, uintptr(handle)) -+ return int32(r0) -+} -+ -+var _mkcgo_dlerror_trampoline_addr uintptr -+ -+func Dlerror() *byte { -+ r0, _ := syscallN(0, _mkcgo_dlerror_trampoline_addr) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_dlopen_trampoline_addr uintptr -+ -+func Dlopen(path *byte, flags int32) unsafe.Pointer { -+ r0, _ := syscallN(0, _mkcgo_dlopen_trampoline_addr, uintptr(mkcgoEscapePtrDl(unsafe.Pointer(path))), uintptr(flags)) -+ return unsafe.Pointer(r0) -+} -+ -+var _mkcgo_dlsym_trampoline_addr uintptr -+ -+func Dlsym(handle unsafe.Pointer, symbol *byte) unsafe.Pointer { -+ r0, _ := syscallN(0, _mkcgo_dlsym_trampoline_addr, uintptr(handle), uintptr(mkcgoEscapePtrDl(unsafe.Pointer(symbol)))) -+ return unsafe.Pointer(r0) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.c b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.c -new file mode 100644 -index 00000000000000..18c2978e636dc8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.c -@@ -0,0 +1,2101 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#include -+#include -+#include -+#include -+#include "zossl.h" -+ -+#ifdef _WIN32 -+#include -+#define dlsym GetProcAddress -+#else -+#include -+#endif -+ -+long (*_g_BIO_ctrl)(_BIO_PTR, int, long, void*); -+int (*_g_BIO_free)(_BIO_PTR); -+_BIO_PTR (*_g_BIO_new)(const _BIO_METHOD_PTR); -+const _BIO_METHOD_PTR (*_g_BIO_s_mem)(void); -+_BIGNUM_PTR (*_g_BN_bin2bn)(const unsigned char*, int, _BIGNUM_PTR); -+int (*_g_BN_bn2binpad)(const _BIGNUM_PTR, unsigned char*, int); -+int (*_g_BN_bn2lebinpad)(const _BIGNUM_PTR, unsigned char*, int); -+void (*_g_BN_clear)(_BIGNUM_PTR); -+void (*_g_BN_clear_free)(_BIGNUM_PTR); -+void (*_g_BN_free)(_BIGNUM_PTR); -+_BIGNUM_PTR (*_g_BN_lebin2bn)(const unsigned char*, int, _BIGNUM_PTR); -+_BIGNUM_PTR (*_g_BN_new)(void); -+int (*_g_BN_num_bits)(const _BIGNUM_PTR); -+void (*_g_CRYPTO_free)(void*, const char*, int); -+void* (*_g_CRYPTO_malloc)(size_t, const char*, int); -+void (*_g_DSA_free)(_DSA_PTR); -+int (*_g_DSA_generate_key)(_DSA_PTR); -+void (*_g_DSA_get0_key)(const _DSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+void (*_g_DSA_get0_pqg)(const _DSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+_DSA_PTR (*_g_DSA_new)(void); -+int (*_g_DSA_set0_key)(_DSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR); -+int (*_g_DSA_set0_pqg)(_DSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BIGNUM_PTR); -+void (*_g_EC_GROUP_free)(_EC_GROUP_PTR); -+_EC_GROUP_PTR (*_g_EC_GROUP_new_by_curve_name)(int); -+int (*_g_EC_KEY_check_key)(const _EC_KEY_PTR); -+void (*_g_EC_KEY_free)(_EC_KEY_PTR); -+const _EC_GROUP_PTR (*_g_EC_KEY_get0_group)(const _EC_KEY_PTR); -+const _BIGNUM_PTR (*_g_EC_KEY_get0_private_key)(const _EC_KEY_PTR); -+const _EC_POINT_PTR (*_g_EC_KEY_get0_public_key)(const _EC_KEY_PTR); -+_EC_KEY_PTR (*_g_EC_KEY_new_by_curve_name)(int); -+int (*_g_EC_KEY_set_private_key)(_EC_KEY_PTR, const _BIGNUM_PTR); -+int (*_g_EC_KEY_set_public_key)(_EC_KEY_PTR, const _EC_POINT_PTR); -+int (*_g_EC_KEY_set_public_key_affine_coordinates)(_EC_KEY_PTR, _BIGNUM_PTR, _BIGNUM_PTR); -+void (*_g_EC_POINT_free)(_EC_POINT_PTR); -+int (*_g_EC_POINT_get_affine_coordinates_GFp)(const _EC_GROUP_PTR, const _EC_POINT_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BN_CTX_PTR); -+int (*_g_EC_POINT_mul)(const _EC_GROUP_PTR, _EC_POINT_PTR, const _BIGNUM_PTR, const _EC_POINT_PTR, const _BIGNUM_PTR, _BN_CTX_PTR); -+_EC_POINT_PTR (*_g_EC_POINT_new)(const _EC_GROUP_PTR); -+int (*_g_EC_POINT_oct2point)(const _EC_GROUP_PTR, _EC_POINT_PTR, const unsigned char*, size_t, _BN_CTX_PTR); -+size_t (*_g_EC_POINT_point2oct)(const _EC_GROUP_PTR, const _EC_POINT_PTR, point_conversion_form_t, unsigned char*, size_t, _BN_CTX_PTR); -+int (*_g_EC_POINT_set_affine_coordinates)(const _EC_GROUP_PTR, _EC_POINT_PTR, const _BIGNUM_PTR, const _BIGNUM_PTR, _BN_CTX_PTR); -+unsigned long (*_g_ERR_peek_error)(void); -+void (*_g_ERR_print_errors)(_BIO_PTR); -+int (*_g_EVP_CIPHER_CTX_ctrl)(_EVP_CIPHER_CTX_PTR, int, int, void*); -+void (*_g_EVP_CIPHER_CTX_free)(_EVP_CIPHER_CTX_PTR); -+_EVP_CIPHER_CTX_PTR (*_g_EVP_CIPHER_CTX_new)(void); -+int (*_g_EVP_CIPHER_CTX_set_key_length)(_EVP_CIPHER_CTX_PTR, int); -+int (*_g_EVP_CIPHER_CTX_set_padding)(_EVP_CIPHER_CTX_PTR, int); -+_EVP_CIPHER_PTR (*_g_EVP_CIPHER_fetch)(_OSSL_LIB_CTX_PTR, const char*, const char*); -+const char* (*_g_EVP_CIPHER_get0_name)(const _EVP_CIPHER_PTR); -+int (*_g_EVP_CIPHER_get_block_size)(const _EVP_CIPHER_PTR); -+int (*_g_EVP_CipherInit_ex)(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, _ENGINE_PTR, const unsigned char*, const unsigned char*, int); -+int (*_g_EVP_CipherInit_ex2)(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, const unsigned char*, const unsigned char*, int, const _OSSL_PARAM_PTR); -+int (*_g_EVP_CipherUpdate)(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, const unsigned char*, int); -+int (*_g_EVP_DecryptFinal_ex)(_EVP_CIPHER_CTX_PTR, unsigned char*, int*); -+int (*_g_EVP_DecryptInit_ex)(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, _ENGINE_PTR, const unsigned char*, const unsigned char*); -+int (*_g_EVP_DecryptUpdate)(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, const unsigned char*, int); -+int (*_g_EVP_Digest)(const unsigned char*, size_t, unsigned char*, unsigned int*, const _EVP_MD_PTR, _ENGINE_PTR); -+int (*_g_EVP_DigestFinalXOF)(_EVP_MD_CTX_PTR, unsigned char*, size_t); -+int (*_g_EVP_DigestFinal_ex)(_EVP_MD_CTX_PTR, unsigned char*, unsigned int*); -+int (*_g_EVP_DigestInit)(_EVP_MD_CTX_PTR, const _EVP_MD_PTR); -+int (*_g_EVP_DigestInit_ex)(_EVP_MD_CTX_PTR, const _EVP_MD_PTR, _ENGINE_PTR); -+int (*_g_EVP_DigestSign)(_EVP_MD_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t); -+int (*_g_EVP_DigestSignFinal)(_EVP_MD_CTX_PTR, unsigned char*, size_t*); -+int (*_g_EVP_DigestSignInit)(_EVP_MD_CTX_PTR, _EVP_PKEY_CTX_PTR*, const _EVP_MD_PTR, _ENGINE_PTR, _EVP_PKEY_PTR); -+int (*_g_EVP_DigestSqueeze)(_EVP_MD_CTX_PTR, unsigned char*, size_t); -+int (*_g_EVP_DigestUpdate)(_EVP_MD_CTX_PTR, const unsigned char*, size_t); -+int (*_g_EVP_DigestVerify)(_EVP_MD_CTX_PTR, const unsigned char*, size_t, const unsigned char*, size_t); -+int (*_g_EVP_DigestVerifyFinal)(_EVP_MD_CTX_PTR, const unsigned char*, size_t); -+int (*_g_EVP_DigestVerifyInit)(_EVP_MD_CTX_PTR, _EVP_PKEY_CTX_PTR*, const _EVP_MD_PTR, _ENGINE_PTR, _EVP_PKEY_PTR); -+int (*_g_EVP_EncryptFinal_ex)(_EVP_CIPHER_CTX_PTR, unsigned char*, int*); -+int (*_g_EVP_EncryptInit_ex)(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, _ENGINE_PTR, const unsigned char*, const unsigned char*); -+int (*_g_EVP_EncryptUpdate)(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, const unsigned char*, int); -+void (*_g_EVP_KDF_CTX_free)(_EVP_KDF_CTX_PTR); -+size_t (*_g_EVP_KDF_CTX_get_kdf_size)(_EVP_KDF_CTX_PTR); -+_EVP_KDF_CTX_PTR (*_g_EVP_KDF_CTX_new)(_EVP_KDF_PTR); -+int (*_g_EVP_KDF_CTX_set_params)(_EVP_KDF_CTX_PTR, const _OSSL_PARAM_PTR); -+int (*_g_EVP_KDF_derive)(_EVP_KDF_CTX_PTR, unsigned char*, size_t, const _OSSL_PARAM_PTR); -+_EVP_KDF_PTR (*_g_EVP_KDF_fetch)(_OSSL_LIB_CTX_PTR, const char*, const char*); -+void (*_g_EVP_KDF_free)(_EVP_KDF_PTR); -+_EVP_KEYMGMT_PTR (*_g_EVP_KEYMGMT_fetch)(_OSSL_LIB_CTX_PTR, const char*, const char*); -+void (*_g_EVP_KEYMGMT_free)(_EVP_KEYMGMT_PTR); -+_EVP_MAC_CTX_PTR (*_g_EVP_MAC_CTX_dup)(const _EVP_MAC_CTX_PTR); -+void (*_g_EVP_MAC_CTX_free)(_EVP_MAC_CTX_PTR); -+_EVP_MAC_CTX_PTR (*_g_EVP_MAC_CTX_new)(_EVP_MAC_PTR); -+int (*_g_EVP_MAC_CTX_set_params)(_EVP_MAC_CTX_PTR, const _OSSL_PARAM_PTR); -+_EVP_MAC_PTR (*_g_EVP_MAC_fetch)(_OSSL_LIB_CTX_PTR, const char*, const char*); -+int (*_g_EVP_MAC_final)(_EVP_MAC_CTX_PTR, unsigned char*, size_t*, size_t); -+int (*_g_EVP_MAC_init)(_EVP_MAC_CTX_PTR, const unsigned char*, size_t, const _OSSL_PARAM_PTR); -+int (*_g_EVP_MAC_update)(_EVP_MAC_CTX_PTR, const unsigned char*, size_t); -+int (*_g_EVP_MD_CTX_copy_ex)(_EVP_MD_CTX_PTR, const _EVP_MD_CTX_PTR); -+int (*_g_EVP_MD_CTX_ctrl)(_EVP_MD_CTX_PTR, int, int, void*); -+void (*_g_EVP_MD_CTX_free)(_EVP_MD_CTX_PTR); -+int (*_g_EVP_MD_CTX_get_params)(_EVP_MD_CTX_PTR, _OSSL_PARAM_PTR); -+const _OSSL_PARAM_PTR (*_g_EVP_MD_CTX_gettable_params)(_EVP_MD_CTX_PTR); -+_EVP_MD_CTX_PTR (*_g_EVP_MD_CTX_new)(void); -+int (*_g_EVP_MD_CTX_set_params)(_EVP_MD_CTX_PTR, const _OSSL_PARAM_PTR); -+const _OSSL_PARAM_PTR (*_g_EVP_MD_CTX_settable_params)(_EVP_MD_CTX_PTR); -+_EVP_MD_PTR (*_g_EVP_MD_fetch)(_OSSL_LIB_CTX_PTR, const char*, const char*); -+void (*_g_EVP_MD_free)(_EVP_MD_PTR); -+const char* (*_g_EVP_MD_get0_name)(const _EVP_MD_PTR); -+const _OSSL_PROVIDER_PTR (*_g_EVP_MD_get0_provider)(const _EVP_MD_PTR); -+int (*_g_EVP_MD_get_block_size)(const _EVP_MD_PTR); -+int (*_g_EVP_MD_get_size)(const _EVP_MD_PTR); -+int (*_g_EVP_MD_get_type)(const _EVP_MD_PTR); -+int (*_g_EVP_PKEY_CTX_add1_hkdf_info)(_EVP_PKEY_CTX_PTR, const unsigned char*, int); -+int (*_g_EVP_PKEY_CTX_ctrl)(_EVP_PKEY_CTX_PTR, int, int, int, int, void*); -+void (*_g_EVP_PKEY_CTX_free)(_EVP_PKEY_CTX_PTR); -+_EVP_PKEY_CTX_PTR (*_g_EVP_PKEY_CTX_new)(_EVP_PKEY_PTR, _ENGINE_PTR); -+_EVP_PKEY_CTX_PTR (*_g_EVP_PKEY_CTX_new_from_pkey)(_OSSL_LIB_CTX_PTR, _EVP_PKEY_PTR, const char*); -+_EVP_PKEY_CTX_PTR (*_g_EVP_PKEY_CTX_new_id)(int, _ENGINE_PTR); -+int (*_g_EVP_PKEY_CTX_set0_rsa_oaep_label)(_EVP_PKEY_CTX_PTR, unsigned char*, int); -+int (*_g_EVP_PKEY_CTX_set1_hkdf_key)(_EVP_PKEY_CTX_PTR, const unsigned char*, int); -+int (*_g_EVP_PKEY_CTX_set1_hkdf_salt)(_EVP_PKEY_CTX_PTR, const unsigned char*, int); -+int (*_g_EVP_PKEY_CTX_set_hkdf_md)(_EVP_PKEY_CTX_PTR, const _EVP_MD_PTR); -+int (*_g_EVP_PKEY_CTX_set_hkdf_mode)(_EVP_PKEY_CTX_PTR, int); -+int (*_g_EVP_PKEY_CTX_set_params)(_EVP_PKEY_CTX_PTR, const _OSSL_PARAM_PTR); -+_EVP_PKEY_PTR (*_g_EVP_PKEY_Q_keygen)(_OSSL_LIB_CTX_PTR, const char*, const char*, ...); -+int (*_g_EVP_PKEY_assign)(_EVP_PKEY_PTR, int, void*); -+int (*_g_EVP_PKEY_decapsulate)(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_decapsulate_init)(_EVP_PKEY_CTX_PTR, const _OSSL_PARAM_PTR); -+int (*_g_EVP_PKEY_decrypt)(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_decrypt_init)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_derive)(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*); -+int (*_g_EVP_PKEY_derive_init)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_derive_set_peer)(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR); -+int (*_g_EVP_PKEY_encapsulate)(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, unsigned char*, size_t*); -+int (*_g_EVP_PKEY_encapsulate_init)(_EVP_PKEY_CTX_PTR, const _OSSL_PARAM_PTR); -+int (*_g_EVP_PKEY_encrypt)(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_encrypt_init)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_eq)(const _EVP_PKEY_PTR, const _EVP_PKEY_PTR); -+void (*_g_EVP_PKEY_free)(_EVP_PKEY_PTR); -+int (*_g_EVP_PKEY_fromdata)(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR*, int, _OSSL_PARAM_PTR); -+int (*_g_EVP_PKEY_fromdata_init)(_EVP_PKEY_CTX_PTR); -+_DSA_PTR (*_g_EVP_PKEY_get0_DSA)(_EVP_PKEY_PTR); -+_EC_KEY_PTR (*_g_EVP_PKEY_get0_EC_KEY)(_EVP_PKEY_PTR); -+_RSA_PTR (*_g_EVP_PKEY_get1_RSA)(_EVP_PKEY_PTR); -+size_t (*_g_EVP_PKEY_get1_encoded_public_key)(_EVP_PKEY_PTR, unsigned char**); -+int (*_g_EVP_PKEY_get_bits)(const _EVP_PKEY_PTR); -+int (*_g_EVP_PKEY_get_bn_param)(const _EVP_PKEY_PTR, const char*, _BIGNUM_PTR*); -+int (*_g_EVP_PKEY_get_octet_string_param)(const _EVP_PKEY_PTR, const char*, unsigned char*, size_t, size_t*); -+int (*_g_EVP_PKEY_get_raw_private_key)(const _EVP_PKEY_PTR, unsigned char*, size_t*); -+int (*_g_EVP_PKEY_get_raw_public_key)(const _EVP_PKEY_PTR, unsigned char*, size_t*); -+int (*_g_EVP_PKEY_get_size)(const _EVP_PKEY_PTR); -+int (*_g_EVP_PKEY_keygen)(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR*); -+int (*_g_EVP_PKEY_keygen_init)(_EVP_PKEY_CTX_PTR); -+_EVP_PKEY_PTR (*_g_EVP_PKEY_new)(void); -+_EVP_PKEY_PTR (*_g_EVP_PKEY_new_raw_private_key)(int, _ENGINE_PTR, const unsigned char*, size_t); -+_EVP_PKEY_PTR (*_g_EVP_PKEY_new_raw_public_key)(int, _ENGINE_PTR, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_paramgen)(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR*); -+int (*_g_EVP_PKEY_paramgen_init)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_private_check)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_public_check_quick)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_set1_EC_KEY)(_EVP_PKEY_PTR, _EC_KEY_PTR); -+int (*_g_EVP_PKEY_set1_encoded_public_key)(_EVP_PKEY_PTR, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_sign)(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_sign_init)(_EVP_PKEY_CTX_PTR); -+int (*_g_EVP_PKEY_up_ref)(_EVP_PKEY_PTR); -+int (*_g_EVP_PKEY_verify)(_EVP_PKEY_CTX_PTR, const unsigned char*, size_t, const unsigned char*, size_t); -+int (*_g_EVP_PKEY_verify_init)(_EVP_PKEY_CTX_PTR); -+_EVP_SIGNATURE_PTR (*_g_EVP_SIGNATURE_fetch)(_OSSL_LIB_CTX_PTR, const char*, const char*); -+void (*_g_EVP_SIGNATURE_free)(_EVP_SIGNATURE_PTR); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_128_cbc)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_128_ctr)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_128_ecb)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_128_gcm)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_192_cbc)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_192_ctr)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_192_ecb)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_192_gcm)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_256_cbc)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_256_ctr)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_256_ecb)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_aes_256_gcm)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_chacha20_poly1305)(void); -+int (*_g_EVP_default_properties_enable_fips)(_OSSL_LIB_CTX_PTR, int); -+int (*_g_EVP_default_properties_is_fips_enabled)(_OSSL_LIB_CTX_PTR); -+const _EVP_CIPHER_PTR (*_g_EVP_des_cbc)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_des_ecb)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_des_ede3_cbc)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_des_ede3_ecb)(void); -+const _EVP_MD_PTR (*_g_EVP_md4)(void); -+const _EVP_MD_PTR (*_g_EVP_md5)(void); -+const _EVP_MD_PTR (*_g_EVP_md5_sha1)(void); -+const _EVP_CIPHER_PTR (*_g_EVP_rc4)(void); -+const _EVP_MD_PTR (*_g_EVP_ripemd160)(void); -+const _EVP_MD_PTR (*_g_EVP_sha1)(void); -+const _EVP_MD_PTR (*_g_EVP_sha224)(void); -+const _EVP_MD_PTR (*_g_EVP_sha256)(void); -+const _EVP_MD_PTR (*_g_EVP_sha384)(void); -+const _EVP_MD_PTR (*_g_EVP_sha3_224)(void); -+const _EVP_MD_PTR (*_g_EVP_sha3_256)(void); -+const _EVP_MD_PTR (*_g_EVP_sha3_384)(void); -+const _EVP_MD_PTR (*_g_EVP_sha3_512)(void); -+const _EVP_MD_PTR (*_g_EVP_sha512)(void); -+const _EVP_MD_PTR (*_g_EVP_sha512_224)(void); -+const _EVP_MD_PTR (*_g_EVP_sha512_256)(void); -+int (*_g_FIPS_mode)(void); -+int (*_g_FIPS_mode_set)(int); -+int (*_g_HMAC_CTX_copy)(_HMAC_CTX_PTR, _HMAC_CTX_PTR); -+void (*_g_HMAC_CTX_free)(_HMAC_CTX_PTR); -+_HMAC_CTX_PTR (*_g_HMAC_CTX_new)(void); -+int (*_g_HMAC_Final)(_HMAC_CTX_PTR, unsigned char*, unsigned int*); -+int (*_g_HMAC_Init_ex)(_HMAC_CTX_PTR, const unsigned char*, int, const _EVP_MD_PTR, _ENGINE_PTR); -+int (*_g_HMAC_Update)(_HMAC_CTX_PTR, const unsigned char*, size_t); -+const char* (*_g_OBJ_nid2sn)(int); -+void (*_g_OPENSSL_init)(void); -+int (*_g_OPENSSL_init_crypto)(uint64_t, const _OPENSSL_INIT_SETTINGS_PTR); -+unsigned int (*_g_OPENSSL_version_major)(void); -+unsigned int (*_g_OPENSSL_version_minor)(void); -+unsigned int (*_g_OPENSSL_version_patch)(void); -+void (*_g_OSSL_PARAM_BLD_free)(_OSSL_PARAM_BLD_PTR); -+_OSSL_PARAM_BLD_PTR (*_g_OSSL_PARAM_BLD_new)(void); -+int (*_g_OSSL_PARAM_BLD_push_BN)(_OSSL_PARAM_BLD_PTR, const char*, const _BIGNUM_PTR); -+int (*_g_OSSL_PARAM_BLD_push_int32)(_OSSL_PARAM_BLD_PTR, const char*, int32_t); -+int (*_g_OSSL_PARAM_BLD_push_octet_string)(_OSSL_PARAM_BLD_PTR, const char*, const unsigned char*, size_t); -+int (*_g_OSSL_PARAM_BLD_push_utf8_string)(_OSSL_PARAM_BLD_PTR, const char*, const char*, size_t); -+_OSSL_PARAM_PTR (*_g_OSSL_PARAM_BLD_to_param)(_OSSL_PARAM_BLD_PTR); -+void (*_g_OSSL_PARAM_free)(_OSSL_PARAM_PTR); -+const _OSSL_PARAM_PTR (*_g_OSSL_PARAM_locate_const)(const _OSSL_PARAM_PTR, const char*); -+int (*_g_OSSL_PROVIDER_available)(_OSSL_LIB_CTX_PTR, const char*); -+const char* (*_g_OSSL_PROVIDER_get0_name)(const _OSSL_PROVIDER_PTR); -+_OSSL_PROVIDER_PTR (*_g_OSSL_PROVIDER_try_load)(_OSSL_LIB_CTX_PTR, const char*, int); -+const char* (*_g_OpenSSL_version)(int); -+unsigned long (*_g_OpenSSL_version_num)(void); -+int (*_g_PKCS5_PBKDF2_HMAC)(const char*, int, const unsigned char*, int, int, const _EVP_MD_PTR, int, unsigned char*); -+int (*_g_RAND_bytes)(unsigned char*, int); -+int (*_g_RAND_bytes_ex)(_OSSL_LIB_CTX_PTR, unsigned char*, size_t, unsigned int); -+void (*_g_RSA_free)(_RSA_PTR); -+void (*_g_RSA_get0_crt_params)(const _RSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+void (*_g_RSA_get0_factors)(const _RSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+void (*_g_RSA_get0_key)(const _RSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+_RSA_PTR (*_g_RSA_new)(void); -+int (*_g_RSA_set0_crt_params)(_RSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BIGNUM_PTR); -+int (*_g_RSA_set0_factors)(_RSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR); -+int (*_g_RSA_set0_key)(_RSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BIGNUM_PTR); -+ -+#define __mkcgo__dlsym_nocheck(varname, funcname) _g_##varname = (typeof(_g_##varname))dlsym(handle, #funcname); -+ -+#define __mkcgo__dlsym(name) __mkcgo__dlsym2(name, name) -+ -+#define __mkcgo__dlsym2(varname, funcname) \ -+ __mkcgo__dlsym_nocheck(varname, funcname) \ -+ if (_g_##varname == NULL) { \ -+ fprintf(stderr, "Cannot get required symbol " #funcname "\n"); \ -+ abort(); \ -+ } -+ -+void __mkcgo_load_(void* handle) { -+ __mkcgo__dlsym(BIO_ctrl) -+ __mkcgo__dlsym(BIO_free) -+ __mkcgo__dlsym(BIO_new) -+ __mkcgo__dlsym(BIO_s_mem) -+ __mkcgo__dlsym(BN_bin2bn) -+ __mkcgo__dlsym(BN_bn2binpad) -+ __mkcgo__dlsym(BN_bn2lebinpad) -+ __mkcgo__dlsym(BN_clear) -+ __mkcgo__dlsym(BN_clear_free) -+ __mkcgo__dlsym(BN_free) -+ __mkcgo__dlsym(BN_lebin2bn) -+ __mkcgo__dlsym(BN_new) -+ __mkcgo__dlsym(BN_num_bits) -+ __mkcgo__dlsym(CRYPTO_free) -+ __mkcgo__dlsym(CRYPTO_malloc) -+ __mkcgo__dlsym(EC_GROUP_free) -+ __mkcgo__dlsym(EC_GROUP_new_by_curve_name) -+ __mkcgo__dlsym(EC_POINT_free) -+ __mkcgo__dlsym(EC_POINT_mul) -+ __mkcgo__dlsym(EC_POINT_new) -+ __mkcgo__dlsym(EC_POINT_oct2point) -+ __mkcgo__dlsym(EC_POINT_point2oct) -+ __mkcgo__dlsym(ERR_peek_error) -+ __mkcgo__dlsym(ERR_print_errors) -+ __mkcgo__dlsym(EVP_CIPHER_CTX_ctrl) -+ __mkcgo__dlsym(EVP_CIPHER_CTX_free) -+ __mkcgo__dlsym(EVP_CIPHER_CTX_new) -+ __mkcgo__dlsym(EVP_CIPHER_CTX_set_key_length) -+ __mkcgo__dlsym(EVP_CIPHER_CTX_set_padding) -+ __mkcgo__dlsym(EVP_CipherInit_ex) -+ __mkcgo__dlsym(EVP_CipherUpdate) -+ __mkcgo__dlsym(EVP_DecryptFinal_ex) -+ __mkcgo__dlsym(EVP_DecryptInit_ex) -+ __mkcgo__dlsym(EVP_DecryptUpdate) -+ __mkcgo__dlsym(EVP_Digest) -+ __mkcgo__dlsym(EVP_DigestFinal_ex) -+ __mkcgo__dlsym(EVP_DigestInit) -+ __mkcgo__dlsym(EVP_DigestInit_ex) -+ __mkcgo__dlsym(EVP_DigestSign) -+ __mkcgo__dlsym(EVP_DigestSignFinal) -+ __mkcgo__dlsym(EVP_DigestSignInit) -+ __mkcgo__dlsym(EVP_DigestUpdate) -+ __mkcgo__dlsym(EVP_DigestVerify) -+ __mkcgo__dlsym(EVP_DigestVerifyFinal) -+ __mkcgo__dlsym(EVP_DigestVerifyInit) -+ __mkcgo__dlsym(EVP_EncryptFinal_ex) -+ __mkcgo__dlsym(EVP_EncryptInit_ex) -+ __mkcgo__dlsym(EVP_EncryptUpdate) -+ __mkcgo__dlsym(EVP_MD_CTX_copy_ex) -+ __mkcgo__dlsym(EVP_MD_CTX_ctrl) -+ __mkcgo__dlsym(EVP_MD_CTX_free) -+ __mkcgo__dlsym(EVP_MD_CTX_new) -+ __mkcgo__dlsym(EVP_PKEY_CTX_ctrl) -+ __mkcgo__dlsym(EVP_PKEY_CTX_free) -+ __mkcgo__dlsym(EVP_PKEY_CTX_new) -+ __mkcgo__dlsym(EVP_PKEY_CTX_new_id) -+ __mkcgo__dlsym(EVP_PKEY_decrypt) -+ __mkcgo__dlsym(EVP_PKEY_decrypt_init) -+ __mkcgo__dlsym(EVP_PKEY_derive) -+ __mkcgo__dlsym(EVP_PKEY_derive_init) -+ __mkcgo__dlsym(EVP_PKEY_derive_set_peer) -+ __mkcgo__dlsym(EVP_PKEY_encrypt) -+ __mkcgo__dlsym(EVP_PKEY_encrypt_init) -+ __mkcgo__dlsym(EVP_PKEY_free) -+ __mkcgo__dlsym(EVP_PKEY_get_raw_private_key) -+ __mkcgo__dlsym(EVP_PKEY_get_raw_public_key) -+ __mkcgo__dlsym(EVP_PKEY_keygen) -+ __mkcgo__dlsym(EVP_PKEY_keygen_init) -+ __mkcgo__dlsym(EVP_PKEY_new) -+ __mkcgo__dlsym(EVP_PKEY_new_raw_private_key) -+ __mkcgo__dlsym(EVP_PKEY_new_raw_public_key) -+ __mkcgo__dlsym(EVP_PKEY_paramgen) -+ __mkcgo__dlsym(EVP_PKEY_paramgen_init) -+ __mkcgo__dlsym(EVP_PKEY_sign) -+ __mkcgo__dlsym(EVP_PKEY_sign_init) -+ __mkcgo__dlsym(EVP_PKEY_up_ref) -+ __mkcgo__dlsym(EVP_PKEY_verify) -+ __mkcgo__dlsym(EVP_PKEY_verify_init) -+ __mkcgo__dlsym(EVP_aes_128_cbc) -+ __mkcgo__dlsym(EVP_aes_128_ctr) -+ __mkcgo__dlsym(EVP_aes_128_ecb) -+ __mkcgo__dlsym(EVP_aes_128_gcm) -+ __mkcgo__dlsym(EVP_aes_192_cbc) -+ __mkcgo__dlsym(EVP_aes_192_ctr) -+ __mkcgo__dlsym(EVP_aes_192_ecb) -+ __mkcgo__dlsym(EVP_aes_192_gcm) -+ __mkcgo__dlsym(EVP_aes_256_cbc) -+ __mkcgo__dlsym(EVP_aes_256_ctr) -+ __mkcgo__dlsym(EVP_aes_256_ecb) -+ __mkcgo__dlsym(EVP_aes_256_gcm) -+ __mkcgo__dlsym_nocheck(EVP_chacha20_poly1305, EVP_chacha20_poly1305) -+ __mkcgo__dlsym(EVP_des_cbc) -+ __mkcgo__dlsym(EVP_des_ecb) -+ __mkcgo__dlsym(EVP_des_ede3_cbc) -+ __mkcgo__dlsym(EVP_des_ede3_ecb) -+ __mkcgo__dlsym(EVP_md4) -+ __mkcgo__dlsym(EVP_md5) -+ __mkcgo__dlsym(EVP_md5_sha1) -+ __mkcgo__dlsym(EVP_rc4) -+ __mkcgo__dlsym(EVP_ripemd160) -+ __mkcgo__dlsym(EVP_sha1) -+ __mkcgo__dlsym(EVP_sha224) -+ __mkcgo__dlsym(EVP_sha256) -+ __mkcgo__dlsym(EVP_sha384) -+ __mkcgo__dlsym(EVP_sha3_224) -+ __mkcgo__dlsym(EVP_sha3_256) -+ __mkcgo__dlsym(EVP_sha3_384) -+ __mkcgo__dlsym(EVP_sha3_512) -+ __mkcgo__dlsym(EVP_sha512) -+ __mkcgo__dlsym(EVP_sha512_224) -+ __mkcgo__dlsym(EVP_sha512_256) -+ __mkcgo__dlsym(OBJ_nid2sn) -+ __mkcgo__dlsym(OPENSSL_init) -+ __mkcgo__dlsym(OPENSSL_init_crypto) -+ __mkcgo__dlsym(OpenSSL_version) -+} -+ -+void __mkcgo_unload_() { -+ _g_BIO_ctrl = NULL; -+ _g_BIO_free = NULL; -+ _g_BIO_new = NULL; -+ _g_BIO_s_mem = NULL; -+ _g_BN_bin2bn = NULL; -+ _g_BN_bn2binpad = NULL; -+ _g_BN_bn2lebinpad = NULL; -+ _g_BN_clear = NULL; -+ _g_BN_clear_free = NULL; -+ _g_BN_free = NULL; -+ _g_BN_lebin2bn = NULL; -+ _g_BN_new = NULL; -+ _g_BN_num_bits = NULL; -+ _g_CRYPTO_free = NULL; -+ _g_CRYPTO_malloc = NULL; -+ _g_EC_GROUP_free = NULL; -+ _g_EC_GROUP_new_by_curve_name = NULL; -+ _g_EC_POINT_free = NULL; -+ _g_EC_POINT_mul = NULL; -+ _g_EC_POINT_new = NULL; -+ _g_EC_POINT_oct2point = NULL; -+ _g_EC_POINT_point2oct = NULL; -+ _g_ERR_peek_error = NULL; -+ _g_ERR_print_errors = NULL; -+ _g_EVP_CIPHER_CTX_ctrl = NULL; -+ _g_EVP_CIPHER_CTX_free = NULL; -+ _g_EVP_CIPHER_CTX_new = NULL; -+ _g_EVP_CIPHER_CTX_set_key_length = NULL; -+ _g_EVP_CIPHER_CTX_set_padding = NULL; -+ _g_EVP_CipherInit_ex = NULL; -+ _g_EVP_CipherUpdate = NULL; -+ _g_EVP_DecryptFinal_ex = NULL; -+ _g_EVP_DecryptInit_ex = NULL; -+ _g_EVP_DecryptUpdate = NULL; -+ _g_EVP_Digest = NULL; -+ _g_EVP_DigestFinal_ex = NULL; -+ _g_EVP_DigestInit = NULL; -+ _g_EVP_DigestInit_ex = NULL; -+ _g_EVP_DigestSign = NULL; -+ _g_EVP_DigestSignFinal = NULL; -+ _g_EVP_DigestSignInit = NULL; -+ _g_EVP_DigestUpdate = NULL; -+ _g_EVP_DigestVerify = NULL; -+ _g_EVP_DigestVerifyFinal = NULL; -+ _g_EVP_DigestVerifyInit = NULL; -+ _g_EVP_EncryptFinal_ex = NULL; -+ _g_EVP_EncryptInit_ex = NULL; -+ _g_EVP_EncryptUpdate = NULL; -+ _g_EVP_MD_CTX_copy_ex = NULL; -+ _g_EVP_MD_CTX_ctrl = NULL; -+ _g_EVP_MD_CTX_free = NULL; -+ _g_EVP_MD_CTX_new = NULL; -+ _g_EVP_PKEY_CTX_ctrl = NULL; -+ _g_EVP_PKEY_CTX_free = NULL; -+ _g_EVP_PKEY_CTX_new = NULL; -+ _g_EVP_PKEY_CTX_new_id = NULL; -+ _g_EVP_PKEY_decrypt = NULL; -+ _g_EVP_PKEY_decrypt_init = NULL; -+ _g_EVP_PKEY_derive = NULL; -+ _g_EVP_PKEY_derive_init = NULL; -+ _g_EVP_PKEY_derive_set_peer = NULL; -+ _g_EVP_PKEY_encrypt = NULL; -+ _g_EVP_PKEY_encrypt_init = NULL; -+ _g_EVP_PKEY_free = NULL; -+ _g_EVP_PKEY_get_raw_private_key = NULL; -+ _g_EVP_PKEY_get_raw_public_key = NULL; -+ _g_EVP_PKEY_keygen = NULL; -+ _g_EVP_PKEY_keygen_init = NULL; -+ _g_EVP_PKEY_new = NULL; -+ _g_EVP_PKEY_new_raw_private_key = NULL; -+ _g_EVP_PKEY_new_raw_public_key = NULL; -+ _g_EVP_PKEY_paramgen = NULL; -+ _g_EVP_PKEY_paramgen_init = NULL; -+ _g_EVP_PKEY_sign = NULL; -+ _g_EVP_PKEY_sign_init = NULL; -+ _g_EVP_PKEY_up_ref = NULL; -+ _g_EVP_PKEY_verify = NULL; -+ _g_EVP_PKEY_verify_init = NULL; -+ _g_EVP_aes_128_cbc = NULL; -+ _g_EVP_aes_128_ctr = NULL; -+ _g_EVP_aes_128_ecb = NULL; -+ _g_EVP_aes_128_gcm = NULL; -+ _g_EVP_aes_192_cbc = NULL; -+ _g_EVP_aes_192_ctr = NULL; -+ _g_EVP_aes_192_ecb = NULL; -+ _g_EVP_aes_192_gcm = NULL; -+ _g_EVP_aes_256_cbc = NULL; -+ _g_EVP_aes_256_ctr = NULL; -+ _g_EVP_aes_256_ecb = NULL; -+ _g_EVP_aes_256_gcm = NULL; -+ _g_EVP_chacha20_poly1305 = NULL; -+ _g_EVP_des_cbc = NULL; -+ _g_EVP_des_ecb = NULL; -+ _g_EVP_des_ede3_cbc = NULL; -+ _g_EVP_des_ede3_ecb = NULL; -+ _g_EVP_md4 = NULL; -+ _g_EVP_md5 = NULL; -+ _g_EVP_md5_sha1 = NULL; -+ _g_EVP_rc4 = NULL; -+ _g_EVP_ripemd160 = NULL; -+ _g_EVP_sha1 = NULL; -+ _g_EVP_sha224 = NULL; -+ _g_EVP_sha256 = NULL; -+ _g_EVP_sha384 = NULL; -+ _g_EVP_sha3_224 = NULL; -+ _g_EVP_sha3_256 = NULL; -+ _g_EVP_sha3_384 = NULL; -+ _g_EVP_sha3_512 = NULL; -+ _g_EVP_sha512 = NULL; -+ _g_EVP_sha512_224 = NULL; -+ _g_EVP_sha512_256 = NULL; -+ _g_OBJ_nid2sn = NULL; -+ _g_OPENSSL_init = NULL; -+ _g_OPENSSL_init_crypto = NULL; -+ _g_OpenSSL_version = NULL; -+} -+ -+void __mkcgo_load_3(void* handle) { -+ __mkcgo__dlsym(EC_POINT_set_affine_coordinates) -+ __mkcgo__dlsym(EVP_CIPHER_fetch) -+ __mkcgo__dlsym(EVP_CIPHER_get0_name) -+ __mkcgo__dlsym(EVP_CIPHER_get_block_size) -+ __mkcgo__dlsym(EVP_CipherInit_ex2) -+ __mkcgo__dlsym(EVP_KDF_CTX_free) -+ __mkcgo__dlsym(EVP_KDF_CTX_get_kdf_size) -+ __mkcgo__dlsym(EVP_KDF_CTX_new) -+ __mkcgo__dlsym(EVP_KDF_CTX_set_params) -+ __mkcgo__dlsym(EVP_KDF_derive) -+ __mkcgo__dlsym(EVP_KDF_fetch) -+ __mkcgo__dlsym(EVP_KDF_free) -+ __mkcgo__dlsym_nocheck(EVP_KEYMGMT_fetch, EVP_KEYMGMT_fetch) -+ __mkcgo__dlsym(EVP_KEYMGMT_free) -+ __mkcgo__dlsym(EVP_MAC_CTX_dup) -+ __mkcgo__dlsym(EVP_MAC_CTX_free) -+ __mkcgo__dlsym(EVP_MAC_CTX_new) -+ __mkcgo__dlsym(EVP_MAC_CTX_set_params) -+ __mkcgo__dlsym(EVP_MAC_fetch) -+ __mkcgo__dlsym(EVP_MAC_final) -+ __mkcgo__dlsym(EVP_MAC_init) -+ __mkcgo__dlsym(EVP_MAC_update) -+ __mkcgo__dlsym(EVP_MD_CTX_get_params) -+ __mkcgo__dlsym(EVP_MD_CTX_gettable_params) -+ __mkcgo__dlsym(EVP_MD_CTX_set_params) -+ __mkcgo__dlsym(EVP_MD_CTX_settable_params) -+ __mkcgo__dlsym(EVP_MD_fetch) -+ __mkcgo__dlsym(EVP_MD_free) -+ __mkcgo__dlsym(EVP_MD_get0_name) -+ __mkcgo__dlsym(EVP_MD_get0_provider) -+ __mkcgo__dlsym(EVP_MD_get_block_size) -+ __mkcgo__dlsym(EVP_MD_get_size) -+ __mkcgo__dlsym(EVP_MD_get_type) -+ __mkcgo__dlsym(EVP_PKEY_CTX_add1_hkdf_info) -+ __mkcgo__dlsym(EVP_PKEY_CTX_new_from_pkey) -+ __mkcgo__dlsym(EVP_PKEY_CTX_set0_rsa_oaep_label) -+ __mkcgo__dlsym(EVP_PKEY_CTX_set1_hkdf_key) -+ __mkcgo__dlsym(EVP_PKEY_CTX_set1_hkdf_salt) -+ __mkcgo__dlsym(EVP_PKEY_CTX_set_hkdf_md) -+ __mkcgo__dlsym(EVP_PKEY_CTX_set_hkdf_mode) -+ __mkcgo__dlsym(EVP_PKEY_CTX_set_params) -+ __mkcgo__dlsym(EVP_PKEY_Q_keygen) -+ __mkcgo__dlsym(EVP_PKEY_decapsulate) -+ __mkcgo__dlsym(EVP_PKEY_decapsulate_init) -+ __mkcgo__dlsym(EVP_PKEY_encapsulate) -+ __mkcgo__dlsym(EVP_PKEY_encapsulate_init) -+ __mkcgo__dlsym(EVP_PKEY_eq) -+ __mkcgo__dlsym(EVP_PKEY_fromdata) -+ __mkcgo__dlsym(EVP_PKEY_fromdata_init) -+ __mkcgo__dlsym(EVP_PKEY_get1_encoded_public_key) -+ __mkcgo__dlsym(EVP_PKEY_get_bits) -+ __mkcgo__dlsym(EVP_PKEY_get_bn_param) -+ __mkcgo__dlsym(EVP_PKEY_get_octet_string_param) -+ __mkcgo__dlsym(EVP_PKEY_get_size) -+ __mkcgo__dlsym(EVP_PKEY_private_check) -+ __mkcgo__dlsym(EVP_PKEY_public_check_quick) -+ __mkcgo__dlsym(EVP_PKEY_set1_encoded_public_key) -+ __mkcgo__dlsym(EVP_SIGNATURE_fetch) -+ __mkcgo__dlsym(EVP_SIGNATURE_free) -+ __mkcgo__dlsym(EVP_default_properties_enable_fips) -+ __mkcgo__dlsym(EVP_default_properties_is_fips_enabled) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_free) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_new) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_push_BN) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_push_int32) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_push_octet_string) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_push_utf8_string) -+ __mkcgo__dlsym(OSSL_PARAM_BLD_to_param) -+ __mkcgo__dlsym(OSSL_PARAM_free) -+ __mkcgo__dlsym(OSSL_PARAM_locate_const) -+ __mkcgo__dlsym(OSSL_PROVIDER_available) -+ __mkcgo__dlsym(OSSL_PROVIDER_get0_name) -+ __mkcgo__dlsym(OSSL_PROVIDER_try_load) -+ __mkcgo__dlsym(RAND_bytes_ex) -+} -+ -+void __mkcgo_unload_3() { -+ _g_EC_POINT_set_affine_coordinates = NULL; -+ _g_EVP_CIPHER_fetch = NULL; -+ _g_EVP_CIPHER_get0_name = NULL; -+ _g_EVP_CIPHER_get_block_size = NULL; -+ _g_EVP_CipherInit_ex2 = NULL; -+ _g_EVP_KDF_CTX_free = NULL; -+ _g_EVP_KDF_CTX_get_kdf_size = NULL; -+ _g_EVP_KDF_CTX_new = NULL; -+ _g_EVP_KDF_CTX_set_params = NULL; -+ _g_EVP_KDF_derive = NULL; -+ _g_EVP_KDF_fetch = NULL; -+ _g_EVP_KDF_free = NULL; -+ _g_EVP_KEYMGMT_fetch = NULL; -+ _g_EVP_KEYMGMT_free = NULL; -+ _g_EVP_MAC_CTX_dup = NULL; -+ _g_EVP_MAC_CTX_free = NULL; -+ _g_EVP_MAC_CTX_new = NULL; -+ _g_EVP_MAC_CTX_set_params = NULL; -+ _g_EVP_MAC_fetch = NULL; -+ _g_EVP_MAC_final = NULL; -+ _g_EVP_MAC_init = NULL; -+ _g_EVP_MAC_update = NULL; -+ _g_EVP_MD_CTX_get_params = NULL; -+ _g_EVP_MD_CTX_gettable_params = NULL; -+ _g_EVP_MD_CTX_set_params = NULL; -+ _g_EVP_MD_CTX_settable_params = NULL; -+ _g_EVP_MD_fetch = NULL; -+ _g_EVP_MD_free = NULL; -+ _g_EVP_MD_get0_name = NULL; -+ _g_EVP_MD_get0_provider = NULL; -+ _g_EVP_MD_get_block_size = NULL; -+ _g_EVP_MD_get_size = NULL; -+ _g_EVP_MD_get_type = NULL; -+ _g_EVP_PKEY_CTX_add1_hkdf_info = NULL; -+ _g_EVP_PKEY_CTX_new_from_pkey = NULL; -+ _g_EVP_PKEY_CTX_set0_rsa_oaep_label = NULL; -+ _g_EVP_PKEY_CTX_set1_hkdf_key = NULL; -+ _g_EVP_PKEY_CTX_set1_hkdf_salt = NULL; -+ _g_EVP_PKEY_CTX_set_hkdf_md = NULL; -+ _g_EVP_PKEY_CTX_set_hkdf_mode = NULL; -+ _g_EVP_PKEY_CTX_set_params = NULL; -+ _g_EVP_PKEY_Q_keygen = NULL; -+ _g_EVP_PKEY_decapsulate = NULL; -+ _g_EVP_PKEY_decapsulate_init = NULL; -+ _g_EVP_PKEY_encapsulate = NULL; -+ _g_EVP_PKEY_encapsulate_init = NULL; -+ _g_EVP_PKEY_eq = NULL; -+ _g_EVP_PKEY_fromdata = NULL; -+ _g_EVP_PKEY_fromdata_init = NULL; -+ _g_EVP_PKEY_get1_encoded_public_key = NULL; -+ _g_EVP_PKEY_get_bits = NULL; -+ _g_EVP_PKEY_get_bn_param = NULL; -+ _g_EVP_PKEY_get_octet_string_param = NULL; -+ _g_EVP_PKEY_get_size = NULL; -+ _g_EVP_PKEY_private_check = NULL; -+ _g_EVP_PKEY_public_check_quick = NULL; -+ _g_EVP_PKEY_set1_encoded_public_key = NULL; -+ _g_EVP_SIGNATURE_fetch = NULL; -+ _g_EVP_SIGNATURE_free = NULL; -+ _g_EVP_default_properties_enable_fips = NULL; -+ _g_EVP_default_properties_is_fips_enabled = NULL; -+ _g_OSSL_PARAM_BLD_free = NULL; -+ _g_OSSL_PARAM_BLD_new = NULL; -+ _g_OSSL_PARAM_BLD_push_BN = NULL; -+ _g_OSSL_PARAM_BLD_push_int32 = NULL; -+ _g_OSSL_PARAM_BLD_push_octet_string = NULL; -+ _g_OSSL_PARAM_BLD_push_utf8_string = NULL; -+ _g_OSSL_PARAM_BLD_to_param = NULL; -+ _g_OSSL_PARAM_free = NULL; -+ _g_OSSL_PARAM_locate_const = NULL; -+ _g_OSSL_PROVIDER_available = NULL; -+ _g_OSSL_PROVIDER_get0_name = NULL; -+ _g_OSSL_PROVIDER_try_load = NULL; -+ _g_RAND_bytes_ex = NULL; -+} -+ -+void __mkcgo_load_33(void* handle) { -+ __mkcgo__dlsym(EVP_DigestFinalXOF) -+ __mkcgo__dlsym_nocheck(EVP_DigestSqueeze, EVP_DigestSqueeze) -+} -+ -+void __mkcgo_unload_33() { -+ _g_EVP_DigestFinalXOF = NULL; -+ _g_EVP_DigestSqueeze = NULL; -+} -+ -+void __mkcgo_load_init_1(void* handle) { -+ __mkcgo__dlsym(FIPS_mode) -+ __mkcgo__dlsym(FIPS_mode_set) -+} -+ -+void __mkcgo_unload_init_1() { -+ _g_FIPS_mode = NULL; -+ _g_FIPS_mode_set = NULL; -+} -+ -+void __mkcgo_load_init_3(void* handle) { -+ __mkcgo__dlsym(BIO_ctrl) -+ __mkcgo__dlsym(BIO_free) -+ __mkcgo__dlsym(BIO_new) -+ __mkcgo__dlsym(BIO_s_mem) -+ __mkcgo__dlsym(ERR_print_errors) -+ __mkcgo__dlsym(EVP_MD_fetch) -+ __mkcgo__dlsym(EVP_MD_free) -+ __mkcgo__dlsym(EVP_MD_get0_provider) -+ __mkcgo__dlsym(EVP_default_properties_is_fips_enabled) -+} -+ -+void __mkcgo_unload_init_3() { -+ _g_BIO_ctrl = NULL; -+ _g_BIO_free = NULL; -+ _g_BIO_new = NULL; -+ _g_BIO_s_mem = NULL; -+ _g_ERR_print_errors = NULL; -+ _g_EVP_MD_fetch = NULL; -+ _g_EVP_MD_free = NULL; -+ _g_EVP_MD_get0_provider = NULL; -+ _g_EVP_default_properties_is_fips_enabled = NULL; -+} -+ -+void __mkcgo_load_legacy_1(void* handle) { -+ __mkcgo__dlsym(DSA_free) -+ __mkcgo__dlsym(DSA_generate_key) -+ __mkcgo__dlsym(DSA_get0_key) -+ __mkcgo__dlsym(DSA_get0_pqg) -+ __mkcgo__dlsym(DSA_new) -+ __mkcgo__dlsym(DSA_set0_key) -+ __mkcgo__dlsym(DSA_set0_pqg) -+ __mkcgo__dlsym(EC_KEY_check_key) -+ __mkcgo__dlsym(EC_KEY_free) -+ __mkcgo__dlsym(EC_KEY_get0_group) -+ __mkcgo__dlsym(EC_KEY_get0_private_key) -+ __mkcgo__dlsym(EC_KEY_get0_public_key) -+ __mkcgo__dlsym(EC_KEY_new_by_curve_name) -+ __mkcgo__dlsym(EC_KEY_set_private_key) -+ __mkcgo__dlsym(EC_KEY_set_public_key) -+ __mkcgo__dlsym(EC_KEY_set_public_key_affine_coordinates) -+ __mkcgo__dlsym(EC_POINT_get_affine_coordinates_GFp) -+ __mkcgo__dlsym2(EVP_CIPHER_get_block_size, EVP_CIPHER_block_size) -+ __mkcgo__dlsym2(EVP_MD_get_block_size, EVP_MD_block_size) -+ __mkcgo__dlsym2(EVP_MD_get_size, EVP_MD_size) -+ __mkcgo__dlsym(EVP_PKEY_assign) -+ __mkcgo__dlsym(EVP_PKEY_get0_DSA) -+ __mkcgo__dlsym(EVP_PKEY_get0_EC_KEY) -+ __mkcgo__dlsym(EVP_PKEY_get1_RSA) -+ __mkcgo__dlsym2(EVP_PKEY_get_bits, EVP_PKEY_bits) -+ __mkcgo__dlsym2(EVP_PKEY_get_size, EVP_PKEY_size) -+ __mkcgo__dlsym(EVP_PKEY_set1_EC_KEY) -+ __mkcgo__dlsym(FIPS_mode) -+ __mkcgo__dlsym(FIPS_mode_set) -+ __mkcgo__dlsym(HMAC_CTX_copy) -+ __mkcgo__dlsym(HMAC_CTX_free) -+ __mkcgo__dlsym(HMAC_CTX_new) -+ __mkcgo__dlsym(HMAC_Final) -+ __mkcgo__dlsym(HMAC_Init_ex) -+ __mkcgo__dlsym(HMAC_Update) -+ __mkcgo__dlsym(PKCS5_PBKDF2_HMAC) -+ __mkcgo__dlsym(RAND_bytes) -+ __mkcgo__dlsym(RSA_free) -+ __mkcgo__dlsym(RSA_get0_crt_params) -+ __mkcgo__dlsym(RSA_get0_factors) -+ __mkcgo__dlsym(RSA_get0_key) -+ __mkcgo__dlsym(RSA_new) -+ __mkcgo__dlsym(RSA_set0_crt_params) -+ __mkcgo__dlsym(RSA_set0_factors) -+ __mkcgo__dlsym(RSA_set0_key) -+} -+ -+void __mkcgo_unload_legacy_1() { -+ _g_DSA_free = NULL; -+ _g_DSA_generate_key = NULL; -+ _g_DSA_get0_key = NULL; -+ _g_DSA_get0_pqg = NULL; -+ _g_DSA_new = NULL; -+ _g_DSA_set0_key = NULL; -+ _g_DSA_set0_pqg = NULL; -+ _g_EC_KEY_check_key = NULL; -+ _g_EC_KEY_free = NULL; -+ _g_EC_KEY_get0_group = NULL; -+ _g_EC_KEY_get0_private_key = NULL; -+ _g_EC_KEY_get0_public_key = NULL; -+ _g_EC_KEY_new_by_curve_name = NULL; -+ _g_EC_KEY_set_private_key = NULL; -+ _g_EC_KEY_set_public_key = NULL; -+ _g_EC_KEY_set_public_key_affine_coordinates = NULL; -+ _g_EC_POINT_get_affine_coordinates_GFp = NULL; -+ _g_EVP_CIPHER_get_block_size = NULL; -+ _g_EVP_MD_get_block_size = NULL; -+ _g_EVP_MD_get_size = NULL; -+ _g_EVP_PKEY_assign = NULL; -+ _g_EVP_PKEY_get0_DSA = NULL; -+ _g_EVP_PKEY_get0_EC_KEY = NULL; -+ _g_EVP_PKEY_get1_RSA = NULL; -+ _g_EVP_PKEY_get_bits = NULL; -+ _g_EVP_PKEY_get_size = NULL; -+ _g_EVP_PKEY_set1_EC_KEY = NULL; -+ _g_FIPS_mode = NULL; -+ _g_FIPS_mode_set = NULL; -+ _g_HMAC_CTX_copy = NULL; -+ _g_HMAC_CTX_free = NULL; -+ _g_HMAC_CTX_new = NULL; -+ _g_HMAC_Final = NULL; -+ _g_HMAC_Init_ex = NULL; -+ _g_HMAC_Update = NULL; -+ _g_PKCS5_PBKDF2_HMAC = NULL; -+ _g_RAND_bytes = NULL; -+ _g_RSA_free = NULL; -+ _g_RSA_get0_crt_params = NULL; -+ _g_RSA_get0_factors = NULL; -+ _g_RSA_get0_key = NULL; -+ _g_RSA_new = NULL; -+ _g_RSA_set0_crt_params = NULL; -+ _g_RSA_set0_factors = NULL; -+ _g_RSA_set0_key = NULL; -+} -+ -+void __mkcgo_load_version(void* handle) { -+ __mkcgo__dlsym_nocheck(OPENSSL_version_major, OPENSSL_version_major) -+ __mkcgo__dlsym_nocheck(OPENSSL_version_minor, OPENSSL_version_minor) -+ __mkcgo__dlsym_nocheck(OPENSSL_version_patch, OPENSSL_version_patch) -+ __mkcgo__dlsym_nocheck(OpenSSL_version_num, OpenSSL_version_num) -+} -+ -+void __mkcgo_unload_version() { -+ _g_OPENSSL_version_major = NULL; -+ _g_OPENSSL_version_minor = NULL; -+ _g_OPENSSL_version_patch = NULL; -+ _g_OpenSSL_version_num = NULL; -+} -+ -+long _mkcgo_BIO_ctrl(_BIO_PTR _arg0, int _arg1, long _arg2, void* _arg3) { -+ return _g_BIO_ctrl(_arg0, _arg1, _arg2, _arg3); -+} -+ -+int _mkcgo_BIO_free(_BIO_PTR _arg0) { -+ return _g_BIO_free(_arg0); -+} -+ -+_BIO_PTR _mkcgo_BIO_new(const _BIO_METHOD_PTR _arg0, uintptr_t *_err_state) { -+ _BIO_PTR _ret = _g_BIO_new(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+const _BIO_METHOD_PTR _mkcgo_BIO_s_mem(void) { -+ return _g_BIO_s_mem(); -+} -+ -+_BIGNUM_PTR _mkcgo_BN_bin2bn(const unsigned char* _arg0, int _arg1, _BIGNUM_PTR _arg2, uintptr_t *_err_state) { -+ _BIGNUM_PTR _ret = _g_BN_bin2bn(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_BN_bn2binpad(const _BIGNUM_PTR _arg0, unsigned char* _arg1, int _arg2, uintptr_t *_err_state) { -+ int _ret = _g_BN_bn2binpad(_arg0, _arg1, _arg2); -+ if (_ret == -1) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_BN_bn2lebinpad(const _BIGNUM_PTR _arg0, unsigned char* _arg1, int _arg2, uintptr_t *_err_state) { -+ int _ret = _g_BN_bn2lebinpad(_arg0, _arg1, _arg2); -+ if (_ret == -1) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_BN_clear(_BIGNUM_PTR _arg0) { -+ _g_BN_clear(_arg0); -+} -+ -+void _mkcgo_BN_clear_free(_BIGNUM_PTR _arg0) { -+ _g_BN_clear_free(_arg0); -+} -+ -+void _mkcgo_BN_free(_BIGNUM_PTR _arg0) { -+ _g_BN_free(_arg0); -+} -+ -+_BIGNUM_PTR _mkcgo_BN_lebin2bn(const unsigned char* _arg0, int _arg1, _BIGNUM_PTR _arg2, uintptr_t *_err_state) { -+ _BIGNUM_PTR _ret = _g_BN_lebin2bn(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_BIGNUM_PTR _mkcgo_BN_new(uintptr_t *_err_state) { -+ _BIGNUM_PTR _ret = _g_BN_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_BN_num_bits(const _BIGNUM_PTR _arg0) { -+ return _g_BN_num_bits(_arg0); -+} -+ -+void _mkcgo_CRYPTO_free(void* _arg0, const char* _arg1, int _arg2) { -+ _g_CRYPTO_free(_arg0, _arg1, _arg2); -+} -+ -+void* _mkcgo_CRYPTO_malloc(size_t _arg0, const char* _arg1, int _arg2, uintptr_t *_err_state) { -+ void* _ret = _g_CRYPTO_malloc(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_DSA_free(_DSA_PTR _arg0) { -+ _g_DSA_free(_arg0); -+} -+ -+int _mkcgo_DSA_generate_key(_DSA_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_DSA_generate_key(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_DSA_get0_key(const _DSA_PTR _arg0, const _BIGNUM_PTR* _arg1, const _BIGNUM_PTR* _arg2) { -+ _g_DSA_get0_key(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_DSA_get0_pqg(const _DSA_PTR _arg0, const _BIGNUM_PTR* _arg1, const _BIGNUM_PTR* _arg2, const _BIGNUM_PTR* _arg3) { -+ _g_DSA_get0_pqg(_arg0, _arg1, _arg2, _arg3); -+} -+ -+_DSA_PTR _mkcgo_DSA_new(uintptr_t *_err_state) { -+ _DSA_PTR _ret = _g_DSA_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_DSA_set0_key(_DSA_PTR _arg0, _BIGNUM_PTR _arg1, _BIGNUM_PTR _arg2, uintptr_t *_err_state) { -+ int _ret = _g_DSA_set0_key(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_DSA_set0_pqg(_DSA_PTR _arg0, _BIGNUM_PTR _arg1, _BIGNUM_PTR _arg2, _BIGNUM_PTR _arg3, uintptr_t *_err_state) { -+ int _ret = _g_DSA_set0_pqg(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EC_GROUP_free(_EC_GROUP_PTR _arg0) { -+ _g_EC_GROUP_free(_arg0); -+} -+ -+_EC_GROUP_PTR _mkcgo_EC_GROUP_new_by_curve_name(int _arg0, uintptr_t *_err_state) { -+ _EC_GROUP_PTR _ret = _g_EC_GROUP_new_by_curve_name(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_KEY_check_key(const _EC_KEY_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EC_KEY_check_key(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EC_KEY_free(_EC_KEY_PTR _arg0) { -+ _g_EC_KEY_free(_arg0); -+} -+ -+const _EC_GROUP_PTR _mkcgo_EC_KEY_get0_group(const _EC_KEY_PTR _arg0) { -+ return _g_EC_KEY_get0_group(_arg0); -+} -+ -+const _BIGNUM_PTR _mkcgo_EC_KEY_get0_private_key(const _EC_KEY_PTR _arg0) { -+ return _g_EC_KEY_get0_private_key(_arg0); -+} -+ -+const _EC_POINT_PTR _mkcgo_EC_KEY_get0_public_key(const _EC_KEY_PTR _arg0) { -+ return _g_EC_KEY_get0_public_key(_arg0); -+} -+ -+_EC_KEY_PTR _mkcgo_EC_KEY_new_by_curve_name(int _arg0, uintptr_t *_err_state) { -+ _EC_KEY_PTR _ret = _g_EC_KEY_new_by_curve_name(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_KEY_set_private_key(_EC_KEY_PTR _arg0, const _BIGNUM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EC_KEY_set_private_key(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_KEY_set_public_key(_EC_KEY_PTR _arg0, const _EC_POINT_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EC_KEY_set_public_key(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_KEY_set_public_key_affine_coordinates(_EC_KEY_PTR _arg0, _BIGNUM_PTR _arg1, _BIGNUM_PTR _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EC_KEY_set_public_key_affine_coordinates(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EC_POINT_free(_EC_POINT_PTR _arg0) { -+ _g_EC_POINT_free(_arg0); -+} -+ -+int _mkcgo_EC_POINT_get_affine_coordinates_GFp(const _EC_GROUP_PTR _arg0, const _EC_POINT_PTR _arg1, _BIGNUM_PTR _arg2, _BIGNUM_PTR _arg3, _BN_CTX_PTR _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EC_POINT_get_affine_coordinates_GFp(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_POINT_mul(const _EC_GROUP_PTR _arg0, _EC_POINT_PTR _arg1, const _BIGNUM_PTR _arg2, const _EC_POINT_PTR _arg3, const _BIGNUM_PTR _arg4, _BN_CTX_PTR _arg5, uintptr_t *_err_state) { -+ int _ret = _g_EC_POINT_mul(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EC_POINT_PTR _mkcgo_EC_POINT_new(const _EC_GROUP_PTR _arg0, uintptr_t *_err_state) { -+ _EC_POINT_PTR _ret = _g_EC_POINT_new(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_POINT_oct2point(const _EC_GROUP_PTR _arg0, _EC_POINT_PTR _arg1, const unsigned char* _arg2, size_t _arg3, _BN_CTX_PTR _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EC_POINT_oct2point(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+size_t _mkcgo_EC_POINT_point2oct(const _EC_GROUP_PTR _arg0, const _EC_POINT_PTR _arg1, point_conversion_form_t _arg2, unsigned char* _arg3, size_t _arg4, _BN_CTX_PTR _arg5, uintptr_t *_err_state) { -+ size_t _ret = _g_EC_POINT_point2oct(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EC_POINT_set_affine_coordinates(const _EC_GROUP_PTR _arg0, _EC_POINT_PTR _arg1, const _BIGNUM_PTR _arg2, const _BIGNUM_PTR _arg3, _BN_CTX_PTR _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EC_POINT_set_affine_coordinates(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+unsigned long _mkcgo_ERR_peek_error(void) { -+ return _g_ERR_peek_error(); -+} -+ -+void _mkcgo_ERR_print_errors(_BIO_PTR _arg0) { -+ _g_ERR_print_errors(_arg0); -+} -+ -+int _mkcgo_EVP_CIPHER_CTX_ctrl(_EVP_CIPHER_CTX_PTR _arg0, int _arg1, int _arg2, void* _arg3, uintptr_t *_err_state) { -+ int _ret = _g_EVP_CIPHER_CTX_ctrl(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_CIPHER_CTX_free(_EVP_CIPHER_CTX_PTR _arg0) { -+ _g_EVP_CIPHER_CTX_free(_arg0); -+} -+ -+_EVP_CIPHER_CTX_PTR _mkcgo_EVP_CIPHER_CTX_new(uintptr_t *_err_state) { -+ _EVP_CIPHER_CTX_PTR _ret = _g_EVP_CIPHER_CTX_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_CIPHER_CTX_set_key_length(_EVP_CIPHER_CTX_PTR _arg0, int _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_CIPHER_CTX_set_key_length(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_CIPHER_CTX_set_padding(_EVP_CIPHER_CTX_PTR _arg0, int _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_CIPHER_CTX_set_padding(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_CIPHER_PTR _mkcgo_EVP_CIPHER_fetch(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_CIPHER_PTR _ret = _g_EVP_CIPHER_fetch(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+const char* _mkcgo_EVP_CIPHER_get0_name(const _EVP_CIPHER_PTR _arg0) { -+ return _g_EVP_CIPHER_get0_name(_arg0); -+} -+ -+int _mkcgo_EVP_CIPHER_get_block_size(const _EVP_CIPHER_PTR _arg0) { -+ return _g_EVP_CIPHER_get_block_size(_arg0); -+} -+ -+int _mkcgo_EVP_CipherInit_ex(_EVP_CIPHER_CTX_PTR _arg0, const _EVP_CIPHER_PTR _arg1, _ENGINE_PTR _arg2, const unsigned char* _arg3, const unsigned char* _arg4, int _arg5, uintptr_t *_err_state) { -+ int _ret = _g_EVP_CipherInit_ex(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_CipherInit_ex2(_EVP_CIPHER_CTX_PTR _arg0, const _EVP_CIPHER_PTR _arg1, const unsigned char* _arg2, const unsigned char* _arg3, int _arg4, const _OSSL_PARAM_PTR _arg5, uintptr_t *_err_state) { -+ int _ret = _g_EVP_CipherInit_ex2(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_CipherUpdate(_EVP_CIPHER_CTX_PTR _arg0, unsigned char* _arg1, int* _arg2, const unsigned char* _arg3, int _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_CipherUpdate(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DecryptFinal_ex(_EVP_CIPHER_CTX_PTR _arg0, unsigned char* _arg1, int* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DecryptFinal_ex(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DecryptInit_ex(_EVP_CIPHER_CTX_PTR _arg0, const _EVP_CIPHER_PTR _arg1, _ENGINE_PTR _arg2, const unsigned char* _arg3, const unsigned char* _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DecryptInit_ex(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DecryptUpdate(_EVP_CIPHER_CTX_PTR _arg0, unsigned char* _arg1, int* _arg2, const unsigned char* _arg3, int _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DecryptUpdate(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_Digest(const unsigned char* _arg0, size_t _arg1, unsigned char* _arg2, unsigned int* _arg3, const _EVP_MD_PTR _arg4, _ENGINE_PTR _arg5, uintptr_t *_err_state) { -+ int _ret = _g_EVP_Digest(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestFinalXOF(_EVP_MD_CTX_PTR _arg0, unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestFinalXOF(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestFinal_ex(_EVP_MD_CTX_PTR _arg0, unsigned char* _arg1, unsigned int* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestFinal_ex(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestInit(_EVP_MD_CTX_PTR _arg0, const _EVP_MD_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestInit(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestInit_ex(_EVP_MD_CTX_PTR _arg0, const _EVP_MD_PTR _arg1, _ENGINE_PTR _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestInit_ex(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestSign(_EVP_MD_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestSign(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestSignFinal(_EVP_MD_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestSignFinal(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestSignInit(_EVP_MD_CTX_PTR _arg0, _EVP_PKEY_CTX_PTR* _arg1, const _EVP_MD_PTR _arg2, _ENGINE_PTR _arg3, _EVP_PKEY_PTR _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestSignInit(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_available_EVP_DigestSqueeze() { -+ return _g_EVP_DigestSqueeze != NULL; -+} -+ -+int _mkcgo_EVP_DigestSqueeze(_EVP_MD_CTX_PTR _arg0, unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestSqueeze(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestUpdate(_EVP_MD_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestUpdate(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestVerify(_EVP_MD_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestVerify(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestVerifyFinal(_EVP_MD_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestVerifyFinal(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_DigestVerifyInit(_EVP_MD_CTX_PTR _arg0, _EVP_PKEY_CTX_PTR* _arg1, const _EVP_MD_PTR _arg2, _ENGINE_PTR _arg3, _EVP_PKEY_PTR _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_DigestVerifyInit(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_EncryptFinal_ex(_EVP_CIPHER_CTX_PTR _arg0, unsigned char* _arg1, int* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_EncryptFinal_ex(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_EncryptInit_ex(_EVP_CIPHER_CTX_PTR _arg0, const _EVP_CIPHER_PTR _arg1, _ENGINE_PTR _arg2, const unsigned char* _arg3, const unsigned char* _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_EncryptInit_ex(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_EncryptUpdate(_EVP_CIPHER_CTX_PTR _arg0, unsigned char* _arg1, int* _arg2, const unsigned char* _arg3, int _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_EncryptUpdate(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_KDF_CTX_free(_EVP_KDF_CTX_PTR _arg0) { -+ _g_EVP_KDF_CTX_free(_arg0); -+} -+ -+size_t _mkcgo_EVP_KDF_CTX_get_kdf_size(_EVP_KDF_CTX_PTR _arg0, uintptr_t *_err_state) { -+ size_t _ret = _g_EVP_KDF_CTX_get_kdf_size(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_KDF_CTX_PTR _mkcgo_EVP_KDF_CTX_new(_EVP_KDF_PTR _arg0, uintptr_t *_err_state) { -+ _EVP_KDF_CTX_PTR _ret = _g_EVP_KDF_CTX_new(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_KDF_CTX_set_params(_EVP_KDF_CTX_PTR _arg0, const _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_KDF_CTX_set_params(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_KDF_derive(_EVP_KDF_CTX_PTR _arg0, unsigned char* _arg1, size_t _arg2, const _OSSL_PARAM_PTR _arg3, uintptr_t *_err_state) { -+ int _ret = _g_EVP_KDF_derive(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_KDF_PTR _mkcgo_EVP_KDF_fetch(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_KDF_PTR _ret = _g_EVP_KDF_fetch(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_KDF_free(_EVP_KDF_PTR _arg0) { -+ _g_EVP_KDF_free(_arg0); -+} -+ -+int _mkcgo_available_EVP_KEYMGMT_fetch() { -+ return _g_EVP_KEYMGMT_fetch != NULL; -+} -+ -+_EVP_KEYMGMT_PTR _mkcgo_EVP_KEYMGMT_fetch(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_KEYMGMT_PTR _ret = _g_EVP_KEYMGMT_fetch(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_KEYMGMT_free(_EVP_KEYMGMT_PTR _arg0) { -+ _g_EVP_KEYMGMT_free(_arg0); -+} -+ -+_EVP_MAC_CTX_PTR _mkcgo_EVP_MAC_CTX_dup(const _EVP_MAC_CTX_PTR _arg0, uintptr_t *_err_state) { -+ _EVP_MAC_CTX_PTR _ret = _g_EVP_MAC_CTX_dup(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_MAC_CTX_free(_EVP_MAC_CTX_PTR _arg0) { -+ _g_EVP_MAC_CTX_free(_arg0); -+} -+ -+_EVP_MAC_CTX_PTR _mkcgo_EVP_MAC_CTX_new(_EVP_MAC_PTR _arg0, uintptr_t *_err_state) { -+ _EVP_MAC_CTX_PTR _ret = _g_EVP_MAC_CTX_new(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MAC_CTX_set_params(_EVP_MAC_CTX_PTR _arg0, const _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MAC_CTX_set_params(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_MAC_PTR _mkcgo_EVP_MAC_fetch(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_MAC_PTR _ret = _g_EVP_MAC_fetch(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MAC_final(_EVP_MAC_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, size_t _arg3, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MAC_final(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MAC_init(_EVP_MAC_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, const _OSSL_PARAM_PTR _arg3, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MAC_init(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MAC_update(_EVP_MAC_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MAC_update(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MD_CTX_copy_ex(_EVP_MD_CTX_PTR _arg0, const _EVP_MD_CTX_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MD_CTX_copy_ex(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MD_CTX_ctrl(_EVP_MD_CTX_PTR _arg0, int _arg1, int _arg2, void* _arg3, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MD_CTX_ctrl(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_MD_CTX_free(_EVP_MD_CTX_PTR _arg0) { -+ _g_EVP_MD_CTX_free(_arg0); -+} -+ -+int _mkcgo_EVP_MD_CTX_get_params(_EVP_MD_CTX_PTR _arg0, _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MD_CTX_get_params(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+const _OSSL_PARAM_PTR _mkcgo_EVP_MD_CTX_gettable_params(_EVP_MD_CTX_PTR _arg0, uintptr_t *_err_state) { -+ const _OSSL_PARAM_PTR _ret = _g_EVP_MD_CTX_gettable_params(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_MD_CTX_PTR _mkcgo_EVP_MD_CTX_new(uintptr_t *_err_state) { -+ _EVP_MD_CTX_PTR _ret = _g_EVP_MD_CTX_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_MD_CTX_set_params(_EVP_MD_CTX_PTR _arg0, const _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_MD_CTX_set_params(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+const _OSSL_PARAM_PTR _mkcgo_EVP_MD_CTX_settable_params(_EVP_MD_CTX_PTR _arg0, uintptr_t *_err_state) { -+ const _OSSL_PARAM_PTR _ret = _g_EVP_MD_CTX_settable_params(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_MD_PTR _mkcgo_EVP_MD_fetch(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_MD_PTR _ret = _g_EVP_MD_fetch(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_MD_free(_EVP_MD_PTR _arg0) { -+ _g_EVP_MD_free(_arg0); -+} -+ -+const char* _mkcgo_EVP_MD_get0_name(const _EVP_MD_PTR _arg0) { -+ return _g_EVP_MD_get0_name(_arg0); -+} -+ -+const _OSSL_PROVIDER_PTR _mkcgo_EVP_MD_get0_provider(const _EVP_MD_PTR _arg0) { -+ return _g_EVP_MD_get0_provider(_arg0); -+} -+ -+int _mkcgo_EVP_MD_get_block_size(const _EVP_MD_PTR _arg0) { -+ return _g_EVP_MD_get_block_size(_arg0); -+} -+ -+int _mkcgo_EVP_MD_get_size(const _EVP_MD_PTR _arg0) { -+ return _g_EVP_MD_get_size(_arg0); -+} -+ -+int _mkcgo_EVP_MD_get_type(const _EVP_MD_PTR _arg0) { -+ return _g_EVP_MD_get_type(_arg0); -+} -+ -+int _mkcgo_EVP_PKEY_CTX_add1_hkdf_info(_EVP_PKEY_CTX_PTR _arg0, const unsigned char* _arg1, int _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_add1_hkdf_info(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_ctrl(_EVP_PKEY_CTX_PTR _arg0, int _arg1, int _arg2, int _arg3, int _arg4, void* _arg5, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_ctrl(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_PKEY_CTX_free(_EVP_PKEY_CTX_PTR _arg0) { -+ _g_EVP_PKEY_CTX_free(_arg0); -+} -+ -+_EVP_PKEY_CTX_PTR _mkcgo_EVP_PKEY_CTX_new(_EVP_PKEY_PTR _arg0, _ENGINE_PTR _arg1, uintptr_t *_err_state) { -+ _EVP_PKEY_CTX_PTR _ret = _g_EVP_PKEY_CTX_new(_arg0, _arg1); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_CTX_PTR _mkcgo_EVP_PKEY_CTX_new_from_pkey(_OSSL_LIB_CTX_PTR _arg0, _EVP_PKEY_PTR _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_PKEY_CTX_PTR _ret = _g_EVP_PKEY_CTX_new_from_pkey(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_CTX_PTR _mkcgo_EVP_PKEY_CTX_new_id(int _arg0, _ENGINE_PTR _arg1, uintptr_t *_err_state) { -+ _EVP_PKEY_CTX_PTR _ret = _g_EVP_PKEY_CTX_new_id(_arg0, _arg1); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, int _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_set0_rsa_oaep_label(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_set1_hkdf_key(_EVP_PKEY_CTX_PTR _arg0, const unsigned char* _arg1, int _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_set1_hkdf_key(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_set1_hkdf_salt(_EVP_PKEY_CTX_PTR _arg0, const unsigned char* _arg1, int _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_set1_hkdf_salt(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_set_hkdf_md(_EVP_PKEY_CTX_PTR _arg0, const _EVP_MD_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_set_hkdf_md(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_set_hkdf_mode(_EVP_PKEY_CTX_PTR _arg0, int _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_set_hkdf_mode(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_CTX_set_params(_EVP_PKEY_CTX_PTR _arg0, const _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_CTX_set_params(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_EC(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, const char* _arg3, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_Q_keygen(_arg0, _arg1, _arg2, _arg3); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_ED25519(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_Q_keygen(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_MLDSA(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_Q_keygen(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_MLKEM(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_Q_keygen(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_RSA(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, size_t _arg3, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_Q_keygen(_arg0, _arg1, _arg2, _arg3); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_X25519(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_Q_keygen(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_assign(_EVP_PKEY_PTR _arg0, int _arg1, void* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_assign(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_decapsulate(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_decapsulate(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_decapsulate_init(_EVP_PKEY_CTX_PTR _arg0, const _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_decapsulate_init(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_decrypt(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_decrypt(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_decrypt_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_decrypt_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_derive(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_derive(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_derive_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_derive_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_derive_set_peer(_EVP_PKEY_CTX_PTR _arg0, _EVP_PKEY_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_derive_set_peer(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_encapsulate(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, unsigned char* _arg3, size_t* _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_encapsulate(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_encapsulate_init(_EVP_PKEY_CTX_PTR _arg0, const _OSSL_PARAM_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_encapsulate_init(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_encrypt(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_encrypt(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_encrypt_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_encrypt_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_eq(const _EVP_PKEY_PTR _arg0, const _EVP_PKEY_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_eq(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_PKEY_free(_EVP_PKEY_PTR _arg0) { -+ _g_EVP_PKEY_free(_arg0); -+} -+ -+int _mkcgo_EVP_PKEY_fromdata(_EVP_PKEY_CTX_PTR _arg0, _EVP_PKEY_PTR* _arg1, int _arg2, _OSSL_PARAM_PTR _arg3, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_fromdata(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_fromdata_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_fromdata_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_DSA_PTR _mkcgo_EVP_PKEY_get0_DSA(_EVP_PKEY_PTR _arg0, uintptr_t *_err_state) { -+ _DSA_PTR _ret = _g_EVP_PKEY_get0_DSA(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EC_KEY_PTR _mkcgo_EVP_PKEY_get0_EC_KEY(_EVP_PKEY_PTR _arg0, uintptr_t *_err_state) { -+ _EC_KEY_PTR _ret = _g_EVP_PKEY_get0_EC_KEY(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_RSA_PTR _mkcgo_EVP_PKEY_get1_RSA(_EVP_PKEY_PTR _arg0, uintptr_t *_err_state) { -+ _RSA_PTR _ret = _g_EVP_PKEY_get1_RSA(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+size_t _mkcgo_EVP_PKEY_get1_encoded_public_key(_EVP_PKEY_PTR _arg0, unsigned char** _arg1, uintptr_t *_err_state) { -+ size_t _ret = _g_EVP_PKEY_get1_encoded_public_key(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_get_bits(const _EVP_PKEY_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_get_bits(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_get_bn_param(const _EVP_PKEY_PTR _arg0, const char* _arg1, _BIGNUM_PTR* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_get_bn_param(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_get_octet_string_param(const _EVP_PKEY_PTR _arg0, const char* _arg1, unsigned char* _arg2, size_t _arg3, size_t* _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_get_octet_string_param(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_get_raw_private_key(const _EVP_PKEY_PTR _arg0, unsigned char* _arg1, size_t* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_get_raw_private_key(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_get_raw_public_key(const _EVP_PKEY_PTR _arg0, unsigned char* _arg1, size_t* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_get_raw_public_key(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_get_size(const _EVP_PKEY_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_get_size(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_keygen(_EVP_PKEY_CTX_PTR _arg0, _EVP_PKEY_PTR* _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_keygen(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_keygen_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_keygen_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_new(uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_new_raw_private_key(int _arg0, _ENGINE_PTR _arg1, const unsigned char* _arg2, size_t _arg3, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_new_raw_private_key(_arg0, _arg1, _arg2, _arg3); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_new_raw_public_key(int _arg0, _ENGINE_PTR _arg1, const unsigned char* _arg2, size_t _arg3, uintptr_t *_err_state) { -+ _EVP_PKEY_PTR _ret = _g_EVP_PKEY_new_raw_public_key(_arg0, _arg1, _arg2, _arg3); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_paramgen(_EVP_PKEY_CTX_PTR _arg0, _EVP_PKEY_PTR* _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_paramgen(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_paramgen_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_paramgen_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_private_check(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_private_check(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_public_check_quick(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_public_check_quick(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_set1_EC_KEY(_EVP_PKEY_PTR _arg0, _EC_KEY_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_set1_EC_KEY(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_set1_encoded_public_key(_EVP_PKEY_PTR _arg0, const unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_set1_encoded_public_key(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_sign(_EVP_PKEY_CTX_PTR _arg0, unsigned char* _arg1, size_t* _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_sign(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_sign_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_sign_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_up_ref(_EVP_PKEY_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_up_ref(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_verify(_EVP_PKEY_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, const unsigned char* _arg3, size_t _arg4, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_verify(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_PKEY_verify_init(_EVP_PKEY_CTX_PTR _arg0, uintptr_t *_err_state) { -+ int _ret = _g_EVP_PKEY_verify_init(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_EVP_SIGNATURE_PTR _mkcgo_EVP_SIGNATURE_fetch(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, const char* _arg2, uintptr_t *_err_state) { -+ _EVP_SIGNATURE_PTR _ret = _g_EVP_SIGNATURE_fetch(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_EVP_SIGNATURE_free(_EVP_SIGNATURE_PTR _arg0) { -+ _g_EVP_SIGNATURE_free(_arg0); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_cbc(void) { -+ return _g_EVP_aes_128_cbc(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_ctr(void) { -+ return _g_EVP_aes_128_ctr(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_ecb(void) { -+ return _g_EVP_aes_128_ecb(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_gcm(void) { -+ return _g_EVP_aes_128_gcm(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_cbc(void) { -+ return _g_EVP_aes_192_cbc(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_ctr(void) { -+ return _g_EVP_aes_192_ctr(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_ecb(void) { -+ return _g_EVP_aes_192_ecb(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_gcm(void) { -+ return _g_EVP_aes_192_gcm(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_cbc(void) { -+ return _g_EVP_aes_256_cbc(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_ctr(void) { -+ return _g_EVP_aes_256_ctr(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_ecb(void) { -+ return _g_EVP_aes_256_ecb(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_gcm(void) { -+ return _g_EVP_aes_256_gcm(); -+} -+ -+int _mkcgo_available_EVP_chacha20_poly1305() { -+ return _g_EVP_chacha20_poly1305 != NULL; -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_chacha20_poly1305(void) { -+ return _g_EVP_chacha20_poly1305(); -+} -+ -+int _mkcgo_EVP_default_properties_enable_fips(_OSSL_LIB_CTX_PTR _arg0, int _arg1, uintptr_t *_err_state) { -+ int _ret = _g_EVP_default_properties_enable_fips(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_EVP_default_properties_is_fips_enabled(_OSSL_LIB_CTX_PTR _arg0) { -+ return _g_EVP_default_properties_is_fips_enabled(_arg0); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_cbc(void) { -+ return _g_EVP_des_cbc(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_ecb(void) { -+ return _g_EVP_des_ecb(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_ede3_cbc(void) { -+ return _g_EVP_des_ede3_cbc(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_ede3_ecb(void) { -+ return _g_EVP_des_ede3_ecb(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_md4(void) { -+ return _g_EVP_md4(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_md5(void) { -+ return _g_EVP_md5(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_md5_sha1(void) { -+ return _g_EVP_md5_sha1(); -+} -+ -+const _EVP_CIPHER_PTR _mkcgo_EVP_rc4(void) { -+ return _g_EVP_rc4(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_ripemd160(void) { -+ return _g_EVP_ripemd160(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha1(void) { -+ return _g_EVP_sha1(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha224(void) { -+ return _g_EVP_sha224(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha256(void) { -+ return _g_EVP_sha256(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha384(void) { -+ return _g_EVP_sha384(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha3_224(void) { -+ return _g_EVP_sha3_224(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha3_256(void) { -+ return _g_EVP_sha3_256(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha3_384(void) { -+ return _g_EVP_sha3_384(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha3_512(void) { -+ return _g_EVP_sha3_512(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha512(void) { -+ return _g_EVP_sha512(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha512_224(void) { -+ return _g_EVP_sha512_224(); -+} -+ -+const _EVP_MD_PTR _mkcgo_EVP_sha512_256(void) { -+ return _g_EVP_sha512_256(); -+} -+ -+int _mkcgo_FIPS_mode(void) { -+ return _g_FIPS_mode(); -+} -+ -+int _mkcgo_FIPS_mode_set(int _arg0, uintptr_t *_err_state) { -+ int _ret = _g_FIPS_mode_set(_arg0); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_HMAC_CTX_copy(_HMAC_CTX_PTR _arg0, _HMAC_CTX_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_HMAC_CTX_copy(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_HMAC_CTX_free(_HMAC_CTX_PTR _arg0) { -+ _g_HMAC_CTX_free(_arg0); -+} -+ -+_HMAC_CTX_PTR _mkcgo_HMAC_CTX_new(uintptr_t *_err_state) { -+ _HMAC_CTX_PTR _ret = _g_HMAC_CTX_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_HMAC_Final(_HMAC_CTX_PTR _arg0, unsigned char* _arg1, unsigned int* _arg2, uintptr_t *_err_state) { -+ int _ret = _g_HMAC_Final(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_HMAC_Init_ex(_HMAC_CTX_PTR _arg0, const unsigned char* _arg1, int _arg2, const _EVP_MD_PTR _arg3, _ENGINE_PTR _arg4, uintptr_t *_err_state) { -+ int _ret = _g_HMAC_Init_ex(_arg0, _arg1, _arg2, _arg3, _arg4); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_HMAC_Update(_HMAC_CTX_PTR _arg0, const unsigned char* _arg1, size_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_HMAC_Update(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+const char* _mkcgo_OBJ_nid2sn(int _arg0) { -+ return _g_OBJ_nid2sn(_arg0); -+} -+ -+void _mkcgo_OPENSSL_init(void) { -+ _g_OPENSSL_init(); -+} -+ -+int _mkcgo_OPENSSL_init_crypto(uint64_t _arg0, const _OPENSSL_INIT_SETTINGS_PTR _arg1, uintptr_t *_err_state) { -+ int _ret = _g_OPENSSL_init_crypto(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_available_OPENSSL_version_major() { -+ return _g_OPENSSL_version_major != NULL; -+} -+ -+unsigned int _mkcgo_OPENSSL_version_major(void) { -+ return _g_OPENSSL_version_major(); -+} -+ -+int _mkcgo_available_OPENSSL_version_minor() { -+ return _g_OPENSSL_version_minor != NULL; -+} -+ -+unsigned int _mkcgo_OPENSSL_version_minor(void) { -+ return _g_OPENSSL_version_minor(); -+} -+ -+int _mkcgo_available_OPENSSL_version_patch() { -+ return _g_OPENSSL_version_patch != NULL; -+} -+ -+unsigned int _mkcgo_OPENSSL_version_patch(void) { -+ return _g_OPENSSL_version_patch(); -+} -+ -+void _mkcgo_OSSL_PARAM_BLD_free(_OSSL_PARAM_BLD_PTR _arg0) { -+ _g_OSSL_PARAM_BLD_free(_arg0); -+} -+ -+_OSSL_PARAM_BLD_PTR _mkcgo_OSSL_PARAM_BLD_new(void) { -+ return _g_OSSL_PARAM_BLD_new(); -+} -+ -+int _mkcgo_OSSL_PARAM_BLD_push_BN(_OSSL_PARAM_BLD_PTR _arg0, const char* _arg1, const _BIGNUM_PTR _arg2, uintptr_t *_err_state) { -+ int _ret = _g_OSSL_PARAM_BLD_push_BN(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_OSSL_PARAM_BLD_push_int32(_OSSL_PARAM_BLD_PTR _arg0, const char* _arg1, int32_t _arg2, uintptr_t *_err_state) { -+ int _ret = _g_OSSL_PARAM_BLD_push_int32(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_OSSL_PARAM_BLD_push_octet_string(_OSSL_PARAM_BLD_PTR _arg0, const char* _arg1, const unsigned char* _arg2, size_t _arg3, uintptr_t *_err_state) { -+ int _ret = _g_OSSL_PARAM_BLD_push_octet_string(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_OSSL_PARAM_BLD_push_utf8_string(_OSSL_PARAM_BLD_PTR _arg0, const char* _arg1, const char* _arg2, size_t _arg3, uintptr_t *_err_state) { -+ int _ret = _g_OSSL_PARAM_BLD_push_utf8_string(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+_OSSL_PARAM_PTR _mkcgo_OSSL_PARAM_BLD_to_param(_OSSL_PARAM_BLD_PTR _arg0, uintptr_t *_err_state) { -+ _OSSL_PARAM_PTR _ret = _g_OSSL_PARAM_BLD_to_param(_arg0); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_OSSL_PARAM_free(_OSSL_PARAM_PTR _arg0) { -+ _g_OSSL_PARAM_free(_arg0); -+} -+ -+const _OSSL_PARAM_PTR _mkcgo_OSSL_PARAM_locate_const(const _OSSL_PARAM_PTR _arg0, const char* _arg1, uintptr_t *_err_state) { -+ const _OSSL_PARAM_PTR _ret = _g_OSSL_PARAM_locate_const(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_OSSL_PROVIDER_available(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1) { -+ return _g_OSSL_PROVIDER_available(_arg0, _arg1); -+} -+ -+const char* _mkcgo_OSSL_PROVIDER_get0_name(const _OSSL_PROVIDER_PTR _arg0) { -+ return _g_OSSL_PROVIDER_get0_name(_arg0); -+} -+ -+_OSSL_PROVIDER_PTR _mkcgo_OSSL_PROVIDER_try_load(_OSSL_LIB_CTX_PTR _arg0, const char* _arg1, int _arg2, uintptr_t *_err_state) { -+ _OSSL_PROVIDER_PTR _ret = _g_OSSL_PROVIDER_try_load(_arg0, _arg1, _arg2); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+const char* _mkcgo_OpenSSL_version(int _arg0) { -+ return _g_OpenSSL_version(_arg0); -+} -+ -+int _mkcgo_available_OpenSSL_version_num() { -+ return _g_OpenSSL_version_num != NULL; -+} -+ -+unsigned long _mkcgo_OpenSSL_version_num(void) { -+ return _g_OpenSSL_version_num(); -+} -+ -+int _mkcgo_PKCS5_PBKDF2_HMAC(const char* _arg0, int _arg1, const unsigned char* _arg2, int _arg3, int _arg4, const _EVP_MD_PTR _arg5, int _arg6, unsigned char* _arg7, uintptr_t *_err_state) { -+ int _ret = _g_PKCS5_PBKDF2_HMAC(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_RAND_bytes(unsigned char* _arg0, int _arg1, uintptr_t *_err_state) { -+ int _ret = _g_RAND_bytes(_arg0, _arg1); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_RAND_bytes_ex(_OSSL_LIB_CTX_PTR _arg0, unsigned char* _arg1, size_t _arg2, unsigned int _arg3, uintptr_t *_err_state) { -+ int _ret = _g_RAND_bytes_ex(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+void _mkcgo_RSA_free(_RSA_PTR _arg0) { -+ _g_RSA_free(_arg0); -+} -+ -+void _mkcgo_RSA_get0_crt_params(const _RSA_PTR _arg0, const _BIGNUM_PTR* _arg1, const _BIGNUM_PTR* _arg2, const _BIGNUM_PTR* _arg3) { -+ _g_RSA_get0_crt_params(_arg0, _arg1, _arg2, _arg3); -+} -+ -+void _mkcgo_RSA_get0_factors(const _RSA_PTR _arg0, const _BIGNUM_PTR* _arg1, const _BIGNUM_PTR* _arg2) { -+ _g_RSA_get0_factors(_arg0, _arg1, _arg2); -+} -+ -+void _mkcgo_RSA_get0_key(const _RSA_PTR _arg0, const _BIGNUM_PTR* _arg1, const _BIGNUM_PTR* _arg2, const _BIGNUM_PTR* _arg3) { -+ _g_RSA_get0_key(_arg0, _arg1, _arg2, _arg3); -+} -+ -+_RSA_PTR _mkcgo_RSA_new(uintptr_t *_err_state) { -+ _RSA_PTR _ret = _g_RSA_new(); -+ if (_ret == NULL) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_RSA_set0_crt_params(_RSA_PTR _arg0, _BIGNUM_PTR _arg1, _BIGNUM_PTR _arg2, _BIGNUM_PTR _arg3, uintptr_t *_err_state) { -+ int _ret = _g_RSA_set0_crt_params(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_RSA_set0_factors(_RSA_PTR _arg0, _BIGNUM_PTR _arg1, _BIGNUM_PTR _arg2, uintptr_t *_err_state) { -+ int _ret = _g_RSA_set0_factors(_arg0, _arg1, _arg2); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -+int _mkcgo_RSA_set0_key(_RSA_PTR _arg0, _BIGNUM_PTR _arg1, _BIGNUM_PTR _arg2, _BIGNUM_PTR _arg3, uintptr_t *_err_state) { -+ int _ret = _g_RSA_set0_key(_arg0, _arg1, _arg2, _arg3); -+ if (_ret <= 0) *_err_state = mkcgo_err_retrieve(); -+ return _ret; -+} -+ -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.go -new file mode 100644 -index 00000000000000..a73b6a785f0265 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.go -@@ -0,0 +1,76 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package ossl -+ -+const ( -+ POINT_CONVERSION_UNCOMPRESSED = 4 -+ OPENSSL_INIT_LOAD_CRYPTO_STRINGS = 0x00000002 -+ OPENSSL_INIT_ADD_ALL_CIPHERS = 0x00000004 -+ OPENSSL_INIT_ADD_ALL_DIGESTS = 0x00000008 -+ OPENSSL_INIT_LOAD_CONFIG = 0x00000040 -+ EVP_CTRL_GCM_GET_TAG = 0x10 -+ EVP_CTRL_GCM_SET_TAG = 0x11 -+ EVP_CTRL_AEAD_SET_IVLEN = 0x9 -+ EVP_CTRL_AEAD_GET_TAG = 0x10 -+ EVP_CTRL_AEAD_SET_TAG = 0x11 -+ EVP_PKEY_CTRL_MD = 1 -+ EVP_PKEY_RSA = 6 -+ EVP_PKEY_EC = 408 -+ EVP_PKEY_TLS1_PRF = 1021 -+ EVP_PKEY_X25519 = 1034 -+ EVP_PKEY_HKDF = 1036 -+ EVP_PKEY_ED25519 = 1087 -+ EVP_PKEY_DSA = 116 -+ EVP_PKEY_MLKEM_768 = 1455 -+ EVP_PKEY_MLKEM_1024 = 1456 -+ EVP_PKEY_ML_DSA_44 = 1457 -+ EVP_PKEY_ML_DSA_65 = 1458 -+ EVP_PKEY_ML_DSA_87 = 1459 -+ EVP_PKEY_OP_DERIVE = (1 << 10) -+ EVP_MAX_MD_SIZE = 64 -+ EVP_PKEY_PUBLIC_KEY = 0x86 -+ EVP_PKEY_KEYPAIR = 0x87 -+ EVP_MD_CTRL_XOF_LEN = 0x3 -+ EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID = 0x1001 -+ EVP_KDF_HKDF_MODE_EXTRACT_ONLY = 1 -+ EVP_KDF_HKDF_MODE_EXPAND_ONLY = 2 -+ EVP_PKEY_CTRL_TLS_MD = 0x1000 -+ EVP_PKEY_CTRL_TLS_SECRET = 0x1001 -+ EVP_PKEY_CTRL_TLS_SEED = 0x1002 -+ EVP_PKEY_CTRL_HKDF_MD = 0x1003 -+ EVP_PKEY_CTRL_HKDF_SALT = 0x1004 -+ EVP_PKEY_CTRL_HKDF_KEY = 0x1005 -+ EVP_PKEY_CTRL_HKDF_INFO = 0x1006 -+ EVP_PKEY_CTRL_HKDF_MODE = 0x1007 -+ NID_X9_62_prime256v1 = 415 -+ NID_secp224r1 = 713 -+ NID_secp384r1 = 715 -+ NID_secp521r1 = 716 -+ NID_ML_KEM_768 = 1455 -+ NID_ML_KEM_1024 = 1456 -+ NID_ML_DSA_44 = 1457 -+ NID_ML_DSA_65 = 1458 -+ NID_ML_DSA_87 = 1459 -+ RSA_PKCS1_PADDING = 1 -+ RSA_NO_PADDING = 3 -+ RSA_PKCS1_OAEP_PADDING = 4 -+ RSA_PKCS1_PSS_PADDING = 6 -+ RSA_PSS_SALTLEN_DIGEST = -1 -+ RSA_PSS_SALTLEN_AUTO = -2 -+ RSA_PSS_SALTLEN_MAX_SIGN = -2 -+ RSA_PSS_SALTLEN_MAX = -3 -+ EVP_PKEY_CTRL_RSA_PADDING = 0x1001 -+ EVP_PKEY_CTRL_RSA_PSS_SALTLEN = 0x1002 -+ EVP_PKEY_CTRL_RSA_KEYGEN_BITS = 0x1003 -+ EVP_PKEY_CTRL_RSA_MGF1_MD = 0x1005 -+ EVP_PKEY_CTRL_RSA_OAEP_MD = 0x1009 -+ EVP_PKEY_CTRL_RSA_OAEP_LABEL = 0x100A -+ EVP_PKEY_CTRL_DSA_PARAMGEN_BITS = 0x1001 -+ EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS = 0x1002 -+ OSSL_PARAM_INTEGER = 1 -+ OSSL_PARAM_OCTET_STRING = 5 -+ BIO_CTRL_INFO = 3 -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.h b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.h -new file mode 100644 -index 00000000000000..95ba94df4e1c49 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl.h -@@ -0,0 +1,377 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+#ifndef MKCGO_H // only include this header once -+#define MKCGO_H -+ -+#include -+#include -+ -+typedef void* _OPENSSL_INIT_SETTINGS_PTR; -+typedef void* _OSSL_LIB_CTX_PTR; -+typedef void* _OSSL_PROVIDER_PTR; -+typedef void* _ENGINE_PTR; -+typedef void* _EVP_PKEY_PTR; -+typedef void* _EVP_PKEY_CTX_PTR; -+typedef void* _EVP_MD_PTR; -+typedef void* _EVP_MD_CTX_PTR; -+typedef void* _HMAC_CTX_PTR; -+typedef void* _EVP_CIPHER_PTR; -+typedef void* _EVP_CIPHER_CTX_PTR; -+typedef void* _EC_KEY_PTR; -+typedef void* _EC_POINT_PTR; -+typedef void* _EC_GROUP_PTR; -+typedef void* _RSA_PTR; -+typedef void* _BIGNUM_PTR; -+typedef void* _BN_CTX_PTR; -+typedef void* _EVP_MAC_PTR; -+typedef void* _EVP_MAC_CTX_PTR; -+typedef void* _OSSL_PARAM_BLD_PTR; -+typedef void* _OSSL_PARAM_PTR; -+typedef void* _EVP_SIGNATURE_PTR; -+typedef void* _EVP_KEYMGMT_PTR; -+typedef void* _DSA_PTR; -+typedef void* _EVP_KDF_PTR; -+typedef void* _EVP_KDF_CTX_PTR; -+typedef void* _BIO_METHOD_PTR; -+typedef void* _BIO_PTR; -+typedef int point_conversion_form_t; -+ -+enum { -+ _POINT_CONVERSION_UNCOMPRESSED = 4, -+ _OPENSSL_INIT_LOAD_CRYPTO_STRINGS = 0x00000002, -+ _OPENSSL_INIT_ADD_ALL_CIPHERS = 0x00000004, -+ _OPENSSL_INIT_ADD_ALL_DIGESTS = 0x00000008, -+ _OPENSSL_INIT_LOAD_CONFIG = 0x00000040, -+ _EVP_CTRL_GCM_GET_TAG = 0x10, -+ _EVP_CTRL_GCM_SET_TAG = 0x11, -+ _EVP_CTRL_AEAD_SET_IVLEN = 0x9, -+ _EVP_CTRL_AEAD_GET_TAG = 0x10, -+ _EVP_CTRL_AEAD_SET_TAG = 0x11, -+ _EVP_PKEY_CTRL_MD = 1, -+ _EVP_PKEY_RSA = 6, -+ _EVP_PKEY_EC = 408, -+ _EVP_PKEY_TLS1_PRF = 1021, -+ _EVP_PKEY_X25519 = 1034, -+ _EVP_PKEY_HKDF = 1036, -+ _EVP_PKEY_ED25519 = 1087, -+ _EVP_PKEY_DSA = 116, -+ _EVP_PKEY_MLKEM_768 = 1455, -+ _EVP_PKEY_MLKEM_1024 = 1456, -+ _EVP_PKEY_ML_DSA_44 = 1457, -+ _EVP_PKEY_ML_DSA_65 = 1458, -+ _EVP_PKEY_ML_DSA_87 = 1459, -+ _EVP_PKEY_OP_DERIVE = (1 << 10), -+ _EVP_MAX_MD_SIZE = 64, -+ _EVP_PKEY_PUBLIC_KEY = 0x86, -+ _EVP_PKEY_KEYPAIR = 0x87, -+ _EVP_MD_CTRL_XOF_LEN = 0x3, -+ _EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID = 0x1001, -+ _EVP_KDF_HKDF_MODE_EXTRACT_ONLY = 1, -+ _EVP_KDF_HKDF_MODE_EXPAND_ONLY = 2, -+ _EVP_PKEY_CTRL_TLS_MD = 0x1000, -+ _EVP_PKEY_CTRL_TLS_SECRET = 0x1001, -+ _EVP_PKEY_CTRL_TLS_SEED = 0x1002, -+ _EVP_PKEY_CTRL_HKDF_MD = 0x1003, -+ _EVP_PKEY_CTRL_HKDF_SALT = 0x1004, -+ _EVP_PKEY_CTRL_HKDF_KEY = 0x1005, -+ _EVP_PKEY_CTRL_HKDF_INFO = 0x1006, -+ _EVP_PKEY_CTRL_HKDF_MODE = 0x1007, -+ _NID_X9_62_prime256v1 = 415, -+ _NID_secp224r1 = 713, -+ _NID_secp384r1 = 715, -+ _NID_secp521r1 = 716, -+ _NID_ML_KEM_768 = 1455, -+ _NID_ML_KEM_1024 = 1456, -+ _NID_ML_DSA_44 = 1457, -+ _NID_ML_DSA_65 = 1458, -+ _NID_ML_DSA_87 = 1459, -+ _RSA_PKCS1_PADDING = 1, -+ _RSA_NO_PADDING = 3, -+ _RSA_PKCS1_OAEP_PADDING = 4, -+ _RSA_PKCS1_PSS_PADDING = 6, -+ _RSA_PSS_SALTLEN_DIGEST = -1, -+ _RSA_PSS_SALTLEN_AUTO = -2, -+ _RSA_PSS_SALTLEN_MAX_SIGN = -2, -+ _RSA_PSS_SALTLEN_MAX = -3, -+ _EVP_PKEY_CTRL_RSA_PADDING = 0x1001, -+ _EVP_PKEY_CTRL_RSA_PSS_SALTLEN = 0x1002, -+ _EVP_PKEY_CTRL_RSA_KEYGEN_BITS = 0x1003, -+ _EVP_PKEY_CTRL_RSA_MGF1_MD = 0x1005, -+ _EVP_PKEY_CTRL_RSA_OAEP_MD = 0x1009, -+ _EVP_PKEY_CTRL_RSA_OAEP_LABEL = 0x100A, -+ _EVP_PKEY_CTRL_DSA_PARAMGEN_BITS = 0x1001, -+ _EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS = 0x1002, -+ _OSSL_PARAM_INTEGER = 1, -+ _OSSL_PARAM_OCTET_STRING = 5, -+ BIO_CTRL_INFO = 3, -+}; -+ -+uintptr_t mkcgo_err_retrieve(); -+void __mkcgo_load_(void* handle); -+void __mkcgo_unload_(); -+void __mkcgo_load_3(void* handle); -+void __mkcgo_unload_3(); -+void __mkcgo_load_33(void* handle); -+void __mkcgo_unload_33(); -+void __mkcgo_load_init_1(void* handle); -+void __mkcgo_unload_init_1(); -+void __mkcgo_load_init_3(void* handle); -+void __mkcgo_unload_init_3(); -+void __mkcgo_load_legacy_1(void* handle); -+void __mkcgo_unload_legacy_1(); -+void __mkcgo_load_version(void* handle); -+void __mkcgo_unload_version(); -+ -+int _mkcgo_available_EVP_DigestSqueeze(); -+int _mkcgo_available_EVP_KEYMGMT_fetch(); -+int _mkcgo_available_EVP_chacha20_poly1305(); -+int _mkcgo_available_OPENSSL_version_major(); -+int _mkcgo_available_OPENSSL_version_minor(); -+int _mkcgo_available_OPENSSL_version_patch(); -+int _mkcgo_available_OpenSSL_version_num(); -+ -+long _mkcgo_BIO_ctrl(_BIO_PTR, int, long, void*); -+int _mkcgo_BIO_free(_BIO_PTR); -+_BIO_PTR _mkcgo_BIO_new(const _BIO_METHOD_PTR, uintptr_t *); -+const _BIO_METHOD_PTR _mkcgo_BIO_s_mem(void); -+_BIGNUM_PTR _mkcgo_BN_bin2bn(const unsigned char*, int, _BIGNUM_PTR, uintptr_t *); -+int _mkcgo_BN_bn2binpad(const _BIGNUM_PTR, unsigned char*, int, uintptr_t *); -+int _mkcgo_BN_bn2lebinpad(const _BIGNUM_PTR, unsigned char*, int, uintptr_t *); -+void _mkcgo_BN_clear(_BIGNUM_PTR); -+void _mkcgo_BN_clear_free(_BIGNUM_PTR); -+void _mkcgo_BN_free(_BIGNUM_PTR); -+_BIGNUM_PTR _mkcgo_BN_lebin2bn(const unsigned char*, int, _BIGNUM_PTR, uintptr_t *); -+_BIGNUM_PTR _mkcgo_BN_new(uintptr_t *); -+int _mkcgo_BN_num_bits(const _BIGNUM_PTR); -+void _mkcgo_CRYPTO_free(void*, const char*, int); -+void* _mkcgo_CRYPTO_malloc(size_t, const char*, int, uintptr_t *); -+void _mkcgo_DSA_free(_DSA_PTR); -+int _mkcgo_DSA_generate_key(_DSA_PTR, uintptr_t *); -+void _mkcgo_DSA_get0_key(const _DSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+void _mkcgo_DSA_get0_pqg(const _DSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+_DSA_PTR _mkcgo_DSA_new(uintptr_t *); -+int _mkcgo_DSA_set0_key(_DSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, uintptr_t *); -+int _mkcgo_DSA_set0_pqg(_DSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BIGNUM_PTR, uintptr_t *); -+void _mkcgo_EC_GROUP_free(_EC_GROUP_PTR); -+_EC_GROUP_PTR _mkcgo_EC_GROUP_new_by_curve_name(int, uintptr_t *); -+int _mkcgo_EC_KEY_check_key(const _EC_KEY_PTR, uintptr_t *); -+void _mkcgo_EC_KEY_free(_EC_KEY_PTR); -+const _EC_GROUP_PTR _mkcgo_EC_KEY_get0_group(const _EC_KEY_PTR); -+const _BIGNUM_PTR _mkcgo_EC_KEY_get0_private_key(const _EC_KEY_PTR); -+const _EC_POINT_PTR _mkcgo_EC_KEY_get0_public_key(const _EC_KEY_PTR); -+_EC_KEY_PTR _mkcgo_EC_KEY_new_by_curve_name(int, uintptr_t *); -+int _mkcgo_EC_KEY_set_private_key(_EC_KEY_PTR, const _BIGNUM_PTR, uintptr_t *); -+int _mkcgo_EC_KEY_set_public_key(_EC_KEY_PTR, const _EC_POINT_PTR, uintptr_t *); -+int _mkcgo_EC_KEY_set_public_key_affine_coordinates(_EC_KEY_PTR, _BIGNUM_PTR, _BIGNUM_PTR, uintptr_t *); -+void _mkcgo_EC_POINT_free(_EC_POINT_PTR); -+int _mkcgo_EC_POINT_get_affine_coordinates_GFp(const _EC_GROUP_PTR, const _EC_POINT_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BN_CTX_PTR, uintptr_t *); -+int _mkcgo_EC_POINT_mul(const _EC_GROUP_PTR, _EC_POINT_PTR, const _BIGNUM_PTR, const _EC_POINT_PTR, const _BIGNUM_PTR, _BN_CTX_PTR, uintptr_t *); -+_EC_POINT_PTR _mkcgo_EC_POINT_new(const _EC_GROUP_PTR, uintptr_t *); -+int _mkcgo_EC_POINT_oct2point(const _EC_GROUP_PTR, _EC_POINT_PTR, const unsigned char*, size_t, _BN_CTX_PTR, uintptr_t *); -+size_t _mkcgo_EC_POINT_point2oct(const _EC_GROUP_PTR, const _EC_POINT_PTR, point_conversion_form_t, unsigned char*, size_t, _BN_CTX_PTR, uintptr_t *); -+int _mkcgo_EC_POINT_set_affine_coordinates(const _EC_GROUP_PTR, _EC_POINT_PTR, const _BIGNUM_PTR, const _BIGNUM_PTR, _BN_CTX_PTR, uintptr_t *); -+unsigned long _mkcgo_ERR_peek_error(void); -+void _mkcgo_ERR_print_errors(_BIO_PTR); -+int _mkcgo_EVP_CIPHER_CTX_ctrl(_EVP_CIPHER_CTX_PTR, int, int, void*, uintptr_t *); -+void _mkcgo_EVP_CIPHER_CTX_free(_EVP_CIPHER_CTX_PTR); -+_EVP_CIPHER_CTX_PTR _mkcgo_EVP_CIPHER_CTX_new(uintptr_t *); -+int _mkcgo_EVP_CIPHER_CTX_set_key_length(_EVP_CIPHER_CTX_PTR, int, uintptr_t *); -+int _mkcgo_EVP_CIPHER_CTX_set_padding(_EVP_CIPHER_CTX_PTR, int, uintptr_t *); -+_EVP_CIPHER_PTR _mkcgo_EVP_CIPHER_fetch(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+const char* _mkcgo_EVP_CIPHER_get0_name(const _EVP_CIPHER_PTR); -+int _mkcgo_EVP_CIPHER_get_block_size(const _EVP_CIPHER_PTR); -+int _mkcgo_EVP_CipherInit_ex(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, _ENGINE_PTR, const unsigned char*, const unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_CipherInit_ex2(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, const unsigned char*, const unsigned char*, int, const _OSSL_PARAM_PTR, uintptr_t *); -+int _mkcgo_EVP_CipherUpdate(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, const unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_DecryptFinal_ex(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, uintptr_t *); -+int _mkcgo_EVP_DecryptInit_ex(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, _ENGINE_PTR, const unsigned char*, const unsigned char*, uintptr_t *); -+int _mkcgo_EVP_DecryptUpdate(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, const unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_Digest(const unsigned char*, size_t, unsigned char*, unsigned int*, const _EVP_MD_PTR, _ENGINE_PTR, uintptr_t *); -+int _mkcgo_EVP_DigestFinalXOF(_EVP_MD_CTX_PTR, unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_DigestFinal_ex(_EVP_MD_CTX_PTR, unsigned char*, unsigned int*, uintptr_t *); -+int _mkcgo_EVP_DigestInit(_EVP_MD_CTX_PTR, const _EVP_MD_PTR, uintptr_t *); -+int _mkcgo_EVP_DigestInit_ex(_EVP_MD_CTX_PTR, const _EVP_MD_PTR, _ENGINE_PTR, uintptr_t *); -+int _mkcgo_EVP_DigestSign(_EVP_MD_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_DigestSignFinal(_EVP_MD_CTX_PTR, unsigned char*, size_t*, uintptr_t *); -+int _mkcgo_EVP_DigestSignInit(_EVP_MD_CTX_PTR, _EVP_PKEY_CTX_PTR*, const _EVP_MD_PTR, _ENGINE_PTR, _EVP_PKEY_PTR, uintptr_t *); -+int _mkcgo_EVP_DigestSqueeze(_EVP_MD_CTX_PTR, unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_DigestUpdate(_EVP_MD_CTX_PTR, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_DigestVerify(_EVP_MD_CTX_PTR, const unsigned char*, size_t, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_DigestVerifyFinal(_EVP_MD_CTX_PTR, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_DigestVerifyInit(_EVP_MD_CTX_PTR, _EVP_PKEY_CTX_PTR*, const _EVP_MD_PTR, _ENGINE_PTR, _EVP_PKEY_PTR, uintptr_t *); -+int _mkcgo_EVP_EncryptFinal_ex(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, uintptr_t *); -+int _mkcgo_EVP_EncryptInit_ex(_EVP_CIPHER_CTX_PTR, const _EVP_CIPHER_PTR, _ENGINE_PTR, const unsigned char*, const unsigned char*, uintptr_t *); -+int _mkcgo_EVP_EncryptUpdate(_EVP_CIPHER_CTX_PTR, unsigned char*, int*, const unsigned char*, int, uintptr_t *); -+void _mkcgo_EVP_KDF_CTX_free(_EVP_KDF_CTX_PTR); -+size_t _mkcgo_EVP_KDF_CTX_get_kdf_size(_EVP_KDF_CTX_PTR, uintptr_t *); -+_EVP_KDF_CTX_PTR _mkcgo_EVP_KDF_CTX_new(_EVP_KDF_PTR, uintptr_t *); -+int _mkcgo_EVP_KDF_CTX_set_params(_EVP_KDF_CTX_PTR, const _OSSL_PARAM_PTR, uintptr_t *); -+int _mkcgo_EVP_KDF_derive(_EVP_KDF_CTX_PTR, unsigned char*, size_t, const _OSSL_PARAM_PTR, uintptr_t *); -+_EVP_KDF_PTR _mkcgo_EVP_KDF_fetch(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+void _mkcgo_EVP_KDF_free(_EVP_KDF_PTR); -+_EVP_KEYMGMT_PTR _mkcgo_EVP_KEYMGMT_fetch(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+void _mkcgo_EVP_KEYMGMT_free(_EVP_KEYMGMT_PTR); -+_EVP_MAC_CTX_PTR _mkcgo_EVP_MAC_CTX_dup(const _EVP_MAC_CTX_PTR, uintptr_t *); -+void _mkcgo_EVP_MAC_CTX_free(_EVP_MAC_CTX_PTR); -+_EVP_MAC_CTX_PTR _mkcgo_EVP_MAC_CTX_new(_EVP_MAC_PTR, uintptr_t *); -+int _mkcgo_EVP_MAC_CTX_set_params(_EVP_MAC_CTX_PTR, const _OSSL_PARAM_PTR, uintptr_t *); -+_EVP_MAC_PTR _mkcgo_EVP_MAC_fetch(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+int _mkcgo_EVP_MAC_final(_EVP_MAC_CTX_PTR, unsigned char*, size_t*, size_t, uintptr_t *); -+int _mkcgo_EVP_MAC_init(_EVP_MAC_CTX_PTR, const unsigned char*, size_t, const _OSSL_PARAM_PTR, uintptr_t *); -+int _mkcgo_EVP_MAC_update(_EVP_MAC_CTX_PTR, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_MD_CTX_copy_ex(_EVP_MD_CTX_PTR, const _EVP_MD_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_MD_CTX_ctrl(_EVP_MD_CTX_PTR, int, int, void*, uintptr_t *); -+void _mkcgo_EVP_MD_CTX_free(_EVP_MD_CTX_PTR); -+int _mkcgo_EVP_MD_CTX_get_params(_EVP_MD_CTX_PTR, _OSSL_PARAM_PTR, uintptr_t *); -+const _OSSL_PARAM_PTR _mkcgo_EVP_MD_CTX_gettable_params(_EVP_MD_CTX_PTR, uintptr_t *); -+_EVP_MD_CTX_PTR _mkcgo_EVP_MD_CTX_new(uintptr_t *); -+int _mkcgo_EVP_MD_CTX_set_params(_EVP_MD_CTX_PTR, const _OSSL_PARAM_PTR, uintptr_t *); -+const _OSSL_PARAM_PTR _mkcgo_EVP_MD_CTX_settable_params(_EVP_MD_CTX_PTR, uintptr_t *); -+_EVP_MD_PTR _mkcgo_EVP_MD_fetch(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+void _mkcgo_EVP_MD_free(_EVP_MD_PTR); -+const char* _mkcgo_EVP_MD_get0_name(const _EVP_MD_PTR); -+const _OSSL_PROVIDER_PTR _mkcgo_EVP_MD_get0_provider(const _EVP_MD_PTR); -+int _mkcgo_EVP_MD_get_block_size(const _EVP_MD_PTR); -+int _mkcgo_EVP_MD_get_size(const _EVP_MD_PTR); -+int _mkcgo_EVP_MD_get_type(const _EVP_MD_PTR); -+int _mkcgo_EVP_PKEY_CTX_add1_hkdf_info(_EVP_PKEY_CTX_PTR, const unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_ctrl(_EVP_PKEY_CTX_PTR, int, int, int, int, void*, uintptr_t *); -+void _mkcgo_EVP_PKEY_CTX_free(_EVP_PKEY_CTX_PTR); -+_EVP_PKEY_CTX_PTR _mkcgo_EVP_PKEY_CTX_new(_EVP_PKEY_PTR, _ENGINE_PTR, uintptr_t *); -+_EVP_PKEY_CTX_PTR _mkcgo_EVP_PKEY_CTX_new_from_pkey(_OSSL_LIB_CTX_PTR, _EVP_PKEY_PTR, const char*, uintptr_t *); -+_EVP_PKEY_CTX_PTR _mkcgo_EVP_PKEY_CTX_new_id(int, _ENGINE_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label(_EVP_PKEY_CTX_PTR, unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_set1_hkdf_key(_EVP_PKEY_CTX_PTR, const unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_set1_hkdf_salt(_EVP_PKEY_CTX_PTR, const unsigned char*, int, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_set_hkdf_md(_EVP_PKEY_CTX_PTR, const _EVP_MD_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_set_hkdf_mode(_EVP_PKEY_CTX_PTR, int, uintptr_t *); -+int _mkcgo_EVP_PKEY_CTX_set_params(_EVP_PKEY_CTX_PTR, const _OSSL_PARAM_PTR, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_EC(_OSSL_LIB_CTX_PTR, const char*, const char*, const char*, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_ED25519(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_MLDSA(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_MLKEM(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_RSA(_OSSL_LIB_CTX_PTR, const char*, const char*, size_t, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_Q_keygen_X25519(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+int _mkcgo_EVP_PKEY_assign(_EVP_PKEY_PTR, int, void*, uintptr_t *); -+int _mkcgo_EVP_PKEY_decapsulate(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_decapsulate_init(_EVP_PKEY_CTX_PTR, const _OSSL_PARAM_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_decrypt(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_decrypt_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_derive(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, uintptr_t *); -+int _mkcgo_EVP_PKEY_derive_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_derive_set_peer(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_encapsulate(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, unsigned char*, size_t*, uintptr_t *); -+int _mkcgo_EVP_PKEY_encapsulate_init(_EVP_PKEY_CTX_PTR, const _OSSL_PARAM_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_encrypt(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_encrypt_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_eq(const _EVP_PKEY_PTR, const _EVP_PKEY_PTR, uintptr_t *); -+void _mkcgo_EVP_PKEY_free(_EVP_PKEY_PTR); -+int _mkcgo_EVP_PKEY_fromdata(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR*, int, _OSSL_PARAM_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_fromdata_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+_DSA_PTR _mkcgo_EVP_PKEY_get0_DSA(_EVP_PKEY_PTR, uintptr_t *); -+_EC_KEY_PTR _mkcgo_EVP_PKEY_get0_EC_KEY(_EVP_PKEY_PTR, uintptr_t *); -+_RSA_PTR _mkcgo_EVP_PKEY_get1_RSA(_EVP_PKEY_PTR, uintptr_t *); -+size_t _mkcgo_EVP_PKEY_get1_encoded_public_key(_EVP_PKEY_PTR, unsigned char**, uintptr_t *); -+int _mkcgo_EVP_PKEY_get_bits(const _EVP_PKEY_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_get_bn_param(const _EVP_PKEY_PTR, const char*, _BIGNUM_PTR*, uintptr_t *); -+int _mkcgo_EVP_PKEY_get_octet_string_param(const _EVP_PKEY_PTR, const char*, unsigned char*, size_t, size_t*, uintptr_t *); -+int _mkcgo_EVP_PKEY_get_raw_private_key(const _EVP_PKEY_PTR, unsigned char*, size_t*, uintptr_t *); -+int _mkcgo_EVP_PKEY_get_raw_public_key(const _EVP_PKEY_PTR, unsigned char*, size_t*, uintptr_t *); -+int _mkcgo_EVP_PKEY_get_size(const _EVP_PKEY_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_keygen(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR*, uintptr_t *); -+int _mkcgo_EVP_PKEY_keygen_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_new(uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_new_raw_private_key(int, _ENGINE_PTR, const unsigned char*, size_t, uintptr_t *); -+_EVP_PKEY_PTR _mkcgo_EVP_PKEY_new_raw_public_key(int, _ENGINE_PTR, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_paramgen(_EVP_PKEY_CTX_PTR, _EVP_PKEY_PTR*, uintptr_t *); -+int _mkcgo_EVP_PKEY_paramgen_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_private_check(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_public_check_quick(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_set1_EC_KEY(_EVP_PKEY_PTR, _EC_KEY_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_set1_encoded_public_key(_EVP_PKEY_PTR, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_sign(_EVP_PKEY_CTX_PTR, unsigned char*, size_t*, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_sign_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_up_ref(_EVP_PKEY_PTR, uintptr_t *); -+int _mkcgo_EVP_PKEY_verify(_EVP_PKEY_CTX_PTR, const unsigned char*, size_t, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_EVP_PKEY_verify_init(_EVP_PKEY_CTX_PTR, uintptr_t *); -+_EVP_SIGNATURE_PTR _mkcgo_EVP_SIGNATURE_fetch(_OSSL_LIB_CTX_PTR, const char*, const char*, uintptr_t *); -+void _mkcgo_EVP_SIGNATURE_free(_EVP_SIGNATURE_PTR); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_cbc(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_ctr(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_ecb(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_128_gcm(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_cbc(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_ctr(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_ecb(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_192_gcm(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_cbc(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_ctr(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_ecb(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_aes_256_gcm(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_chacha20_poly1305(void); -+int _mkcgo_EVP_default_properties_enable_fips(_OSSL_LIB_CTX_PTR, int, uintptr_t *); -+int _mkcgo_EVP_default_properties_is_fips_enabled(_OSSL_LIB_CTX_PTR); -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_cbc(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_ecb(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_ede3_cbc(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_des_ede3_ecb(void); -+const _EVP_MD_PTR _mkcgo_EVP_md4(void); -+const _EVP_MD_PTR _mkcgo_EVP_md5(void); -+const _EVP_MD_PTR _mkcgo_EVP_md5_sha1(void); -+const _EVP_CIPHER_PTR _mkcgo_EVP_rc4(void); -+const _EVP_MD_PTR _mkcgo_EVP_ripemd160(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha1(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha224(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha256(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha384(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha3_224(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha3_256(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha3_384(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha3_512(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha512(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha512_224(void); -+const _EVP_MD_PTR _mkcgo_EVP_sha512_256(void); -+int _mkcgo_FIPS_mode(void); -+int _mkcgo_FIPS_mode_set(int, uintptr_t *); -+int _mkcgo_HMAC_CTX_copy(_HMAC_CTX_PTR, _HMAC_CTX_PTR, uintptr_t *); -+void _mkcgo_HMAC_CTX_free(_HMAC_CTX_PTR); -+_HMAC_CTX_PTR _mkcgo_HMAC_CTX_new(uintptr_t *); -+int _mkcgo_HMAC_Final(_HMAC_CTX_PTR, unsigned char*, unsigned int*, uintptr_t *); -+int _mkcgo_HMAC_Init_ex(_HMAC_CTX_PTR, const unsigned char*, int, const _EVP_MD_PTR, _ENGINE_PTR, uintptr_t *); -+int _mkcgo_HMAC_Update(_HMAC_CTX_PTR, const unsigned char*, size_t, uintptr_t *); -+const char* _mkcgo_OBJ_nid2sn(int); -+void _mkcgo_OPENSSL_init(void); -+int _mkcgo_OPENSSL_init_crypto(uint64_t, const _OPENSSL_INIT_SETTINGS_PTR, uintptr_t *); -+unsigned int _mkcgo_OPENSSL_version_major(void); -+unsigned int _mkcgo_OPENSSL_version_minor(void); -+unsigned int _mkcgo_OPENSSL_version_patch(void); -+void _mkcgo_OSSL_PARAM_BLD_free(_OSSL_PARAM_BLD_PTR); -+_OSSL_PARAM_BLD_PTR _mkcgo_OSSL_PARAM_BLD_new(void); -+int _mkcgo_OSSL_PARAM_BLD_push_BN(_OSSL_PARAM_BLD_PTR, const char*, const _BIGNUM_PTR, uintptr_t *); -+int _mkcgo_OSSL_PARAM_BLD_push_int32(_OSSL_PARAM_BLD_PTR, const char*, int32_t, uintptr_t *); -+int _mkcgo_OSSL_PARAM_BLD_push_octet_string(_OSSL_PARAM_BLD_PTR, const char*, const unsigned char*, size_t, uintptr_t *); -+int _mkcgo_OSSL_PARAM_BLD_push_utf8_string(_OSSL_PARAM_BLD_PTR, const char*, const char*, size_t, uintptr_t *); -+_OSSL_PARAM_PTR _mkcgo_OSSL_PARAM_BLD_to_param(_OSSL_PARAM_BLD_PTR, uintptr_t *); -+void _mkcgo_OSSL_PARAM_free(_OSSL_PARAM_PTR); -+const _OSSL_PARAM_PTR _mkcgo_OSSL_PARAM_locate_const(const _OSSL_PARAM_PTR, const char*, uintptr_t *); -+int _mkcgo_OSSL_PROVIDER_available(_OSSL_LIB_CTX_PTR, const char*); -+const char* _mkcgo_OSSL_PROVIDER_get0_name(const _OSSL_PROVIDER_PTR); -+_OSSL_PROVIDER_PTR _mkcgo_OSSL_PROVIDER_try_load(_OSSL_LIB_CTX_PTR, const char*, int, uintptr_t *); -+const char* _mkcgo_OpenSSL_version(int); -+unsigned long _mkcgo_OpenSSL_version_num(void); -+int _mkcgo_PKCS5_PBKDF2_HMAC(const char*, int, const unsigned char*, int, int, const _EVP_MD_PTR, int, unsigned char*, uintptr_t *); -+int _mkcgo_RAND_bytes(unsigned char*, int, uintptr_t *); -+int _mkcgo_RAND_bytes_ex(_OSSL_LIB_CTX_PTR, unsigned char*, size_t, unsigned int, uintptr_t *); -+void _mkcgo_RSA_free(_RSA_PTR); -+void _mkcgo_RSA_get0_crt_params(const _RSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+void _mkcgo_RSA_get0_factors(const _RSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+void _mkcgo_RSA_get0_key(const _RSA_PTR, const _BIGNUM_PTR*, const _BIGNUM_PTR*, const _BIGNUM_PTR*); -+_RSA_PTR _mkcgo_RSA_new(uintptr_t *); -+int _mkcgo_RSA_set0_crt_params(_RSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BIGNUM_PTR, uintptr_t *); -+int _mkcgo_RSA_set0_factors(_RSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, uintptr_t *); -+int _mkcgo_RSA_set0_key(_RSA_PTR, _BIGNUM_PTR, _BIGNUM_PTR, _BIGNUM_PTR, uintptr_t *); -+ -+#endif // MKCGO_H -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_cgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_cgo.go -new file mode 100644 -index 00000000000000..c774468b970dce ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_cgo.go -@@ -0,0 +1,1527 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+package ossl -+ -+/* -+#cgo CFLAGS: -Wno-attributes -+#cgo unix LDFLAGS: -ldl -+ -+#include "zossl.h" -+#cgo noescape _mkcgo_BIO_ctrl -+#cgo nocallback _mkcgo_BIO_ctrl -+#cgo noescape _mkcgo_BIO_free -+#cgo nocallback _mkcgo_BIO_free -+#cgo noescape _mkcgo_ERR_print_errors -+#cgo nocallback _mkcgo_ERR_print_errors -+#cgo noescape _mkcgo_EVP_CipherUpdate -+#cgo nocallback _mkcgo_EVP_CipherUpdate -+#cgo noescape _mkcgo_EVP_DecryptFinal_ex -+#cgo nocallback _mkcgo_EVP_DecryptFinal_ex -+#cgo noescape _mkcgo_EVP_DecryptUpdate -+#cgo nocallback _mkcgo_EVP_DecryptUpdate -+#cgo noescape _mkcgo_EVP_Digest -+#cgo nocallback _mkcgo_EVP_Digest -+#cgo noescape _mkcgo_EVP_DigestFinalXOF -+#cgo nocallback _mkcgo_EVP_DigestFinalXOF -+#cgo noescape _mkcgo_EVP_DigestFinal_ex -+#cgo nocallback _mkcgo_EVP_DigestFinal_ex -+#cgo noescape _mkcgo_EVP_DigestSign -+#cgo nocallback _mkcgo_EVP_DigestSign -+#cgo noescape _mkcgo_EVP_DigestSqueeze -+#cgo nocallback _mkcgo_EVP_DigestSqueeze -+#cgo noescape _mkcgo_EVP_DigestUpdate -+#cgo nocallback _mkcgo_EVP_DigestUpdate -+#cgo noescape _mkcgo_EVP_EncryptFinal_ex -+#cgo nocallback _mkcgo_EVP_EncryptFinal_ex -+#cgo noescape _mkcgo_EVP_EncryptUpdate -+#cgo nocallback _mkcgo_EVP_EncryptUpdate -+#cgo noescape _mkcgo_EVP_MAC_CTX_free -+#cgo nocallback _mkcgo_EVP_MAC_CTX_free -+#cgo noescape _mkcgo_EVP_MAC_final -+#cgo nocallback _mkcgo_EVP_MAC_final -+#cgo noescape _mkcgo_EVP_MAC_init -+#cgo nocallback _mkcgo_EVP_MAC_init -+#cgo noescape _mkcgo_EVP_MAC_update -+#cgo nocallback _mkcgo_EVP_MAC_update -+#cgo noescape _mkcgo_EVP_MD_CTX_get_params -+#cgo nocallback _mkcgo_EVP_MD_CTX_get_params -+#cgo noescape _mkcgo_EVP_MD_CTX_set_params -+#cgo nocallback _mkcgo_EVP_MD_CTX_set_params -+#cgo noescape _mkcgo_EVP_PKEY_CTX_set_params -+#cgo nocallback _mkcgo_EVP_PKEY_CTX_set_params -+#cgo noescape _mkcgo_EVP_PKEY_Q_keygen_EC -+#cgo nocallback _mkcgo_EVP_PKEY_Q_keygen_EC -+#cgo noescape _mkcgo_EVP_PKEY_Q_keygen_ED25519 -+#cgo nocallback _mkcgo_EVP_PKEY_Q_keygen_ED25519 -+#cgo noescape _mkcgo_EVP_PKEY_Q_keygen_MLDSA -+#cgo nocallback _mkcgo_EVP_PKEY_Q_keygen_MLDSA -+#cgo noescape _mkcgo_EVP_PKEY_Q_keygen_MLKEM -+#cgo nocallback _mkcgo_EVP_PKEY_Q_keygen_MLKEM -+#cgo noescape _mkcgo_EVP_PKEY_Q_keygen_RSA -+#cgo nocallback _mkcgo_EVP_PKEY_Q_keygen_RSA -+#cgo noescape _mkcgo_EVP_PKEY_Q_keygen_X25519 -+#cgo nocallback _mkcgo_EVP_PKEY_Q_keygen_X25519 -+#cgo noescape _mkcgo_EVP_PKEY_derive -+#cgo nocallback _mkcgo_EVP_PKEY_derive -+#cgo noescape _mkcgo_EVP_PKEY_eq -+#cgo nocallback _mkcgo_EVP_PKEY_eq -+#cgo noescape _mkcgo_EVP_PKEY_get_bn_param -+#cgo nocallback _mkcgo_EVP_PKEY_get_bn_param -+#cgo noescape _mkcgo_EVP_PKEY_get_raw_private_key -+#cgo nocallback _mkcgo_EVP_PKEY_get_raw_private_key -+#cgo noescape _mkcgo_EVP_PKEY_get_raw_public_key -+#cgo nocallback _mkcgo_EVP_PKEY_get_raw_public_key -+#cgo noescape _mkcgo_EVP_PKEY_keygen -+#cgo nocallback _mkcgo_EVP_PKEY_keygen -+#cgo noescape _mkcgo_HMAC_CTX_copy -+#cgo nocallback _mkcgo_HMAC_CTX_copy -+#cgo noescape _mkcgo_HMAC_CTX_free -+#cgo nocallback _mkcgo_HMAC_CTX_free -+#cgo noescape _mkcgo_HMAC_Final -+#cgo nocallback _mkcgo_HMAC_Final -+#cgo noescape _mkcgo_HMAC_Init_ex -+#cgo nocallback _mkcgo_HMAC_Init_ex -+#cgo noescape _mkcgo_HMAC_Update -+#cgo nocallback _mkcgo_HMAC_Update -+#cgo noescape _mkcgo_RAND_bytes -+#cgo nocallback _mkcgo_RAND_bytes -+#cgo noescape _mkcgo_RAND_bytes_ex -+#cgo nocallback _mkcgo_RAND_bytes_ex -+*/ -+import "C" -+import "unsafe" -+ -+type BIGNUM_PTR = C._BIGNUM_PTR -+type BIO_METHOD_PTR = C._BIO_METHOD_PTR -+type BIO_PTR = C._BIO_PTR -+type BN_CTX_PTR = C._BN_CTX_PTR -+type DSA_PTR = C._DSA_PTR -+type EC_GROUP_PTR = C._EC_GROUP_PTR -+type EC_KEY_PTR = C._EC_KEY_PTR -+type EC_POINT_PTR = C._EC_POINT_PTR -+type ENGINE_PTR = C._ENGINE_PTR -+type EVP_CIPHER_CTX_PTR = C._EVP_CIPHER_CTX_PTR -+type EVP_CIPHER_PTR = C._EVP_CIPHER_PTR -+type EVP_KDF_CTX_PTR = C._EVP_KDF_CTX_PTR -+type EVP_KDF_PTR = C._EVP_KDF_PTR -+type EVP_KEYMGMT_PTR = C._EVP_KEYMGMT_PTR -+type EVP_MAC_CTX_PTR = C._EVP_MAC_CTX_PTR -+type EVP_MAC_PTR = C._EVP_MAC_PTR -+type EVP_MD_CTX_PTR = C._EVP_MD_CTX_PTR -+type EVP_MD_PTR = C._EVP_MD_PTR -+type EVP_PKEY_CTX_PTR = C._EVP_PKEY_CTX_PTR -+type EVP_PKEY_PTR = C._EVP_PKEY_PTR -+type EVP_SIGNATURE_PTR = C._EVP_SIGNATURE_PTR -+type HMAC_CTX_PTR = C._HMAC_CTX_PTR -+type OPENSSL_INIT_SETTINGS_PTR = C._OPENSSL_INIT_SETTINGS_PTR -+type OSSL_LIB_CTX_PTR = C._OSSL_LIB_CTX_PTR -+type OSSL_PARAM_BLD_PTR = C._OSSL_PARAM_BLD_PTR -+type OSSL_PARAM_PTR = C._OSSL_PARAM_PTR -+type OSSL_PROVIDER_PTR = C._OSSL_PROVIDER_PTR -+type RSA_PTR = C._RSA_PTR -+type Point_conversion_form_t = C.point_conversion_form_t -+ -+func MkcgoLoad_(handle unsafe.Pointer) { -+ C.__mkcgo_load_(handle) -+} -+ -+func MkcgoUnload_() { -+ C.__mkcgo_unload_() -+} -+ -+func MkcgoLoad_3(handle unsafe.Pointer) { -+ C.__mkcgo_load_3(handle) -+} -+ -+func MkcgoUnload_3() { -+ C.__mkcgo_unload_3() -+} -+ -+func MkcgoLoad_33(handle unsafe.Pointer) { -+ C.__mkcgo_load_33(handle) -+} -+ -+func MkcgoUnload_33() { -+ C.__mkcgo_unload_33() -+} -+ -+func MkcgoLoad_init_1(handle unsafe.Pointer) { -+ C.__mkcgo_load_init_1(handle) -+} -+ -+func MkcgoUnload_init_1() { -+ C.__mkcgo_unload_init_1() -+} -+ -+func MkcgoLoad_init_3(handle unsafe.Pointer) { -+ C.__mkcgo_load_init_3(handle) -+} -+ -+func MkcgoUnload_init_3() { -+ C.__mkcgo_unload_init_3() -+} -+ -+func MkcgoLoad_legacy_1(handle unsafe.Pointer) { -+ C.__mkcgo_load_legacy_1(handle) -+} -+ -+func MkcgoUnload_legacy_1() { -+ C.__mkcgo_unload_legacy_1() -+} -+ -+func MkcgoLoad_version(handle unsafe.Pointer) { -+ C.__mkcgo_load_version(handle) -+} -+ -+func MkcgoUnload_version() { -+ C.__mkcgo_unload_version() -+} -+ -+//go:nosplit -+func mkcgoNoEscape(p *C.uintptr_t) *C.uintptr_t { -+ x := uintptr(unsafe.Pointer(p)) -+ return (*C.uintptr_t)(unsafe.Pointer(x ^ 0)) -+} -+ -+func BIO_ctrl(bp BIO_PTR, cmd int32, larg int64, parg unsafe.Pointer) int64 { -+ return int64(C._mkcgo_BIO_ctrl(bp, C.int(cmd), C.long(larg), parg)) -+} -+ -+func BIO_free(a BIO_PTR) int32 { -+ return int32(C._mkcgo_BIO_free(a)) -+} -+ -+func BIO_new(__type BIO_METHOD_PTR) (BIO_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_BIO_new(__type, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("BIO_new", uintptr(_err)) -+} -+ -+func BIO_s_mem() BIO_METHOD_PTR { -+ return C._mkcgo_BIO_s_mem() -+} -+ -+func BN_bin2bn(arg0 []byte, arg2 BIGNUM_PTR) (BIGNUM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_BN_bin2bn((*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg0))), C.int(len(arg0)), arg2, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("BN_bin2bn", uintptr(_err)) -+} -+ -+func BN_bn2binpad(a BIGNUM_PTR, to []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_BN_bn2binpad(a, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(to))), C.int(len(to)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("BN_bn2binpad", uintptr(_err)) -+} -+ -+func BN_bn2lebinpad(a BIGNUM_PTR, to []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_BN_bn2lebinpad(a, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(to))), C.int(len(to)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("BN_bn2lebinpad", uintptr(_err)) -+} -+ -+func BN_clear(arg0 BIGNUM_PTR) { -+ C._mkcgo_BN_clear(arg0) -+} -+ -+func BN_clear_free(arg0 BIGNUM_PTR) { -+ C._mkcgo_BN_clear_free(arg0) -+} -+ -+func BN_free(arg0 BIGNUM_PTR) { -+ C._mkcgo_BN_free(arg0) -+} -+ -+func BN_lebin2bn(s []byte, ret BIGNUM_PTR) (BIGNUM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_BN_lebin2bn((*C.uchar)(unsafe.Pointer(unsafe.SliceData(s))), C.int(len(s)), ret, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("BN_lebin2bn", uintptr(_err)) -+} -+ -+func BN_new() (BIGNUM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_BN_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("BN_new", uintptr(_err)) -+} -+ -+func BN_num_bits(arg0 BIGNUM_PTR) int32 { -+ return int32(C._mkcgo_BN_num_bits(arg0)) -+} -+ -+func CRYPTO_free(str unsafe.Pointer, file *byte, line int32) { -+ C._mkcgo_CRYPTO_free(str, (*C.char)(unsafe.Pointer(file)), C.int(line)) -+} -+ -+func CRYPTO_malloc(num int, file *byte, line int32) (unsafe.Pointer, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_CRYPTO_malloc(C.size_t(num), (*C.char)(unsafe.Pointer(file)), C.int(line), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("CRYPTO_malloc", uintptr(_err)) -+} -+ -+func DSA_free(r DSA_PTR) { -+ C._mkcgo_DSA_free(r) -+} -+ -+func DSA_generate_key(a DSA_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_DSA_generate_key(a, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("DSA_generate_key", uintptr(_err)) -+} -+ -+func DSA_get0_key(d DSA_PTR, pub_key *BIGNUM_PTR, priv_key *BIGNUM_PTR) { -+ C._mkcgo_DSA_get0_key(d, pub_key, priv_key) -+} -+ -+func DSA_get0_pqg(d DSA_PTR, p *BIGNUM_PTR, q *BIGNUM_PTR, g *BIGNUM_PTR) { -+ C._mkcgo_DSA_get0_pqg(d, p, q, g) -+} -+ -+func DSA_new() (DSA_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_DSA_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("DSA_new", uintptr(_err)) -+} -+ -+func DSA_set0_key(d DSA_PTR, pub_key BIGNUM_PTR, priv_key BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_DSA_set0_key(d, pub_key, priv_key, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("DSA_set0_key", uintptr(_err)) -+} -+ -+func DSA_set0_pqg(d DSA_PTR, p BIGNUM_PTR, q BIGNUM_PTR, g BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_DSA_set0_pqg(d, p, q, g, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("DSA_set0_pqg", uintptr(_err)) -+} -+ -+func EC_GROUP_free(group EC_GROUP_PTR) { -+ C._mkcgo_EC_GROUP_free(group) -+} -+ -+func EC_GROUP_new_by_curve_name(nid int32) (EC_GROUP_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_GROUP_new_by_curve_name(C.int(nid), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EC_GROUP_new_by_curve_name", uintptr(_err)) -+} -+ -+func EC_KEY_check_key(key EC_KEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_KEY_check_key(key, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_KEY_check_key", uintptr(_err)) -+} -+ -+func EC_KEY_free(arg0 EC_KEY_PTR) { -+ C._mkcgo_EC_KEY_free(arg0) -+} -+ -+func EC_KEY_get0_group(arg0 EC_KEY_PTR) EC_GROUP_PTR { -+ return C._mkcgo_EC_KEY_get0_group(arg0) -+} -+ -+func EC_KEY_get0_private_key(arg0 EC_KEY_PTR) BIGNUM_PTR { -+ return C._mkcgo_EC_KEY_get0_private_key(arg0) -+} -+ -+func EC_KEY_get0_public_key(arg0 EC_KEY_PTR) EC_POINT_PTR { -+ return C._mkcgo_EC_KEY_get0_public_key(arg0) -+} -+ -+func EC_KEY_new_by_curve_name(arg0 int32) (EC_KEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_KEY_new_by_curve_name(C.int(arg0), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EC_KEY_new_by_curve_name", uintptr(_err)) -+} -+ -+func EC_KEY_set_private_key(arg0 EC_KEY_PTR, arg1 BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_KEY_set_private_key(arg0, arg1, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_KEY_set_private_key", uintptr(_err)) -+} -+ -+func EC_KEY_set_public_key(key EC_KEY_PTR, pub EC_POINT_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_KEY_set_public_key(key, pub, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_KEY_set_public_key", uintptr(_err)) -+} -+ -+func EC_KEY_set_public_key_affine_coordinates(key EC_KEY_PTR, x BIGNUM_PTR, y BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_KEY_set_public_key_affine_coordinates(key, x, y, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_KEY_set_public_key_affine_coordinates", uintptr(_err)) -+} -+ -+func EC_POINT_free(arg0 EC_POINT_PTR) { -+ C._mkcgo_EC_POINT_free(arg0) -+} -+ -+func EC_POINT_get_affine_coordinates_GFp(arg0 EC_GROUP_PTR, arg1 EC_POINT_PTR, arg2 BIGNUM_PTR, arg3 BIGNUM_PTR, arg4 BN_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_POINT_get_affine_coordinates_GFp(arg0, arg1, arg2, arg3, arg4, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_POINT_get_affine_coordinates_GFp", uintptr(_err)) -+} -+ -+func EC_POINT_mul(group EC_GROUP_PTR, r EC_POINT_PTR, n BIGNUM_PTR, q EC_POINT_PTR, m BIGNUM_PTR, ctx BN_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_POINT_mul(group, r, n, q, m, ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_POINT_mul", uintptr(_err)) -+} -+ -+func EC_POINT_new(arg0 EC_GROUP_PTR) (EC_POINT_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_POINT_new(arg0, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EC_POINT_new", uintptr(_err)) -+} -+ -+func EC_POINT_oct2point(group EC_GROUP_PTR, p EC_POINT_PTR, buf []byte, ctx BN_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_POINT_oct2point(group, p, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(buf))), C.size_t(len(buf)), ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_POINT_oct2point", uintptr(_err)) -+} -+ -+func EC_POINT_point2oct(group EC_GROUP_PTR, p EC_POINT_PTR, form Point_conversion_form_t, buf []byte, ctx BN_CTX_PTR) (int, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_POINT_point2oct(group, p, form, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(buf))), C.size_t(len(buf)), ctx, mkcgoNoEscape(&_err)) -+ return int(_ret), newMkcgoErr("EC_POINT_point2oct", uintptr(_err)) -+} -+ -+func EC_POINT_set_affine_coordinates(arg0 EC_GROUP_PTR, arg1 EC_POINT_PTR, arg2 BIGNUM_PTR, arg3 BIGNUM_PTR, arg4 BN_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EC_POINT_set_affine_coordinates(arg0, arg1, arg2, arg3, arg4, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EC_POINT_set_affine_coordinates", uintptr(_err)) -+} -+ -+func ERR_peek_error() uint64 { -+ return uint64(C._mkcgo_ERR_peek_error()) -+} -+ -+func ERR_print_errors(bp BIO_PTR) { -+ C._mkcgo_ERR_print_errors(bp) -+} -+ -+func EVP_CIPHER_CTX_ctrl(ctx EVP_CIPHER_CTX_PTR, __type int32, arg int32, ptr unsafe.Pointer) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CIPHER_CTX_ctrl(ctx, C.int(__type), C.int(arg), ptr, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_CIPHER_CTX_ctrl", uintptr(_err)) -+} -+ -+func EVP_CIPHER_CTX_free(arg0 EVP_CIPHER_CTX_PTR) { -+ C._mkcgo_EVP_CIPHER_CTX_free(arg0) -+} -+ -+func EVP_CIPHER_CTX_new() (EVP_CIPHER_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CIPHER_CTX_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_CIPHER_CTX_new", uintptr(_err)) -+} -+ -+func EVP_CIPHER_CTX_set_key_length(x EVP_CIPHER_CTX_PTR, keylen int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CIPHER_CTX_set_key_length(x, C.int(keylen), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_CIPHER_CTX_set_key_length", uintptr(_err)) -+} -+ -+func EVP_CIPHER_CTX_set_padding(x EVP_CIPHER_CTX_PTR, padding int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CIPHER_CTX_set_padding(x, C.int(padding), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_CIPHER_CTX_set_padding", uintptr(_err)) -+} -+ -+func EVP_CIPHER_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_CIPHER_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CIPHER_fetch(ctx, (*C.char)(unsafe.Pointer(algorithm)), (*C.char)(unsafe.Pointer(properties)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_CIPHER_fetch", uintptr(_err)) -+} -+ -+func EVP_CIPHER_get0_name(cipher EVP_CIPHER_PTR) *byte { -+ return (*byte)(unsafe.Pointer(C._mkcgo_EVP_CIPHER_get0_name(cipher))) -+} -+ -+func EVP_CIPHER_get_block_size(cipher EVP_CIPHER_PTR) int32 { -+ return int32(C._mkcgo_EVP_CIPHER_get_block_size(cipher)) -+} -+ -+func EVP_CipherInit_ex(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, impl ENGINE_PTR, key *byte, iv *byte, enc int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CipherInit_ex(ctx, __type, impl, (*C.uchar)(unsafe.Pointer(key)), (*C.uchar)(unsafe.Pointer(iv)), C.int(enc), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_CipherInit_ex", uintptr(_err)) -+} -+ -+func EVP_CipherInit_ex2(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, key *byte, iv *byte, enc int32, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CipherInit_ex2(ctx, __type, (*C.uchar)(unsafe.Pointer(key)), (*C.uchar)(unsafe.Pointer(iv)), C.int(enc), params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_CipherInit_ex2", uintptr(_err)) -+} -+ -+func EVP_CipherUpdate(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32, in []byte) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_CipherUpdate: *outl exceeds len(out)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_CipherUpdate(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), (*C.int)(unsafe.Pointer(outl)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(in))), C.int(len(in)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_CipherUpdate", uintptr(_err)) -+} -+ -+func EVP_DecryptFinal_ex(ctx EVP_CIPHER_CTX_PTR, outm []byte, outl *int32) (int32, error) { -+ if outl != nil && int(*outl) > len(outm) { -+ panic("EVP_DecryptFinal_ex: *outl exceeds len(outm)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DecryptFinal_ex(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(outm))), (*C.int)(unsafe.Pointer(outl)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DecryptFinal_ex", uintptr(_err)) -+} -+ -+func EVP_DecryptInit_ex(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, impl ENGINE_PTR, key *byte, iv *byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DecryptInit_ex(ctx, __type, impl, (*C.uchar)(unsafe.Pointer(key)), (*C.uchar)(unsafe.Pointer(iv)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DecryptInit_ex", uintptr(_err)) -+} -+ -+func EVP_DecryptUpdate(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32, in []byte) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_DecryptUpdate: *outl exceeds len(out)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DecryptUpdate(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), (*C.int)(unsafe.Pointer(outl)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(in))), C.int(len(in)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DecryptUpdate", uintptr(_err)) -+} -+ -+func EVP_Digest(data []byte, md []byte, size *uint32, __type EVP_MD_PTR, impl ENGINE_PTR) (int32, error) { -+ if size != nil && int(*size) > len(md) { -+ panic("EVP_Digest: *size exceeds len(md)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_Digest((*C.uchar)(unsafe.Pointer(unsafe.SliceData(data))), C.size_t(len(data)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(md))), (*C.uint)(unsafe.Pointer(size)), __type, impl, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_Digest", uintptr(_err)) -+} -+ -+func EVP_DigestFinalXOF(ctx EVP_MD_CTX_PTR, md []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestFinalXOF(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(md))), C.size_t(len(md)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestFinalXOF", uintptr(_err)) -+} -+ -+func EVP_DigestFinal_ex(ctx EVP_MD_CTX_PTR, md []byte, s *uint32) (int32, error) { -+ if s != nil && int(*s) > len(md) { -+ panic("EVP_DigestFinal_ex: *s exceeds len(md)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestFinal_ex(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(md))), (*C.uint)(unsafe.Pointer(s)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestFinal_ex", uintptr(_err)) -+} -+ -+func EVP_DigestInit(ctx EVP_MD_CTX_PTR, __type EVP_MD_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestInit(ctx, __type, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestInit", uintptr(_err)) -+} -+ -+func EVP_DigestInit_ex(ctx EVP_MD_CTX_PTR, __type EVP_MD_PTR, impl ENGINE_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestInit_ex(ctx, __type, impl, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestInit_ex", uintptr(_err)) -+} -+ -+func EVP_DigestSign(ctx EVP_MD_CTX_PTR, sigret []byte, siglen *int, tbs []byte) (int32, error) { -+ if siglen != nil && int(*siglen) > len(sigret) { -+ panic("EVP_DigestSign: *siglen exceeds len(sigret)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestSign(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(sigret))), (*C.size_t)(unsafe.Pointer(siglen)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(tbs))), C.size_t(len(tbs)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestSign", uintptr(_err)) -+} -+ -+func EVP_DigestSignFinal(ctx EVP_MD_CTX_PTR, sig []byte, siglen *int) (int32, error) { -+ if siglen != nil && int(*siglen) > len(sig) { -+ panic("EVP_DigestSignFinal: *siglen exceeds len(sig)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestSignFinal(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(sig))), (*C.size_t)(unsafe.Pointer(siglen)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestSignFinal", uintptr(_err)) -+} -+ -+func EVP_DigestSignInit(ctx EVP_MD_CTX_PTR, pctx *EVP_PKEY_CTX_PTR, __type EVP_MD_PTR, e ENGINE_PTR, pkey EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestSignInit(ctx, pctx, __type, e, pkey, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestSignInit", uintptr(_err)) -+} -+ -+func EVP_DigestSqueeze_Available() bool { -+ return C._mkcgo_available_EVP_DigestSqueeze() != 0 -+} -+ -+func EVP_DigestSqueeze(ctx EVP_MD_CTX_PTR, out []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestSqueeze(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), C.size_t(len(out)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestSqueeze", uintptr(_err)) -+} -+ -+func EVP_DigestUpdate(ctx EVP_MD_CTX_PTR, d []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestUpdate(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(d))), C.size_t(len(d)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestUpdate", uintptr(_err)) -+} -+ -+func EVP_DigestVerify(ctx EVP_MD_CTX_PTR, sigret []byte, tbs []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestVerify(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(sigret))), C.size_t(len(sigret)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(tbs))), C.size_t(len(tbs)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestVerify", uintptr(_err)) -+} -+ -+func EVP_DigestVerifyFinal(ctx EVP_MD_CTX_PTR, sig []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestVerifyFinal(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(sig))), C.size_t(len(sig)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestVerifyFinal", uintptr(_err)) -+} -+ -+func EVP_DigestVerifyInit(ctx EVP_MD_CTX_PTR, pctx *EVP_PKEY_CTX_PTR, __type EVP_MD_PTR, e ENGINE_PTR, pkey EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_DigestVerifyInit(ctx, pctx, __type, e, pkey, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_DigestVerifyInit", uintptr(_err)) -+} -+ -+func EVP_EncryptFinal_ex(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_EncryptFinal_ex: *outl exceeds len(out)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_EncryptFinal_ex(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), (*C.int)(unsafe.Pointer(outl)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_EncryptFinal_ex", uintptr(_err)) -+} -+ -+func EVP_EncryptInit_ex(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, impl ENGINE_PTR, key *byte, iv *byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_EncryptInit_ex(ctx, __type, impl, (*C.uchar)(unsafe.Pointer(key)), (*C.uchar)(unsafe.Pointer(iv)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_EncryptInit_ex", uintptr(_err)) -+} -+ -+func EVP_EncryptUpdate(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32, in []byte) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_EncryptUpdate: *outl exceeds len(out)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_EncryptUpdate(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), (*C.int)(unsafe.Pointer(outl)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(in))), C.int(len(in)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_EncryptUpdate", uintptr(_err)) -+} -+ -+func EVP_KDF_CTX_free(ctx EVP_KDF_CTX_PTR) { -+ C._mkcgo_EVP_KDF_CTX_free(ctx) -+} -+ -+func EVP_KDF_CTX_get_kdf_size(ctx EVP_KDF_CTX_PTR) (int, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_KDF_CTX_get_kdf_size(ctx, mkcgoNoEscape(&_err)) -+ return int(_ret), newMkcgoErr("EVP_KDF_CTX_get_kdf_size", uintptr(_err)) -+} -+ -+func EVP_KDF_CTX_new(kdf EVP_KDF_PTR) (EVP_KDF_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_KDF_CTX_new(kdf, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_KDF_CTX_new", uintptr(_err)) -+} -+ -+func EVP_KDF_CTX_set_params(ctx EVP_KDF_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_KDF_CTX_set_params(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_KDF_CTX_set_params", uintptr(_err)) -+} -+ -+func EVP_KDF_derive(ctx EVP_KDF_CTX_PTR, key []byte, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_KDF_derive(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_KDF_derive", uintptr(_err)) -+} -+ -+func EVP_KDF_fetch(libctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_KDF_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_KDF_fetch(libctx, (*C.char)(unsafe.Pointer(algorithm)), (*C.char)(unsafe.Pointer(properties)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_KDF_fetch", uintptr(_err)) -+} -+ -+func EVP_KDF_free(kdf EVP_KDF_PTR) { -+ C._mkcgo_EVP_KDF_free(kdf) -+} -+ -+func EVP_KEYMGMT_fetch_Available() bool { -+ return C._mkcgo_available_EVP_KEYMGMT_fetch() != 0 -+} -+ -+func EVP_KEYMGMT_fetch(libctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_KEYMGMT_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_KEYMGMT_fetch(libctx, (*C.char)(unsafe.Pointer(algorithm)), (*C.char)(unsafe.Pointer(properties)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_KEYMGMT_fetch", uintptr(_err)) -+} -+ -+func EVP_KEYMGMT_free(keymgmt EVP_KEYMGMT_PTR) { -+ C._mkcgo_EVP_KEYMGMT_free(keymgmt) -+} -+ -+func EVP_MAC_CTX_dup(arg0 EVP_MAC_CTX_PTR) (EVP_MAC_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_CTX_dup(arg0, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MAC_CTX_dup", uintptr(_err)) -+} -+ -+func EVP_MAC_CTX_free(arg0 EVP_MAC_CTX_PTR) { -+ C._mkcgo_EVP_MAC_CTX_free(arg0) -+} -+ -+func EVP_MAC_CTX_new(arg0 EVP_MAC_PTR) (EVP_MAC_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_CTX_new(arg0, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MAC_CTX_new", uintptr(_err)) -+} -+ -+func EVP_MAC_CTX_set_params(ctx EVP_MAC_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_CTX_set_params(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MAC_CTX_set_params", uintptr(_err)) -+} -+ -+func EVP_MAC_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_MAC_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_fetch(ctx, (*C.char)(unsafe.Pointer(algorithm)), (*C.char)(unsafe.Pointer(properties)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MAC_fetch", uintptr(_err)) -+} -+ -+func EVP_MAC_final(ctx EVP_MAC_CTX_PTR, out []byte, outl *int) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_final(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), (*C.size_t)(unsafe.Pointer(outl)), C.size_t(len(out)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MAC_final", uintptr(_err)) -+} -+ -+func EVP_MAC_init(ctx EVP_MAC_CTX_PTR, key []byte, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_init(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MAC_init", uintptr(_err)) -+} -+ -+func EVP_MAC_update(ctx EVP_MAC_CTX_PTR, data []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MAC_update(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(data))), C.size_t(len(data)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MAC_update", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_copy_ex(out EVP_MD_CTX_PTR, in EVP_MD_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_copy_ex(out, in, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MD_CTX_copy_ex", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_ctrl(ctx EVP_MD_CTX_PTR, cmd int32, p1 int32, p2 unsafe.Pointer) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_ctrl(ctx, C.int(cmd), C.int(p1), p2, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MD_CTX_ctrl", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_free(ctx EVP_MD_CTX_PTR) { -+ C._mkcgo_EVP_MD_CTX_free(ctx) -+} -+ -+func EVP_MD_CTX_get_params(ctx EVP_MD_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_get_params(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MD_CTX_get_params", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_gettable_params(ctx EVP_MD_CTX_PTR) (OSSL_PARAM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_gettable_params(ctx, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MD_CTX_gettable_params", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_new() (EVP_MD_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MD_CTX_new", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_set_params(ctx EVP_MD_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_set_params(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_MD_CTX_set_params", uintptr(_err)) -+} -+ -+func EVP_MD_CTX_settable_params(ctx EVP_MD_CTX_PTR) (OSSL_PARAM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_CTX_settable_params(ctx, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MD_CTX_settable_params", uintptr(_err)) -+} -+ -+func EVP_MD_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_MD_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_MD_fetch(ctx, (*C.char)(unsafe.Pointer(algorithm)), (*C.char)(unsafe.Pointer(properties)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_MD_fetch", uintptr(_err)) -+} -+ -+func EVP_MD_free(md EVP_MD_PTR) { -+ C._mkcgo_EVP_MD_free(md) -+} -+ -+func EVP_MD_get0_name(md EVP_MD_PTR) *byte { -+ return (*byte)(unsafe.Pointer(C._mkcgo_EVP_MD_get0_name(md))) -+} -+ -+func EVP_MD_get0_provider(md EVP_MD_PTR) OSSL_PROVIDER_PTR { -+ return C._mkcgo_EVP_MD_get0_provider(md) -+} -+ -+func EVP_MD_get_block_size(md EVP_MD_PTR) int32 { -+ return int32(C._mkcgo_EVP_MD_get_block_size(md)) -+} -+ -+func EVP_MD_get_size(md EVP_MD_PTR) int32 { -+ return int32(C._mkcgo_EVP_MD_get_size(md)) -+} -+ -+func EVP_MD_get_type(md EVP_MD_PTR) int32 { -+ return int32(C._mkcgo_EVP_MD_get_type(md)) -+} -+ -+func EVP_PKEY_CTX_add1_hkdf_info(arg0 EVP_PKEY_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_add1_hkdf_info(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), C.int(len(arg1)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_add1_hkdf_info", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_ctrl(ctx EVP_PKEY_CTX_PTR, keytype int32, optype int32, cmd int32, p1 int32, p2 unsafe.Pointer) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_ctrl(ctx, C.int(keytype), C.int(optype), C.int(cmd), C.int(p1), p2, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_ctrl", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_free(arg0 EVP_PKEY_CTX_PTR) { -+ C._mkcgo_EVP_PKEY_CTX_free(arg0) -+} -+ -+func EVP_PKEY_CTX_new(arg0 EVP_PKEY_PTR, arg1 ENGINE_PTR) (EVP_PKEY_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_new(arg0, arg1, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_CTX_new", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_new_from_pkey(libctx OSSL_LIB_CTX_PTR, pkey EVP_PKEY_PTR, propquery *byte) (EVP_PKEY_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_new_from_pkey(libctx, pkey, (*C.char)(unsafe.Pointer(propquery)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_CTX_new_from_pkey", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_new_id(id int32, e ENGINE_PTR) (EVP_PKEY_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_new_id(C.int(id), e, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_CTX_new_id", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_set0_rsa_oaep_label(ctx EVP_PKEY_CTX_PTR, label []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(label))), C.int(len(label)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_set0_rsa_oaep_label", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_set1_hkdf_key(arg0 EVP_PKEY_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_set1_hkdf_key(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), C.int(len(arg1)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_set1_hkdf_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_set1_hkdf_salt(arg0 EVP_PKEY_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_set1_hkdf_salt(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), C.int(len(arg1)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_set1_hkdf_salt", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_set_hkdf_md(arg0 EVP_PKEY_CTX_PTR, arg1 EVP_MD_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_set_hkdf_md(arg0, arg1, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_set_hkdf_md", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_set_hkdf_mode(arg0 EVP_PKEY_CTX_PTR, arg1 int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_set_hkdf_mode(arg0, C.int(arg1), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_set_hkdf_mode", uintptr(_err)) -+} -+ -+func EVP_PKEY_CTX_set_params(ctx EVP_PKEY_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_CTX_set_params(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_CTX_set_params", uintptr(_err)) -+} -+ -+func EVP_PKEY_Q_keygen_EC(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte, arg1 *byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_Q_keygen_EC(ctx, (*C.char)(unsafe.Pointer(propq)), (*C.char)(unsafe.Pointer(__type)), (*C.char)(unsafe.Pointer(arg1)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_Q_keygen_EC", uintptr(_err)) -+} -+ -+func EVP_PKEY_Q_keygen_ED25519(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_Q_keygen_ED25519(ctx, (*C.char)(unsafe.Pointer(propq)), (*C.char)(unsafe.Pointer(__type)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_Q_keygen_ED25519", uintptr(_err)) -+} -+ -+func EVP_PKEY_Q_keygen_MLDSA(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_Q_keygen_MLDSA(ctx, (*C.char)(unsafe.Pointer(propq)), (*C.char)(unsafe.Pointer(__type)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_Q_keygen_MLDSA", uintptr(_err)) -+} -+ -+func EVP_PKEY_Q_keygen_MLKEM(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_Q_keygen_MLKEM(ctx, (*C.char)(unsafe.Pointer(propq)), (*C.char)(unsafe.Pointer(__type)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_Q_keygen_MLKEM", uintptr(_err)) -+} -+ -+func EVP_PKEY_Q_keygen_RSA(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte, arg1 int) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_Q_keygen_RSA(ctx, (*C.char)(unsafe.Pointer(propq)), (*C.char)(unsafe.Pointer(__type)), C.size_t(arg1), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_Q_keygen_RSA", uintptr(_err)) -+} -+ -+func EVP_PKEY_Q_keygen_X25519(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_Q_keygen_X25519(ctx, (*C.char)(unsafe.Pointer(propq)), (*C.char)(unsafe.Pointer(__type)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_Q_keygen_X25519", uintptr(_err)) -+} -+ -+func EVP_PKEY_assign(pkey EVP_PKEY_PTR, __type int32, key unsafe.Pointer) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_assign(pkey, C.int(__type), key, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_assign", uintptr(_err)) -+} -+ -+func EVP_PKEY_decapsulate(ctx EVP_PKEY_CTX_PTR, genkey *byte, genkeylen *int, wrappedkey *byte, wrappedkeylen int) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_decapsulate(ctx, (*C.uchar)(unsafe.Pointer(genkey)), (*C.size_t)(unsafe.Pointer(genkeylen)), (*C.uchar)(unsafe.Pointer(wrappedkey)), C.size_t(wrappedkeylen), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_decapsulate", uintptr(_err)) -+} -+ -+func EVP_PKEY_decapsulate_init(ctx EVP_PKEY_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_decapsulate_init(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_decapsulate_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_decrypt(arg0 EVP_PKEY_CTX_PTR, arg1 []byte, arg2 *int, arg3 []byte) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("EVP_PKEY_decrypt: *arg2 exceeds len(arg1)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_decrypt(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), (*C.size_t)(unsafe.Pointer(arg2)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg3))), C.size_t(len(arg3)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_decrypt", uintptr(_err)) -+} -+ -+func EVP_PKEY_decrypt_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_decrypt_init(arg0, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_decrypt_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_derive(ctx EVP_PKEY_CTX_PTR, key []byte, keylen *int) (int32, error) { -+ if keylen != nil && int(*keylen) > len(key) { -+ panic("EVP_PKEY_derive: *keylen exceeds len(key)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_derive(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), (*C.size_t)(unsafe.Pointer(keylen)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_derive", uintptr(_err)) -+} -+ -+func EVP_PKEY_derive_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_derive_init(ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_derive_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_derive_set_peer(ctx EVP_PKEY_CTX_PTR, peer EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_derive_set_peer(ctx, peer, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_derive_set_peer", uintptr(_err)) -+} -+ -+func EVP_PKEY_encapsulate(ctx EVP_PKEY_CTX_PTR, wrappedkey *byte, wrappedkeylen *int, genkey *byte, genkeylen *int) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_encapsulate(ctx, (*C.uchar)(unsafe.Pointer(wrappedkey)), (*C.size_t)(unsafe.Pointer(wrappedkeylen)), (*C.uchar)(unsafe.Pointer(genkey)), (*C.size_t)(unsafe.Pointer(genkeylen)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_encapsulate", uintptr(_err)) -+} -+ -+func EVP_PKEY_encapsulate_init(ctx EVP_PKEY_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_encapsulate_init(ctx, params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_encapsulate_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_encrypt(arg0 EVP_PKEY_CTX_PTR, arg1 []byte, arg2 *int, arg3 []byte) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("EVP_PKEY_encrypt: *arg2 exceeds len(arg1)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_encrypt(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), (*C.size_t)(unsafe.Pointer(arg2)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg3))), C.size_t(len(arg3)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_encrypt", uintptr(_err)) -+} -+ -+func EVP_PKEY_encrypt_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_encrypt_init(arg0, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_encrypt_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_eq(a EVP_PKEY_PTR, b EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_eq(a, b, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_eq", uintptr(_err)) -+} -+ -+func EVP_PKEY_free(arg0 EVP_PKEY_PTR) { -+ C._mkcgo_EVP_PKEY_free(arg0) -+} -+ -+func EVP_PKEY_fromdata(ctx EVP_PKEY_CTX_PTR, pkey *EVP_PKEY_PTR, selection int32, params OSSL_PARAM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_fromdata(ctx, pkey, C.int(selection), params, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_fromdata", uintptr(_err)) -+} -+ -+func EVP_PKEY_fromdata_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_fromdata_init(ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_fromdata_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_get0_DSA(pkey EVP_PKEY_PTR) (DSA_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get0_DSA(pkey, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_get0_DSA", uintptr(_err)) -+} -+ -+func EVP_PKEY_get0_EC_KEY(pkey EVP_PKEY_PTR) (EC_KEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get0_EC_KEY(pkey, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_get0_EC_KEY", uintptr(_err)) -+} -+ -+func EVP_PKEY_get1_RSA(pkey EVP_PKEY_PTR) (RSA_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get1_RSA(pkey, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_get1_RSA", uintptr(_err)) -+} -+ -+func EVP_PKEY_get1_encoded_public_key(pkey EVP_PKEY_PTR, ppub **byte) (int, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get1_encoded_public_key(pkey, (**C.uchar)(unsafe.Pointer(ppub)), mkcgoNoEscape(&_err)) -+ return int(_ret), newMkcgoErr("EVP_PKEY_get1_encoded_public_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_get_bits(pkey EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get_bits(pkey, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_get_bits", uintptr(_err)) -+} -+ -+func EVP_PKEY_get_bn_param(pkey EVP_PKEY_PTR, key_name *byte, bn *BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get_bn_param(pkey, (*C.char)(unsafe.Pointer(key_name)), bn, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_get_bn_param", uintptr(_err)) -+} -+ -+func EVP_PKEY_get_octet_string_param(pkey EVP_PKEY_PTR, key_name *byte, buf []byte, out_len *int) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get_octet_string_param(pkey, (*C.char)(unsafe.Pointer(key_name)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(buf))), C.size_t(len(buf)), (*C.size_t)(unsafe.Pointer(out_len)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_get_octet_string_param", uintptr(_err)) -+} -+ -+func EVP_PKEY_get_raw_private_key(pkey EVP_PKEY_PTR, priv []byte, privlen *int) (int32, error) { -+ if privlen != nil && int(*privlen) > len(priv) { -+ panic("EVP_PKEY_get_raw_private_key: *privlen exceeds len(priv)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get_raw_private_key(pkey, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(priv))), (*C.size_t)(unsafe.Pointer(privlen)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_get_raw_private_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_get_raw_public_key(pkey EVP_PKEY_PTR, pub []byte, publen *int) (int32, error) { -+ if publen != nil && int(*publen) > len(pub) { -+ panic("EVP_PKEY_get_raw_public_key: *publen exceeds len(pub)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get_raw_public_key(pkey, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(pub))), (*C.size_t)(unsafe.Pointer(publen)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_get_raw_public_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_get_size(pkey EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_get_size(pkey, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_get_size", uintptr(_err)) -+} -+ -+func EVP_PKEY_keygen(ctx EVP_PKEY_CTX_PTR, ppkey *EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_keygen(ctx, ppkey, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_keygen", uintptr(_err)) -+} -+ -+func EVP_PKEY_keygen_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_keygen_init(ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_keygen_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_new() (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_new", uintptr(_err)) -+} -+ -+func EVP_PKEY_new_raw_private_key(__type int32, e ENGINE_PTR, key []byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_new_raw_private_key(C.int(__type), e, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_new_raw_private_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_new_raw_public_key(__type int32, e ENGINE_PTR, key []byte) (EVP_PKEY_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_new_raw_public_key(C.int(__type), e, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(key))), C.size_t(len(key)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_PKEY_new_raw_public_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_paramgen(ctx EVP_PKEY_CTX_PTR, ppkey *EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_paramgen(ctx, ppkey, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_paramgen", uintptr(_err)) -+} -+ -+func EVP_PKEY_paramgen_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_paramgen_init(ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_paramgen_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_private_check(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_private_check(ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_private_check", uintptr(_err)) -+} -+ -+func EVP_PKEY_public_check_quick(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_public_check_quick(ctx, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_public_check_quick", uintptr(_err)) -+} -+ -+func EVP_PKEY_set1_EC_KEY(pkey EVP_PKEY_PTR, key EC_KEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_set1_EC_KEY(pkey, key, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_set1_EC_KEY", uintptr(_err)) -+} -+ -+func EVP_PKEY_set1_encoded_public_key(pkey EVP_PKEY_PTR, pub []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_set1_encoded_public_key(pkey, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(pub))), C.size_t(len(pub)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_set1_encoded_public_key", uintptr(_err)) -+} -+ -+func EVP_PKEY_sign(arg0 EVP_PKEY_CTX_PTR, arg1 []byte, arg2 *int, arg3 []byte) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("EVP_PKEY_sign: *arg2 exceeds len(arg1)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_sign(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), (*C.size_t)(unsafe.Pointer(arg2)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg3))), C.size_t(len(arg3)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_sign", uintptr(_err)) -+} -+ -+func EVP_PKEY_sign_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_sign_init(arg0, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_sign_init", uintptr(_err)) -+} -+ -+func EVP_PKEY_up_ref(key EVP_PKEY_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_up_ref(key, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_up_ref", uintptr(_err)) -+} -+ -+func EVP_PKEY_verify(ctx EVP_PKEY_CTX_PTR, sig []byte, tbs []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_verify(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(sig))), C.size_t(len(sig)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(tbs))), C.size_t(len(tbs)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_verify", uintptr(_err)) -+} -+ -+func EVP_PKEY_verify_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_PKEY_verify_init(arg0, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_PKEY_verify_init", uintptr(_err)) -+} -+ -+func EVP_SIGNATURE_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_SIGNATURE_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_SIGNATURE_fetch(ctx, (*C.char)(unsafe.Pointer(algorithm)), (*C.char)(unsafe.Pointer(properties)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("EVP_SIGNATURE_fetch", uintptr(_err)) -+} -+ -+func EVP_SIGNATURE_free(signature EVP_SIGNATURE_PTR) { -+ C._mkcgo_EVP_SIGNATURE_free(signature) -+} -+ -+func EVP_aes_128_cbc() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_128_cbc() -+} -+ -+func EVP_aes_128_ctr() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_128_ctr() -+} -+ -+func EVP_aes_128_ecb() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_128_ecb() -+} -+ -+func EVP_aes_128_gcm() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_128_gcm() -+} -+ -+func EVP_aes_192_cbc() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_192_cbc() -+} -+ -+func EVP_aes_192_ctr() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_192_ctr() -+} -+ -+func EVP_aes_192_ecb() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_192_ecb() -+} -+ -+func EVP_aes_192_gcm() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_192_gcm() -+} -+ -+func EVP_aes_256_cbc() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_256_cbc() -+} -+ -+func EVP_aes_256_ctr() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_256_ctr() -+} -+ -+func EVP_aes_256_ecb() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_256_ecb() -+} -+ -+func EVP_aes_256_gcm() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_aes_256_gcm() -+} -+ -+func EVP_chacha20_poly1305_Available() bool { -+ return C._mkcgo_available_EVP_chacha20_poly1305() != 0 -+} -+ -+func EVP_chacha20_poly1305() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_chacha20_poly1305() -+} -+ -+func EVP_default_properties_enable_fips(libctx OSSL_LIB_CTX_PTR, enable int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_EVP_default_properties_enable_fips(libctx, C.int(enable), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("EVP_default_properties_enable_fips", uintptr(_err)) -+} -+ -+func EVP_default_properties_is_fips_enabled(libctx OSSL_LIB_CTX_PTR) int32 { -+ return int32(C._mkcgo_EVP_default_properties_is_fips_enabled(libctx)) -+} -+ -+func EVP_des_cbc() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_des_cbc() -+} -+ -+func EVP_des_ecb() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_des_ecb() -+} -+ -+func EVP_des_ede3_cbc() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_des_ede3_cbc() -+} -+ -+func EVP_des_ede3_ecb() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_des_ede3_ecb() -+} -+ -+func EVP_md4() EVP_MD_PTR { -+ return C._mkcgo_EVP_md4() -+} -+ -+func EVP_md5() EVP_MD_PTR { -+ return C._mkcgo_EVP_md5() -+} -+ -+func EVP_md5_sha1() EVP_MD_PTR { -+ return C._mkcgo_EVP_md5_sha1() -+} -+ -+func EVP_rc4() EVP_CIPHER_PTR { -+ return C._mkcgo_EVP_rc4() -+} -+ -+func EVP_ripemd160() EVP_MD_PTR { -+ return C._mkcgo_EVP_ripemd160() -+} -+ -+func EVP_sha1() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha1() -+} -+ -+func EVP_sha224() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha224() -+} -+ -+func EVP_sha256() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha256() -+} -+ -+func EVP_sha384() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha384() -+} -+ -+func EVP_sha3_224() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha3_224() -+} -+ -+func EVP_sha3_256() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha3_256() -+} -+ -+func EVP_sha3_384() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha3_384() -+} -+ -+func EVP_sha3_512() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha3_512() -+} -+ -+func EVP_sha512() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha512() -+} -+ -+func EVP_sha512_224() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha512_224() -+} -+ -+func EVP_sha512_256() EVP_MD_PTR { -+ return C._mkcgo_EVP_sha512_256() -+} -+ -+func FIPS_mode() int32 { -+ return int32(C._mkcgo_FIPS_mode()) -+} -+ -+func FIPS_mode_set(r int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_FIPS_mode_set(C.int(r), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("FIPS_mode_set", uintptr(_err)) -+} -+ -+func HMAC_CTX_copy(dest HMAC_CTX_PTR, src HMAC_CTX_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_HMAC_CTX_copy(dest, src, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("HMAC_CTX_copy", uintptr(_err)) -+} -+ -+func HMAC_CTX_free(arg0 HMAC_CTX_PTR) { -+ C._mkcgo_HMAC_CTX_free(arg0) -+} -+ -+func HMAC_CTX_new() (HMAC_CTX_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_HMAC_CTX_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("HMAC_CTX_new", uintptr(_err)) -+} -+ -+func HMAC_Final(arg0 HMAC_CTX_PTR, arg1 []byte, arg2 *uint32) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("HMAC_Final: *arg2 exceeds len(arg1)") -+ } -+ var _err C.uintptr_t -+ _ret := C._mkcgo_HMAC_Final(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), (*C.uint)(unsafe.Pointer(arg2)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("HMAC_Final", uintptr(_err)) -+} -+ -+func HMAC_Init_ex(arg0 HMAC_CTX_PTR, arg1 []byte, arg3 EVP_MD_PTR, arg4 ENGINE_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_HMAC_Init_ex(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), C.int(len(arg1)), arg3, arg4, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("HMAC_Init_ex", uintptr(_err)) -+} -+ -+func HMAC_Update(arg0 HMAC_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_HMAC_Update(arg0, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(arg1))), C.size_t(len(arg1)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("HMAC_Update", uintptr(_err)) -+} -+ -+func OBJ_nid2sn(n int32) *byte { -+ return (*byte)(unsafe.Pointer(C._mkcgo_OBJ_nid2sn(C.int(n)))) -+} -+ -+func OPENSSL_init() { -+ C._mkcgo_OPENSSL_init() -+} -+ -+func OPENSSL_init_crypto(ops uint64, settings OPENSSL_INIT_SETTINGS_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OPENSSL_init_crypto(C.uint64_t(ops), settings, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("OPENSSL_init_crypto", uintptr(_err)) -+} -+ -+func OPENSSL_version_major_Available() bool { -+ return C._mkcgo_available_OPENSSL_version_major() != 0 -+} -+ -+func OPENSSL_version_major() uint32 { -+ return uint32(C._mkcgo_OPENSSL_version_major()) -+} -+ -+func OPENSSL_version_minor_Available() bool { -+ return C._mkcgo_available_OPENSSL_version_minor() != 0 -+} -+ -+func OPENSSL_version_minor() uint32 { -+ return uint32(C._mkcgo_OPENSSL_version_minor()) -+} -+ -+func OPENSSL_version_patch_Available() bool { -+ return C._mkcgo_available_OPENSSL_version_patch() != 0 -+} -+ -+func OPENSSL_version_patch() uint32 { -+ return uint32(C._mkcgo_OPENSSL_version_patch()) -+} -+ -+func OSSL_PARAM_BLD_free(bld OSSL_PARAM_BLD_PTR) { -+ C._mkcgo_OSSL_PARAM_BLD_free(bld) -+} -+ -+func OSSL_PARAM_BLD_new() OSSL_PARAM_BLD_PTR { -+ return C._mkcgo_OSSL_PARAM_BLD_new() -+} -+ -+func OSSL_PARAM_BLD_push_BN(bld OSSL_PARAM_BLD_PTR, key *byte, bn BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PARAM_BLD_push_BN(bld, (*C.char)(unsafe.Pointer(key)), bn, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("OSSL_PARAM_BLD_push_BN", uintptr(_err)) -+} -+ -+func OSSL_PARAM_BLD_push_int32(bld OSSL_PARAM_BLD_PTR, key *byte, num int32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PARAM_BLD_push_int32(bld, (*C.char)(unsafe.Pointer(key)), C.int32_t(num), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("OSSL_PARAM_BLD_push_int32", uintptr(_err)) -+} -+ -+func OSSL_PARAM_BLD_push_octet_string(bld OSSL_PARAM_BLD_PTR, key *byte, buf []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PARAM_BLD_push_octet_string(bld, (*C.char)(unsafe.Pointer(key)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(buf))), C.size_t(len(buf)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("OSSL_PARAM_BLD_push_octet_string", uintptr(_err)) -+} -+ -+func OSSL_PARAM_BLD_push_utf8_string(bld OSSL_PARAM_BLD_PTR, key *byte, buf []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PARAM_BLD_push_utf8_string(bld, (*C.char)(unsafe.Pointer(key)), (*C.char)(unsafe.Pointer(unsafe.SliceData(buf))), C.size_t(len(buf)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("OSSL_PARAM_BLD_push_utf8_string", uintptr(_err)) -+} -+ -+func OSSL_PARAM_BLD_to_param(bld OSSL_PARAM_BLD_PTR) (OSSL_PARAM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PARAM_BLD_to_param(bld, mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("OSSL_PARAM_BLD_to_param", uintptr(_err)) -+} -+ -+func OSSL_PARAM_free(p OSSL_PARAM_PTR) { -+ C._mkcgo_OSSL_PARAM_free(p) -+} -+ -+func OSSL_PARAM_locate_const(p OSSL_PARAM_PTR, key *byte) (OSSL_PARAM_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PARAM_locate_const(p, (*C.char)(unsafe.Pointer(key)), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("OSSL_PARAM_locate_const", uintptr(_err)) -+} -+ -+func OSSL_PROVIDER_available(libctx OSSL_LIB_CTX_PTR, name *byte) int32 { -+ return int32(C._mkcgo_OSSL_PROVIDER_available(libctx, (*C.char)(unsafe.Pointer(name)))) -+} -+ -+func OSSL_PROVIDER_get0_name(prov OSSL_PROVIDER_PTR) *byte { -+ return (*byte)(unsafe.Pointer(C._mkcgo_OSSL_PROVIDER_get0_name(prov))) -+} -+ -+func OSSL_PROVIDER_try_load(libctx OSSL_LIB_CTX_PTR, name *byte, retain_fallbacks int32) (OSSL_PROVIDER_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_OSSL_PROVIDER_try_load(libctx, (*C.char)(unsafe.Pointer(name)), C.int(retain_fallbacks), mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("OSSL_PROVIDER_try_load", uintptr(_err)) -+} -+ -+func OpenSSL_version(__type int32) *byte { -+ return (*byte)(unsafe.Pointer(C._mkcgo_OpenSSL_version(C.int(__type)))) -+} -+ -+func OpenSSL_version_num_Available() bool { -+ return C._mkcgo_available_OpenSSL_version_num() != 0 -+} -+ -+func OpenSSL_version_num() uint64 { -+ return uint64(C._mkcgo_OpenSSL_version_num()) -+} -+ -+func PKCS5_PBKDF2_HMAC(pass []byte, salt []byte, iter int32, digest EVP_MD_PTR, out []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_PKCS5_PBKDF2_HMAC((*C.char)(unsafe.Pointer(unsafe.SliceData(pass))), C.int(len(pass)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(salt))), C.int(len(salt)), C.int(iter), digest, C.int(len(out)), (*C.uchar)(unsafe.Pointer(unsafe.SliceData(out))), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("PKCS5_PBKDF2_HMAC", uintptr(_err)) -+} -+ -+func RAND_bytes(buf []byte) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_RAND_bytes((*C.uchar)(unsafe.Pointer(unsafe.SliceData(buf))), C.int(len(buf)), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("RAND_bytes", uintptr(_err)) -+} -+ -+func RAND_bytes_ex(ctx OSSL_LIB_CTX_PTR, buf []byte, strength uint32) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_RAND_bytes_ex(ctx, (*C.uchar)(unsafe.Pointer(unsafe.SliceData(buf))), C.size_t(len(buf)), C.uint(strength), mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("RAND_bytes_ex", uintptr(_err)) -+} -+ -+func RSA_free(arg0 RSA_PTR) { -+ C._mkcgo_RSA_free(arg0) -+} -+ -+func RSA_get0_crt_params(r RSA_PTR, dmp1 *BIGNUM_PTR, dmq1 *BIGNUM_PTR, iqmp *BIGNUM_PTR) { -+ C._mkcgo_RSA_get0_crt_params(r, dmp1, dmq1, iqmp) -+} -+ -+func RSA_get0_factors(rsa RSA_PTR, p *BIGNUM_PTR, q *BIGNUM_PTR) { -+ C._mkcgo_RSA_get0_factors(rsa, p, q) -+} -+ -+func RSA_get0_key(rsa RSA_PTR, n *BIGNUM_PTR, e *BIGNUM_PTR, d *BIGNUM_PTR) { -+ C._mkcgo_RSA_get0_key(rsa, n, e, d) -+} -+ -+func RSA_new() (RSA_PTR, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_RSA_new(mkcgoNoEscape(&_err)) -+ return _ret, newMkcgoErr("RSA_new", uintptr(_err)) -+} -+ -+func RSA_set0_crt_params(rsa RSA_PTR, dmp1 BIGNUM_PTR, dmp2 BIGNUM_PTR, iqmp BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_RSA_set0_crt_params(rsa, dmp1, dmp2, iqmp, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("RSA_set0_crt_params", uintptr(_err)) -+} -+ -+func RSA_set0_factors(rsa RSA_PTR, p BIGNUM_PTR, q BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_RSA_set0_factors(rsa, p, q, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("RSA_set0_factors", uintptr(_err)) -+} -+ -+func RSA_set0_key(r RSA_PTR, n BIGNUM_PTR, e BIGNUM_PTR, d BIGNUM_PTR) (int32, error) { -+ var _err C.uintptr_t -+ _ret := C._mkcgo_RSA_set0_key(r, n, e, d, mkcgoNoEscape(&_err)) -+ return int32(_ret), newMkcgoErr("RSA_set0_key", uintptr(_err)) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_nocgo.go -new file mode 100644 -index 00000000000000..a81137ddaf02f7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/internal/ossl/zossl_nocgo.go -@@ -0,0 +1,2501 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by mkcgo. DO NOT EDIT. -+ -+//go:build !cgo -+ -+package ossl -+ -+import ( -+ "runtime" -+ "unsafe" -+) -+ -+var _ = runtime.GOOS -+ -+var _mkcgoAlwaysFalseOssl bool -+var _mkcgoEscapeSinkOssl unsafe.Pointer -+ -+// mkcgoEscapePtrOssl forces p to escape to the heap. -+// This implementation is also used in the standard library: -+// https://github.com/golang/go/blob/f71432d223eeb2139b460957817400750fd13655/src/internal/abi/escape.go#L24-L33 -+func mkcgoEscapePtrOssl(p unsafe.Pointer) unsafe.Pointer { -+ if _mkcgoAlwaysFalseOssl { -+ _mkcgoEscapeSinkOssl = p -+ } -+ return p -+} -+ -+type OPENSSL_INIT_SETTINGS_PTR unsafe.Pointer -+type OSSL_LIB_CTX_PTR unsafe.Pointer -+type OSSL_PROVIDER_PTR unsafe.Pointer -+type ENGINE_PTR unsafe.Pointer -+type EVP_PKEY_PTR unsafe.Pointer -+type EVP_PKEY_CTX_PTR unsafe.Pointer -+type EVP_MD_PTR unsafe.Pointer -+type EVP_MD_CTX_PTR unsafe.Pointer -+type HMAC_CTX_PTR unsafe.Pointer -+type EVP_CIPHER_PTR unsafe.Pointer -+type EVP_CIPHER_CTX_PTR unsafe.Pointer -+type EC_KEY_PTR unsafe.Pointer -+type EC_POINT_PTR unsafe.Pointer -+type EC_GROUP_PTR unsafe.Pointer -+type RSA_PTR unsafe.Pointer -+type BIGNUM_PTR unsafe.Pointer -+type BN_CTX_PTR unsafe.Pointer -+type EVP_MAC_PTR unsafe.Pointer -+type EVP_MAC_CTX_PTR unsafe.Pointer -+type OSSL_PARAM_BLD_PTR unsafe.Pointer -+type OSSL_PARAM_PTR unsafe.Pointer -+type EVP_SIGNATURE_PTR unsafe.Pointer -+type EVP_KEYMGMT_PTR unsafe.Pointer -+type DSA_PTR unsafe.Pointer -+type EVP_KDF_PTR unsafe.Pointer -+type EVP_KDF_CTX_PTR unsafe.Pointer -+type BIO_METHOD_PTR unsafe.Pointer -+type BIO_PTR unsafe.Pointer -+type Point_conversion_form_t = int32 -+ -+var _mkcgo_BIO_ctrl uintptr -+ -+func BIO_ctrl(bp BIO_PTR, cmd int32, larg int64, parg unsafe.Pointer) int64 { -+ r0, _ := syscallN(0, _mkcgo_BIO_ctrl, uintptr(bp), uintptr(cmd), uintptr(larg), uintptr(parg)) -+ return int64(r0) -+} -+ -+var _mkcgo_BIO_free uintptr -+ -+func BIO_free(a BIO_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_BIO_free, uintptr(a)) -+ return int32(r0) -+} -+ -+var _mkcgo_BIO_new uintptr -+ -+func BIO_new(__type BIO_METHOD_PTR) (BIO_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_BIO_new, uintptr(__type), uintptr(unsafe.Pointer(&_err))) -+ return BIO_PTR(r0), newMkcgoErr("BIO_new", _err) -+} -+ -+var _mkcgo_BIO_s_mem uintptr -+ -+func BIO_s_mem() BIO_METHOD_PTR { -+ r0, _ := syscallN(0, _mkcgo_BIO_s_mem) -+ return BIO_METHOD_PTR(r0) -+} -+ -+var _mkcgo_BN_bin2bn uintptr -+ -+func BN_bin2bn(arg0 []byte, arg2 BIGNUM_PTR) (BIGNUM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_BN_bin2bn, uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg0)))), uintptr(len(arg0)), uintptr(arg2), uintptr(unsafe.Pointer(&_err))) -+ return BIGNUM_PTR(r0), newMkcgoErr("BN_bin2bn", _err) -+} -+ -+var _mkcgo_BN_bn2binpad uintptr -+ -+func BN_bn2binpad(a BIGNUM_PTR, to []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(2, _mkcgo_BN_bn2binpad, uintptr(a), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(to)))), uintptr(len(to)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("BN_bn2binpad", _err) -+} -+ -+var _mkcgo_BN_bn2lebinpad uintptr -+ -+func BN_bn2lebinpad(a BIGNUM_PTR, to []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(2, _mkcgo_BN_bn2lebinpad, uintptr(a), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(to)))), uintptr(len(to)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("BN_bn2lebinpad", _err) -+} -+ -+var _mkcgo_BN_clear uintptr -+ -+func BN_clear(arg0 BIGNUM_PTR) { -+ syscallN(0, _mkcgo_BN_clear, uintptr(arg0)) -+} -+ -+var _mkcgo_BN_clear_free uintptr -+ -+func BN_clear_free(arg0 BIGNUM_PTR) { -+ syscallN(0, _mkcgo_BN_clear_free, uintptr(arg0)) -+} -+ -+var _mkcgo_BN_free uintptr -+ -+func BN_free(arg0 BIGNUM_PTR) { -+ syscallN(0, _mkcgo_BN_free, uintptr(arg0)) -+} -+ -+var _mkcgo_BN_lebin2bn uintptr -+ -+func BN_lebin2bn(s []byte, ret BIGNUM_PTR) (BIGNUM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_BN_lebin2bn, uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(s)))), uintptr(len(s)), uintptr(ret), uintptr(unsafe.Pointer(&_err))) -+ return BIGNUM_PTR(r0), newMkcgoErr("BN_lebin2bn", _err) -+} -+ -+var _mkcgo_BN_new uintptr -+ -+func BN_new() (BIGNUM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_BN_new, uintptr(unsafe.Pointer(&_err))) -+ return BIGNUM_PTR(r0), newMkcgoErr("BN_new", _err) -+} -+ -+var _mkcgo_BN_num_bits uintptr -+ -+func BN_num_bits(arg0 BIGNUM_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_BN_num_bits, uintptr(arg0)) -+ return int32(r0) -+} -+ -+var _mkcgo_CRYPTO_free uintptr -+ -+func CRYPTO_free(str unsafe.Pointer, file *byte, line int32) { -+ syscallN(0, _mkcgo_CRYPTO_free, uintptr(str), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(file))), uintptr(line)) -+} -+ -+var _mkcgo_CRYPTO_malloc uintptr -+ -+func CRYPTO_malloc(num int, file *byte, line int32) (unsafe.Pointer, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_CRYPTO_malloc, uintptr(num), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(file))), uintptr(line), uintptr(unsafe.Pointer(&_err))) -+ return unsafe.Pointer(r0), newMkcgoErr("CRYPTO_malloc", _err) -+} -+ -+var _mkcgo_DSA_free uintptr -+ -+func DSA_free(r DSA_PTR) { -+ syscallN(0, _mkcgo_DSA_free, uintptr(r)) -+} -+ -+var _mkcgo_DSA_generate_key uintptr -+ -+func DSA_generate_key(a DSA_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_DSA_generate_key, uintptr(a), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("DSA_generate_key", _err) -+} -+ -+var _mkcgo_DSA_get0_key uintptr -+ -+func DSA_get0_key(d DSA_PTR, pub_key *BIGNUM_PTR, priv_key *BIGNUM_PTR) { -+ syscallN(0, _mkcgo_DSA_get0_key, uintptr(d), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(pub_key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(priv_key)))) -+} -+ -+var _mkcgo_DSA_get0_pqg uintptr -+ -+func DSA_get0_pqg(d DSA_PTR, p *BIGNUM_PTR, q *BIGNUM_PTR, g *BIGNUM_PTR) { -+ syscallN(0, _mkcgo_DSA_get0_pqg, uintptr(d), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(p))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(q))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(g)))) -+} -+ -+var _mkcgo_DSA_new uintptr -+ -+func DSA_new() (DSA_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_DSA_new, uintptr(unsafe.Pointer(&_err))) -+ return DSA_PTR(r0), newMkcgoErr("DSA_new", _err) -+} -+ -+var _mkcgo_DSA_set0_key uintptr -+ -+func DSA_set0_key(d DSA_PTR, pub_key BIGNUM_PTR, priv_key BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_DSA_set0_key, uintptr(d), uintptr(pub_key), uintptr(priv_key), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("DSA_set0_key", _err) -+} -+ -+var _mkcgo_DSA_set0_pqg uintptr -+ -+func DSA_set0_pqg(d DSA_PTR, p BIGNUM_PTR, q BIGNUM_PTR, g BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_DSA_set0_pqg, uintptr(d), uintptr(p), uintptr(q), uintptr(g), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("DSA_set0_pqg", _err) -+} -+ -+var _mkcgo_EC_GROUP_free uintptr -+ -+func EC_GROUP_free(group EC_GROUP_PTR) { -+ syscallN(0, _mkcgo_EC_GROUP_free, uintptr(group)) -+} -+ -+var _mkcgo_EC_GROUP_new_by_curve_name uintptr -+ -+func EC_GROUP_new_by_curve_name(nid int32) (EC_GROUP_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EC_GROUP_new_by_curve_name, uintptr(nid), uintptr(unsafe.Pointer(&_err))) -+ return EC_GROUP_PTR(r0), newMkcgoErr("EC_GROUP_new_by_curve_name", _err) -+} -+ -+var _mkcgo_EC_KEY_check_key uintptr -+ -+func EC_KEY_check_key(key EC_KEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_KEY_check_key, uintptr(key), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_KEY_check_key", _err) -+} -+ -+var _mkcgo_EC_KEY_free uintptr -+ -+func EC_KEY_free(arg0 EC_KEY_PTR) { -+ syscallN(0, _mkcgo_EC_KEY_free, uintptr(arg0)) -+} -+ -+var _mkcgo_EC_KEY_get0_group uintptr -+ -+func EC_KEY_get0_group(arg0 EC_KEY_PTR) EC_GROUP_PTR { -+ r0, _ := syscallN(0, _mkcgo_EC_KEY_get0_group, uintptr(arg0)) -+ return EC_GROUP_PTR(r0) -+} -+ -+var _mkcgo_EC_KEY_get0_private_key uintptr -+ -+func EC_KEY_get0_private_key(arg0 EC_KEY_PTR) BIGNUM_PTR { -+ r0, _ := syscallN(0, _mkcgo_EC_KEY_get0_private_key, uintptr(arg0)) -+ return BIGNUM_PTR(r0) -+} -+ -+var _mkcgo_EC_KEY_get0_public_key uintptr -+ -+func EC_KEY_get0_public_key(arg0 EC_KEY_PTR) EC_POINT_PTR { -+ r0, _ := syscallN(0, _mkcgo_EC_KEY_get0_public_key, uintptr(arg0)) -+ return EC_POINT_PTR(r0) -+} -+ -+var _mkcgo_EC_KEY_new_by_curve_name uintptr -+ -+func EC_KEY_new_by_curve_name(arg0 int32) (EC_KEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EC_KEY_new_by_curve_name, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return EC_KEY_PTR(r0), newMkcgoErr("EC_KEY_new_by_curve_name", _err) -+} -+ -+var _mkcgo_EC_KEY_set_private_key uintptr -+ -+func EC_KEY_set_private_key(arg0 EC_KEY_PTR, arg1 BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_KEY_set_private_key, uintptr(arg0), uintptr(arg1), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_KEY_set_private_key", _err) -+} -+ -+var _mkcgo_EC_KEY_set_public_key uintptr -+ -+func EC_KEY_set_public_key(key EC_KEY_PTR, pub EC_POINT_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_KEY_set_public_key, uintptr(key), uintptr(pub), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_KEY_set_public_key", _err) -+} -+ -+var _mkcgo_EC_KEY_set_public_key_affine_coordinates uintptr -+ -+func EC_KEY_set_public_key_affine_coordinates(key EC_KEY_PTR, x BIGNUM_PTR, y BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_KEY_set_public_key_affine_coordinates, uintptr(key), uintptr(x), uintptr(y), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_KEY_set_public_key_affine_coordinates", _err) -+} -+ -+var _mkcgo_EC_POINT_free uintptr -+ -+func EC_POINT_free(arg0 EC_POINT_PTR) { -+ syscallN(0, _mkcgo_EC_POINT_free, uintptr(arg0)) -+} -+ -+var _mkcgo_EC_POINT_get_affine_coordinates_GFp uintptr -+ -+func EC_POINT_get_affine_coordinates_GFp(arg0 EC_GROUP_PTR, arg1 EC_POINT_PTR, arg2 BIGNUM_PTR, arg3 BIGNUM_PTR, arg4 BN_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_POINT_get_affine_coordinates_GFp, uintptr(arg0), uintptr(arg1), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_POINT_get_affine_coordinates_GFp", _err) -+} -+ -+var _mkcgo_EC_POINT_mul uintptr -+ -+func EC_POINT_mul(group EC_GROUP_PTR, r EC_POINT_PTR, n BIGNUM_PTR, q EC_POINT_PTR, m BIGNUM_PTR, ctx BN_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_POINT_mul, uintptr(group), uintptr(r), uintptr(n), uintptr(q), uintptr(m), uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_POINT_mul", _err) -+} -+ -+var _mkcgo_EC_POINT_new uintptr -+ -+func EC_POINT_new(arg0 EC_GROUP_PTR) (EC_POINT_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EC_POINT_new, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return EC_POINT_PTR(r0), newMkcgoErr("EC_POINT_new", _err) -+} -+ -+var _mkcgo_EC_POINT_oct2point uintptr -+ -+func EC_POINT_oct2point(group EC_GROUP_PTR, p EC_POINT_PTR, buf []byte, ctx BN_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_POINT_oct2point, uintptr(group), uintptr(p), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(buf)))), uintptr(len(buf)), uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_POINT_oct2point", _err) -+} -+ -+var _mkcgo_EC_POINT_point2oct uintptr -+ -+func EC_POINT_point2oct(group EC_GROUP_PTR, p EC_POINT_PTR, form Point_conversion_form_t, buf []byte, ctx BN_CTX_PTR) (int, error) { -+ var _err uintptr -+ r0, _ := syscallN(4, _mkcgo_EC_POINT_point2oct, uintptr(group), uintptr(p), uintptr(form), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(buf)))), uintptr(len(buf)), uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int(r0), newMkcgoErr("EC_POINT_point2oct", _err) -+} -+ -+var _mkcgo_EC_POINT_set_affine_coordinates uintptr -+ -+func EC_POINT_set_affine_coordinates(arg0 EC_GROUP_PTR, arg1 EC_POINT_PTR, arg2 BIGNUM_PTR, arg3 BIGNUM_PTR, arg4 BN_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EC_POINT_set_affine_coordinates, uintptr(arg0), uintptr(arg1), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EC_POINT_set_affine_coordinates", _err) -+} -+ -+var _mkcgo_ERR_peek_error uintptr -+ -+func ERR_peek_error() uint64 { -+ r0, _ := syscallN(0, _mkcgo_ERR_peek_error) -+ return uint64(r0) -+} -+ -+var _mkcgo_ERR_print_errors uintptr -+ -+func ERR_print_errors(bp BIO_PTR) { -+ syscallN(0, _mkcgo_ERR_print_errors, uintptr(bp)) -+} -+ -+var _mkcgo_EVP_CIPHER_CTX_ctrl uintptr -+ -+func EVP_CIPHER_CTX_ctrl(ctx EVP_CIPHER_CTX_PTR, __type int32, arg int32, ptr unsafe.Pointer) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_CIPHER_CTX_ctrl, uintptr(ctx), uintptr(__type), uintptr(arg), uintptr(ptr), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_CIPHER_CTX_ctrl", _err) -+} -+ -+var _mkcgo_EVP_CIPHER_CTX_free uintptr -+ -+func EVP_CIPHER_CTX_free(arg0 EVP_CIPHER_CTX_PTR) { -+ syscallN(0, _mkcgo_EVP_CIPHER_CTX_free, uintptr(arg0)) -+} -+ -+var _mkcgo_EVP_CIPHER_CTX_new uintptr -+ -+func EVP_CIPHER_CTX_new() (EVP_CIPHER_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_CIPHER_CTX_new, uintptr(unsafe.Pointer(&_err))) -+ return EVP_CIPHER_CTX_PTR(r0), newMkcgoErr("EVP_CIPHER_CTX_new", _err) -+} -+ -+var _mkcgo_EVP_CIPHER_CTX_set_key_length uintptr -+ -+func EVP_CIPHER_CTX_set_key_length(x EVP_CIPHER_CTX_PTR, keylen int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_CIPHER_CTX_set_key_length, uintptr(x), uintptr(keylen), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_CIPHER_CTX_set_key_length", _err) -+} -+ -+var _mkcgo_EVP_CIPHER_CTX_set_padding uintptr -+ -+func EVP_CIPHER_CTX_set_padding(x EVP_CIPHER_CTX_PTR, padding int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_CIPHER_CTX_set_padding, uintptr(x), uintptr(padding), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_CIPHER_CTX_set_padding", _err) -+} -+ -+var _mkcgo_EVP_CIPHER_fetch uintptr -+ -+func EVP_CIPHER_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_CIPHER_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_CIPHER_fetch, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(algorithm))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(properties))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_CIPHER_PTR(r0), newMkcgoErr("EVP_CIPHER_fetch", _err) -+} -+ -+var _mkcgo_EVP_CIPHER_get0_name uintptr -+ -+func EVP_CIPHER_get0_name(cipher EVP_CIPHER_PTR) *byte { -+ r0, _ := syscallN(0, _mkcgo_EVP_CIPHER_get0_name, uintptr(cipher)) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_EVP_CIPHER_get_block_size uintptr -+ -+func EVP_CIPHER_get_block_size(cipher EVP_CIPHER_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_EVP_CIPHER_get_block_size, uintptr(cipher)) -+ return int32(r0) -+} -+ -+var _mkcgo_EVP_CipherInit_ex uintptr -+ -+func EVP_CipherInit_ex(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, impl ENGINE_PTR, key *byte, iv *byte, enc int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_CipherInit_ex, uintptr(ctx), uintptr(__type), uintptr(impl), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(iv))), uintptr(enc), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_CipherInit_ex", _err) -+} -+ -+var _mkcgo_EVP_CipherInit_ex2 uintptr -+ -+func EVP_CipherInit_ex2(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, key *byte, iv *byte, enc int32, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_CipherInit_ex2, uintptr(ctx), uintptr(__type), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(iv))), uintptr(enc), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_CipherInit_ex2", _err) -+} -+ -+var _mkcgo_EVP_CipherUpdate uintptr -+ -+func EVP_CipherUpdate(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32, in []byte) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_CipherUpdate: *outl exceeds len(out)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_CipherUpdate, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outl)), uintptr(unsafe.Pointer(unsafe.SliceData(in))), uintptr(len(in)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_CipherUpdate", _err) -+} -+ -+var _mkcgo_EVP_DecryptFinal_ex uintptr -+ -+func EVP_DecryptFinal_ex(ctx EVP_CIPHER_CTX_PTR, outm []byte, outl *int32) (int32, error) { -+ if outl != nil && int(*outl) > len(outm) { -+ panic("EVP_DecryptFinal_ex: *outl exceeds len(outm)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DecryptFinal_ex, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(outm))), uintptr(unsafe.Pointer(outl)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DecryptFinal_ex", _err) -+} -+ -+var _mkcgo_EVP_DecryptInit_ex uintptr -+ -+func EVP_DecryptInit_ex(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, impl ENGINE_PTR, key *byte, iv *byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DecryptInit_ex, uintptr(ctx), uintptr(__type), uintptr(impl), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(iv))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DecryptInit_ex", _err) -+} -+ -+var _mkcgo_EVP_DecryptUpdate uintptr -+ -+func EVP_DecryptUpdate(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32, in []byte) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_DecryptUpdate: *outl exceeds len(out)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DecryptUpdate, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outl)), uintptr(unsafe.Pointer(unsafe.SliceData(in))), uintptr(len(in)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DecryptUpdate", _err) -+} -+ -+var _mkcgo_EVP_Digest uintptr -+ -+func EVP_Digest(data []byte, md []byte, size *uint32, __type EVP_MD_PTR, impl ENGINE_PTR) (int32, error) { -+ if size != nil && int(*size) > len(md) { -+ panic("EVP_Digest: *size exceeds len(md)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_Digest, uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data)), uintptr(unsafe.Pointer(unsafe.SliceData(md))), uintptr(unsafe.Pointer(size)), uintptr(__type), uintptr(impl), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_Digest", _err) -+} -+ -+var _mkcgo_EVP_DigestFinalXOF uintptr -+ -+func EVP_DigestFinalXOF(ctx EVP_MD_CTX_PTR, md []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestFinalXOF, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(md))), uintptr(len(md)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestFinalXOF", _err) -+} -+ -+var _mkcgo_EVP_DigestFinal_ex uintptr -+ -+func EVP_DigestFinal_ex(ctx EVP_MD_CTX_PTR, md []byte, s *uint32) (int32, error) { -+ if s != nil && int(*s) > len(md) { -+ panic("EVP_DigestFinal_ex: *s exceeds len(md)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestFinal_ex, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(md))), uintptr(unsafe.Pointer(s)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestFinal_ex", _err) -+} -+ -+var _mkcgo_EVP_DigestInit uintptr -+ -+func EVP_DigestInit(ctx EVP_MD_CTX_PTR, __type EVP_MD_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestInit, uintptr(ctx), uintptr(__type), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestInit", _err) -+} -+ -+var _mkcgo_EVP_DigestInit_ex uintptr -+ -+func EVP_DigestInit_ex(ctx EVP_MD_CTX_PTR, __type EVP_MD_PTR, impl ENGINE_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestInit_ex, uintptr(ctx), uintptr(__type), uintptr(impl), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestInit_ex", _err) -+} -+ -+var _mkcgo_EVP_DigestSign uintptr -+ -+func EVP_DigestSign(ctx EVP_MD_CTX_PTR, sigret []byte, siglen *int, tbs []byte) (int32, error) { -+ if siglen != nil && int(*siglen) > len(sigret) { -+ panic("EVP_DigestSign: *siglen exceeds len(sigret)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestSign, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(sigret))), uintptr(unsafe.Pointer(siglen)), uintptr(unsafe.Pointer(unsafe.SliceData(tbs))), uintptr(len(tbs)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestSign", _err) -+} -+ -+var _mkcgo_EVP_DigestSignFinal uintptr -+ -+func EVP_DigestSignFinal(ctx EVP_MD_CTX_PTR, sig []byte, siglen *int) (int32, error) { -+ if siglen != nil && int(*siglen) > len(sig) { -+ panic("EVP_DigestSignFinal: *siglen exceeds len(sig)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestSignFinal, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(sig)))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(siglen))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestSignFinal", _err) -+} -+ -+var _mkcgo_EVP_DigestSignInit uintptr -+ -+func EVP_DigestSignInit(ctx EVP_MD_CTX_PTR, pctx *EVP_PKEY_CTX_PTR, __type EVP_MD_PTR, e ENGINE_PTR, pkey EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestSignInit, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(pctx))), uintptr(__type), uintptr(e), uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestSignInit", _err) -+} -+ -+func EVP_DigestSqueeze_Available() bool { -+ return _mkcgo_EVP_DigestSqueeze != 0 -+} -+ -+var _mkcgo_EVP_DigestSqueeze uintptr -+ -+func EVP_DigestSqueeze(ctx EVP_MD_CTX_PTR, out []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestSqueeze, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(len(out)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestSqueeze", _err) -+} -+ -+var _mkcgo_EVP_DigestUpdate uintptr -+ -+func EVP_DigestUpdate(ctx EVP_MD_CTX_PTR, d []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestUpdate, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(d))), uintptr(len(d)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestUpdate", _err) -+} -+ -+var _mkcgo_EVP_DigestVerify uintptr -+ -+func EVP_DigestVerify(ctx EVP_MD_CTX_PTR, sigret []byte, tbs []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestVerify, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(sigret)))), uintptr(len(sigret)), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(tbs)))), uintptr(len(tbs)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestVerify", _err) -+} -+ -+var _mkcgo_EVP_DigestVerifyFinal uintptr -+ -+func EVP_DigestVerifyFinal(ctx EVP_MD_CTX_PTR, sig []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestVerifyFinal, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(sig)))), uintptr(len(sig)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestVerifyFinal", _err) -+} -+ -+var _mkcgo_EVP_DigestVerifyInit uintptr -+ -+func EVP_DigestVerifyInit(ctx EVP_MD_CTX_PTR, pctx *EVP_PKEY_CTX_PTR, __type EVP_MD_PTR, e ENGINE_PTR, pkey EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_DigestVerifyInit, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(pctx))), uintptr(__type), uintptr(e), uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_DigestVerifyInit", _err) -+} -+ -+var _mkcgo_EVP_EncryptFinal_ex uintptr -+ -+func EVP_EncryptFinal_ex(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_EncryptFinal_ex: *outl exceeds len(out)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_EncryptFinal_ex, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outl)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_EncryptFinal_ex", _err) -+} -+ -+var _mkcgo_EVP_EncryptInit_ex uintptr -+ -+func EVP_EncryptInit_ex(ctx EVP_CIPHER_CTX_PTR, __type EVP_CIPHER_PTR, impl ENGINE_PTR, key *byte, iv *byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_EncryptInit_ex, uintptr(ctx), uintptr(__type), uintptr(impl), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(iv))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_EncryptInit_ex", _err) -+} -+ -+var _mkcgo_EVP_EncryptUpdate uintptr -+ -+func EVP_EncryptUpdate(ctx EVP_CIPHER_CTX_PTR, out []byte, outl *int32, in []byte) (int32, error) { -+ if outl != nil && int(*outl) > len(out) { -+ panic("EVP_EncryptUpdate: *outl exceeds len(out)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_EncryptUpdate, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outl)), uintptr(unsafe.Pointer(unsafe.SliceData(in))), uintptr(len(in)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_EncryptUpdate", _err) -+} -+ -+var _mkcgo_EVP_KDF_CTX_free uintptr -+ -+func EVP_KDF_CTX_free(ctx EVP_KDF_CTX_PTR) { -+ syscallN(0, _mkcgo_EVP_KDF_CTX_free, uintptr(ctx)) -+} -+ -+var _mkcgo_EVP_KDF_CTX_get_kdf_size uintptr -+ -+func EVP_KDF_CTX_get_kdf_size(ctx EVP_KDF_CTX_PTR) (int, error) { -+ var _err uintptr -+ r0, _ := syscallN(4, _mkcgo_EVP_KDF_CTX_get_kdf_size, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int(r0), newMkcgoErr("EVP_KDF_CTX_get_kdf_size", _err) -+} -+ -+var _mkcgo_EVP_KDF_CTX_new uintptr -+ -+func EVP_KDF_CTX_new(kdf EVP_KDF_PTR) (EVP_KDF_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_KDF_CTX_new, uintptr(kdf), uintptr(unsafe.Pointer(&_err))) -+ return EVP_KDF_CTX_PTR(r0), newMkcgoErr("EVP_KDF_CTX_new", _err) -+} -+ -+var _mkcgo_EVP_KDF_CTX_set_params uintptr -+ -+func EVP_KDF_CTX_set_params(ctx EVP_KDF_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_KDF_CTX_set_params, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_KDF_CTX_set_params", _err) -+} -+ -+var _mkcgo_EVP_KDF_derive uintptr -+ -+func EVP_KDF_derive(ctx EVP_KDF_CTX_PTR, key []byte, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_KDF_derive, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(key)))), uintptr(len(key)), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_KDF_derive", _err) -+} -+ -+var _mkcgo_EVP_KDF_fetch uintptr -+ -+func EVP_KDF_fetch(libctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_KDF_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_KDF_fetch, uintptr(libctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(algorithm))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(properties))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_KDF_PTR(r0), newMkcgoErr("EVP_KDF_fetch", _err) -+} -+ -+var _mkcgo_EVP_KDF_free uintptr -+ -+func EVP_KDF_free(kdf EVP_KDF_PTR) { -+ syscallN(0, _mkcgo_EVP_KDF_free, uintptr(kdf)) -+} -+ -+func EVP_KEYMGMT_fetch_Available() bool { -+ return _mkcgo_EVP_KEYMGMT_fetch != 0 -+} -+ -+var _mkcgo_EVP_KEYMGMT_fetch uintptr -+ -+func EVP_KEYMGMT_fetch(libctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_KEYMGMT_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_KEYMGMT_fetch, uintptr(libctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(algorithm))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(properties))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_KEYMGMT_PTR(r0), newMkcgoErr("EVP_KEYMGMT_fetch", _err) -+} -+ -+var _mkcgo_EVP_KEYMGMT_free uintptr -+ -+func EVP_KEYMGMT_free(keymgmt EVP_KEYMGMT_PTR) { -+ syscallN(0, _mkcgo_EVP_KEYMGMT_free, uintptr(keymgmt)) -+} -+ -+var _mkcgo_EVP_MAC_CTX_dup uintptr -+ -+func EVP_MAC_CTX_dup(arg0 EVP_MAC_CTX_PTR) (EVP_MAC_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MAC_CTX_dup, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return EVP_MAC_CTX_PTR(r0), newMkcgoErr("EVP_MAC_CTX_dup", _err) -+} -+ -+var _mkcgo_EVP_MAC_CTX_free uintptr -+ -+func EVP_MAC_CTX_free(arg0 EVP_MAC_CTX_PTR) { -+ syscallN(0, _mkcgo_EVP_MAC_CTX_free, uintptr(arg0)) -+} -+ -+var _mkcgo_EVP_MAC_CTX_new uintptr -+ -+func EVP_MAC_CTX_new(arg0 EVP_MAC_PTR) (EVP_MAC_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MAC_CTX_new, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return EVP_MAC_CTX_PTR(r0), newMkcgoErr("EVP_MAC_CTX_new", _err) -+} -+ -+var _mkcgo_EVP_MAC_CTX_set_params uintptr -+ -+func EVP_MAC_CTX_set_params(ctx EVP_MAC_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MAC_CTX_set_params, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MAC_CTX_set_params", _err) -+} -+ -+var _mkcgo_EVP_MAC_fetch uintptr -+ -+func EVP_MAC_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_MAC_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MAC_fetch, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(algorithm))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(properties))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_MAC_PTR(r0), newMkcgoErr("EVP_MAC_fetch", _err) -+} -+ -+var _mkcgo_EVP_MAC_final uintptr -+ -+func EVP_MAC_final(ctx EVP_MAC_CTX_PTR, out []byte, outl *int) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MAC_final, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(out))), uintptr(unsafe.Pointer(outl)), uintptr(len(out)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MAC_final", _err) -+} -+ -+var _mkcgo_EVP_MAC_init uintptr -+ -+func EVP_MAC_init(ctx EVP_MAC_CTX_PTR, key []byte, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MAC_init, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(len(key)), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MAC_init", _err) -+} -+ -+var _mkcgo_EVP_MAC_update uintptr -+ -+func EVP_MAC_update(ctx EVP_MAC_CTX_PTR, data []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MAC_update, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(data))), uintptr(len(data)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MAC_update", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_copy_ex uintptr -+ -+func EVP_MD_CTX_copy_ex(out EVP_MD_CTX_PTR, in EVP_MD_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MD_CTX_copy_ex, uintptr(out), uintptr(in), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MD_CTX_copy_ex", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_ctrl uintptr -+ -+func EVP_MD_CTX_ctrl(ctx EVP_MD_CTX_PTR, cmd int32, p1 int32, p2 unsafe.Pointer) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MD_CTX_ctrl, uintptr(ctx), uintptr(cmd), uintptr(p1), uintptr(p2), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MD_CTX_ctrl", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_free uintptr -+ -+func EVP_MD_CTX_free(ctx EVP_MD_CTX_PTR) { -+ syscallN(0, _mkcgo_EVP_MD_CTX_free, uintptr(ctx)) -+} -+ -+var _mkcgo_EVP_MD_CTX_get_params uintptr -+ -+func EVP_MD_CTX_get_params(ctx EVP_MD_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MD_CTX_get_params, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MD_CTX_get_params", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_gettable_params uintptr -+ -+func EVP_MD_CTX_gettable_params(ctx EVP_MD_CTX_PTR) (OSSL_PARAM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MD_CTX_gettable_params, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return OSSL_PARAM_PTR(r0), newMkcgoErr("EVP_MD_CTX_gettable_params", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_new uintptr -+ -+func EVP_MD_CTX_new() (EVP_MD_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MD_CTX_new, uintptr(unsafe.Pointer(&_err))) -+ return EVP_MD_CTX_PTR(r0), newMkcgoErr("EVP_MD_CTX_new", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_set_params uintptr -+ -+func EVP_MD_CTX_set_params(ctx EVP_MD_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_MD_CTX_set_params, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_MD_CTX_set_params", _err) -+} -+ -+var _mkcgo_EVP_MD_CTX_settable_params uintptr -+ -+func EVP_MD_CTX_settable_params(ctx EVP_MD_CTX_PTR) (OSSL_PARAM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MD_CTX_settable_params, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return OSSL_PARAM_PTR(r0), newMkcgoErr("EVP_MD_CTX_settable_params", _err) -+} -+ -+var _mkcgo_EVP_MD_fetch uintptr -+ -+func EVP_MD_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_MD_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_MD_fetch, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(algorithm))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(properties))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_MD_PTR(r0), newMkcgoErr("EVP_MD_fetch", _err) -+} -+ -+var _mkcgo_EVP_MD_free uintptr -+ -+func EVP_MD_free(md EVP_MD_PTR) { -+ syscallN(0, _mkcgo_EVP_MD_free, uintptr(md)) -+} -+ -+var _mkcgo_EVP_MD_get0_name uintptr -+ -+func EVP_MD_get0_name(md EVP_MD_PTR) *byte { -+ r0, _ := syscallN(0, _mkcgo_EVP_MD_get0_name, uintptr(md)) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_EVP_MD_get0_provider uintptr -+ -+func EVP_MD_get0_provider(md EVP_MD_PTR) OSSL_PROVIDER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_MD_get0_provider, uintptr(md)) -+ return OSSL_PROVIDER_PTR(r0) -+} -+ -+var _mkcgo_EVP_MD_get_block_size uintptr -+ -+func EVP_MD_get_block_size(md EVP_MD_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_EVP_MD_get_block_size, uintptr(md)) -+ return int32(r0) -+} -+ -+var _mkcgo_EVP_MD_get_size uintptr -+ -+func EVP_MD_get_size(md EVP_MD_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_EVP_MD_get_size, uintptr(md)) -+ return int32(r0) -+} -+ -+var _mkcgo_EVP_MD_get_type uintptr -+ -+func EVP_MD_get_type(md EVP_MD_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_EVP_MD_get_type, uintptr(md)) -+ return int32(r0) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_add1_hkdf_info uintptr -+ -+func EVP_PKEY_CTX_add1_hkdf_info(arg0 EVP_PKEY_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_add1_hkdf_info, uintptr(arg0), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg1)))), uintptr(len(arg1)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_add1_hkdf_info", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_ctrl uintptr -+ -+func EVP_PKEY_CTX_ctrl(ctx EVP_PKEY_CTX_PTR, keytype int32, optype int32, cmd int32, p1 int32, p2 unsafe.Pointer) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_ctrl, uintptr(ctx), uintptr(keytype), uintptr(optype), uintptr(cmd), uintptr(p1), uintptr(p2), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_ctrl", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_free uintptr -+ -+func EVP_PKEY_CTX_free(arg0 EVP_PKEY_CTX_PTR) { -+ syscallN(0, _mkcgo_EVP_PKEY_CTX_free, uintptr(arg0)) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_new uintptr -+ -+func EVP_PKEY_CTX_new(arg0 EVP_PKEY_PTR, arg1 ENGINE_PTR) (EVP_PKEY_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_CTX_new, uintptr(arg0), uintptr(arg1), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_CTX_PTR(r0), newMkcgoErr("EVP_PKEY_CTX_new", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_new_from_pkey uintptr -+ -+func EVP_PKEY_CTX_new_from_pkey(libctx OSSL_LIB_CTX_PTR, pkey EVP_PKEY_PTR, propquery *byte) (EVP_PKEY_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_CTX_new_from_pkey, uintptr(libctx), uintptr(pkey), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(propquery))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_CTX_PTR(r0), newMkcgoErr("EVP_PKEY_CTX_new_from_pkey", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_new_id uintptr -+ -+func EVP_PKEY_CTX_new_id(id int32, e ENGINE_PTR) (EVP_PKEY_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_CTX_new_id, uintptr(id), uintptr(e), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_CTX_PTR(r0), newMkcgoErr("EVP_PKEY_CTX_new_id", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label uintptr -+ -+func EVP_PKEY_CTX_set0_rsa_oaep_label(ctx EVP_PKEY_CTX_PTR, label []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(label)))), uintptr(len(label)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_set0_rsa_oaep_label", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_set1_hkdf_key uintptr -+ -+func EVP_PKEY_CTX_set1_hkdf_key(arg0 EVP_PKEY_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_set1_hkdf_key, uintptr(arg0), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg1)))), uintptr(len(arg1)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_set1_hkdf_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_set1_hkdf_salt uintptr -+ -+func EVP_PKEY_CTX_set1_hkdf_salt(arg0 EVP_PKEY_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_set1_hkdf_salt, uintptr(arg0), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg1)))), uintptr(len(arg1)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_set1_hkdf_salt", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_set_hkdf_md uintptr -+ -+func EVP_PKEY_CTX_set_hkdf_md(arg0 EVP_PKEY_CTX_PTR, arg1 EVP_MD_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_set_hkdf_md, uintptr(arg0), uintptr(arg1), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_set_hkdf_md", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_set_hkdf_mode uintptr -+ -+func EVP_PKEY_CTX_set_hkdf_mode(arg0 EVP_PKEY_CTX_PTR, arg1 int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_set_hkdf_mode, uintptr(arg0), uintptr(arg1), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_set_hkdf_mode", _err) -+} -+ -+var _mkcgo_EVP_PKEY_CTX_set_params uintptr -+ -+func EVP_PKEY_CTX_set_params(ctx EVP_PKEY_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_CTX_set_params, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_CTX_set_params", _err) -+} -+ -+var _mkcgo_EVP_PKEY_Q_keygen uintptr -+ -+func EVP_PKEY_Q_keygen_EC(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte, arg1 *byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ var r0 uintptr -+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" { -+ r0, _ = syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), 0, 0, 0, 0, 0, uintptr(unsafe.Pointer(arg1)), uintptr(unsafe.Pointer(&_err))) -+ } else { -+ r0, _ = syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), uintptr(unsafe.Pointer(arg1)), uintptr(unsafe.Pointer(&_err))) -+ } -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_Q_keygen_EC", _err) -+} -+ -+func EVP_PKEY_Q_keygen_ED25519(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_Q_keygen_ED25519", _err) -+} -+ -+func EVP_PKEY_Q_keygen_MLDSA(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_Q_keygen_MLDSA", _err) -+} -+ -+func EVP_PKEY_Q_keygen_MLKEM(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_Q_keygen_MLKEM", _err) -+} -+ -+func EVP_PKEY_Q_keygen_RSA(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte, arg1 int) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ var r0 uintptr -+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" { -+ r0, _ = syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), 0, 0, 0, 0, 0, uintptr(arg1), uintptr(unsafe.Pointer(&_err))) -+ } else { -+ r0, _ = syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), uintptr(arg1), uintptr(unsafe.Pointer(&_err))) -+ } -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_Q_keygen_RSA", _err) -+} -+ -+func EVP_PKEY_Q_keygen_X25519(ctx OSSL_LIB_CTX_PTR, propq *byte, __type *byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_Q_keygen, uintptr(ctx), uintptr(unsafe.Pointer(propq)), uintptr(unsafe.Pointer(__type)), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_Q_keygen_X25519", _err) -+} -+ -+var _mkcgo_EVP_PKEY_assign uintptr -+ -+func EVP_PKEY_assign(pkey EVP_PKEY_PTR, __type int32, key unsafe.Pointer) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_assign, uintptr(pkey), uintptr(__type), uintptr(key), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_assign", _err) -+} -+ -+var _mkcgo_EVP_PKEY_decapsulate uintptr -+ -+func EVP_PKEY_decapsulate(ctx EVP_PKEY_CTX_PTR, genkey *byte, genkeylen *int, wrappedkey *byte, wrappedkeylen int) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_decapsulate, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(genkey))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(genkeylen))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(wrappedkey))), uintptr(wrappedkeylen), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_decapsulate", _err) -+} -+ -+var _mkcgo_EVP_PKEY_decapsulate_init uintptr -+ -+func EVP_PKEY_decapsulate_init(ctx EVP_PKEY_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_decapsulate_init, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_decapsulate_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_decrypt uintptr -+ -+func EVP_PKEY_decrypt(arg0 EVP_PKEY_CTX_PTR, arg1 []byte, arg2 *int, arg3 []byte) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("EVP_PKEY_decrypt: *arg2 exceeds len(arg1)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_decrypt, uintptr(arg0), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg1)))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(arg2))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg3)))), uintptr(len(arg3)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_decrypt", _err) -+} -+ -+var _mkcgo_EVP_PKEY_decrypt_init uintptr -+ -+func EVP_PKEY_decrypt_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_decrypt_init, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_decrypt_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_derive uintptr -+ -+func EVP_PKEY_derive(ctx EVP_PKEY_CTX_PTR, key []byte, keylen *int) (int32, error) { -+ if keylen != nil && int(*keylen) > len(key) { -+ panic("EVP_PKEY_derive: *keylen exceeds len(key)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_derive, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(key))), uintptr(unsafe.Pointer(keylen)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_derive", _err) -+} -+ -+var _mkcgo_EVP_PKEY_derive_init uintptr -+ -+func EVP_PKEY_derive_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_derive_init, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_derive_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_derive_set_peer uintptr -+ -+func EVP_PKEY_derive_set_peer(ctx EVP_PKEY_CTX_PTR, peer EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_derive_set_peer, uintptr(ctx), uintptr(peer), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_derive_set_peer", _err) -+} -+ -+var _mkcgo_EVP_PKEY_encapsulate uintptr -+ -+func EVP_PKEY_encapsulate(ctx EVP_PKEY_CTX_PTR, wrappedkey *byte, wrappedkeylen *int, genkey *byte, genkeylen *int) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_encapsulate, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(wrappedkey))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(wrappedkeylen))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(genkey))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(genkeylen))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_encapsulate", _err) -+} -+ -+var _mkcgo_EVP_PKEY_encapsulate_init uintptr -+ -+func EVP_PKEY_encapsulate_init(ctx EVP_PKEY_CTX_PTR, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_encapsulate_init, uintptr(ctx), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_encapsulate_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_encrypt uintptr -+ -+func EVP_PKEY_encrypt(arg0 EVP_PKEY_CTX_PTR, arg1 []byte, arg2 *int, arg3 []byte) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("EVP_PKEY_encrypt: *arg2 exceeds len(arg1)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_encrypt, uintptr(arg0), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg1)))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(arg2))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg3)))), uintptr(len(arg3)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_encrypt", _err) -+} -+ -+var _mkcgo_EVP_PKEY_encrypt_init uintptr -+ -+func EVP_PKEY_encrypt_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_encrypt_init, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_encrypt_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_eq uintptr -+ -+func EVP_PKEY_eq(a EVP_PKEY_PTR, b EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_eq, uintptr(a), uintptr(b), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_eq", _err) -+} -+ -+var _mkcgo_EVP_PKEY_free uintptr -+ -+func EVP_PKEY_free(arg0 EVP_PKEY_PTR) { -+ syscallN(0, _mkcgo_EVP_PKEY_free, uintptr(arg0)) -+} -+ -+var _mkcgo_EVP_PKEY_fromdata uintptr -+ -+func EVP_PKEY_fromdata(ctx EVP_PKEY_CTX_PTR, pkey *EVP_PKEY_PTR, selection int32, params OSSL_PARAM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_fromdata, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(pkey))), uintptr(selection), uintptr(params), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_fromdata", _err) -+} -+ -+var _mkcgo_EVP_PKEY_fromdata_init uintptr -+ -+func EVP_PKEY_fromdata_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_fromdata_init, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_fromdata_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get0_DSA uintptr -+ -+func EVP_PKEY_get0_DSA(pkey EVP_PKEY_PTR) (DSA_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_get0_DSA, uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return DSA_PTR(r0), newMkcgoErr("EVP_PKEY_get0_DSA", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get0_EC_KEY uintptr -+ -+func EVP_PKEY_get0_EC_KEY(pkey EVP_PKEY_PTR) (EC_KEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_get0_EC_KEY, uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return EC_KEY_PTR(r0), newMkcgoErr("EVP_PKEY_get0_EC_KEY", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get1_RSA uintptr -+ -+func EVP_PKEY_get1_RSA(pkey EVP_PKEY_PTR) (RSA_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_get1_RSA, uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return RSA_PTR(r0), newMkcgoErr("EVP_PKEY_get1_RSA", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get1_encoded_public_key uintptr -+ -+func EVP_PKEY_get1_encoded_public_key(pkey EVP_PKEY_PTR, ppub **byte) (int, error) { -+ var _err uintptr -+ r0, _ := syscallN(4, _mkcgo_EVP_PKEY_get1_encoded_public_key, uintptr(pkey), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(ppub))), uintptr(unsafe.Pointer(&_err))) -+ return int(r0), newMkcgoErr("EVP_PKEY_get1_encoded_public_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get_bits uintptr -+ -+func EVP_PKEY_get_bits(pkey EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_get_bits, uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_get_bits", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get_bn_param uintptr -+ -+func EVP_PKEY_get_bn_param(pkey EVP_PKEY_PTR, key_name *byte, bn *BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_get_bn_param, uintptr(pkey), uintptr(unsafe.Pointer(key_name)), uintptr(unsafe.Pointer(bn)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_get_bn_param", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get_octet_string_param uintptr -+ -+func EVP_PKEY_get_octet_string_param(pkey EVP_PKEY_PTR, key_name *byte, buf []byte, out_len *int) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_get_octet_string_param, uintptr(pkey), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key_name))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(buf)))), uintptr(len(buf)), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(out_len))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_get_octet_string_param", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get_raw_private_key uintptr -+ -+func EVP_PKEY_get_raw_private_key(pkey EVP_PKEY_PTR, priv []byte, privlen *int) (int32, error) { -+ if privlen != nil && int(*privlen) > len(priv) { -+ panic("EVP_PKEY_get_raw_private_key: *privlen exceeds len(priv)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_get_raw_private_key, uintptr(pkey), uintptr(unsafe.Pointer(unsafe.SliceData(priv))), uintptr(unsafe.Pointer(privlen)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_get_raw_private_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get_raw_public_key uintptr -+ -+func EVP_PKEY_get_raw_public_key(pkey EVP_PKEY_PTR, pub []byte, publen *int) (int32, error) { -+ if publen != nil && int(*publen) > len(pub) { -+ panic("EVP_PKEY_get_raw_public_key: *publen exceeds len(pub)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_get_raw_public_key, uintptr(pkey), uintptr(unsafe.Pointer(unsafe.SliceData(pub))), uintptr(unsafe.Pointer(publen)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_get_raw_public_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_get_size uintptr -+ -+func EVP_PKEY_get_size(pkey EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_get_size, uintptr(pkey), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_get_size", _err) -+} -+ -+var _mkcgo_EVP_PKEY_keygen uintptr -+ -+func EVP_PKEY_keygen(ctx EVP_PKEY_CTX_PTR, ppkey *EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_keygen, uintptr(ctx), uintptr(unsafe.Pointer(ppkey)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_keygen", _err) -+} -+ -+var _mkcgo_EVP_PKEY_keygen_init uintptr -+ -+func EVP_PKEY_keygen_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_keygen_init, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_keygen_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_new uintptr -+ -+func EVP_PKEY_new() (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_new, uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_new", _err) -+} -+ -+var _mkcgo_EVP_PKEY_new_raw_private_key uintptr -+ -+func EVP_PKEY_new_raw_private_key(__type int32, e ENGINE_PTR, key []byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_new_raw_private_key, uintptr(__type), uintptr(e), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(key)))), uintptr(len(key)), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_new_raw_private_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_new_raw_public_key uintptr -+ -+func EVP_PKEY_new_raw_public_key(__type int32, e ENGINE_PTR, key []byte) (EVP_PKEY_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_PKEY_new_raw_public_key, uintptr(__type), uintptr(e), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(key)))), uintptr(len(key)), uintptr(unsafe.Pointer(&_err))) -+ return EVP_PKEY_PTR(r0), newMkcgoErr("EVP_PKEY_new_raw_public_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_paramgen uintptr -+ -+func EVP_PKEY_paramgen(ctx EVP_PKEY_CTX_PTR, ppkey *EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_paramgen, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(ppkey))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_paramgen", _err) -+} -+ -+var _mkcgo_EVP_PKEY_paramgen_init uintptr -+ -+func EVP_PKEY_paramgen_init(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_paramgen_init, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_paramgen_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_private_check uintptr -+ -+func EVP_PKEY_private_check(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_private_check, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_private_check", _err) -+} -+ -+var _mkcgo_EVP_PKEY_public_check_quick uintptr -+ -+func EVP_PKEY_public_check_quick(ctx EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_public_check_quick, uintptr(ctx), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_public_check_quick", _err) -+} -+ -+var _mkcgo_EVP_PKEY_set1_EC_KEY uintptr -+ -+func EVP_PKEY_set1_EC_KEY(pkey EVP_PKEY_PTR, key EC_KEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_set1_EC_KEY, uintptr(pkey), uintptr(key), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_set1_EC_KEY", _err) -+} -+ -+var _mkcgo_EVP_PKEY_set1_encoded_public_key uintptr -+ -+func EVP_PKEY_set1_encoded_public_key(pkey EVP_PKEY_PTR, pub []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_set1_encoded_public_key, uintptr(pkey), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(pub)))), uintptr(len(pub)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_set1_encoded_public_key", _err) -+} -+ -+var _mkcgo_EVP_PKEY_sign uintptr -+ -+func EVP_PKEY_sign(arg0 EVP_PKEY_CTX_PTR, arg1 []byte, arg2 *int, arg3 []byte) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("EVP_PKEY_sign: *arg2 exceeds len(arg1)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_sign, uintptr(arg0), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg1)))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(arg2))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(arg3)))), uintptr(len(arg3)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_sign", _err) -+} -+ -+var _mkcgo_EVP_PKEY_sign_init uintptr -+ -+func EVP_PKEY_sign_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_sign_init, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_sign_init", _err) -+} -+ -+var _mkcgo_EVP_PKEY_up_ref uintptr -+ -+func EVP_PKEY_up_ref(key EVP_PKEY_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_up_ref, uintptr(key), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_up_ref", _err) -+} -+ -+var _mkcgo_EVP_PKEY_verify uintptr -+ -+func EVP_PKEY_verify(ctx EVP_PKEY_CTX_PTR, sig []byte, tbs []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_verify, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(sig)))), uintptr(len(sig)), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(tbs)))), uintptr(len(tbs)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_verify", _err) -+} -+ -+var _mkcgo_EVP_PKEY_verify_init uintptr -+ -+func EVP_PKEY_verify_init(arg0 EVP_PKEY_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_PKEY_verify_init, uintptr(arg0), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_PKEY_verify_init", _err) -+} -+ -+var _mkcgo_EVP_SIGNATURE_fetch uintptr -+ -+func EVP_SIGNATURE_fetch(ctx OSSL_LIB_CTX_PTR, algorithm *byte, properties *byte) (EVP_SIGNATURE_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_EVP_SIGNATURE_fetch, uintptr(ctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(algorithm))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(properties))), uintptr(unsafe.Pointer(&_err))) -+ return EVP_SIGNATURE_PTR(r0), newMkcgoErr("EVP_SIGNATURE_fetch", _err) -+} -+ -+var _mkcgo_EVP_SIGNATURE_free uintptr -+ -+func EVP_SIGNATURE_free(signature EVP_SIGNATURE_PTR) { -+ syscallN(0, _mkcgo_EVP_SIGNATURE_free, uintptr(signature)) -+} -+ -+var _mkcgo_EVP_aes_128_cbc uintptr -+ -+func EVP_aes_128_cbc() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_128_cbc) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_128_ctr uintptr -+ -+func EVP_aes_128_ctr() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_128_ctr) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_128_ecb uintptr -+ -+func EVP_aes_128_ecb() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_128_ecb) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_128_gcm uintptr -+ -+func EVP_aes_128_gcm() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_128_gcm) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_192_cbc uintptr -+ -+func EVP_aes_192_cbc() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_192_cbc) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_192_ctr uintptr -+ -+func EVP_aes_192_ctr() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_192_ctr) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_192_ecb uintptr -+ -+func EVP_aes_192_ecb() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_192_ecb) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_192_gcm uintptr -+ -+func EVP_aes_192_gcm() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_192_gcm) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_256_cbc uintptr -+ -+func EVP_aes_256_cbc() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_256_cbc) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_256_ctr uintptr -+ -+func EVP_aes_256_ctr() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_256_ctr) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_256_ecb uintptr -+ -+func EVP_aes_256_ecb() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_256_ecb) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_aes_256_gcm uintptr -+ -+func EVP_aes_256_gcm() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_aes_256_gcm) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+func EVP_chacha20_poly1305_Available() bool { -+ return _mkcgo_EVP_chacha20_poly1305 != 0 -+} -+ -+var _mkcgo_EVP_chacha20_poly1305 uintptr -+ -+func EVP_chacha20_poly1305() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_chacha20_poly1305) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_default_properties_enable_fips uintptr -+ -+func EVP_default_properties_enable_fips(libctx OSSL_LIB_CTX_PTR, enable int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_EVP_default_properties_enable_fips, uintptr(libctx), uintptr(enable), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("EVP_default_properties_enable_fips", _err) -+} -+ -+var _mkcgo_EVP_default_properties_is_fips_enabled uintptr -+ -+func EVP_default_properties_is_fips_enabled(libctx OSSL_LIB_CTX_PTR) int32 { -+ r0, _ := syscallN(0, _mkcgo_EVP_default_properties_is_fips_enabled, uintptr(libctx)) -+ return int32(r0) -+} -+ -+var _mkcgo_EVP_des_cbc uintptr -+ -+func EVP_des_cbc() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_des_cbc) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_des_ecb uintptr -+ -+func EVP_des_ecb() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_des_ecb) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_des_ede3_cbc uintptr -+ -+func EVP_des_ede3_cbc() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_des_ede3_cbc) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_des_ede3_ecb uintptr -+ -+func EVP_des_ede3_ecb() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_des_ede3_ecb) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_md4 uintptr -+ -+func EVP_md4() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_md4) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_md5 uintptr -+ -+func EVP_md5() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_md5) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_md5_sha1 uintptr -+ -+func EVP_md5_sha1() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_md5_sha1) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_rc4 uintptr -+ -+func EVP_rc4() EVP_CIPHER_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_rc4) -+ return EVP_CIPHER_PTR(r0) -+} -+ -+var _mkcgo_EVP_ripemd160 uintptr -+ -+func EVP_ripemd160() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_ripemd160) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha1 uintptr -+ -+func EVP_sha1() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha1) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha224 uintptr -+ -+func EVP_sha224() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha224) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha256 uintptr -+ -+func EVP_sha256() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha256) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha384 uintptr -+ -+func EVP_sha384() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha384) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha3_224 uintptr -+ -+func EVP_sha3_224() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha3_224) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha3_256 uintptr -+ -+func EVP_sha3_256() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha3_256) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha3_384 uintptr -+ -+func EVP_sha3_384() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha3_384) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha3_512 uintptr -+ -+func EVP_sha3_512() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha3_512) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha512 uintptr -+ -+func EVP_sha512() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha512) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha512_224 uintptr -+ -+func EVP_sha512_224() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha512_224) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_EVP_sha512_256 uintptr -+ -+func EVP_sha512_256() EVP_MD_PTR { -+ r0, _ := syscallN(0, _mkcgo_EVP_sha512_256) -+ return EVP_MD_PTR(r0) -+} -+ -+var _mkcgo_FIPS_mode uintptr -+ -+func FIPS_mode() int32 { -+ r0, _ := syscallN(0, _mkcgo_FIPS_mode) -+ return int32(r0) -+} -+ -+var _mkcgo_FIPS_mode_set uintptr -+ -+func FIPS_mode_set(r int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_FIPS_mode_set, uintptr(r), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("FIPS_mode_set", _err) -+} -+ -+var _mkcgo_HMAC_CTX_copy uintptr -+ -+func HMAC_CTX_copy(dest HMAC_CTX_PTR, src HMAC_CTX_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_HMAC_CTX_copy, uintptr(dest), uintptr(src), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("HMAC_CTX_copy", _err) -+} -+ -+var _mkcgo_HMAC_CTX_free uintptr -+ -+func HMAC_CTX_free(arg0 HMAC_CTX_PTR) { -+ syscallN(0, _mkcgo_HMAC_CTX_free, uintptr(arg0)) -+} -+ -+var _mkcgo_HMAC_CTX_new uintptr -+ -+func HMAC_CTX_new() (HMAC_CTX_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_HMAC_CTX_new, uintptr(unsafe.Pointer(&_err))) -+ return HMAC_CTX_PTR(r0), newMkcgoErr("HMAC_CTX_new", _err) -+} -+ -+var _mkcgo_HMAC_Final uintptr -+ -+func HMAC_Final(arg0 HMAC_CTX_PTR, arg1 []byte, arg2 *uint32) (int32, error) { -+ if arg2 != nil && int(*arg2) > len(arg1) { -+ panic("HMAC_Final: *arg2 exceeds len(arg1)") -+ } -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_HMAC_Final, uintptr(arg0), uintptr(unsafe.Pointer(unsafe.SliceData(arg1))), uintptr(unsafe.Pointer(arg2)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("HMAC_Final", _err) -+} -+ -+var _mkcgo_HMAC_Init_ex uintptr -+ -+func HMAC_Init_ex(arg0 HMAC_CTX_PTR, arg1 []byte, arg3 EVP_MD_PTR, arg4 ENGINE_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_HMAC_Init_ex, uintptr(arg0), uintptr(unsafe.Pointer(unsafe.SliceData(arg1))), uintptr(len(arg1)), uintptr(arg3), uintptr(arg4), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("HMAC_Init_ex", _err) -+} -+ -+var _mkcgo_HMAC_Update uintptr -+ -+func HMAC_Update(arg0 HMAC_CTX_PTR, arg1 []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_HMAC_Update, uintptr(arg0), uintptr(unsafe.Pointer(unsafe.SliceData(arg1))), uintptr(len(arg1)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("HMAC_Update", _err) -+} -+ -+var _mkcgo_OBJ_nid2sn uintptr -+ -+func OBJ_nid2sn(n int32) *byte { -+ r0, _ := syscallN(0, _mkcgo_OBJ_nid2sn, uintptr(n)) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_OPENSSL_init uintptr -+ -+func OPENSSL_init() { -+ syscallN(0, _mkcgo_OPENSSL_init) -+} -+ -+var _mkcgo_OPENSSL_init_crypto uintptr -+ -+func OPENSSL_init_crypto(ops uint64, settings OPENSSL_INIT_SETTINGS_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_OPENSSL_init_crypto, uintptr(ops), uintptr(settings), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("OPENSSL_init_crypto", _err) -+} -+ -+func OPENSSL_version_major_Available() bool { -+ return _mkcgo_OPENSSL_version_major != 0 -+} -+ -+var _mkcgo_OPENSSL_version_major uintptr -+ -+func OPENSSL_version_major() uint32 { -+ r0, _ := syscallN(0, _mkcgo_OPENSSL_version_major) -+ return uint32(r0) -+} -+ -+func OPENSSL_version_minor_Available() bool { -+ return _mkcgo_OPENSSL_version_minor != 0 -+} -+ -+var _mkcgo_OPENSSL_version_minor uintptr -+ -+func OPENSSL_version_minor() uint32 { -+ r0, _ := syscallN(0, _mkcgo_OPENSSL_version_minor) -+ return uint32(r0) -+} -+ -+func OPENSSL_version_patch_Available() bool { -+ return _mkcgo_OPENSSL_version_patch != 0 -+} -+ -+var _mkcgo_OPENSSL_version_patch uintptr -+ -+func OPENSSL_version_patch() uint32 { -+ r0, _ := syscallN(0, _mkcgo_OPENSSL_version_patch) -+ return uint32(r0) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_free uintptr -+ -+func OSSL_PARAM_BLD_free(bld OSSL_PARAM_BLD_PTR) { -+ syscallN(0, _mkcgo_OSSL_PARAM_BLD_free, uintptr(bld)) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_new uintptr -+ -+func OSSL_PARAM_BLD_new() OSSL_PARAM_BLD_PTR { -+ r0, _ := syscallN(0, _mkcgo_OSSL_PARAM_BLD_new) -+ return OSSL_PARAM_BLD_PTR(r0) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_push_BN uintptr -+ -+func OSSL_PARAM_BLD_push_BN(bld OSSL_PARAM_BLD_PTR, key *byte, bn BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_OSSL_PARAM_BLD_push_BN, uintptr(bld), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(bn), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("OSSL_PARAM_BLD_push_BN", _err) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_push_int32 uintptr -+ -+func OSSL_PARAM_BLD_push_int32(bld OSSL_PARAM_BLD_PTR, key *byte, num int32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_OSSL_PARAM_BLD_push_int32, uintptr(bld), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(num), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("OSSL_PARAM_BLD_push_int32", _err) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_push_octet_string uintptr -+ -+func OSSL_PARAM_BLD_push_octet_string(bld OSSL_PARAM_BLD_PTR, key *byte, buf []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_OSSL_PARAM_BLD_push_octet_string, uintptr(bld), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(buf)))), uintptr(len(buf)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("OSSL_PARAM_BLD_push_octet_string", _err) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_push_utf8_string uintptr -+ -+func OSSL_PARAM_BLD_push_utf8_string(bld OSSL_PARAM_BLD_PTR, key *byte, buf []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_OSSL_PARAM_BLD_push_utf8_string, uintptr(bld), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(buf)))), uintptr(len(buf)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("OSSL_PARAM_BLD_push_utf8_string", _err) -+} -+ -+var _mkcgo_OSSL_PARAM_BLD_to_param uintptr -+ -+func OSSL_PARAM_BLD_to_param(bld OSSL_PARAM_BLD_PTR) (OSSL_PARAM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_OSSL_PARAM_BLD_to_param, uintptr(bld), uintptr(unsafe.Pointer(&_err))) -+ return OSSL_PARAM_PTR(r0), newMkcgoErr("OSSL_PARAM_BLD_to_param", _err) -+} -+ -+var _mkcgo_OSSL_PARAM_free uintptr -+ -+func OSSL_PARAM_free(p OSSL_PARAM_PTR) { -+ syscallN(0, _mkcgo_OSSL_PARAM_free, uintptr(p)) -+} -+ -+var _mkcgo_OSSL_PARAM_locate_const uintptr -+ -+func OSSL_PARAM_locate_const(p OSSL_PARAM_PTR, key *byte) (OSSL_PARAM_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_OSSL_PARAM_locate_const, uintptr(p), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(key))), uintptr(unsafe.Pointer(&_err))) -+ return OSSL_PARAM_PTR(r0), newMkcgoErr("OSSL_PARAM_locate_const", _err) -+} -+ -+var _mkcgo_OSSL_PROVIDER_available uintptr -+ -+func OSSL_PROVIDER_available(libctx OSSL_LIB_CTX_PTR, name *byte) int32 { -+ r0, _ := syscallN(0, _mkcgo_OSSL_PROVIDER_available, uintptr(libctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(name)))) -+ return int32(r0) -+} -+ -+var _mkcgo_OSSL_PROVIDER_get0_name uintptr -+ -+func OSSL_PROVIDER_get0_name(prov OSSL_PROVIDER_PTR) *byte { -+ r0, _ := syscallN(0, _mkcgo_OSSL_PROVIDER_get0_name, uintptr(prov)) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+var _mkcgo_OSSL_PROVIDER_try_load uintptr -+ -+func OSSL_PROVIDER_try_load(libctx OSSL_LIB_CTX_PTR, name *byte, retain_fallbacks int32) (OSSL_PROVIDER_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_OSSL_PROVIDER_try_load, uintptr(libctx), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(name))), uintptr(retain_fallbacks), uintptr(unsafe.Pointer(&_err))) -+ return OSSL_PROVIDER_PTR(r0), newMkcgoErr("OSSL_PROVIDER_try_load", _err) -+} -+ -+var _mkcgo_OpenSSL_version uintptr -+ -+func OpenSSL_version(__type int32) *byte { -+ r0, _ := syscallN(0, _mkcgo_OpenSSL_version, uintptr(__type)) -+ return (*byte)(unsafe.Pointer(r0)) -+} -+ -+func OpenSSL_version_num_Available() bool { -+ return _mkcgo_OpenSSL_version_num != 0 -+} -+ -+var _mkcgo_OpenSSL_version_num uintptr -+ -+func OpenSSL_version_num() uint64 { -+ r0, _ := syscallN(0, _mkcgo_OpenSSL_version_num) -+ return uint64(r0) -+} -+ -+var _mkcgo_PKCS5_PBKDF2_HMAC uintptr -+ -+func PKCS5_PBKDF2_HMAC(pass []byte, salt []byte, iter int32, digest EVP_MD_PTR, out []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_PKCS5_PBKDF2_HMAC, uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(pass)))), uintptr(len(pass)), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(salt)))), uintptr(len(salt)), uintptr(iter), uintptr(digest), uintptr(len(out)), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(unsafe.SliceData(out)))), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("PKCS5_PBKDF2_HMAC", _err) -+} -+ -+var _mkcgo_RAND_bytes uintptr -+ -+func RAND_bytes(buf []byte) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_RAND_bytes, uintptr(unsafe.Pointer(unsafe.SliceData(buf))), uintptr(len(buf)), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("RAND_bytes", _err) -+} -+ -+var _mkcgo_RAND_bytes_ex uintptr -+ -+func RAND_bytes_ex(ctx OSSL_LIB_CTX_PTR, buf []byte, strength uint32) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_RAND_bytes_ex, uintptr(ctx), uintptr(unsafe.Pointer(unsafe.SliceData(buf))), uintptr(len(buf)), uintptr(strength), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("RAND_bytes_ex", _err) -+} -+ -+var _mkcgo_RSA_free uintptr -+ -+func RSA_free(arg0 RSA_PTR) { -+ syscallN(0, _mkcgo_RSA_free, uintptr(arg0)) -+} -+ -+var _mkcgo_RSA_get0_crt_params uintptr -+ -+func RSA_get0_crt_params(r RSA_PTR, dmp1 *BIGNUM_PTR, dmq1 *BIGNUM_PTR, iqmp *BIGNUM_PTR) { -+ syscallN(0, _mkcgo_RSA_get0_crt_params, uintptr(r), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(dmp1))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(dmq1))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(iqmp)))) -+} -+ -+var _mkcgo_RSA_get0_factors uintptr -+ -+func RSA_get0_factors(rsa RSA_PTR, p *BIGNUM_PTR, q *BIGNUM_PTR) { -+ syscallN(0, _mkcgo_RSA_get0_factors, uintptr(rsa), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(p))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(q)))) -+} -+ -+var _mkcgo_RSA_get0_key uintptr -+ -+func RSA_get0_key(rsa RSA_PTR, n *BIGNUM_PTR, e *BIGNUM_PTR, d *BIGNUM_PTR) { -+ syscallN(0, _mkcgo_RSA_get0_key, uintptr(rsa), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(n))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(e))), uintptr(mkcgoEscapePtrOssl(unsafe.Pointer(d)))) -+} -+ -+var _mkcgo_RSA_new uintptr -+ -+func RSA_new() (RSA_PTR, error) { -+ var _err uintptr -+ r0, _ := syscallN(1, _mkcgo_RSA_new, uintptr(unsafe.Pointer(&_err))) -+ return RSA_PTR(r0), newMkcgoErr("RSA_new", _err) -+} -+ -+var _mkcgo_RSA_set0_crt_params uintptr -+ -+func RSA_set0_crt_params(rsa RSA_PTR, dmp1 BIGNUM_PTR, dmp2 BIGNUM_PTR, iqmp BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_RSA_set0_crt_params, uintptr(rsa), uintptr(dmp1), uintptr(dmp2), uintptr(iqmp), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("RSA_set0_crt_params", _err) -+} -+ -+var _mkcgo_RSA_set0_factors uintptr -+ -+func RSA_set0_factors(rsa RSA_PTR, p BIGNUM_PTR, q BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_RSA_set0_factors, uintptr(rsa), uintptr(p), uintptr(q), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("RSA_set0_factors", _err) -+} -+ -+var _mkcgo_RSA_set0_key uintptr -+ -+func RSA_set0_key(r RSA_PTR, n BIGNUM_PTR, e BIGNUM_PTR, d BIGNUM_PTR) (int32, error) { -+ var _err uintptr -+ r0, _ := syscallN(3, _mkcgo_RSA_set0_key, uintptr(r), uintptr(n), uintptr(e), uintptr(d), uintptr(unsafe.Pointer(&_err))) -+ return int32(r0), newMkcgoErr("RSA_set0_key", _err) -+} -+ -+//go:nosplit -+func _mkcgo_error_check(errType, r1, args, n uintptr) { -+ var hasError bool -+ switch errType { -+ case 1: -+ hasError = r1 == 0 -+ case 2: -+ hasError = int32(r1) == -1 -+ case 3: -+ hasError = int32(r1) <= 0 -+ case 4: -+ hasError = int64(r1) <= 0 -+ default: -+ panic("invalid error check type") -+ } -+ if hasError { -+ **(**uintptr)(unsafe.Pointer(args + unsafe.Sizeof(uintptr(0))*n)) = retrieveErrorState() -+ } -+} -+ -+func MkcgoLoad_(handle unsafe.Pointer) { -+ _mkcgo_BIO_ctrl = dlsym(handle, "BIO_ctrl\x00", false) -+ _mkcgo_BIO_free = dlsym(handle, "BIO_free\x00", false) -+ _mkcgo_BIO_new = dlsym(handle, "BIO_new\x00", false) -+ _mkcgo_BIO_s_mem = dlsym(handle, "BIO_s_mem\x00", false) -+ _mkcgo_BN_bin2bn = dlsym(handle, "BN_bin2bn\x00", false) -+ _mkcgo_BN_bn2binpad = dlsym(handle, "BN_bn2binpad\x00", false) -+ _mkcgo_BN_bn2lebinpad = dlsym(handle, "BN_bn2lebinpad\x00", false) -+ _mkcgo_BN_clear = dlsym(handle, "BN_clear\x00", false) -+ _mkcgo_BN_clear_free = dlsym(handle, "BN_clear_free\x00", false) -+ _mkcgo_BN_free = dlsym(handle, "BN_free\x00", false) -+ _mkcgo_BN_lebin2bn = dlsym(handle, "BN_lebin2bn\x00", false) -+ _mkcgo_BN_new = dlsym(handle, "BN_new\x00", false) -+ _mkcgo_BN_num_bits = dlsym(handle, "BN_num_bits\x00", false) -+ _mkcgo_CRYPTO_free = dlsym(handle, "CRYPTO_free\x00", false) -+ _mkcgo_CRYPTO_malloc = dlsym(handle, "CRYPTO_malloc\x00", false) -+ _mkcgo_EC_GROUP_free = dlsym(handle, "EC_GROUP_free\x00", false) -+ _mkcgo_EC_GROUP_new_by_curve_name = dlsym(handle, "EC_GROUP_new_by_curve_name\x00", false) -+ _mkcgo_EC_POINT_free = dlsym(handle, "EC_POINT_free\x00", false) -+ _mkcgo_EC_POINT_mul = dlsym(handle, "EC_POINT_mul\x00", false) -+ _mkcgo_EC_POINT_new = dlsym(handle, "EC_POINT_new\x00", false) -+ _mkcgo_EC_POINT_oct2point = dlsym(handle, "EC_POINT_oct2point\x00", false) -+ _mkcgo_EC_POINT_point2oct = dlsym(handle, "EC_POINT_point2oct\x00", false) -+ _mkcgo_ERR_peek_error = dlsym(handle, "ERR_peek_error\x00", false) -+ _mkcgo_ERR_print_errors = dlsym(handle, "ERR_print_errors\x00", false) -+ _mkcgo_EVP_CIPHER_CTX_ctrl = dlsym(handle, "EVP_CIPHER_CTX_ctrl\x00", false) -+ _mkcgo_EVP_CIPHER_CTX_free = dlsym(handle, "EVP_CIPHER_CTX_free\x00", false) -+ _mkcgo_EVP_CIPHER_CTX_new = dlsym(handle, "EVP_CIPHER_CTX_new\x00", false) -+ _mkcgo_EVP_CIPHER_CTX_set_key_length = dlsym(handle, "EVP_CIPHER_CTX_set_key_length\x00", false) -+ _mkcgo_EVP_CIPHER_CTX_set_padding = dlsym(handle, "EVP_CIPHER_CTX_set_padding\x00", false) -+ _mkcgo_EVP_CipherInit_ex = dlsym(handle, "EVP_CipherInit_ex\x00", false) -+ _mkcgo_EVP_CipherUpdate = dlsym(handle, "EVP_CipherUpdate\x00", false) -+ _mkcgo_EVP_DecryptFinal_ex = dlsym(handle, "EVP_DecryptFinal_ex\x00", false) -+ _mkcgo_EVP_DecryptInit_ex = dlsym(handle, "EVP_DecryptInit_ex\x00", false) -+ _mkcgo_EVP_DecryptUpdate = dlsym(handle, "EVP_DecryptUpdate\x00", false) -+ _mkcgo_EVP_Digest = dlsym(handle, "EVP_Digest\x00", false) -+ _mkcgo_EVP_DigestFinal_ex = dlsym(handle, "EVP_DigestFinal_ex\x00", false) -+ _mkcgo_EVP_DigestInit = dlsym(handle, "EVP_DigestInit\x00", false) -+ _mkcgo_EVP_DigestInit_ex = dlsym(handle, "EVP_DigestInit_ex\x00", false) -+ _mkcgo_EVP_DigestSign = dlsym(handle, "EVP_DigestSign\x00", false) -+ _mkcgo_EVP_DigestSignFinal = dlsym(handle, "EVP_DigestSignFinal\x00", false) -+ _mkcgo_EVP_DigestSignInit = dlsym(handle, "EVP_DigestSignInit\x00", false) -+ _mkcgo_EVP_DigestUpdate = dlsym(handle, "EVP_DigestUpdate\x00", false) -+ _mkcgo_EVP_DigestVerify = dlsym(handle, "EVP_DigestVerify\x00", false) -+ _mkcgo_EVP_DigestVerifyFinal = dlsym(handle, "EVP_DigestVerifyFinal\x00", false) -+ _mkcgo_EVP_DigestVerifyInit = dlsym(handle, "EVP_DigestVerifyInit\x00", false) -+ _mkcgo_EVP_EncryptFinal_ex = dlsym(handle, "EVP_EncryptFinal_ex\x00", false) -+ _mkcgo_EVP_EncryptInit_ex = dlsym(handle, "EVP_EncryptInit_ex\x00", false) -+ _mkcgo_EVP_EncryptUpdate = dlsym(handle, "EVP_EncryptUpdate\x00", false) -+ _mkcgo_EVP_MD_CTX_copy_ex = dlsym(handle, "EVP_MD_CTX_copy_ex\x00", false) -+ _mkcgo_EVP_MD_CTX_ctrl = dlsym(handle, "EVP_MD_CTX_ctrl\x00", false) -+ _mkcgo_EVP_MD_CTX_free = dlsym(handle, "EVP_MD_CTX_free\x00", false) -+ _mkcgo_EVP_MD_CTX_new = dlsym(handle, "EVP_MD_CTX_new\x00", false) -+ _mkcgo_EVP_PKEY_CTX_ctrl = dlsym(handle, "EVP_PKEY_CTX_ctrl\x00", false) -+ _mkcgo_EVP_PKEY_CTX_free = dlsym(handle, "EVP_PKEY_CTX_free\x00", false) -+ _mkcgo_EVP_PKEY_CTX_new = dlsym(handle, "EVP_PKEY_CTX_new\x00", false) -+ _mkcgo_EVP_PKEY_CTX_new_id = dlsym(handle, "EVP_PKEY_CTX_new_id\x00", false) -+ _mkcgo_EVP_PKEY_decrypt = dlsym(handle, "EVP_PKEY_decrypt\x00", false) -+ _mkcgo_EVP_PKEY_decrypt_init = dlsym(handle, "EVP_PKEY_decrypt_init\x00", false) -+ _mkcgo_EVP_PKEY_derive = dlsym(handle, "EVP_PKEY_derive\x00", false) -+ _mkcgo_EVP_PKEY_derive_init = dlsym(handle, "EVP_PKEY_derive_init\x00", false) -+ _mkcgo_EVP_PKEY_derive_set_peer = dlsym(handle, "EVP_PKEY_derive_set_peer\x00", false) -+ _mkcgo_EVP_PKEY_encrypt = dlsym(handle, "EVP_PKEY_encrypt\x00", false) -+ _mkcgo_EVP_PKEY_encrypt_init = dlsym(handle, "EVP_PKEY_encrypt_init\x00", false) -+ _mkcgo_EVP_PKEY_free = dlsym(handle, "EVP_PKEY_free\x00", false) -+ _mkcgo_EVP_PKEY_get_raw_private_key = dlsym(handle, "EVP_PKEY_get_raw_private_key\x00", false) -+ _mkcgo_EVP_PKEY_get_raw_public_key = dlsym(handle, "EVP_PKEY_get_raw_public_key\x00", false) -+ _mkcgo_EVP_PKEY_keygen = dlsym(handle, "EVP_PKEY_keygen\x00", false) -+ _mkcgo_EVP_PKEY_keygen_init = dlsym(handle, "EVP_PKEY_keygen_init\x00", false) -+ _mkcgo_EVP_PKEY_new = dlsym(handle, "EVP_PKEY_new\x00", false) -+ _mkcgo_EVP_PKEY_new_raw_private_key = dlsym(handle, "EVP_PKEY_new_raw_private_key\x00", false) -+ _mkcgo_EVP_PKEY_new_raw_public_key = dlsym(handle, "EVP_PKEY_new_raw_public_key\x00", false) -+ _mkcgo_EVP_PKEY_paramgen = dlsym(handle, "EVP_PKEY_paramgen\x00", false) -+ _mkcgo_EVP_PKEY_paramgen_init = dlsym(handle, "EVP_PKEY_paramgen_init\x00", false) -+ _mkcgo_EVP_PKEY_sign = dlsym(handle, "EVP_PKEY_sign\x00", false) -+ _mkcgo_EVP_PKEY_sign_init = dlsym(handle, "EVP_PKEY_sign_init\x00", false) -+ _mkcgo_EVP_PKEY_up_ref = dlsym(handle, "EVP_PKEY_up_ref\x00", false) -+ _mkcgo_EVP_PKEY_verify = dlsym(handle, "EVP_PKEY_verify\x00", false) -+ _mkcgo_EVP_PKEY_verify_init = dlsym(handle, "EVP_PKEY_verify_init\x00", false) -+ _mkcgo_EVP_aes_128_cbc = dlsym(handle, "EVP_aes_128_cbc\x00", false) -+ _mkcgo_EVP_aes_128_ctr = dlsym(handle, "EVP_aes_128_ctr\x00", false) -+ _mkcgo_EVP_aes_128_ecb = dlsym(handle, "EVP_aes_128_ecb\x00", false) -+ _mkcgo_EVP_aes_128_gcm = dlsym(handle, "EVP_aes_128_gcm\x00", false) -+ _mkcgo_EVP_aes_192_cbc = dlsym(handle, "EVP_aes_192_cbc\x00", false) -+ _mkcgo_EVP_aes_192_ctr = dlsym(handle, "EVP_aes_192_ctr\x00", false) -+ _mkcgo_EVP_aes_192_ecb = dlsym(handle, "EVP_aes_192_ecb\x00", false) -+ _mkcgo_EVP_aes_192_gcm = dlsym(handle, "EVP_aes_192_gcm\x00", false) -+ _mkcgo_EVP_aes_256_cbc = dlsym(handle, "EVP_aes_256_cbc\x00", false) -+ _mkcgo_EVP_aes_256_ctr = dlsym(handle, "EVP_aes_256_ctr\x00", false) -+ _mkcgo_EVP_aes_256_ecb = dlsym(handle, "EVP_aes_256_ecb\x00", false) -+ _mkcgo_EVP_aes_256_gcm = dlsym(handle, "EVP_aes_256_gcm\x00", false) -+ _mkcgo_EVP_chacha20_poly1305 = dlsym(handle, "EVP_chacha20_poly1305\x00", true) -+ _mkcgo_EVP_des_cbc = dlsym(handle, "EVP_des_cbc\x00", false) -+ _mkcgo_EVP_des_ecb = dlsym(handle, "EVP_des_ecb\x00", false) -+ _mkcgo_EVP_des_ede3_cbc = dlsym(handle, "EVP_des_ede3_cbc\x00", false) -+ _mkcgo_EVP_des_ede3_ecb = dlsym(handle, "EVP_des_ede3_ecb\x00", false) -+ _mkcgo_EVP_md4 = dlsym(handle, "EVP_md4\x00", false) -+ _mkcgo_EVP_md5 = dlsym(handle, "EVP_md5\x00", false) -+ _mkcgo_EVP_md5_sha1 = dlsym(handle, "EVP_md5_sha1\x00", false) -+ _mkcgo_EVP_rc4 = dlsym(handle, "EVP_rc4\x00", false) -+ _mkcgo_EVP_ripemd160 = dlsym(handle, "EVP_ripemd160\x00", false) -+ _mkcgo_EVP_sha1 = dlsym(handle, "EVP_sha1\x00", false) -+ _mkcgo_EVP_sha224 = dlsym(handle, "EVP_sha224\x00", false) -+ _mkcgo_EVP_sha256 = dlsym(handle, "EVP_sha256\x00", false) -+ _mkcgo_EVP_sha384 = dlsym(handle, "EVP_sha384\x00", false) -+ _mkcgo_EVP_sha3_224 = dlsym(handle, "EVP_sha3_224\x00", false) -+ _mkcgo_EVP_sha3_256 = dlsym(handle, "EVP_sha3_256\x00", false) -+ _mkcgo_EVP_sha3_384 = dlsym(handle, "EVP_sha3_384\x00", false) -+ _mkcgo_EVP_sha3_512 = dlsym(handle, "EVP_sha3_512\x00", false) -+ _mkcgo_EVP_sha512 = dlsym(handle, "EVP_sha512\x00", false) -+ _mkcgo_EVP_sha512_224 = dlsym(handle, "EVP_sha512_224\x00", false) -+ _mkcgo_EVP_sha512_256 = dlsym(handle, "EVP_sha512_256\x00", false) -+ _mkcgo_OBJ_nid2sn = dlsym(handle, "OBJ_nid2sn\x00", false) -+ _mkcgo_OPENSSL_init = dlsym(handle, "OPENSSL_init\x00", false) -+ _mkcgo_OPENSSL_init_crypto = dlsym(handle, "OPENSSL_init_crypto\x00", false) -+ _mkcgo_OpenSSL_version = dlsym(handle, "OpenSSL_version\x00", false) -+} -+ -+func MkcgoUnload_() { -+ _mkcgo_BIO_ctrl = 0 -+ _mkcgo_BIO_free = 0 -+ _mkcgo_BIO_new = 0 -+ _mkcgo_BIO_s_mem = 0 -+ _mkcgo_BN_bin2bn = 0 -+ _mkcgo_BN_bn2binpad = 0 -+ _mkcgo_BN_bn2lebinpad = 0 -+ _mkcgo_BN_clear = 0 -+ _mkcgo_BN_clear_free = 0 -+ _mkcgo_BN_free = 0 -+ _mkcgo_BN_lebin2bn = 0 -+ _mkcgo_BN_new = 0 -+ _mkcgo_BN_num_bits = 0 -+ _mkcgo_CRYPTO_free = 0 -+ _mkcgo_CRYPTO_malloc = 0 -+ _mkcgo_EC_GROUP_free = 0 -+ _mkcgo_EC_GROUP_new_by_curve_name = 0 -+ _mkcgo_EC_POINT_free = 0 -+ _mkcgo_EC_POINT_mul = 0 -+ _mkcgo_EC_POINT_new = 0 -+ _mkcgo_EC_POINT_oct2point = 0 -+ _mkcgo_EC_POINT_point2oct = 0 -+ _mkcgo_ERR_peek_error = 0 -+ _mkcgo_ERR_print_errors = 0 -+ _mkcgo_EVP_CIPHER_CTX_ctrl = 0 -+ _mkcgo_EVP_CIPHER_CTX_free = 0 -+ _mkcgo_EVP_CIPHER_CTX_new = 0 -+ _mkcgo_EVP_CIPHER_CTX_set_key_length = 0 -+ _mkcgo_EVP_CIPHER_CTX_set_padding = 0 -+ _mkcgo_EVP_CipherInit_ex = 0 -+ _mkcgo_EVP_CipherUpdate = 0 -+ _mkcgo_EVP_DecryptFinal_ex = 0 -+ _mkcgo_EVP_DecryptInit_ex = 0 -+ _mkcgo_EVP_DecryptUpdate = 0 -+ _mkcgo_EVP_Digest = 0 -+ _mkcgo_EVP_DigestFinal_ex = 0 -+ _mkcgo_EVP_DigestInit = 0 -+ _mkcgo_EVP_DigestInit_ex = 0 -+ _mkcgo_EVP_DigestSign = 0 -+ _mkcgo_EVP_DigestSignFinal = 0 -+ _mkcgo_EVP_DigestSignInit = 0 -+ _mkcgo_EVP_DigestUpdate = 0 -+ _mkcgo_EVP_DigestVerify = 0 -+ _mkcgo_EVP_DigestVerifyFinal = 0 -+ _mkcgo_EVP_DigestVerifyInit = 0 -+ _mkcgo_EVP_EncryptFinal_ex = 0 -+ _mkcgo_EVP_EncryptInit_ex = 0 -+ _mkcgo_EVP_EncryptUpdate = 0 -+ _mkcgo_EVP_MD_CTX_copy_ex = 0 -+ _mkcgo_EVP_MD_CTX_ctrl = 0 -+ _mkcgo_EVP_MD_CTX_free = 0 -+ _mkcgo_EVP_MD_CTX_new = 0 -+ _mkcgo_EVP_PKEY_CTX_ctrl = 0 -+ _mkcgo_EVP_PKEY_CTX_free = 0 -+ _mkcgo_EVP_PKEY_CTX_new = 0 -+ _mkcgo_EVP_PKEY_CTX_new_id = 0 -+ _mkcgo_EVP_PKEY_decrypt = 0 -+ _mkcgo_EVP_PKEY_decrypt_init = 0 -+ _mkcgo_EVP_PKEY_derive = 0 -+ _mkcgo_EVP_PKEY_derive_init = 0 -+ _mkcgo_EVP_PKEY_derive_set_peer = 0 -+ _mkcgo_EVP_PKEY_encrypt = 0 -+ _mkcgo_EVP_PKEY_encrypt_init = 0 -+ _mkcgo_EVP_PKEY_free = 0 -+ _mkcgo_EVP_PKEY_get_raw_private_key = 0 -+ _mkcgo_EVP_PKEY_get_raw_public_key = 0 -+ _mkcgo_EVP_PKEY_keygen = 0 -+ _mkcgo_EVP_PKEY_keygen_init = 0 -+ _mkcgo_EVP_PKEY_new = 0 -+ _mkcgo_EVP_PKEY_new_raw_private_key = 0 -+ _mkcgo_EVP_PKEY_new_raw_public_key = 0 -+ _mkcgo_EVP_PKEY_paramgen = 0 -+ _mkcgo_EVP_PKEY_paramgen_init = 0 -+ _mkcgo_EVP_PKEY_sign = 0 -+ _mkcgo_EVP_PKEY_sign_init = 0 -+ _mkcgo_EVP_PKEY_up_ref = 0 -+ _mkcgo_EVP_PKEY_verify = 0 -+ _mkcgo_EVP_PKEY_verify_init = 0 -+ _mkcgo_EVP_aes_128_cbc = 0 -+ _mkcgo_EVP_aes_128_ctr = 0 -+ _mkcgo_EVP_aes_128_ecb = 0 -+ _mkcgo_EVP_aes_128_gcm = 0 -+ _mkcgo_EVP_aes_192_cbc = 0 -+ _mkcgo_EVP_aes_192_ctr = 0 -+ _mkcgo_EVP_aes_192_ecb = 0 -+ _mkcgo_EVP_aes_192_gcm = 0 -+ _mkcgo_EVP_aes_256_cbc = 0 -+ _mkcgo_EVP_aes_256_ctr = 0 -+ _mkcgo_EVP_aes_256_ecb = 0 -+ _mkcgo_EVP_aes_256_gcm = 0 -+ _mkcgo_EVP_chacha20_poly1305 = 0 -+ _mkcgo_EVP_des_cbc = 0 -+ _mkcgo_EVP_des_ecb = 0 -+ _mkcgo_EVP_des_ede3_cbc = 0 -+ _mkcgo_EVP_des_ede3_ecb = 0 -+ _mkcgo_EVP_md4 = 0 -+ _mkcgo_EVP_md5 = 0 -+ _mkcgo_EVP_md5_sha1 = 0 -+ _mkcgo_EVP_rc4 = 0 -+ _mkcgo_EVP_ripemd160 = 0 -+ _mkcgo_EVP_sha1 = 0 -+ _mkcgo_EVP_sha224 = 0 -+ _mkcgo_EVP_sha256 = 0 -+ _mkcgo_EVP_sha384 = 0 -+ _mkcgo_EVP_sha3_224 = 0 -+ _mkcgo_EVP_sha3_256 = 0 -+ _mkcgo_EVP_sha3_384 = 0 -+ _mkcgo_EVP_sha3_512 = 0 -+ _mkcgo_EVP_sha512 = 0 -+ _mkcgo_EVP_sha512_224 = 0 -+ _mkcgo_EVP_sha512_256 = 0 -+ _mkcgo_OBJ_nid2sn = 0 -+ _mkcgo_OPENSSL_init = 0 -+ _mkcgo_OPENSSL_init_crypto = 0 -+ _mkcgo_OpenSSL_version = 0 -+} -+ -+func MkcgoLoad_3(handle unsafe.Pointer) { -+ _mkcgo_EC_POINT_set_affine_coordinates = dlsym(handle, "EC_POINT_set_affine_coordinates\x00", false) -+ _mkcgo_EVP_CIPHER_fetch = dlsym(handle, "EVP_CIPHER_fetch\x00", false) -+ _mkcgo_EVP_CIPHER_get0_name = dlsym(handle, "EVP_CIPHER_get0_name\x00", false) -+ _mkcgo_EVP_CIPHER_get_block_size = dlsym(handle, "EVP_CIPHER_get_block_size\x00", false) -+ _mkcgo_EVP_CipherInit_ex2 = dlsym(handle, "EVP_CipherInit_ex2\x00", false) -+ _mkcgo_EVP_KDF_CTX_free = dlsym(handle, "EVP_KDF_CTX_free\x00", false) -+ _mkcgo_EVP_KDF_CTX_get_kdf_size = dlsym(handle, "EVP_KDF_CTX_get_kdf_size\x00", false) -+ _mkcgo_EVP_KDF_CTX_new = dlsym(handle, "EVP_KDF_CTX_new\x00", false) -+ _mkcgo_EVP_KDF_CTX_set_params = dlsym(handle, "EVP_KDF_CTX_set_params\x00", false) -+ _mkcgo_EVP_KDF_derive = dlsym(handle, "EVP_KDF_derive\x00", false) -+ _mkcgo_EVP_KDF_fetch = dlsym(handle, "EVP_KDF_fetch\x00", false) -+ _mkcgo_EVP_KDF_free = dlsym(handle, "EVP_KDF_free\x00", false) -+ _mkcgo_EVP_KEYMGMT_fetch = dlsym(handle, "EVP_KEYMGMT_fetch\x00", true) -+ _mkcgo_EVP_KEYMGMT_free = dlsym(handle, "EVP_KEYMGMT_free\x00", false) -+ _mkcgo_EVP_MAC_CTX_dup = dlsym(handle, "EVP_MAC_CTX_dup\x00", false) -+ _mkcgo_EVP_MAC_CTX_free = dlsym(handle, "EVP_MAC_CTX_free\x00", false) -+ _mkcgo_EVP_MAC_CTX_new = dlsym(handle, "EVP_MAC_CTX_new\x00", false) -+ _mkcgo_EVP_MAC_CTX_set_params = dlsym(handle, "EVP_MAC_CTX_set_params\x00", false) -+ _mkcgo_EVP_MAC_fetch = dlsym(handle, "EVP_MAC_fetch\x00", false) -+ _mkcgo_EVP_MAC_final = dlsym(handle, "EVP_MAC_final\x00", false) -+ _mkcgo_EVP_MAC_init = dlsym(handle, "EVP_MAC_init\x00", false) -+ _mkcgo_EVP_MAC_update = dlsym(handle, "EVP_MAC_update\x00", false) -+ _mkcgo_EVP_MD_CTX_get_params = dlsym(handle, "EVP_MD_CTX_get_params\x00", false) -+ _mkcgo_EVP_MD_CTX_gettable_params = dlsym(handle, "EVP_MD_CTX_gettable_params\x00", false) -+ _mkcgo_EVP_MD_CTX_set_params = dlsym(handle, "EVP_MD_CTX_set_params\x00", false) -+ _mkcgo_EVP_MD_CTX_settable_params = dlsym(handle, "EVP_MD_CTX_settable_params\x00", false) -+ _mkcgo_EVP_MD_fetch = dlsym(handle, "EVP_MD_fetch\x00", false) -+ _mkcgo_EVP_MD_free = dlsym(handle, "EVP_MD_free\x00", false) -+ _mkcgo_EVP_MD_get0_name = dlsym(handle, "EVP_MD_get0_name\x00", false) -+ _mkcgo_EVP_MD_get0_provider = dlsym(handle, "EVP_MD_get0_provider\x00", false) -+ _mkcgo_EVP_MD_get_block_size = dlsym(handle, "EVP_MD_get_block_size\x00", false) -+ _mkcgo_EVP_MD_get_size = dlsym(handle, "EVP_MD_get_size\x00", false) -+ _mkcgo_EVP_MD_get_type = dlsym(handle, "EVP_MD_get_type\x00", false) -+ _mkcgo_EVP_PKEY_CTX_add1_hkdf_info = dlsym(handle, "EVP_PKEY_CTX_add1_hkdf_info\x00", false) -+ _mkcgo_EVP_PKEY_CTX_new_from_pkey = dlsym(handle, "EVP_PKEY_CTX_new_from_pkey\x00", false) -+ _mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label = dlsym(handle, "EVP_PKEY_CTX_set0_rsa_oaep_label\x00", false) -+ _mkcgo_EVP_PKEY_CTX_set1_hkdf_key = dlsym(handle, "EVP_PKEY_CTX_set1_hkdf_key\x00", false) -+ _mkcgo_EVP_PKEY_CTX_set1_hkdf_salt = dlsym(handle, "EVP_PKEY_CTX_set1_hkdf_salt\x00", false) -+ _mkcgo_EVP_PKEY_CTX_set_hkdf_md = dlsym(handle, "EVP_PKEY_CTX_set_hkdf_md\x00", false) -+ _mkcgo_EVP_PKEY_CTX_set_hkdf_mode = dlsym(handle, "EVP_PKEY_CTX_set_hkdf_mode\x00", false) -+ _mkcgo_EVP_PKEY_CTX_set_params = dlsym(handle, "EVP_PKEY_CTX_set_params\x00", false) -+ _mkcgo_EVP_PKEY_Q_keygen = dlsym(handle, "EVP_PKEY_Q_keygen\x00", false) -+ _mkcgo_EVP_PKEY_decapsulate = dlsym(handle, "EVP_PKEY_decapsulate\x00", false) -+ _mkcgo_EVP_PKEY_decapsulate_init = dlsym(handle, "EVP_PKEY_decapsulate_init\x00", false) -+ _mkcgo_EVP_PKEY_encapsulate = dlsym(handle, "EVP_PKEY_encapsulate\x00", false) -+ _mkcgo_EVP_PKEY_encapsulate_init = dlsym(handle, "EVP_PKEY_encapsulate_init\x00", false) -+ _mkcgo_EVP_PKEY_eq = dlsym(handle, "EVP_PKEY_eq\x00", false) -+ _mkcgo_EVP_PKEY_fromdata = dlsym(handle, "EVP_PKEY_fromdata\x00", false) -+ _mkcgo_EVP_PKEY_fromdata_init = dlsym(handle, "EVP_PKEY_fromdata_init\x00", false) -+ _mkcgo_EVP_PKEY_get1_encoded_public_key = dlsym(handle, "EVP_PKEY_get1_encoded_public_key\x00", false) -+ _mkcgo_EVP_PKEY_get_bits = dlsym(handle, "EVP_PKEY_get_bits\x00", false) -+ _mkcgo_EVP_PKEY_get_bn_param = dlsym(handle, "EVP_PKEY_get_bn_param\x00", false) -+ _mkcgo_EVP_PKEY_get_octet_string_param = dlsym(handle, "EVP_PKEY_get_octet_string_param\x00", false) -+ _mkcgo_EVP_PKEY_get_size = dlsym(handle, "EVP_PKEY_get_size\x00", false) -+ _mkcgo_EVP_PKEY_private_check = dlsym(handle, "EVP_PKEY_private_check\x00", false) -+ _mkcgo_EVP_PKEY_public_check_quick = dlsym(handle, "EVP_PKEY_public_check_quick\x00", false) -+ _mkcgo_EVP_PKEY_set1_encoded_public_key = dlsym(handle, "EVP_PKEY_set1_encoded_public_key\x00", false) -+ _mkcgo_EVP_SIGNATURE_fetch = dlsym(handle, "EVP_SIGNATURE_fetch\x00", false) -+ _mkcgo_EVP_SIGNATURE_free = dlsym(handle, "EVP_SIGNATURE_free\x00", false) -+ _mkcgo_EVP_default_properties_enable_fips = dlsym(handle, "EVP_default_properties_enable_fips\x00", false) -+ _mkcgo_EVP_default_properties_is_fips_enabled = dlsym(handle, "EVP_default_properties_is_fips_enabled\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_free = dlsym(handle, "OSSL_PARAM_BLD_free\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_new = dlsym(handle, "OSSL_PARAM_BLD_new\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_push_BN = dlsym(handle, "OSSL_PARAM_BLD_push_BN\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_push_int32 = dlsym(handle, "OSSL_PARAM_BLD_push_int32\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_push_octet_string = dlsym(handle, "OSSL_PARAM_BLD_push_octet_string\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_push_utf8_string = dlsym(handle, "OSSL_PARAM_BLD_push_utf8_string\x00", false) -+ _mkcgo_OSSL_PARAM_BLD_to_param = dlsym(handle, "OSSL_PARAM_BLD_to_param\x00", false) -+ _mkcgo_OSSL_PARAM_free = dlsym(handle, "OSSL_PARAM_free\x00", false) -+ _mkcgo_OSSL_PARAM_locate_const = dlsym(handle, "OSSL_PARAM_locate_const\x00", false) -+ _mkcgo_OSSL_PROVIDER_available = dlsym(handle, "OSSL_PROVIDER_available\x00", false) -+ _mkcgo_OSSL_PROVIDER_get0_name = dlsym(handle, "OSSL_PROVIDER_get0_name\x00", false) -+ _mkcgo_OSSL_PROVIDER_try_load = dlsym(handle, "OSSL_PROVIDER_try_load\x00", false) -+ _mkcgo_RAND_bytes_ex = dlsym(handle, "RAND_bytes_ex\x00", false) -+} -+ -+func MkcgoUnload_3() { -+ _mkcgo_EC_POINT_set_affine_coordinates = 0 -+ _mkcgo_EVP_CIPHER_fetch = 0 -+ _mkcgo_EVP_CIPHER_get0_name = 0 -+ _mkcgo_EVP_CIPHER_get_block_size = 0 -+ _mkcgo_EVP_CipherInit_ex2 = 0 -+ _mkcgo_EVP_KDF_CTX_free = 0 -+ _mkcgo_EVP_KDF_CTX_get_kdf_size = 0 -+ _mkcgo_EVP_KDF_CTX_new = 0 -+ _mkcgo_EVP_KDF_CTX_set_params = 0 -+ _mkcgo_EVP_KDF_derive = 0 -+ _mkcgo_EVP_KDF_fetch = 0 -+ _mkcgo_EVP_KDF_free = 0 -+ _mkcgo_EVP_KEYMGMT_fetch = 0 -+ _mkcgo_EVP_KEYMGMT_free = 0 -+ _mkcgo_EVP_MAC_CTX_dup = 0 -+ _mkcgo_EVP_MAC_CTX_free = 0 -+ _mkcgo_EVP_MAC_CTX_new = 0 -+ _mkcgo_EVP_MAC_CTX_set_params = 0 -+ _mkcgo_EVP_MAC_fetch = 0 -+ _mkcgo_EVP_MAC_final = 0 -+ _mkcgo_EVP_MAC_init = 0 -+ _mkcgo_EVP_MAC_update = 0 -+ _mkcgo_EVP_MD_CTX_get_params = 0 -+ _mkcgo_EVP_MD_CTX_gettable_params = 0 -+ _mkcgo_EVP_MD_CTX_set_params = 0 -+ _mkcgo_EVP_MD_CTX_settable_params = 0 -+ _mkcgo_EVP_MD_fetch = 0 -+ _mkcgo_EVP_MD_free = 0 -+ _mkcgo_EVP_MD_get0_name = 0 -+ _mkcgo_EVP_MD_get0_provider = 0 -+ _mkcgo_EVP_MD_get_block_size = 0 -+ _mkcgo_EVP_MD_get_size = 0 -+ _mkcgo_EVP_MD_get_type = 0 -+ _mkcgo_EVP_PKEY_CTX_add1_hkdf_info = 0 -+ _mkcgo_EVP_PKEY_CTX_new_from_pkey = 0 -+ _mkcgo_EVP_PKEY_CTX_set0_rsa_oaep_label = 0 -+ _mkcgo_EVP_PKEY_CTX_set1_hkdf_key = 0 -+ _mkcgo_EVP_PKEY_CTX_set1_hkdf_salt = 0 -+ _mkcgo_EVP_PKEY_CTX_set_hkdf_md = 0 -+ _mkcgo_EVP_PKEY_CTX_set_hkdf_mode = 0 -+ _mkcgo_EVP_PKEY_CTX_set_params = 0 -+ _mkcgo_EVP_PKEY_Q_keygen = 0 -+ _mkcgo_EVP_PKEY_decapsulate = 0 -+ _mkcgo_EVP_PKEY_decapsulate_init = 0 -+ _mkcgo_EVP_PKEY_encapsulate = 0 -+ _mkcgo_EVP_PKEY_encapsulate_init = 0 -+ _mkcgo_EVP_PKEY_eq = 0 -+ _mkcgo_EVP_PKEY_fromdata = 0 -+ _mkcgo_EVP_PKEY_fromdata_init = 0 -+ _mkcgo_EVP_PKEY_get1_encoded_public_key = 0 -+ _mkcgo_EVP_PKEY_get_bits = 0 -+ _mkcgo_EVP_PKEY_get_bn_param = 0 -+ _mkcgo_EVP_PKEY_get_octet_string_param = 0 -+ _mkcgo_EVP_PKEY_get_size = 0 -+ _mkcgo_EVP_PKEY_private_check = 0 -+ _mkcgo_EVP_PKEY_public_check_quick = 0 -+ _mkcgo_EVP_PKEY_set1_encoded_public_key = 0 -+ _mkcgo_EVP_SIGNATURE_fetch = 0 -+ _mkcgo_EVP_SIGNATURE_free = 0 -+ _mkcgo_EVP_default_properties_enable_fips = 0 -+ _mkcgo_EVP_default_properties_is_fips_enabled = 0 -+ _mkcgo_OSSL_PARAM_BLD_free = 0 -+ _mkcgo_OSSL_PARAM_BLD_new = 0 -+ _mkcgo_OSSL_PARAM_BLD_push_BN = 0 -+ _mkcgo_OSSL_PARAM_BLD_push_int32 = 0 -+ _mkcgo_OSSL_PARAM_BLD_push_octet_string = 0 -+ _mkcgo_OSSL_PARAM_BLD_push_utf8_string = 0 -+ _mkcgo_OSSL_PARAM_BLD_to_param = 0 -+ _mkcgo_OSSL_PARAM_free = 0 -+ _mkcgo_OSSL_PARAM_locate_const = 0 -+ _mkcgo_OSSL_PROVIDER_available = 0 -+ _mkcgo_OSSL_PROVIDER_get0_name = 0 -+ _mkcgo_OSSL_PROVIDER_try_load = 0 -+ _mkcgo_RAND_bytes_ex = 0 -+} -+ -+func MkcgoLoad_33(handle unsafe.Pointer) { -+ _mkcgo_EVP_DigestFinalXOF = dlsym(handle, "EVP_DigestFinalXOF\x00", false) -+ _mkcgo_EVP_DigestSqueeze = dlsym(handle, "EVP_DigestSqueeze\x00", true) -+} -+ -+func MkcgoUnload_33() { -+ _mkcgo_EVP_DigestFinalXOF = 0 -+ _mkcgo_EVP_DigestSqueeze = 0 -+} -+ -+func MkcgoLoad_init_1(handle unsafe.Pointer) { -+ _mkcgo_FIPS_mode = dlsym(handle, "FIPS_mode\x00", false) -+ _mkcgo_FIPS_mode_set = dlsym(handle, "FIPS_mode_set\x00", false) -+} -+ -+func MkcgoUnload_init_1() { -+ _mkcgo_FIPS_mode = 0 -+ _mkcgo_FIPS_mode_set = 0 -+} -+ -+func MkcgoLoad_init_3(handle unsafe.Pointer) { -+ _mkcgo_BIO_ctrl = dlsym(handle, "BIO_ctrl\x00", false) -+ _mkcgo_BIO_free = dlsym(handle, "BIO_free\x00", false) -+ _mkcgo_BIO_new = dlsym(handle, "BIO_new\x00", false) -+ _mkcgo_BIO_s_mem = dlsym(handle, "BIO_s_mem\x00", false) -+ _mkcgo_ERR_print_errors = dlsym(handle, "ERR_print_errors\x00", false) -+ _mkcgo_EVP_MD_fetch = dlsym(handle, "EVP_MD_fetch\x00", false) -+ _mkcgo_EVP_MD_free = dlsym(handle, "EVP_MD_free\x00", false) -+ _mkcgo_EVP_MD_get0_provider = dlsym(handle, "EVP_MD_get0_provider\x00", false) -+ _mkcgo_EVP_default_properties_is_fips_enabled = dlsym(handle, "EVP_default_properties_is_fips_enabled\x00", false) -+} -+ -+func MkcgoUnload_init_3() { -+ _mkcgo_BIO_ctrl = 0 -+ _mkcgo_BIO_free = 0 -+ _mkcgo_BIO_new = 0 -+ _mkcgo_BIO_s_mem = 0 -+ _mkcgo_ERR_print_errors = 0 -+ _mkcgo_EVP_MD_fetch = 0 -+ _mkcgo_EVP_MD_free = 0 -+ _mkcgo_EVP_MD_get0_provider = 0 -+ _mkcgo_EVP_default_properties_is_fips_enabled = 0 -+} -+ -+func MkcgoLoad_legacy_1(handle unsafe.Pointer) { -+ _mkcgo_DSA_free = dlsym(handle, "DSA_free\x00", false) -+ _mkcgo_DSA_generate_key = dlsym(handle, "DSA_generate_key\x00", false) -+ _mkcgo_DSA_get0_key = dlsym(handle, "DSA_get0_key\x00", false) -+ _mkcgo_DSA_get0_pqg = dlsym(handle, "DSA_get0_pqg\x00", false) -+ _mkcgo_DSA_new = dlsym(handle, "DSA_new\x00", false) -+ _mkcgo_DSA_set0_key = dlsym(handle, "DSA_set0_key\x00", false) -+ _mkcgo_DSA_set0_pqg = dlsym(handle, "DSA_set0_pqg\x00", false) -+ _mkcgo_EC_KEY_check_key = dlsym(handle, "EC_KEY_check_key\x00", false) -+ _mkcgo_EC_KEY_free = dlsym(handle, "EC_KEY_free\x00", false) -+ _mkcgo_EC_KEY_get0_group = dlsym(handle, "EC_KEY_get0_group\x00", false) -+ _mkcgo_EC_KEY_get0_private_key = dlsym(handle, "EC_KEY_get0_private_key\x00", false) -+ _mkcgo_EC_KEY_get0_public_key = dlsym(handle, "EC_KEY_get0_public_key\x00", false) -+ _mkcgo_EC_KEY_new_by_curve_name = dlsym(handle, "EC_KEY_new_by_curve_name\x00", false) -+ _mkcgo_EC_KEY_set_private_key = dlsym(handle, "EC_KEY_set_private_key\x00", false) -+ _mkcgo_EC_KEY_set_public_key = dlsym(handle, "EC_KEY_set_public_key\x00", false) -+ _mkcgo_EC_KEY_set_public_key_affine_coordinates = dlsym(handle, "EC_KEY_set_public_key_affine_coordinates\x00", false) -+ _mkcgo_EC_POINT_get_affine_coordinates_GFp = dlsym(handle, "EC_POINT_get_affine_coordinates_GFp\x00", false) -+ _mkcgo_EVP_CIPHER_get_block_size = dlsym(handle, "EVP_CIPHER_block_size\x00", false) -+ _mkcgo_EVP_MD_get_block_size = dlsym(handle, "EVP_MD_block_size\x00", false) -+ _mkcgo_EVP_MD_get_size = dlsym(handle, "EVP_MD_size\x00", false) -+ _mkcgo_EVP_PKEY_assign = dlsym(handle, "EVP_PKEY_assign\x00", false) -+ _mkcgo_EVP_PKEY_get0_DSA = dlsym(handle, "EVP_PKEY_get0_DSA\x00", false) -+ _mkcgo_EVP_PKEY_get0_EC_KEY = dlsym(handle, "EVP_PKEY_get0_EC_KEY\x00", false) -+ _mkcgo_EVP_PKEY_get1_RSA = dlsym(handle, "EVP_PKEY_get1_RSA\x00", false) -+ _mkcgo_EVP_PKEY_get_bits = dlsym(handle, "EVP_PKEY_bits\x00", false) -+ _mkcgo_EVP_PKEY_get_size = dlsym(handle, "EVP_PKEY_size\x00", false) -+ _mkcgo_EVP_PKEY_set1_EC_KEY = dlsym(handle, "EVP_PKEY_set1_EC_KEY\x00", false) -+ _mkcgo_FIPS_mode = dlsym(handle, "FIPS_mode\x00", false) -+ _mkcgo_FIPS_mode_set = dlsym(handle, "FIPS_mode_set\x00", false) -+ _mkcgo_HMAC_CTX_copy = dlsym(handle, "HMAC_CTX_copy\x00", false) -+ _mkcgo_HMAC_CTX_free = dlsym(handle, "HMAC_CTX_free\x00", false) -+ _mkcgo_HMAC_CTX_new = dlsym(handle, "HMAC_CTX_new\x00", false) -+ _mkcgo_HMAC_Final = dlsym(handle, "HMAC_Final\x00", false) -+ _mkcgo_HMAC_Init_ex = dlsym(handle, "HMAC_Init_ex\x00", false) -+ _mkcgo_HMAC_Update = dlsym(handle, "HMAC_Update\x00", false) -+ _mkcgo_PKCS5_PBKDF2_HMAC = dlsym(handle, "PKCS5_PBKDF2_HMAC\x00", false) -+ _mkcgo_RAND_bytes = dlsym(handle, "RAND_bytes\x00", false) -+ _mkcgo_RSA_free = dlsym(handle, "RSA_free\x00", false) -+ _mkcgo_RSA_get0_crt_params = dlsym(handle, "RSA_get0_crt_params\x00", false) -+ _mkcgo_RSA_get0_factors = dlsym(handle, "RSA_get0_factors\x00", false) -+ _mkcgo_RSA_get0_key = dlsym(handle, "RSA_get0_key\x00", false) -+ _mkcgo_RSA_new = dlsym(handle, "RSA_new\x00", false) -+ _mkcgo_RSA_set0_crt_params = dlsym(handle, "RSA_set0_crt_params\x00", false) -+ _mkcgo_RSA_set0_factors = dlsym(handle, "RSA_set0_factors\x00", false) -+ _mkcgo_RSA_set0_key = dlsym(handle, "RSA_set0_key\x00", false) -+} -+ -+func MkcgoUnload_legacy_1() { -+ _mkcgo_DSA_free = 0 -+ _mkcgo_DSA_generate_key = 0 -+ _mkcgo_DSA_get0_key = 0 -+ _mkcgo_DSA_get0_pqg = 0 -+ _mkcgo_DSA_new = 0 -+ _mkcgo_DSA_set0_key = 0 -+ _mkcgo_DSA_set0_pqg = 0 -+ _mkcgo_EC_KEY_check_key = 0 -+ _mkcgo_EC_KEY_free = 0 -+ _mkcgo_EC_KEY_get0_group = 0 -+ _mkcgo_EC_KEY_get0_private_key = 0 -+ _mkcgo_EC_KEY_get0_public_key = 0 -+ _mkcgo_EC_KEY_new_by_curve_name = 0 -+ _mkcgo_EC_KEY_set_private_key = 0 -+ _mkcgo_EC_KEY_set_public_key = 0 -+ _mkcgo_EC_KEY_set_public_key_affine_coordinates = 0 -+ _mkcgo_EC_POINT_get_affine_coordinates_GFp = 0 -+ _mkcgo_EVP_CIPHER_get_block_size = 0 -+ _mkcgo_EVP_MD_get_block_size = 0 -+ _mkcgo_EVP_MD_get_size = 0 -+ _mkcgo_EVP_PKEY_assign = 0 -+ _mkcgo_EVP_PKEY_get0_DSA = 0 -+ _mkcgo_EVP_PKEY_get0_EC_KEY = 0 -+ _mkcgo_EVP_PKEY_get1_RSA = 0 -+ _mkcgo_EVP_PKEY_get_bits = 0 -+ _mkcgo_EVP_PKEY_get_size = 0 -+ _mkcgo_EVP_PKEY_set1_EC_KEY = 0 -+ _mkcgo_FIPS_mode = 0 -+ _mkcgo_FIPS_mode_set = 0 -+ _mkcgo_HMAC_CTX_copy = 0 -+ _mkcgo_HMAC_CTX_free = 0 -+ _mkcgo_HMAC_CTX_new = 0 -+ _mkcgo_HMAC_Final = 0 -+ _mkcgo_HMAC_Init_ex = 0 -+ _mkcgo_HMAC_Update = 0 -+ _mkcgo_PKCS5_PBKDF2_HMAC = 0 -+ _mkcgo_RAND_bytes = 0 -+ _mkcgo_RSA_free = 0 -+ _mkcgo_RSA_get0_crt_params = 0 -+ _mkcgo_RSA_get0_factors = 0 -+ _mkcgo_RSA_get0_key = 0 -+ _mkcgo_RSA_new = 0 -+ _mkcgo_RSA_set0_crt_params = 0 -+ _mkcgo_RSA_set0_factors = 0 -+ _mkcgo_RSA_set0_key = 0 -+} -+ -+func MkcgoLoad_version(handle unsafe.Pointer) { -+ _mkcgo_OPENSSL_version_major = dlsym(handle, "OPENSSL_version_major\x00", true) -+ _mkcgo_OPENSSL_version_minor = dlsym(handle, "OPENSSL_version_minor\x00", true) -+ _mkcgo_OPENSSL_version_patch = dlsym(handle, "OPENSSL_version_patch\x00", true) -+ _mkcgo_OpenSSL_version_num = dlsym(handle, "OpenSSL_version_num\x00", true) -+} -+ -+func MkcgoUnload_version() { -+ _mkcgo_OPENSSL_version_major = 0 -+ _mkcgo_OPENSSL_version_minor = 0 -+ _mkcgo_OPENSSL_version_patch = 0 -+ _mkcgo_OpenSSL_version_num = 0 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/aes.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/aes.go -new file mode 100644 -index 00000000000000..e487d1f1688cb7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/aes.go -@@ -0,0 +1,158 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto/cipher" -+ "errors" -+) -+ -+//go:generate go run github.com/microsoft/go-crypto-openssl/cmd/genaesmodes -in aes.go -modes CBC,CTR,GCM -out zaes.go -+//go:generate go run github.com/microsoft/go-crypto-openssl/cmd/gentestvectors -out vectors_test.go -+ -+// Steps to support a new AES mode, e.g. `FOO`: -+// 1. Add `FOO` to the list of modes in the `genaesmodes` command. -+// 2. Run `go generate` to update the generated code. -+// 3. Implement the necessary interfaces for the new struct, which will be named `cipherWithFOO`. -+ -+// NewAESCipher creates and returns a new AES cipher.Block. -+// The key argument should be the AES key, either 16, 24, or 32 bytes to select -+// AES-128, AES-192, or AES-256. -+// The returned cipher.Block implements the CBC, CTR, and/or GCM modes if -+// the underlying OpenSSL library supports them. -+func NewAESCipher(key []byte) (cipher.Block, error) { -+ var kind cipherKind -+ switch len(key) * 8 { -+ case 128: -+ kind = cipherAES128 -+ case 192: -+ kind = cipherAES192 -+ case 256: -+ kind = cipherAES256 -+ default: -+ return nil, errors.New("crypto/aes: invalid key size") -+ } -+ c, err := newEVPCipher(key, kind) -+ if err != nil { -+ return nil, err -+ } -+ return newAESBlock(c, kind), nil -+} -+ -+// NewGCMTLS returns a GCM cipher specific to TLS -+// and should not be used for non-TLS purposes. -+func NewGCMTLS(c cipher.Block) (cipher.AEAD, error) { -+ if c, ok := c.(interface { -+ NewGCMTLS() (cipher.AEAD, error) -+ }); ok { -+ return c.NewGCMTLS() -+ } -+ return nil, errors.New("GCM not supported") -+} -+ -+// NewGCMTLS13 returns a GCM cipher specific to TLS 1.3 and should not be used -+// for non-TLS purposes. -+func NewGCMTLS13(c cipher.Block) (cipher.AEAD, error) { -+ if c, ok := c.(interface { -+ NewGCMTLS13() (cipher.AEAD, error) -+ }); ok { -+ return c.NewGCMTLS13() -+ } -+ return nil, errors.New("GCM not supported") -+} -+ -+// aesCipher implements the cipher.Block interface. -+type aesCipher struct { -+ cipher *evpCipher -+} -+ -+func (c aesCipher) BlockSize() int { -+ return c.cipher.blockSize -+} -+ -+func (c aesCipher) Encrypt(dst, src []byte) { -+ if err := c.cipher.encrypt(dst, src); err != nil { -+ // crypto/aes expects that the panic message starts with "crypto/aes: ". -+ panic("crypto/aes: " + err.Error()) -+ } -+} -+ -+func (c aesCipher) Decrypt(dst, src []byte) { -+ if err := c.cipher.decrypt(dst, src); err != nil { -+ // crypto/aes expects that the panic message starts with "crypto/aes: ". -+ panic("crypto/aes: " + err.Error()) -+ } -+} -+ -+// Implement optional interfaces for AES modes. -+ -+func (c cipherWithCBC) NewCBCEncrypter(iv []byte) cipher.BlockMode { -+ return c.cipher.newCBC(iv, cipherOpEncrypt) -+} -+ -+func (c cipherWithCBC) NewFIPSCBCEncrypter(iv []byte) cipher.BlockMode { -+ return c.cipher.newCBC(iv, cipherOpEncrypt) -+} -+ -+func (c cipherWithCBC) NewCBCDecrypter(iv []byte) cipher.BlockMode { -+ return c.cipher.newCBC(iv, cipherOpDecrypt) -+} -+ -+func (c cipherWithCBC) NewFIPSCBCDecrypter(iv []byte) cipher.BlockMode { -+ return c.cipher.newCBC(iv, cipherOpDecrypt) -+} -+ -+func (c cipherWithCTR) NewCTR(iv []byte) cipher.Stream { -+ return c.cipher.newCTR(iv) -+} -+ -+func (c cipherWithCTR) NewFIPSCTR(iv []byte) cipher.Stream { -+ return c.cipher.newCTR(iv) -+} -+ -+func (c cipherWithGCM) NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) { -+ return c.cipher.newGCMChecked(nonceSize, tagSize) -+} -+ -+func (c cipherWithGCM) NewGCMTLS() (cipher.AEAD, error) { -+ return c.cipher.newGCM(cipherGCMTLS12) -+} -+ -+func (c cipherWithGCM) NewGCMTLS13() (cipher.AEAD, error) { -+ return c.cipher.newGCM(cipherGCMTLS13) -+} -+ -+// The following interfaces have been copied out of crypto/aes/modes.go. -+ -+type gcmAble interface { -+ NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) -+} -+ -+type cbcEncAble interface { -+ NewCBCEncrypter(iv []byte) cipher.BlockMode -+} -+ -+type cbcDecAble interface { -+ NewCBCDecrypter(iv []byte) cipher.BlockMode -+} -+ -+type ctrAble interface { -+ NewCTR(iv []byte) cipher.Stream -+} -+ -+// Test that the interfaces are implemented. -+ -+var ( -+ _ cipher.Block = (*aesCipher)(nil) -+ -+ _ cipher.Block = (*cipherWithCBC)(nil) -+ _ cbcEncAble = (*cipherWithCBC)(nil) -+ _ cbcDecAble = (*cipherWithCBC)(nil) -+ -+ _ cipher.Block = (*cipherWithCTR)(nil) -+ _ ctrAble = (*cipherWithCTR)(nil) -+ -+ _ cipher.Block = (*cipherWithGCM)(nil) -+ _ gcmAble = (*cipherWithGCM)(nil) -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/big.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/big.go -new file mode 100644 -index 00000000000000..a5d005176e63f9 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/big.go -@@ -0,0 +1,14 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+// This file does not have build constraints to -+// facilitate using BigInt in Go crypto. -+// Go crypto references BigInt unconditionally, -+// even if it is not finally used. -+ -+// A BigInt is the raw words from a BigInt. -+// This definition allows us to avoid importing math/big. -+// Conversion between BigInt and *big.Int is in openssl/bbig. -+type BigInt []uint -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/chacha20poly1305.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/chacha20poly1305.go -new file mode 100644 -index 00000000000000..410829738931c7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/chacha20poly1305.go -@@ -0,0 +1,152 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ "runtime" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+const ( -+ chacha20Poly1305KeySize = 32 -+ chacha20Poly1305NonceSize = 12 -+ chacha20Poly1305Overhead = 16 -+) -+ -+var supportsChaCha20Poly1305 = sync.OnceValue(func() bool { -+ return loadCipher(cipherChaCha20Poly1305, cipherModeNone) != nil -+}) -+ -+func SupportsChaCha20Poly1305() bool { -+ return supportsChaCha20Poly1305() -+} -+ -+type chacha20poly1305 struct { -+ key [chacha20Poly1305KeySize]byte -+} -+ -+// NewChaCha20Poly1305 returns a ChaCha20-Poly1305 AEAD that uses the given 256-bit key. -+func NewChaCha20Poly1305(key []byte) (cipher.AEAD, error) { -+ if len(key) != chacha20Poly1305KeySize { -+ return nil, errors.New("chacha20poly1305: bad key length") -+ } -+ ret := new(chacha20poly1305) -+ copy(ret.key[:], key) -+ return ret, nil -+} -+ -+func (c *chacha20poly1305) NonceSize() int { -+ return chacha20Poly1305NonceSize -+} -+ -+func (c *chacha20poly1305) Overhead() int { -+ return chacha20Poly1305Overhead -+} -+ -+func (c *chacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { -+ if len(nonce) != chacha20Poly1305NonceSize { -+ panic("chacha20poly1305: bad nonce length passed to Seal") -+ } -+ if uint64(len(plaintext)) > (1<<38)-64 { -+ panic("chacha20poly1305: plaintext too large") -+ } -+ ret, out := sliceForAppend(dst, len(plaintext)+chacha20Poly1305Overhead) -+ if inexactOverlap(out, plaintext) { -+ panic("chacha20poly1305: invalid buffer overlap of output and input") -+ } -+ if anyOverlap(out, additionalData) { -+ panic("chacha20poly1305: invalid buffer overlap of output and additional data") -+ } -+ ctx, err := newCipherCtx(cipherChaCha20Poly1305, cipherModeNone, cipherOpEncrypt, c.key[:], nil) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_CIPHER_CTX_free(ctx) -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_AEAD_SET_IVLEN, int32(len(nonce)), nil); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_EncryptInit_ex(ctx, nil, nil, nil, base(nonce)); err != nil { -+ panic(err) -+ } -+ if len(additionalData) > 0 { -+ var discard int32 -+ if _, err := ossl.EVP_EncryptUpdate(ctx, nil, &discard, additionalData); err != nil { -+ panic(err) -+ } -+ } -+ var outl int32 -+ if len(plaintext) > 0 { -+ if _, err := ossl.EVP_EncryptUpdate(ctx, out, &outl, plaintext); err != nil { -+ panic(err) -+ } -+ } -+ var discard int32 -+ if _, err := ossl.EVP_EncryptFinal_ex(ctx, out[outl:], &discard); err != nil { -+ panic(err) -+ } -+ tag := out[len(out)-chacha20Poly1305Overhead:] -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_AEAD_GET_TAG, 16, unsafe.Pointer(base(tag))); err != nil { -+ panic(err) -+ } -+ runtime.KeepAlive(c) -+ return ret -+} -+ -+func (c *chacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { -+ if len(nonce) != chacha20Poly1305NonceSize { -+ panic("chacha20poly1305: bad nonce length passed to Open") -+ } -+ if len(ciphertext) < 16 { -+ return nil, errOpen -+ } -+ if uint64(len(ciphertext)) > (1<<38)-48 { -+ panic("chacha20poly1305: ciphertext too large") -+ } -+ tag := ciphertext[len(ciphertext)-chacha20Poly1305Overhead:] -+ ciphertext = ciphertext[:len(ciphertext)-chacha20Poly1305Overhead] -+ ret, out := sliceForAppend(dst, len(ciphertext)) -+ if inexactOverlap(out, ciphertext) { -+ panic("chacha20poly1305: invalid buffer overlap of output and input") -+ } -+ if anyOverlap(out, additionalData) { -+ panic("chacha20poly1305: invalid buffer overlap of output and additional data") -+ } -+ ctx, err := newCipherCtx(cipherChaCha20Poly1305, cipherModeNone, cipherOpDecrypt, c.key[:], nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_CIPHER_CTX_free(ctx) -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_AEAD_SET_IVLEN, int32(len(nonce)), nil); err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_AEAD_SET_TAG, 16, unsafe.Pointer(base(tag))); err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EVP_DecryptInit_ex(ctx, nil, nil, nil, base(nonce)); err != nil { -+ return nil, err -+ } -+ if len(additionalData) > 0 { -+ var discard int32 -+ if _, err := ossl.EVP_DecryptUpdate(ctx, nil, &discard, additionalData); err != nil { -+ return nil, err -+ } -+ } -+ var outl int32 -+ if len(ciphertext) > 0 { -+ if _, err := ossl.EVP_DecryptUpdate(ctx, out, &outl, ciphertext); err != nil { -+ return nil, err -+ } -+ } -+ var discard int32 -+ if _, err := ossl.EVP_DecryptFinal_ex(ctx, out[outl:], &discard); err != nil { -+ return nil, errOpen -+ } -+ runtime.KeepAlive(c) -+ return ret[:len(dst)+len(ciphertext)], nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cipher.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cipher.go -new file mode 100644 -index 00000000000000..e69e0bcfe332df ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cipher.go -@@ -0,0 +1,690 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ "runtime" -+ "strconv" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+type cipherKind int8 -+ -+const ( -+ cipherAES128 cipherKind = iota -+ cipherAES192 -+ cipherAES256 -+ cipherDES -+ cipherDES3 -+ cipherRC4 -+ cipherChaCha20Poly1305 -+) -+ -+func (c cipherKind) String() string { -+ switch c { -+ case cipherAES128: -+ return "AES-128" -+ case cipherAES192: -+ return "AES-192" -+ case cipherAES256: -+ return "AES-256" -+ case cipherDES: -+ return "DES" -+ case cipherDES3: -+ return "DES3" -+ case cipherRC4: -+ return "RC4" -+ case cipherChaCha20Poly1305: -+ return "ChaCha20-Poly1305" -+ default: -+ panic("unknown cipher kind: " + strconv.Itoa(int(c))) -+ } -+} -+ -+type cipherMode int8 -+ -+const ( -+ cipherModeNone cipherMode = -1 -+ cipherModeECB cipherMode = iota -+ cipherModeCBC -+ cipherModeCTR -+ cipherModeGCM -+) -+ -+// cipherOp is the allowed operations for a cipher, -+// as documented in [EVP_CipherInit_ex]. -+// -+// [EVP_CipherInit_ex]: https://www.openssl.org/docs/man3.0/man3/EVP_CipherInit_ex.html -+type cipherOp int8 -+ -+const ( -+ cipherOpNone cipherOp = -1 // leaves the value of the previous call, if any. -+ cipherOpDecrypt cipherOp = 0 -+ cipherOpEncrypt cipherOp = 1 -+) -+ -+// cacheCipher is a cache of cipherKind to GO_EVP_CIPHER_PTR. -+var cacheCipher sync.Map -+ -+type cacheCipherKey struct { -+ kind cipherKind -+ mode cipherMode -+} -+ -+// loadCipher returns a cipher object for the given k. -+func loadCipher(k cipherKind, mode cipherMode) (cipher ossl.EVP_CIPHER_PTR) { -+ if v, ok := cacheCipher.Load(cacheCipherKey{k, mode}); ok { -+ return v.(ossl.EVP_CIPHER_PTR) -+ } -+ defer func() { -+ if cipher != nil { -+ if major() != 1 { -+ // On OpenSSL 3, directly operating on a EVP_CIPHER object -+ // not created by EVP_CIPHER has negative performance -+ // implications, as cipher operations will have -+ // to fetch it on every call. Better to just fetch it once here. -+ cipher, _ = ossl.EVP_CIPHER_fetch(nil, ossl.EVP_CIPHER_get0_name(cipher), nil) -+ } -+ } -+ cacheCipher.Store(cacheCipherKey{k, mode}, cipher) -+ }() -+ switch k { -+ case cipherAES128: -+ switch mode { -+ case cipherModeECB: -+ cipher = ossl.EVP_aes_128_ecb() -+ case cipherModeCBC: -+ cipher = ossl.EVP_aes_128_cbc() -+ case cipherModeCTR: -+ cipher = ossl.EVP_aes_128_ctr() -+ case cipherModeGCM: -+ cipher = ossl.EVP_aes_128_gcm() -+ } -+ case cipherAES192: -+ switch mode { -+ case cipherModeECB: -+ cipher = ossl.EVP_aes_192_ecb() -+ case cipherModeCBC: -+ cipher = ossl.EVP_aes_192_cbc() -+ case cipherModeCTR: -+ cipher = ossl.EVP_aes_192_ctr() -+ case cipherModeGCM: -+ cipher = ossl.EVP_aes_192_gcm() -+ } -+ case cipherAES256: -+ switch mode { -+ case cipherModeECB: -+ cipher = ossl.EVP_aes_256_ecb() -+ case cipherModeCBC: -+ cipher = ossl.EVP_aes_256_cbc() -+ case cipherModeCTR: -+ cipher = ossl.EVP_aes_256_ctr() -+ case cipherModeGCM: -+ cipher = ossl.EVP_aes_256_gcm() -+ } -+ case cipherDES: -+ switch mode { -+ case cipherModeECB: -+ cipher = ossl.EVP_des_ecb() -+ case cipherModeCBC: -+ cipher = ossl.EVP_des_cbc() -+ } -+ case cipherDES3: -+ switch mode { -+ case cipherModeECB: -+ cipher = ossl.EVP_des_ede3_ecb() -+ case cipherModeCBC: -+ cipher = ossl.EVP_des_ede3_cbc() -+ } -+ case cipherRC4: -+ cipher = ossl.EVP_rc4() -+ case cipherChaCha20Poly1305: -+ if ossl.EVP_chacha20_poly1305_Available() { -+ cipher = ossl.EVP_chacha20_poly1305() -+ } -+ } -+ return cipher -+} -+ -+type evpCipher struct { -+ key []byte -+ kind cipherKind -+ blockSize int -+} -+ -+func newEVPCipher(key []byte, kind cipherKind) (*evpCipher, error) { -+ cipher := loadCipher(kind, cipherModeECB) -+ if cipher == nil { -+ return nil, errors.New("crypto/cipher: unsupported cipher: " + kind.String()) -+ } -+ c := &evpCipher{key: make([]byte, len(key)), kind: kind} -+ copy(c.key, key) -+ c.blockSize = int(ossl.EVP_CIPHER_get_block_size(cipher)) -+ return c, nil -+} -+ -+func (c *evpCipher) encrypt(dst, src []byte) error { -+ if len(src) < c.blockSize { -+ return errors.New("input not full block") -+ } -+ if len(dst) < c.blockSize { -+ return errors.New("output not full block") -+ } -+ // Only check for overlap between the parts of src and dst that will actually be used. -+ // This matches Go standard library behavior. -+ if inexactOverlap(dst[:c.blockSize], src[:c.blockSize]) { -+ return errors.New("invalid buffer overlap") -+ } -+ enc_ctx, err := newCipherCtx(c.kind, cipherModeECB, cipherOpEncrypt, c.key, nil) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_CIPHER_CTX_free(enc_ctx) -+ -+ var outl int32 -+ if _, err := ossl.EVP_EncryptUpdate(enc_ctx, dst[:c.blockSize], &outl, src[:c.blockSize]); err != nil { -+ return err -+ } -+ runtime.KeepAlive(c) -+ return nil -+} -+ -+func (c *evpCipher) decrypt(dst, src []byte) error { -+ if len(src) < c.blockSize { -+ return errors.New("input not full block") -+ } -+ if len(dst) < c.blockSize { -+ return errors.New("output not full block") -+ } -+ // Only check for overlap between the parts of src and dst that will actually be used. -+ // This matches Go standard library behavior. -+ if inexactOverlap(dst[:c.blockSize], src[:c.blockSize]) { -+ return errors.New("invalid buffer overlap") -+ } -+ dec_ctx, err := newCipherCtx(c.kind, cipherModeECB, cipherOpDecrypt, c.key, nil) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_CIPHER_CTX_free(dec_ctx) -+ -+ if _, err := ossl.EVP_CIPHER_CTX_set_padding(dec_ctx, 0); err != nil { -+ return err -+ } -+ -+ var outl int32 -+ ossl.EVP_DecryptUpdate(dec_ctx, dst[:c.blockSize], &outl, src[:c.blockSize]) -+ runtime.KeepAlive(c) -+ return nil -+} -+ -+type cipherCBC struct { -+ ctx ossl.EVP_CIPHER_CTX_PTR -+ blockSize int -+} -+ -+func (c *cipherCBC) finalize() { -+ ossl.EVP_CIPHER_CTX_free(c.ctx) -+} -+ -+func (x *cipherCBC) BlockSize() int { return x.blockSize } -+ -+func (x *cipherCBC) CryptBlocks(dst, src []byte) { -+ if inexactOverlap(dst, src) { -+ panic("crypto/cipher: invalid buffer overlap") -+ } -+ if len(src)%x.blockSize != 0 { -+ panic("crypto/cipher: input not full blocks") -+ } -+ if len(dst) < len(src) { -+ panic("crypto/cipher: output smaller than input") -+ } -+ if len(src) > 0 { -+ var outl int32 -+ if _, err := ossl.EVP_CipherUpdate(x.ctx, dst, &outl, src); err != nil { -+ panic("crypto/cipher: " + err.Error()) -+ } -+ runtime.KeepAlive(x) -+ } -+} -+ -+func (x *cipherCBC) SetIV(iv []byte) { -+ if len(iv) != x.blockSize { -+ panic("crypto/cipher: incorrect length IV") -+ } -+ if _, err := ossl.EVP_CipherInit_ex(x.ctx, nil, nil, nil, base(iv), int32(cipherOpNone)); err != nil { -+ panic("crypto/cipher: " + err.Error()) -+ } -+} -+ -+func (c *evpCipher) newCBC(iv []byte, op cipherOp) cipher.BlockMode { -+ ctx, err := newCipherCtx(c.kind, cipherModeCBC, op, c.key, iv) -+ if err != nil { -+ panic(err) -+ } -+ x := &cipherCBC{ctx: ctx, blockSize: c.blockSize} -+ runtime.SetFinalizer(x, (*cipherCBC).finalize) -+ if _, err := ossl.EVP_CIPHER_CTX_set_padding(x.ctx, 0); err != nil { -+ panic("crypto/cipher: " + err.Error()) -+ } -+ return x -+} -+ -+type cipherCTR struct { -+ ctx ossl.EVP_CIPHER_CTX_PTR -+} -+ -+func (x *cipherCTR) XORKeyStream(dst, src []byte) { -+ if inexactOverlap(dst, src) { -+ panic("crypto/cipher: invalid buffer overlap") -+ } -+ if len(dst) < len(src) { -+ panic("crypto/cipher: output smaller than input") -+ } -+ if len(src) == 0 { -+ return -+ } -+ var outl int32 -+ if _, err := ossl.EVP_EncryptUpdate(x.ctx, dst, &outl, src); err != nil { -+ panic("crypto/cipher: " + err.Error()) -+ } -+ runtime.KeepAlive(x) -+} -+ -+func (c *evpCipher) newCTR(iv []byte) cipher.Stream { -+ ctx, err := newCipherCtx(c.kind, cipherModeCTR, cipherOpEncrypt, c.key, iv) -+ if err != nil { -+ panic(err) -+ } -+ x := &cipherCTR{ctx: ctx} -+ runtime.SetFinalizer(x, (*cipherCTR).finalize) -+ return x -+} -+ -+func (c *cipherCTR) finalize() { -+ ossl.EVP_CIPHER_CTX_free(c.ctx) -+} -+ -+type cipherGCMTLS uint8 -+ -+const ( -+ cipherGCMTLSNone cipherGCMTLS = iota -+ cipherGCMTLS12 -+ cipherGCMTLS13 -+) -+ -+type cipherGCM struct { -+ c *evpCipher -+ tls cipherGCMTLS -+ // minNextNonce is the minimum value that the next nonce can be, enforced by -+ // all TLS modes. -+ minNextNonce uint64 -+ // mask is the nonce mask used in TLS 1.3 mode. -+ mask uint64 -+ // maskInitialized is true if mask has been initialized. This happens during -+ // the first Seal. The initialized mask may be 0. Used by TLS 1.3 mode. -+ maskInitialized bool -+ blockSize int -+} -+ -+const ( -+ aesBlockSize = 16 -+ gcmTagSize = 16 -+ gcmStandardNonceSize = 12 -+ // TLS 1.2 additional data is constructed as: -+ // -+ // additional_data = seq_num(8) + TLSCompressed.type(1) + TLSCompressed.version(2) + TLSCompressed.length(2); -+ gcmTls12AddSize = 13 -+ // TLS 1.3 additional data is constructed as: -+ // -+ // additional_data = TLSCiphertext.opaque_type(1) || TLSCiphertext.legacy_record_version(2) || TLSCiphertext.length(2) -+ gcmTls13AddSize = 5 -+ gcmTlsFixedNonceSize = 4 -+) -+ -+type noGCM struct { -+ *evpCipher -+} -+ -+func (g *noGCM) BlockSize() int { -+ return g.blockSize -+} -+ -+func (g *noGCM) Encrypt(dst, src []byte) { -+ g.encrypt(dst, src) -+} -+ -+func (g *noGCM) Decrypt(dst, src []byte) { -+ g.decrypt(dst, src) -+} -+ -+func (c *evpCipher) newGCMChecked(nonceSize, tagSize int) (cipher.AEAD, error) { -+ if nonceSize != gcmStandardNonceSize && tagSize != gcmTagSize { -+ return nil, errors.New("crypto/cipher: GCM tag and nonce sizes can't be non-standard at the same time") -+ } -+ // Fall back to standard library for GCM with non-standard nonce or tag size. -+ if nonceSize != gcmStandardNonceSize { -+ return cipher.NewGCMWithNonceSize(&noGCM{c}, nonceSize) -+ } -+ if tagSize != gcmTagSize { -+ return cipher.NewGCMWithTagSize(&noGCM{c}, tagSize) -+ } -+ return c.newGCM(cipherGCMTLSNone) -+} -+ -+func (c *evpCipher) newGCM(tls cipherGCMTLS) (cipher.AEAD, error) { -+ g := &cipherGCM{c: c, tls: tls, blockSize: c.blockSize} -+ return g, nil -+} -+ -+func (g *cipherGCM) NonceSize() int { -+ return gcmStandardNonceSize -+} -+ -+func (g *cipherGCM) Overhead() int { -+ return gcmTagSize -+} -+ -+func (g *cipherGCM) Seal(dst, nonce, plaintext, aad []byte) []byte { -+ if len(nonce) != gcmStandardNonceSize { -+ panic("cipher: incorrect nonce length given to GCM") -+ } -+ if uint64(len(plaintext)) > ((1<<32)-2)*uint64(g.blockSize) || len(plaintext)+gcmTagSize < len(plaintext) { -+ panic("cipher: message too large for GCM") -+ } -+ if len(dst)+len(plaintext)+gcmTagSize < len(dst) { -+ panic("cipher: message too large for buffer") -+ } -+ if g.tls != cipherGCMTLSNone { -+ if g.tls == cipherGCMTLS12 && len(aad) != gcmTls12AddSize { -+ panic("cipher: incorrect additional data length given to GCM TLS 1.2") -+ } else if g.tls == cipherGCMTLS13 && len(aad) != gcmTls13AddSize { -+ panic("cipher: incorrect additional data length given to GCM TLS 1.3") -+ } -+ counter := bigEndianUint64(nonce[gcmTlsFixedNonceSize:]) -+ if g.tls == cipherGCMTLS13 { -+ // In TLS 1.3, the counter in the nonce has a mask and requires -+ // further decoding. -+ if !g.maskInitialized { -+ // According to TLS 1.3 nonce construction details at -+ // https://tools.ietf.org/html/rfc8446#section-5.3: -+ // -+ // the first record transmitted under a particular traffic -+ // key MUST use sequence number 0. -+ // -+ // The padded sequence number is XORed with [a mask]. -+ // -+ // The resulting quantity (of length iv_length) is used as -+ // the per-record nonce. -+ // -+ // We need to convert from the given nonce to sequence numbers -+ // to keep track of minNextNonce and enforce the counter -+ // maximum. On the first call, we know counter^mask is 0^mask, -+ // so we can simply store it as the mask. -+ g.mask = counter -+ g.maskInitialized = true -+ } -+ counter ^= g.mask -+ } -+ // BoringCrypto enforces strictly monotonically increasing explicit nonces -+ // and to fail after 2^64 - 1 keys as per FIPS 140-2 IG A.5, -+ // but OpenSSL does not perform this check, so it is implemented here. -+ const maxUint64 = 1<<64 - 1 -+ if counter == maxUint64 { -+ panic("cipher: nonce counter must be less than 2^64 - 1") -+ } -+ if counter < g.minNextNonce { -+ panic("cipher: nonce counter must be strictly monotonically increasing") -+ } -+ defer func() { -+ g.minNextNonce = counter + 1 -+ }() -+ } -+ -+ // Make room in dst to append plaintext+overhead. -+ ret, out := sliceForAppend(dst, len(plaintext)+gcmTagSize) -+ -+ // Check delayed until now to make sure len(dst) is accurate. -+ if inexactOverlap(out, plaintext) { -+ panic("cipher: invalid buffer overlap") -+ } -+ -+ ctx, err := newCipherCtx(g.c.kind, cipherModeGCM, cipherOpNone, g.c.key, nil) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_CIPHER_CTX_free(ctx) -+ // Encrypt additional data. -+ // When sealing a TLS payload, OpenSSL app sets the additional data using -+ // '_EVP_CIPHER_CTX_ctrl(g.ctx, _EVP_CTRL_AEAD_TLS1_AAD, _EVP_AEAD_TLS1_AAD_LEN, base(additionalData))'. -+ // This makes the explicit nonce component to monotonically increase on every Seal operation without -+ // relying in the explicit nonce being securely set externally, -+ // and it also gives some interesting speed gains. -+ // Unfortunately we can't use it because Go expects AEAD.Seal to honor the provided nonce. -+ if _, err := ossl.EVP_EncryptInit_ex(ctx, nil, nil, nil, base(nonce)); err != nil { -+ panic(err) -+ } -+ var outl, discard int32 -+ if _, err := ossl.EVP_EncryptUpdate(ctx, nil, &discard, sliceNeverNil(aad)); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_EncryptUpdate(ctx, out, &outl, sliceNeverNil(plaintext)); err != nil { -+ panic(err) -+ } -+ if len(plaintext) != int(outl) { -+ panic("cipher: incorrect length returned from GCM EncryptUpdate") -+ } -+ discard = 0 -+ if _, err := ossl.EVP_EncryptFinal_ex(ctx, out[outl:], &discard); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_GCM_GET_TAG, 16, unsafe.Pointer(base(out[outl:]))); err != nil { -+ panic(err) -+ } -+ runtime.KeepAlive(g) -+ return ret -+} -+ -+func (g *cipherGCM) SealWithRandomNonce(out, nonce, plaintext, aad []byte) { -+ if uint64(len(plaintext)) > uint64((1<<32)-2)*aesBlockSize { -+ panic("crypto/cipher: message too large for GCM") -+ } -+ if len(nonce) != gcmStandardNonceSize { -+ panic("crypto/cipher: incorrect nonce length given to GCMWithRandomNonce") -+ } -+ if len(out) != len(plaintext)+gcmTagSize { -+ panic("crypto/cipher: incorrect output length given to GCMWithRandomNonce") -+ } -+ if inexactOverlap(out, plaintext) { -+ panic("crypto/cipher: invalid buffer overlap of output and input") -+ } -+ if anyOverlap(out, aad) { -+ panic("crypto/cipher: invalid buffer overlap of output and additional data") -+ } -+ -+ if g.tls != cipherGCMTLSNone { -+ panic("cipher: encryption failed") -+ } -+ -+ RandReader.Read(nonce) -+ ctx, err := newCipherCtx(g.c.kind, cipherModeGCM, cipherOpNone, g.c.key, nil) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_CIPHER_CTX_free(ctx) -+ -+ if _, err := ossl.EVP_EncryptInit_ex(ctx, nil, nil, nil, base(nonce)); err != nil { -+ panic(err) -+ } -+ var outl, discard int32 -+ if _, err := ossl.EVP_EncryptUpdate(ctx, nil, &discard, sliceNeverNil(aad)); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_EncryptUpdate(ctx, out, &outl, sliceNeverNil(plaintext)); err != nil { -+ panic(err) -+ } -+ if len(plaintext) != int(outl) { -+ panic("cipher: incorrect length returned from GCM EncryptUpdate") -+ } -+ discard = 0 -+ if _, err := ossl.EVP_EncryptFinal_ex(ctx, out[outl:], &discard); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_GCM_GET_TAG, 16, unsafe.Pointer(base(out[outl:]))); err != nil { -+ panic(err) -+ } -+ runtime.KeepAlive(g) -+} -+ -+var errOpen = errors.New("cipher: message authentication failed") -+ -+func (g *cipherGCM) Open(dst, nonce, ciphertext, aad []byte) (_ []byte, err error) { -+ if len(nonce) != gcmStandardNonceSize { -+ panic("cipher: incorrect nonce length given to GCM") -+ } -+ if len(ciphertext) < gcmTagSize { -+ return nil, errOpen -+ } -+ if uint64(len(ciphertext)) > ((1<<32)-2)*uint64(g.blockSize)+gcmTagSize { -+ return nil, errOpen -+ } -+ // BoringCrypto does not do any TLS check when decrypting, neither do we. -+ -+ tag := ciphertext[len(ciphertext)-gcmTagSize:] -+ ciphertext = ciphertext[:len(ciphertext)-gcmTagSize] -+ -+ // Make room in dst to append ciphertext without tag. -+ ret, out := sliceForAppend(dst, len(ciphertext)) -+ -+ // Check delayed until now to make sure len(dst) is accurate. -+ if inexactOverlap(out, ciphertext) { -+ panic("cipher: invalid buffer overlap") -+ } -+ -+ ctx, err := newCipherCtx(g.c.kind, cipherModeGCM, cipherOpNone, g.c.key, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_CIPHER_CTX_free(ctx) -+ -+ defer func() { -+ if err != nil { -+ // Zero output buffer on error. -+ for i := range out { -+ out[i] = 0 -+ } -+ } -+ }() -+ if _, err := ossl.EVP_DecryptInit_ex(ctx, nil, nil, nil, base(nonce)); err != nil { -+ return nil, errOpen -+ } -+ if _, err := ossl.EVP_CIPHER_CTX_ctrl(ctx, ossl.EVP_CTRL_GCM_SET_TAG, 16, unsafe.Pointer(base(tag))); err != nil { -+ return nil, errOpen -+ } -+ var outl, discard int32 -+ if _, err := ossl.EVP_DecryptUpdate(ctx, nil, &discard, sliceNeverNil(aad)); err != nil { -+ return nil, errOpen -+ } -+ if _, err := ossl.EVP_DecryptUpdate(ctx, out, &outl, sliceNeverNil(ciphertext)); err != nil { -+ return nil, errOpen -+ } -+ if len(ciphertext) != int(outl) { -+ return nil, errOpen -+ } -+ discard = 0 -+ if _, err := ossl.EVP_DecryptFinal_ex(ctx, out[outl:], &discard); err != nil { -+ return nil, errOpen -+ } -+ runtime.KeepAlive(g) -+ return ret, nil -+} -+ -+// sliceForAppend is a mirror of crypto/cipher.sliceForAppend. -+func sliceForAppend(in []byte, n int) (head, tail []byte) { -+ if total := len(in) + n; cap(in) >= total { -+ head = in[:total] -+ } else { -+ head = make([]byte, total) -+ copy(head, in) -+ } -+ tail = head[len(in):] -+ return -+} -+ -+func newCipherCtx(kind cipherKind, mode cipherMode, encrypt cipherOp, key, iv []byte) (_ ossl.EVP_CIPHER_CTX_PTR, err error) { -+ cipher := loadCipher(kind, mode) -+ if cipher == nil { -+ panic("crypto/cipher: unsupported cipher: " + kind.String()) -+ } -+ params, err := cipherInitParams(encrypt) -+ if err != nil { -+ return nil, err -+ } -+ ctx, err := ossl.EVP_CIPHER_CTX_new() -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if err != nil { -+ ossl.EVP_CIPHER_CTX_free(ctx) -+ } -+ }() -+ if kind == cipherRC4 { -+ // RC4 cipher supports a variable key length. -+ // We need to set the key length before setting the key, -+ // and to do so we need to have an initialized cipher ctx. -+ if _, err := ossl.EVP_CipherInit_ex(ctx, cipher, nil, nil, nil, int32(encrypt)); err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EVP_CIPHER_CTX_set_key_length(ctx, int32(len(key))); err != nil { -+ return nil, err -+ } -+ // Pass nil to the next call to EVP_CipherInit_ex to avoid resetting ctx's cipher. -+ cipher = nil -+ } -+ if params != nil { -+ _, err = ossl.EVP_CipherInit_ex2(ctx, cipher, base(key), base(iv), int32(encrypt), params) -+ } else { -+ _, err = ossl.EVP_CipherInit_ex(ctx, cipher, nil, base(key), base(iv), int32(encrypt)) -+ } -+ if err != nil { -+ return nil, err -+ } -+ return ctx, nil -+} -+ -+var cipherEncryptCheckParams = sync.OnceValues(func() (ossl.OSSL_PARAM_PTR, error) { -+ bld := newParamBuilder() -+ bld.addInt32(_OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK, 0) -+ return bld.build() -+}) -+ -+func cipherInitParams(encrypt cipherOp) (ossl.OSSL_PARAM_PTR, error) { -+ if encrypt != cipherOpEncrypt || major() == 1 { -+ return nil, nil -+ } -+ // The returned params are cached for the lifetime of the process and must not be freed by callers. -+ // Setting the FIPS encrypt check to 0 allows encryption to proceed even if the key is not approved for use in FIPS mode. -+ // This check is done at the Go crypto level. -+ return cipherEncryptCheckParams() -+} -+ -+// The following two functions are a mirror of golang.org/x/crypto/internal/subtle. -+ -+func anyOverlap(x, y []byte) bool { -+ return len(x) > 0 && len(y) > 0 && -+ uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) && -+ uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1])) -+} -+ -+func inexactOverlap(x, y []byte) bool { -+ if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] { -+ return false -+ } -+ return anyOverlap(x, y) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/const.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/const.go -new file mode 100644 -index 00000000000000..c84521b3aa7d34 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/const.go -@@ -0,0 +1,115 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import "unsafe" -+ -+// cString is a null-terminated string, -+// akin to C's char*. -+type cString string -+ -+// str returns the string value. -+func (s cString) str() string { -+ return string(s) -+} -+ -+// ptr returns a pointer to the string data. -+// It panics if the string is not null-terminated. -+// -+// The memory pointed to by the returned pointer should -+// not be modified and it must only be passed to -+// "const char*" parameters. Any attempt to modify it -+// will result in a runtime panic, as Go strings are -+// allocated in read-only memory. -+func (s cString) ptr() *byte { -+ if len(s) == 0 { -+ return nil -+ } -+ if s[len(s)-1] != 0 { -+ panic("must be null-terminated") -+ } -+ return unsafe.StringData(string(s)) -+} -+ -+const ( //checkheader:ignore -+ // Key types -+ _KeyTypeRSA cString = "RSA\x00" -+ _KeyTypeEC cString = "EC\x00" -+ _KeyTypeED25519 cString = "ED25519\x00" -+ _KeyTypeX25519 cString = "X25519\x00" -+ _KeyTypeMLKEM768 cString = "ML-KEM-768\x00" -+ _KeyTypeMLKEM1024 cString = "ML-KEM-1024\x00" -+ _KeyTypeMLDSA44 cString = "ML-DSA-44\x00" -+ _KeyTypeMLDSA65 cString = "ML-DSA-65\x00" -+ _KeyTypeMLDSA87 cString = "ML-DSA-87\x00" -+ _KeyTypeChacha20Poly1305 cString = "CHACHA20-POLY1305\x00" -+ -+ // Digest names -+ _DigestNameSHAKE128 cString = "SHAKE-128\x00" -+ _DigestNameSHAKE256 cString = "SHAKE-256\x00" -+ -+ // KDF names -+ _OSSL_KDF_NAME_HKDF cString = "HKDF\x00" -+ _OSSL_KDF_NAME_PBKDF2 cString = "PBKDF2\x00" -+ _OSSL_KDF_NAME_TLS1_PRF cString = "TLS1-PRF\x00" -+ _OSSL_KDF_NAME_TLS13_KDF cString = "TLS13-KDF\x00" -+ _OSSL_MAC_NAME_HMAC cString = "HMAC\x00" -+ -+ // KDF parameters -+ _OSSL_KDF_PARAM_DIGEST cString = "digest\x00" -+ _OSSL_KDF_PARAM_SECRET cString = "secret\x00" -+ _OSSL_KDF_PARAM_SEED cString = "seed\x00" -+ _OSSL_KDF_PARAM_KEY cString = "key\x00" -+ _OSSL_KDF_PARAM_PASSWORD cString = "pass\x00" -+ _OSSL_KDF_PARAM_ITER cString = "iter\x00" -+ _OSSL_KDF_PARAM_PKCS5 cString = "pkcs5\x00" -+ _OSSL_KDF_PARAM_INFO cString = "info\x00" -+ _OSSL_KDF_PARAM_SALT cString = "salt\x00" -+ _OSSL_KDF_PARAM_MODE cString = "mode\x00" -+ -+ // KDF FIPS parameters -+ _OSSL_KDF_PARAM_FIPS_KEY_CHECK cString = "key-check\x00" -+ _OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK cString = "encrypt-check\x00" -+ -+ // TLS3-KDF parameters -+ _OSSL_KDF_PARAM_PREFIX cString = "prefix\x00" -+ _OSSL_KDF_PARAM_LABEL cString = "label\x00" -+ _OSSL_KDF_PARAM_DATA cString = "data\x00" -+ -+ // PKEY parameters -+ _OSSL_PKEY_PARAM_PUB_KEY cString = "pub\x00" -+ _OSSL_PKEY_PARAM_PRIV_KEY cString = "priv\x00" -+ _OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY cString = "encoded-pub-key\x00" -+ _OSSL_PKEY_PARAM_GROUP_NAME cString = "group\x00" -+ _OSSL_PKEY_PARAM_EC_PUB_X cString = "qx\x00" -+ _OSSL_PKEY_PARAM_EC_PUB_Y cString = "qy\x00" -+ _OSSL_PKEY_PARAM_FFC_PBITS cString = "pbits\x00" -+ _OSSL_PKEY_PARAM_FFC_QBITS cString = "qbits\x00" -+ _OSSL_PKEY_PARAM_RSA_N cString = "n\x00" -+ _OSSL_PKEY_PARAM_RSA_E cString = "e\x00" -+ _OSSL_PKEY_PARAM_RSA_D cString = "d\x00" -+ _OSSL_PKEY_PARAM_FFC_P cString = "p\x00" -+ _OSSL_PKEY_PARAM_FFC_Q cString = "q\x00" -+ _OSSL_PKEY_PARAM_FFC_G cString = "g\x00" -+ _OSSL_PKEY_PARAM_RSA_FACTOR1 cString = "rsa-factor1\x00" -+ _OSSL_PKEY_PARAM_RSA_FACTOR2 cString = "rsa-factor2\x00" -+ _OSSL_PKEY_PARAM_RSA_EXPONENT1 cString = "rsa-exponent1\x00" -+ _OSSL_PKEY_PARAM_RSA_EXPONENT2 cString = "rsa-exponent2\x00" -+ _OSSL_PKEY_PARAM_RSA_COEFFICIENT1 cString = "rsa-coefficient1\x00" -+ _OSSL_PKEY_PARAM_ML_KEM_SEED cString = "seed\x00" -+ _OSSL_PKEY_PARAM_ML_DSA_SEED cString = "seed\x00" -+ -+ // Signature parameters -+ _OSSL_SIGNATURE_PARAM_DIGEST cString = "digest\x00" -+ _OSSL_SIGNATURE_PARAM_PAD_MODE cString = "pad-mode\x00" -+ _OSSL_SIGNATURE_PARAM_PSS_SALTLEN cString = "saltlen\x00" -+ _OSSL_SIGNATURE_PARAM_CONTEXT_STRING cString = "context-string\x00" -+ _OSSL_SIGNATURE_PARAM_MU cString = "mu\x00" -+ _OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK cString = "rsa-pss-saltlen-check\x00" -+ _OSSL_PKEY_RSA_PAD_MODE_PSS cString = "pss\x00" -+ -+ // MAC parameters -+ _OSSL_MAC_PARAM_DIGEST cString = "digest\x00" -+ _OSSL_MAC_PARAM_FIPS_KEY_CHECK cString = "key-check\x00" -+) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cshake.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cshake.go -new file mode 100644 -index 00000000000000..ece9605829f12d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/cshake.go -@@ -0,0 +1,256 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "runtime" -+ "strconv" -+ "sync" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// shakeOneShot applies the SHAKE extendable output function to data and -+// writes the output to out. -+func shakeOneShot(secuirtyBits int, data []byte, out []byte) { -+ // Can't use EVP_Digest because it doesn't support output lengths -+ // larger than the block size, while crypto/sha3 supports any length. -+ alg := loadShake(secuirtyBits) -+ if alg == nil { -+ panic("openssl: unsupported SHAKE" + strconv.Itoa(secuirtyBits) + " function") -+ } -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if _, err := ossl.EVP_DigestInit_ex(ctx, alg.md, nil); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_DigestUpdate(ctx, data); err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_DigestFinalXOF(ctx, out); err != nil { -+ panic(err) -+ } -+} -+ -+// SumSHAKE128 applies the SHAKE128 extendable output function to data and -+// returns an output of the given length in bytes. -+func SumSHAKE128(data []byte, length int) []byte { -+ out := make([]byte, length) -+ shakeOneShot(128, data, out) -+ return out -+} -+ -+// SumSHAKE256 applies the SHAKE256 extendable output function to data and -+// returns an output of the given length in bytes. -+func SumSHAKE256(data []byte, length int) []byte { -+ out := make([]byte, length) -+ shakeOneShot(256, data, out) -+ return out -+} -+ -+var shakeSupported sync.Map -+ -+var hasDigestSqueeze = sync.OnceValue(ossl.EVP_DigestSqueeze_Available) -+ -+// SupportsSHAKE returns true if the SHAKE extendable output functions -+// with the given securityBits are supported. -+func SupportsSHAKE(securityBits int) bool { -+ if !hasDigestSqueeze() { -+ // SHAKE MD's are supported since OpenSSL 1.1.1, but -+ // EVP_DigestSqueeze (added in OpenSSL 3.3) is required to -+ // implement [sha3.SHAKE]'s streaming Read API. -+ return false -+ } -+ if v, ok := shakeSupported.Load(securityBits); ok { -+ return v.(bool) -+ } -+ alg := loadShake(securityBits) -+ if alg == nil { -+ shakeSupported.Store(securityBits, false) -+ return false -+ } -+ // EVP_MD objects can be non-nil but the underlying provider may not -+ // support EVP_DigestSqueeze. We need to test it. -+ var supported bool -+ if ctx, _ := ossl.EVP_MD_CTX_new(); ctx != nil { -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if _, err := ossl.EVP_DigestInit_ex(ctx, alg.md, nil); err == nil { -+ var tmp [1]byte -+ _, err := ossl.EVP_DigestSqueeze(ctx, tmp[:]) -+ supported = err == nil -+ } -+ } -+ shakeSupported.Store(securityBits, supported) -+ return supported -+} -+ -+// SupportsCSHAKE returns true if the CSHAKE extendable output functions -+// with the given securityBits are supported. -+func SupportsCSHAKE(securityBits int) bool { -+ // OpenSSL tracker issue https://github.com/openssl/openssl/issues/28358 -+ return false -+} -+ -+// SHAKE is an instance of a SHAKE extendable output function. -+type SHAKE struct { -+ alg *shakeAlgorithm -+ ctx ossl.EVP_MD_CTX_PTR -+ lastXofLen int -+} -+ -+// NewSHAKE128 creates a new SHAKE128 XOF. -+func NewSHAKE128() *SHAKE { -+ return newSHAKE(128) -+} -+ -+// NewSHAKE256 creates a new SHAKE256 XOF. -+func NewSHAKE256() *SHAKE { -+ return newSHAKE(256) -+} -+ -+// NewCSHAKE128 creates a new cSHAKE128 XOF. -+// -+// N is used to define functions based on cSHAKE, it can be empty when plain -+// cSHAKE is desired. S is a customization byte string used for domain -+// separation. When N and S are both empty, this is equivalent to NewSHAKE128. -+func NewCSHAKE128(N, S []byte) *SHAKE { -+ if len(N) == 0 && len(S) == 0 { -+ return NewSHAKE128() -+ } -+ return nil -+} -+ -+// NewCSHAKE256 creates a new cSHAKE256 XOF. -+// -+// N is used to define functions based on cSHAKE, it can be empty when plain -+// cSHAKE is desired. S is a customization byte string used for domain -+// separation. When N and S are both empty, this is equivalent to NewSHAKE256. -+func NewCSHAKE256(N, S []byte) *SHAKE { -+ if len(N) == 0 && len(S) == 0 { -+ return NewSHAKE256() -+ } -+ return nil -+} -+ -+func newSHAKE(securityBits int) *SHAKE { -+ alg := loadShake(securityBits) -+ if alg == nil { -+ panic("openssl: unsupported SHAKE" + strconv.Itoa(securityBits) + " function") -+ } -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_DigestInit_ex(ctx, alg.md, nil); err != nil { -+ ossl.EVP_MD_CTX_free(ctx) -+ panic(err) -+ } -+ s := &SHAKE{alg: alg, ctx: ctx} -+ runtime.SetFinalizer(s, (*SHAKE).finalize) -+ return s -+} -+ -+func (s *SHAKE) finalize() { -+ ossl.EVP_MD_CTX_free(s.ctx) -+} -+ -+// Write absorbs more data into the XOF's state. -+// -+// It panics if any output has already been read. -+func (s *SHAKE) Write(p []byte) (n int, err error) { -+ defer runtime.KeepAlive(s) -+ if len(p) == 0 { -+ return 0, nil -+ } -+ if _, err := ossl.EVP_DigestUpdate(s.ctx, p); err != nil { -+ panic(err) -+ } -+ return len(p), nil -+} -+ -+// Read squeezes more output from the XOF. -+// -+// Any call to Write after a call to Read will panic. -+func (s *SHAKE) Read(p []byte) (n int, err error) { -+ defer runtime.KeepAlive(s) -+ if len(p) == 0 { -+ return 0, nil -+ } -+ if len(p) != s.lastXofLen { -+ if _, err := ossl.EVP_MD_CTX_ctrl(s.ctx, ossl.EVP_MD_CTRL_XOF_LEN, int32(len(p)), nil); err != nil { -+ panic(err) -+ } -+ s.lastXofLen = len(p) -+ } -+ if _, err := ossl.EVP_DigestSqueeze(s.ctx, p); err != nil { -+ panic(err) -+ } -+ return len(p), nil -+} -+ -+// Reset resets the XOF to its initial state. -+func (s *SHAKE) Reset() { -+ defer runtime.KeepAlive(s) -+ if _, err := ossl.EVP_DigestInit_ex(s.ctx, nil, nil); err != nil { -+ panic(err) -+ } -+ s.lastXofLen = 0 -+} -+ -+// BlockSize returns the rate of the XOF. -+func (s *SHAKE) BlockSize() int { -+ return s.alg.blockSize -+} -+ -+func (s *SHAKE) MarshalBinary() ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (s *SHAKE) AppendBinary(b []byte) ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (s *SHAKE) UnmarshalBinary(data []byte) error { -+ return errMarshallUnsupported{} -+} -+ -+type shakeAlgorithm struct { -+ md ossl.EVP_MD_PTR -+ blockSize int -+} -+ -+var cacheSHAKE sync.Map -+ -+// loadShake converts a crypto.Hash to a EVP_MD. -+func loadShake(securityBits int) (alg *shakeAlgorithm) { -+ if v, ok := cacheSHAKE.Load(securityBits); ok { -+ return v.(*shakeAlgorithm) -+ } -+ defer func() { -+ cacheSHAKE.Store(securityBits, alg) -+ }() -+ -+ var name cString -+ switch securityBits { -+ case 128: -+ name = _DigestNameSHAKE128 -+ case 256: -+ name = _DigestNameSHAKE256 -+ default: -+ return nil -+ } -+ -+ md, err := ossl.EVP_MD_fetch(nil, name.ptr(), nil) -+ if err != nil || md == nil { -+ return nil -+ } -+ -+ alg = new(shakeAlgorithm) -+ alg.md = md -+ alg.blockSize = int(ossl.EVP_MD_get_block_size(md)) -+ return alg -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/des.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/des.go -new file mode 100644 -index 00000000000000..6ae4a6372f8d08 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/des.go -@@ -0,0 +1,121 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-openssl/osslsetup" -+) -+ -+// SupportsDESCipher returns true if NewDESCipher is supported, -+// which uses ECB mode. -+// If CBC is also supported, then the returned cipher.Block -+// will also implement NewCBCEncrypter and NewCBCDecrypter. -+func SupportsDESCipher() bool { -+ switch major() { -+ case 1: -+ // DES is not part of the OpenSSL 1.x FIPS module. -+ return !osslsetup.FIPS() && loadCipher(cipherDES, cipherModeECB) != nil -+ default: -+ // On OpenSSL 3+ availability is decided by the algorithm probe: -+ // EVP_CIPHER_fetch returns nil unless the legacy provider is loaded. -+ return loadCipher(cipherDES, cipherModeECB) != nil -+ } -+} -+ -+// SupportsTripleDESCipher returns true if NewTripleDESCipher is supported, -+// which uses ECB mode. -+// If CBC is also supported, then the returned cipher.Block -+// will also implement NewCBCEncrypter and NewCBCDecrypter. -+func SupportsTripleDESCipher() bool { -+ // Should always be true for stock OpenSSL, -+ // even when using the FIPS provider. -+ return loadCipher(cipherDES3, cipherModeECB) != nil -+} -+ -+func NewDESCipher(key []byte) (cipher.Block, error) { -+ if len(key) != 8 { -+ return nil, errors.New("crypto/des: invalid key size") -+ } -+ return newDESCipher(key, cipherDES) -+} -+ -+func NewTripleDESCipher(key []byte) (cipher.Block, error) { -+ if len(key) != 24 { -+ return nil, errors.New("crypto/des: invalid key size") -+ } -+ return newDESCipher(key, cipherDES3) -+} -+ -+func newDESCipher(key []byte, kind cipherKind) (cipher.Block, error) { -+ c, err := newEVPCipher(key, kind) -+ if err != nil { -+ return nil, err -+ } -+ if loadCipher(kind, cipherModeCBC) == nil { -+ return &desCipherWithoutCBC{c}, nil -+ } -+ return &desCipher{c}, nil -+} -+ -+type desExtraModes interface { -+ NewCBCEncrypter(iv []byte) cipher.BlockMode -+ NewCBCDecrypter(iv []byte) cipher.BlockMode -+} -+ -+var _ desExtraModes = (*desCipher)(nil) -+ -+type desCipher struct { -+ *evpCipher -+} -+ -+func (c *desCipher) BlockSize() int { -+ return c.blockSize -+} -+ -+func (c *desCipher) Encrypt(dst, src []byte) { -+ if err := c.encrypt(dst, src); err != nil { -+ // crypto/des expects that the panic message starts with "crypto/des: ". -+ panic("crypto/des: " + err.Error()) -+ } -+} -+ -+func (c *desCipher) Decrypt(dst, src []byte) { -+ if err := c.decrypt(dst, src); err != nil { -+ // crypto/des expects that the panic message starts with "crypto/des: ". -+ panic("crypto/des: " + err.Error()) -+ } -+} -+ -+func (c *desCipher) NewCBCEncrypter(iv []byte) cipher.BlockMode { -+ return c.newCBC(iv, cipherOpEncrypt) -+} -+ -+func (c *desCipher) NewCBCDecrypter(iv []byte) cipher.BlockMode { -+ return c.newCBC(iv, cipherOpDecrypt) -+} -+ -+type desCipherWithoutCBC struct { -+ *evpCipher -+} -+ -+func (c *desCipherWithoutCBC) BlockSize() int { -+ return c.blockSize -+} -+ -+func (c *desCipherWithoutCBC) Encrypt(dst, src []byte) { -+ if err := c.encrypt(dst, src); err != nil { -+ // crypto/des expects that the panic message starts with "crypto/des: ". -+ panic("crypto/des: " + err.Error()) -+ } -+} -+ -+func (c *desCipherWithoutCBC) Decrypt(dst, src []byte) { -+ if err := c.decrypt(dst, src); err != nil { -+ // crypto/des expects that the panic message starts with "crypto/des: ". -+ panic("crypto/des: " + err.Error()) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/dsa.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/dsa.go -new file mode 100644 -index 00000000000000..b2c643ab34a0c1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/dsa.go -@@ -0,0 +1,296 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// SupportsDSA returns true if the OpenSSL library supports DSA. -+func SupportsDSA() bool { -+ ctx, err := ossl.EVP_PKEY_CTX_new_id(ossl.EVP_PKEY_DSA, nil) -+ if err != nil { -+ return false -+ } -+ ossl.EVP_PKEY_CTX_free(ctx) -+ return true -+} -+ -+// DSAParameters contains the DSA parameters. -+type DSAParameters struct { -+ P, Q, G BigInt -+} -+ -+// PrivateKeyDSA represents a DSA private key. -+type PrivateKeyDSA struct { -+ DSAParameters -+ X, Y BigInt -+ -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func (k *PrivateKeyDSA) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PrivateKeyDSA) withKey(f func(ossl.EVP_PKEY_PTR) error) error { -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+// PublicKeyDSA represents a DSA public key. -+type PublicKeyDSA struct { -+ DSAParameters -+ Y BigInt -+ -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func (k *PublicKeyDSA) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PublicKeyDSA) withKey(f func(ossl.EVP_PKEY_PTR) error) error { -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+// GenerateParametersDSA generates a set of DSA parameters. -+func GenerateParametersDSA(l, n int) (DSAParameters, error) { -+ // The DSA parameters are generated by creating a new DSA key and -+ // extracting the domain parameters from it. -+ -+ // Generate a new DSA key context and set the known parameters. -+ ctx, err := ossl.EVP_PKEY_CTX_new_id(ossl.EVP_PKEY_DSA, nil) -+ if err != nil { -+ return DSAParameters{}, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_paramgen_init(ctx); err != nil { -+ return DSAParameters{}, err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_DSA, -1, ossl.EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, int32(l), nil); err != nil { -+ return DSAParameters{}, err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_DSA, -1, ossl.EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, int32(n), nil); err != nil { -+ return DSAParameters{}, err -+ } -+ var pkey ossl.EVP_PKEY_PTR -+ if _, err := ossl.EVP_PKEY_paramgen(ctx, &pkey); err != nil { -+ return DSAParameters{}, err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ // Extract the domain parameters from the generated key. -+ var p, q, g ossl.BIGNUM_PTR -+ switch major() { -+ case 1: -+ dsa := getDSA(pkey) -+ ossl.DSA_get0_pqg(dsa, &p, &q, &g) -+ default: -+ defer func() { -+ ossl.BN_free(p) -+ ossl.BN_free(q) -+ ossl.BN_free(g) -+ }() -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_FFC_P.ptr(), &p); err != nil { -+ return DSAParameters{}, err -+ } -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_FFC_Q.ptr(), &q); err != nil { -+ return DSAParameters{}, err -+ } -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_FFC_G.ptr(), &g); err != nil { -+ return DSAParameters{}, err -+ } -+ } -+ -+ return DSAParameters{ -+ P: bnToBig(p), -+ Q: bnToBig(q), -+ G: bnToBig(g), -+ }, nil -+} -+ -+// NewPrivateKeyDSA creates a new DSA private key from the given parameters. -+func NewPrivateKeyDSA(params DSAParameters, x, y BigInt) (*PrivateKeyDSA, error) { -+ if x == nil || y == nil { -+ panic("x and y must not be nil") -+ } -+ pkey, err := newDSA(params, x, y) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyDSA{params, x, y, pkey} -+ runtime.SetFinalizer(k, (*PrivateKeyDSA).finalize) -+ return k, nil -+} -+ -+// NewPublicKeyDSA creates a new DSA public key from the given parameters. -+func NewPublicKeyDSA(params DSAParameters, y BigInt) (*PublicKeyDSA, error) { -+ if y == nil { -+ panic("y must not be nil") -+ } -+ pkey, err := newDSA(params, nil, y) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyDSA{params, y, pkey} -+ runtime.SetFinalizer(k, (*PublicKeyDSA).finalize) -+ return k, nil -+} -+ -+// GenerateKeyDSA generates a new private DSA key using the given parameters. -+func GenerateKeyDSA(params DSAParameters) (x, y BigInt, err error) { -+ pkey, err := newDSA(params, nil, nil) -+ if err != nil { -+ return nil, nil, err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ var bx, by ossl.BIGNUM_PTR -+ switch major() { -+ case 1: -+ dsa := getDSA(pkey) -+ ossl.DSA_get0_key(dsa, &by, &bx) -+ default: -+ defer func() { -+ ossl.BN_clear_free(bx) -+ ossl.BN_free(by) -+ }() -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_PUB_KEY.ptr(), &by); err != nil { -+ return nil, nil, err -+ } -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_PRIV_KEY.ptr(), &bx); err != nil { -+ return nil, nil, err -+ } -+ } -+ return bnToBig(bx), bnToBig(by), nil -+} -+ -+// SignDSA signs a hash (which should be the result of hashing a larger message). -+func SignDSA(priv *PrivateKeyDSA, hash []byte) ([]byte, error) { -+ return evpSign(priv.withKey, 0, 0, 0, hash) -+} -+ -+// VerifyDSA verifiessig using the public key, pub. -+func VerifyDSA(pub *PublicKeyDSA, hash []byte, sig []byte) bool { -+ return evpVerify(pub.withKey, 0, 0, 0, sig, hash) == nil -+} -+ -+func newDSA(params DSAParameters, x, y BigInt) (ossl.EVP_PKEY_PTR, error) { -+ switch major() { -+ case 1: -+ return newDSA1(params, x, y) -+ default: -+ return newDSA3(params, x, y) -+ } -+} -+ -+func newDSA1(params DSAParameters, x, y BigInt) (pkey ossl.EVP_PKEY_PTR, err error) { -+ dsa, err := ossl.DSA_new() -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if pkey == nil { -+ ossl.DSA_free(dsa) -+ } -+ }() -+ // No need to check for errors here, DSA_set0_* functions will fail -+ // if the BNs are NULL and we will free non-NULL BNs in the error handling. -+ p, _ := bigToBN(params.P) -+ q, _ := bigToBN(params.Q) -+ g, _ := bigToBN(params.G) -+ if _, err := ossl.DSA_set0_pqg(dsa, p, q, g); err != nil { -+ ossl.BN_free(p) -+ ossl.BN_free(q) -+ ossl.BN_free(g) -+ return nil, err -+ } -+ if y != nil { -+ pub, _ := bigToBN(y) -+ priv, _ := bigToBN(x) -+ if _, err := ossl.DSA_set0_key(dsa, pub, priv); err != nil { -+ ossl.BN_free(pub) -+ ossl.BN_clear_free(priv) -+ return nil, err -+ } -+ } else { -+ if _, err := ossl.DSA_generate_key(dsa); err != nil { -+ return nil, err -+ } -+ } -+ pkey, err = ossl.EVP_PKEY_new() -+ if err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EVP_PKEY_assign(pkey, ossl.EVP_PKEY_DSA, unsafe.Pointer(dsa)); err != nil { -+ ossl.EVP_PKEY_free(pkey) -+ return nil, err -+ } -+ return pkey, nil -+} -+ -+func newDSA3(params DSAParameters, x, y BigInt) (ossl.EVP_PKEY_PTR, error) { -+ bld := newParamBuilder() -+ defer bld.finalize() -+ -+ bld.addBigInt(_OSSL_PKEY_PARAM_FFC_P, params.P, false) -+ bld.addBigInt(_OSSL_PKEY_PARAM_FFC_Q, params.Q, false) -+ bld.addBigInt(_OSSL_PKEY_PARAM_FFC_G, params.G, false) -+ selection := int32(ossl.EVP_PKEY_KEYPAIR) -+ if y != nil { -+ bld.addBigInt(_OSSL_PKEY_PARAM_PUB_KEY, y, false) -+ if x == nil { -+ selection = ossl.EVP_PKEY_PUBLIC_KEY -+ } -+ } -+ if x != nil { -+ bld.addBigInt(_OSSL_PKEY_PARAM_PRIV_KEY, x, true) -+ } -+ bldparams, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(bldparams) -+ pkey, err := newEvpFromParams(ossl.EVP_PKEY_DSA, selection, bldparams) -+ if err != nil { -+ return nil, err -+ } -+ if y != nil { -+ return pkey, nil -+ } -+ // pkey doesn't contain the public component, but the crypto/dsa package -+ // expects it to be always there. Generate a new key using pkey as domain -+ // parameters placeholder. -+ defer ossl.EVP_PKEY_free(pkey) -+ ctx, err := ossl.EVP_PKEY_CTX_new_from_pkey(nil, pkey, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_keygen_init(ctx); err != nil { -+ return nil, err -+ } -+ var gkey ossl.EVP_PKEY_PTR -+ if _, err := ossl.EVP_PKEY_keygen(ctx, &gkey); err != nil { -+ return nil, err -+ } -+ return gkey, nil -+} -+ -+// getDSA returns the DSA from pkey. -+// If pkey does not contain an DSA it panics. -+// The returned key should not be freed. -+func getDSA(pkey ossl.EVP_PKEY_PTR) ossl.DSA_PTR { -+ key, err := ossl.EVP_PKEY_get0_DSA(pkey) -+ if err != nil { -+ panic(err) -+ } -+ return key -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ec.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ec.go -new file mode 100644 -index 00000000000000..d871a04b37942b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ec.go -@@ -0,0 +1,132 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "errors" -+ "strconv" -+ "sync" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+func SupportsCurve(curve string) bool { -+ switch curve { -+ case "P-224", "P-256", "P-384", "P-521": -+ return true -+ case "X25519": -+ return supportsX25519() -+ default: -+ return false -+ } -+} -+ -+var supportsX25519 = sync.OnceValue(func() bool { -+ ctx, _ := ossl.EVP_PKEY_CTX_new_id(ossl.EVP_PKEY_X25519, nil) -+ if ctx != nil { -+ ossl.EVP_PKEY_CTX_free(ctx) -+ return true -+ } -+ return false -+}) -+ -+func curveID(curve string) int32 { -+ switch curve { -+ case "P-224": -+ return ossl.EVP_PKEY_EC -+ case "P-256": -+ return ossl.EVP_PKEY_EC -+ case "P-384": -+ return ossl.EVP_PKEY_EC -+ case "P-521": -+ return ossl.EVP_PKEY_EC -+ case "X25519": -+ return ossl.EVP_PKEY_X25519 -+ default: -+ panic("openssl: unknown curve " + curve) -+ } -+} -+ -+func curveNID(curve string) int32 { -+ switch curve { -+ case "P-224": -+ return ossl.NID_secp224r1 -+ case "P-256": -+ return ossl.NID_X9_62_prime256v1 -+ case "P-384": -+ return ossl.NID_secp384r1 -+ case "P-521": -+ return ossl.NID_secp521r1 -+ default: -+ panic("openssl: unknown curve " + curve) -+ } -+} -+ -+// curveSize returns the size of the curve in bytes. -+func curveSize(curve string) int { -+ switch curve { -+ case "P-224": -+ return 224 / 8 -+ case "P-256": -+ return 256 / 8 -+ case "P-384": -+ return 384 / 8 -+ case "P-521": -+ return (521 + 7) / 8 -+ default: -+ panic("openssl: unknown curve " + curve) -+ } -+} -+ -+// encodeEcPoint encodes pt. -+func encodeEcPoint(group ossl.EC_GROUP_PTR, pt ossl.EC_POINT_PTR) ([]byte, error) { -+ // Get encoded point size. -+ n, err := ossl.EC_POINT_point2oct(group, pt, ossl.POINT_CONVERSION_UNCOMPRESSED, nil, nil) -+ if err != nil { -+ return nil, err -+ } -+ // Encode point into bytes. -+ bytes := make([]byte, n) -+ if _, err = ossl.EC_POINT_point2oct(group, pt, ossl.POINT_CONVERSION_UNCOMPRESSED, bytes, nil); err != nil { -+ return nil, err -+ } -+ return bytes, nil -+} -+ -+// generateAndEncodeEcPublicKey calls newPubKeyPointFn to generate a public key point and then encodes it. -+func generateAndEncodeEcPublicKey(nid int32, newPubKeyPointFn func(group ossl.EC_GROUP_PTR) (ossl.EC_POINT_PTR, error)) ([]byte, error) { -+ group, err := ossl.EC_GROUP_new_by_curve_name(nid) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EC_GROUP_free(group) -+ pt, err := newPubKeyPointFn(group) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EC_POINT_free(pt) -+ return encodeEcPoint(group, pt) -+} -+ -+func extractPKEYRawPublic(pkey ossl.EVP_PKEY_PTR, pub []byte) error { -+ keylen := len(pub) -+ if _, err := ossl.EVP_PKEY_get_raw_public_key(pkey, pub, &keylen); err != nil { -+ return err -+ } -+ if keylen != len(pub) { -+ return errors.New("bad public key length: " + strconv.Itoa(keylen)) -+ } -+ return nil -+} -+ -+func extractPKEYRawPrivate(pkey ossl.EVP_PKEY_PTR, pub []byte) error { -+ keylen := len(pub) -+ if _, err := ossl.EVP_PKEY_get_raw_private_key(pkey, pub, &keylen); err != nil { -+ return err -+ } -+ if keylen != len(pub) { -+ return errors.New("bad private key length: " + strconv.Itoa(keylen)) -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdh.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdh.go -new file mode 100644 -index 00000000000000..60e56dfd573f47 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdh.go -@@ -0,0 +1,331 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "errors" -+ "runtime" -+ "slices" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+const publicKeySizeX25519 = 32 -+const privateKeySizeX25519 = 32 -+ -+type PublicKeyECDH struct { -+ _pkey ossl.EVP_PKEY_PTR -+ bytes []byte -+} -+ -+func (k *PublicKeyECDH) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+type PrivateKeyECDH struct { -+ _pkey ossl.EVP_PKEY_PTR -+ curve string -+} -+ -+func (k *PrivateKeyECDH) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func NewPublicKeyECDH(curve string, bytes []byte) (*PublicKeyECDH, error) { -+ expectedLen := publicKeySizeX25519 -+ if curve != "X25519" { -+ expectedLen = 1 + 2*curveSize(curve) -+ } -+ if len(bytes) != expectedLen { -+ return nil, errors.New("NewPublicKeyECDH: wrong key length") -+ } -+ -+ pkey, err := newECDHPkey(curve, bytes, false) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyECDH{pkey, slices.Clone(bytes)} -+ runtime.SetFinalizer(k, (*PublicKeyECDH).finalize) -+ return k, nil -+} -+ -+func (k *PublicKeyECDH) Bytes() []byte { return k.bytes } -+ -+func NewPrivateKeyECDH(curve string, bytes []byte) (*PrivateKeyECDH, error) { -+ expectedLen := privateKeySizeX25519 -+ if curve != "X25519" { -+ expectedLen = curveSize(curve) -+ } -+ if len(bytes) != expectedLen { -+ return nil, errors.New("NewPrivateKeyECDH: wrong key length") -+ } -+ pkey, err := newECDHPkey(curve, bytes, true) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyECDH{pkey, curve} -+ runtime.SetFinalizer(k, (*PrivateKeyECDH).finalize) -+ return k, nil -+} -+ -+func (k *PrivateKeyECDH) PublicKey() (*PublicKeyECDH, error) { -+ defer runtime.KeepAlive(k) -+ var pkey ossl.EVP_PKEY_PTR -+ defer func() { -+ ossl.EVP_PKEY_free(pkey) -+ }() -+ -+ var bytes []byte -+ if k.curve == "X25519" { -+ pkey = k._pkey -+ if _, err := ossl.EVP_PKEY_up_ref(pkey); err != nil { -+ return nil, err -+ } -+ bytes = make([]byte, publicKeySizeX25519) -+ if err := extractPKEYRawPublic(pkey, bytes); err != nil { -+ return nil, err -+ } -+ } else { -+ switch major() { -+ case 1: -+ var err error -+ pkey, err = ossl.EVP_PKEY_new() -+ if err != nil { -+ return nil, err -+ } -+ key := getECKey(k._pkey) -+ if _, err := ossl.EVP_PKEY_set1_EC_KEY(pkey, key); err != nil { -+ return nil, err -+ } -+ pt := ossl.EC_KEY_get0_public_key(key) -+ if pt == nil { -+ return nil, fail("missing ECDH public key") -+ } -+ group := ossl.EC_KEY_get0_group(key) -+ if bytes, err = encodeEcPoint(group, pt); err != nil { -+ return nil, err -+ } -+ default: -+ pkey = k._pkey -+ if _, err := ossl.EVP_PKEY_up_ref(pkey); err != nil { -+ return nil, err -+ } -+ var cbytes *byte -+ n, err := ossl.EVP_PKEY_get1_encoded_public_key(k._pkey, &cbytes) -+ if err != nil { -+ return nil, err -+ } -+ bytes = goBytes(unsafe.Pointer(cbytes), n) -+ cryptoFree(unsafe.Pointer(cbytes)) -+ } -+ } -+ pub := &PublicKeyECDH{pkey, bytes} -+ pkey = nil -+ runtime.SetFinalizer(pub, (*PublicKeyECDH).finalize) -+ return pub, nil -+} -+ -+func newECDHPkey(curve string, bytes []byte, isPrivate bool) (ossl.EVP_PKEY_PTR, error) { -+ if curve == "X25519" { -+ if isPrivate { -+ return ossl.EVP_PKEY_new_raw_private_key(ossl.EVP_PKEY_X25519, nil, bytes) -+ } else { -+ return ossl.EVP_PKEY_new_raw_public_key(ossl.EVP_PKEY_X25519, nil, bytes) -+ } -+ } -+ nid := curveNID(curve) -+ switch major() { -+ case 1: -+ return newECDHPkey1(nid, bytes, isPrivate) -+ default: -+ return newECDHPkey3(nid, bytes, isPrivate) -+ } -+} -+ -+func newECDHPkey1(nid int32, bytes []byte, isPrivate bool) (pkey ossl.EVP_PKEY_PTR, err error) { -+ key, err := ossl.EC_KEY_new_by_curve_name(nid) -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if pkey == nil { -+ ossl.EC_KEY_free(key) -+ } -+ }() -+ group := ossl.EC_KEY_get0_group(key) -+ if isPrivate { -+ priv, err := ossl.BN_bin2bn(bytes, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.BN_clear_free(priv) -+ if _, err := ossl.EC_KEY_set_private_key(key, priv); err != nil { -+ return nil, err -+ } -+ pub, err := pointMult(group, priv) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EC_POINT_free(pub) -+ if _, err := ossl.EC_KEY_set_public_key(key, pub); err != nil { -+ return nil, err -+ } -+ } else { -+ pub, err := ossl.EC_POINT_new(group) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EC_POINT_free(pub) -+ if _, err := ossl.EC_POINT_oct2point(group, pub, bytes, nil); err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EC_KEY_set_public_key(key, pub); err != nil { -+ return nil, err -+ } -+ } -+ if _, err := ossl.EC_KEY_check_key(key); err != nil { -+ // Match upstream error message. -+ if isPrivate { -+ return nil, errors.New("crypto/ecdh: invalid private key") -+ } else { -+ return nil, errors.New("crypto/ecdh: invalid public key") -+ } -+ } -+ return newEVPPKEY(key) -+} -+ -+func newECDHPkey3(nid int32, bytes []byte, isPrivate bool) (ossl.EVP_PKEY_PTR, error) { -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addUTF8String(_OSSL_PKEY_PARAM_GROUP_NAME, ossl.OBJ_nid2sn(nid), 0) -+ var selection int32 -+ if isPrivate { -+ priv, err := ossl.BN_bin2bn(bytes, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.BN_clear_free(priv) -+ pubBytes, err := generateAndEncodeEcPublicKey(nid, func(group ossl.EC_GROUP_PTR) (ossl.EC_POINT_PTR, error) { -+ return pointMult(group, priv) -+ }) -+ if err != nil { -+ return nil, err -+ } -+ bld.addOctetString(_OSSL_PKEY_PARAM_PUB_KEY, pubBytes) -+ bld.addBN(_OSSL_PKEY_PARAM_PRIV_KEY, priv) -+ selection = ossl.EVP_PKEY_KEYPAIR -+ } else { -+ bld.addOctetString(_OSSL_PKEY_PARAM_PUB_KEY, bytes) -+ selection = ossl.EVP_PKEY_PUBLIC_KEY -+ } -+ -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ pkey, err := newEvpFromParams(ossl.EVP_PKEY_EC, selection, params) -+ if err != nil { -+ return nil, err -+ } -+ -+ if err := checkPkey(pkey, isPrivate); err != nil { -+ ossl.EVP_PKEY_free(pkey) -+ return nil, errors.New("crypto/ecdh: " + err.Error()) -+ } -+ return pkey, nil -+} -+ -+func pointMult(group ossl.EC_GROUP_PTR, priv ossl.BIGNUM_PTR) (ossl.EC_POINT_PTR, error) { -+ // OpenSSL does not expose any method to generate the public -+ // key from the private key [1], so we have to calculate it here. -+ // [1] https://github.com/openssl/openssl/issues/18437#issuecomment-1144717206 -+ pt, err := ossl.EC_POINT_new(group) -+ if err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EC_POINT_mul(group, pt, priv, nil, nil, nil); err != nil { -+ ossl.EC_POINT_free(pt) -+ return nil, err -+ } -+ return pt, nil -+} -+ -+func ECDH(priv *PrivateKeyECDH, pub *PublicKeyECDH) ([]byte, error) { -+ defer runtime.KeepAlive(priv) -+ defer runtime.KeepAlive(pub) -+ ctx, err := ossl.EVP_PKEY_CTX_new(priv._pkey, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_derive_init(ctx); err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EVP_PKEY_derive_set_peer(ctx, pub._pkey); err != nil { -+ return nil, err -+ } -+ var keylen int -+ if _, err := ossl.EVP_PKEY_derive(ctx, nil, &keylen); err != nil { -+ return nil, err -+ } -+ out := make([]byte, keylen) -+ if _, err := ossl.EVP_PKEY_derive(ctx, out, &keylen); err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func GenerateKeyECDH(curve string) (*PrivateKeyECDH, []byte, error) { -+ pkey, err := generateEVPPKey(curveID(curve), 0, curve) -+ if err != nil { -+ return nil, nil, err -+ } -+ var k *PrivateKeyECDH -+ defer func() { -+ if k == nil { -+ ossl.EVP_PKEY_free(pkey) -+ } -+ }() -+ var bytes []byte -+ if curve == "X25519" { -+ bytes = make([]byte, privateKeySizeX25519) -+ keylen := len(bytes) -+ if _, err := ossl.EVP_PKEY_get_raw_private_key(pkey, bytes, &keylen); err != nil { -+ return nil, nil, err -+ } -+ } else { -+ var priv ossl.BIGNUM_PTR -+ switch major() { -+ case 1: -+ key := getECKey(pkey) -+ priv = ossl.EC_KEY_get0_private_key(key) -+ if priv == nil { -+ return nil, nil, fail("missing ECDH private key") -+ } -+ default: -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_PRIV_KEY.ptr(), &priv); err != nil { -+ return nil, nil, err -+ } -+ defer ossl.BN_clear_free(priv) -+ } -+ // We should not leak bit length of the secret scalar in the key. -+ // For this reason, we use BN_bn2binpad instead of BN_bn2bin with fixed length. -+ // The fixed length is the order of the large prime subgroup of the curve, -+ // returned by EVP_PKEY_get_bits, which is generally the upper bound for -+ // generating a private ECDH key. -+ bits, err := ossl.EVP_PKEY_get_bits(pkey) -+ if err != nil { -+ return nil, nil, err -+ } -+ bytes = make([]byte, (bits+7)/8) -+ if err := bnToBinPad(priv, bytes); err != nil { -+ return nil, nil, err -+ } -+ } -+ k = &PrivateKeyECDH{pkey, curve} -+ runtime.SetFinalizer(k, (*PrivateKeyECDH).finalize) -+ return k, bytes, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdsa.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdsa.go -new file mode 100644 -index 00000000000000..ad6c0bcb821bc7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ecdsa.go -@@ -0,0 +1,212 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+type PrivateKeyECDSA struct { -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func (k *PrivateKeyECDSA) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PrivateKeyECDSA) withKey(f func(ossl.EVP_PKEY_PTR) error) error { -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+type PublicKeyECDSA struct { -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func (k *PublicKeyECDSA) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PublicKeyECDSA) withKey(f func(ossl.EVP_PKEY_PTR) error) error { -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+func NewPublicKeyECDSA(curve string, x, y BigInt) (*PublicKeyECDSA, error) { -+ pkey, err := newECDSAKey(curve, x, y, nil) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyECDSA{_pkey: pkey} -+ runtime.SetFinalizer(k, (*PublicKeyECDSA).finalize) -+ return k, nil -+} -+ -+func NewPrivateKeyECDSA(curve string, x, y, d BigInt) (*PrivateKeyECDSA, error) { -+ pkey, err := newECDSAKey(curve, x, y, d) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyECDSA{_pkey: pkey} -+ runtime.SetFinalizer(k, (*PrivateKeyECDSA).finalize) -+ return k, nil -+} -+ -+func GenerateKeyECDSA(curve string) (x, y, d BigInt, err error) { -+ // Generate the private key. -+ pkey, err := generateEVPPKey(ossl.EVP_PKEY_EC, 0, curve) -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ var bx, by, bd ossl.BIGNUM_PTR -+ defer func() { -+ ossl.BN_free(bx) -+ ossl.BN_free(by) -+ }() -+ switch major() { -+ case 1: -+ // Retrieve the internal EC_KEY, which holds the X, Y, and D coordinates. -+ key := getECKey(pkey) -+ group := ossl.EC_KEY_get0_group(key) -+ pt := ossl.EC_KEY_get0_public_key(key) -+ // Allocate two big numbers to store the X and Y coordinates. -+ bx, err = ossl.BN_new() -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ by, err = ossl.BN_new() -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ // Get X and Y. -+ if _, err := ossl.EC_POINT_get_affine_coordinates_GFp(group, pt, bx, by, nil); err != nil { -+ return nil, nil, nil, err -+ } -+ // Get Z. We don't need to free it, get0 does not increase the reference count. -+ bd = ossl.EC_KEY_get0_private_key(key) -+ default: -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_EC_PUB_X.ptr(), &bx); err != nil { -+ return nil, nil, nil, err -+ } -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_EC_PUB_Y.ptr(), &by); err != nil { -+ return nil, nil, nil, err -+ } -+ if _, err := ossl.EVP_PKEY_get_bn_param(pkey, _OSSL_PKEY_PARAM_PRIV_KEY.ptr(), &bd); err != nil { -+ return nil, nil, nil, err -+ } -+ defer ossl.BN_clear_free(bd) -+ } -+ -+ // Get D. -+ return bnToBig(bx), bnToBig(by), bnToBig(bd), nil -+} -+ -+func SignMarshalECDSA(priv *PrivateKeyECDSA, hash []byte) ([]byte, error) { -+ return evpSign(priv.withKey, 0, 0, 0, hash) -+} -+ -+func HashSignECDSA(priv *PrivateKeyECDSA, h crypto.Hash, msg []byte) ([]byte, error) { -+ return evpHashSign(priv.withKey, h, msg) -+} -+ -+func VerifyECDSA(pub *PublicKeyECDSA, hash []byte, sig []byte) bool { -+ return evpVerify(pub.withKey, 0, 0, 0, sig, hash) == nil -+} -+ -+func HashVerifyECDSA(pub *PublicKeyECDSA, h crypto.Hash, msg, sig []byte) bool { -+ return evpHashVerify(pub.withKey, h, msg, sig) == nil -+} -+ -+func newECDSAKey(curve string, x, y, d BigInt) (ossl.EVP_PKEY_PTR, error) { -+ nid := curveNID(curve) -+ bx, err := bigToBN(x) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.BN_free(bx) -+ by, err := bigToBN(y) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.BN_free(by) -+ var bd ossl.BIGNUM_PTR -+ if d != nil { -+ bd, err = bigToBN(d) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.BN_clear_free(bd) -+ } -+ switch major() { -+ case 1: -+ return newECDSAKey1(nid, bx, by, bd) -+ default: -+ return newECDSAKey3(nid, bx, by, bd) -+ } -+} -+ -+func newECDSAKey1(nid int32, bx, by, bd ossl.BIGNUM_PTR) (pkey ossl.EVP_PKEY_PTR, err error) { -+ key, err := ossl.EC_KEY_new_by_curve_name(nid) -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if pkey == nil { -+ defer ossl.EC_KEY_free(key) -+ } -+ }() -+ if _, err := ossl.EC_KEY_set_public_key_affine_coordinates(key, bx, by); err != nil { -+ return nil, err -+ } -+ if bd != nil { -+ if _, err := ossl.EC_KEY_set_private_key(key, bd); err != nil { -+ return nil, err -+ } -+ } -+ -+ return newEVPPKEY(key) -+} -+ -+func newECDSAKey3(nid int32, bx, by, bd ossl.BIGNUM_PTR) (ossl.EVP_PKEY_PTR, error) { -+ // Create the encoded public key public key from bx and by. -+ pubBytes, err := generateAndEncodeEcPublicKey(nid, func(group ossl.EC_GROUP_PTR) (ossl.EC_POINT_PTR, error) { -+ pt, err := ossl.EC_POINT_new(group) -+ if err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EC_POINT_set_affine_coordinates(group, pt, bx, by, nil); err != nil { -+ ossl.EC_POINT_free(pt) -+ return nil, err -+ } -+ return pt, nil -+ }) -+ if err != nil { -+ return nil, err -+ } -+ // Construct the parameters. -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addUTF8String(_OSSL_PKEY_PARAM_GROUP_NAME, ossl.OBJ_nid2sn(nid), 0) -+ bld.addOctetString(_OSSL_PKEY_PARAM_PUB_KEY, pubBytes) -+ var selection int32 -+ if bd != nil { -+ bld.addBN(_OSSL_PKEY_PARAM_PRIV_KEY, bd) -+ selection = ossl.EVP_PKEY_KEYPAIR -+ } else { -+ selection = ossl.EVP_PKEY_PUBLIC_KEY -+ } -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ return newEvpFromParams(ossl.EVP_PKEY_EC, selection, params) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ed25519.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ed25519.go -new file mode 100644 -index 00000000000000..69565f949d4ac5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/ed25519.go -@@ -0,0 +1,209 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "errors" -+ "runtime" -+ "strconv" -+ "sync" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+const ( -+ // publicKeySizeEd25519 is the size, in bytes, of public keys as used in crypto/ed25519. -+ publicKeySizeEd25519 = 32 -+ // privateKeySizeEd25519 is the size, in bytes, of private keys as used in crypto/ed25519. -+ privateKeySizeEd25519 = 64 -+ // signatureSizeEd25519 is the size, in bytes, of signatures generated and verified by crypto/ed25519. -+ signatureSizeEd25519 = 64 -+ // seedSizeEd25519 is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. -+ seedSizeEd25519 = 32 -+) -+ -+// TODO: Add support for Ed25519ph and Ed25519ctx when OpenSSL supports them, -+// which will probably be in 3.2.0 (https://github.com/openssl/openssl/issues/20418). -+ -+var supportsEd25519 = sync.OnceValue(func() bool { -+ switch major() { -+ case 1: -+ ctx, _ := ossl.EVP_PKEY_CTX_new_id(ossl.EVP_PKEY_ED25519, nil) -+ if ctx != nil { -+ ossl.EVP_PKEY_CTX_free(ctx) -+ return true -+ } -+ default: -+ sig, _ := ossl.EVP_SIGNATURE_fetch(nil, _KeyTypeED25519.ptr(), nil) -+ if sig != nil { -+ ossl.EVP_SIGNATURE_free(sig) -+ return true -+ } -+ } -+ return false -+}) -+ -+// SupportsEd25519 returns true if the current OpenSSL version supports -+// GenerateKeyEd25519, NewKeyFromSeedEd25519, SignEd25519 and VerifyEd25519. -+func SupportsEd25519() bool { -+ return supportsEd25519() -+} -+ -+type PublicKeyEd25519 struct { -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func (k *PublicKeyEd25519) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PublicKeyEd25519) Bytes() ([]byte, error) { -+ defer runtime.KeepAlive(k) -+ pub := make([]byte, publicKeySizeEd25519) -+ if err := extractPKEYRawPublic(k._pkey, pub); err != nil { -+ return nil, err -+ } -+ return pub, nil -+} -+ -+type PrivateKeyEd25519 struct { -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func (k *PrivateKeyEd25519) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PrivateKeyEd25519) Bytes() ([]byte, error) { -+ defer runtime.KeepAlive(k) -+ priv := make([]byte, privateKeySizeEd25519) -+ if err := extractPKEYPrivEd25519(k._pkey, priv); err != nil { -+ return nil, err -+ } -+ return priv, nil -+} -+ -+func (k *PrivateKeyEd25519) Public() (*PublicKeyEd25519, error) { -+ pub := make([]byte, publicKeySizeEd25519) -+ if err := extractPKEYRawPublic(k._pkey, pub); err != nil { -+ return nil, err -+ } -+ pubk, err := NewPublicKeyEd25519(pub) -+ if err != nil { -+ return nil, err -+ } -+ return pubk, nil -+} -+ -+// GenerateKeyEd25519 generates a private key. -+func GenerateKeyEd25519() (*PrivateKeyEd25519, error) { -+ pkeyPriv, err := generateEVPPKey(ossl.EVP_PKEY_ED25519, 0, "") -+ if err != nil { -+ return nil, err -+ } -+ priv := &PrivateKeyEd25519{_pkey: pkeyPriv} -+ runtime.SetFinalizer(priv, (*PrivateKeyEd25519).finalize) -+ return priv, nil -+} -+ -+// Deprecated: use NewPrivateKeyEd25519 instead. -+func NewPrivateKeyEd25119(priv []byte) (*PrivateKeyEd25519, error) { -+ return NewPrivateKeyEd25519(priv) -+} -+ -+func NewPrivateKeyEd25519(priv []byte) (*PrivateKeyEd25519, error) { -+ if len(priv) != privateKeySizeEd25519 { -+ panic("ed25519: bad private key length: " + strconv.Itoa(len(priv))) -+ } -+ return NewPrivateKeyEd25519FromSeed(priv[:seedSizeEd25519]) -+} -+ -+// Deprecated: use NewPublicKeyEd25519 instead. -+func NewPublicKeyEd25119(pub []byte) (*PublicKeyEd25519, error) { -+ return NewPublicKeyEd25519(pub) -+} -+ -+func NewPublicKeyEd25519(pub []byte) (*PublicKeyEd25519, error) { -+ if len(pub) != publicKeySizeEd25519 { -+ panic("ed25519: bad public key length: " + strconv.Itoa(len(pub))) -+ } -+ pkey, err := ossl.EVP_PKEY_new_raw_public_key(ossl.EVP_PKEY_ED25519, nil, pub) -+ if err != nil { -+ return nil, err -+ } -+ pubk := &PublicKeyEd25519{_pkey: pkey} -+ runtime.SetFinalizer(pubk, (*PublicKeyEd25519).finalize) -+ return pubk, nil -+} -+ -+// NewPrivateKeyEd25519FromSeed calculates a private key from a seed. It will panic if -+// len(seed) is not [SeedSize]. RFC 8032's private keys correspond to seeds in this -+// package. -+func NewPrivateKeyEd25519FromSeed(seed []byte) (*PrivateKeyEd25519, error) { -+ if len(seed) != seedSizeEd25519 { -+ panic("ed25519: bad seed length: " + strconv.Itoa(len(seed))) -+ } -+ pkey, err := ossl.EVP_PKEY_new_raw_private_key(ossl.EVP_PKEY_ED25519, nil, seed) -+ if err != nil { -+ return nil, err -+ } -+ priv := &PrivateKeyEd25519{_pkey: pkey} -+ runtime.SetFinalizer(priv, (*PrivateKeyEd25519).finalize) -+ return priv, nil -+} -+ -+func extractPKEYPrivEd25519(pkey ossl.EVP_PKEY_PTR, priv []byte) error { -+ if err := extractPKEYRawPublic(pkey, priv[seedSizeEd25519:]); err != nil { -+ return err -+ } -+ return extractPKEYRawPrivate(pkey, priv[:seedSizeEd25519]) -+} -+ -+// SignEd25519 signs the message with priv and returns a signature. -+func SignEd25519(priv *PrivateKeyEd25519, message []byte) (sig []byte, err error) { -+ // Outline the function body so that the returned key can be stack-allocated. -+ sig = make([]byte, signatureSizeEd25519) -+ err = signEd25519(priv, sig, message) -+ if err != nil { -+ return nil, err -+ } -+ return sig, err -+} -+ -+func signEd25519(priv *PrivateKeyEd25519, sig, message []byte) error { -+ defer runtime.KeepAlive(priv) -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if _, err := ossl.EVP_DigestSignInit(ctx, nil, nil, nil, priv._pkey); err != nil { -+ return err -+ } -+ siglen := signatureSizeEd25519 -+ if _, err := ossl.EVP_DigestSign(ctx, sig, &siglen, message); err != nil { -+ return err -+ } -+ if siglen != signatureSizeEd25519 { -+ return errors.New("ed25519: bad signature length: " + strconv.Itoa(siglen)) -+ } -+ return nil -+} -+ -+// VerifyEd25519 reports whether sig is a valid signature of message by pub. -+func VerifyEd25519(pub *PublicKeyEd25519, message, sig []byte) error { -+ defer runtime.KeepAlive(pub) -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if _, err := ossl.EVP_DigestVerifyInit(ctx, nil, nil, nil, pub._pkey); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_DigestVerify(ctx, sig, message); err != nil { -+ return errors.New("ed25519: invalid signature") -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/evp.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/evp.go -new file mode 100644 -index 00000000000000..86e10fc0059754 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/evp.go -@@ -0,0 +1,634 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "strconv" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// cacheMD is a cache of crypto.Hash to GOossl.EVP_MD_PTR. -+var cacheMD sync.Map -+ -+// hashFuncHash calls fn() and returns its result. -+// If fn() panics, the panic is recovered and returned as an error. -+// This is used to avoid aborting the program when calling -+// an unsupported hash function. It is the caller's responsibility -+// to check the returned value. -+func hashFuncHash[H hash.Hash](fn func() H) (h hash.Hash, err error) { -+ defer func() { -+ r := recover() -+ if r == nil { -+ return -+ } -+ h = nil -+ switch e := r.(type) { -+ case error: -+ err = e -+ case string: -+ err = errors.New(e) -+ default: -+ err = errors.New("unsupported panic") -+ } -+ }() -+ return fn(), nil -+} -+ -+// hashToMD converts a hash.Hash implementation from this package to a GOossl.EVP_MD_PTR. -+func hashToMD(h hash.Hash) ossl.EVP_MD_PTR { -+ if h, ok := h.(*Hash); ok { -+ return h.alg.md -+ } -+ return nil -+} -+ -+// hashToCryptoHash converts a hash.Hash implementation from this package to a crypto.Hash. -+func hashToCryptoHash(h hash.Hash) crypto.Hash { -+ if h, ok := h.(*Hash); ok { -+ return h.alg.ch -+ } -+ return 0 -+} -+ -+// hashFuncToMD converts a hash.Hash function to a GOossl.EVP_MD_PTR. -+// See [hashFuncHash] for details on error handling. -+func hashFuncToMD[H hash.Hash](fn func() H) (ossl.EVP_MD_PTR, error) { -+ h, err := hashFuncHash(fn) -+ if err != nil { -+ return nil, err -+ } -+ md := hashToMD(h) -+ if md == nil { -+ return nil, errors.New("unsupported hash function") -+ } -+ return md, nil -+} -+ -+// provider is an identifier for a known provider. -+type provider uint8 -+ -+const ( -+ providerNone provider = iota -+ providerOSSLDefault -+ providerOSSLFIPS -+ providerSymCrypt -+) -+ -+type hashAlgorithm struct { -+ md ossl.EVP_MD_PTR -+ ch crypto.Hash -+ size int -+ blockSize int -+ provider provider -+ marshallable bool -+ magic string -+ marshalledSize int -+} -+ -+// loadHash converts a crypto.Hash to a EVP_MD. -+func loadHash(ch crypto.Hash, must bool) (h *hashAlgorithm) { -+ defer func() { -+ if h == nil && must { -+ panic("openssl: unsupported hash function: " + strconv.Itoa(int(ch))) -+ } -+ }() -+ if v, ok := cacheMD.Load(ch); ok { -+ return v.(*hashAlgorithm) -+ } -+ -+ var hash hashAlgorithm -+ switch ch { -+ case crypto.RIPEMD160: -+ hash.md = ossl.EVP_ripemd160() -+ case crypto.MD4: -+ hash.md = ossl.EVP_md4() -+ case crypto.MD5: -+ hash.md = ossl.EVP_md5() -+ hash.magic = magicMD5 -+ hash.marshalledSize = marshaledSizeMD5 -+ case crypto.MD5SHA1: -+ hash.md = ossl.EVP_md5_sha1() -+ case crypto.SHA1: -+ hash.md = ossl.EVP_sha1() -+ hash.magic = magic1 -+ hash.marshalledSize = marshaledSize1 -+ case crypto.SHA224: -+ hash.md = ossl.EVP_sha224() -+ hash.magic = magic224 -+ hash.marshalledSize = marshaledSize256 -+ case crypto.SHA256: -+ hash.md = ossl.EVP_sha256() -+ hash.magic = magic256 -+ hash.marshalledSize = marshaledSize256 -+ case crypto.SHA384: -+ hash.md = ossl.EVP_sha384() -+ hash.magic = magic384 -+ hash.marshalledSize = marshaledSize512 -+ case crypto.SHA512: -+ hash.md = ossl.EVP_sha512() -+ hash.magic = magic512 -+ hash.marshalledSize = marshaledSize512 -+ case crypto.SHA512_224: -+ hash.md = ossl.EVP_sha512_224() -+ hash.magic = magic512_224 -+ hash.marshalledSize = marshaledSize512 -+ case crypto.SHA512_256: -+ hash.md = ossl.EVP_sha512_256() -+ hash.magic = magic512_256 -+ hash.marshalledSize = marshaledSize512 -+ case crypto.SHA3_224: -+ hash.md = ossl.EVP_sha3_224() -+ case crypto.SHA3_256: -+ hash.md = ossl.EVP_sha3_256() -+ case crypto.SHA3_384: -+ hash.md = ossl.EVP_sha3_384() -+ case crypto.SHA3_512: -+ hash.md = ossl.EVP_sha3_512() -+ } -+ if hash.md == nil { -+ cacheMD.Store(ch, (*hashAlgorithm)(nil)) -+ return nil -+ } -+ hash.ch = ch -+ hash.size = int(ossl.EVP_MD_get_size(hash.md)) -+ hash.blockSize = int(ossl.EVP_MD_get_block_size(hash.md)) -+ if major() != 1 { -+ // On OpenSSL 3, directly operating on a EVP_MD object -+ // not created by EVP_MD_fetch has negative performance -+ // implications, as digest operations will have -+ // to fetch it on every call. Better to just fetch it once here. -+ md, _ := ossl.EVP_MD_fetch(nil, ossl.EVP_MD_get0_name(hash.md), nil) -+ // Don't overwrite md in case it can't be fetched, as the md may still be used -+ // outside of EVP_MD_CTX, for example to sign and verify RSA signatures. -+ if md != nil { -+ hash.md = md -+ } -+ } -+ if hash.magic != "" { -+ if hash.marshalledSize == 0 { -+ panic("marshalledSize must be set for " + hash.magic) -+ } -+ } -+ -+ switch major() { -+ case 1: -+ hash.provider = providerOSSLDefault -+ default: -+ if prov := ossl.EVP_MD_get0_provider(hash.md); prov != nil { -+ cname := ossl.OSSL_PROVIDER_get0_name(prov) -+ // Marshalability depends on knowing the EVP_MD_CTX internal -+ // layout for this major (see getOSSLDigetsContext). Untested -+ // majors loaded via GODEBUG=ms_opensslallowuntested=1 leave -+ // marshallable false so MarshalBinary/UnmarshalBinary return -+ // errMarshallUnsupported{} instead of touching unknown memory. -+ known := knownMajor() -+ switch goString(cname) { -+ case "default": -+ hash.provider = providerOSSLDefault -+ hash.marshallable = known && hash.magic != "" -+ case "fips": -+ hash.provider = providerOSSLFIPS -+ hash.marshallable = known && hash.magic != "" -+ case "symcryptprovider": -+ hash.provider = providerSymCrypt -+ hash.marshallable = known && hash.magic != "" && isSymCryptHashStateSerializable(hash.md) -+ } -+ } -+ } -+ -+ cacheMD.Store(ch, &hash) -+ return &hash -+} -+ -+// generateEVPPKey generates a new EVP_PKEY with the given id and properties. -+func generateEVPPKey(id, bits int32, curve string) (ossl.EVP_PKEY_PTR, error) { -+ if bits != 0 && curve != "" { -+ return nil, fail("incorrect generateEVPPKey parameters") -+ } -+ var pkey ossl.EVP_PKEY_PTR -+ switch major() { -+ case 1: -+ ctx, err := ossl.EVP_PKEY_CTX_new_id(id, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_keygen_init(ctx); err != nil { -+ return nil, err -+ } -+ if bits != 0 { -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, id, -1, ossl.EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, nil); err != nil { -+ return nil, err -+ } -+ } -+ if id == ossl.EVP_PKEY_EC && curve != "" { -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, id, -1, ossl.EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, curveNID(curve), nil); err != nil { -+ return nil, err -+ } -+ } -+ if _, err := ossl.EVP_PKEY_keygen(ctx, &pkey); err != nil { -+ return nil, err -+ } -+ default: -+ var err error -+ switch id { -+ case ossl.EVP_PKEY_RSA: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_RSA(nil, nil, _KeyTypeRSA.ptr(), int(bits)) -+ case ossl.EVP_PKEY_EC: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_EC(nil, nil, _KeyTypeEC.ptr(), ossl.OBJ_nid2sn(curveNID(curve))) -+ case ossl.EVP_PKEY_ED25519: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_ED25519(nil, nil, _KeyTypeED25519.ptr()) -+ case ossl.EVP_PKEY_X25519: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_X25519(nil, nil, _KeyTypeX25519.ptr()) -+ case ossl.EVP_PKEY_MLKEM_768: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_MLKEM(nil, nil, _KeyTypeMLKEM768.ptr()) -+ case ossl.EVP_PKEY_MLKEM_1024: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_MLKEM(nil, nil, _KeyTypeMLKEM1024.ptr()) -+ case ossl.EVP_PKEY_ML_DSA_44: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_MLDSA(nil, nil, _KeyTypeMLDSA44.ptr()) -+ case ossl.EVP_PKEY_ML_DSA_65: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_MLDSA(nil, nil, _KeyTypeMLDSA65.ptr()) -+ case ossl.EVP_PKEY_ML_DSA_87: -+ pkey, err = ossl.EVP_PKEY_Q_keygen_MLDSA(nil, nil, _KeyTypeMLDSA87.ptr()) -+ default: -+ panic("unsupported key type '" + strconv.Itoa(int(id)) + "'") -+ } -+ if err != nil { -+ return nil, err -+ } -+ } -+ -+ return pkey, nil -+} -+ -+type withKeyFunc func(func(ossl.EVP_PKEY_PTR) error) error -+type initFunc func(ossl.EVP_PKEY_CTX_PTR) error -+type cryptFunc func(ossl.EVP_PKEY_CTX_PTR, []byte, *int, []byte) error -+type verifyFunc func(ossl.EVP_PKEY_CTX_PTR, []byte, []byte) error -+ -+func setupEVP(withKey withKeyFunc, padding int32, -+ h, mgfHash hash.Hash, label []byte, saltLen int32, ch crypto.Hash, -+ init initFunc) (_ ossl.EVP_PKEY_CTX_PTR, err error) { -+ var ctx ossl.EVP_PKEY_CTX_PTR -+ if err := withKey(func(pkey ossl.EVP_PKEY_PTR) error { -+ ctx, err = ossl.EVP_PKEY_CTX_new(pkey, nil) -+ return err -+ }); err != nil { -+ return nil, err -+ } -+ defer func() { -+ if err != nil { -+ if ctx != nil { -+ ossl.EVP_PKEY_CTX_free(ctx) -+ ctx = nil -+ } -+ } -+ }() -+ if err := init(ctx); err != nil { -+ return nil, err -+ } -+ if padding == 0 { -+ return ctx, nil -+ } -+ // Each padding type has its own requirements in terms of when to apply the padding, -+ // so it can't be just set at this point. -+ switch padding { -+ case ossl.RSA_PKCS1_OAEP_PADDING: -+ err = setOAEPPadding(ctx, h, mgfHash, label) -+ case ossl.RSA_PKCS1_PSS_PADDING: -+ err = setPSSPadding(ctx, saltLen, ch) -+ case ossl.RSA_PKCS1_PADDING: -+ err = setPKCS1Padding(ctx, ch) -+ default: -+ _, err = ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_PADDING, padding, nil) -+ } -+ if err != nil { -+ return nil, err -+ } -+ return ctx, nil -+} -+ -+func setPSSPadding(ctx ossl.EVP_PKEY_CTX_PTR, saltLen int32, ch crypto.Hash) error { -+ alg := loadHash(ch, false) -+ if alg == nil { -+ return errors.New("crypto/rsa: unsupported hash function") -+ } -+ switch major() { -+ case 1: -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_MD, 0, unsafe.Pointer(alg.md)); err != nil { -+ return err -+ } -+ // setPadding must happen after setting EVP_PKEY_CTRL_MD. -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_PADDING, ossl.RSA_PKCS1_PSS_PADDING, nil); err != nil { -+ return err -+ } -+ if saltLen != 0 { -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_PSS_SALTLEN, saltLen, nil); err != nil { -+ return err -+ } -+ } -+ return nil -+ default: -+ bld := newParamBuilder() -+ bld.addUTF8String(_OSSL_SIGNATURE_PARAM_DIGEST, ossl.EVP_MD_get0_name(alg.md), 0) -+ bld.addUTF8String(_OSSL_SIGNATURE_PARAM_PAD_MODE, _OSSL_PKEY_RSA_PAD_MODE_PSS.ptr(), 0) -+ if saltLen != 0 { -+ bld.addInt32(_OSSL_SIGNATURE_PARAM_PSS_SALTLEN, saltLen) -+ } -+ bld.addInt32(_OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK, 0) -+ params, err := bld.build() -+ if err != nil { -+ return err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ _, err = ossl.EVP_PKEY_CTX_set_params(ctx, params) -+ return err -+ } -+} -+ -+func setPKCS1Padding(ctx ossl.EVP_PKEY_CTX_PTR, ch crypto.Hash) error { -+ if ch == 0 { -+ // We support unhashed messages. -+ return nil -+ } -+ alg := loadHash(ch, false) -+ if alg == nil { -+ return errors.New("crypto/rsa: unsupported hash function") -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, -1, ossl.EVP_PKEY_CTRL_MD, 0, unsafe.Pointer(alg.md)); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_PADDING, ossl.RSA_PKCS1_PADDING, nil); err != nil { -+ return err -+ } -+ return nil -+} -+ -+func setOAEPPadding(ctx ossl.EVP_PKEY_CTX_PTR, h, mgfHash hash.Hash, label []byte) error { -+ md := hashToMD(h) -+ if md == nil { -+ return errors.New("crypto/rsa: unsupported hash function") -+ } -+ var mgfMD ossl.EVP_MD_PTR -+ if mgfHash != nil { -+ // mgfHash is optional, but if it is set it must match a supported hash function. -+ mgfMD = hashToMD(mgfHash) -+ if mgfMD == nil { -+ return errors.New("crypto/rsa: unsupported hash function") -+ } -+ } -+ // setPadding must happen before setting EVP_PKEY_CTRL_RSA_OAEP_MD. -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_PADDING, ossl.RSA_PKCS1_OAEP_PADDING, nil); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_OAEP_MD, 0, unsafe.Pointer(md)); err != nil { -+ return err -+ } -+ if mgfHash != nil { -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_MGF1_MD, 0, unsafe.Pointer(mgfMD)); err != nil { -+ return err -+ } -+ } -+ // ctx takes ownership of label, so malloc a copy for OpenSSL to free. -+ // OpenSSL does not take ownership of the label if the length is zero, -+ // so better avoid the allocation. -+ var clabel *byte -+ if len(label) > 0 { -+ clabel = (*byte)(cryptoMalloc(len(label))) -+ copy((*[1 << 30]byte)(unsafe.Pointer(clabel))[:len(label)], label) -+ var err error -+ switch major() { -+ case 1: -+ _, err = ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_OAEP_LABEL, int32(len(label)), unsafe.Pointer(clabel)) -+ default: -+ _, err = ossl.EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, unsafe.Slice(clabel, len(label))) -+ } -+ if err != nil { -+ cryptoFree(unsafe.Pointer(clabel)) -+ return err -+ } -+ } -+ return nil -+} -+ -+func cryptEVP(withKey withKeyFunc, padding int32, -+ h, mgfHash hash.Hash, label []byte, saltLen int32, ch crypto.Hash, -+ init initFunc, crypt cryptFunc, in []byte) ([]byte, error) { -+ -+ ctx, err := setupEVP(withKey, padding, h, mgfHash, label, saltLen, ch, init) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ var pkeySize int32 -+ if err := withKey(func(pkey ossl.EVP_PKEY_PTR) (err error) { -+ pkeySize, err = ossl.EVP_PKEY_get_size(pkey) -+ return err -+ }); err != nil { -+ return nil, err -+ } -+ outLen := int(pkeySize) -+ out := make([]byte, pkeySize) -+ if err := crypt(ctx, out, &outLen, in); err != nil { -+ return nil, err -+ } -+ // The size returned by EVP_PKEY_get_size() is only preliminary and not exact, -+ // so the final contents of the out buffer may be smaller. -+ return out[:outLen], nil -+} -+ -+func verifyEVP(withKey withKeyFunc, padding int32, -+ h hash.Hash, label []byte, saltLen int32, ch crypto.Hash, -+ init initFunc, verify verifyFunc, -+ sig, in []byte) error { -+ -+ ctx, err := setupEVP(withKey, padding, h, nil, label, saltLen, ch, init) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ return verify(ctx, sig, in) -+} -+ -+func evpEncrypt(withKey withKeyFunc, padding int32, h, mgfHash hash.Hash, label, msg []byte) ([]byte, error) { -+ encryptInit := func(ctx ossl.EVP_PKEY_CTX_PTR) error { -+ _, err := ossl.EVP_PKEY_encrypt_init(ctx) -+ return err -+ } -+ encrypt := func(ctx ossl.EVP_PKEY_CTX_PTR, out []byte, outLen *int, in []byte) error { -+ if _, err := ossl.EVP_PKEY_encrypt(ctx, out, outLen, in); err != nil { -+ return err -+ } -+ return nil -+ } -+ return cryptEVP(withKey, padding, h, mgfHash, label, 0, 0, encryptInit, encrypt, msg) -+} -+ -+func evpDecrypt(withKey withKeyFunc, padding int32, h, mgfHash hash.Hash, label, msg []byte) ([]byte, error) { -+ decryptInit := func(ctx ossl.EVP_PKEY_CTX_PTR) error { -+ _, err := ossl.EVP_PKEY_decrypt_init(ctx) -+ return err -+ } -+ decrypt := func(ctx ossl.EVP_PKEY_CTX_PTR, out []byte, outLen *int, in []byte) error { -+ _, err := ossl.EVP_PKEY_decrypt(ctx, out, outLen, in) -+ return err -+ } -+ return cryptEVP(withKey, padding, h, mgfHash, label, 0, 0, decryptInit, decrypt, msg) -+} -+ -+func evpSign(withKey withKeyFunc, padding int32, saltLen int32, h crypto.Hash, hashed []byte) ([]byte, error) { -+ signtInit := func(ctx ossl.EVP_PKEY_CTX_PTR) error { -+ _, err := ossl.EVP_PKEY_sign_init(ctx) -+ return err -+ } -+ sign := func(ctx ossl.EVP_PKEY_CTX_PTR, out []byte, outLen *int, in []byte) error { -+ _, err := ossl.EVP_PKEY_sign(ctx, out, outLen, in) -+ return err -+ } -+ return cryptEVP(withKey, padding, nil, nil, nil, saltLen, h, signtInit, sign, hashed) -+} -+ -+func evpVerify(withKey withKeyFunc, padding int32, saltLen int32, h crypto.Hash, sig, hashed []byte) error { -+ verifyInit := func(ctx ossl.EVP_PKEY_CTX_PTR) error { -+ _, err := ossl.EVP_PKEY_verify_init(ctx) -+ return err -+ } -+ verify := func(ctx ossl.EVP_PKEY_CTX_PTR, sig []byte, in []byte) error { -+ _, err := ossl.EVP_PKEY_verify(ctx, sig, in) -+ return err -+ } -+ return verifyEVP(withKey, padding, nil, nil, saltLen, h, verifyInit, verify, sig, hashed) -+} -+ -+func evpHashSign(withKey withKeyFunc, h crypto.Hash, msg []byte) ([]byte, error) { -+ alg := loadHash(h, false) -+ if alg == nil { -+ return nil, errors.New("unsupported hash function: " + strconv.Itoa(int(h))) -+ } -+ var out []byte -+ var outLen int -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if err := withKey(func(key ossl.EVP_PKEY_PTR) error { -+ _, err := ossl.EVP_DigestSignInit(ctx, nil, alg.md, nil, key) -+ return err -+ }); err != nil { -+ return nil, err -+ } -+ if len(msg) > 0 { -+ if _, err := ossl.EVP_DigestUpdate(ctx, msg); err != nil { -+ return nil, err -+ } -+ } -+ // Obtain the signature length -+ if _, err := ossl.EVP_DigestSignFinal(ctx, nil, &outLen); err != nil { -+ return nil, err -+ } -+ out = make([]byte, outLen) -+ // Obtain the signature -+ if _, err := ossl.EVP_DigestSignFinal(ctx, out, &outLen); err != nil { -+ return nil, err -+ } -+ return out[:outLen], nil -+} -+ -+func evpHashVerify(withKey withKeyFunc, h crypto.Hash, msg, sig []byte) error { -+ alg := loadHash(h, false) -+ if alg == nil { -+ return errors.New("unsupported hash function: " + strconv.Itoa(int(h))) -+ } -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if err := withKey(func(key ossl.EVP_PKEY_PTR) error { -+ _, err := ossl.EVP_DigestVerifyInit(ctx, nil, alg.md, nil, key) -+ return err -+ }); err != nil { -+ return err -+ } -+ if len(msg) > 0 { -+ if _, err := ossl.EVP_DigestUpdate(ctx, msg); err != nil { -+ return err -+ } -+ } -+ if _, err := ossl.EVP_DigestVerifyFinal(ctx, sig); err != nil { -+ return err -+ } -+ return nil -+} -+ -+func newEVPPKEY(key ossl.EC_KEY_PTR) (ossl.EVP_PKEY_PTR, error) { -+ pkey, err := ossl.EVP_PKEY_new() -+ if err != nil { -+ return nil, err -+ } -+ if _, err := ossl.EVP_PKEY_assign(pkey, ossl.EVP_PKEY_EC, unsafe.Pointer(key)); err != nil { -+ ossl.EVP_PKEY_free(pkey) -+ return nil, err -+ } -+ return pkey, nil -+} -+ -+// getECKey returns the EC_KEY from pkey. -+// If pkey does not contain an EC_KEY it panics. -+// The returned key should not be freed. -+func getECKey(pkey ossl.EVP_PKEY_PTR) ossl.EC_KEY_PTR { -+ key, err := ossl.EVP_PKEY_get0_EC_KEY(pkey) -+ if err != nil { -+ panic(err) -+ } -+ return key -+} -+ -+func newEvpFromParams(id int32, selection int32, params ossl.OSSL_PARAM_PTR) (ossl.EVP_PKEY_PTR, error) { -+ ctx, err := ossl.EVP_PKEY_CTX_new_id(id, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_fromdata_init(ctx); err != nil { -+ return nil, err -+ } -+ var pkey ossl.EVP_PKEY_PTR -+ if _, err := ossl.EVP_PKEY_fromdata(ctx, &pkey, selection, params); err != nil { -+ //versionguardcheck:ignore OpenSSL 3.0.0–3.0.2 leak EVP_PKEY on error: https://github.com/openssl/openssl/issues/17407. -+ if major() == 3 && minor() == 0 && patch() <= 2 { -+ ossl.EVP_PKEY_free(pkey) -+ } -+ return nil, err -+ } -+ return pkey, nil -+} -+ -+func checkPkey(pkey ossl.EVP_PKEY_PTR, isPrivate bool) error { -+ ctx, err := ossl.EVP_PKEY_CTX_new(pkey, nil) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if isPrivate { -+ if _, err := ossl.EVP_PKEY_private_check(ctx); err != nil { -+ // Match upstream error message. -+ return errors.New("invalid private key") -+ } -+ } else { -+ // Upstream Go does a partial check here, so do we. -+ if _, err := ossl.EVP_PKEY_public_check_quick(ctx); err != nil { -+ // Match upstream error message. -+ return errors.New("invalid public key") -+ } -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hash.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hash.go -new file mode 100644 -index 00000000000000..1f3d87d10da04f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hash.go -@@ -0,0 +1,518 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "runtime" -+ "strconv" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+const ( -+ magicMD5 = "md5\x01" -+ magic1 = "sha\x01" -+ magic224 = "sha\x02" -+ magic256 = "sha\x03" -+ magic384 = "sha\x04" -+ magic512_224 = "sha\x05" -+ magic512_256 = "sha\x06" -+ magic512 = "sha\x07" -+ -+ marshaledSizeMD5 = len(magicMD5) + 4*4 + 64 + 8 // from crypto/md5 -+ marshaledSize1 = len(magic1) + 5*4 + 64 + 8 // from crypto/sha1 -+ marshaledSize256 = len(magic256) + 8*4 + 64 + 8 // from crypto/sha256 -+ marshaledSize512 = len(magic512) + 8*8 + 128 + 8 // from crypto/sha512 -+) -+ -+// maxHashSize is the size of SHA52 and SHA3_512, the largest hashes we support. -+const maxHashSize = 64 -+ -+func hashOneShot(ch crypto.Hash, p []byte, sum []byte) bool { -+ _, err := ossl.EVP_Digest(p, sum, nil, loadHash(ch, true).md, nil) -+ return err == nil -+} -+ -+func MD4(p []byte) (sum [16]byte) { -+ if !hashOneShot(crypto.MD4, p, sum[:]) { -+ panic("openssl: MD4 failed") -+ } -+ return -+} -+ -+func MD5(p []byte) (sum [16]byte) { -+ if !hashOneShot(crypto.MD5, p, sum[:]) { -+ panic("openssl: MD5 failed") -+ } -+ return -+} -+ -+func SHA1(p []byte) (sum [20]byte) { -+ if !hashOneShot(crypto.SHA1, p, sum[:]) { -+ panic("openssl: SHA1 failed") -+ } -+ return -+} -+ -+func SHA224(p []byte) (sum [28]byte) { -+ if !hashOneShot(crypto.SHA224, p, sum[:]) { -+ panic("openssl: SHA224 failed") -+ } -+ return -+} -+ -+func SHA256(p []byte) (sum [32]byte) { -+ if !hashOneShot(crypto.SHA256, p, sum[:]) { -+ panic("openssl: SHA256 failed") -+ } -+ return -+} -+ -+func SHA384(p []byte) (sum [48]byte) { -+ if !hashOneShot(crypto.SHA384, p, sum[:]) { -+ panic("openssl: SHA384 failed") -+ } -+ return -+} -+ -+func SHA512(p []byte) (sum [64]byte) { -+ if !hashOneShot(crypto.SHA512, p, sum[:]) { -+ panic("openssl: SHA512 failed") -+ } -+ return -+} -+ -+func SHA512_224(p []byte) (sum [28]byte) { -+ if !hashOneShot(crypto.SHA512_224, p, sum[:]) { -+ panic("openssl: SHA512 failed") -+ } -+ return -+} -+ -+func SHA512_256(p []byte) (sum [32]byte) { -+ if !hashOneShot(crypto.SHA512_256, p, sum[:]) { -+ panic("openssl: SHA512_256 failed") -+ } -+ return -+} -+ -+// cacheHashSupported is a cache of crypto.Hash support. -+var cacheHashSupported sync.Map -+ -+// SupportsHash reports whether the current OpenSSL version supports the given hash. -+func SupportsHash(h crypto.Hash) bool { -+ if v, ok := cacheHashSupported.Load(h); ok { -+ return v.(bool) -+ } -+ alg := loadHash(h, false) -+ if alg == nil { -+ cacheHashSupported.Store(h, false) -+ return false -+ } -+ // EVP_MD objects can be non-nil even when they can't be used -+ // in a EVP_MD_CTX, e.g. MD5 in FIPS mode. We need to prove -+ // if they can be used by passing them to a EVP_MD_CTX. -+ var supported bool -+ if ctx, _ := ossl.EVP_MD_CTX_new(); ctx != nil { -+ _, err := ossl.EVP_DigestInit_ex(ctx, alg.md, nil) -+ supported = err == nil -+ ossl.EVP_MD_CTX_free(ctx) -+ } -+ cacheHashSupported.Store(h, supported) -+ return supported -+} -+ -+func SumSHA3_224(p []byte) (sum [28]byte) { -+ if !hashOneShot(crypto.SHA3_224, p, sum[:]) { -+ panic("openssl: SHA3_224 failed") -+ } -+ return -+} -+ -+func SumSHA3_256(p []byte) (sum [32]byte) { -+ if !hashOneShot(crypto.SHA3_256, p, sum[:]) { -+ panic("openssl: SHA3_256 failed") -+ } -+ return -+} -+ -+func SumSHA3_384(p []byte) (sum [48]byte) { -+ if !hashOneShot(crypto.SHA3_384, p, sum[:]) { -+ panic("openssl: SHA3_384 failed") -+ } -+ return -+} -+ -+func SumSHA3_512(p []byte) (sum [64]byte) { -+ if !hashOneShot(crypto.SHA3_512, p, sum[:]) { -+ panic("openssl: SHA3_512 failed") -+ } -+ return -+} -+ -+// NewMD4 returns a new MD4 hash. -+// State marshaling and unmarshaling return errors.ErrUnsupported. -+func NewMD4() *Hash { -+ return newHash(crypto.MD4) -+} -+ -+// NewMD5 returns a new MD5 hash. -+func NewMD5() *Hash { -+ return newHash(crypto.MD5) -+} -+ -+// NewSHA1 returns a new SHA1 hash. -+func NewSHA1() *Hash { -+ return newHash(crypto.SHA1) -+} -+ -+// NewSHA224 returns a new SHA224 hash. -+func NewSHA224() *Hash { -+ return newHash(crypto.SHA224) -+} -+ -+// NewSHA256 returns a new SHA256 hash. -+func NewSHA256() *Hash { -+ return newHash(crypto.SHA256) -+} -+ -+// NewSHA384 returns a new SHA384 hash. -+func NewSHA384() *Hash { -+ return newHash(crypto.SHA384) -+} -+ -+// NewSHA512 returns a new SHA512 hash. -+func NewSHA512() *Hash { -+ return newHash(crypto.SHA512) -+} -+ -+// NewSHA512_224 returns a new SHA512_224 hash. -+func NewSHA512_224() *Hash { -+ return newHash(crypto.SHA512_224) -+} -+ -+// NewSHA512_256 returns a new SHA512_256 hash. -+func NewSHA512_256() *Hash { -+ return newHash(crypto.SHA512_256) -+} -+ -+// NewSHA3_224 returns a new SHA3-224 hash. -+func NewSHA3_224() *Hash { -+ return newHash(crypto.SHA3_224) -+} -+ -+// NewSHA3_256 creates a new SHA3-256 hash. -+func NewSHA3_256() *Hash { -+ return newHash(crypto.SHA3_256) -+} -+ -+// NewSHA3_384 creates a new SHA3-384 hash. -+func NewSHA3_384() *Hash { -+ return newHash(crypto.SHA3_384) -+} -+ -+// NewSHA3_512 creates a new SHA3-512 hash. -+func NewSHA3_512() *Hash { -+ return newHash(crypto.SHA3_512) -+} -+ -+var _ hash.Hash = (*Hash)(nil) -+var _ hash.Cloner = (*Hash)(nil) -+ -+// FIPSApprovedHash reports whether this hash algorithm is FIPS 140-3 approved. -+func FIPSApprovedHash(h hash.Hash) bool { -+ xh, ok := h.(*Hash) -+ if !ok { -+ return false -+ } -+ switch xh.alg.ch { -+ case crypto.SHA224, crypto.SHA256, crypto.SHA384, crypto.SHA512, -+ crypto.SHA512_224, crypto.SHA512_256, -+ crypto.SHA3_224, crypto.SHA3_256, crypto.SHA3_384, crypto.SHA3_512: -+ return true -+ default: -+ return false -+ } -+} -+ -+// hashBufSize is the size of the buffer used for hashing. -+// 256 bytes is a reasonable compromise for general purpose use, -+// and the resulting evpHash size is still similar to the -+// upstream sha512 hash object. -+const hashBufSize = 256 -+ -+// Hash implements generic hash methods. -+type Hash struct { -+ alg *hashAlgorithm -+ ctx ossl.EVP_MD_CTX_PTR -+ // ctx2 is used in Hash.Sum to avoid changing -+ // the state of ctx. Having it here allows reusing the -+ // same allocated object multiple times. -+ ctx2 ossl.EVP_MD_CTX_PTR -+ -+ // buf is a buffer for data not yet written to ctx. -+ // It is used to reduce calls into OpenSSL for small writes. -+ // The buffer size is a trade-off between memory usage and -+ // number of calls into OpenSSL. -+ buf [hashBufSize]byte -+ nbuf int -+} -+ -+func newHash(ch crypto.Hash) *Hash { -+ // Don't call init() yet, it would be wasteful -+ // if the caller only wants to know the hash type. This -+ // is a common pattern in this package, as some functions -+ // accept a hash constructor parameter and call it just -+ // to know the hash type. -+ return &Hash{alg: loadHash(ch, true)} -+} -+ -+func (h *Hash) finalize() { -+ if h.ctx != nil { -+ ossl.EVP_MD_CTX_free(h.ctx) -+ } -+ if h.ctx2 != nil { -+ ossl.EVP_MD_CTX_free(h.ctx2) -+ } -+} -+ -+func (h *Hash) init() { -+ if h.ctx != nil { -+ return -+ } -+ var err error -+ h.ctx, err = ossl.EVP_MD_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_DigestInit_ex(h.ctx, h.alg.md, nil); err != nil { -+ ossl.EVP_MD_CTX_free(h.ctx) -+ panic(err) -+ } -+ h.ctx2, err = ossl.EVP_MD_CTX_new() -+ if err != nil { -+ ossl.EVP_MD_CTX_free(h.ctx) -+ panic(err) -+ } -+ runtime.SetFinalizer(h, (*Hash).finalize) -+} -+ -+func (h *Hash) write(p []byte) int { -+ if len(p) == 0 { -+ return 0 -+ } -+ if h.nbuf > 0 && h.nbuf+len(p) > len(h.buf) { -+ // We have buffered data and adding p would exceed the buffer, -+ // flush the buffer first. -+ h.flush() -+ } -+ if len(p) > len(h.buf) { -+ // p is larger than the buffer, write it directly. -+ h.init() -+ if _, err := ossl.EVP_DigestUpdate(h.ctx, p); err != nil { -+ panic(err) -+ } -+ } else { -+ // Otherwise, buffer it. -+ h.nbuf += copy(h.buf[h.nbuf:], p) -+ } -+ runtime.KeepAlive(h) -+ return len(p) -+} -+ -+func (h *Hash) flush() { -+ h.init() -+ if h.nbuf > 0 { -+ if _, err := ossl.EVP_DigestUpdate(h.ctx, h.buf[:h.nbuf]); err != nil { -+ panic(err) -+ } -+ h.nbuf = 0 -+ } -+} -+ -+func (h *Hash) Reset() { -+ h.nbuf = 0 -+ if h.ctx == nil { -+ // The hash is not initialized yet, no need to reset ctx. -+ return -+ } -+ // There is no need to reset h.ctx2 because it is always reset in evpHash.Sum. -+ if _, err := ossl.EVP_DigestInit_ex(h.ctx, nil, nil); err != nil { -+ panic(err) -+ } -+ runtime.KeepAlive(h) -+} -+ -+func (h *Hash) Write(p []byte) (int, error) { -+ return h.write(p), nil -+} -+ -+func (h *Hash) WriteString(s string) (int, error) { -+ return h.write(unsafe.Slice(unsafe.StringData(s), len(s))), nil -+} -+ -+func (h *Hash) WriteByte(c byte) error { -+ h.write(unsafe.Slice(&c, 1)) -+ return nil -+} -+ -+func (h *Hash) Size() int { -+ return h.alg.size -+} -+ -+func (h *Hash) BlockSize() int { -+ return h.alg.blockSize -+} -+ -+func (h *Hash) Sum(in []byte) []byte { -+ out := append(in, make([]byte, h.Size(), maxHashSize)...) -+ if h.ctx == nil { -+ // Fast path: if ctx hasn't been initialized, all data is in the buffer -+ // and we can use the one-shot EVP_Digest function. -+ if _, err := ossl.EVP_Digest(h.buf[:h.nbuf], out[len(in):], nil, h.alg.md, nil); err != nil { -+ panic(err) -+ } -+ return out -+ } -+ // Slow path: copy h.ctx into h.ctx2 and call EVP_DigestFinal_ex using h.ctx2. -+ // This is necessary because Go hash.Hash mandates that Sum has no effect -+ // on the underlying stream. In particular it is OK to Sum, then Write more, -+ // then Sum again, and the second Sum acts as if the first didn't happen. -+ if _, err := ossl.EVP_MD_CTX_copy_ex(h.ctx2, h.ctx); err != nil { -+ panic(err) -+ } -+ if h.nbuf > 0 { -+ // If we have buffered data, update ctx2 with it -+ if _, err := ossl.EVP_DigestUpdate(h.ctx2, h.buf[:h.nbuf]); err != nil { -+ panic(err) -+ } -+ } -+ if _, err := ossl.EVP_DigestFinal_ex(h.ctx2, out[len(in):], nil); err != nil { -+ panic(err) -+ } -+ runtime.KeepAlive(h) -+ return out -+} -+ -+// Clone returns a new Hash object that is a deep clone of itself. -+// The duplicate object contains all state and data contained in the -+// original object at the point of duplication. -+func (h *Hash) Clone() (hash.Cloner, error) { -+ h2 := &Hash{alg: h.alg, nbuf: h.nbuf} -+ copy(h2.buf[:h.nbuf], h.buf[:h.nbuf]) -+ if h.ctx != nil { -+ var err error -+ h2.ctx, err = ossl.EVP_MD_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ if _, err := ossl.EVP_MD_CTX_copy_ex(h2.ctx, h.ctx); err != nil { -+ ossl.EVP_MD_CTX_free(h2.ctx) -+ panic(err) -+ } -+ h2.ctx2, err = ossl.EVP_MD_CTX_new() -+ if err != nil { -+ ossl.EVP_MD_CTX_free(h2.ctx) -+ panic(err) -+ } -+ runtime.SetFinalizer(h2, (*Hash).finalize) -+ } -+ runtime.KeepAlive(h) -+ return h2, nil -+} -+ -+type errMarshallUnsupported struct{} -+ -+func (e errMarshallUnsupported) Error() string { -+ return "cryptokit: hash state is not marshallable" -+} -+ -+func (e errMarshallUnsupported) Unwrap() error { -+ return errors.ErrUnsupported -+} -+ -+func (d *Hash) MarshalBinary() ([]byte, error) { -+ if d.alg == nil || !d.alg.marshallable { -+ return nil, errMarshallUnsupported{} -+ } -+ buf := make([]byte, 0, d.alg.marshalledSize) -+ return d.AppendBinary(buf) -+} -+ -+func (d *Hash) AppendBinary(buf []byte) ([]byte, error) { -+ defer runtime.KeepAlive(d) -+ if d.alg == nil || !d.alg.marshallable { -+ return nil, errMarshallUnsupported{} -+ } -+ d.flush() -+ switch d.alg.provider { -+ case providerOSSLDefault, providerOSSLFIPS: -+ return osslHashAppendBinary(d.ctx, d.alg.ch, d.alg.magic, buf) -+ case providerSymCrypt: -+ return symCryptHashAppendBinary(d.ctx, d.alg.ch, d.alg.magic, buf) -+ default: -+ panic("openssl: unknown hash provider" + strconv.Itoa(int(d.alg.provider))) -+ } -+} -+ -+func (d *Hash) UnmarshalBinary(b []byte) error { -+ defer runtime.KeepAlive(d) -+ d.flush() -+ if d.alg == nil || !d.alg.marshallable { -+ return errMarshallUnsupported{} -+ } -+ if len(b) < len(d.alg.magic) || string(b[:len(d.alg.magic)]) != d.alg.magic { -+ return errors.New("openssl: invalid hash state identifier") -+ } -+ if len(b) != d.alg.marshalledSize { -+ return errors.New("openssl: invalid hash state size") -+ } -+ switch d.alg.provider { -+ case providerOSSLDefault, providerOSSLFIPS: -+ return osslHashUnmarshalBinary(d.ctx, d.alg.ch, d.alg.magic, b) -+ case providerSymCrypt: -+ return symCryptHashUnmarshalBinary(d.ctx, d.alg.ch, d.alg.magic, b) -+ default: -+ panic("openssl: unknown hash provider" + strconv.Itoa(int(d.alg.provider))) -+ } -+} -+ -+// appendUint64 appends x into b as a big endian byte sequence. -+func appendUint64(b []byte, x uint64) []byte { -+ return append(b, -+ byte(x>>56), -+ byte(x>>48), -+ byte(x>>40), -+ byte(x>>32), -+ byte(x>>24), -+ byte(x>>16), -+ byte(x>>8), -+ byte(x), -+ ) -+} -+ -+// appendUint32 appends x into b as a big endian byte sequence. -+func appendUint32(b []byte, x uint32) []byte { -+ return append(b, byte(x>>24), byte(x>>16), byte(x>>8), byte(x)) -+} -+ -+// consumeUint64 reads a big endian uint64 number from b. -+func consumeUint64(b []byte) ([]byte, uint64) { -+ _ = b[7] -+ x := uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | -+ uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 -+ return b[8:], x -+} -+ -+// consumeUint32 reads a big endian uint32 number from b. -+func consumeUint32(b []byte) ([]byte, uint32) { -+ _ = b[3] -+ x := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 -+ return b[4:], x -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hkdf.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hkdf.go -new file mode 100644 -index 00000000000000..ac6771f2babe5b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hkdf.go -@@ -0,0 +1,312 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "hash" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// SupprtHKDF reports whether the current OpenSSL version supports HKDF. -+func SupportsHKDF() bool { -+ switch major() { -+ case 1: -+ return true -+ default: -+ _, err := fetchHKDF3() -+ return err == nil -+ } -+} -+ -+// SupprtsTLS13KDF reports whether the current OpenSSL version supports TLS13-KDF. -+func SupportsTLS13KDF() bool { -+ switch major() { -+ case 1: -+ return false -+ default: -+ // TLS13-KDF is available in OpenSSL 3.0.0 and later. -+ _, err := fetchTLS13_KDF() -+ return err == nil -+ } -+} -+ -+func newHKDFCtx1(md ossl.EVP_MD_PTR, mode int32, secret, salt, pseudorandomKey, info []byte) (ctx ossl.EVP_PKEY_CTX_PTR, err error) { -+ ctx, err = ossl.EVP_PKEY_CTX_new_id(ossl.EVP_PKEY_HKDF, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if err != nil { -+ ossl.EVP_PKEY_CTX_free(ctx) -+ } -+ }() -+ -+ if _, err := ossl.EVP_PKEY_derive_init(ctx); err != nil { -+ return ctx, err -+ } -+ -+ ctrlSlice := func(ctrl int32, data []byte) bool { -+ if err != nil { -+ return false -+ } -+ if len(data) == 0 { -+ return true // No data to set. -+ } -+ _, err = ossl.EVP_PKEY_CTX_ctrl(ctx, -1, ossl.EVP_PKEY_OP_DERIVE, ctrl, int32(len(data)), unsafe.Pointer(base(data))) -+ return err == nil -+ } -+ -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, ossl.EVP_PKEY_OP_DERIVE, ossl.EVP_PKEY_CTRL_HKDF_MODE, mode, nil); err != nil { -+ return ctx, err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, ossl.EVP_PKEY_OP_DERIVE, ossl.EVP_PKEY_CTRL_HKDF_MD, 0, unsafe.Pointer(md)); err != nil { -+ return ctx, err -+ } -+ if ctrlSlice(ossl.EVP_PKEY_CTRL_HKDF_KEY, secret) && -+ ctrlSlice(ossl.EVP_PKEY_CTRL_HKDF_SALT, salt) && -+ ctrlSlice(ossl.EVP_PKEY_CTRL_HKDF_KEY, pseudorandomKey) && -+ ctrlSlice(ossl.EVP_PKEY_CTRL_HKDF_INFO, info) { -+ return ctx, err -+ } -+ return ctx, nil -+} -+ -+// hkdfAllZerosSalt is a preallocated buffer of zeros used in ExtractHKDF(). -+// The size should be kept as large as the output length of any hash algorithm -+// used with HKDF. -+var hkdfAllZerosSalt [64]byte -+ -+// ExtractHKDF implements the HKDF extract step. -+// If salt is nil, then this function replaces it internally with a buffer of -+// zeros whose length equals the output length of the specified hash algorithm. -+func ExtractHKDF[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ if !SupportsHKDF() { -+ return nil, errUnsupportedVersion() -+ } -+ -+ md, err := hashFuncToMD(h) -+ if err != nil { -+ return nil, err -+ } -+ -+ // If calling code specifies nil salt, replace it with a buffer of hashLen -+ // zeros, as specified in RFC 5896 and as OpenSSL EVP_KDF-HKDF documentation -+ // instructs. Take a slice of a preallocated buffer to avoid allocating new -+ // buffer per call, but fall back to allocating a buffer if preallocated -+ // buffer is not large enough. -+ if salt == nil { -+ hlen := h().Size() -+ if hlen > len(hkdfAllZerosSalt) { -+ salt = make([]byte, hlen) -+ } else { -+ salt = hkdfAllZerosSalt[:hlen] -+ } -+ } -+ -+ switch major() { -+ case 1: -+ ctx, err := newHKDFCtx1(md, ossl.EVP_KDF_HKDF_MODE_EXTRACT_ONLY, secret, salt, nil, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ var keylen int -+ if _, err := ossl.EVP_PKEY_derive(ctx, nil, &keylen); err != nil { -+ return nil, err -+ } -+ out := make([]byte, keylen) -+ if _, err := ossl.EVP_PKEY_derive(ctx, out, &keylen); err != nil { -+ return nil, err -+ } -+ return out[:keylen], nil -+ default: -+ ctx, err := newHKDFCtx3(md, ossl.EVP_KDF_HKDF_MODE_EXTRACT_ONLY, secret, salt, nil, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_KDF_CTX_free(ctx) -+ size, err := ossl.EVP_KDF_CTX_get_kdf_size(ctx) -+ if err != nil { -+ return nil, err -+ } -+ out := make([]byte, size) -+ if _, err := ossl.EVP_KDF_derive(ctx, out, nil); err != nil { -+ return nil, err -+ } -+ return out, nil -+ } -+} -+ -+// ExpandHKDF derives a key from the given hash, key, and optional context info. -+func ExpandHKDF[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLength int) ([]byte, error) { -+ if !SupportsHKDF() { -+ return nil, errUnsupportedVersion() -+ } -+ -+ md, err := hashFuncToMD(h) -+ if err != nil { -+ return nil, err -+ } -+ -+ out := make([]byte, keyLength) -+ switch major() { -+ case 1: -+ ctx, err := newHKDFCtx1(md, ossl.EVP_KDF_HKDF_MODE_EXPAND_ONLY, nil, nil, pseudorandomKey, info) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if len(out) == 0 { -+ // Nothing to do, so exit early. -+ // We also can't call EVP_PKEY_derive because some engines error on zero-length output. -+ // We can only exit after calling newHKDFCtx1 because we still need it to validate the parameters. -+ return out, nil -+ } -+ keylen := keyLength -+ if _, err := ossl.EVP_PKEY_derive(ctx, out, &keylen); err != nil { -+ return nil, err -+ } -+ default: -+ ctx, err := newHKDFCtx3(md, ossl.EVP_KDF_HKDF_MODE_EXPAND_ONLY, nil, nil, pseudorandomKey, info) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_KDF_CTX_free(ctx) -+ if len(out) == 0 { -+ // Nothing to do, so exit early. -+ // We also can't call EVP_PKEY_derive because some engines error on zero-length output. -+ // We can only exit after calling newHKDFCtx3 because we still need it to validate the parameters. -+ return out, nil -+ } -+ if _, err := ossl.EVP_KDF_derive(ctx, out, nil); err != nil { -+ return nil, err -+ } -+ } -+ return out, nil -+} -+ -+// ExpandTLS13KDF derives a key from the given hash, key, label and context. It will use -+// "TLS13-KDF" algorithm to do so. -+func ExpandTLS13KDF[H hash.Hash](h func() H, pseudorandomKey, label, context []byte, keyLength int) ([]byte, error) { -+ if !SupportsTLS13KDF() { -+ return nil, errUnsupportedVersion() -+ } -+ -+ md, err := hashFuncToMD(h) -+ if err != nil { -+ return nil, err -+ } -+ -+ out := make([]byte, keyLength) -+ -+ ctx, err := newTLS13KDFExpandCtx3(md, label, context, pseudorandomKey) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_KDF_CTX_free(ctx) -+ if _, err := ossl.EVP_KDF_derive(ctx, out, nil); err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+// fetchTLS13_KDF fetches the TLS13-KDF algorithm. -+// It is safe to call this function concurrently. -+// The returned EVP_KDF_PTR shouldn't be freed. -+var fetchTLS13_KDF = sync.OnceValues(func() (ossl.EVP_KDF_PTR, error) { -+ kdf, err := ossl.EVP_KDF_fetch(nil, _OSSL_KDF_NAME_TLS13_KDF.ptr(), nil) -+ if err != nil { -+ return nil, err -+ } -+ return kdf, nil -+}) -+ -+// newTLS13KDFExpandCtx3 fetches the "TLS13-KDF" for TLS 1.3 handshakes. -+func newTLS13KDFExpandCtx3(md ossl.EVP_MD_PTR, label, context, pseudorandomKey []byte) (_ ossl.EVP_KDF_CTX_PTR, err error) { -+ kdf, err := fetchTLS13_KDF() -+ if err != nil { -+ return nil, err -+ } -+ -+ ctx, err := ossl.EVP_KDF_CTX_new(kdf) -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if err != nil { -+ ossl.EVP_KDF_CTX_free(ctx) -+ } -+ }() -+ -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addUTF8String(_OSSL_KDF_PARAM_DIGEST, ossl.EVP_MD_get0_name(md), 0) -+ bld.addInt32(_OSSL_KDF_PARAM_MODE, int32(ossl.EVP_KDF_HKDF_MODE_EXPAND_ONLY)) -+ bld.addOctetString(_OSSL_KDF_PARAM_PREFIX, []byte("tls13 ")) -+ bld.addOctetString(_OSSL_KDF_PARAM_LABEL, label) -+ bld.addOctetString(_OSSL_KDF_PARAM_DATA, context) -+ bld.addOctetString(_OSSL_KDF_PARAM_KEY, pseudorandomKey) -+ -+ params, err := bld.build() -+ if err != nil { -+ return ctx, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ if _, err := ossl.EVP_KDF_CTX_set_params(ctx, params); err != nil { -+ return ctx, err -+ } -+ return ctx, nil -+} -+ -+// fetchHKDF3 fetches the HKDF algorithm. -+// It is safe to call this function concurrently. -+// The returned EVP_KDF_PTR shouldn't be freed. -+var fetchHKDF3 = sync.OnceValues(func() (ossl.EVP_KDF_PTR, error) { -+ kdf, err := ossl.EVP_KDF_fetch(nil, _OSSL_KDF_NAME_HKDF.ptr(), nil) -+ if err != nil { -+ return nil, err -+ } -+ return kdf, nil -+}) -+ -+// newHKDFCtx3 implements HKDF for OpenSSL 3 using the EVP_KDF API. -+func newHKDFCtx3(md ossl.EVP_MD_PTR, mode int32, secret, salt, pseudorandomKey, info []byte) (_ ossl.EVP_KDF_CTX_PTR, err error) { -+ kdf, err := fetchHKDF3() -+ if err != nil { -+ return nil, err -+ } -+ ctx, err := ossl.EVP_KDF_CTX_new(kdf) -+ if err != nil { -+ return nil, err -+ } -+ defer func() { -+ if err != nil { -+ ossl.EVP_KDF_CTX_free(ctx) -+ } -+ }() -+ -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addInt32(_OSSL_KDF_PARAM_FIPS_KEY_CHECK, 0) -+ bld.addUTF8String(_OSSL_KDF_PARAM_DIGEST, ossl.EVP_MD_get0_name(md), 0) -+ bld.addInt32(_OSSL_KDF_PARAM_MODE, int32(mode)) -+ bld.addOctetString(_OSSL_KDF_PARAM_KEY, secret) -+ bld.addOctetString(_OSSL_KDF_PARAM_SALT, salt) -+ bld.addOctetString(_OSSL_KDF_PARAM_KEY, pseudorandomKey) -+ bld.addOctetString(_OSSL_KDF_PARAM_INFO, info) -+ params, err := bld.build() -+ if err != nil { -+ return ctx, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ if _, err := ossl.EVP_KDF_CTX_set_params(ctx, params); err != nil { -+ return ctx, err -+ } -+ return ctx, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hmac.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hmac.go -new file mode 100644 -index 00000000000000..16d59d713d77c5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/hmac.go -@@ -0,0 +1,269 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "hash" -+ "runtime" -+ "slices" -+ "sync" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// NewHMAC returns a new HMAC using OpenSSL. -+// The function fh must return a hash implemented by -+// OpenSSL (for example, [NewSHA256]). -+// If fh is not recognized, NewHMAC returns nil. -+func NewHMAC[H hash.Hash](fh func() H, key []byte) hash.Hash { -+ h, _ := hashFuncHash(fh) -+ md := hashToMD(h) -+ if md == nil { -+ return nil -+ } -+ -+ if len(key) == 0 { -+ // This is supported in OpenSSL/Standard lib and as such -+ // we must support it here. When using HMAC with a null key -+ // HMAC_Init will try and reuse the key from the ctx. This is -+ // not the behavior previously implemented, so as a workaround -+ // we pass an "empty" key. -+ key = make([]byte, ossl.EVP_MAX_MD_SIZE) -+ } -+ -+ hmac := &opensslHMAC{ -+ size: h.Size(), -+ blockSize: h.BlockSize(), -+ } -+ -+ switch major() { -+ case 1: -+ ctx := newHMAC1(key, md) -+ if ctx.ctx == nil { -+ return nil -+ } -+ hmac.ctx1 = ctx -+ default: -+ ctx := newHMAC3(key, md) -+ if ctx.ctx == nil { -+ return nil -+ } -+ hmac.ctx3 = ctx -+ } -+ runtime.SetFinalizer(hmac, (*opensslHMAC).finalize) -+ return hmac -+} -+ -+// hmacCtx3 is used for OpenSSL 1. -+type hmacCtx1 struct { -+ ctx ossl.HMAC_CTX_PTR -+} -+ -+// hmacCtx3 is used for OpenSSL 3. -+type hmacCtx3 struct { -+ ctx ossl.EVP_MAC_CTX_PTR -+ key []byte // only set for OpenSSL 3.0.0, 3.0.1, and 3.0.2. -+} -+ -+type opensslHMAC struct { -+ ctx1 hmacCtx1 -+ ctx3 hmacCtx3 -+ size int -+ blockSize int -+ sum [maxHashSize]byte -+} -+ -+func newHMAC1(key []byte, md ossl.EVP_MD_PTR) hmacCtx1 { -+ ctx, err := ossl.HMAC_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ if _, err := ossl.HMAC_Init_ex(ctx, key, md, nil); err != nil { -+ panic(err) -+ } -+ return hmacCtx1{ctx} -+} -+ -+var hmacDigestsSupported sync.Map -+var fetchHMAC3 = sync.OnceValue(func() ossl.EVP_MAC_PTR { -+ mac, err := ossl.EVP_MAC_fetch(nil, _OSSL_MAC_NAME_HMAC.ptr(), nil) -+ if err != nil { -+ panic(err) -+ } -+ return mac -+}) -+ -+func buildHMAC3Params(md ossl.EVP_MD_PTR) (ossl.OSSL_PARAM_PTR, error) { -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addUTF8String(_OSSL_MAC_PARAM_DIGEST, ossl.EVP_MD_get0_name(md), 0) -+ bld.addInt32(_OSSL_MAC_PARAM_FIPS_KEY_CHECK, 0) -+ return bld.build() -+} -+ -+func isHMAC3DigestSupported(md ossl.EVP_MD_PTR) bool { -+ nid := ossl.EVP_MD_get_type(md) -+ if v, ok := hmacDigestsSupported.Load(nid); ok { -+ return v.(bool) -+ } -+ ctx, err := ossl.EVP_MAC_CTX_new(fetchHMAC3()) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_MAC_CTX_free(ctx) -+ -+ params, err := buildHMAC3Params(md) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ _, err = ossl.EVP_MAC_CTX_set_params(ctx, params) -+ supported := err == nil -+ hmacDigestsSupported.Store(nid, supported) -+ return supported -+} -+ -+func newHMAC3(key []byte, md ossl.EVP_MD_PTR) hmacCtx3 { -+ if !isHMAC3DigestSupported(md) { -+ // The digest is not supported by the HMAC provider. -+ // Don't panic here so the Go standard library to -+ // fall back to the Go implementation. -+ // See https://github.com/golang-fips/openssl/issues/153. -+ return hmacCtx3{} -+ } -+ params, err := buildHMAC3Params(md) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ ctx, err := ossl.EVP_MAC_CTX_new(fetchHMAC3()) -+ if err != nil { -+ panic(err) -+ } -+ -+ if _, err := ossl.EVP_MAC_init(ctx, key, params); err != nil { -+ ossl.EVP_MAC_CTX_free(ctx) -+ panic(err) -+ } -+ var hkey []byte -+ //versionguardcheck:ignore OpenSSL 3.0.0–3.0.2 EVP_MAC_init does not reset without a key: https://github.com/openssl/openssl/issues/17811. -+ if major() == 3 && minor() == 0 && patch() <= 2 { -+ // EVP_MAC_init only resets the ctx internal state if a key is passed -+ // when using OpenSSL 3.0.0, 3.0.1, and 3.0.2. Save a copy of the key -+ // in the context so Reset can use it later. New OpenSSL versions -+ // do not have this issue so it isn't necessary to save the key. -+ hkey = make([]byte, len(key)) -+ copy(hkey, key) -+ } -+ return hmacCtx3{ctx, hkey} -+} -+ -+func (h *opensslHMAC) Reset() { -+ switch major() { -+ case 1: -+ if _, err := ossl.HMAC_Init_ex(h.ctx1.ctx, nil, nil, nil); err != nil { -+ panic(err) -+ } -+ default: -+ if _, err := ossl.EVP_MAC_init(h.ctx3.ctx, h.ctx3.key, nil); err != nil { -+ panic(err) -+ } -+ } -+ -+ runtime.KeepAlive(h) // Next line will keep h alive too; just making doubly sure. -+} -+ -+func (h *opensslHMAC) finalize() { -+ if h.ctx1.ctx != nil { -+ ossl.HMAC_CTX_free(h.ctx1.ctx) -+ } -+ if h.ctx3.ctx != nil { -+ ossl.EVP_MAC_CTX_free(h.ctx3.ctx) -+ } -+} -+ -+func (h *opensslHMAC) Write(p []byte) (int, error) { -+ if len(p) > 0 { -+ switch major() { -+ case 1: -+ ossl.HMAC_Update(h.ctx1.ctx, p) -+ default: -+ ossl.EVP_MAC_update(h.ctx3.ctx, p) -+ } -+ } -+ runtime.KeepAlive(h) -+ return len(p), nil -+} -+ -+func (h *opensslHMAC) Size() int { -+ return h.size -+} -+ -+func (h *opensslHMAC) BlockSize() int { -+ return h.blockSize -+} -+ -+func (h *opensslHMAC) Sum(in []byte) []byte { -+ // Make copy of context because Go hash.Hash mandates -+ // that Sum has no effect on the underlying stream. -+ // In particular it is OK to Sum, then Write more, then Sum again, -+ // and the second Sum acts as if the first didn't happen. -+ switch major() { -+ case 1: -+ ctx2, err := ossl.HMAC_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.HMAC_CTX_free(ctx2) -+ if _, err := ossl.HMAC_CTX_copy(ctx2, h.ctx1.ctx); err != nil { -+ panic(err) -+ } -+ ossl.HMAC_Final(ctx2, h.sum[:h.size], nil) -+ default: -+ ctx2, err := ossl.EVP_MAC_CTX_dup(h.ctx3.ctx) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_MAC_CTX_free(ctx2) -+ ossl.EVP_MAC_final(ctx2, h.sum[:h.size], nil) -+ } -+ return append(in, h.sum[:h.size]...) -+} -+ -+func (h *opensslHMAC) Clone() (hash.Cloner, error) { -+ switch major() { -+ case 1: -+ ctx2, err := ossl.HMAC_CTX_new() -+ if err != nil { -+ panic(err) -+ } -+ if _, err := ossl.HMAC_CTX_copy(ctx2, h.ctx1.ctx); err != nil { -+ ossl.HMAC_CTX_free(ctx2) -+ panic(err) -+ } -+ cl := &opensslHMAC{ -+ ctx1: hmacCtx1{ctx: ctx2}, -+ size: h.size, -+ blockSize: h.blockSize, -+ } -+ runtime.SetFinalizer(cl, (*opensslHMAC).finalize) -+ return cl, nil -+ -+ default: -+ ctx2, err := ossl.EVP_MAC_CTX_dup(h.ctx3.ctx) -+ if err != nil { -+ panic(err) -+ } -+ -+ cl := &opensslHMAC{ -+ ctx3: hmacCtx3{ctx: ctx2, key: slices.Clone(h.ctx3.key)}, -+ size: h.size, -+ blockSize: h.blockSize, -+ } -+ runtime.SetFinalizer(cl, (*opensslHMAC).finalize) -+ return cl, nil -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mldsa.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mldsa.go -new file mode 100644 -index 00000000000000..97fc7406f75353 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mldsa.go -@@ -0,0 +1,499 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "errors" -+ "sync" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+const ( -+ // privateKeySizeMLDSA is the size of an ML-DSA private key seed. -+ privateKeySizeMLDSA = 32 -+ -+ // publicKeySizeMLDSA44 is the size of an ML-DSA-44 public key encoding. -+ publicKeySizeMLDSA44 = 1312 -+ -+ // publicKeySizeMLDSA65 is the size of an ML-DSA-65 public key encoding. -+ publicKeySizeMLDSA65 = 1952 -+ -+ // publicKeySizeMLDSA87 is the size of an ML-DSA-87 public key encoding. -+ publicKeySizeMLDSA87 = 2592 -+ -+ // signatureSizeMLDSA44 is the size of an ML-DSA-44 signature. -+ signatureSizeMLDSA44 = 2420 -+ -+ // signatureSizeMLDSA65 is the size of an ML-DSA-65 signature. -+ signatureSizeMLDSA65 = 3309 -+ -+ // signatureSizeMLDSA87 is the size of an ML-DSA-87 signature. -+ signatureSizeMLDSA87 = 4627 -+ -+ // muSizeMLDSA is the size of the pre-hashed mu input to the external-mu -+ // variants of Sign and Verify. -+ muSizeMLDSA = 64 -+ -+ // maxContextSizeMLDSA is the maximum allowed length of the context string -+ // passed to Sign and Verify. -+ maxContextSizeMLDSA = 255 -+) -+ -+// SupportsMLDSA returns true if the given ML-DSA parameter set is supported -+// on this platform. Providers may not implement every security level, so -+// callers must probe each parameter set they intend to use. -+func SupportsMLDSA(params MLDSAParameters) bool { -+ switch params.keyType { -+ case ossl.EVP_PKEY_ML_DSA_44: -+ return supportsMLDSA44() -+ case ossl.EVP_PKEY_ML_DSA_65: -+ return supportsMLDSA65() -+ case ossl.EVP_PKEY_ML_DSA_87: -+ return supportsMLDSA87() -+ default: -+ return false -+ } -+} -+ -+// probeMLDSA reports whether the OpenSSL provider exposes the given ML-DSA -+// algorithm via the keymgmt fetch interface. ML-DSA was added in OpenSSL 3.5; -+// older 3.x releases return nil for unknown algorithm names, and 1.x lacks -+// the fetch interface entirely. -+func probeMLDSA(name cString) bool { -+ if !ossl.EVP_KEYMGMT_fetch_Available() { -+ return false -+ } -+ mgmt, _ := ossl.EVP_KEYMGMT_fetch(nil, name.ptr(), nil) -+ if mgmt == nil { -+ return false -+ } -+ ossl.EVP_KEYMGMT_free(mgmt) -+ return true -+} -+ -+var ( -+ supportsMLDSA44 = sync.OnceValue(func() bool { return probeMLDSA(_KeyTypeMLDSA44) }) -+ supportsMLDSA65 = sync.OnceValue(func() bool { return probeMLDSA(_KeyTypeMLDSA65) }) -+ supportsMLDSA87 = sync.OnceValue(func() bool { return probeMLDSA(_KeyTypeMLDSA87) }) -+) -+ -+// MLDSAParameters represents one of the fixed ML-DSA parameter sets. -+type MLDSAParameters struct { -+ name string -+ keyType int32 -+ keyTypeName cString -+ publicKeySize int -+ signatureSize int -+} -+ -+var ( -+ mldsa44 = MLDSAParameters{ -+ name: "ML-DSA-44", -+ keyType: ossl.EVP_PKEY_ML_DSA_44, -+ keyTypeName: _KeyTypeMLDSA44, -+ publicKeySize: publicKeySizeMLDSA44, -+ signatureSize: signatureSizeMLDSA44, -+ } -+ mldsa65 = MLDSAParameters{ -+ name: "ML-DSA-65", -+ keyType: ossl.EVP_PKEY_ML_DSA_65, -+ keyTypeName: _KeyTypeMLDSA65, -+ publicKeySize: publicKeySizeMLDSA65, -+ signatureSize: signatureSizeMLDSA65, -+ } -+ mldsa87 = MLDSAParameters{ -+ name: "ML-DSA-87", -+ keyType: ossl.EVP_PKEY_ML_DSA_87, -+ keyTypeName: _KeyTypeMLDSA87, -+ publicKeySize: publicKeySizeMLDSA87, -+ signatureSize: signatureSizeMLDSA87, -+ } -+) -+ -+// MLDSA44 returns the ML-DSA-44 parameter set. -+func MLDSA44() MLDSAParameters { return mldsa44 } -+ -+// MLDSA65 returns the ML-DSA-65 parameter set. -+func MLDSA65() MLDSAParameters { return mldsa65 } -+ -+// MLDSA87 returns the ML-DSA-87 parameter set. -+func MLDSA87() MLDSAParameters { return mldsa87 } -+ -+func (params MLDSAParameters) valid() bool { -+ switch params { -+ case mldsa44, mldsa65, mldsa87: -+ return true -+ default: -+ return false -+ } -+} -+ -+// PublicKeySize returns the size of public keys for this parameter set, in bytes. -+func (params MLDSAParameters) PublicKeySize() int { return params.publicKeySize } -+ -+// SignatureSize returns the size of signatures for this parameter set, in bytes. -+func (params MLDSAParameters) SignatureSize() int { return params.signatureSize } -+ -+// String returns the name of the parameter set. -+func (params MLDSAParameters) String() string { return params.name } -+ -+var errInvalidMLDSAParameters = errors.New("mldsa: invalid parameters") -+ -+// PrivateKeyMLDSA is an ML-DSA private key seed. -+type PrivateKeyMLDSA struct { -+ params MLDSAParameters -+ seed [privateKeySizeMLDSA]byte -+} -+ -+// GenerateKeyMLDSA generates a new ML-DSA private key. -+func GenerateKeyMLDSA(params MLDSAParameters) (*PrivateKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ key := &PrivateKeyMLDSA{params: params} -+ if err := generateMLDSASeed(params.keyType, key.seed[:]); err != nil { -+ return nil, err -+ } -+ return key, nil -+} -+ -+// NewPrivateKeyMLDSA constructs an ML-DSA private key from its 32-byte seed. -+func NewPrivateKeyMLDSA(params MLDSAParameters, seed []byte) (*PrivateKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ if len(seed) != privateKeySizeMLDSA { -+ return nil, errors.New("mldsa: invalid private key size") -+ } -+ key := &PrivateKeyMLDSA{params: params} -+ copy(key.seed[:], seed) -+ return key, nil -+} -+ -+// Bytes returns the private key seed. -+func (key *PrivateKeyMLDSA) Bytes() []byte { -+ return key.seed[:] -+} -+ -+// Equal reports whether key and other represent the same private key. -+func (key *PrivateKeyMLDSA) Equal(other *PrivateKeyMLDSA) bool { -+ if other == nil { -+ return false -+ } -+ a, err := newMLDSAPrivatePkey(key.params.keyType, key.seed[:]) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_free(a) -+ b, err := newMLDSAPrivatePkey(other.params.keyType, other.seed[:]) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_free(b) -+ // EVP_PKEY_eq returns 1 if inputs match, 0 if they don't match, -1 if the -+ // key types are different, and -2 if the operation is not supported. We -+ // don't care about the reason, only if they match or aren't confirmed to -+ // match. The error return drains the OpenSSL error queue when the -+ // comparison fails (e.g. on cross-parameter-set inputs), so we keep it -+ // here rather than tagging the binding noerror. -+ ret, _ := ossl.EVP_PKEY_eq(a, b) -+ return ret == 1 -+} -+ -+// Parameters returns the parameters associated with this private key. -+func (key *PrivateKeyMLDSA) Parameters() MLDSAParameters { return key.params } -+ -+// PublicKey returns the corresponding public key. -+func (key *PrivateKeyMLDSA) PublicKey() *PublicKeyMLDSA { -+ publicKey := &PublicKeyMLDSA{params: key.params} -+ if err := mldsaExtractPublicKey(key.params, key.seed[:], publicKey.bytes[:key.params.publicKeySize]); err != nil { -+ panic(err) -+ } -+ return publicKey -+} -+ -+// Sign signs message with the private key, optionally binding the signature -+// to a context string. The context string must be at most 255 bytes long. -+func (key *PrivateKeyMLDSA) Sign(message []byte, context string) ([]byte, error) { -+ return mldsaSign(key.params, key.seed[:], message, context) -+} -+ -+// SignExternalMu signs a pre-hashed mu message representative using ML-DSA. -+// mu must be exactly 64 bytes long. -+func (key *PrivateKeyMLDSA) SignExternalMu(mu []byte) ([]byte, error) { -+ if len(mu) != muSizeMLDSA { -+ return nil, errors.New("mldsa: invalid message hash length") -+ } -+ return mldsaSignExternalMu(key.params, key.seed[:], mu) -+} -+ -+// PublicKeyMLDSA is an ML-DSA public key. -+type PublicKeyMLDSA struct { -+ params MLDSAParameters -+ bytes [publicKeySizeMLDSA87]byte -+} -+ -+// NewPublicKeyMLDSA constructs an ML-DSA public key from its encoding. -+func NewPublicKeyMLDSA(params MLDSAParameters, publicKey []byte) (*PublicKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ if len(publicKey) != params.publicKeySize { -+ return nil, errors.New("mldsa: invalid public key size") -+ } -+ // Validate by attempting a key import. -+ pkey, err := newMLDSAPublicPkey(params.keyType, publicKey) -+ if err != nil { -+ return nil, err -+ } -+ ossl.EVP_PKEY_free(pkey) -+ key := &PublicKeyMLDSA{params: params} -+ copy(key.bytes[:], publicKey) -+ return key, nil -+} -+ -+// Bytes returns the public key encoding. -+func (key *PublicKeyMLDSA) Bytes() []byte { -+ return key.bytes[:key.params.publicKeySize] -+} -+ -+// Equal reports whether key and other represent the same public key. -+func (key *PublicKeyMLDSA) Equal(other *PublicKeyMLDSA) bool { -+ if other == nil { -+ return false -+ } -+ a, err := newMLDSAPublicPkey(key.params.keyType, key.bytes[:key.params.publicKeySize]) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_free(a) -+ b, err := newMLDSAPublicPkey(other.params.keyType, other.bytes[:other.params.publicKeySize]) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_free(b) -+ // EVP_PKEY_eq returns 1 if inputs match, 0 if they don't match, -1 if the -+ // key types are different, and -2 if the operation is not supported. We -+ // don't care about the reason, only if they match or aren't confirmed to -+ // match. The error return drains the OpenSSL error queue when the -+ // comparison fails (e.g. on cross-parameter-set inputs), so we keep it -+ // here rather than tagging the binding noerror. -+ ret, _ := ossl.EVP_PKEY_eq(a, b) -+ return ret == 1 -+} -+ -+// Parameters returns the parameters associated with this public key. -+func (key *PublicKeyMLDSA) Parameters() MLDSAParameters { return key.params } -+ -+// Verify verifies an ML-DSA signature over message bound to the given context. -+func (key *PublicKeyMLDSA) Verify(message, signature []byte, context string) error { -+ return mldsaVerify(key.params, key.bytes[:key.params.publicKeySize], message, signature, context) -+} -+ -+// VerifyExternalMu verifies an ML-DSA signature over a pre-hashed mu message -+// representative. mu must be exactly 64 bytes long. -+func (key *PublicKeyMLDSA) VerifyExternalMu(mu, signature []byte) error { -+ if len(mu) != muSizeMLDSA { -+ return errors.New("mldsa: invalid message hash length") -+ } -+ return mldsaVerifyExternalMu(key.params, key.bytes[:key.params.publicKeySize], mu, signature) -+} -+ -+// Helper functions -+ -+// generateMLDSASeed generates a new ML-DSA private key and extracts the seed. -+func generateMLDSASeed(keyType int32, seed []byte) error { -+ pkey, err := generateEVPPKey(keyType, 0, "") -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ _, err = ossl.EVP_PKEY_get_octet_string_param(pkey, _OSSL_PKEY_PARAM_ML_DSA_SEED.ptr(), seed, nil) -+ return err -+} -+ -+// newMLDSAPrivatePkey creates an ML-DSA EVP_PKEY from a 32-byte seed. -+func newMLDSAPrivatePkey(id int32, seed []byte) (ossl.EVP_PKEY_PTR, error) { -+ if len(seed) != privateKeySizeMLDSA { -+ return nil, errors.New("mldsa: invalid seed size") -+ } -+ -+ bld := newParamBuilder() -+ defer bld.finalize() -+ -+ bld.addOctetString(_OSSL_PKEY_PARAM_ML_DSA_SEED, seed) -+ -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ return newEvpFromParams(id, ossl.EVP_PKEY_KEYPAIR, params) -+} -+ -+// newMLDSAPublicPkey creates an ML-DSA EVP_PKEY from encoded public key bytes. -+func newMLDSAPublicPkey(id int32, pubKeyBytes []byte) (ossl.EVP_PKEY_PTR, error) { -+ bld := newParamBuilder() -+ defer bld.finalize() -+ -+ bld.addOctetString(_OSSL_PKEY_PARAM_PUB_KEY, pubKeyBytes) -+ -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ return newEvpFromParams(id, ossl.EVP_PKEY_PUBLIC_KEY, params) -+} -+ -+// mldsaExtractPublicKey derives and copies the encoded public key bytes from -+// a private key seed. -+func mldsaExtractPublicKey(params MLDSAParameters, seed, dst []byte) error { -+ pkey, err := newMLDSAPrivatePkey(params.keyType, seed) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ var pubLen int -+ if _, err := ossl.EVP_PKEY_get_octet_string_param(pkey, _OSSL_PKEY_PARAM_PUB_KEY.ptr(), dst, &pubLen); err != nil { -+ return err -+ } -+ if pubLen != params.publicKeySize { -+ return errors.New("mldsa: unexpected public key size") -+ } -+ return nil -+} -+ -+// mldsaSigParams builds the OSSL_PARAM array used to bind a context string -+// (and/or the external-mu flag) to an ML-DSA Sign or Verify operation. -+// Returns nil params when neither is set. -+func mldsaSigParams(context string, externalMu bool) (ossl.OSSL_PARAM_PTR, error) { -+ if len(context) > maxContextSizeMLDSA { -+ return nil, errors.New("mldsa: context too long") -+ } -+ if context == "" && !externalMu { -+ return nil, nil -+ } -+ bld := newParamBuilder() -+ defer bld.finalize() -+ if context != "" { -+ bld.addOctetString(_OSSL_SIGNATURE_PARAM_CONTEXT_STRING, []byte(context)) -+ } -+ if externalMu { -+ bld.addInt32(_OSSL_SIGNATURE_PARAM_MU, 1) -+ } -+ return bld.build() -+} -+ -+func mldsaSign(params MLDSAParameters, seed, message []byte, context string) ([]byte, error) { -+ pkey, err := newMLDSAPrivatePkey(params.keyType, seed) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ return mldsaSignWithKey(pkey, params, message, context, false) -+} -+ -+func mldsaSignExternalMu(params MLDSAParameters, seed, mu []byte) ([]byte, error) { -+ pkey, err := newMLDSAPrivatePkey(params.keyType, seed) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ return mldsaSignWithKey(pkey, params, mu, "", true) -+} -+ -+func mldsaSignWithKey(pkey ossl.EVP_PKEY_PTR, params MLDSAParameters, message []byte, context string, externalMu bool) ([]byte, error) { -+ mdctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_MD_CTX_free(mdctx) -+ -+ var pctx ossl.EVP_PKEY_CTX_PTR -+ if _, err := ossl.EVP_DigestSignInit(mdctx, &pctx, nil, nil, pkey); err != nil { -+ return nil, err -+ } -+ sigParams, err := mldsaSigParams(context, externalMu) -+ if err != nil { -+ return nil, err -+ } -+ if sigParams != nil { -+ defer ossl.OSSL_PARAM_free(sigParams) -+ if _, err := ossl.EVP_PKEY_CTX_set_params(pctx, sigParams); err != nil { -+ return nil, err -+ } -+ } -+ -+ signature := make([]byte, params.signatureSize) -+ siglen := params.signatureSize -+ if _, err := ossl.EVP_DigestSign(mdctx, signature, &siglen, message); err != nil { -+ return nil, err -+ } -+ if siglen != params.signatureSize { -+ return nil, errors.New("mldsa: unexpected signature length") -+ } -+ return signature[:siglen], nil -+} -+ -+func mldsaVerify(params MLDSAParameters, publicKey, message, signature []byte, context string) error { -+ if len(signature) != params.signatureSize { -+ return errors.New("mldsa: invalid signature length") -+ } -+ pkey, err := newMLDSAPublicPkey(params.keyType, publicKey) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ return mldsaVerifyWithKey(pkey, message, signature, context, false) -+} -+ -+func mldsaVerifyExternalMu(params MLDSAParameters, publicKey, mu, signature []byte) error { -+ if len(signature) != params.signatureSize { -+ return errors.New("mldsa: invalid signature length") -+ } -+ pkey, err := newMLDSAPublicPkey(params.keyType, publicKey) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ return mldsaVerifyWithKey(pkey, mu, signature, "", true) -+} -+ -+func mldsaVerifyWithKey(pkey ossl.EVP_PKEY_PTR, message, signature []byte, context string, externalMu bool) error { -+ mdctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_MD_CTX_free(mdctx) -+ -+ var pctx ossl.EVP_PKEY_CTX_PTR -+ if _, err := ossl.EVP_DigestVerifyInit(mdctx, &pctx, nil, nil, pkey); err != nil { -+ return err -+ } -+ sigParams, err := mldsaSigParams(context, externalMu) -+ if err != nil { -+ return err -+ } -+ if sigParams != nil { -+ defer ossl.OSSL_PARAM_free(sigParams) -+ if _, err := ossl.EVP_PKEY_CTX_set_params(pctx, sigParams); err != nil { -+ return err -+ } -+ } -+ -+ if _, err := ossl.EVP_DigestVerify(mdctx, signature, message); err != nil { -+ return errors.New("mldsa: invalid signature") -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mlkem.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mlkem.go -new file mode 100644 -index 00000000000000..5c2ffbabe92e15 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/mlkem.go -@@ -0,0 +1,369 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "errors" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+const ( -+ // sharedKeySizeMLKEM is the size of a shared key produced by ML-KEM. -+ sharedKeySizeMLKEM = 32 -+ -+ // seedSizeMLKEM is the size of a seed used to generate a decapsulation key. -+ seedSizeMLKEM = 64 -+ -+ // ciphertextSizeMLKEM768 is the size of a ciphertext produced by ML-KEM-768. -+ ciphertextSizeMLKEM768 = 1088 -+ -+ // encapsulationKeySizeMLKEM768 is the size of an ML-KEM-768 encapsulation key. -+ encapsulationKeySizeMLKEM768 = 1184 -+ -+ // ciphertextSizeMLKEM1024 is the size of a ciphertext produced by ML-KEM-1024. -+ ciphertextSizeMLKEM1024 = 1568 -+ -+ // encapsulationKeySizeMLKEM1024 is the size of an ML-KEM-1024 encapsulation key. -+ encapsulationKeySizeMLKEM1024 = 1568 -+) -+ -+// SupportsMLKEM768 returns true if ML-KEM-768 is supported on this platform. -+func SupportsMLKEM768() bool { -+ return supportsMLKEM768() -+} -+ -+// SupportsMLKEM1024 returns true if ML-KEM-1024 is supported on this platform. -+func SupportsMLKEM1024() bool { -+ return supportsMLKEM1024() -+} -+ -+var supportsMLKEM768 = sync.OnceValue(func() bool { -+ // EVP_KEYMGMT_fetch was added in OpenSSL 3.0; if it is not available we -+ // are on 1.x and ML-KEM is not supported. On 3.0–3.4 the fetch returns -+ // nil for the ML-KEM algorithm name, which the probe reports as false. -+ if !ossl.EVP_KEYMGMT_fetch_Available() { -+ return false -+ } -+ sig, _ := ossl.EVP_KEYMGMT_fetch(nil, _KeyTypeMLKEM768.ptr(), nil) -+ if sig == nil { -+ return false -+ } -+ ossl.EVP_KEYMGMT_free(sig) -+ return true -+}) -+ -+var supportsMLKEM1024 = sync.OnceValue(func() bool { -+ if !ossl.EVP_KEYMGMT_fetch_Available() { -+ return false -+ } -+ sig, _ := ossl.EVP_KEYMGMT_fetch(nil, _KeyTypeMLKEM1024.ptr(), nil) -+ if sig == nil { -+ return false -+ } -+ ossl.EVP_KEYMGMT_free(sig) -+ return true -+}) -+ -+// DecapsulationKeyMLKEM768 is the secret key used to decapsulate a shared key -+// from a ciphertext. It includes various precomputed values. -+type DecapsulationKeyMLKEM768 [seedSizeMLKEM]byte -+ -+// GenerateKeyMLKEM768 generates a new decapsulation key, drawing random bytes from -+// the default crypto/rand source. The decapsulation key must be kept secret. -+func GenerateKeyMLKEM768() (DecapsulationKeyMLKEM768, error) { -+ var dk DecapsulationKeyMLKEM768 -+ if err := generateMLKEMSeed(ossl.EVP_PKEY_MLKEM_768, dk[:]); err != nil { -+ return DecapsulationKeyMLKEM768{}, err -+ } -+ return dk, nil -+} -+ -+// NewDecapsulationKeyMLKEM768 expands a decapsulation key from a 64-byte seed in the -+// "d || z" form. The seed must be uniformly random. -+func NewDecapsulationKeyMLKEM768(seed []byte) (DecapsulationKeyMLKEM768, error) { -+ if len(seed) != seedSizeMLKEM { -+ return DecapsulationKeyMLKEM768{}, errors.New("mlkem: invalid seed size") -+ } -+ -+ var dk DecapsulationKeyMLKEM768 -+ copy(dk[:], seed) -+ return dk, nil -+} -+ -+// Bytes returns the decapsulation key as a 64-byte seed in the "d || z" form. -+// -+// The decapsulation key must be kept secret. -+func (dk DecapsulationKeyMLKEM768) Bytes() []byte { -+ return dk[:] -+} -+ -+// Decapsulate generates a shared key from a ciphertext and a decapsulation -+// key. If the ciphertext is not valid, Decapsulate returns an error. -+// -+// The shared key must be kept secret. -+func (dk DecapsulationKeyMLKEM768) Decapsulate(ciphertext []byte) (sharedKey []byte, err error) { -+ return performDecapsulation(ossl.NID_ML_KEM_768, dk[:], ciphertext) -+} -+ -+// EncapsulationKey returns the public encapsulation key necessary to produce -+// ciphertexts. -+func (dk DecapsulationKeyMLKEM768) EncapsulationKey() EncapsulationKeyMLKEM768 { -+ ekBytes := extractEncapsulationKeyBytes(ossl.NID_ML_KEM_768, dk[:], encapsulationKeySizeMLKEM768) -+ var ek EncapsulationKeyMLKEM768 -+ copy(ek[:], ekBytes) -+ return ek -+} -+ -+// An EncapsulationKeyMLKEM768 is the public key used to produce ciphertexts to be -+// decapsulated by the corresponding DecapsulationKeyMLKEM768. -+type EncapsulationKeyMLKEM768 [encapsulationKeySizeMLKEM768]byte -+ -+// NewEncapsulationKeyMLKEM768 parses an encapsulation key from its encoded form. If -+// the encapsulation key is not valid, NewEncapsulationKeyMLKEM768 returns an error. -+func NewEncapsulationKeyMLKEM768(encapsulationKey []byte) (EncapsulationKeyMLKEM768, error) { -+ if len(encapsulationKey) != encapsulationKeySizeMLKEM768 { -+ return EncapsulationKeyMLKEM768{}, errors.New("mlkem: invalid encapsulation key size") -+ } -+ -+ var ek EncapsulationKeyMLKEM768 -+ copy(ek[:], encapsulationKey) -+ return ek, nil -+} -+ -+// Bytes returns the encapsulation key as a byte slice. -+func (ek EncapsulationKeyMLKEM768) Bytes() []byte { -+ return ek[:] -+} -+ -+// Encapsulate generates a shared key and an associated ciphertext from an -+// encapsulation key, drawing random bytes from the default crypto/rand source. -+// -+// The shared key must be kept secret. -+func (ek EncapsulationKeyMLKEM768) Encapsulate() (sharedKey, ciphertext []byte) { -+ return performEncapsulation(ossl.NID_ML_KEM_768, ciphertextSizeMLKEM768, ek[:]) -+} -+ -+func performEncapsulation(id int32, ciphertextSize int, ek []byte) (sharedKey, ciphertext []byte) { -+ pkey, err := createMLKEMPublicKey(id, ek) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ // Create encapsulation context -+ ctx, err := ossl.EVP_PKEY_CTX_new_from_pkey(nil, pkey, nil) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ -+ // Initialize encapsulation -+ if _, err := ossl.EVP_PKEY_encapsulate_init(ctx, nil); err != nil { -+ panic(err) -+ } -+ -+ // Perform encapsulation - allocate buffers based on the key size -+ sharedKey = make([]byte, sharedKeySizeMLKEM) -+ ciphertext = make([]byte, ciphertextSize) -+ -+ sharedKeyLen := len(sharedKey) -+ ciphertextLen := len(ciphertext) -+ -+ if _, err := ossl.EVP_PKEY_encapsulate(ctx, base(ciphertext), &ciphertextLen, base(sharedKey), &sharedKeyLen); err != nil { -+ panic(err) -+ } -+ -+ return sharedKey[:sharedKeyLen], ciphertext[:ciphertextLen] -+} -+ -+func performDecapsulation(id int32, seed, ciphertext []byte) (sharedKey []byte, err error) { -+ if len(ciphertext) == 0 { -+ return nil, errors.New("mlkem: invalid ciphertext size") -+ } -+ -+ pkey, err := createMLKEMPrivateKey(id, seed) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ // Create decapsulation context -+ ctx, err := ossl.EVP_PKEY_CTX_new_from_pkey(nil, pkey, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ -+ // Initialize decapsulation -+ if _, err := ossl.EVP_PKEY_decapsulate_init(ctx, nil); err != nil { -+ return nil, err -+ } -+ -+ // Perform decapsulation -+ sharedKey = make([]byte, sharedKeySizeMLKEM) -+ sharedKeyLen := len(sharedKey) -+ if _, err := ossl.EVP_PKEY_decapsulate(ctx, base(sharedKey), &sharedKeyLen, base(ciphertext), len(ciphertext)); err != nil { -+ return nil, err -+ } -+ -+ return sharedKey[:sharedKeyLen], nil -+} -+ -+// DecapsulationKeyMLKEM1024 is the secret key used to decapsulate a shared key -+// from a ciphertext. It includes various precomputed values. -+type DecapsulationKeyMLKEM1024 [seedSizeMLKEM]byte -+ -+// GenerateKeyMLKEM1024 generates a new decapsulation key, drawing random bytes from -+// the default crypto/rand source. The decapsulation key must be kept secret. -+func GenerateKeyMLKEM1024() (DecapsulationKeyMLKEM1024, error) { -+ var dk DecapsulationKeyMLKEM1024 -+ if err := generateMLKEMSeed(ossl.EVP_PKEY_MLKEM_1024, dk[:]); err != nil { -+ return DecapsulationKeyMLKEM1024{}, err -+ } -+ return dk, nil -+} -+ -+// NewDecapsulationKeyMLKEM1024 expands a decapsulation key from a 64-byte seed in the -+// "d || z" form. The seed must be uniformly random. -+func NewDecapsulationKeyMLKEM1024(seed []byte) (DecapsulationKeyMLKEM1024, error) { -+ if len(seed) != seedSizeMLKEM { -+ return DecapsulationKeyMLKEM1024{}, errors.New("mlkem: invalid seed size") -+ } -+ -+ var dk DecapsulationKeyMLKEM1024 -+ copy(dk[:], seed) -+ return dk, nil -+} -+ -+// Bytes returns the decapsulation key as a 64-byte seed in the "d || z" form. -+// -+// The decapsulation key must be kept secret. -+func (dk DecapsulationKeyMLKEM1024) Bytes() []byte { -+ return dk[:] -+} -+ -+// Decapsulate generates a shared key from a ciphertext and a decapsulation -+// key. If the ciphertext is not valid, Decapsulate returns an error. -+// -+// The shared key must be kept secret. -+func (dk DecapsulationKeyMLKEM1024) Decapsulate(ciphertext []byte) (sharedKey []byte, err error) { -+ return performDecapsulation(ossl.NID_ML_KEM_1024, dk[:], ciphertext) -+} -+ -+// EncapsulationKey returns the public encapsulation key necessary to produce -+// ciphertexts. -+func (dk DecapsulationKeyMLKEM1024) EncapsulationKey() EncapsulationKeyMLKEM1024 { -+ ekBytes := extractEncapsulationKeyBytes(ossl.NID_ML_KEM_1024, dk[:], encapsulationKeySizeMLKEM1024) -+ var ek EncapsulationKeyMLKEM1024 -+ copy(ek[:], ekBytes) -+ return ek -+} -+ -+// An EncapsulationKeyMLKEM1024 is the public key used to produce ciphertexts to be -+// decapsulated by the corresponding DecapsulationKeyMLKEM1024. -+type EncapsulationKeyMLKEM1024 [encapsulationKeySizeMLKEM1024]byte -+ -+// NewEncapsulationKeyMLKEM1024 parses an encapsulation key from its encoded form. If -+// the encapsulation key is not valid, NewEncapsulationKeyMLKEM1024 returns an error. -+func NewEncapsulationKeyMLKEM1024(encapsulationKey []byte) (EncapsulationKeyMLKEM1024, error) { -+ if len(encapsulationKey) != encapsulationKeySizeMLKEM1024 { -+ return EncapsulationKeyMLKEM1024{}, errors.New("mlkem: invalid encapsulation key size") -+ } -+ -+ var ek EncapsulationKeyMLKEM1024 -+ copy(ek[:], encapsulationKey) -+ return ek, nil -+} -+ -+// Bytes returns the encapsulation key as a byte slice. -+func (ek EncapsulationKeyMLKEM1024) Bytes() []byte { -+ return ek[:] -+} -+ -+// Encapsulate generates a shared key and an associated ciphertext from an -+// encapsulation key, drawing random bytes from the default crypto/rand source. -+// -+// The shared key must be kept secret. -+func (ek EncapsulationKeyMLKEM1024) Encapsulate() (sharedKey, ciphertext []byte) { -+ return performEncapsulation(ossl.NID_ML_KEM_1024, ciphertextSizeMLKEM1024, ek[:]) -+} -+ -+// Helper functions -+ -+// generateMLKEMSeed generates a new ML-KEM seed by creating a key and extracting its seed parameter. -+func generateMLKEMSeed(keyType int32, seed []byte) error { -+ pkey, err := generateEVPPKey(keyType, 0, "") -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ _, err = ossl.EVP_PKEY_get_octet_string_param(pkey, _OSSL_PKEY_PARAM_ML_KEM_SEED.ptr(), seed, nil) -+ return err -+} -+ -+// createMLKEMPrivateKey creates an ML-KEM private key from a seed -+func createMLKEMPrivateKey(id int32, seed []byte) (ossl.EVP_PKEY_PTR, error) { -+ if len(seed) != seedSizeMLKEM { -+ return nil, errors.New("mlkem: invalid seed size") -+ } -+ -+ bld := newParamBuilder() -+ defer bld.finalize() -+ -+ bld.addOctetString(_OSSL_PKEY_PARAM_ML_KEM_SEED, seed) -+ -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ return newEvpFromParams(id, ossl.EVP_PKEY_KEYPAIR, params) -+} -+ -+// createMLKEMPublicKey creates an ML-KEM public key from encoded bytes. -+func createMLKEMPublicKey(id int32, pubKeyBytes []byte) (ossl.EVP_PKEY_PTR, error) { -+ bld := newParamBuilder() -+ defer bld.finalize() -+ -+ bld.addOctetString(_OSSL_PKEY_PARAM_PUB_KEY, pubKeyBytes) -+ -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ return newEvpFromParams(id, ossl.EVP_PKEY_PUBLIC_KEY, params) -+} -+ -+// extractEncapsulationKeyBytes extracts the encapsulation key bytes from a decapsulation key. -+func extractEncapsulationKeyBytes(id int32, seed []byte, expectedSize int) []byte { -+ pkey, err := createMLKEMPrivateKey(id, seed) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ -+ // Extract public key bytes -+ var pubBytes *byte -+ pubLen, err := ossl.EVP_PKEY_get1_encoded_public_key(pkey, &pubBytes) -+ if err != nil { -+ panic(err) -+ } -+ defer cryptoFree(unsafe.Pointer(pubBytes)) -+ -+ if pubLen != expectedSize { -+ panic(errors.New("mlkem: invalid encapsulation key size")) -+ } -+ -+ // Copy the bytes before pubBytes is freed -+ result := make([]byte, pubLen) -+ copy(result, unsafe.Slice(pubBytes, pubLen)) -+ return result -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl.go -new file mode 100644 -index 00000000000000..e0291c15a18c00 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl.go -@@ -0,0 +1,182 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Package openssl provides access to OpenSSL cryptographic functions. -+package openssl -+ -+import ( -+ "errors" -+ "math/bits" -+ "strconv" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+ "github.com/microsoft/go-crypto-openssl/osslsetup" -+) -+ -+var isBigEndian = sync.OnceValue(func() bool { -+ buf := [2]byte{} -+ *(*uint16)(unsafe.Pointer(&buf[0])) = uint16(0xABCD) -+ -+ switch buf { -+ case [2]byte{0xCD, 0xAB}: -+ return false -+ case [2]byte{0xAB, 0xCD}: -+ return true -+ default: -+ panic("Could not determine native endianness.") -+ } -+}) -+ -+func major() int { -+ return osslsetup.VersionMajor() -+} -+ -+func minor() int { -+ return osslsetup.VersionMinor() -+} -+ -+func patch() int { -+ return osslsetup.VersionPatch() -+} -+ -+// knownMajor reports whether the loaded OpenSSL major is one this -+// backend has been tested against. Untested majors are only reachable -+// behind GODEBUG=ms_opensslallowuntested=1; code paths that rely on -+// version-specific layouts (e.g. EVP_MD_CTX internals) must guard on -+// this so they degrade safely instead of touching unknown memory. -+func knownMajor() bool { -+ return osslsetup.IsTestedMajor(major()) -+} -+ -+func utoa(n int) string { -+ return strconv.FormatUint(uint64(n), 10) -+} -+ -+func errUnsupportedVersion() error { -+ return errors.New("openssl: unsupported OpenSSL version: " + utoa(major()) + "." + utoa(minor()) + "." + utoa(patch()) + " (minimum supported version is 1.1.1)") -+} -+ -+type fail string -+ -+func (e fail) Error() string { return "openssl: " + string(e) + " failed" } -+ -+// sliceNeverNil returns b if non-nil, and a non-nil zero-length slice otherwise. -+func sliceNeverNil(b []byte) []byte { -+ if b == nil { -+ return []byte{} -+ } -+ return b -+} -+ -+// base returns the address of the underlying array in b, -+// being careful not to panic when b has zero length. -+func base(b []byte) *byte { -+ if len(b) == 0 { -+ return nil -+ } -+ return unsafe.SliceData(b) -+} -+ -+//go:linkname throw runtime.throw -+func throw(string) -+ -+// cryptoMalloc allocates n bytes of memory on the OpenSSL heap, which may be -+// different from the heap which C.malloc allocates on. The allocated object -+// must be freed using cryptoFree. cryptoMalloc is equivalent to the -+// OPENSSL_malloc macro. -+// -+// Like C.malloc, this function is guaranteed to never return nil. If OpenSSL's -+// malloc indicates out of memory, it crashes the program. -+// -+// Only objects which the OpenSSL library will take ownership of (i.e. will be -+// freed by OPENSSL_free / CRYPTO_free) need to be allocated on the OpenSSL -+// heap. -+func cryptoMalloc(n int) unsafe.Pointer { -+ p, _ := ossl.CRYPTO_malloc(n, nil, 0) -+ if p == nil { -+ // Un-recover()-ably crash the program in the same manner as the -+ // C.malloc() wrapper function. -+ throw("openssl: CRYPTO_malloc failed") -+ } -+ return p -+} -+ -+// cryptoFree frees an object allocated on the OpenSSL heap, which may be -+// different from the heap which C.malloc allocates on. cryptoFree is equivalent -+// to the OPENSSL_free macro. -+func cryptoFree(p unsafe.Pointer) { -+ ossl.CRYPTO_free(p, nil, 0) -+} -+ -+const wordBytes = bits.UintSize / 8 -+ -+// Reverse each limb of z. -+func (z BigInt) byteSwap() { -+ for i, d := range z { -+ var n uint = 0 -+ for j := range wordBytes { -+ n |= uint(byte(d)) << (8 * (wordBytes - j - 1)) -+ d >>= 8 -+ } -+ z[i] = n -+ } -+} -+ -+func wbase(b BigInt) *byte { -+ if len(b) == 0 { -+ return nil -+ } -+ return (*byte)(unsafe.Pointer(unsafe.SliceData(b))) -+} -+ -+func bigToBN(x BigInt) (ossl.BIGNUM_PTR, error) { -+ if len(x) == 0 { -+ return nil, nil -+ } -+ if isBigEndian() { -+ z := make(BigInt, len(x)) -+ copy(z, x) -+ z.byteSwap() -+ x = z -+ } -+ // Limbs are always ordered in LSB first, so we can safely apply -+ // BN_lebin2bn regardless of host endianness. -+ bn, err := ossl.BN_lebin2bn(unsafe.Slice(wbase(x), len(x)*wordBytes), nil) -+ if err != nil { -+ return nil, err -+ } -+ return bn, nil -+} -+ -+func bnToBig(bn ossl.BIGNUM_PTR) BigInt { -+ if bn == nil { -+ return nil -+ } -+ -+ // Limbs are always ordered in LSB first, so we can safely apply -+ // BN_bn2lebinpad regardless of host endianness. -+ x := make(BigInt, ossl.BN_num_bits(bn)) -+ if _, err := ossl.BN_bn2lebinpad(bn, unsafe.Slice(wbase(x), len(x)*wordBytes)); err != nil { -+ panic(err) -+ } -+ if isBigEndian() { -+ x.byteSwap() -+ } -+ return x -+} -+ -+// bnToBinPad converts the absolute value of bn into big-endian form and stores -+// it at to, padding with zeroes if necessary. If len(to) is not large enough to -+// hold the result, an error is returned. -+func bnToBinPad(bn ossl.BIGNUM_PTR, to []byte) error { -+ _, err := ossl.BN_bn2binpad(bn, to) -+ return err -+} -+ -+func bigEndianUint64(b []byte) uint64 { -+ _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 -+ return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | -+ uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_cgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_cgo.go -new file mode 100644 -index 00000000000000..092c8046462b6f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_cgo.go -@@ -0,0 +1,17 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import "C" -+import "unsafe" -+ -+// goString converts a C string pointer to a Go string for cgo mode -+func goString(ptr *byte) string { -+ return C.GoString((*C.char)(unsafe.Pointer(ptr))) -+} -+ -+// goBytes converts a C byte array to a Go byte slice for cgo mode -+func goBytes(ptr unsafe.Pointer, length int) []byte { -+ return C.GoBytes(ptr, C.int(length)) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_nocgo.go -new file mode 100644 -index 00000000000000..5dc44cacea9c05 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/openssl_nocgo.go -@@ -0,0 +1,35 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package openssl -+ -+import "unsafe" -+ -+// goString converts a C string pointer to a Go string for nocgo mode -+func goString(ptr *byte) string { -+ if ptr == nil { -+ return "" -+ } -+ var result []byte -+ for i := 0; ; i++ { -+ b := *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) + uintptr(i))) -+ if b == 0 { -+ break -+ } -+ result = append(result, b) -+ } -+ return string(result) -+} -+ -+// goBytes converts a C byte array to a Go byte slice for nocgo mode -+func goBytes(ptr unsafe.Pointer, length int) []byte { -+ if ptr == nil || length == 0 { -+ return nil -+ } -+ // Copy the data to Go memory, similar to C.GoBytes -+ result := make([]byte, length) -+ copy(result, unsafe.Slice((*byte)(ptr), length)) -+ return result -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/params.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/params.go -new file mode 100644 -index 00000000000000..8bd651d6493707 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/params.go -@@ -0,0 +1,191 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+type addParamError struct { -+ name string -+ err error -+} -+ -+func (e addParamError) Error() string { -+ return "failed to add parameter " + e.name + ": " + e.err.Error() -+} -+ -+type bnParam struct { -+ value ossl.BIGNUM_PTR -+ private bool -+} -+ -+// paramBuilder is a helper for building OSSL_PARAMs. -+// If an error occurs when adding a new parameter, -+// subsequent calls to add parameters are ignored -+// and build() will return the error. -+type paramBuilder struct { -+ bld ossl.OSSL_PARAM_BLD_PTR -+ pinner runtime.Pinner -+ bnToFree []bnParam -+ -+ err error -+} -+ -+// newParamBuilder creates a new paramBuilder. -+// [paramBuilder.finalize] must be called to free the builder. -+func newParamBuilder() *paramBuilder { -+ bld := ossl.OSSL_PARAM_BLD_new() -+ if bld == nil { -+ // If this happens it indicates an issue allocating memory. -+ panic("openssl: failed to create OSSL_PARAM_BLD") -+ } -+ return ¶mBuilder{bld: bld} -+} -+ -+// finalize frees the builder. -+func (b *paramBuilder) finalize() { -+ if b.bld != nil { -+ b.pinner.Unpin() -+ for _, bn := range b.bnToFree { -+ if bn.private { -+ ossl.BN_clear_free(bn.value) -+ } else { -+ ossl.BN_free(bn.value) -+ } -+ } -+ ossl.OSSL_PARAM_BLD_free(b.bld) -+ b.bld = nil -+ } -+} -+ -+// check is used internally to enforce invariants and should not be called by users of paramBuilder. -+// Returns true if it's ok to add parameters to the builder or build it. -+// Returns false if there has been an error while adding a parameter. -+// Panics if the paramBuilder has been freed, e.g. if it has already been built. -+func (b *paramBuilder) check() bool { -+ if b.err != nil { -+ return false -+ } -+ if b.bld == nil { -+ panic("openssl: paramBuilder has been freed") -+ } -+ return true -+} -+ -+// build creates an OSSL_PARAM from the builder. -+// The returned OSSL_PARAM must be freed with OSSL_PARAM_free. -+// If an error occurred while adding parameters, the error is returned -+// and the OSSL_PARAM is nil. Once build() is called, the builder is finalized -+// and cannot be reused. -+func (b *paramBuilder) build() (ossl.OSSL_PARAM_PTR, error) { -+ defer b.finalize() -+ if !b.check() { -+ return nil, b.err -+ } -+ param, err := ossl.OSSL_PARAM_BLD_to_param(b.bld) -+ if err != nil { -+ return nil, err -+ } -+ return param, nil -+} -+ -+// addUTF8String adds a NUL-terminated UTF-8 string to the builder. -+// size should not include the terminating NUL byte. If size is zero, then it will be calculated. -+func (b *paramBuilder) addUTF8String(name cString, value *byte, size int) { -+ if !b.check() { -+ return -+ } -+ // OSSL_PARAM_BLD_push_utf8_string calculates the size if it is zero. -+ if size == 0 { -+ size = cStringLen(value) -+ } -+ if _, err := ossl.OSSL_PARAM_BLD_push_utf8_string(b.bld, name.ptr(), unsafe.Slice(value, size)); err != nil { -+ b.err = addParamError{name.str(), err} -+ } -+} -+ -+// addOctetString adds an octet string to the builder. -+// The value is pinned and will be unpinned when the builder is freed. -+func (b *paramBuilder) addOctetString(name cString, value []byte) { -+ if !b.check() { -+ return -+ } -+ if value == nil { -+ // Short-circuit a nil slice: don't pass anything at all to OpenSSL. -+ // OpenSSL 3.5.6 raises an error when passed null, and expects users -+ // to not call this function at all in this case. -+ // See https://github.com/openssl/openssl/issues/30728 -+ // -+ // Don't short-circuit empty slices, as they might have a meaning. -+ // For example, in KDFs an empty salt is different from a nil salt. -+ return -+ } -+ if len(value) != 0 { -+ b.pinner.Pin(&value[0]) -+ } -+ if _, err := ossl.OSSL_PARAM_BLD_push_octet_string(b.bld, name.ptr(), value); err != nil { -+ b.err = addParamError{name.str(), err} -+ } -+} -+ -+func cStringLen(ptr *byte) int { -+ if ptr == nil { -+ return 0 -+ } -+ for n := 0; ; n++ { -+ if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) + uintptr(n))) == 0 { -+ return n -+ } -+ } -+} -+ -+// addInt32 adds an int32 to the builder. -+func (b *paramBuilder) addInt32(name cString, value int32) { -+ if !b.check() { -+ return -+ } -+ if _, err := ossl.OSSL_PARAM_BLD_push_int32(b.bld, name.ptr(), value); err != nil { -+ b.err = addParamError{name.str(), err} -+ } -+} -+ -+// addBN adds a GOossl.BIGNUM_PTR to the builder. -+func (b *paramBuilder) addBN(name cString, value ossl.BIGNUM_PTR) { -+ if !b.check() { -+ return -+ } -+ if _, err := ossl.OSSL_PARAM_BLD_push_BN(b.bld, name.ptr(), value); err != nil { -+ b.err = addParamError{name.str(), err} -+ } -+} -+ -+// addBigInt adds a BigInt to the builder. -+// The BigInt is converted using bigToBN to a BIGNUM that is freed when the builder is finalized. -+// If private is true, the BIGNUM will be cleared with BN_clear_free, -+// otherwise it will be freed with BN_free. -+func (b *paramBuilder) addBigInt(name cString, value BigInt, private bool) { -+ if !b.check() { -+ return -+ } -+ if len(value) == 0 { -+ // Nothing to do. -+ return -+ } -+ bn, err := bigToBN(value) -+ if err != nil { -+ b.err = err -+ return -+ } -+ if b.bnToFree == nil { -+ // Preallocate the slice to avoid growing it later, which would cause allocations and copies. -+ // The maximum known number of BIGNUMs to free are 8 for RSA, so we use that as the capacity. -+ b.bnToFree = make([]bnParam, 0, 8) -+ } -+ b.bnToFree = append(b.bnToFree, bnParam{bn, private}) -+ b.addBN(name, bn) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/pbkdf2.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/pbkdf2.go -new file mode 100644 -index 00000000000000..9cc532155314d6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/pbkdf2.go -@@ -0,0 +1,82 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "errors" -+ "hash" -+ "sync" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// SupportsPBKDF2 reports whether the current OpenSSL version supports PBKDF2. -+func SupportsPBKDF2() bool { -+ switch major() { -+ case 1: -+ return true -+ default: -+ _, err := fetchPBKDF2() -+ return err == nil -+ } -+} -+ -+// fetchPBKDF2 fetches the PBKDF2 algorithm. -+// It is safe to call this function concurrently. -+// The returned EVP_KDF_PTR shouldn't be freed. -+var fetchPBKDF2 = sync.OnceValues(func() (ossl.EVP_KDF_PTR, error) { -+ kdf, err := ossl.EVP_KDF_fetch(nil, _OSSL_KDF_NAME_PBKDF2.ptr(), nil) -+ if err != nil { -+ return nil, err -+ } -+ return kdf, nil -+}) -+ -+func PBKDF2[H hash.Hash](password, salt []byte, iter, keyLen int, fh func() H) ([]byte, error) { -+ h, err := hashFuncHash(fh) -+ if err != nil { -+ return nil, err -+ } -+ md := hashToMD(h) -+ if md == nil { -+ return nil, errors.New("unsupported hash function") -+ } -+ out := make([]byte, keyLen) -+ switch major() { -+ case 1: -+ if _, err = ossl.PKCS5_PBKDF2_HMAC(password, salt, int32(iter), md, out); err != nil { -+ return nil, err -+ } -+ default: -+ kdf, err := fetchPBKDF2() -+ if err != nil { -+ return nil, err -+ } -+ ctx, err := ossl.EVP_KDF_CTX_new(kdf) -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.EVP_KDF_CTX_free(ctx) -+ -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addOctetString(_OSSL_KDF_PARAM_PASSWORD, password) -+ bld.addOctetString(_OSSL_KDF_PARAM_SALT, salt) -+ bld.addInt32(_OSSL_KDF_PARAM_ITER, int32(iter)) -+ bld.addInt32(_OSSL_KDF_PARAM_PKCS5, 1) // disable SP800-132 compliance checks, they are done at the crypto/pbkdf2 level -+ bld.addUTF8String(_OSSL_KDF_PARAM_DIGEST, ossl.EVP_MD_get0_name(md), 0) -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ _, err = ossl.EVP_KDF_derive(ctx, out, params) -+ if err != nil { -+ return nil, err -+ } -+ } -+ -+ return out, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/provideropenssl.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/provideropenssl.go -new file mode 100644 -index 00000000000000..7c31310ff8a9ba ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/provideropenssl.go -@@ -0,0 +1,257 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "errors" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// This file contains code specific to the built-in OpenSSL providers. -+ -+// _OSSL_MD5_CTX layout is taken from -+// https://github.com/openssl/openssl/blob/0418e993c717a6863f206feaa40673a261de7395/include/openssl/md5.h#L33. -+type _OSSL_MD5_CTX struct { -+ h [4]uint32 -+ nl, nh uint32 -+ x [64]byte -+ nx uint32 -+} -+ -+func (d *_OSSL_MD5_CTX) UnmarshalBinary(b []byte) error { -+ b, d.h[0] = consumeUint32(b) -+ b, d.h[1] = consumeUint32(b) -+ b, d.h[2] = consumeUint32(b) -+ b, d.h[3] = consumeUint32(b) -+ b = b[copy(d.x[:], b):] -+ _, n := consumeUint64(b) -+ d.nl = uint32(n << 3) -+ d.nh = uint32(n >> 29) -+ d.nx = uint32(n) % 64 -+ return nil -+} -+ -+func (d *_OSSL_MD5_CTX) AppendBinary(buf []byte) ([]byte, error) { -+ buf = appendUint32(buf, d.h[0]) -+ buf = appendUint32(buf, d.h[1]) -+ buf = appendUint32(buf, d.h[2]) -+ buf = appendUint32(buf, d.h[3]) -+ buf = append(buf, d.x[:d.nx]...) -+ buf = append(buf, make([]byte, len(d.x)-int(d.nx))...) -+ buf = appendUint64(buf, uint64(d.nl)>>3|uint64(d.nh)<<29) -+ return buf, nil -+} -+ -+// _OSSL_SHA_CTX layout is taken from -+// https://github.com/openssl/openssl/blob/0418e993c717a6863f206feaa40673a261de7395/include/openssl/sha.h#L34. -+type _OSSL_SHA_CTX struct { -+ h [5]uint32 -+ nl, nh uint32 -+ x [64]byte -+ nx uint32 -+} -+ -+func (d *_OSSL_SHA_CTX) UnmarshalBinary(b []byte) error { -+ b, d.h[0] = consumeUint32(b) -+ b, d.h[1] = consumeUint32(b) -+ b, d.h[2] = consumeUint32(b) -+ b, d.h[3] = consumeUint32(b) -+ b, d.h[4] = consumeUint32(b) -+ b = b[copy(d.x[:], b):] -+ _, n := consumeUint64(b) -+ d.nl = uint32(n << 3) -+ d.nh = uint32(n >> 29) -+ d.nx = uint32(n) % 64 -+ return nil -+} -+ -+func (d *_OSSL_SHA_CTX) AppendBinary(buf []byte) ([]byte, error) { -+ buf = appendUint32(buf, d.h[0]) -+ buf = appendUint32(buf, d.h[1]) -+ buf = appendUint32(buf, d.h[2]) -+ buf = appendUint32(buf, d.h[3]) -+ buf = appendUint32(buf, d.h[4]) -+ buf = append(buf, d.x[:d.nx]...) -+ buf = append(buf, make([]byte, len(d.x)-int(d.nx))...) -+ buf = appendUint64(buf, uint64(d.nl)>>3|uint64(d.nh)<<29) -+ return buf, nil -+} -+ -+// _OSSL_SHA256_CTX layout is taken from -+// https://github.com/openssl/openssl/blob/0418e993c717a6863f206feaa40673a261de7395/include/openssl/sha.h#L51. -+type _OSSL_SHA256_CTX struct { -+ h [8]uint32 -+ nl, nh uint32 -+ x [64]byte -+ nx uint32 -+} -+ -+func (d *_OSSL_SHA256_CTX) UnmarshalBinary(b []byte) error { -+ b, d.h[0] = consumeUint32(b) -+ b, d.h[1] = consumeUint32(b) -+ b, d.h[2] = consumeUint32(b) -+ b, d.h[3] = consumeUint32(b) -+ b, d.h[4] = consumeUint32(b) -+ b, d.h[5] = consumeUint32(b) -+ b, d.h[6] = consumeUint32(b) -+ b, d.h[7] = consumeUint32(b) -+ b = b[copy(d.x[:], b):] -+ _, n := consumeUint64(b) -+ d.nl = uint32(n << 3) -+ d.nh = uint32(n >> 29) -+ d.nx = uint32(n) % 64 -+ return nil -+} -+ -+func (d *_OSSL_SHA256_CTX) AppendBinary(buf []byte) ([]byte, error) { -+ buf = appendUint32(buf, d.h[0]) -+ buf = appendUint32(buf, d.h[1]) -+ buf = appendUint32(buf, d.h[2]) -+ buf = appendUint32(buf, d.h[3]) -+ buf = appendUint32(buf, d.h[4]) -+ buf = appendUint32(buf, d.h[5]) -+ buf = appendUint32(buf, d.h[6]) -+ buf = appendUint32(buf, d.h[7]) -+ buf = append(buf, d.x[:d.nx]...) -+ buf = append(buf, make([]byte, len(d.x)-int(d.nx))...) -+ buf = appendUint64(buf, uint64(d.nl)>>3|uint64(d.nh)<<29) -+ return buf, nil -+} -+ -+// _OSSL_SHA512_CTX layout is taken from -+// https://github.com/openssl/openssl/blob/0418e993c717a6863f206feaa40673a261de7395/include/openssl/sha.h#L95. -+type _OSSL_SHA512_CTX struct { -+ h [8]uint64 -+ nl, nh uint64 -+ x [128]byte -+ nx uint32 -+} -+ -+func (d *_OSSL_SHA512_CTX) UnmarshalBinary(b []byte) error { -+ b, d.h[0] = consumeUint64(b) -+ b, d.h[1] = consumeUint64(b) -+ b, d.h[2] = consumeUint64(b) -+ b, d.h[3] = consumeUint64(b) -+ b, d.h[4] = consumeUint64(b) -+ b, d.h[5] = consumeUint64(b) -+ b, d.h[6] = consumeUint64(b) -+ b, d.h[7] = consumeUint64(b) -+ b = b[copy(d.x[:], b):] -+ _, n := consumeUint64(b) -+ d.nl = n << 3 -+ d.nh = n >> 61 -+ d.nx = uint32(n) % 128 -+ return nil -+} -+ -+func (d *_OSSL_SHA512_CTX) AppendBinary(buf []byte) ([]byte, error) { -+ buf = appendUint64(buf, d.h[0]) -+ buf = appendUint64(buf, d.h[1]) -+ buf = appendUint64(buf, d.h[2]) -+ buf = appendUint64(buf, d.h[3]) -+ buf = appendUint64(buf, d.h[4]) -+ buf = appendUint64(buf, d.h[5]) -+ buf = appendUint64(buf, d.h[6]) -+ buf = appendUint64(buf, d.h[7]) -+ buf = append(buf, d.x[:d.nx]...) -+ buf = append(buf, make([]byte, len(d.x)-int(d.nx))...) -+ buf = appendUint64(buf, d.nl>>3|d.nh<<61) -+ return buf, nil -+} -+ -+func getOSSLDigetsContext(ctx ossl.EVP_MD_CTX_PTR) unsafe.Pointer { -+ switch major() { -+ case 1: -+ // https://github.com/openssl/openssl/blob/0418e993c717a6863f206feaa40673a261de7395/crypto/evp/evp_local.h#L12. -+ type mdCtx struct { -+ _ [2]unsafe.Pointer -+ _ uint32 -+ md_data unsafe.Pointer -+ } -+ return (*mdCtx)(unsafe.Pointer(ctx)).md_data -+ case 3: -+ // The EVP_MD_CTX memory layout has changed in OpenSSL 3 -+ // and the property holding the internal structure is no longer md_data but algctx. -+ // https://github.com/openssl/openssl/blob/5675a5aaf6a2e489022bcfc18330dae9263e598e/crypto/evp/evp_local.h#L16. -+ type mdCtx struct { -+ _ [3]unsafe.Pointer -+ _ uint32 -+ _ [3]unsafe.Pointer -+ algctx unsafe.Pointer -+ } -+ return (*mdCtx)(unsafe.Pointer(ctx)).algctx -+ case 4: -+ // OpenSSL 4 removed the ENGINE, md_data, and update fields from EVP_MD_CTX. -+ // https://github.com/openssl/openssl/blob/openssl-4.0.0-alpha1/crypto/evp/evp_local.h -+ type mdCtx struct { -+ _ [2]unsafe.Pointer // reqdigest, digest -+ _ uint32 // flags -+ _ unsafe.Pointer // pctx -+ algctx unsafe.Pointer -+ } -+ return (*mdCtx)(unsafe.Pointer(ctx)).algctx -+ default: -+ // Unknown OpenSSL major: the EVP_MD_CTX internal layout is not -+ // known, so the running hash state cannot be safely extracted. -+ // loadHash marks hashes as not marshallable on untested majors -+ // (see evp.go), so MarshalBinary/UnmarshalBinary short-circuit -+ // with errMarshallUnsupported{} before calling this. The nil -+ // return is defense in depth against any future caller that -+ // bypasses that gate. -+ return nil -+ } -+} -+ -+var errHashStateInvalid = errors.New("openssl: can't retrieve hash state") -+ -+func osslHashAppendBinary(ctx ossl.EVP_MD_CTX_PTR, ch crypto.Hash, magic string, buf []byte) ([]byte, error) { -+ algctx := getOSSLDigetsContext(ctx) -+ if algctx == nil { -+ return nil, errHashStateInvalid -+ } -+ buf = append(buf, magic...) -+ switch ch { -+ case crypto.MD5: -+ d := (*_OSSL_MD5_CTX)(unsafe.Pointer(algctx)) -+ return d.AppendBinary(buf) -+ case crypto.SHA1: -+ d := (*_OSSL_SHA_CTX)(unsafe.Pointer(algctx)) -+ return d.AppendBinary(buf) -+ case crypto.SHA224, crypto.SHA256: -+ d := (*_OSSL_SHA256_CTX)(unsafe.Pointer(algctx)) -+ return d.AppendBinary(buf) -+ case crypto.SHA384, crypto.SHA512_224, crypto.SHA512_256, crypto.SHA512: -+ d := (*_OSSL_SHA512_CTX)(unsafe.Pointer(algctx)) -+ return d.AppendBinary(buf) -+ default: -+ panic("unsupported hash " + ch.String()) -+ } -+} -+ -+func osslHashUnmarshalBinary(ctx ossl.EVP_MD_CTX_PTR, ch crypto.Hash, magic string, b []byte) error { -+ algctx := getOSSLDigetsContext(ctx) -+ if algctx == nil { -+ return errHashStateInvalid -+ } -+ b = b[len(magic):] -+ switch ch { -+ case crypto.MD5: -+ d := (*_OSSL_MD5_CTX)(unsafe.Pointer(algctx)) -+ return d.UnmarshalBinary(b) -+ case crypto.SHA1: -+ d := (*_OSSL_SHA_CTX)(unsafe.Pointer(algctx)) -+ return d.UnmarshalBinary(b) -+ case crypto.SHA224, crypto.SHA256: -+ d := (*_OSSL_SHA256_CTX)(unsafe.Pointer(algctx)) -+ return d.UnmarshalBinary(b) -+ case crypto.SHA384, crypto.SHA512_224, crypto.SHA512_256, crypto.SHA512: -+ d := (*_OSSL_SHA512_CTX)(unsafe.Pointer(algctx)) -+ return d.UnmarshalBinary(b) -+ default: -+ panic("unsupported hash " + ch.String()) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/providersymcrypt.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/providersymcrypt.go -new file mode 100644 -index 00000000000000..1fc14f756a0ce4 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/providersymcrypt.go -@@ -0,0 +1,331 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "errors" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// This file contains code specific to the SymCrypt provider. -+ -+const ( -+ _SCOSSL_DIGEST_PARAM_STATE cString = "state\x00" -+ _SCOSSL_DIGEST_PARAM_RECOMPUTE_CHECKSUM cString = "recompute_checksum\x00" -+) -+ -+const ( -+ _SYMCRYPT_BLOB_MAGIC = 0x636D7973 // "cysm" in little-endian -+ -+ _SymCryptBlobTypeHashState = 0x100 -+ _SymCryptBlobTypeMd2State = _SymCryptBlobTypeHashState + 1 -+ _SymCryptBlobTypeMd4State = _SymCryptBlobTypeHashState + 2 -+ _SymCryptBlobTypeMd5State = _SymCryptBlobTypeHashState + 3 -+ _SymCryptBlobTypeSha1State = _SymCryptBlobTypeHashState + 4 -+ _SymCryptBlobTypeSha256State = _SymCryptBlobTypeHashState + 5 -+ _SymCryptBlobTypeSha384State = _SymCryptBlobTypeHashState + 6 -+ _SymCryptBlobTypeSha512State = _SymCryptBlobTypeHashState + 7 -+ _SymCryptBlobTypeSha3_256State = _SymCryptBlobTypeHashState + 8 -+ _SymCryptBlobTypeSha3_384State = _SymCryptBlobTypeHashState + 9 -+ _SymCryptBlobTypeSha3_512State = _SymCryptBlobTypeHashState + 10 -+ _SymCryptBlobTypeSha224State = _SymCryptBlobTypeHashState + 11 -+ _SymCryptBlobTypeSha512_224State = _SymCryptBlobTypeHashState + 12 -+ _SymCryptBlobTypeSha512_256State = _SymCryptBlobTypeHashState + 13 -+ _SymCryptBlobTypeSha3_224State = _SymCryptBlobTypeHashState + 14 -+ -+ _SYMCRYPT_MD5_STATE_EXPORT_SIZE = uint32(unsafe.Sizeof(_SYMCRYPT_MD5_STATE_EXPORT_BLOB{})) -+ _SYMCRYPT_SHA1_STATE_EXPORT_SIZE = uint32(unsafe.Sizeof(_SYMCRYPT_SHA1_STATE_EXPORT_BLOB{})) -+ _SYMCRYPT_SHA256_STATE_EXPORT_SIZE = uint32(unsafe.Sizeof(_SYMCRYPT_SHA256_STATE_EXPORT_BLOB{})) -+ _SYMCRYPT_SHA512_STATE_EXPORT_SIZE = uint32(unsafe.Sizeof(_SYMCRYPT_SHA512_STATE_EXPORT_BLOB{})) -+) -+ -+type _SYMCRYPT_BLOB_HEADER struct { -+ magic uint32 -+ size uint32 -+ _type uint32 -+} -+ -+type _SYMCRYPT_BLOB_TRAILER struct { -+ checksum [8]uint8 -+} -+ -+// _UINT64 is a 64-bit unsigned integer, stored in native endianess. -+// It is used to represent a SymCrypt UINT64 type without making the -+// parent struct 8-byte aligned, given that the Windows ABI makes -+// the struct 4-byte aligned. -+type _UINT64 [2]uint32 -+ -+func newUINT64(v uint64) _UINT64 { -+ var u _UINT64 -+ if isBigEndian() { -+ u[0], u[1] = uint32(v>>32), uint32(v) -+ } else { -+ u[0], u[1] = uint32(v), uint32(v>>32) -+ } -+ return u -+} -+ -+func (u *_UINT64) uint64() uint64 { -+ if isBigEndian() { -+ return uint64(u[0])<<32 | (uint64(u[1])) -+ } -+ return uint64(u[0]) | (uint64(u[1]) << 32) -+} -+ -+// symCryptAppendBinary appends the binary representation of a SymCrypt state -+// to the given destination slice. -+func symCryptAppendBinary(dst, chain, buffer []byte, blength _UINT64) []byte { -+ length := blength.uint64() -+ var nx uint64 -+ if len(buffer) <= 64 { -+ nx = length & 0x3f -+ } else { -+ nx = length & 0x7f -+ } -+ dst = append(dst, chain...) -+ dst = append(dst, buffer[:nx]...) -+ dst = append(dst, make([]byte, len(buffer)-int(nx))...) -+ dst = appendUint64(dst, length) -+ return dst -+} -+ -+// symCryptUnmarshalBinary unmarshals the binary representation of a SymCrypt state -+// from the given source slice. It returns the length of the data. -+func symCryptUnmarshalBinary(d []byte, chain, buffer []byte) _UINT64 { -+ copy(chain[:], d) -+ d = d[len(chain):] -+ copy(buffer[:], d) -+ d = d[len(buffer):] -+ _, length := consumeUint64(d) -+ return newUINT64(length) -+} -+ -+// swapEndianessUint32 swaps the endianness of the given byte slice -+// in place. It assumes the slice is a backup of a 32-bit integer array. -+func swapEndianessUint32(d []uint8) { -+ for i := 0; i < len(d); i += 4 { -+ d[i], d[i+3] = d[i+3], d[i] -+ d[i+1], d[i+2] = d[i+2], d[i+1] -+ } -+ -+} -+ -+type _SYMCRYPT_MD5_STATE_EXPORT_BLOB struct { -+ header _SYMCRYPT_BLOB_HEADER -+ chain [16]uint8 // little endian -+ length _UINT64 // native endian -+ buffer [64]uint8 -+ _ [8]uint8 // reserved -+ _ _SYMCRYPT_BLOB_TRAILER -+} -+ -+func (b *_SYMCRYPT_MD5_STATE_EXPORT_BLOB) appendBinary(d []byte) ([]byte, error) { -+ // b.chain is little endian, but Go expects big endian, -+ // we need to swap the bytes. -+ swapEndianessUint32(b.chain[:]) -+ return symCryptAppendBinary(d, b.chain[:], b.buffer[:], b.length), nil -+} -+ -+func (b *_SYMCRYPT_MD5_STATE_EXPORT_BLOB) unmarshalBinary(d []byte) { -+ b.length = symCryptUnmarshalBinary(d, b.chain[:], b.buffer[:]) -+ swapEndianessUint32(b.chain[:]) -+} -+ -+type _SYMCRYPT_SHA1_STATE_EXPORT_BLOB struct { -+ header _SYMCRYPT_BLOB_HEADER -+ chain [20]uint8 // big endian -+ length _UINT64 // native endian -+ buffer [64]uint8 -+ _ [8]uint8 // reserved -+ _ _SYMCRYPT_BLOB_TRAILER -+} -+ -+func (b *_SYMCRYPT_SHA1_STATE_EXPORT_BLOB) appendBinary(d []byte) ([]byte, error) { -+ return symCryptAppendBinary(d, b.chain[:], b.buffer[:], b.length), nil -+} -+ -+func (b *_SYMCRYPT_SHA1_STATE_EXPORT_BLOB) unmarshalBinary(d []byte) { -+ b.length = symCryptUnmarshalBinary(d, b.chain[:], b.buffer[:]) -+} -+ -+type _SYMCRYPT_SHA256_STATE_EXPORT_BLOB struct { -+ header _SYMCRYPT_BLOB_HEADER -+ chain [32]uint8 // big endian -+ length _UINT64 // native endian -+ buffer [64]uint8 -+ _ [8]uint8 // reserved -+ _ _SYMCRYPT_BLOB_TRAILER -+} -+ -+func (b *_SYMCRYPT_SHA256_STATE_EXPORT_BLOB) appendBinary(d []byte) ([]byte, error) { -+ return symCryptAppendBinary(d, b.chain[:], b.buffer[:], b.length), nil -+} -+ -+func (b *_SYMCRYPT_SHA256_STATE_EXPORT_BLOB) unmarshalBinary(d []byte) { -+ b.length = symCryptUnmarshalBinary(d, b.chain[:], b.buffer[:]) -+} -+ -+type _SYMCRYPT_SHA512_STATE_EXPORT_BLOB struct { -+ header _SYMCRYPT_BLOB_HEADER -+ chain [64]uint8 // big endian -+ lengthL _UINT64 // native endian -+ lengthH _UINT64 // native endian -+ buffer [128]uint8 -+ _ [8]uint8 // reserved -+ _ _SYMCRYPT_BLOB_TRAILER -+} -+ -+func (b *_SYMCRYPT_SHA512_STATE_EXPORT_BLOB) appendBinary(d []byte) ([]byte, error) { -+ if b.lengthH.uint64() != 0 { -+ return nil, errors.New("exporting state with more than 2^63-1 bytes of data is not supported") -+ } -+ return symCryptAppendBinary(d, b.chain[:], b.buffer[:], b.lengthL), nil -+} -+ -+func (b *_SYMCRYPT_SHA512_STATE_EXPORT_BLOB) unmarshalBinary(d []byte) { -+ b.lengthL = symCryptUnmarshalBinary(d, b.chain[:], b.buffer[:]) -+} -+ -+func symCryptHashAppendBinary(ctx ossl.EVP_MD_CTX_PTR, ch crypto.Hash, magic string, buf []byte) ([]byte, error) { -+ size, typ := symCryptHashStateInfo(ch) -+ state := make([]byte, size, _SYMCRYPT_SHA512_STATE_EXPORT_SIZE) // 512 is the largest size -+ params := [2]ossl.OSSL_PARAM{ -+ ossl.OSSL_PARAM_construct_octet_string(_SCOSSL_DIGEST_PARAM_STATE.ptr(), unsafe.Pointer(&state[0]), len(state)), -+ ossl.OSSL_PARAM_construct_end(), -+ } -+ if _, err := ossl.EVP_MD_CTX_get_params(ctx, (ossl.OSSL_PARAM_PTR)(unsafe.Pointer(¶ms[0]))); err != nil { -+ return nil, err -+ } -+ if !ossl.OSSL_PARAM_modified(¶ms[0]) { -+ return nil, errors.New("EVP_MD_CTX_get_params did not retrieve the state") -+ } -+ -+ header := (*_SYMCRYPT_BLOB_HEADER)(unsafe.Pointer(&state[0])) -+ if header.magic != _SYMCRYPT_BLOB_MAGIC { -+ return nil, errors.New("invalid blob magic") -+ } -+ if header.size != size { -+ return nil, errors.New("invalid blob size") -+ } -+ if header._type != typ { -+ return nil, errors.New("invalid blob type") -+ } -+ -+ buf = append(buf, magic...) -+ switch ch { -+ case crypto.MD5: -+ blob := (*_SYMCRYPT_MD5_STATE_EXPORT_BLOB)(unsafe.Pointer(&state[0])) -+ return blob.appendBinary(buf) -+ case crypto.SHA1: -+ blob := (*_SYMCRYPT_SHA1_STATE_EXPORT_BLOB)(unsafe.Pointer(&state[0])) -+ return blob.appendBinary(buf) -+ case crypto.SHA224, crypto.SHA256: -+ blob := (*_SYMCRYPT_SHA256_STATE_EXPORT_BLOB)(unsafe.Pointer(&state[0])) -+ return blob.appendBinary(buf) -+ case crypto.SHA384, crypto.SHA512_224, crypto.SHA512_256, crypto.SHA512: -+ blob := (*_SYMCRYPT_SHA512_STATE_EXPORT_BLOB)(unsafe.Pointer(&state[0])) -+ return blob.appendBinary(buf) -+ default: -+ panic("unsupported hash " + ch.String()) -+ } -+} -+ -+func symCryptHashUnmarshalBinary(ctx ossl.EVP_MD_CTX_PTR, ch crypto.Hash, magic string, b []byte) error { -+ size, typ := symCryptHashStateInfo(ch) -+ hdr := _SYMCRYPT_BLOB_HEADER{ -+ magic: _SYMCRYPT_BLOB_MAGIC, -+ size: size, -+ _type: typ, -+ } -+ var blobPtr unsafe.Pointer -+ b = b[len(magic):] -+ switch ch { -+ case crypto.MD5: -+ var blob _SYMCRYPT_MD5_STATE_EXPORT_BLOB -+ blobPtr = unsafe.Pointer(&blob) -+ blob.header = hdr -+ blob.unmarshalBinary(b) -+ case crypto.SHA1: -+ var blob _SYMCRYPT_SHA1_STATE_EXPORT_BLOB -+ blobPtr = unsafe.Pointer(&blob) -+ blob.header = hdr -+ blob.unmarshalBinary(b) -+ case crypto.SHA224, crypto.SHA256: -+ var blob _SYMCRYPT_SHA256_STATE_EXPORT_BLOB -+ blobPtr = unsafe.Pointer(&blob) -+ blob.header = hdr -+ blob.unmarshalBinary(b) -+ case crypto.SHA384, crypto.SHA512_224, crypto.SHA512_256, crypto.SHA512: -+ var blob _SYMCRYPT_SHA512_STATE_EXPORT_BLOB -+ blobPtr = unsafe.Pointer(&blob) -+ blob.header = hdr -+ blob.unmarshalBinary(b) -+ default: -+ panic("unsupported hash " + ch.String()) -+ } -+ var checksum int32 = 1 -+ params := [3]ossl.OSSL_PARAM{ -+ ossl.OSSL_PARAM_construct_octet_string(_SCOSSL_DIGEST_PARAM_STATE.ptr(), blobPtr, int(hdr.size)), -+ ossl.OSSL_PARAM_construct_int32(_SCOSSL_DIGEST_PARAM_RECOMPUTE_CHECKSUM.ptr(), &checksum), -+ ossl.OSSL_PARAM_construct_end(), -+ } -+ _, err := ossl.EVP_MD_CTX_set_params(ctx, (ossl.OSSL_PARAM_PTR)(unsafe.Pointer(¶ms[0]))) -+ return err -+} -+ -+func symCryptHashStateInfo(ch crypto.Hash) (size, typ uint32) { -+ switch ch { -+ case crypto.MD5: -+ return _SYMCRYPT_MD5_STATE_EXPORT_SIZE, _SymCryptBlobTypeMd5State -+ case crypto.SHA1: -+ return _SYMCRYPT_SHA1_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha1State -+ case crypto.SHA224: -+ return _SYMCRYPT_SHA256_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha224State -+ case crypto.SHA256: -+ return _SYMCRYPT_SHA256_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha256State -+ case crypto.SHA384: -+ return _SYMCRYPT_SHA512_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha384State -+ case crypto.SHA512_224: -+ return _SYMCRYPT_SHA512_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha512_224State -+ case crypto.SHA512_256: -+ return _SYMCRYPT_SHA512_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha512_256State -+ case crypto.SHA512: -+ return _SYMCRYPT_SHA512_STATE_EXPORT_SIZE, _SymCryptBlobTypeSha512State -+ default: -+ panic("unsupported hash " + ch.String()) -+ } -+} -+ -+// isSymCryptHashStateSerializable checks if the SymCrypt hash state is serializable. -+func isSymCryptHashStateSerializable(md ossl.EVP_MD_PTR) bool { -+ ctx, err := ossl.EVP_MD_CTX_new() -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_MD_CTX_free(ctx) -+ if _, err := ossl.EVP_DigestInit_ex(ctx, md, nil); err != nil { -+ return false -+ } -+ params, err := ossl.EVP_MD_CTX_gettable_params(ctx) -+ if err != nil { -+ return false -+ } -+ if _, err = ossl.OSSL_PARAM_locate_const(params, _SCOSSL_DIGEST_PARAM_STATE.ptr()); err != nil { -+ return false -+ } -+ params, err = ossl.EVP_MD_CTX_settable_params(ctx) -+ if err != nil { -+ return false -+ } -+ if _, err = ossl.OSSL_PARAM_locate_const(params, _SCOSSL_DIGEST_PARAM_STATE.ptr()); err != nil { -+ return false -+ } -+ if _, err = ossl.OSSL_PARAM_locate_const(params, _SCOSSL_DIGEST_PARAM_RECOMPUTE_CHECKSUM.ptr()); err != nil { -+ return false -+ } -+ return true -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rand.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rand.go -new file mode 100644 -index 00000000000000..cd8a656a8bae65 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rand.go -@@ -0,0 +1,37 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "math" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+type randReader int -+ -+func (randReader) Read(b []byte) (int, error) { -+ if len(b) == 0 { -+ return 0, nil -+ } -+ switch major() { -+ case 1: -+ if len(b) > math.MaxInt32 { -+ // OpenSSL 1 does not support reading more than 2^31-1 bytes at once. -+ // Instead of erroring out, read only up to 2^31-1 bytes and return -+ // the number of bytes read. -+ b = b[:math.MaxInt32] -+ } -+ if _, err := ossl.RAND_bytes(b); err != nil { -+ return 0, err -+ } -+ default: -+ if _, err := ossl.RAND_bytes_ex(nil, b, 0); err != nil { -+ return 0, err -+ } -+ } -+ return len(b), nil -+} -+ -+const RandReader = randReader(0) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rc4.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rc4.go -new file mode 100644 -index 00000000000000..37d12ec889a91e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rc4.go -@@ -0,0 +1,76 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+ "github.com/microsoft/go-crypto-openssl/osslsetup" -+) -+ -+// SupportsRC4 returns true if NewRC4Cipher is supported. -+func SupportsRC4() bool { -+ switch major() { -+ case 1: -+ // RC4 is not part of the OpenSSL 1.x FIPS module. -+ return !osslsetup.FIPS() && loadCipher(cipherRC4, cipherModeNone) != nil -+ default: -+ // On OpenSSL 3+ availability is decided by the algorithm probe: -+ // EVP_CIPHER_fetch returns nil unless the legacy provider is loaded. -+ return loadCipher(cipherRC4, cipherModeNone) != nil -+ } -+} -+ -+// A RC4Cipher is an instance of RC4 using a particular key. -+type RC4Cipher struct { -+ ctx ossl.EVP_CIPHER_CTX_PTR -+} -+ -+// NewRC4Cipher creates and returns a new Cipher. -+func NewRC4Cipher(key []byte) (*RC4Cipher, error) { -+ ctx, err := newCipherCtx(cipherRC4, cipherModeNone, cipherOpEncrypt, key, nil) -+ if err != nil { -+ return nil, err -+ } -+ c := &RC4Cipher{ctx} -+ runtime.SetFinalizer(c, (*RC4Cipher).finalize) -+ return c, nil -+} -+ -+func (c *RC4Cipher) finalize() { -+ if c.ctx != nil { -+ ossl.EVP_CIPHER_CTX_free(c.ctx) -+ } -+} -+ -+// Reset zeros the key data and makes the Cipher unusable. -+func (c *RC4Cipher) Reset() { -+ if c.ctx != nil { -+ ossl.EVP_CIPHER_CTX_free(c.ctx) -+ c.ctx = nil -+ } -+} -+ -+// XORKeyStream sets dst to the result of XORing src with the key stream. -+// Dst and src must overlap entirely or not at all. -+func (c *RC4Cipher) XORKeyStream(dst, src []byte) { -+ if c.ctx == nil || len(src) == 0 { -+ return -+ } -+ if inexactOverlap(dst[:len(src)], src) { -+ panic("crypto/rc4: invalid buffer overlap") -+ } -+ // panic if len(dst) < len(src) with a runtime out of bound error, -+ // which is what crypto/rc4 does. -+ _ = dst[len(src)-1] -+ var outLen int32 -+ if _, err := ossl.EVP_EncryptUpdate(c.ctx, dst, &outLen, src); err != nil { -+ panic("crypto/rc4: " + err.Error()) -+ } -+ if int(outLen) != len(src) { -+ panic("crypto/rc4: src not fully XORed") -+ } -+ runtime.KeepAlive(c) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rsa.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rsa.go -new file mode 100644 -index 00000000000000..a59ac6f76a1298 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/rsa.go -@@ -0,0 +1,706 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "crypto/subtle" -+ "errors" -+ "hash" -+ "runtime" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+func GenerateKeyRSA(bits int) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ bad := func(e error) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ return nil, nil, nil, nil, nil, nil, nil, nil, e -+ } -+ pkey, err := generateEVPPKey(ossl.EVP_PKEY_RSA, int32(bits), "") -+ if err != nil { -+ return bad(err) -+ } -+ defer ossl.EVP_PKEY_free(pkey) -+ switch major() { -+ case 1: -+ key, err := ossl.EVP_PKEY_get1_RSA(pkey) -+ if err != nil { -+ return bad(err) -+ } -+ defer ossl.RSA_free(key) -+ var n, e, d, p, q, dmp1, dmq1, iqmp ossl.BIGNUM_PTR -+ ossl.RSA_get0_key(key, &n, &e, &d) -+ ossl.RSA_get0_factors(key, &p, &q) -+ ossl.RSA_get0_crt_params(key, &dmp1, &dmq1, &iqmp) -+ N, E, D = bnToBig(n), bnToBig(e), bnToBig(d) -+ P, Q = bnToBig(p), bnToBig(q) -+ Dp, Dq, Qinv = bnToBig(dmp1), bnToBig(dmq1), bnToBig(iqmp) -+ default: -+ tmp, err := ossl.BN_new() -+ if err != nil { -+ return bad(err) -+ } -+ defer func() { -+ ossl.BN_clear_free(tmp) -+ }() -+ setBigInt := func(bi *BigInt, param cString) bool { -+ if err != nil { -+ return false -+ } -+ if _, err = ossl.EVP_PKEY_get_bn_param(pkey, param.ptr(), &tmp); err != nil { -+ return false -+ } -+ *bi = bnToBig(tmp) -+ ossl.BN_clear(tmp) -+ return true -+ } -+ if !(setBigInt(&N, _OSSL_PKEY_PARAM_RSA_N) && -+ setBigInt(&E, _OSSL_PKEY_PARAM_RSA_E) && -+ setBigInt(&D, _OSSL_PKEY_PARAM_RSA_D) && -+ setBigInt(&P, _OSSL_PKEY_PARAM_RSA_FACTOR1) && -+ setBigInt(&Q, _OSSL_PKEY_PARAM_RSA_FACTOR2) && -+ setBigInt(&Dp, _OSSL_PKEY_PARAM_RSA_EXPONENT1) && -+ setBigInt(&Dq, _OSSL_PKEY_PARAM_RSA_EXPONENT2) && -+ setBigInt(&Qinv, _OSSL_PKEY_PARAM_RSA_COEFFICIENT1)) { -+ return bad(err) -+ } -+ } -+ return -+} -+ -+type PublicKeyRSA struct { -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func NewPublicKeyRSA(n, e BigInt) (*PublicKeyRSA, error) { -+ var pkey ossl.EVP_PKEY_PTR -+ switch major() { -+ case 1: -+ key, err := ossl.RSA_new() -+ if err != nil { -+ return nil, err -+ } -+ // No need to check for errors here, RSA_set0_* functions will fail -+ // if the BNs are NULL and we will free non-NULL BNs in the error handling. -+ bn, _ := bigToBN(n) -+ be, _ := bigToBN(e) -+ if _, err := ossl.RSA_set0_key(key, bn, be, nil); err != nil { -+ ossl.BN_free(bn) -+ ossl.BN_free(be) -+ ossl.RSA_free(key) -+ return nil, err -+ } -+ pkey, err = ossl.EVP_PKEY_new() -+ if err != nil { -+ ossl.RSA_free(key) -+ return nil, err -+ } -+ if _, err := ossl.EVP_PKEY_assign(pkey, ossl.EVP_PKEY_RSA, (unsafe.Pointer)(key)); err != nil { -+ ossl.RSA_free(key) -+ ossl.EVP_PKEY_free(pkey) -+ return nil, err -+ } -+ default: -+ var err error -+ if pkey, err = newRSAKey3(false, n, e, nil, nil, nil, nil, nil, nil); err != nil { -+ return nil, err -+ } -+ } -+ k := &PublicKeyRSA{_pkey: pkey} -+ runtime.SetFinalizer(k, (*PublicKeyRSA).finalize) -+ return k, nil -+} -+ -+func (k *PublicKeyRSA) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PublicKeyRSA) withKey(f func(ossl.EVP_PKEY_PTR) error) error { -+ // Because of the finalizer, any time _pkey is passed to cgo, that call must -+ // be followed by a call to runtime.KeepAlive, to make sure k is not -+ // collected (and finalized) before the cgo call returns. -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+type PrivateKeyRSA struct { -+ // _pkey MUST NOT be accessed directly. Instead, use the withKey method. -+ _pkey ossl.EVP_PKEY_PTR -+} -+ -+func NewPrivateKeyRSA(n, e, d, p, q, dp, dq, qinv BigInt) (*PrivateKeyRSA, error) { -+ var pkey ossl.EVP_PKEY_PTR -+ switch major() { -+ case 1: -+ key, err := ossl.RSA_new() -+ if err != nil { -+ return nil, err -+ } -+ // No need to check for errors here, RSA_set0_* functions will fail -+ // if the BNs are NULL and we will free non-NULL BNs in the error handling. -+ bn, _ := bigToBN(n) -+ be, _ := bigToBN(e) -+ bd, _ := bigToBN(d) -+ if _, err := ossl.RSA_set0_key(key, bn, be, bd); err != nil { -+ ossl.BN_free(bn) -+ ossl.BN_free(be) -+ ossl.BN_clear_free(bd) -+ return nil, err -+ } -+ if p != nil && q != nil { -+ bp, _ := bigToBN(p) -+ bq, _ := bigToBN(q) -+ if _, err := ossl.RSA_set0_factors(key, bp, bq); err != nil { -+ ossl.BN_clear_free(bp) -+ ossl.BN_clear_free(bq) -+ return nil, err -+ } -+ } -+ if dp != nil && dq != nil && qinv != nil { -+ bdp, _ := bigToBN(dp) -+ bdq, _ := bigToBN(dq) -+ bqinv, _ := bigToBN(qinv) -+ if _, err := ossl.RSA_set0_crt_params(key, bdp, bdq, bqinv); err != nil { -+ ossl.BN_free(bdp) -+ ossl.BN_free(bdq) -+ ossl.BN_free(bqinv) -+ return nil, err -+ } -+ } -+ pkey, err = ossl.EVP_PKEY_new() -+ if err != nil { -+ ossl.RSA_free(key) -+ return nil, err -+ } -+ if _, err := ossl.EVP_PKEY_assign(pkey, ossl.EVP_PKEY_RSA, (unsafe.Pointer)(key)); err != nil { -+ ossl.RSA_free(key) -+ ossl.EVP_PKEY_free(pkey) -+ return nil, err -+ } -+ default: -+ var err error -+ if pkey, err = newRSAKey3(true, n, e, d, p, q, dp, dq, qinv); err != nil { -+ return nil, err -+ } -+ } -+ k := &PrivateKeyRSA{_pkey: pkey} -+ runtime.SetFinalizer(k, (*PrivateKeyRSA).finalize) -+ return k, nil -+} -+ -+func (k *PrivateKeyRSA) finalize() { -+ ossl.EVP_PKEY_free(k._pkey) -+} -+ -+func (k *PrivateKeyRSA) withKey(f func(ossl.EVP_PKEY_PTR) error) error { -+ // Because of the finalizer, any time _pkey is passed to cgo, that call must -+ // be followed by a call to runtime.KeepAlive, to make sure k is not -+ // collected (and finalized) before the cgo call returns. -+ defer runtime.KeepAlive(k) -+ return f(k._pkey) -+} -+ -+func DecryptRSAOAEP(h, mgfHash hash.Hash, priv *PrivateKeyRSA, ciphertext, label []byte) ([]byte, error) { -+ return evpDecrypt(priv.withKey, ossl.RSA_PKCS1_OAEP_PADDING, h, mgfHash, label, ciphertext) -+} -+ -+func EncryptRSAOAEP(h, mgfHash hash.Hash, pub *PublicKeyRSA, msg, label []byte) ([]byte, error) { -+ return evpEncrypt(pub.withKey, ossl.RSA_PKCS1_OAEP_PADDING, h, mgfHash, label, msg) -+} -+ -+func DecryptRSAPKCS1(priv *PrivateKeyRSA, ciphertext []byte) ([]byte, error) { -+ return evpDecrypt(priv.withKey, ossl.RSA_PKCS1_PADDING, nil, nil, nil, ciphertext) -+} -+ -+func EncryptRSAPKCS1(pub *PublicKeyRSA, msg []byte) ([]byte, error) { -+ return evpEncrypt(pub.withKey, ossl.RSA_PKCS1_PADDING, nil, nil, nil, msg) -+} -+ -+func DecryptRSANoPadding(priv *PrivateKeyRSA, ciphertext []byte) ([]byte, error) { -+ ret, err := evpDecrypt(priv.withKey, ossl.RSA_NO_PADDING, nil, nil, nil, ciphertext) -+ if err != nil { -+ return nil, err -+ } -+ // We could return here, but the Go standard library test expects DecryptRSANoPadding to verify the result -+ // in order to defend against errors in the CRT computation. -+ // -+ // The following code tries to replicate the verification implemented in the upstream function decryptAndCheck, found at -+ // https://github.com/golang/go/blob/9de1ac6ac2cad3871760d0aa288f5ca713afd0a6/src/crypto/rsa/rsa.go#L569-L582. -+ pub := &PublicKeyRSA{_pkey: priv._pkey} -+ // A private EVP_PKEY can be used as a public key as it contains the public information. -+ enc, err := EncryptRSANoPadding(pub, ret) -+ if err != nil { -+ return nil, err -+ } -+ // Upstream does not do a constant time comparison because it works with math/big instead of byte slices, -+ // and math/big does not support constant-time arithmetic yet. See #20654 for more info. -+ if subtle.ConstantTimeCompare(ciphertext, enc) != 1 { -+ return nil, errors.New("rsa: internal error") -+ } -+ return ret, nil -+} -+ -+func EncryptRSANoPadding(pub *PublicKeyRSA, msg []byte) ([]byte, error) { -+ return evpEncrypt(pub.withKey, ossl.RSA_NO_PADDING, nil, nil, nil, msg) -+} -+ -+func saltLength(saltLen int, sign bool) (int32, error) { -+ // A salt length of -2 is valid in OpenSSL, but not in crypto/rsa, so reject -+ // it, and lengths < -2, before we convert to the OpenSSL sentinel values. -+ if saltLen <= -2 { -+ return 0, errors.New("crypto/rsa: invalid PSS salt length") -+ } -+ // OpenSSL uses sentinel salt length values like Go crypto does, -+ // but the values don't fully match for rsa.PSSSaltLengthAuto (0). -+ if saltLen == 0 { -+ if sign { -+ if major() == 1 { -+ // OpenSSL 1.x uses -2 to mean maximal size when signing where Go crypto uses 0. -+ return ossl.RSA_PSS_SALTLEN_MAX_SIGN, nil -+ } -+ // OpenSSL 3.x deprecated RSA_PSS_SALTLEN_MAX_SIGN -+ // and uses -3 to mean maximal size when signing where Go crypto uses 0. -+ return ossl.RSA_PSS_SALTLEN_MAX, nil -+ } -+ // OpenSSL uses -2 to mean auto-detect size when verifying where Go crypto uses 0. -+ return ossl.RSA_PSS_SALTLEN_AUTO, nil -+ } -+ return int32(saltLen), nil -+} -+ -+func SignRSAPSS(priv *PrivateKeyRSA, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ cSaltLen, err := saltLength(saltLen, true) -+ if err != nil { -+ return nil, err -+ } -+ return evpSign(priv.withKey, ossl.RSA_PKCS1_PSS_PADDING, cSaltLen, h, hashed) -+} -+ -+func VerifyRSAPSS(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ cSaltLen, err := saltLength(saltLen, false) -+ if err != nil { -+ return err -+ } -+ return evpVerify(pub.withKey, ossl.RSA_PKCS1_PSS_PADDING, cSaltLen, h, sig, hashed) -+} -+ -+func SignRSAPKCS1v15(priv *PrivateKeyRSA, h crypto.Hash, hashed []byte) ([]byte, error) { -+ return evpSign(priv.withKey, ossl.RSA_PKCS1_PADDING, 0, h, hashed) -+} -+ -+func HashSignRSAPKCS1v15(priv *PrivateKeyRSA, h crypto.Hash, msg []byte) ([]byte, error) { -+ return evpHashSign(priv.withKey, h, msg) -+} -+ -+func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte) error { -+ defer runtime.KeepAlive(pub) -+ var size int32 -+ if err := pub.withKey(func(pkey ossl.EVP_PKEY_PTR) (err error) { -+ size, err = ossl.EVP_PKEY_get_size(pkey) -+ if err != nil { -+ return err -+ } -+ if len(sig) < int(size) { -+ return errors.New("crypto/rsa: verification error") -+ } -+ return nil -+ }); err != nil { -+ return err -+ } -+ return evpVerify(pub.withKey, ossl.RSA_PKCS1_PADDING, 0, h, sig, hashed) -+} -+ -+func HashVerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, msg, sig []byte) error { -+ return evpHashVerify(pub.withKey, h, msg, sig) -+} -+ -+func newRSAKey3(isPriv bool, n, e, d, p, q, dp, dq, qinv BigInt) (ossl.EVP_PKEY_PTR, error) { -+ bld := newParamBuilder() -+ defer bld.finalize() -+ -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_N, n, false) -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_E, e, false) -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_D, d, false) -+ -+ // OpenSSL 3.0 and 3.1 required all the precomputed values if -+ // P and Q are present. See: -+ // https://github.com/openssl/openssl/pull/22334 -+ // -+ // We could only set P and Q if they exist when using OpenSSL 3.2 -+ // or newer, but the RSA provider might be built with an older -+ // OpenSSL version, in which case it would still require all the -+ // precomputed values. So better always provide all the values or -+ // none of them. -+ if p != nil && q != nil && dp != nil && dq != nil && qinv != nil { -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_FACTOR1, p, true) -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_FACTOR2, q, true) -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_EXPONENT1, dp, true) -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_EXPONENT2, dq, true) -+ bld.addBigInt(_OSSL_PKEY_PARAM_RSA_COEFFICIENT1, qinv, true) -+ } -+ -+ params, err := bld.build() -+ if err != nil { -+ return nil, err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ selection := ossl.EVP_PKEY_PUBLIC_KEY -+ if isPriv { -+ selection = ossl.EVP_PKEY_KEYPAIR -+ } -+ return newEvpFromParams(ossl.EVP_PKEY_RSA, int32(selection), params) -+} -+ -+// SupportsRSAPKCS1v15Encryption returns true if the RSA PKCS1 v1.5 padding is supported for encryption and decryption. -+var SupportsRSAPKCS1v15Encryption = sync.OnceValue(func() bool { -+ pkey := testRSAPrivateKey() -+ ctx, err := ossl.EVP_PKEY_CTX_new(pkey, nil) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ -+ if _, err := ossl.EVP_PKEY_encrypt_init(ctx); err != nil { -+ return false -+ } -+ -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, ossl.EVP_PKEY_RSA, -1, ossl.EVP_PKEY_CTRL_RSA_PADDING, ossl.RSA_PKCS1_PADDING, nil); err != nil { -+ return false -+ } -+ -+ // In FIPS mode, setting the padding might succeed, but the actual encryption will fail. -+ // So we need to try to encrypt something to be sure. -+ in := []byte("test") -+ var outLen int -+ if _, err := ossl.EVP_PKEY_encrypt(ctx, nil, &outLen, in); err != nil { -+ return false -+ } -+ return true -+}) -+ -+var rsaPKCS1SignatureSupport sync.Map -+ -+// SupportsRSAPKCS1v15Signature returns true if the RSA PKCS1 v1.5 padding is supported for signatures with the given hash. -+func SupportsRSAPKCS1v15Signature(ch crypto.Hash) (supported bool) { -+ v, ok := rsaPKCS1SignatureSupport.Load(ch) -+ if ok { -+ return v.(bool) -+ } -+ defer func() { -+ rsaPKCS1SignatureSupport.Store(ch, supported) -+ }() -+ -+ pkey := testRSAPrivateKey() -+ ctx, err := ossl.EVP_PKEY_CTX_new(pkey, nil) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_sign_init(ctx); err != nil { -+ return false -+ } -+ if setPKCS1Padding(ctx, ch) != nil { -+ return false -+ } -+ // In FIPS mode, setting the padding might succeed, but the actual signature will fail. -+ // So we need to try to sign something to be sure. -+ size := 1 -+ if ch != 0 { -+ size = ch.Size() -+ } -+ in := make([]byte, size, maxHashSize) -+ var outLen int -+ if _, err := ossl.EVP_PKEY_sign(ctx, nil, &outLen, in); err != nil { -+ return false -+ } -+ return true -+} -+ -+var rsaPSSSupport sync.Map -+ -+// SupportsRSAPSS returns true if the RSA PSS padding is supported for signatures with the given hash. -+func SupportsRSAPSS(ch crypto.Hash) (supported bool) { -+ v, ok := rsaPSSSupport.Load(ch) -+ if ok { -+ return v.(bool) -+ } -+ defer func() { -+ rsaPSSSupport.Store(ch, supported) -+ }() -+ -+ if !SupportsHash(ch) { -+ // Short-circuit if the hash itself is not supported. -+ return false -+ } -+ -+ pkey := testRSAPrivateKey() -+ ctx, err := ossl.EVP_PKEY_CTX_new(pkey, nil) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ if _, err := ossl.EVP_PKEY_sign_init(ctx); err != nil { -+ return false -+ } -+ if setPSSPadding(ctx, 0, ch) != nil { -+ return false -+ } -+ // In FIPS mode, setting the padding might succeed, but the actual signature will fail. -+ // So we need to try to sign something to be sure. -+ in := make([]byte, ch.Size(), maxHashSize) -+ var outLen int -+ if _, err := ossl.EVP_PKEY_sign(ctx, nil, &outLen, in); err != nil { -+ return false -+ } -+ return true -+} -+ -+var rsaOAEPSupport sync.Map -+ -+type rsaOAEPSupportEntry struct { -+ ch crypto.Hash -+ mgfHash crypto.Hash -+} -+ -+// SupportsRSAOAEP returns true if the RSA OAEP padding is supported for encryption/decryption -+// with the given hash and MGF hash. -+func SupportsRSAOAEP(h, mgfHash hash.Hash) (supported bool) { -+ ch := hashToCryptoHash(h) -+ if ch == 0 { -+ return false -+ } -+ mgfCh := hashToCryptoHash(mgfHash) -+ if mgfCh == 0 { -+ return false -+ } -+ entry := rsaOAEPSupportEntry{ch, mgfCh} -+ v, ok := rsaOAEPSupport.Load(entry) -+ if ok { -+ return v.(bool) -+ } -+ defer func() { -+ rsaOAEPSupport.Store(entry, supported) -+ }() -+ -+ if !SupportsHash(ch) { -+ // Short-circuit if the hash itself is not supported. -+ return false -+ } -+ -+ pkey := testRSAPrivateKey() -+ ctx, err := ossl.EVP_PKEY_CTX_new(pkey, nil) -+ if err != nil { -+ return false -+ } -+ defer ossl.EVP_PKEY_CTX_free(ctx) -+ -+ if _, err := ossl.EVP_PKEY_encrypt_init(ctx); err != nil { -+ return false -+ } -+ -+ if setOAEPPadding(ctx, h, mgfHash, nil) != nil { -+ return false -+ } -+ -+ // In FIPS mode, setting the padding might succeed, but the actual encryption will fail. -+ // So we need to try to encrypt something to be sure. -+ in := []byte("test") -+ var outLen int -+ if _, err := ossl.EVP_PKEY_encrypt(ctx, nil, &outLen, in); err != nil { -+ return false -+ } -+ return true -+} -+ -+// testRSAPrivateKey returns a test RSA private key for use in capability probing functions. -+// -+// The key is constructed from hard-coded parameters to avoid -+// spurious failures due to key generation issues and to avoid the speed cost of -+// key generation. -+var testRSAPrivateKey = sync.OnceValue(func() ossl.EVP_PKEY_PTR { -+ // RSA-2048 key "testRSA2048": -+ // https://www.rfc-editor.org/rfc/rfc9500.html#section-2.1 -+ N := []byte{ -+ 0xB0, 0xF9, 0xE8, 0x19, 0x43, 0xA7, 0xAE, 0x98, -+ 0x92, 0xAA, 0xDE, 0x17, 0xCA, 0x7C, 0x40, 0xF8, -+ 0x74, 0x4F, 0xED, 0x2F, 0x81, 0x48, 0xE6, 0xC8, -+ 0xEA, 0xA2, 0x7B, 0x7D, 0x00, 0x15, 0x48, 0xFB, -+ 0x51, 0x92, 0xAB, 0x28, 0xB5, 0x6C, 0x50, 0x60, -+ 0xB1, 0x18, 0xCC, 0xD1, 0x31, 0xE5, 0x94, 0x87, -+ 0x4C, 0x6C, 0xA9, 0x89, 0xB5, 0x6C, 0x27, 0x29, -+ 0x6F, 0x09, 0xFB, 0x93, 0xA0, 0x34, 0xDF, 0x32, -+ 0xE9, 0x7C, 0x6F, 0xF0, 0x99, 0x8C, 0xFD, 0x8E, -+ 0x6F, 0x42, 0xDD, 0xA5, 0x8A, 0xCD, 0x1F, 0xA9, -+ 0x79, 0x86, 0xF1, 0x44, 0xF3, 0xD1, 0x54, 0xD6, -+ 0x76, 0x50, 0x17, 0x5E, 0x68, 0x54, 0xB3, 0xA9, -+ 0x52, 0x00, 0x3B, 0xC0, 0x68, 0x87, 0xB8, 0x45, -+ 0x5A, 0xC2, 0xB1, 0x9F, 0x7B, 0x2F, 0x76, 0x50, -+ 0x4E, 0xBC, 0x98, 0xEC, 0x94, 0x55, 0x71, 0xB0, -+ 0x78, 0x92, 0x15, 0x0D, 0xDC, 0x6A, 0x74, 0xCA, -+ 0x0F, 0xBC, 0xD3, 0x54, 0x97, 0xCE, 0x81, 0x53, -+ 0x4D, 0xAF, 0x94, 0x18, 0x84, 0x4B, 0x13, 0xAE, -+ 0xA3, 0x1F, 0x9D, 0x5A, 0x6B, 0x95, 0x57, 0xBB, -+ 0xDF, 0x61, 0x9E, 0xFD, 0x4E, 0x88, 0x7F, 0x2D, -+ 0x42, 0xB8, 0xDD, 0x8B, 0xC9, 0x87, 0xEA, 0xE1, -+ 0xBF, 0x89, 0xCA, 0xB8, 0x5E, 0xE2, 0x1E, 0x35, -+ 0x63, 0x05, 0xDF, 0x6C, 0x07, 0xA8, 0x83, 0x8E, -+ 0x3E, 0xF4, 0x1C, 0x59, 0x5D, 0xCC, 0xE4, 0x3D, -+ 0xAF, 0xC4, 0x91, 0x23, 0xEF, 0x4D, 0x8A, 0xBB, -+ 0xA9, 0x3D, 0x39, 0x05, 0xE4, 0x02, 0x8D, 0x7B, -+ 0xA9, 0x14, 0x84, 0xA2, 0x75, 0x96, 0xE0, 0x7B, -+ 0x4B, 0x6E, 0xD9, 0x92, 0xF0, 0x77, 0xB5, 0x24, -+ 0xD3, 0xDC, 0xFE, 0x7D, 0xDD, 0x55, 0x49, 0xBE, -+ 0x7C, 0xCE, 0x8D, 0xA0, 0x35, 0xCF, 0xA0, 0xB3, -+ 0xFB, 0x8F, 0x9E, 0x46, 0xF7, 0x32, 0xB2, 0xA8, -+ 0x6B, 0x46, 0x01, 0x65, 0xC0, 0x8F, 0x53, 0x13} -+ E := []byte{0x01, 0x00, 0x01} -+ d := []byte{ -+ 0x41, 0x18, 0x8B, 0x20, 0xCF, 0xDB, 0xDB, 0xC2, -+ 0xCF, 0x1F, 0xFE, 0x75, 0x2D, 0xCB, 0xAA, 0x72, -+ 0x39, 0x06, 0x35, 0x2E, 0x26, 0x15, 0xD4, 0x9D, -+ 0xCE, 0x80, 0x59, 0x7F, 0xCF, 0x0A, 0x05, 0x40, -+ 0x3B, 0xEF, 0x00, 0xFA, 0x06, 0x51, 0x82, 0xF7, -+ 0x2D, 0xEC, 0xFB, 0x59, 0x6F, 0x4B, 0x0C, 0xE8, -+ 0xFF, 0x59, 0x70, 0xBA, 0xF0, 0x7A, 0x89, 0xA5, -+ 0x19, 0xEC, 0xC8, 0x16, 0xB2, 0xF4, 0xFF, 0xAC, -+ 0x50, 0x69, 0xAF, 0x1B, 0x06, 0xBF, 0xEF, 0x7B, -+ 0xF6, 0xBC, 0xD7, 0x9E, 0x4E, 0x81, 0xC8, 0xC5, -+ 0xA3, 0xA7, 0xD9, 0x13, 0x0D, 0xC3, 0xCF, 0xBA, -+ 0xDA, 0xE5, 0xF6, 0xD2, 0x88, 0xF9, 0xAE, 0xE3, -+ 0xF6, 0xFF, 0x92, 0xFA, 0xE0, 0xF8, 0x1A, 0xF5, -+ 0x97, 0xBE, 0xC9, 0x6A, 0xE9, 0xFA, 0xB9, 0x40, -+ 0x2C, 0xD5, 0xFE, 0x41, 0xF7, 0x05, 0xBE, 0xBD, -+ 0xB4, 0x7B, 0xB7, 0x36, 0xD3, 0xFE, 0x6C, 0x5A, -+ 0x51, 0xE0, 0xE2, 0x07, 0x32, 0xA9, 0x7B, 0x5E, -+ 0x46, 0xC1, 0xCB, 0xDB, 0x26, 0xD7, 0x48, 0x54, -+ 0xC6, 0xB6, 0x60, 0x4A, 0xED, 0x46, 0x37, 0x35, -+ 0xFF, 0x90, 0x76, 0x04, 0x65, 0x57, 0xCA, 0xF9, -+ 0x49, 0xBF, 0x44, 0x88, 0x95, 0xC2, 0x04, 0x32, -+ 0xC1, 0xE0, 0x9C, 0x01, 0x4E, 0xA7, 0x56, 0x60, -+ 0x43, 0x4F, 0x1A, 0x0F, 0x3B, 0xE2, 0x94, 0xBA, -+ 0xBC, 0x5D, 0x53, 0x0E, 0x6A, 0x10, 0x21, 0x3F, -+ 0x53, 0xB6, 0x03, 0x75, 0xFC, 0x84, 0xA7, 0x57, -+ 0x3F, 0x2A, 0xF1, 0x21, 0x55, 0x84, 0xF5, 0xB4, -+ 0xBD, 0xA6, 0xD4, 0xE8, 0xF9, 0xE1, 0x7A, 0x78, -+ 0xD9, 0x7E, 0x77, 0xB8, 0x6D, 0xA4, 0xA1, 0x84, -+ 0x64, 0x75, 0x31, 0x8A, 0x7A, 0x10, 0xA5, 0x61, -+ 0x01, 0x4E, 0xFF, 0xA2, 0x3A, 0x81, 0xEC, 0x56, -+ 0xE9, 0xE4, 0x10, 0x9D, 0xEF, 0x8C, 0xB3, 0xF7, -+ 0x97, 0x22, 0x3F, 0x7D, 0x8D, 0x0D, 0x43, 0x51} -+ p := []byte{ -+ 0xDD, 0x10, 0x57, 0x02, 0x38, 0x2F, 0x23, 0x2B, -+ 0x36, 0x81, 0xF5, 0x37, 0x91, 0xE2, 0x26, 0x17, -+ 0xC7, 0xBF, 0x4E, 0x9A, 0xCB, 0x81, 0xED, 0x48, -+ 0xDA, 0xF6, 0xD6, 0x99, 0x5D, 0xA3, 0xEA, 0xB6, -+ 0x42, 0x83, 0x9A, 0xFF, 0x01, 0x2D, 0x2E, 0xA6, -+ 0x28, 0xB9, 0x0A, 0xF2, 0x79, 0xFD, 0x3E, 0x6F, -+ 0x7C, 0x93, 0xCD, 0x80, 0xF0, 0x72, 0xF0, 0x1F, -+ 0xF2, 0x44, 0x3B, 0x3E, 0xE8, 0xF2, 0x4E, 0xD4, -+ 0x69, 0xA7, 0x96, 0x13, 0xA4, 0x1B, 0xD2, 0x40, -+ 0x20, 0xF9, 0x2F, 0xD1, 0x10, 0x59, 0xBD, 0x1D, -+ 0x0F, 0x30, 0x1B, 0x5B, 0xA7, 0xA9, 0xD3, 0x63, -+ 0x7C, 0xA8, 0xD6, 0x5C, 0x1A, 0x98, 0x15, 0x41, -+ 0x7D, 0x8E, 0xAB, 0x73, 0x4B, 0x0B, 0x4F, 0x3A, -+ 0x2C, 0x66, 0x1D, 0x9A, 0x1A, 0x82, 0xF3, 0xAC, -+ 0x73, 0x4C, 0x40, 0x53, 0x06, 0x69, 0xAB, 0x8E, -+ 0x47, 0x30, 0x45, 0xA5, 0x8E, 0x65, 0x53, 0x9D} -+ q := []byte{ -+ 0xCC, 0xF1, 0xE5, 0xBB, 0x90, 0xC8, 0xE9, 0x78, -+ 0x1E, 0xA7, 0x5B, 0xEB, 0xF1, 0x0B, 0xC2, 0x52, -+ 0xE1, 0x1E, 0xB0, 0x23, 0xA0, 0x26, 0x0F, 0x18, -+ 0x87, 0x55, 0x2A, 0x56, 0x86, 0x3F, 0x4A, 0x64, -+ 0x21, 0xE8, 0xC6, 0x00, 0xBF, 0x52, 0x3D, 0x6C, -+ 0xB1, 0xB0, 0xAD, 0xBD, 0xD6, 0x5B, 0xFE, 0xE4, -+ 0xA8, 0x8A, 0x03, 0x7E, 0x3D, 0x1A, 0x41, 0x5E, -+ 0x5B, 0xB9, 0x56, 0x48, 0xDA, 0x5A, 0x0C, 0xA2, -+ 0x6B, 0x54, 0xF4, 0xA6, 0x39, 0x48, 0x52, 0x2C, -+ 0x3D, 0x5F, 0x89, 0xB9, 0x4A, 0x72, 0xEF, 0xFF, -+ 0x95, 0x13, 0x4D, 0x59, 0x40, 0xCE, 0x45, 0x75, -+ 0x8F, 0x30, 0x89, 0x80, 0x90, 0x89, 0x56, 0x58, -+ 0x8E, 0xEF, 0x57, 0x5B, 0x3E, 0x4B, 0xC4, 0xC3, -+ 0x68, 0xCF, 0xE8, 0x13, 0xEE, 0x9C, 0x25, 0x2C, -+ 0x2B, 0x02, 0xE0, 0xDF, 0x91, 0xF1, 0xAA, 0x01, -+ 0x93, 0x8D, 0x38, 0x68, 0x5D, 0x60, 0xBA, 0x6F} -+ qInv := []byte{ -+ 0x0A, 0x81, 0xD8, 0xA6, 0x18, 0x31, 0x4A, 0x80, -+ 0x3A, 0xF6, 0x1C, 0x06, 0x71, 0x1F, 0x2C, 0x39, -+ 0xB2, 0x66, 0xFF, 0x41, 0x4D, 0x53, 0x47, 0x6D, -+ 0x1D, 0xA5, 0x2A, 0x43, 0x18, 0xAA, 0xFE, 0x4B, -+ 0x96, 0xF0, 0xDA, 0x07, 0x15, 0x5F, 0x8A, 0x51, -+ 0x34, 0xDA, 0xB8, 0x8E, 0xE2, 0x9E, 0x81, 0x68, -+ 0x07, 0x6F, 0xCD, 0x78, 0xCA, 0x79, 0x1A, 0xC6, -+ 0x34, 0x42, 0xA8, 0x1C, 0xD0, 0x69, 0x39, 0x27, -+ 0xD8, 0x08, 0xE3, 0x35, 0xE8, 0xD8, 0xCB, 0xF2, -+ 0x12, 0x19, 0x07, 0x50, 0x9A, 0x57, 0x75, 0x9B, -+ 0x4F, 0x9A, 0x18, 0xFA, 0x3A, 0x7B, 0x33, 0x37, -+ 0x79, 0xED, 0xDE, 0x7A, 0x45, 0x93, 0x84, 0xF8, -+ 0x44, 0x4A, 0xDA, 0xEC, 0xFF, 0xEC, 0x95, 0xFD, -+ 0x55, 0x2B, 0x0C, 0xFC, 0xB6, 0xC7, 0xF6, 0x92, -+ 0x62, 0x6D, 0xDE, 0x1E, 0xF2, 0x68, 0xA4, 0x0D, -+ 0x2F, 0x67, 0xB5, 0xC8, 0xAA, 0x38, 0x7F, 0xF7} -+ dP := []byte{ -+ 0x09, 0xED, 0x54, 0xEA, 0xED, 0x98, 0xF8, 0x4C, -+ 0x55, 0x7B, 0x4A, 0x86, 0xBF, 0x4F, 0x57, 0x84, -+ 0x93, 0xDC, 0xBC, 0x6B, 0xE9, 0x1D, 0xA1, 0x89, -+ 0x37, 0x04, 0x04, 0xA9, 0x08, 0x72, 0x76, 0xF4, -+ 0xCE, 0x51, 0xD8, 0xA1, 0x00, 0xED, 0x85, 0x7D, -+ 0xC2, 0xB0, 0x64, 0x94, 0x74, 0xF3, 0xF1, 0x5C, -+ 0xD2, 0x4C, 0x54, 0xDB, 0x28, 0x71, 0x10, 0xE5, -+ 0x6E, 0x5C, 0xB0, 0x08, 0x68, 0x2F, 0x91, 0x68, -+ 0xAA, 0x81, 0xF3, 0x14, 0x58, 0xB7, 0x43, 0x1E, -+ 0xCC, 0x1C, 0x44, 0x90, 0x6F, 0xDA, 0x87, 0xCA, -+ 0x89, 0x47, 0x10, 0xC3, 0x71, 0xE9, 0x07, 0x6C, -+ 0x1D, 0x49, 0xFB, 0xAE, 0x51, 0x27, 0x69, 0x34, -+ 0xF2, 0xAD, 0x78, 0x77, 0x89, 0xF4, 0x2D, 0x0F, -+ 0xA0, 0xB4, 0xC9, 0x39, 0x85, 0x5D, 0x42, 0x12, -+ 0x09, 0x6F, 0x70, 0x28, 0x0A, 0x4E, 0xAE, 0x7C, -+ 0x8A, 0x27, 0xD9, 0xC8, 0xD0, 0x77, 0x2E, 0x65} -+ dQ := []byte{ -+ 0x8C, 0xB6, 0x85, 0x7A, 0x7B, 0xD5, 0x46, 0x5F, -+ 0x80, 0x04, 0x7E, 0x9B, 0x87, 0xBC, 0x00, 0x27, -+ 0x31, 0x84, 0x05, 0x81, 0xE0, 0x62, 0x61, 0x39, -+ 0x01, 0x2A, 0x5B, 0x50, 0x5F, 0x0A, 0x33, 0x84, -+ 0x7E, 0xB7, 0xB8, 0xC3, 0x28, 0x99, 0x49, 0xAD, -+ 0x48, 0x6F, 0x3B, 0x4B, 0x3D, 0x53, 0x9A, 0xB5, -+ 0xDA, 0x76, 0x30, 0x21, 0xCB, 0xC8, 0x2C, 0x1B, -+ 0xA2, 0x34, 0xA5, 0x66, 0x8D, 0xED, 0x08, 0x01, -+ 0xB8, 0x59, 0xF3, 0x43, 0xF1, 0xCE, 0x93, 0x04, -+ 0xE6, 0xFA, 0xA2, 0xB0, 0x02, 0xCA, 0xD9, 0xB7, -+ 0x8C, 0xDE, 0x5C, 0xDC, 0x2C, 0x1F, 0xB4, 0x17, -+ 0x1C, 0x42, 0x42, 0x16, 0x70, 0xA6, 0xAB, 0x0F, -+ 0x50, 0xCC, 0x4A, 0x19, 0x4E, 0xB3, 0x6D, 0x1C, -+ 0x91, 0xE9, 0x35, 0xBA, 0x01, 0xB9, 0x59, 0xD8, -+ 0x72, 0x8B, 0x9E, 0x64, 0x42, 0x6B, 0x3F, 0xC3, -+ 0xA7, 0x50, 0x6D, 0xEB, 0x52, 0x39, 0xA8, 0xA7} -+ -+ // Convert []byte to BigInt using BN_bin2bn and bnToBig -+ bytesToBigInt := func(b []byte) BigInt { -+ bn, err := ossl.BN_bin2bn(b, nil) -+ if err != nil { -+ panic(err) -+ } -+ defer ossl.BN_free(bn) -+ return bnToBig(bn) -+ } -+ -+ priv, err := NewPrivateKeyRSA( -+ bytesToBigInt(N), -+ bytesToBigInt(E), -+ bytesToBigInt(d), -+ bytesToBigInt(p), -+ bytesToBigInt(q), -+ bytesToBigInt(dP), -+ bytesToBigInt(dQ), -+ bytesToBigInt(qInv), -+ ) -+ if err != nil { -+ panic("failed to create test RSA private key: " + err.Error()) -+ } -+ // Prevent finalization to avoid freeing OpenSSL objects. -+ runtime.SetFinalizer(priv, nil) -+ return priv._pkey -+}) -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/tls1prf.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/tls1prf.go -new file mode 100644 -index 00000000000000..67e4cc7919fe08 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/tls1prf.go -@@ -0,0 +1,149 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package openssl -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+func SupportsTLS1PRF() bool { -+ switch major() { -+ case 1: -+ return minor() >= 1 -+ default: -+ _, err := fetchTLS1PRF3() -+ return err == nil -+ } -+} -+ -+// TLS1PRF implements the TLS 1.0/1.1 pseudo-random function if fh is nil, -+// else it implements the TLS 1.2 pseudo-random function. -+// To use TLS 1.0/1.1 mode with nil fh, specify the type parameter explicitly, -+// for example TLS1PRF[hash.Hash](result, secret, label, seed, nil). -+// The pseudo-random number will be written to result and will be of length len(result). -+func TLS1PRF[H hash.Hash](result, secret, label, seed []byte, fh func() H) error { -+ var md ossl.EVP_MD_PTR -+ if fh == nil { -+ // TLS 1.0/1.1 PRF doesn't allow to specify the hash function, -+ // it always uses MD5SHA1. If fh is nil, then assume -+ // that the caller wants to use TLS 1.0/1.1 PRF. -+ // OpenSSL detects this case by checking if the hash -+ // function is MD5SHA1. -+ md = loadHash(crypto.MD5SHA1, false).md -+ } else { -+ h, err := hashFuncHash(fh) -+ if err != nil { -+ return err -+ } -+ md = hashToMD(h) -+ } -+ if md == nil { -+ return errors.New("unsupported hash function") -+ } -+ -+ switch major() { -+ case 1: -+ return tls1PRF1(result, secret, label, seed, md) -+ default: -+ return tls1PRF3(result, secret, label, seed, md) -+ } -+} -+ -+// tls1PRF1 implements TLS1PRF for OpenSSL 1 using the EVP_PKEY API. -+func tls1PRF1(result, secret, label, seed []byte, md ossl.EVP_MD_PTR) error { -+ ctx, err := ossl.EVP_PKEY_CTX_new_id(ossl.EVP_PKEY_TLS1_PRF, nil) -+ if err != nil { -+ return err -+ } -+ defer func() { -+ ossl.EVP_PKEY_CTX_free(ctx) -+ }() -+ -+ if _, err := ossl.EVP_PKEY_derive_init(ctx); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, -+ ossl.EVP_PKEY_OP_DERIVE, -+ ossl.EVP_PKEY_CTRL_TLS_MD, -+ 0, unsafe.Pointer(md)); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, -+ ossl.EVP_PKEY_OP_DERIVE, -+ ossl.EVP_PKEY_CTRL_TLS_SECRET, -+ int32(len(secret)), unsafe.Pointer(base(secret))); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, -+ ossl.EVP_PKEY_OP_DERIVE, -+ ossl.EVP_PKEY_CTRL_TLS_SEED, -+ int32(len(label)), unsafe.Pointer(base(label))); err != nil { -+ return err -+ } -+ if _, err := ossl.EVP_PKEY_CTX_ctrl(ctx, -1, -+ ossl.EVP_PKEY_OP_DERIVE, -+ ossl.EVP_PKEY_CTRL_TLS_SEED, -+ int32(len(seed)), unsafe.Pointer(base(seed))); err != nil { -+ return err -+ } -+ outLen := len(result) -+ if _, err := ossl.EVP_PKEY_derive(ctx, result, &outLen); err != nil { -+ return err -+ } -+ // The Go standard library expects TLS1PRF to return the requested number of bytes, -+ // fail if it doesn't. While there is no known situation where this will happen, -+ // EVP_PKEY_derive handles multiple algorithms and there could be a subtle mismatch -+ // after more code changes in the future. -+ if outLen != len(result) { -+ return errors.New("tls1-prf: derived less bytes than requested") -+ } -+ return nil -+} -+ -+// fetchTLS1PRF3 fetches the TLS1-PRF KDF algorithm. -+// It is safe to call this function concurrently. -+// The returned EVP_KDF_PTR shouldn't be freed. -+var fetchTLS1PRF3 = sync.OnceValues(func() (ossl.EVP_KDF_PTR, error) { -+ kdf, err := ossl.EVP_KDF_fetch(nil, _OSSL_KDF_NAME_TLS1_PRF.ptr(), nil) -+ if err != nil { -+ return nil, err -+ } -+ return kdf, nil -+}) -+ -+// tls1PRF3 implements TLS1PRF for OpenSSL 3 using the EVP_KDF API. -+func tls1PRF3(result, secret, label, seed []byte, md ossl.EVP_MD_PTR) error { -+ kdf, err := fetchTLS1PRF3() -+ if err != nil { -+ return err -+ } -+ ctx, err := ossl.EVP_KDF_CTX_new(kdf) -+ if err != nil { -+ return err -+ } -+ defer ossl.EVP_KDF_CTX_free(ctx) -+ -+ bld := newParamBuilder() -+ defer bld.finalize() -+ bld.addUTF8String(_OSSL_KDF_PARAM_DIGEST, ossl.EVP_MD_get0_name(md), 0) -+ bld.addOctetString(_OSSL_KDF_PARAM_SECRET, secret) -+ bld.addOctetString(_OSSL_KDF_PARAM_SEED, label) -+ bld.addOctetString(_OSSL_KDF_PARAM_SEED, seed) -+ params, err := bld.build() -+ if err != nil { -+ return err -+ } -+ defer ossl.OSSL_PARAM_free(params) -+ -+ if _, err := ossl.EVP_KDF_derive(ctx, result, params); err != nil { -+ return err -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/zaes.go b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/zaes.go -new file mode 100644 -index 00000000000000..ac79a864271eee ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/openssl/zaes.go -@@ -0,0 +1,87 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Code generated by cmd/genaesmodes. DO NOT EDIT. -+ -+package openssl -+ -+import "crypto/cipher" -+ -+type cipherWithCBC struct { -+ aesCipher -+} -+ -+type cipherWithCTR struct { -+ aesCipher -+} -+ -+type cipherWithCBC_CTR struct { -+ aesCipher -+ cipherWithCBC -+ cipherWithCTR -+} -+ -+type cipherWithGCM struct { -+ aesCipher -+} -+ -+type cipherWithCBC_GCM struct { -+ aesCipher -+ cipherWithCBC -+ cipherWithGCM -+} -+ -+type cipherWithCTR_GCM struct { -+ aesCipher -+ cipherWithCTR -+ cipherWithGCM -+} -+ -+type cipherWithCBC_CTR_GCM struct { -+ aesCipher -+ cipherWithCBC -+ cipherWithCTR -+ cipherWithGCM -+} -+ -+func newAESBlock(c *evpCipher, kind cipherKind) cipher.Block { -+ aes := aesCipher{c} -+ var block cipher.Block -+ supportsCBC := loadCipher(kind, cipherModeCBC) != nil -+ supportsCTR := loadCipher(kind, cipherModeCTR) != nil -+ supportsGCM := loadCipher(kind, cipherModeGCM) != nil -+ switch { -+ case !supportsCBC && !supportsCTR && !supportsGCM: -+ block = aes -+ case supportsCBC && !supportsCTR && !supportsGCM: -+ block = cipherWithCBC{aes} -+ case !supportsCBC && supportsCTR && !supportsGCM: -+ block = cipherWithCTR{aes} -+ case supportsCBC && supportsCTR && !supportsGCM: -+ block = cipherWithCBC_CTR{aes, -+ cipherWithCBC{aes}, -+ cipherWithCTR{aes}, -+ } -+ case !supportsCBC && !supportsCTR && supportsGCM: -+ block = cipherWithGCM{aes} -+ case supportsCBC && !supportsCTR && supportsGCM: -+ block = cipherWithCBC_GCM{aes, -+ cipherWithCBC{aes}, -+ cipherWithGCM{aes}, -+ } -+ case !supportsCBC && supportsCTR && supportsGCM: -+ block = cipherWithCTR_GCM{aes, -+ cipherWithCTR{aes}, -+ cipherWithGCM{aes}, -+ } -+ case supportsCBC && supportsCTR && supportsGCM: -+ block = cipherWithCBC_CTR_GCM{aes, -+ cipherWithCBC{aes}, -+ cipherWithCTR{aes}, -+ cipherWithGCM{aes}, -+ } -+ default: -+ panic("unreachable") -+ } -+ return block -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/fips.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/fips.go -new file mode 100644 -index 00000000000000..38e4b34472dd55 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/fips.go -@@ -0,0 +1,115 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package osslsetup -+ -+import ( -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// cString is a null-terminated string, -+// akin to C's char*. -+type cString string -+ -+// ptr returns a pointer to the string data. -+// It panics if the string is not null-terminated. -+// -+// The memory pointed to by the returned pointer should -+// not be modified and it must only be passed to -+// "const char*" parameters. Any attempt to modify it -+// will result in a runtime panic, as Go strings are -+// allocated in read-only memory. -+func (s cString) ptr() *byte { -+ if len(s) == 0 { -+ return nil -+ } -+ if s[len(s)-1] != 0 { -+ panic("must be null-terminated") -+ } -+ return unsafe.StringData(string(s)) -+} -+ -+const ( -+ // Provider names -+ _ProviderNameFips cString = "fips\x00" -+ -+ // Digest Names -+ _DigestNameSHA2_256 cString = "SHA2-256\x00" -+) -+ -+// FIPS returns true if OpenSSL is running in FIPS mode and there is -+// a provider available that supports FIPS. It returns false otherwise. -+// All OpenSSL functions used in here should be tagged with "init_1" or "init_3" in shims.h. -+func FIPS() bool { -+ switch vMajor { -+ case 1: -+ return ossl.FIPS_mode() == 1 -+ case 3, 4: -+ // Check if the default properties contain `fips=1`. -+ if ossl.EVP_default_properties_is_fips_enabled(nil) != 1 { -+ // Note that it is still possible that the provider used by default is FIPS-compliant, -+ // but that wouldn't be a system or user requirement. -+ return false -+ } -+ // Check if the SHA-256 algorithm is available. If it is, then we can be sure that there is a provider available that matches -+ // the `fips=1` query. Most notably, this works for the common case of using the built-in FIPS provider. -+ // -+ // Note that this approach has a small chance of false negative if the FIPS provider doesn't provide the SHA-256 algorithm, -+ // but that is highly unlikely because SHA-256 is one of the most common algorithms and fundamental to many cryptographic operations. -+ // It also has a small chance of false positive if the FIPS provider implements the SHA-256 algorithm but not the other algorithms -+ // used by the caller application, but that is also unlikely because the FIPS provider should provide all common algorithms. -+ return proveSHA256("") -+ default: -+ panic(errUnsupportedVersion()) -+ } -+} -+ -+// FIPSCapable returns true if the provider used by default matches the `fips=yes` query. -+// It is useful for checking whether OpenSSL is capable of running in FIPS mode regardless -+// of whether FIPS mode is explicitly enabled. For example, Azure Linux 3 doesn't set the -+// `fips=yes` query in the default properties, but sets the default provider to be SCOSSL, -+// which is FIPS-capable. -+// -+// Considerations: -+// - Can return true even if [FIPS] returns false, because [FIPS] also checks whether -+// the default properties contain `fips=yes`. -+// - When using OpenSSL 3, will always return true if [FIPS] returns true. -+// - When using OpenSSL 1, will always return the same value as [FIPS]. -+// - OpenSSL 3 doesn't provide a way to know if a provider is FIPS-capable. This function uses -+// some heuristics that should be treated as an implementation detail that may change in the future. -+func FIPSCapable() bool { -+ if FIPS() { -+ return true -+ } -+ switch vMajor { -+ case 3, 4: -+ // Load the provider with and without the `fips=yes` query. -+ // If the providers are the same, then the default provider is FIPS-capable. -+ provFIPS := sha256Provider(_ProviderNameFips) -+ if provFIPS == nil { -+ return false -+ } -+ provDefault := sha256Provider("") -+ return provFIPS == provDefault -+ } -+ return false -+} -+ -+// sha256Provider returns the provider for the SHA-256 algorithm -+// using the given properties. -+func sha256Provider(props cString) ossl.OSSL_PROVIDER_PTR { -+ md, _ := ossl.EVP_MD_fetch(nil, _DigestNameSHA2_256.ptr(), props.ptr()) -+ if md == nil { -+ return nil -+ } -+ defer ossl.EVP_MD_free(md) -+ return ossl.EVP_MD_get0_provider(md) -+} -+ -+// proveSHA256 checks if the SHA-256 algorithm is available -+// using the given properties. -+func proveSHA256(props cString) bool { -+ return sha256Provider(props) != nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init.go -new file mode 100644 -index 00000000000000..720a446838ea7d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init.go -@@ -0,0 +1,170 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package osslsetup -+ -+import ( -+ "errors" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+// osslHandle is the handle to the OpenSSL shared library loaded in the [Init] function. -+var osslHandle unsafe.Pointer -+ -+// opensslInit loads and initializes OpenSSL. -+// -+// See [Init] for details about file. -+func opensslInit(file string) error { -+ // Load the OpenSSL shared library using dlopen. -+ handle, close, err := openLibrary(file) -+ if err != nil { -+ return err -+ } -+ -+ ossl.MkcgoLoad_(handle) -+ if vMajor == 1 { -+ ossl.MkcgoLoad_legacy_1(handle) -+ } else { -+ ossl.MkcgoLoad_3(handle) -+ if vMajor > 3 || (vMajor == 3 && vMinor >= 3) { -+ ossl.MkcgoLoad_33(handle) -+ } -+ } -+ -+ // Initialize OpenSSL. -+ ossl.OPENSSL_init() -+ if _, err = ossl.OPENSSL_init_crypto( -+ ossl.OPENSSL_INIT_ADD_ALL_CIPHERS| -+ ossl.OPENSSL_INIT_ADD_ALL_DIGESTS| -+ ossl.OPENSSL_INIT_LOAD_CONFIG| -+ ossl.OPENSSL_INIT_LOAD_CRYPTO_STRINGS, -+ nil); err != nil { -+ close() -+ return err -+ } -+ osslHandle = handle -+ return nil -+} -+ -+// initForCheckVersion loads and initialize only the -+// functions required in [CheckVersion]. -+// It returns a close function that must be called to release the resources. -+// -+// This function modifies the vMajor, vMinor, and vPatch global variables as -+// well as other internal global variables that facilitate OpenSSL calls. -+// -+// If the function succeeds, calling the close function restores the previous -+// state of the global variables. If it fails, the global variables are restored -+// before returning. -+func initForCheckVersion(file string) (func(), error) { -+ prevMajor, prevMinor, prevPatch := vMajor, vMinor, vPatch -+ restoreVersion := func() { -+ vMajor, vMinor, vPatch = prevMajor, prevMinor, prevPatch -+ } -+ handle, close, err := openLibrary(file) -+ if err != nil { -+ restoreVersion() -+ return nil, err -+ } -+ initFuncs := func() (loadX func(unsafe.Pointer), unloadX func()) { -+ switch vMajor { -+ case 1: -+ loadX = ossl.MkcgoLoad_init_1 -+ unloadX = ossl.MkcgoUnload_init_1 -+ default: -+ if vMajor < 3 { -+ // openLibrary should have already rejected this. -+ panic(errUnsupportedVersion()) -+ } -+ // Any 3+ major uses the OpenSSL 3 init shim: 3+ guarantees -+ // ABI/API compatibility within the same major. -+ loadX = ossl.MkcgoLoad_init_3 -+ unloadX = ossl.MkcgoUnload_init_3 -+ } -+ return -+ } -+ loadX, unloadX := initFuncs() -+ loadX(handle) -+ return func() { -+ restoreVersion() -+ close() -+ unloadX() -+ if osslHandle != nil { -+ // If osslHandle is not nil, it means that the library was already loaded -+ // and initialized. In this case, we need to reload the functions from -+ // the original handle. -+ loadX, _ = initFuncs() -+ loadX(osslHandle) -+ } -+ }, nil -+} -+ -+// openLibrary loads and initialize the version of OpenSSL. -+// It returns the handle to the OpenSSL shared library -+// and a function that can be called to release the resources. -+func openLibrary(file string) (handle unsafe.Pointer, close func(), err error) { -+ vMajor, vMinor, vPatch = 0, 0, 0 -+ handle, err = dlopen(file) -+ if err != nil { -+ return nil, nil, err -+ } -+ // Retrieve the loaded OpenSSL version and check if it is supported. -+ // Notice that major and minor could not match with the version parameter -+ // in case the name of the shared library file differs from the OpenSSL -+ // version it contains. -+ ossl.MkcgoLoad_version(handle) -+ close = func() { -+ dlclose(handle) -+ if osslHandle == nil { -+ ossl.MkcgoUnload_version() -+ } else { -+ ossl.MkcgoLoad_version(osslHandle) -+ } -+ } -+ defer func() { -+ if err != nil { -+ close() -+ } -+ }() -+ -+ if ossl.OPENSSL_version_major_Available() && -+ ossl.OPENSSL_version_minor_Available() && -+ ossl.OPENSSL_version_patch_Available() { -+ // Likely OpenSSL 3 or later. -+ vMajor = int(ossl.OPENSSL_version_major()) -+ vMinor = int(ossl.OPENSSL_version_minor()) -+ vPatch = int(ossl.OPENSSL_version_patch()) -+ } else if ossl.OpenSSL_version_num_Available() { -+ // Likely OpenSSL 1. -+ ver := ossl.OpenSSL_version_num() -+ vMajor = int(ver >> 28) -+ vMinor = int(ver >> 20 & 0xFF) -+ vPatch = int(ver >> 12 & 0xFF) -+ } else { -+ return handle, nil, errors.New("openssl: version not available") -+ } -+ var supported bool -+ switch vMajor { -+ case 1: -+ supported = vMinor == 1 && vPatch >= 1 -+ default: -+ // 3+ guarantees ABI/API compatibility within the same major, -+ // so any tested major is supported. Untested 3+ majors require -+ // GODEBUG=ms_opensslallowuntested=1. -+ for _, m := range testedMajors { -+ if vMajor == m { -+ supported = true -+ break -+ } -+ } -+ if !supported && vMajor >= 3 && allowUntestedMajor() { -+ supported = true -+ } -+ } -+ if !supported { -+ return handle, nil, errUnsupportedVersion() -+ } -+ return handle, close, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_cgo_unix.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_cgo_unix.go -new file mode 100644 -index 00000000000000..45903c12e802df ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_cgo_unix.go -@@ -0,0 +1,34 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build unix -+ -+package osslsetup -+ -+// #cgo LDFLAGS: -ldl -+// #include -+// #include -+import "C" -+import ( -+ "errors" -+ "unsafe" -+) -+ -+func dlopen(file string) (handle unsafe.Pointer, err error) { -+ cv := C.CString(file) -+ defer C.free(unsafe.Pointer(cv)) -+ handle = C.dlopen(cv, C.RTLD_LAZY|C.RTLD_LOCAL) -+ if handle == nil { -+ errstr := C.GoString(C.dlerror()) -+ return nil, errors.New("openssl: can't load " + file + ": " + errstr) -+ } -+ return handle, nil -+} -+ -+func dlclose(handle unsafe.Pointer) error { -+ if C.dlclose(handle) != 0 { -+ errstr := C.GoString(C.dlerror()) -+ return errors.New("openssl: can't close libcrypto: " + errstr) -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_nocgo_unix.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_nocgo_unix.go -new file mode 100644 -index 00000000000000..e91d5df6b7685a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_nocgo_unix.go -@@ -0,0 +1,35 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build unix && !cgo && (go1.27 || !s390x) -+ -+package osslsetup -+ -+import ( -+ "errors" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+func dlopen(file string) (handle unsafe.Pointer, err error) { -+ const RTLD_LAZY = 1 -+ var RTLD_LOCAL = 0 -+ if runtime.GOOS == "darwin" { -+ RTLD_LOCAL = 4 // darwin uses 4 as RTLD_LOCAL -+ } -+ handle = ossl.Dlopen(unsafe.StringData(file+"\x00"), int32(RTLD_LAZY|RTLD_LOCAL)) -+ if handle == nil { -+ return nil, errors.New("openssl: can't load " + file + ": " + goString(ossl.Dlerror())) -+ } -+ return handle, nil -+} -+ -+func dlclose(handle unsafe.Pointer) error { -+ if ossl.Dlclose(handle) != 0 { -+ errstr := goString(ossl.Dlerror()) -+ return errors.New("openssl: can't close libcrypto: " + errstr) -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_windows.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_windows.go -new file mode 100644 -index 00000000000000..312dfc88d7f311 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/init_windows.go -@@ -0,0 +1,37 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package osslsetup -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+type dlopenError struct { -+ file string -+ err error -+} -+ -+func (e *dlopenError) Error() string { -+ return "openssl: can't load " + e.file + ": " + e.err.Error() -+} -+ -+func (e *dlopenError) Unwrap() error { -+ return e.err -+} -+ -+func dlopen(file string) (handle unsafe.Pointer, err error) { -+ // As Windows generally does not ship with a system OpenSSL library, let -+ // alone a FIPS 140 certified one, use the default library search order so -+ // that we preferentially load the DLL bundled with the application. -+ h, err := syscall.LoadLibrary(file) -+ if err != nil { -+ return nil, &dlopenError{file: file, err: err} -+ } -+ return unsafe.Pointer(h), nil -+} -+ -+func dlclose(handle unsafe.Pointer) error { -+ return syscall.FreeLibrary(syscall.Handle(handle)) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup.go -new file mode 100644 -index 00000000000000..ed33d8efe1edbb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup.go -@@ -0,0 +1,123 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package osslsetup -+ -+import ( -+ "errors" -+ "strconv" -+ "sync" -+ "syscall" -+ -+ "github.com/microsoft/go-crypto-openssl/internal/ossl" -+) -+ -+var ( -+ vMajor, vMinor, vPatch int -+) -+ -+// testedMajors lists the OpenSSL major versions this backend has been -+// tested against. [openLibrary] rejects majors not in this list unless -+// GODEBUG=ms_opensslallowuntested=1 is set. OpenSSL 1 is supported only -+// at 1.1.1+; that minor/patch constraint is enforced separately in -+// [openLibrary]. -+var testedMajors = [...]int{1, 3, 4} -+ -+// IsTestedMajor reports whether m is one of the OpenSSL major versions -+// this backend has been tested against (see [testedMajors]). Callers -+// that depend on version-specific layouts or behaviors should gate on -+// this so they degrade safely on untested majors loaded via -+// GODEBUG=ms_opensslallowuntested=1. -+func IsTestedMajor(m int) bool { -+ for _, v := range testedMajors { -+ if v == m { -+ return true -+ } -+ } -+ return false -+} -+ -+// allowUntestedMajor reports whether the user has set -+// GODEBUG=ms_opensslallowuntested=1. The "ms_" prefix marks this as a -+// Microsoft-defined GODEBUG so it will not collide with upstream Go. -+var allowUntestedMajor = sync.OnceValue(func() bool { -+ godebug, _ := syscall.Getenv("GODEBUG") -+ return godebugAllowUntested(godebug) -+}) -+ -+// godebugAllowUntested reports whether the comma-separated GODEBUG string -+// contains ms_opensslallowuntested=1. Matches internal/godebug parsing: -+// no whitespace trimming. -+func godebugAllowUntested(godebug string) bool { -+ const key = "ms_opensslallowuntested=1" -+ var start int = 0 -+ for i := 0; i <= len(godebug); i++ { -+ if i < len(godebug) && godebug[i] != ',' { -+ continue -+ } -+ if godebug[start:i] == key { -+ return true -+ } -+ start = i + 1 -+ } -+ return false -+} -+ -+func VersionMajor() int { -+ return vMajor -+} -+ -+func VersionMinor() int { -+ return vMinor -+} -+ -+func VersionPatch() int { -+ return vPatch -+} -+ -+func utoa(n int) string { -+ return strconv.FormatUint(uint64(n), 10) -+} -+ -+func errUnsupportedVersion() error { -+ return errors.New("openssl: unsupported OpenSSL version: " + utoa(vMajor) + "." + utoa(vMinor) + "." + utoa(vPatch) + " (minimum supported version is 1.1.1)") -+} -+ -+var ( -+ initOnce sync.Once -+ initErr error -+) -+ -+// Init loads and initializes OpenSSL from the shared library at path. -+// It must be called before any other OpenSSL call, except CheckVersion. -+// -+// Only the first call to Init is effective. -+// Subsequent calls will return the same error result as the one from the first call. -+// -+// The file is passed to dlopen() verbatim to load the OpenSSL shared library. -+// For example, `file=libcrypto.so.1.1.1k-fips` makes Init look for the shared -+// library libcrypto.so.1.1.1k-fips. -+func Init(file string) error { -+ initOnce.Do(func() { -+ initErr = opensslInit(file) -+ }) -+ return initErr -+} -+ -+// VersionText returns the version text of the OpenSSL currently loaded. -+func VersionText() string { -+ return goString(ossl.OpenSSL_version(0)) -+} -+ -+// CheckVersion checks if the OpenSSL version can be loaded -+// and if the FIPS mode is enabled. -+// This function can be called before Init. -+// All OpenSSL functions used in here should be tagged with "init_1" or "init_3" in shims.h. -+func CheckVersion(version string) (exists, fips bool) { -+ close, err := initForCheckVersion(version) -+ if err != nil { -+ return false, false -+ } -+ defer close() -+ return true, FIPS() -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_cgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_cgo.go -new file mode 100644 -index 00000000000000..079fbceb2cdc56 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_cgo.go -@@ -0,0 +1,12 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package osslsetup -+ -+import "C" -+import "unsafe" -+ -+// goString converts a C string pointer to a Go string for cgo mode -+func goString(ptr *byte) string { -+ return C.GoString((*C.char)(unsafe.Pointer(ptr))) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_nocgo.go b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_nocgo.go -new file mode 100644 -index 00000000000000..fe075ff0822c29 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-openssl/osslsetup/osslsetup_nocgo.go -@@ -0,0 +1,24 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build !cgo -+ -+package osslsetup -+ -+import "unsafe" -+ -+// goString converts a C string pointer to a Go string for nocgo mode -+func goString(ptr *byte) string { -+ if ptr == nil { -+ return "" -+ } -+ var result []byte -+ for i := 0; ; i++ { -+ b := *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) + uintptr(i))) -+ if b == 0 { -+ break -+ } -+ result = append(result, b) -+ } -+ return string(result) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/LICENSE b/src/vendor/github.com/microsoft/go-crypto-winnative/LICENSE -new file mode 100644 -index 00000000000000..9e841e7a26e4eb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/LICENSE -@@ -0,0 +1,21 @@ -+ MIT License -+ -+ Copyright (c) Microsoft Corporation. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a copy -+ of this software and associated documentation files (the "Software"), to deal -+ in the Software without restriction, including without limitation the rights -+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+ copies of the Software, and to permit persons to whom the Software is -+ furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice shall be included in all -+ copies or substantial portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+ SOFTWARE -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/aes.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/aes.go -new file mode 100644 -index 00000000000000..3c235d27562871 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/aes.go -@@ -0,0 +1,435 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "bytes" -+ "crypto/cipher" -+ "errors" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+ "github.com/microsoft/go-crypto-winnative/internal/subtle" -+) -+ -+const aesBlockSize = 16 -+ -+type aesCipher struct { -+ kh bcrypt.KEY_HANDLE -+ key []byte -+} -+ -+func NewAESCipher(key []byte) (cipher.Block, error) { -+ kh, err := newCipherHandle(bcrypt.AES_ALGORITHM, bcrypt.CHAIN_MODE_ECB, key) -+ if err != nil { -+ return nil, err -+ } -+ c := &aesCipher{kh: kh, key: bytes.Clone(key)} -+ runtime.SetFinalizer(c, (*aesCipher).finalize) -+ return c, nil -+} -+ -+func (c *aesCipher) finalize() { -+ bcrypt.DestroyKey(c.kh) -+} -+ -+func (c *aesCipher) BlockSize() int { return aesBlockSize } -+ -+// validateAndClipInputs checks that dst and src meet the [cipher.Block] -+// interface requirements and clips them to a single block. -+func (c *aesCipher) validateAndClipInputs(dst, src []byte) (d, s []byte) { -+ if len(src) < aesBlockSize { -+ panic("crypto/aes: input not full block") -+ } -+ if len(dst) < aesBlockSize { -+ panic("crypto/aes: output not full block") -+ } -+ // cypher.Block methods are documented to operate on -+ // one block at a time, so we truncate the input and output -+ // to the block size. -+ d, s = dst[:aesBlockSize], src[:aesBlockSize] -+ if subtle.InexactOverlap(d, s) { -+ panic("crypto/aes: invalid buffer overlap") -+ } -+ return d, s -+} -+ -+func (c *aesCipher) Encrypt(dst, src []byte) { -+ dst, src = c.validateAndClipInputs(dst, src) -+ -+ var ret uint32 -+ err := bcrypt.Encrypt(c.kh, src, nil, nil, dst, &ret, 0) -+ if err != nil { -+ panic(err) -+ } -+ if int(ret) != len(src) { -+ panic("crypto/aes: plaintext not fully encrypted") -+ } -+ runtime.KeepAlive(c) -+} -+ -+func (c *aesCipher) Decrypt(dst, src []byte) { -+ dst, src = c.validateAndClipInputs(dst, src) -+ -+ var ret uint32 -+ err := bcrypt.Decrypt(c.kh, src, nil, nil, dst, &ret, 0) -+ if err != nil { -+ panic(err) -+ } -+ if int(ret) != len(src) { -+ panic("crypto/aes: plaintext not fully decrypted") -+ } -+ runtime.KeepAlive(c) -+} -+ -+func (c *aesCipher) NewCBCEncrypter(iv []byte) cipher.BlockMode { -+ return newCBC(true, bcrypt.AES_ALGORITHM, c.key, iv) -+} -+ -+func (c *aesCipher) NewFIPSCBCEncrypter(iv []byte) cipher.BlockMode { -+ return newCBC(true, bcrypt.AES_ALGORITHM, c.key, iv) -+} -+ -+func (c *aesCipher) NewCBCDecrypter(iv []byte) cipher.BlockMode { -+ return newCBC(false, bcrypt.AES_ALGORITHM, c.key, iv) -+} -+ -+func (c *aesCipher) NewFIPSCBCDecrypter(iv []byte) cipher.BlockMode { -+ return newCBC(false, bcrypt.AES_ALGORITHM, c.key, iv) -+} -+ -+type noGCM struct { -+ cipher.Block -+} -+ -+func (c *aesCipher) NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) { -+ if nonceSize != gcmStandardNonceSize && tagSize != gcmTagSize { -+ return nil, errors.New("crypto/aes: GCM tag and nonce sizes can't be non-standard at the same time") -+ } -+ // Fall back to standard library for GCM with non-standard nonce or tag size. -+ if nonceSize != gcmStandardNonceSize { -+ return cipher.NewGCMWithNonceSize(&noGCM{c}, nonceSize) // CodeQL [SM04391] This is to keep compatibility with upstream, it's on end user teams to raise exceptions with the Crypto Board. -+ } -+ if tagSize != gcmTagSize { -+ return cipher.NewGCMWithTagSize(&noGCM{c}, tagSize) // CodeQL [SM04391] This is to keep compatibility with upstream, it's on end user teams to raise exceptions with the Crypto Board. -+ } -+ return newGCM(c.key, cipherGCMTLSNone) -+} -+ -+// NewGCMTLS returns a GCM cipher specific to TLS -+// and should not be used for non-TLS purposes. -+func NewGCMTLS(c cipher.Block) (cipher.AEAD, error) { -+ return c.(*aesCipher).NewGCMTLS() -+} -+ -+func (c *aesCipher) NewGCMTLS() (cipher.AEAD, error) { -+ return newGCM(c.key, cipherGCMTLS12) -+} -+ -+// NewGCMTLS13 returns a GCM cipher specific to TLS 1.3 and should not be used -+// for non-TLS purposes. -+func NewGCMTLS13(c cipher.Block) (cipher.AEAD, error) { -+ return c.(*aesCipher).NewGCMTLS13() -+} -+ -+func (c *aesCipher) NewGCMTLS13() (cipher.AEAD, error) { -+ return newGCM(c.key, cipherGCMTLS13) -+} -+ -+type cbcCipher struct { -+ kh bcrypt.KEY_HANDLE -+ // Use aesBlockSize, the max of all supported cipher block sizes. -+ // The array avoids allocations (vs. a slice). -+ iv [aesBlockSize]byte -+ blockSize int -+ encrypt bool -+} -+ -+func newCBC(encrypt bool, alg string, key, iv []byte) *cbcCipher { -+ var blockSize int -+ switch alg { -+ case bcrypt.AES_ALGORITHM: -+ blockSize = aesBlockSize -+ case bcrypt.DES_ALGORITHM, bcrypt.DES3_ALGORITHM: -+ blockSize = desBlockSize -+ default: -+ panic("invalid algorithm: " + alg) -+ } -+ kh, err := newCipherHandle(alg, bcrypt.CHAIN_MODE_CBC, key) -+ if err != nil { -+ panic(err) -+ } -+ x := &cbcCipher{kh: kh, encrypt: encrypt, blockSize: blockSize} -+ runtime.SetFinalizer(x, (*cbcCipher).finalize) -+ x.SetIV(iv) -+ return x -+} -+ -+func (x *cbcCipher) finalize() { -+ bcrypt.DestroyKey(x.kh) -+} -+ -+func (x *cbcCipher) BlockSize() int { return x.blockSize } -+ -+func (x *cbcCipher) CryptBlocks(dst, src []byte) { -+ if subtle.InexactOverlap(dst, src) { -+ panic("crypto/cipher: invalid buffer overlap") -+ } -+ if len(src)%x.blockSize != 0 { -+ panic("crypto/cipher: input not full blocks") -+ } -+ if len(dst) < len(src) { -+ panic("crypto/cipher: output smaller than input") -+ } -+ if len(src) == 0 { -+ return -+ } -+ var ret uint32 -+ var err error -+ if x.encrypt { -+ err = bcrypt.Encrypt(x.kh, src, nil, x.iv[:x.blockSize], dst, &ret, 0) -+ } else { -+ err = bcrypt.Decrypt(x.kh, src, nil, x.iv[:x.blockSize], dst, &ret, 0) -+ } -+ if err != nil { -+ panic(err) -+ } -+ if int(ret) != len(src) { -+ panic("crypto/aes: plaintext not fully encrypted") -+ } -+ runtime.KeepAlive(x) -+} -+ -+func (x *cbcCipher) SetIV(iv []byte) { -+ if len(iv) != x.blockSize { -+ panic("cipher: incorrect length IV") -+ } -+ copy(x.iv[:], iv) -+} -+ -+const ( -+ gcmTagSize = 16 -+ gcmStandardNonceSize = 12 -+ // TLS 1.2 additional data is constructed as: -+ // -+ // additional_data = seq_num(8) + TLSCompressed.type(1) + TLSCompressed.version(2) + TLSCompressed.length(2); -+ gcmTls12AddSize = 13 -+ // TLS 1.3 additional data is constructed as: -+ // -+ // additional_data = TLSCiphertext.opaque_type(1) || TLSCiphertext.legacy_record_version(2) || TLSCiphertext.length(2) -+ gcmTls13AddSize = 5 -+ gcmTlsFixedNonceSize = 4 -+) -+ -+type cipherGCMTLS uint8 -+ -+const ( -+ cipherGCMTLSNone cipherGCMTLS = iota -+ cipherGCMTLS12 -+ cipherGCMTLS13 -+) -+ -+type aesGCM struct { -+ kh bcrypt.KEY_HANDLE -+ tls cipherGCMTLS -+ // minNextNonce is the minimum value that the next nonce can be, enforced by -+ // all TLS modes. -+ minNextNonce uint64 -+ // mask is the nonce mask used in TLS 1.3 mode. -+ mask uint64 -+ // maskInitialized is true if mask has been initialized. This happens during -+ // the first Seal. The initialized mask may be 0. Used by TLS 1.3 mode. -+ maskInitialized bool -+} -+ -+func (g *aesGCM) finalize() { -+ bcrypt.DestroyKey(g.kh) -+} -+ -+func newGCM(key []byte, tls cipherGCMTLS) (*aesGCM, error) { -+ kh, err := newCipherHandle(bcrypt.AES_ALGORITHM, bcrypt.CHAIN_MODE_GCM, key) -+ if err != nil { -+ return nil, err -+ } -+ g := &aesGCM{kh: kh, tls: tls} -+ runtime.SetFinalizer(g, (*aesGCM).finalize) -+ return g, nil -+} -+ -+func (g *aesGCM) NonceSize() int { -+ return gcmStandardNonceSize -+} -+ -+func (g *aesGCM) Overhead() int { -+ return gcmTagSize -+} -+ -+func (g *aesGCM) Seal(dst, nonce, plaintext, additionalData []byte) []byte { -+ if len(nonce) != gcmStandardNonceSize { -+ panic("cipher: incorrect nonce length given to GCM") -+ } -+ if uint64(len(plaintext)) > ((1<<32)-2)*aesBlockSize || len(plaintext)+gcmTagSize < len(plaintext) { -+ panic("cipher: message too large for GCM") -+ } -+ if len(dst)+len(plaintext)+gcmTagSize < len(dst) { -+ panic("cipher: message too large for buffer") -+ } -+ if g.tls != cipherGCMTLSNone { -+ if g.tls == cipherGCMTLS12 && len(additionalData) != gcmTls12AddSize { -+ panic("cipher: incorrect additional data length given to GCM TLS 1.2") -+ } else if g.tls == cipherGCMTLS13 && len(additionalData) != gcmTls13AddSize { -+ panic("cipher: incorrect additional data length given to GCM TLS 1.3") -+ } -+ counter := bigUint64(nonce[gcmTlsFixedNonceSize:]) -+ if g.tls == cipherGCMTLS13 { -+ // In TLS 1.3, the counter in the nonce has a mask and requires -+ // further decoding. -+ if !g.maskInitialized { -+ // According to TLS 1.3 nonce construction details at -+ // https://tools.ietf.org/html/rfc8446#section-5.3: -+ // -+ // the first record transmitted under a particular traffic -+ // key MUST use sequence number 0. -+ // -+ // The padded sequence number is XORed with [a mask]. -+ // -+ // The resulting quantity (of length iv_length) is used as -+ // the per-record nonce. -+ // -+ // We need to convert from the given nonce to sequence numbers -+ // to keep track of minNextNonce and enforce the counter -+ // maximum. On the first call, we know counter^mask is 0^mask, -+ // so we can simply store it as the mask. -+ g.mask = counter -+ g.maskInitialized = true -+ } -+ counter ^= g.mask -+ } -+ // BoringCrypto enforces strictly monotonically increasing explicit nonces -+ // and to fail after 2^64 - 1 keys as per FIPS 140-2 IG A.5, -+ // but BCrypt does not perform this check, so it is implemented here. -+ const maxUint64 = 1<<64 - 1 -+ if counter == maxUint64 { -+ panic("cipher: nonce counter must be less than 2^64 - 1") -+ } -+ if counter < g.minNextNonce { -+ panic("cipher: nonce counter must be strictly monotonically increasing") -+ } -+ defer func() { -+ g.minNextNonce = counter + 1 -+ }() -+ } -+ // Make room in dst to append plaintext+overhead. -+ ret, out := sliceForAppend(dst, len(plaintext)+gcmTagSize) -+ -+ // Check delayed until now to make sure len(dst) is accurate. -+ if subtle.InexactOverlap(out, plaintext) { -+ panic("cipher: invalid buffer overlap") -+ } -+ -+ info := bcrypt.NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, out[len(out)-gcmTagSize:]) -+ var encSize uint32 -+ err := bcrypt.Encrypt(g.kh, plaintext, unsafe.Pointer(info), nil, out, &encSize, 0) -+ if err != nil { -+ panic(err) -+ } -+ if int(encSize) != len(plaintext) { -+ panic("crypto/aes: plaintext not fully encrypted") -+ } -+ runtime.KeepAlive(g) -+ return ret -+} -+ -+func (g *aesGCM) SealWithRandomNonce(out, nonce, plaintext, additionalData []byte) { -+ if uint64(len(plaintext)) > uint64((1<<32)-2)*aesBlockSize { -+ panic("crypto/cipher: message too large for GCM") -+ } -+ if len(nonce) != gcmStandardNonceSize { -+ panic("crypto/cipher: incorrect nonce length given to GCMWithRandomNonce") -+ } -+ if len(out) != len(plaintext)+gcmTagSize { -+ panic("crypto/cipher: incorrect output length given to GCMWithRandomNonce") -+ } -+ if subtle.InexactOverlap(out, plaintext) { -+ panic("crypto/cipher: invalid buffer overlap of output and input") -+ } -+ if subtle.AnyOverlap(out, additionalData) { -+ panic("crypto/cipher: invalid buffer overlap of output and additional data") -+ } -+ -+ if g.tls != cipherGCMTLSNone { -+ panic("cipher: TLS 1.2 and 1.3 modes do not support random nonce") -+ } -+ -+ RandReader.Read(nonce) -+ info := bcrypt.NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, out[len(out)-gcmTagSize:]) -+ var encSize uint32 -+ err := bcrypt.Encrypt(g.kh, plaintext, unsafe.Pointer(info), nil, out, &encSize, 0) -+ if err != nil { -+ panic(err) -+ } -+ if int(encSize) != len(plaintext) { -+ panic("crypto/cipher: plaintext not fully encrypted") -+ } -+ runtime.KeepAlive(g) -+} -+ -+var errOpen = errors.New("cipher: message authentication failed") -+ -+func (g *aesGCM) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { -+ if len(nonce) != gcmStandardNonceSize { -+ panic("cipher: incorrect nonce length given to GCM") -+ } -+ if len(ciphertext) < gcmTagSize { -+ return nil, errOpen -+ } -+ if uint64(len(ciphertext)) > ((1<<32)-2)*aesBlockSize+gcmTagSize { -+ return nil, errOpen -+ } -+ -+ tag := ciphertext[len(ciphertext)-gcmTagSize:] -+ ciphertext = ciphertext[:len(ciphertext)-gcmTagSize] -+ -+ // Make room in dst to append ciphertext without tag. -+ ret, out := sliceForAppend(dst, len(ciphertext)) -+ -+ // Check delayed until now to make sure len(dst) is accurate. -+ if subtle.InexactOverlap(out, ciphertext) { -+ panic("cipher: invalid buffer overlap") -+ } -+ -+ info := bcrypt.NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, tag) -+ var decSize uint32 -+ err := bcrypt.Decrypt(g.kh, ciphertext, unsafe.Pointer(info), nil, out, &decSize, 0) -+ if err != nil || int(decSize) != len(ciphertext) { -+ for i := range out { -+ out[i] = 0 -+ } -+ return nil, errOpen -+ } -+ runtime.KeepAlive(g) -+ return ret, nil -+} -+ -+// sliceForAppend is a mirror of crypto/cipher.sliceForAppend. -+func sliceForAppend(in []byte, n int) (head, tail []byte) { -+ if total := len(in) + n; cap(in) >= total { -+ head = in[:total] -+ } else { -+ head = make([]byte, total) -+ copy(head, in) -+ } -+ tail = head[len(in):] -+ return -+} -+ -+func bigUint64(b []byte) uint64 { -+ _ = b[7] // bounds check hint to compiler; see go.dev/issue/14808 -+ return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | -+ uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/bbig/big.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/bbig/big.go -new file mode 100644 -index 00000000000000..584f2069b1cd0a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/bbig/big.go -@@ -0,0 +1,31 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package bbig -+ -+import ( -+ "math/big" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Enc(b *big.Int) cng.BigInt { -+ if b == nil { -+ return nil -+ } -+ x := b.Bytes() -+ if len(x) == 0 { -+ return cng.BigInt{} -+ } -+ return x -+} -+ -+func Dec(b cng.BigInt) *big.Int { -+ if b == nil { -+ return nil -+ } -+ if len(b) == 0 { -+ return new(big.Int) -+ } -+ return new(big.Int).SetBytes(b) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/big.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/big.go -new file mode 100644 -index 00000000000000..36f0e0c6e278bc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/big.go -@@ -0,0 +1,30 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+package cng -+ -+import "math/bits" -+ -+// This file does not have build constraints to -+// facilitate using BigInt in Go crypto. -+// Go crypto references BigInt unconditionally, -+// even if it is not finally used. -+ -+// A BigInt is the big-endian bytes from a math/big BigInt, -+// which are normalized to remove any leading 0 byte. -+// Windows BCrypt accepts this specific data format. -+// This definition allows us to avoid importing math/big. -+// Conversion between BigInt and *big.Int is in cng/bbig. -+type BigInt []byte -+ -+const _S = bits.UintSize / 8 // word size in bytes -+ -+// Length of x in bits. -+func (x BigInt) bitLen() int { -+ if len(x) == 0 { -+ return 0 -+ } -+ // x is normalized, so the length in bits is -+ // the length in bits of x minus one byte (_S), -+ // plus the minimum number of bits to represent the first byte. -+ return (len(x)-1)*_S + bits.Len(uint(x[0])) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/chacha20poly1305.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/chacha20poly1305.go -new file mode 100644 -index 00000000000000..64398979a27d10 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/chacha20poly1305.go -@@ -0,0 +1,119 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "crypto/cipher" -+ "errors" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+ "github.com/microsoft/go-crypto-winnative/internal/subtle" -+) -+ -+const ( -+ chacha20Poly1305KeySize = 32 -+ chacha20Poly1305NonceSize = 12 -+ chacha20Poly1305Overhead = 16 -+) -+ -+func SupportsChaCha20Poly1305() bool { -+ _, err := loadCipher(bcrypt.CHACHA20_POLY1305_ALGORITHM, "") -+ return err == nil -+} -+ -+type chacha20poly1305 struct { -+ kh bcrypt.KEY_HANDLE -+} -+ -+func NewChaCha20Poly1305(key []byte) (cipher.AEAD, error) { -+ if len(key) != chacha20Poly1305KeySize { -+ return nil, errors.New("chacha20poly1305: bad key length") -+ } -+ kh, err := newCipherHandle(bcrypt.CHACHA20_POLY1305_ALGORITHM, "", key) -+ if err != nil { -+ return nil, err -+ } -+ c := &chacha20poly1305{kh: kh} -+ runtime.SetFinalizer(c, (*chacha20poly1305).finalize) -+ return c, nil -+} -+ -+func (c *chacha20poly1305) finalize() { -+ if c.kh != 0 { -+ bcrypt.DestroyKey(c.kh) -+ } -+} -+ -+func (c *chacha20poly1305) NonceSize() int { -+ return chacha20Poly1305NonceSize -+} -+ -+func (c *chacha20poly1305) Overhead() int { -+ return chacha20Poly1305Overhead -+} -+ -+func (c *chacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { -+ if len(nonce) != chacha20Poly1305NonceSize { -+ panic("chacha20poly1305: bad nonce length passed to Seal") -+ } -+ -+ if uint64(len(plaintext)) > (1<<38)-64 { -+ panic("chacha20poly1305: plaintext too large") -+ } -+ ret, out := sliceForAppend(dst, len(plaintext)+chacha20Poly1305Overhead) -+ if subtle.InexactOverlap(out, plaintext) { -+ panic("chacha20poly1305: invalid buffer overlap of output and input") -+ } -+ if subtle.AnyOverlap(out, additionalData) { -+ panic("chacha20poly1305: invalid buffer overlap of output and additional data") -+ } -+ info := bcrypt.NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, out[len(out)-chacha20Poly1305Overhead:]) -+ var encSize uint32 -+ if err := bcrypt.Encrypt(c.kh, plaintext, unsafe.Pointer(info), nil, out, &encSize, 0); err != nil { -+ panic("chacha20poly1305: encryption failed: " + err.Error()) -+ } -+ if int(encSize) != len(plaintext) { -+ panic("chacha20poly1305: plaintext not fully encrypted") -+ } -+ runtime.KeepAlive(c) -+ return ret -+} -+ -+func (c *chacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { -+ if len(nonce) != chacha20Poly1305NonceSize { -+ panic("chacha20poly1305: bad nonce length passed to Open") -+ } -+ if len(ciphertext) < chacha20Poly1305Overhead { -+ return nil, errOpen -+ } -+ if uint64(len(ciphertext)) > (1<<38)-48 { -+ panic("chacha20poly1305: ciphertext too large") -+ } -+ tag := ciphertext[len(ciphertext)-chacha20Poly1305Overhead:] -+ ciphertext = ciphertext[:len(ciphertext)-chacha20Poly1305Overhead] -+ // Make room in dst to append ciphertext without tag. -+ ret, out := sliceForAppend(dst, len(ciphertext)) -+ if subtle.InexactOverlap(out, ciphertext) { -+ panic("chacha20poly1305: invalid buffer overlap of output and input") -+ } -+ if subtle.AnyOverlap(out, additionalData) { -+ panic("chacha20poly1305: invalid buffer overlap of output and additional data") -+ } -+ info := bcrypt.NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, tag) -+ var decSize uint32 -+ err := bcrypt.Decrypt(c.kh, ciphertext, unsafe.Pointer(info), nil, out, &decSize, 0) -+ if err != nil || int(decSize) != len(ciphertext) { -+ for i := range out { -+ out[i] = 0 -+ } -+ return nil, errOpen -+ } -+ runtime.KeepAlive(c) -+ return ret, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/cipher.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/cipher.go -new file mode 100644 -index 00000000000000..c1365f8d399d21 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/cipher.go -@@ -0,0 +1,52 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+type cipherAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+ allowedKeyLengths bcrypt.KEY_LENGTHS_STRUCT -+} -+ -+func loadCipher(id, mode string) (cipherAlgorithm, error) { -+ return loadOrStoreAlg(id, bcrypt.ALG_NONE_FLAG, mode, func(h bcrypt.ALG_HANDLE) (cipherAlgorithm, error) { -+ if mode != "" { -+ // Windows 8 added support to set the CipherMode value on a key, -+ // but Windows 7 requires that it be set on the algorithm before key creation. -+ err := setString(bcrypt.HANDLE(h), bcrypt.CHAINING_MODE, mode) -+ if err != nil { -+ return cipherAlgorithm{}, err -+ } -+ } -+ lengths, err := getKeyLengths(bcrypt.HANDLE(h)) -+ if err != nil { -+ return cipherAlgorithm{}, err -+ } -+ return cipherAlgorithm{h, lengths}, nil -+ }) -+} -+ -+func newCipherHandle(id, mode string, key []byte) (bcrypt.KEY_HANDLE, error) { -+ h, err := loadCipher(id, mode) -+ if err != nil { -+ return 0, err -+ } -+ if !keyIsAllowed(h.allowedKeyLengths, uint32(len(key)*8)) { -+ return 0, errors.New("crypto/cipher: invalid key size") -+ } -+ var kh bcrypt.KEY_HANDLE -+ err = bcrypt.GenerateSymmetricKey(h.handle, &kh, nil, key, 0) -+ if err != nil { -+ return 0, err -+ } -+ return kh, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/cng.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/cng.go -new file mode 100644 -index 00000000000000..a9e247e82b8a63 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/cng.go -@@ -0,0 +1,140 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "math" -+ "runtime" -+ "sync" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+func FIPS() (bool, error) { -+ var enabled bool -+ err := bcrypt.GetFipsAlgorithmMode(&enabled) -+ if err != nil { -+ return false, err -+ } -+ return enabled, nil -+} -+ -+// len32 clamps s length so it can fit into a Win32 LONG, -+// which is a 32-bit signed integer, without overflowing. -+func len32(s []byte) int { -+ if len(s) > math.MaxInt32 { -+ return math.MaxInt32 -+ } -+ return len(s) -+} -+ -+var algCache sync.Map -+ -+// loadOrStoreAlg loads an algorithm with the given id, flags, and mode from the cache. -+// If the algorithm is not in the cache, a new one is created and then initialized using fn. -+// The returned algorithm handle should not be closed by the caller. -+func loadOrStoreAlg[T any](id string, flags bcrypt.AlgorithmProviderFlags, mode string, fn func(h bcrypt.ALG_HANDLE) (T, error)) (T, error) { -+ var entryKey = struct { -+ id string -+ flags bcrypt.AlgorithmProviderFlags -+ mode string -+ }{id, flags, mode} -+ -+ type entryResult[T any] struct { -+ value T -+ err error -+ } -+ -+ // Try to load the algorithm from the cache. -+ if v, ok := algCache.Load(entryKey); ok { -+ ret := v.(entryResult[T]) -+ return ret.value, ret.err -+ } -+ -+ // Not found in cache, create a new one. -+ var ret entryResult[T] -+ var h bcrypt.ALG_HANDLE -+ if ret.err = bcrypt.OpenAlgorithmProvider(&h, utf16PtrFromString(id), nil, flags); ret.err == nil { -+ ret.value, ret.err = fn(h) -+ if ret.err != nil { -+ bcrypt.CloseAlgorithmProvider(h, 0) -+ } -+ } -+ -+ // Store the result in the cache. -+ if existing, loaded := algCache.LoadOrStore(entryKey, ret); loaded { -+ // Another goroutine stored it first concurrently, so use that one instead. -+ bcrypt.CloseAlgorithmProvider(h, 0) -+ ret = existing.(entryResult[T]) -+ } -+ return ret.value, ret.err -+} -+ -+func utf16PtrFromString(s string) *uint16 { -+ return &utf16FromString(s)[0] -+} -+ -+// utf16FromString converts the string using a stack-allocated slice of 64 bytes. -+// It should only be used to convert known BCrypt identifiers which only contains ASCII characters. -+// utf16FromString allocates if s is longer than 31 characters. -+func utf16FromString(s string) []uint16 { -+ // Once https://go.dev/issues/51896 lands and our support matrix allows it, -+ // we can replace part of this function by utf16.AppendRune -+ a := make([]uint16, 0, 32) -+ for _, v := range s { -+ if v == 0 || v > 127 { -+ panic("utf16FromString only supports ASCII characters, got " + s) -+ } -+ a = append(a, uint16(v)) -+ } -+ // Finish with a NULL byte. -+ a = append(a, 0) -+ return a -+} -+ -+func setString(h bcrypt.HANDLE, name, val string) error { -+ str := utf16FromString(val) -+ defer runtime.KeepAlive(str) -+ // str is a []uint16, which takes 2 bytes per element. -+ n := len(str) * 2 -+ in := unsafe.Slice((*byte)(unsafe.Pointer(&str[0])), n) -+ return bcrypt.SetProperty(h, utf16PtrFromString(name), in, 0) -+} -+ -+func getUint32(h bcrypt.HANDLE, name string) (uint32, error) { -+ var prop, discard uint32 -+ err := bcrypt.GetProperty(h, utf16PtrFromString(name), (*[4]byte)(unsafe.Pointer(&prop))[:], &discard, 0) -+ return prop, err -+} -+ -+const sizeOfKEY_LENGTHS_STRUCT = unsafe.Sizeof(bcrypt.KEY_LENGTHS_STRUCT{}) -+ -+func getKeyLengths(h bcrypt.HANDLE) (lengths bcrypt.KEY_LENGTHS_STRUCT, err error) { -+ var discard uint32 -+ ptr := (*[sizeOfKEY_LENGTHS_STRUCT]byte)(unsafe.Pointer(&lengths)) -+ err = bcrypt.GetProperty(bcrypt.HANDLE(h), utf16PtrFromString(bcrypt.KEY_LENGTHS), ptr[:], &discard, 0) -+ if err != nil { -+ return -+ } -+ if lengths.MinLength > lengths.MaxLength || (lengths.Increment == 0 && lengths.MinLength != lengths.MaxLength) { -+ err = errors.New("invalid BCRYPT_KEY_LENGTHS_STRUCT") -+ return -+ } -+ return lengths, nil -+} -+ -+func keyIsAllowed(lengths bcrypt.KEY_LENGTHS_STRUCT, bits uint32) bool { -+ if bits < lengths.MinLength || bits > lengths.MaxLength { -+ return false -+ } -+ if lengths.Increment == 0 { -+ return bits == lengths.MinLength -+ } -+ return (bits-lengths.MinLength)%lengths.Increment == 0 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/des.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/des.go -new file mode 100644 -index 00000000000000..de3f05b84f1d82 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/des.go -@@ -0,0 +1,106 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "bytes" -+ "crypto/cipher" -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+ "github.com/microsoft/go-crypto-winnative/internal/subtle" -+) -+ -+const desBlockSize = 8 -+ -+type desCipher struct { -+ kh bcrypt.KEY_HANDLE -+ alg string -+ key []byte -+} -+ -+func NewDESCipher(key []byte) (cipher.Block, error) { -+ kh, err := newCipherHandle(bcrypt.DES_ALGORITHM, bcrypt.CHAIN_MODE_ECB, key) -+ if err != nil { -+ return nil, err -+ } -+ c := &desCipher{kh: kh, alg: bcrypt.DES_ALGORITHM, key: bytes.Clone(key)} -+ runtime.SetFinalizer(c, (*desCipher).finalize) -+ return c, nil -+} -+ -+func NewTripleDESCipher(key []byte) (cipher.Block, error) { -+ kh, err := newCipherHandle(bcrypt.DES3_ALGORITHM, bcrypt.CHAIN_MODE_ECB, key) -+ if err != nil { -+ return nil, err -+ } -+ c := &desCipher{kh: kh, alg: bcrypt.DES3_ALGORITHM, key: bytes.Clone(key)} -+ runtime.SetFinalizer(c, (*desCipher).finalize) -+ return c, nil -+} -+ -+func (c *desCipher) finalize() { -+ bcrypt.DestroyKey(c.kh) -+} -+ -+func (c *desCipher) BlockSize() int { return desBlockSize } -+ -+func (c *desCipher) Encrypt(dst, src []byte) { -+ if len(src) < desBlockSize { -+ panic("crypto/des: input not full block") -+ } -+ if len(dst) < desBlockSize { -+ panic("crypto/des: output not full block") -+ } -+ // cypher.Block.Encrypt() is documented to encrypt one full block -+ // at a time, so we truncate the input and output to the block size. -+ dst, src = dst[:desBlockSize], src[:desBlockSize] -+ if subtle.InexactOverlap(dst, src) { -+ panic("crypto/des: invalid buffer overlap") -+ } -+ var ret uint32 -+ err := bcrypt.Encrypt(c.kh, src, nil, nil, dst, &ret, 0) -+ if err != nil { -+ panic(err) -+ } -+ if int(ret) != len(src) { -+ panic("crypto/des: plaintext not fully encrypted") -+ } -+ runtime.KeepAlive(c) -+} -+ -+func (c *desCipher) Decrypt(dst, src []byte) { -+ if len(src) < desBlockSize { -+ panic("crypto/des: input not full block") -+ } -+ if len(dst) < desBlockSize { -+ panic("crypto/des: output not full block") -+ } -+ // cypher.Block.Decrypt() is documented to decrypt one full block -+ // at a time, so we truncate the input and output to the block size. -+ dst, src = dst[:desBlockSize], src[:desBlockSize] -+ if subtle.InexactOverlap(dst, src) { -+ panic("crypto/des: invalid buffer overlap") -+ } -+ var ret uint32 -+ err := bcrypt.Decrypt(c.kh, src, nil, nil, dst, &ret, 0) -+ if err != nil { -+ panic(err) -+ } -+ if int(ret) != len(src) { -+ panic("crypto/des: plaintext not fully decrypted") -+ } -+ runtime.KeepAlive(c) -+} -+ -+func (c *desCipher) NewCBCEncrypter(iv []byte) cipher.BlockMode { -+ return newCBC(true, c.alg, c.key, iv) -+} -+ -+func (c *desCipher) NewCBCDecrypter(iv []byte) cipher.BlockMode { -+ return newCBC(false, c.alg, c.key, iv) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/dsa.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/dsa.go -new file mode 100644 -index 00000000000000..7ab5ac38921d82 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/dsa.go -@@ -0,0 +1,465 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "runtime" -+ "strconv" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+// As of FIPS 186-4 the maximum Q size is 32 bytes. -+// -+// See also: cbGroupSize at -+// https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_dsa_key_blob_v2 -+const maxGroupSize = 32 -+ -+// crypto/dsa doesn't support passing the seed around, but CNG expects it. -+// CNG will skip seed verification if the count and seed parameters is all 0xff bytes. -+var ( -+ dsaCountNil = [4]byte{0xff, 0xff, 0xff, 0xff} -+ dsaSeedNil = [maxGroupSize]byte{ -+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -+ } -+) -+ -+type dsaAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+ allowedKeyLengths bcrypt.KEY_LENGTHS_STRUCT -+} -+ -+func loadDSA() (h dsaAlgorithm, err error) { -+ return loadOrStoreAlg(bcrypt.DSA_ALGORITHM, bcrypt.ALG_NONE_FLAG, "", func(h bcrypt.ALG_HANDLE) (dsaAlgorithm, error) { -+ lengths, err := getKeyLengths(bcrypt.HANDLE(h)) -+ if err != nil { -+ return dsaAlgorithm{}, err -+ } -+ return dsaAlgorithm{h, lengths}, nil -+ }) -+} -+ -+// DSAParameters contains the DSA parameters. -+type DSAParameters struct { -+ P, Q, G BigInt -+} -+ -+func (p DSAParameters) keySize() uint32 { -+ return uint32(len(p.P)) -+} -+ -+func (p DSAParameters) groupSize() uint32 { -+ return uint32(len(p.Q)) -+} -+ -+// GenerateParametersDSA generates a set of DSA parameters for a key of size L bytes. -+// If L is less than or equal to 1024, the parameters are generated according to FIPS 186-2. -+// If L is greater than 1024, the parameters are generated according to FIPS 186-3. -+// The returned parameters are suitable for use in GenerateKey. -+func GenerateParametersDSA(L int) (params DSAParameters, err error) { -+ h, err := loadDSA() -+ if err != nil { -+ return DSAParameters{}, err -+ } -+ if !keyIsAllowed(h.allowedKeyLengths, uint32(L)) { -+ return DSAParameters{}, errors.New("crypto/dsa: invalid key size") -+ } -+ // To generate the parameters, we need to generate a key pair and then export the public key. -+ // The public key contains the parameters. We then discard the key pair. -+ var hkey bcrypt.KEY_HANDLE -+ if err := bcrypt.GenerateKeyPair(h.handle, &hkey, uint32(L), 0); err != nil { -+ return DSAParameters{}, err -+ } -+ defer bcrypt.DestroyKey(hkey) -+ -+ if err := bcrypt.FinalizeKeyPair(hkey, 0); err != nil { -+ return DSAParameters{}, err -+ } -+ params, _, _, err = decodeDSAKey(hkey, false) -+ return params, err -+} -+ -+// PrivateKeyDSA represents a DSA private key. -+type PrivateKeyDSA struct { -+ DSAParameters -+ X, Y BigInt -+ -+ hkey bcrypt.KEY_HANDLE -+} -+ -+func (k *PrivateKeyDSA) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+// PublicKeyDSA represents a DSA public key. -+type PublicKeyDSA struct { -+ DSAParameters -+ Y BigInt -+ -+ hkey bcrypt.KEY_HANDLE -+} -+ -+func (k *PublicKeyDSA) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+// GenerateKeyDSA generates a new private DSA key using the given parameters. -+func GenerateKeyDSA(params DSAParameters) (x, y BigInt, err error) { -+ h, err := loadDSA() -+ if err != nil { -+ return nil, nil, err -+ } -+ keySize := params.keySize() -+ if !keyIsAllowed(h.allowedKeyLengths, keySize*8) { -+ return nil, nil, errors.New("crypto/dsa: invalid key size") -+ } -+ var hkey bcrypt.KEY_HANDLE -+ if err := bcrypt.GenerateKeyPair(h.handle, &hkey, keySize*8, 0); err != nil { -+ return nil, nil, err -+ } -+ defer bcrypt.DestroyKey(hkey) -+ if err := setDSAParameter(hkey, params); err != nil { -+ return nil, nil, err -+ } -+ if err := bcrypt.FinalizeKeyPair(hkey, 0); err != nil { -+ return nil, nil, err -+ } -+ _, x, y, err = decodeDSAKey(hkey, true) -+ if err != nil { -+ return nil, nil, err -+ } -+ return x, y, nil -+} -+ -+// NewPrivateKeyDSA creates a new DSA private key from the given parameters. -+func NewPrivateKeyDSA(params DSAParameters, X, Y BigInt) (*PrivateKeyDSA, error) { -+ h, err := loadDSA() -+ if err != nil { -+ return nil, err -+ } -+ keySize := params.keySize() -+ if !keyIsAllowed(h.allowedKeyLengths, keySize*8) { -+ return nil, errors.New("crypto/dsa: invalid key size") -+ } -+ hkey, err := encodeDSAKey(h.handle, params, X, Y) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyDSA{params, X, Y, hkey} -+ runtime.SetFinalizer(k, (*PrivateKeyDSA).finalize) -+ return k, nil -+} -+ -+// NewPublicKeyDSA creates a new DSA public key from the given parameters. -+func NewPublicKeyDSA(params DSAParameters, Y BigInt) (*PublicKeyDSA, error) { -+ h, err := loadDSA() -+ if err != nil { -+ return nil, err -+ } -+ keySize := params.keySize() -+ if !keyIsAllowed(h.allowedKeyLengths, keySize*8) { -+ return nil, errors.New("crypto/dsa: invalid key size") -+ } -+ hkey, err := encodeDSAKey(h.handle, params, nil, Y) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyDSA{params, Y, hkey} -+ runtime.SetFinalizer(k, (*PublicKeyDSA).finalize) -+ return k, nil -+} -+ -+// SignDSA signs a hash (which should be the result of hashing a larger message). -+func SignDSA(priv *PrivateKeyDSA, hashed []byte) (r, s BigInt, err error) { -+ defer runtime.KeepAlive(priv) -+ size, err := getUint32(bcrypt.HANDLE(priv.hkey), bcrypt.SIGNATURE_LENGTH) -+ if err != nil { -+ return nil, nil, err -+ } -+ var buf [maxGroupSize]byte -+ hashed, err = dsaAdjustHashSize(priv.hkey, hashed, buf[:]) -+ if err != nil { -+ return nil, nil, err -+ } -+ sig := make([]byte, size) -+ err = bcrypt.SignHash(priv.hkey, nil, hashed, sig, &size, 0) -+ if err != nil { -+ return nil, nil, err -+ } -+ sig = sig[:size] -+ // BCRYPTSignHash generates DSA signatures in P1363 format, -+ // which is simply (r, s), each of them exactly half of the array. -+ if len(sig)%2 != 0 { -+ return nil, nil, errors.New("crypto/dsa: invalid signature size from bcrypt") -+ } -+ return sig[:len(sig)/2], sig[len(sig)/2:], nil -+} -+ -+// VerifyDSA verifies the signature in r, s of hashed using the public key, pub. -+func VerifyDSA(pub *PublicKeyDSA, hashed []byte, r, s BigInt) bool { -+ defer runtime.KeepAlive(pub) -+ var buf [maxGroupSize]byte -+ hashed, err := dsaAdjustHashSize(pub.hkey, hashed, buf[:]) -+ if err != nil { -+ return false -+ } -+ size, err := getUint32(bcrypt.HANDLE(pub.hkey), bcrypt.SIGNATURE_LENGTH) -+ if err != nil { -+ return false -+ } -+ // r and s might be shorter than size -+ // if the original big number contained leading zeros, -+ // but they must not be longer than the public key size. -+ if len(r) > int(size/2) || len(s) > int(size/2) { -+ return false -+ } -+ sig := make([]byte, 0, 2*maxGroupSize) -+ prependZeros := func(nonZeroBytes int) { -+ if zeros := int(size/2) - nonZeroBytes; zeros > 0 { -+ sig = append(sig, make([]byte, zeros)...) -+ } -+ } -+ prependZeros(len(r)) -+ sig = append(sig, r...) -+ prependZeros(len(s)) -+ sig = append(sig, s...) -+ return keyVerify(pub.hkey, nil, hashed, sig, 0) == nil -+} -+ -+func encodeDSAKey(h bcrypt.ALG_HANDLE, params DSAParameters, X, Y BigInt) (bcrypt.KEY_HANDLE, error) { -+ keySize := params.keySize() -+ groupSize := params.groupSize() -+ private := X != nil -+ var blob []byte -+ if keySize*8 <= 1024 { -+ size := sizeOfDSABlobHeader + keySize*3 -+ hdr := bcrypt.DSA_KEY_BLOB{ -+ Magic: bcrypt.DSA_PUBLIC_MAGIC, -+ KeySize: keySize, -+ Count: dsaCountNil, -+ } -+ if private { -+ size += uint32(len(hdr.Q)) // private key is always 20 bytes -+ hdr.Magic = bcrypt.DSA_PRIVATE_MAGIC -+ } -+ copy(hdr.Seed[:], dsaSeedNil[:]) -+ copy(hdr.Q[:], params.Q[:]) -+ blob = make([]byte, size) -+ copy(blob, (*(*[sizeOfDSABlobHeader]byte)(unsafe.Pointer(&hdr)))[:]) -+ data := blob[sizeOfDSABlobHeader:] -+ if err := encodeBigInt(data, []sizedBigInt{ -+ {params.P, keySize}, -+ {params.G, keySize}, -+ {Y, keySize}, -+ {X, groupSize}, -+ }); err != nil { -+ return 0, err -+ } -+ } else { -+ size := sizeOfDSAV2BlobHeader + 3*keySize + 2*groupSize -+ hashAlg := hashAlgFromGroup(int(groupSize)) -+ hdr := bcrypt.DSA_KEY_BLOB_V2{ -+ Magic: bcrypt.DSA_PUBLIC_MAGIC_V2, -+ KeySize: keySize, -+ GroupSize: groupSize, -+ HashAlgorithm: hashAlg, -+ StandardVersion: bcrypt.DSA_FIPS186_3, -+ SeedLength: groupSize, // crypto/dsa doesn't use the seed, but it must be equal to groupSize. -+ Count: dsaCountNil, -+ } -+ if private { -+ size += groupSize -+ hdr.Magic = bcrypt.DSA_PRIVATE_MAGIC_V2 -+ } -+ blob = make([]byte, size) -+ copy(blob, (*(*[sizeOfDSAV2BlobHeader]byte)(unsafe.Pointer(&hdr)))[:]) -+ data := blob[sizeOfDSAV2BlobHeader:] -+ if err := encodeBigInt(data, []sizedBigInt{ -+ {dsaSeedNil[:], groupSize}, -+ {params.Q, groupSize}, -+ {params.P, keySize}, -+ {params.G, keySize}, -+ {Y, keySize}, -+ {X, groupSize}, -+ }); err != nil { -+ return 0, err -+ } -+ } -+ kind := bcrypt.DSA_PUBLIC_BLOB -+ if private { -+ kind = bcrypt.DSA_PRIVATE_BLOB -+ } -+ var hkey bcrypt.KEY_HANDLE -+ err := bcrypt.ImportKeyPair(h, 0, utf16PtrFromString(kind), &hkey, blob, 0) -+ if err != nil { -+ return 0, err -+ } -+ return hkey, nil -+} -+ -+// decodeDSAKey decodes a DSA key. If private is true, the private exponent, X, is also returned. -+func decodeDSAKey(hkey bcrypt.KEY_HANDLE, private bool) (params DSAParameters, X, Y BigInt, err error) { -+ var data []byte -+ consumeBigInt := func(size uint32) BigInt { -+ b := data[:size] -+ data = data[size:] -+ return b -+ } -+ var L uint32 -+ L, err = getUint32(bcrypt.HANDLE(hkey), bcrypt.KEY_LENGTH) -+ if err != nil { -+ return -+ } -+ if L <= 1024 { -+ var hdr bcrypt.DSA_KEY_BLOB -+ hdr, data, err = exportDSAKey(hkey, private) -+ if err != nil { -+ return -+ } -+ magic := bcrypt.DSA_PUBLIC_MAGIC -+ if private { -+ magic = bcrypt.DSA_PRIVATE_MAGIC -+ } -+ if hdr.Magic != magic || hdr.KeySize*8 != uint32(L) { -+ err = errors.New("crypto/dsa: exported key is corrupted") -+ return -+ } -+ params = DSAParameters{ -+ Q: hdr.Q[:], -+ P: consumeBigInt(hdr.KeySize), -+ G: consumeBigInt(hdr.KeySize), -+ } -+ Y = consumeBigInt(hdr.KeySize) -+ if private { -+ X = consumeBigInt(uint32(len(hdr.Q))) // private key is always 20 bytes -+ } -+ } else { -+ var hdr bcrypt.DSA_KEY_BLOB_V2 -+ hdr, data, err = exporDSAV2Key(hkey, private) -+ if err != nil { -+ return -+ } -+ magic := bcrypt.DSA_PUBLIC_MAGIC_V2 -+ if private { -+ magic = bcrypt.DSA_PRIVATE_MAGIC_V2 -+ } -+ if hdr.Magic != magic || hdr.KeySize*8 != uint32(L) { -+ err = errors.New("crypto/dsa: exported key is corrupted") -+ return -+ } -+ // Discard the seed, crypto/dsa doesn't use it. -+ consumeBigInt(hdr.SeedLength) -+ params = DSAParameters{ -+ Q: consumeBigInt(hdr.GroupSize), -+ P: consumeBigInt(hdr.KeySize), -+ G: consumeBigInt(hdr.KeySize), -+ } -+ Y = consumeBigInt(hdr.KeySize) -+ if private { -+ X = consumeBigInt(hdr.GroupSize) -+ } -+ } -+ return params, X, Y, nil -+} -+ -+// setDSAParameter sets the DSA parameters for the given key. -+func setDSAParameter(hkey bcrypt.KEY_HANDLE, params DSAParameters) error { -+ keySize := params.keySize() -+ groupSize := params.groupSize() -+ var blob []byte -+ if keySize*8 <= 1024 { -+ blob = make([]byte, sizeOfDSAParamsHeader+keySize*2) -+ hdr := bcrypt.DSA_PARAMETER_HEADER{ -+ Length: uint32(len(blob)), -+ Magic: bcrypt.DSA_PARAMETERS_MAGIC, -+ KeySize: keySize, -+ Count: dsaCountNil, -+ } -+ copy(hdr.Seed[:], dsaSeedNil[:]) -+ copy(hdr.Q[:], params.Q[:]) -+ copy(blob, (*(*[sizeOfDSAParamsHeader]byte)(unsafe.Pointer(&hdr)))[:]) -+ data := blob[sizeOfDSAParamsHeader:] -+ if err := encodeBigInt(data, []sizedBigInt{ -+ {params.P, keySize}, -+ {params.G, keySize}, -+ }); err != nil { -+ return err -+ } -+ } else { -+ blob = make([]byte, sizeOfDSAParamsV2Header+2*keySize+2*groupSize) -+ hashAlg := hashAlgFromGroup(int(groupSize)) -+ hdr := bcrypt.DSA_PARAMETER_HEADER_V2{ -+ Length: uint32(len(blob)), -+ Magic: bcrypt.DSA_PARAMETERS_MAGIC_V2, -+ KeySize: keySize, -+ GroupSize: groupSize, -+ HashAlgorithm: hashAlg, -+ StandardVersion: bcrypt.DSA_FIPS186_3, -+ SeedLength: groupSize, // crypto/dsa doesn't use the seed, but CNG expects it to be groupSize. -+ Count: dsaCountNil, -+ } -+ copy(blob, (*(*[sizeOfDSAParamsV2Header]byte)(unsafe.Pointer(&hdr)))[:]) -+ data := blob[sizeOfDSAParamsV2Header:] -+ if err := encodeBigInt(data, []sizedBigInt{ -+ {dsaSeedNil[:], groupSize}, -+ {params.Q, groupSize}, -+ {params.P, keySize}, -+ {params.G, keySize}, -+ }); err != nil { -+ return err -+ } -+ -+ } -+ return bcrypt.SetProperty(bcrypt.HANDLE(hkey), utf16PtrFromString(bcrypt.DSA_PARAMETERS), blob, 0) -+} -+ -+func dsaAdjustHashSize(hkey bcrypt.KEY_HANDLE, hashed []byte, buf []byte) ([]byte, error) { -+ // Windows CNG requires that the hash output and Q match sizes, but we can better -+ // interoperate with other FIPS 186-3 implementations if we perform truncation -+ // here, before sending it to CNG. -+ // -+ // If, on the other hand, Q is too big, we need to left-pad the hash with zeroes -+ // (since it gets treated as a big-endian number). -+ params, _, _, err := decodeDSAKey(hkey, false) -+ if err != nil { -+ return nil, err -+ } -+ groupSize := int(params.groupSize()) -+ if groupSize > len(buf) { -+ panic("output buffer too small") -+ } -+ if groupSize == len(hashed) { -+ return hashed, nil -+ } -+ if groupSize < len(hashed) { -+ return hashed[:groupSize], nil -+ } -+ if err := encodeBigInt(buf, []sizedBigInt{ -+ {hashed, uint32(groupSize)}, -+ }); err != nil { -+ return nil, err -+ } -+ return buf[:groupSize], nil -+} -+ -+func hashAlgFromGroup(groupSize int) bcrypt.HASHALGORITHM_ENUM { -+ switch groupSize { -+ case 20: -+ return bcrypt.DSA_HASH_ALGORITHM_SHA1 -+ case 32: -+ return bcrypt.DSA_HASH_ALGORITHM_SHA256 -+ case 64: -+ return bcrypt.DSA_HASH_ALGORITHM_SHA512 -+ default: -+ panic("invalid group size: " + strconv.Itoa(groupSize)) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdh.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdh.go -new file mode 100644 -index 00000000000000..2738728eb1b66f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdh.go -@@ -0,0 +1,255 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+const ecdhUncompressedPrefix = 4 -+ -+var errInvalidPublicKey = errors.New("cng: invalid public key") -+var errInvalidPrivateKey = errors.New("cng: invalid private key") -+ -+type ecdhAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+ bits uint32 -+} -+ -+func loadECDH(curve string) (ecdhAlgorithm, error) { -+ return loadOrStoreAlg(bcrypt.ECDH_ALGORITHM, bcrypt.ALG_NONE_FLAG, curve, func(h bcrypt.ALG_HANDLE) (ecdhAlgorithm, error) { -+ var name string -+ var bits uint32 -+ switch curve { -+ case "P-256": -+ name, bits = bcrypt.ECC_CURVE_NISTP256, 256 -+ case "P-384": -+ name, bits = bcrypt.ECC_CURVE_NISTP384, 384 -+ case "P-521": -+ name, bits = bcrypt.ECC_CURVE_NISTP521, 521 -+ case "X25519": -+ name, bits = bcrypt.ECC_CURVE_25519, 255 -+ default: -+ return ecdhAlgorithm{}, errUnknownCurve -+ } -+ err := setString(bcrypt.HANDLE(h), bcrypt.ECC_CURVE_NAME, name) -+ if err != nil { -+ return ecdhAlgorithm{}, err -+ } -+ return ecdhAlgorithm{h, bits}, nil -+ }) -+} -+ -+type PublicKeyECDH struct { -+ hkey bcrypt.KEY_HANDLE -+ bytes []byte -+ -+ // priv is only set when PublicKeyECDH is derived from a private key, -+ // in which case priv's finalizer is responsible for freeing hkey. -+ // This ensures priv is not finalized while the public key is alive, -+ // which could cause use-after-free and double-free behavior. -+ priv *PrivateKeyECDH -+} -+ -+func (k *PublicKeyECDH) finalize() { -+ if k.priv == nil { -+ bcrypt.DestroyKey(k.hkey) -+ } -+} -+ -+type PrivateKeyECDH struct { -+ hkey bcrypt.KEY_HANDLE -+ isNIST bool -+} -+ -+func (k *PrivateKeyECDH) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+func ECDH(priv *PrivateKeyECDH, pub *PublicKeyECDH) ([]byte, error) { -+ // First establish the shared secret. -+ var secret bcrypt.SECRET_HANDLE -+ err := bcrypt.SecretAgreement(priv.hkey, pub.hkey, &secret, 0) -+ if err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroySecret(secret) -+ -+ // Then we need to export the raw shared secret from the secret opaque handler. -+ // The only way to do it is using BCryptDeriveKey with BCRYPT_KDF_RAW_SECRET as key derivation function (KDF). -+ // Unfortunately, this KDF is supported starting from Windows 10. -+ kdf := utf16PtrFromString(bcrypt.KDF_RAW_SECRET) -+ var size uint32 -+ err = bcrypt.DeriveKey(secret, kdf, nil, nil, &size, 0) -+ if err != nil { -+ return nil, err -+ } -+ agreedSecret := make([]byte, size) -+ err = bcrypt.DeriveKey(secret, kdf, nil, agreedSecret, &size, 0) -+ if err != nil { -+ return nil, err -+ } -+ -+ // The raw shared secret is little-endian but Go expects big-endian. -+ // Reverse the slice in-place. -+ inputMid := size / 2 -+ for i := uint32(0); i < inputMid; i++ { -+ j := size - i - 1 -+ agreedSecret[i], agreedSecret[j] = agreedSecret[j], agreedSecret[i] -+ } -+ runtime.KeepAlive(priv) -+ runtime.KeepAlive(pub) -+ return agreedSecret, nil -+} -+ -+func GenerateKeyECDH(curve string) (*PrivateKeyECDH, []byte, error) { -+ h, err := loadECDH(curve) -+ if err != nil { -+ return nil, nil, err -+ } -+ var hkey bcrypt.KEY_HANDLE -+ err = bcrypt.GenerateKeyPair(h.handle, &hkey, h.bits, 0) -+ if err != nil { -+ return nil, nil, err -+ } -+ // The key cannot be used until BCryptFinalizeKeyPair has been called. -+ err = bcrypt.FinalizeKeyPair(hkey, 0) -+ if err != nil { -+ bcrypt.DestroyKey(hkey) -+ return nil, nil, err -+ } -+ -+ // GenerateKeyECDH returns the private key as a byte slice. -+ // To get it we need to export the raw CNG key bytes. -+ hdr, bytes, err := exportECCKey(hkey, true) -+ if err != nil { -+ bcrypt.DestroyKey(hkey) -+ return nil, nil, err -+ } -+ // Only take the private component of the key, -+ // which is the last of the three equally-sized chunks. -+ bytes = bytes[hdr.KeySize*2:] -+ -+ k := &PrivateKeyECDH{hkey, isNIST(curve)} -+ runtime.SetFinalizer(k, (*PrivateKeyECDH).finalize) -+ return k, bytes, nil -+} -+ -+func NewPublicKeyECDH(curve string, bytes []byte) (*PublicKeyECDH, error) { -+ // Reject the point at infinity and compressed encodings. -+ // The first byte is always the key encoding. -+ nist := isNIST(curve) -+ if len(bytes) == 0 || (nist && bytes[0] != ecdhUncompressedPrefix) { -+ return nil, errInvalidPublicKey -+ } -+ h, err := loadECDH(curve) -+ if err != nil { -+ return nil, err -+ } -+ // Remove the encoding byte, if any. BCrypt doesn't want it -+ // and it only support uncompressed points anyway. -+ var keyWithoutEncoding []byte -+ var ncomponents int -+ if nist { -+ ncomponents = 2 -+ keyWithoutEncoding = bytes[1:] -+ } else { -+ ncomponents = 1 -+ keyWithoutEncoding = bytes -+ } -+ keySize := int(h.bits+7) / 8 -+ if len(keyWithoutEncoding) != keySize*ncomponents { -+ return nil, errInvalidPublicKey -+ } -+ hkey, err := importECCKey(h.handle, bcrypt.ECDH_ALGORITHM, h.bits, keyWithoutEncoding[:keySize], keyWithoutEncoding[keySize:], nil) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyECDH{hkey, append([]byte(nil), bytes...), nil} -+ runtime.SetFinalizer(k, (*PublicKeyECDH).finalize) -+ return k, nil -+} -+ -+func (k *PublicKeyECDH) Bytes() []byte { return k.bytes } -+ -+func NewPrivateKeyECDH(curve string, key []byte) (*PrivateKeyECDH, error) { -+ h, err := loadECDH(curve) -+ if err != nil { -+ return nil, err -+ } -+ keySize := int(h.bits+7) / 8 -+ if len(key) != keySize { -+ return nil, errInvalidPrivateKey -+ } -+ nist := isNIST(curve) -+ if !nist { -+ key = convertX25519PrivKey(key) -+ } -+ // CNG allows to import private ECC keys without defining X/Y, -+ // in which case those will be generated from D. -+ // To trigger this behavior we pass a zeroed X/Y with keySize length. -+ // zero is big enough to fit P-521 curves, the largest we handle, in the stack. -+ var zero [(521 + 7) / 8]byte -+ hkey, err := importECCKey(h.handle, bcrypt.ECDH_ALGORITHM, h.bits, zero[:keySize], zero[:keySize], key) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyECDH{hkey, nist} -+ runtime.SetFinalizer(k, (*PrivateKeyECDH).finalize) -+ return k, nil -+} -+ -+func (k *PrivateKeyECDH) PublicKey() (*PublicKeyECDH, error) { -+ defer runtime.KeepAlive(k) -+ hdr, data, err := exportECCKey(k.hkey, false) -+ if err != nil { -+ return nil, err -+ } -+ var bytes []byte -+ if k.isNIST { -+ // Include X and Y. -+ bytes = append([]byte{ecdhUncompressedPrefix}, data...) -+ } else { -+ // Only include X. -+ bytes = data[:hdr.KeySize] -+ } -+ pub := &PublicKeyECDH{k.hkey, bytes, k} -+ runtime.SetFinalizer(pub, (*PublicKeyECDH).finalize) -+ return pub, nil -+} -+ -+func isNIST(curve string) bool { -+ return curve != "X25519" -+} -+ -+func convertX25519PrivKey(key []byte) []byte { -+ // CNG consume private X25519 keys using a slightly non-standard representation that don't affect the end result. -+ // https://github.com/microsoft/SymCrypt/blob/e875f1f957dcb1308f8e712e9f4a8edc6f4f6207/inc/symcrypt.h#L4670 -+ // Go internal X25519 implementation also uses this representation, but a raw private key is also accepted. -+ // https://github.com/golang/go/blob/e246cf626d1768ab56fa9eeafe4d23266e956ef6/src/crypto/ecdh/x25519.go#L90-L92 -+ -+ // Copy the private key so we don't modify the original. -+ var e [32]byte -+ -+ copy(e[:], key[:]) -+ -+ // Convert to DivHTimesH format by -+ // clearing the last three bits of the least significant byte, -+ // which is the same as applying h*(s/(h mod GOrd)) where -+ // s = key, h = 0x08, GOrd (cbSubgroupOrder) = 0x20. -+ // h and GOrd values taken from -+ // https://github.com/microsoft/SymCrypt/blob/e875f1f957dcb1308f8e712e9f4a8edc6f4f6207/lib/ec_internal_curves.c#L496. -+ e[0] &= 248 // 0b1111_1000 -+ -+ // Apply the High bit restrictions by clearing the bit 255 and setting the bit 254. -+ e[31] &= 127 // 0b0111_1111 -+ e[31] |= 64 // 0b0100_0000 -+ return e[:] -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdsa.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdsa.go -new file mode 100644 -index 00000000000000..586e9ae2ebb0c9 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/ecdsa.go -@@ -0,0 +1,169 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+var errUnknownCurve = errors.New("cng: unknown elliptic curve") -+ -+type ecdsaAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+ bits uint32 -+} -+ -+func loadECDSA(curve string) (ecdsaAlgorithm, error) { -+ return loadOrStoreAlg(bcrypt.ECDSA_ALGORITHM, bcrypt.ALG_NONE_FLAG, curve, func(h bcrypt.ALG_HANDLE) (ecdsaAlgorithm, error) { -+ var name string -+ var bits uint32 -+ switch curve { -+ case "P-224": -+ name, bits = bcrypt.ECC_CURVE_NISTP224, 224 -+ case "P-256": -+ name, bits = bcrypt.ECC_CURVE_NISTP256, 256 -+ case "P-384": -+ name, bits = bcrypt.ECC_CURVE_NISTP384, 384 -+ case "P-521": -+ name, bits = bcrypt.ECC_CURVE_NISTP521, 521 -+ default: -+ return ecdsaAlgorithm{}, errUnknownCurve -+ } -+ err := setString(bcrypt.HANDLE(h), bcrypt.ECC_CURVE_NAME, name) -+ if err != nil { -+ return ecdsaAlgorithm{}, err -+ } -+ return ecdsaAlgorithm{h, bits}, nil -+ }) -+} -+ -+func GenerateKeyECDSA(curve string) (X, Y, D BigInt, err error) { -+ var h ecdsaAlgorithm -+ h, err = loadECDSA(curve) -+ if err != nil { -+ return -+ } -+ var hkey bcrypt.KEY_HANDLE -+ err = bcrypt.GenerateKeyPair(h.handle, &hkey, h.bits, 0) -+ if err != nil { -+ return -+ } -+ defer bcrypt.DestroyKey(hkey) -+ // The key cannot be used until BCryptFinalizeKeyPair has been called. -+ err = bcrypt.FinalizeKeyPair(hkey, 0) -+ if err != nil { -+ return -+ } -+ hdr, data, err := exportECCKey(hkey, true) -+ if err != nil { -+ return -+ } -+ consumeBigInt := func(size uint32) BigInt { -+ b := data[:size] -+ data = data[size:] -+ return b -+ } -+ X = consumeBigInt(hdr.KeySize) -+ Y = consumeBigInt(hdr.KeySize) -+ D = consumeBigInt(hdr.KeySize) -+ return -+} -+ -+type PublicKeyECDSA struct { -+ hkey bcrypt.KEY_HANDLE -+} -+ -+func NewPublicKeyECDSA(curve string, X, Y BigInt) (*PublicKeyECDSA, error) { -+ h, err := loadECDSA(curve) -+ if err != nil { -+ return nil, err -+ } -+ hkey, err := importECCKey(h.handle, bcrypt.ECDSA_ALGORITHM, h.bits, X, Y, nil) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyECDSA{hkey} -+ runtime.SetFinalizer(k, (*PublicKeyECDSA).finalize) -+ return k, nil -+} -+ -+func (k *PublicKeyECDSA) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+type PrivateKeyECDSA struct { -+ hkey bcrypt.KEY_HANDLE -+} -+ -+func NewPrivateKeyECDSA(curve string, X, Y, D BigInt) (*PrivateKeyECDSA, error) { -+ h, err := loadECDSA(curve) -+ if err != nil { -+ return nil, err -+ } -+ hkey, err := importECCKey(h.handle, bcrypt.ECDSA_ALGORITHM, h.bits, X, Y, D) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyECDSA{hkey} -+ runtime.SetFinalizer(k, (*PrivateKeyECDSA).finalize) -+ return k, nil -+} -+ -+func (k *PrivateKeyECDSA) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+// SignECDSA signs a hash (which should be the result of hashing a larger message), -+// using the private key, priv. -+// -+// We provide this function instead of a boring.SignMarshalECDSA equivalent -+// because BCryptSignHash returns the signature encoded using P1363 instead of ASN.1, -+// so we would have to transform P1363 to ASN.1 using encoding/asn1, which we can't import here, -+// only to be decoded into raw big.Int by the caller. -+func SignECDSA(priv *PrivateKeyECDSA, hash []byte) (r, s BigInt, err error) { -+ defer runtime.KeepAlive(priv) -+ sig, err := keySign(priv.hkey, nil, hash, bcrypt.PAD_UNDEFINED) -+ if err != nil { -+ return nil, nil, err -+ } -+ // BCRYPTSignHash generates ECDSA signatures in P1363 format, -+ // which is simply (r, s), each of them exactly half of the array. -+ if len(sig)%2 != 0 { -+ return nil, nil, errors.New("crypto/ecdsa: invalid signature size from bcrypt") -+ } -+ return sig[:len(sig)/2], sig[len(sig)/2:], nil -+} -+ -+// VerifyECDSA verifies the signature in r, s of hash using the public key, pub. -+func VerifyECDSA(pub *PublicKeyECDSA, hash []byte, r, s BigInt) bool { -+ defer runtime.KeepAlive(pub) -+ sizeBits, err := getUint32(bcrypt.HANDLE(pub.hkey), bcrypt.KEY_LENGTH) -+ if err != nil { -+ return false -+ } -+ size := int(sizeBits+7) / 8 -+ // r and s might be shorter than size -+ // if the original big number contained leading zeros, -+ // but they must not be longer than the public key size. -+ if len(r) > size || len(s) > size { -+ return false -+ } -+ sig := make([]byte, 0, size*2) -+ prependZeros := func(nonZeroBytes int) { -+ if zeros := size - nonZeroBytes; zeros > 0 { -+ sig = append(sig, make([]byte, zeros)...) -+ } -+ } -+ prependZeros(len(r)) -+ sig = append(sig, r...) -+ prependZeros(len(s)) -+ sig = append(sig, s...) -+ return keyVerify(pub.hkey, nil, hash, sig, bcrypt.PAD_UNDEFINED) == nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hash.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hash.go -new file mode 100644 -index 00000000000000..88fd1969de9735 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hash.go -@@ -0,0 +1,342 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "bytes" -+ "crypto" -+ "errors" -+ "hash" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+// maxHashSize is the size of SHA512 and SHA3_512, the largest hashes we support. -+const maxHashSize = 64 -+ -+// SupportsHash returns true if a hash.Hash implementation is supported for h. -+func SupportsHash(h crypto.Hash) bool { -+ switch h { -+ case crypto.MD4, crypto.MD5, crypto.SHA1, crypto.SHA256, crypto.SHA384, crypto.SHA512: -+ return true -+ case crypto.SHA3_256: -+ _, err := loadHash(bcrypt.SHA3_256_ALGORITHM, bcrypt.ALG_NONE_FLAG) -+ return err == nil -+ case crypto.SHA3_384: -+ _, err := loadHash(bcrypt.SHA3_384_ALGORITHM, bcrypt.ALG_NONE_FLAG) -+ return err == nil -+ case crypto.SHA3_512: -+ _, err := loadHash(bcrypt.SHA3_512_ALGORITHM, bcrypt.ALG_NONE_FLAG) -+ return err == nil -+ } -+ return false -+} -+ -+func hashOneShot(id string, p, sum []byte) error { -+ h, err := loadHash(id, 0) -+ if err != nil { -+ return err -+ } -+ return bcrypt.Hash(h.handle, nil, p, sum) -+} -+ -+func MD4(p []byte) (sum [16]byte) { -+ if err := hashOneShot(bcrypt.MD4_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: MD4 failed") -+ } -+ return -+} -+ -+func MD5(p []byte) (sum [16]byte) { -+ if err := hashOneShot(bcrypt.MD5_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: MD5 failed") -+ } -+ return -+} -+ -+func SHA1(p []byte) (sum [20]byte) { -+ if err := hashOneShot(bcrypt.SHA1_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA1 failed") -+ } -+ return -+} -+ -+func SHA256(p []byte) (sum [32]byte) { -+ if err := hashOneShot(bcrypt.SHA256_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA256 failed") -+ } -+ return -+} -+ -+func SHA384(p []byte) (sum [48]byte) { -+ if err := hashOneShot(bcrypt.SHA384_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA384 failed") -+ } -+ return -+} -+ -+func SHA512(p []byte) (sum [64]byte) { -+ if err := hashOneShot(bcrypt.SHA512_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA512 failed") -+ } -+ return -+} -+ -+// NewMD4 returns a new MD4 hash. -+func NewMD4() *Hash { -+ return newHash(bcrypt.MD4_ALGORITHM) -+} -+ -+// NewMD5 returns a new MD5 hash. -+func NewMD5() *Hash { -+ return newHash(bcrypt.MD5_ALGORITHM) -+} -+ -+// NewSHA1 returns a new SHA1 hash. -+func NewSHA1() *Hash { -+ return newHash(bcrypt.SHA1_ALGORITHM) -+} -+ -+// NewSHA256 returns a new SHA256 hash. -+func NewSHA256() *Hash { -+ return newHash(bcrypt.SHA256_ALGORITHM) -+} -+ -+// NewSHA384 returns a new SHA384 hash. -+func NewSHA384() *Hash { -+ return newHash(bcrypt.SHA384_ALGORITHM) -+} -+ -+// NewSHA512 returns a new SHA512 hash. -+func NewSHA512() *Hash { -+ return newHash(bcrypt.SHA512_ALGORITHM) -+} -+ -+type hashAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+ id string -+ size uint32 -+ blockSize uint32 -+} -+ -+func mustLoadHash(id string, flags bcrypt.AlgorithmProviderFlags) *hashAlgorithm { -+ h, err := loadHash(id, flags) -+ if err != nil { -+ panic(err) -+ } -+ return h -+} -+ -+func loadHash(id string, flags bcrypt.AlgorithmProviderFlags) (*hashAlgorithm, error) { -+ return loadOrStoreAlg(id, flags, "", func(h bcrypt.ALG_HANDLE) (*hashAlgorithm, error) { -+ size, err := getUint32(bcrypt.HANDLE(h), bcrypt.HASH_LENGTH) -+ if err != nil { -+ return nil, err -+ } -+ blockSize, err := getUint32(bcrypt.HANDLE(h), bcrypt.HASH_BLOCK_LENGTH) -+ if err != nil { -+ return nil, err -+ } -+ return &hashAlgorithm{h, id, size, blockSize}, nil -+ }) -+} -+ -+// hashToID converts a hash.Hash implementation from this package -+// to a CNG hash ID -+func hashToID(h hash.Hash) string { -+ hx, ok := h.(*Hash) -+ if !ok { -+ return "" -+ } -+ return hx.alg.id -+} -+ -+var _ hash.Hash = (*Hash)(nil) -+var _ hash.Cloner = (*Hash)(nil) -+ -+// FIPSApprovedHash reports whether this hash algorithm is FIPS 140-3 approved. -+func FIPSApprovedHash(h hash.Hash) bool { -+ xh, ok := h.(*Hash) -+ if !ok { -+ return false -+ } -+ switch xh.alg.id { -+ case bcrypt.SHA256_ALGORITHM, bcrypt.SHA384_ALGORITHM, bcrypt.SHA512_ALGORITHM, -+ bcrypt.SHA3_256_ALGORITHM, bcrypt.SHA3_384_ALGORITHM, bcrypt.SHA3_512_ALGORITHM: -+ return true -+ default: -+ return false -+ } -+} -+ -+// Hash implements [hash.Hash]. -+type Hash struct { -+ alg *hashAlgorithm -+ ctx bcrypt.HASH_HANDLE -+ -+ key []byte -+} -+ -+func newHash(id string) *Hash { -+ // Don't call bcrypt.CreateHash yet, it would be wasteful -+ // if the caller only wants to know the hash type. This -+ // is a common pattern in this package, as some functions -+ // accept a hash constructor parameter and call it just -+ // to know the hash type. -+ return &Hash{alg: mustLoadHash(id, bcrypt.ALG_NONE_FLAG)} -+} -+ -+func (h *Hash) finalize() { -+ bcrypt.DestroyHash(h.ctx) -+} -+ -+func (h *Hash) init() { -+ defer runtime.KeepAlive(h) -+ if h.ctx != 0 { -+ return -+ } -+ err := bcrypt.CreateHash(h.alg.handle, &h.ctx, nil, h.key, bcrypt.HASH_REUSABLE_FLAG) -+ if err != nil { -+ panic(err) -+ } -+ runtime.SetFinalizer(h, (*Hash).finalize) -+} -+ -+func (h *Hash) Clone() (hash.Cloner, error) { -+ defer runtime.KeepAlive(h) -+ h2 := &Hash{alg: h.alg, key: bytes.Clone(h.key)} -+ if h.ctx != 0 { -+ hashClone(h.ctx, &h2.ctx) -+ runtime.SetFinalizer(h2, (*Hash).finalize) -+ } -+ return h2, nil -+} -+ -+func (h *Hash) Reset() { -+ defer runtime.KeepAlive(h) -+ if h.ctx != 0 { -+ hashReset(h.ctx, h.Size()) -+ } -+} -+ -+func (h *Hash) Write(p []byte) (n int, err error) { -+ defer runtime.KeepAlive(h) -+ h.init() -+ hashData(h.ctx, p) -+ return len(p), nil -+} -+ -+func (h *Hash) WriteString(s string) (int, error) { -+ defer runtime.KeepAlive(h) -+ return h.Write(unsafe.Slice(unsafe.StringData(s), len(s))) -+} -+ -+func (h *Hash) WriteByte(c byte) error { -+ defer runtime.KeepAlive(h) -+ h.init() -+ hashByte(h.ctx, c) -+ return nil -+} -+ -+func (h *Hash) Sum(in []byte) []byte { -+ defer runtime.KeepAlive(h) -+ h.init() -+ return hashSum(h.ctx, h.Size(), in) -+} -+ -+func (h *Hash) Size() int { -+ return int(h.alg.size) -+} -+ -+func (h *Hash) BlockSize() int { -+ return int(h.alg.blockSize) -+} -+ -+type errMarshallUnsupported struct{} -+ -+func (e errMarshallUnsupported) Error() string { -+ return "cryptokit: hash state is not marshallable" -+} -+ -+func (e errMarshallUnsupported) Unwrap() error { -+ return errors.ErrUnsupported -+} -+ -+func (hx *Hash) MarshalBinary() ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (hx *Hash) AppendBinary(b []byte) ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (hx *Hash) UnmarshalBinary(data []byte) error { -+ return errMarshallUnsupported{} -+} -+ -+// hashData writes p to ctx. It panics on error. -+func hashData(ctx bcrypt.HASH_HANDLE, p []byte) { -+ var n int -+ var err error -+ for n < len(p) && err == nil { -+ nn := len32(p[n:]) -+ err = bcrypt.HashData(ctx, p[n:n+nn], 0) -+ n += nn -+ } -+ if err != nil { -+ panic(err) -+ } -+} -+ -+// hashByte writes c to ctx. It panics on error. -+func hashByte(ctx bcrypt.HASH_HANDLE, c byte) { -+ err := bcrypt.HashDataRaw(ctx, &c, 1, 0) -+ if err != nil { -+ panic(err) -+ } -+} -+ -+// hashSum writes the hash of ctx to in and returns the result. -+// size is the size of the hash output. -+// It panics on error. -+func hashSum(ctx bcrypt.HASH_HANDLE, size int, in []byte) []byte { -+ var ctx2 bcrypt.HASH_HANDLE -+ err := bcrypt.DuplicateHash(ctx, &ctx2, nil, 0) -+ if err != nil { -+ panic(err) -+ } -+ defer bcrypt.DestroyHash(ctx2) -+ buf := make([]byte, size, maxHashSize) // explicit cap to allow stack allocation -+ err = bcrypt.FinishHash(ctx2, buf, 0) -+ if err != nil { -+ panic(err) -+ } -+ return append(in, buf...) -+} -+ -+// hashReset resets the hash state of ctx. -+// size is the size of the hash output. -+// It panics on error. -+func hashReset(ctx bcrypt.HASH_HANDLE, size int) { -+ // bcrypt.FinishHash expects the output buffer to match the hash size. -+ // We don't care about the output, so we just pass a stack-allocated buffer -+ // that is large enough to hold the largest hash size we support. -+ var discard [maxHashSize]byte -+ if err := bcrypt.FinishHash(ctx, discard[:size], 0); err != nil { -+ panic(err) -+ } -+} -+ -+// hashClone clones ctx into ctx2. It panics on error. -+func hashClone(ctx bcrypt.HASH_HANDLE, ctx2 *bcrypt.HASH_HANDLE) { -+ err := bcrypt.DuplicateHash(ctx, ctx2, nil, 0) -+ if err != nil { -+ panic(err) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hkdf.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hkdf.go -new file mode 100644 -index 00000000000000..59da3c3eeb30cb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hkdf.go -@@ -0,0 +1,133 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "hash" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+func SupportsHKDF() bool { -+ _, err := loadHKDF() -+ return err == nil -+} -+ -+func loadHKDF() (bcrypt.ALG_HANDLE, error) { -+ return loadOrStoreAlg(bcrypt.HKDF_ALGORITHM, bcrypt.ALG_NONE_FLAG, "", func(h bcrypt.ALG_HANDLE) (bcrypt.ALG_HANDLE, error) { -+ return h, nil -+ }) -+} -+ -+func newHKDF[H hash.Hash](h func() H, secret, salt []byte) (bcrypt.KEY_HANDLE, error) { -+ ch := h() -+ hashID := hashToID(ch) -+ if hashID == "" { -+ return 0, errors.New("cng: unsupported hash function") -+ } -+ alg, err := loadHKDF() -+ if err != nil { -+ return 0, err -+ } -+ var kh bcrypt.KEY_HANDLE -+ if err := bcrypt.GenerateSymmetricKey(alg, &kh, nil, secret, 0); err != nil { -+ return 0, err -+ } -+ if err := setString(bcrypt.HANDLE(kh), bcrypt.HKDF_HASH_ALGORITHM, hashID); err != nil { -+ bcrypt.DestroyKey(kh) -+ return 0, err -+ } -+ if salt != nil { -+ // Used for Extract. -+ err = bcrypt.SetProperty(bcrypt.HANDLE(kh), utf16PtrFromString(bcrypt.HKDF_SALT_AND_FINALIZE), salt, 0) -+ } else { -+ // Used for Expand. -+ err = bcrypt.SetProperty(bcrypt.HANDLE(kh), utf16PtrFromString(bcrypt.HKDF_PRK_AND_FINALIZE), nil, 0) -+ } -+ if err != nil { -+ bcrypt.DestroyKey(kh) -+ return 0, err -+ } -+ return kh, nil -+} -+ -+func ExtractHKDF[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ if salt == nil { -+ // Replicate x/crypto/hkdf behavior. -+ salt = make([]byte, h().Size()) -+ } -+ kh, err := newHKDF(h, secret, salt) -+ if err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroyKey(kh) -+ hdr, blob, err := exportKeyData(kh) -+ if err != nil { -+ return nil, err -+ } -+ if hdr.Version != bcrypt.KEY_DATA_BLOB_VERSION1 { -+ return nil, errors.New("cng: unknown key data blob version") -+ } -+ // KEY_DATA_BLOB_VERSION1 format is: -+ // cbHashName uint32 // Big-endian -+ // pHashName [cbHash]byte -+ // key []byte // Rest of the blob -+ if len(blob) < 4 { -+ return nil, errors.New("cng: exported key is corrupted") -+ } -+ cbHashName := bigEndianUint32(blob) -+ blob = blob[4:] -+ if len(blob) < int(cbHashName) { -+ return nil, errors.New("cng: exported key is corrupted") -+ } -+ // Skip pHashName. -+ return blob[cbHashName:], nil -+} -+ -+// ExpandHKDF derives a key from the given hash, key, and optional context info. -+func ExpandHKDF[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLength int) ([]byte, error) { -+ kh, err := newHKDF(h, pseudorandomKey, nil) -+ if err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroyKey(kh) -+ out := make([]byte, keyLength) -+ if len(out) == 0 { -+ // Nothing to do, and CNG doesn't like zero-length output buffers. -+ // Call newHKDF, though, to validate parameters. -+ return out, nil -+ } -+ var params *bcrypt.BufferDesc -+ if len(info) > 0 { -+ params = &bcrypt.BufferDesc{ -+ Count: 1, -+ Buffers: &bcrypt.Buffer{ -+ Length: uint32(len(info)), -+ Type: bcrypt.KDF_HKDF_INFO, -+ Data: uintptr(unsafe.Pointer(&info[0])), -+ }, -+ } -+ defer runtime.KeepAlive(params) -+ } -+ var n uint32 -+ err = bcrypt.KeyDerivation(kh, params, out, &n, 0) -+ if err != nil { -+ return nil, err -+ } -+ if int(n) != keyLength { -+ return nil, errors.New("cng: key derivation returned unexpected length") -+ } -+ return out, err -+} -+ -+func bigEndianUint32(b []byte) uint32 { -+ _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 -+ return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hmac.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hmac.go -new file mode 100644 -index 00000000000000..b7d5688f005781 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/hmac.go -@@ -0,0 +1,70 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "bytes" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+// NewHMAC returns a new HMAC using BCrypt. -+// The function fh must return a hash implemented by -+// CNG (for example, [NewSHA256]). -+// If fh is not recognized, NewHMAC returns nil. -+func NewHMAC[H hash.Hash](fh func() H, key []byte) hash.Hash { -+ ch := fh() -+ id := hashToID(ch) -+ if id == "" { -+ return nil -+ } -+ if len(key) > ch.BlockSize() { -+ // Keys longer than BlockSize are first hashed using -+ // the same hash function, according to RFC 2104, Section 3. -+ // BCrypt already does that, but if we hash the key on our side -+ // we avoid allocating unnecessary memory and -+ // allow keys longer than math.MaxUint32 bytes. -+ ch.Write(key) -+ key = ch.Sum(nil) -+ } else { -+ key = bytes.Clone(key) -+ } -+ return hmacWrapper{hashX: &Hash{alg: mustLoadHash(id, bcrypt.ALG_HANDLE_HMAC_FLAG), key: key}} -+} -+ -+type hmacWrapper struct { -+ hashX *Hash -+} -+ -+func (h hmacWrapper) Write(p []byte) (n int, err error) { -+ return h.hashX.Write(p) -+} -+ -+func (h hmacWrapper) Sum(b []byte) []byte { -+ return h.hashX.Sum(b) -+} -+ -+func (h hmacWrapper) Reset() { -+ h.hashX.Reset() -+} -+ -+func (h hmacWrapper) Size() int { -+ return h.hashX.Size() -+} -+ -+func (h hmacWrapper) BlockSize() int { -+ return h.hashX.BlockSize() -+} -+ -+func (h hmacWrapper) Clone() (hash.Cloner, error) { -+ clone, err := h.hashX.Clone() -+ if err != nil { -+ return nil, err -+ } -+ return hmacWrapper{hashX: clone.(*Hash)}, nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/keys.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/keys.go -new file mode 100644 -index 00000000000000..bc150a7bd39272 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/keys.go -@@ -0,0 +1,220 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+const ( -+ sizeOfECCBlobHeader = uint32(unsafe.Sizeof(bcrypt.ECCKEY_BLOB{})) -+ sizeOfRSABlobHeader = uint32(unsafe.Sizeof(bcrypt.RSAKEY_BLOB{})) -+ sizeOfKeyDataBlobHeader = uint32(unsafe.Sizeof(bcrypt.KEY_DATA_BLOB_HEADER{})) -+ sizeOfDSABlobHeader = uint32(unsafe.Sizeof(bcrypt.DSA_KEY_BLOB{})) -+ sizeOfDSAV2BlobHeader = uint32(unsafe.Sizeof(bcrypt.DSA_KEY_BLOB_V2{})) -+ sizeOfDSAParamsHeader = uint32(unsafe.Sizeof(bcrypt.DSA_PARAMETER_HEADER{})) -+ sizeOfDSAParamsV2Header = uint32(unsafe.Sizeof(bcrypt.DSA_PARAMETER_HEADER_V2{})) -+) -+ -+// exportDSAKey exports hkey into a bcrypt.DSA_KEY_BLOB header and data. -+func exportDSAKey(hkey bcrypt.KEY_HANDLE, private bool) (bcrypt.DSA_KEY_BLOB, []byte, error) { -+ var magic string -+ if private { -+ magic = bcrypt.DSA_PRIVATE_BLOB -+ } else { -+ magic = bcrypt.DSA_PUBLIC_BLOB -+ } -+ blob, err := exportKey(hkey, magic) -+ if err != nil { -+ return bcrypt.DSA_KEY_BLOB{}, nil, err -+ } -+ if len(blob) < int(sizeOfDSABlobHeader) { -+ return bcrypt.DSA_KEY_BLOB{}, nil, errors.New("cng: exported key is corrupted") -+ } -+ hdr := (*(*bcrypt.DSA_KEY_BLOB)(unsafe.Pointer(&blob[0]))) -+ return hdr, blob[sizeOfDSABlobHeader:], nil -+} -+ -+// exporDSAV2Key exports hkey into a bcrypt.DSA_KEY_BLOB_V2 header and data. -+func exporDSAV2Key(hkey bcrypt.KEY_HANDLE, private bool) (bcrypt.DSA_KEY_BLOB_V2, []byte, error) { -+ var magic string -+ if private { -+ magic = bcrypt.DSA_PRIVATE_BLOB -+ } else { -+ magic = bcrypt.DSA_PUBLIC_BLOB -+ } -+ blob, err := exportKey(hkey, magic) -+ if err != nil { -+ return bcrypt.DSA_KEY_BLOB_V2{}, nil, err -+ } -+ if len(blob) < int(sizeOfDSAV2BlobHeader) { -+ return bcrypt.DSA_KEY_BLOB_V2{}, nil, errors.New("cng: exported key is corrupted") -+ } -+ hdr := (*(*bcrypt.DSA_KEY_BLOB_V2)(unsafe.Pointer(&blob[0]))) -+ return hdr, blob[sizeOfDSAV2BlobHeader:], nil -+} -+ -+// exportRSAKey exports hkey into a bcrypt.ECCKEY_BLOB header and data. -+func exportECCKey(hkey bcrypt.KEY_HANDLE, private bool) (bcrypt.ECCKEY_BLOB, []byte, error) { -+ var magic string -+ if private { -+ magic = bcrypt.ECCPRIVATE_BLOB -+ } else { -+ magic = bcrypt.ECCPUBLIC_BLOB -+ } -+ blob, err := exportKey(hkey, magic) -+ if err != nil { -+ return bcrypt.ECCKEY_BLOB{}, nil, err -+ } -+ if len(blob) < int(sizeOfECCBlobHeader) { -+ return bcrypt.ECCKEY_BLOB{}, nil, errors.New("cng: exported key is corrupted") -+ } -+ hdr := (*(*bcrypt.ECCKEY_BLOB)(unsafe.Pointer(&blob[0]))) -+ return hdr, blob[sizeOfECCBlobHeader:], nil -+} -+ -+// exportRSAKey exports hkey into a bcrypt.RSAKEY_BLOB header and data. -+func exportRSAKey(hkey bcrypt.KEY_HANDLE, private bool) (bcrypt.RSAKEY_BLOB, []byte, error) { -+ var magic string -+ if private { -+ magic = bcrypt.RSAFULLPRIVATE_BLOB -+ } else { -+ magic = bcrypt.RSAPUBLIC_KEY_BLOB -+ } -+ blob, err := exportKey(hkey, magic) -+ if err != nil { -+ return bcrypt.RSAKEY_BLOB{}, nil, err -+ } -+ if len(blob) < int(sizeOfRSABlobHeader) { -+ return bcrypt.RSAKEY_BLOB{}, nil, errors.New("cng: exported key is corrupted") -+ } -+ hdr := (*(*bcrypt.RSAKEY_BLOB)(unsafe.Pointer(&blob[0]))) -+ return hdr, blob[sizeOfRSABlobHeader:], nil -+} -+ -+// exportKeyData exports hkey into a bcrypt.KEY_DATA_BLOB_HEADER header and data. -+func exportKeyData(hkey bcrypt.KEY_HANDLE) (bcrypt.KEY_DATA_BLOB_HEADER, []byte, error) { -+ blob, err := exportKey(hkey, bcrypt.KEY_DATA_BLOB) -+ if err != nil { -+ return bcrypt.KEY_DATA_BLOB_HEADER{}, nil, err -+ } -+ if len(blob) < int(sizeOfKeyDataBlobHeader) { -+ return bcrypt.KEY_DATA_BLOB_HEADER{}, nil, errors.New("cng: exported key is corrupted") -+ } -+ hdr := (*(*bcrypt.KEY_DATA_BLOB_HEADER)(unsafe.Pointer(&blob[0]))) -+ if hdr.Magic != bcrypt.KEY_DATA_BLOB_MAGIC { -+ return bcrypt.KEY_DATA_BLOB_HEADER{}, nil, errors.New("cng: unknown key format") -+ } -+ return hdr, blob[sizeOfKeyDataBlobHeader : sizeOfKeyDataBlobHeader+hdr.Length], nil -+} -+ -+// exportKey exports hkey to a memory blob. -+func exportKey(hkey bcrypt.KEY_HANDLE, magic string) ([]byte, error) { -+ psBlobType := utf16PtrFromString(magic) -+ var size uint32 -+ err := bcrypt.ExportKey(hkey, 0, psBlobType, nil, &size, 0) -+ if err != nil { -+ return nil, err -+ } -+ blob := make([]byte, size) -+ err = bcrypt.ExportKey(hkey, 0, psBlobType, blob, &size, 0) -+ if err != nil { -+ return nil, err -+ } -+ return blob, err -+} -+ -+// importECCKey imports a public/private key pair from the given parameters. -+// If D is nil, only the public components will be populated. -+func importECCKey(h bcrypt.ALG_HANDLE, id string, bits uint32, X, Y, D BigInt) (bcrypt.KEY_HANDLE, error) { -+ blob, err := encodeECCKey(id, bits, X, Y, D) -+ if err != nil { -+ return 0, err -+ } -+ var kind string -+ if D == nil { -+ kind = bcrypt.ECCPUBLIC_BLOB -+ } else { -+ kind = bcrypt.ECCPRIVATE_BLOB -+ } -+ var hkey bcrypt.KEY_HANDLE -+ err = bcrypt.ImportKeyPair(h, 0, utf16PtrFromString(kind), &hkey, blob, 0) -+ if err != nil { -+ return 0, err -+ } -+ return hkey, nil -+} -+ -+// encodeECCKey generates a bcrypt.ECCKEY_BLOB from the given parameters. -+func encodeECCKey(id string, bits uint32, X, Y, D BigInt) ([]byte, error) { -+ var hdr bcrypt.ECCKEY_BLOB -+ hdr.KeySize = (bits + 7) / 8 -+ if len(X) > int(hdr.KeySize) || len(Y) > int(hdr.KeySize) || len(D) > int(hdr.KeySize) { -+ return nil, errors.New("cng: invalid parameters") -+ } -+ switch id { -+ case bcrypt.ECDSA_ALGORITHM: -+ if D == nil { -+ hdr.Magic = bcrypt.ECDSA_PUBLIC_GENERIC_MAGIC -+ } else { -+ hdr.Magic = bcrypt.ECDSA_PRIVATE_GENERIC_MAGIC -+ } -+ case bcrypt.ECDH_ALGORITHM: -+ if D == nil { -+ hdr.Magic = bcrypt.ECDH_PUBLIC_GENERIC_MAGIC -+ } else { -+ hdr.Magic = bcrypt.ECDH_PRIVATE_GENERIC_MAGIC -+ } -+ default: -+ panic("unsupported key ID: " + id) -+ } -+ var blob []byte -+ if D == nil { -+ blob = make([]byte, sizeOfECCBlobHeader+hdr.KeySize*2) -+ } else { -+ blob = make([]byte, sizeOfECCBlobHeader+hdr.KeySize*3) -+ } -+ copy(blob, (*(*[sizeOfECCBlobHeader]byte)(unsafe.Pointer(&hdr)))[:]) -+ data := blob[sizeOfECCBlobHeader:] -+ err := encodeBigInt(data, []sizedBigInt{ -+ {X, hdr.KeySize}, {Y, hdr.KeySize}, -+ {D, hdr.KeySize}, -+ }) -+ if err != nil { -+ return nil, err -+ } -+ return blob, nil -+} -+ -+// sizedBigInt defines a big integer with -+// a size that can be different from the -+// one provided by len(b). -+type sizedBigInt struct { -+ b BigInt -+ size uint32 -+} -+ -+// encodeBigInt encodes ints into data. -+// It stops iterating over ints when it finds one nil element. -+func encodeBigInt(data []byte, ints []sizedBigInt) error { -+ for _, v := range ints { -+ if v.b == nil { -+ return nil -+ } -+ // b might be shorter than size if the original big number contained leading zeros. -+ leadingZeros := int(v.size) - len(v.b) -+ if leadingZeros < 0 { -+ return errors.New("cng: invalid parameters") -+ } -+ copy(data[leadingZeros:], v.b) -+ data = data[v.size:] -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/mldsa.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/mldsa.go -new file mode 100644 -index 00000000000000..92df2fac2ca6da ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/mldsa.go -@@ -0,0 +1,444 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "crypto/subtle" -+ "errors" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+const ( -+ // privateKeySizeMLDSA is the size of an ML-DSA private key seed. -+ privateKeySizeMLDSA = 32 -+ -+ // publicKeySizeMLDSA44 is the size of an ML-DSA-44 public key encoding. -+ publicKeySizeMLDSA44 = 1312 -+ -+ // publicKeySizeMLDSA65 is the size of an ML-DSA-65 public key encoding. -+ publicKeySizeMLDSA65 = 1952 -+ -+ // publicKeySizeMLDSA87 is the size of an ML-DSA-87 public key encoding. -+ publicKeySizeMLDSA87 = 2592 -+ -+ // signatureSizeMLDSA44 is the size of an ML-DSA-44 signature. -+ signatureSizeMLDSA44 = 2420 -+ -+ // signatureSizeMLDSA65 is the size of an ML-DSA-65 signature. -+ signatureSizeMLDSA65 = 3309 -+ -+ // signatureSizeMLDSA87 is the size of an ML-DSA-87 signature. -+ signatureSizeMLDSA87 = 4627 -+ -+ sizeOfPQDSAKeyBlobHeader = 12 -+ maxMLDSAParameterSetNameBytes = 6 -+ sizeOfPrivateSeedBlobMLDSA = sizeOfPQDSAKeyBlobHeader + maxMLDSAParameterSetNameBytes + privateKeySizeMLDSA -+ sizeOfPublicKeyBlobMLDSA87 = sizeOfPQDSAKeyBlobHeader + maxMLDSAParameterSetNameBytes + publicKeySizeMLDSA87 -+) -+ -+type mldsaAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+} -+ -+func loadMLDSA() (mldsaAlgorithm, error) { -+ return loadOrStoreAlg(bcrypt.MLDSA_ALGORITHM, 0, "", func(h bcrypt.ALG_HANDLE) (mldsaAlgorithm, error) { -+ return mldsaAlgorithm{handle: h}, nil -+ }) -+} -+ -+// SupportsMLDSA returns true if ML-DSA is supported on this platform. -+func SupportsMLDSA() bool { -+ _, err := loadMLDSA() -+ return err == nil -+} -+ -+func generateMLDSAKey(paramSet string, dst []byte) error { -+ alg, err := loadMLDSA() -+ if err != nil { -+ return err -+ } -+ -+ var hKey bcrypt.KEY_HANDLE -+ if err := bcrypt.GenerateKeyPair(alg.handle, &hKey, 0, 0); err != nil { -+ return err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ if err := setString(bcrypt.HANDLE(hKey), bcrypt.PARAMETER_SET_NAME, paramSet); err != nil { -+ return err -+ } -+ if err := bcrypt.FinalizeKeyPair(hKey, 0); err != nil { -+ return err -+ } -+ -+ var blob [sizeOfPrivateSeedBlobMLDSA]byte -+ var size uint32 -+ if err := bcrypt.ExportKey(hKey, 0, utf16PtrFromString(bcrypt.PQDSA_PRIVATE_SEED_BLOB), blob[:], &size, 0); err != nil { -+ return err -+ } -+ return extractPQDSAKeyBytes(dst, blob[:size]) -+} -+ -+func newPQDSAKeyBlob(dst []byte, paramSet string, keyBytes []byte, magic bcrypt.KeyBlobMagicNumber) ([]byte, error) { -+ paramSetByteLen := (len(paramSet) + 1) * 2 -+ blobSize := 12 + paramSetByteLen + len(keyBytes) -+ if len(dst) < blobSize { -+ return nil, errors.New("mldsa: destination blob too small") -+ } -+ blob := dst[:blobSize] -+ putUint32LE(blob[0:4], uint32(magic)) -+ putUint32LE(blob[4:8], uint32(paramSetByteLen)) -+ putUint32LE(blob[8:12], uint32(len(keyBytes))) -+ for i := 0; i < len(paramSet); i++ { -+ if paramSet[i] == 0 || paramSet[i] > 127 { -+ panic("newPQDSAKeyBlob only supports ASCII parameter set names, got " + paramSet) -+ } -+ putUint16LE(blob[12+i*2:], uint16(paramSet[i])) -+ } -+ putUint16LE(blob[12+len(paramSet)*2:], 0) -+ copy(blob[12+paramSetByteLen:], keyBytes) -+ return blob, nil -+} -+ -+func extractPQDSAKeyBytes(dst, blob []byte) error { -+ if len(blob) < 12 { -+ return errors.New("mldsa: blob too small") -+ } -+ cbParameterSet := getUint32LE(blob[4:8]) -+ cbKey := getUint32LE(blob[8:12]) -+ headerSize := 12 + int(cbParameterSet) -+ if len(blob) < headerSize+int(cbKey) { -+ return errors.New("mldsa: invalid blob size") -+ } -+ if len(dst) != int(cbKey) { -+ return errors.New("mldsa: destination size mismatch") -+ } -+ copy(dst, blob[headerSize:headerSize+int(cbKey)]) -+ return nil -+} -+ -+func importMLDSAPrivateKey(paramSet string, seed []byte) (bcrypt.KEY_HANDLE, error) { -+ alg, err := loadMLDSA() -+ if err != nil { -+ return 0, err -+ } -+ var blobBuf [sizeOfPrivateSeedBlobMLDSA]byte -+ blob, err := newPQDSAKeyBlob(blobBuf[:], paramSet, seed, bcrypt.MLDSA_PRIVATE_SEED_MAGIC) -+ if err != nil { -+ return 0, err -+ } -+ var hKey bcrypt.KEY_HANDLE -+ if err := bcrypt.ImportKeyPair(alg.handle, 0, utf16PtrFromString(bcrypt.PQDSA_PRIVATE_SEED_BLOB), &hKey, blob, 0); err != nil { -+ return 0, err -+ } -+ return hKey, nil -+} -+ -+func importMLDSAPublicKey(paramSet string, publicKey []byte) (bcrypt.KEY_HANDLE, error) { -+ alg, err := loadMLDSA() -+ if err != nil { -+ return 0, err -+ } -+ var blobBuf [sizeOfPublicKeyBlobMLDSA87]byte -+ blob, err := newPQDSAKeyBlob(blobBuf[:], paramSet, publicKey, bcrypt.MLDSA_PUBLIC_MAGIC) -+ if err != nil { -+ return 0, err -+ } -+ var hKey bcrypt.KEY_HANDLE -+ if err := bcrypt.ImportKeyPair(alg.handle, 0, utf16PtrFromString(bcrypt.PQDSA_PUBLIC_BLOB), &hKey, blob, 0); err != nil { -+ return 0, err -+ } -+ return hKey, nil -+} -+ -+func mldsaPublicKey(paramSet string, seed, dst []byte) error { -+ hKey, err := importMLDSAPrivateKey(paramSet, seed) -+ if err != nil { -+ return err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ var blob [sizeOfPublicKeyBlobMLDSA87]byte -+ var size uint32 -+ if err := bcrypt.ExportKey(hKey, 0, utf16PtrFromString(bcrypt.PQDSA_PUBLIC_BLOB), blob[:], &size, 0); err != nil { -+ return err -+ } -+ return extractPQDSAKeyBytes(dst, blob[:size]) -+} -+ -+func mldsaPadding(context string) (bcrypt.PQDSA_PADDING_INFO, []byte, bcrypt.PadMode, error) { -+ if len(context) > 255 { -+ return bcrypt.PQDSA_PADDING_INFO{}, nil, 0, errors.New("mldsa: context too long") -+ } -+ if context == "" { -+ return bcrypt.PQDSA_PADDING_INFO{}, nil, bcrypt.PAD_PQDSA, nil -+ } -+ contextBytes := []byte(context) -+ return bcrypt.PQDSA_PADDING_INFO{ -+ Context: &contextBytes[0], -+ ContextSize: uint32(len(contextBytes)), -+ }, contextBytes, bcrypt.PAD_PQDSA, nil -+} -+ -+func mldsaSign(paramSet string, seed, message []byte, signatureSize int, context string) ([]byte, error) { -+ hKey, err := importMLDSAPrivateKey(paramSet, seed) -+ if err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ info, contextBytes, flags, err := mldsaPadding(context) -+ if err != nil { -+ return nil, err -+ } -+ var infoPtr unsafe.Pointer -+ if flags != 0 { -+ infoPtr = unsafe.Pointer(&info) -+ defer runtime.KeepAlive(contextBytes) -+ } -+ -+ signature := make([]byte, signatureSize) -+ var size uint32 -+ if err := bcrypt.SignHash(hKey, infoPtr, message, signature, &size, flags); err != nil { -+ return nil, err -+ } -+ return signature[:size], nil -+} -+ -+func mldsaSignExternalMu(paramSet string, seed, mu []byte, signatureSize int) ([]byte, error) { -+ if len(mu) != 64 { -+ return nil, errors.New("mldsa: invalid message hash length") -+ } -+ hKey, err := importMLDSAPrivateKey(paramSet, seed) -+ if err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ signature := make([]byte, signatureSize) -+ var size uint32 -+ if err := bcrypt.SignHash(hKey, nil, mu, signature, &size, bcrypt.MLDSA_EXTERNAL_MU); err != nil { -+ return nil, err -+ } -+ return signature[:size], nil -+} -+ -+func mldsaVerify(paramSet string, publicKey, message, signature []byte, signatureSize int, context string) error { -+ if len(signature) != signatureSize { -+ return errors.New("mldsa: invalid signature length") -+ } -+ hKey, err := importMLDSAPublicKey(paramSet, publicKey) -+ if err != nil { -+ return err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ info, contextBytes, flags, err := mldsaPadding(context) -+ if err != nil { -+ return err -+ } -+ var infoPtr unsafe.Pointer -+ if flags != 0 { -+ infoPtr = unsafe.Pointer(&info) -+ defer runtime.KeepAlive(contextBytes) -+ } -+ return bcrypt.VerifySignature(hKey, infoPtr, message, signature, flags) -+} -+ -+func mldsaVerifyExternalMu(paramSet string, publicKey, mu, signature []byte, signatureSize int) error { -+ if len(mu) != 64 { -+ return errors.New("mldsa: invalid message hash length") -+ } -+ if len(signature) != signatureSize { -+ return errors.New("mldsa: invalid signature length") -+ } -+ hKey, err := importMLDSAPublicKey(paramSet, publicKey) -+ if err != nil { -+ return err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ return bcrypt.VerifySignature(hKey, nil, mu, signature, bcrypt.MLDSA_EXTERNAL_MU) -+} -+ -+// MLDSAParameters represents one of the fixed ML-DSA parameter sets. -+type MLDSAParameters struct { -+ name string -+ paramSet string -+ publicKeySize int -+ signatureSize int -+} -+ -+var ( -+ mldsa44 = MLDSAParameters{ -+ name: "ML-DSA-44", -+ paramSet: bcrypt.MLDSA_PARAMETER_SET_44, -+ publicKeySize: publicKeySizeMLDSA44, -+ signatureSize: signatureSizeMLDSA44, -+ } -+ mldsa65 = MLDSAParameters{ -+ name: "ML-DSA-65", -+ paramSet: bcrypt.MLDSA_PARAMETER_SET_65, -+ publicKeySize: publicKeySizeMLDSA65, -+ signatureSize: signatureSizeMLDSA65, -+ } -+ mldsa87 = MLDSAParameters{ -+ name: "ML-DSA-87", -+ paramSet: bcrypt.MLDSA_PARAMETER_SET_87, -+ publicKeySize: publicKeySizeMLDSA87, -+ signatureSize: signatureSizeMLDSA87, -+ } -+) -+ -+// MLDSA44 returns the ML-DSA-44 parameter set. -+func MLDSA44() MLDSAParameters { return mldsa44 } -+ -+// MLDSA65 returns the ML-DSA-65 parameter set. -+func MLDSA65() MLDSAParameters { return mldsa65 } -+ -+// MLDSA87 returns the ML-DSA-87 parameter set. -+func MLDSA87() MLDSAParameters { return mldsa87 } -+ -+func (params MLDSAParameters) valid() bool { -+ switch params { -+ case mldsa44, mldsa65, mldsa87: -+ return true -+ default: -+ return false -+ } -+} -+ -+// PublicKeySize returns the size of public keys for this parameter set, in bytes. -+func (params MLDSAParameters) PublicKeySize() int { return params.publicKeySize } -+ -+// SignatureSize returns the size of signatures for this parameter set, in bytes. -+func (params MLDSAParameters) SignatureSize() int { return params.signatureSize } -+ -+// String returns the name of the parameter set. -+func (params MLDSAParameters) String() string { return params.name } -+ -+var errInvalidMLDSAParameters = errors.New("mldsa: invalid parameters") -+ -+// PrivateKeyMLDSA is an ML-DSA private key seed. -+type PrivateKeyMLDSA struct { -+ params MLDSAParameters -+ seed [privateKeySizeMLDSA]byte -+} -+ -+// GenerateKeyMLDSA generates a new ML-DSA private key. -+func GenerateKeyMLDSA(params MLDSAParameters) (*PrivateKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ key := &PrivateKeyMLDSA{params: params} -+ if err := generateMLDSAKey(params.paramSet, key.seed[:]); err != nil { -+ return nil, err -+ } -+ return key, nil -+} -+ -+// NewPrivateKeyMLDSA constructs an ML-DSA private key from its seed. -+func NewPrivateKeyMLDSA(params MLDSAParameters, seed []byte) (*PrivateKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ if len(seed) != privateKeySizeMLDSA { -+ return nil, errors.New("mldsa: invalid private key size") -+ } -+ key := &PrivateKeyMLDSA{params: params} -+ copy(key.seed[:], seed) -+ return key, nil -+} -+ -+// Bytes returns the private key seed. -+func (key *PrivateKeyMLDSA) Bytes() []byte { -+ return key.seed[:] -+} -+ -+// Equal reports whether key and other represent the same private key. -+func (key *PrivateKeyMLDSA) Equal(other *PrivateKeyMLDSA) bool { -+ if other == nil { -+ return false -+ } -+ return key.params.name == other.params.name && -+ subtle.ConstantTimeCompare(key.seed[:], other.seed[:]) == 1 -+} -+ -+// Parameters returns the parameters associated with this private key. -+func (key *PrivateKeyMLDSA) Parameters() MLDSAParameters { return key.params } -+ -+// PublicKey returns the corresponding public key. -+func (key *PrivateKeyMLDSA) PublicKey() *PublicKeyMLDSA { -+ publicKey := &PublicKeyMLDSA{params: key.params} -+ if err := mldsaPublicKey(key.params.paramSet, key.seed[:], publicKey.bytes[:key.params.publicKeySize]); err != nil { -+ panic(err) -+ } -+ return publicKey -+} -+ -+// Sign signs message with context using ML-DSA. -+func (key *PrivateKeyMLDSA) Sign(message []byte, context string) ([]byte, error) { -+ return mldsaSign(key.params.paramSet, key.seed[:], message, key.params.signatureSize, context) -+} -+ -+// SignExternalMu signs a pre-hashed mu message representative using ML-DSA. -+func (key *PrivateKeyMLDSA) SignExternalMu(mu []byte) ([]byte, error) { -+ return mldsaSignExternalMu(key.params.paramSet, key.seed[:], mu, key.params.signatureSize) -+} -+ -+// PublicKeyMLDSA is an ML-DSA public key. -+type PublicKeyMLDSA struct { -+ params MLDSAParameters -+ bytes [publicKeySizeMLDSA87]byte -+} -+ -+// NewPublicKeyMLDSA constructs an ML-DSA public key from its encoding. -+func NewPublicKeyMLDSA(params MLDSAParameters, publicKey []byte) (*PublicKeyMLDSA, error) { -+ if !params.valid() { -+ return nil, errInvalidMLDSAParameters -+ } -+ if len(publicKey) != params.publicKeySize { -+ return nil, errors.New("mldsa: invalid public key size") -+ } -+ if hKey, err := importMLDSAPublicKey(params.paramSet, publicKey); err != nil { -+ return nil, err -+ } else { -+ bcrypt.DestroyKey(hKey) -+ } -+ key := &PublicKeyMLDSA{params: params} -+ copy(key.bytes[:], publicKey) -+ return key, nil -+} -+ -+// Bytes returns the public key encoding. -+func (key *PublicKeyMLDSA) Bytes() []byte { -+ return key.bytes[:key.params.publicKeySize] -+} -+ -+// Equal reports whether key and other represent the same public key. -+func (key *PublicKeyMLDSA) Equal(other *PublicKeyMLDSA) bool { -+ if other == nil { -+ return false -+ } -+ return key.params.name == other.params.name && -+ subtle.ConstantTimeCompare(key.bytes[:key.params.publicKeySize], other.bytes[:other.params.publicKeySize]) == 1 -+} -+ -+// Parameters returns the parameters associated with this public key. -+func (key *PublicKeyMLDSA) Parameters() MLDSAParameters { return key.params } -+ -+// Verify verifies an ML-DSA signature. -+func (key *PublicKeyMLDSA) Verify(message, signature []byte, context string) error { -+ return mldsaVerify(key.params.paramSet, key.bytes[:key.params.publicKeySize], message, signature, key.params.signatureSize, context) -+} -+ -+// VerifyExternalMu verifies an ML-DSA signature over a pre-hashed mu message representative. -+func (key *PublicKeyMLDSA) VerifyExternalMu(mu, signature []byte) error { -+ return mldsaVerifyExternalMu(key.params.paramSet, key.bytes[:key.params.publicKeySize], mu, signature, key.params.signatureSize) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/mlkem.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/mlkem.go -new file mode 100644 -index 00000000000000..f220e1d9d29794 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/mlkem.go -@@ -0,0 +1,405 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+const ( -+ // sharedKeySizeMLKEM is the size of a shared key produced by ML-KEM. -+ sharedKeySizeMLKEM = 32 -+ -+ // seedSizeMLKEM is the size of a seed used to generate a decapsulation key. -+ seedSizeMLKEM = 64 -+ -+ // ciphertextSizeMLKEM768 is the size of a ciphertext produced by ML-KEM-768. -+ ciphertextSizeMLKEM768 = 1088 -+ -+ // encapsulationKeySizeMLKEM768 is the size of an ML-KEM-768 encapsulation key (raw key material). -+ encapsulationKeySizeMLKEM768 = 1184 -+ -+ // ciphertextSizeMLKEM1024 is the size of a ciphertext produced by ML-KEM-1024. -+ ciphertextSizeMLKEM1024 = 1568 -+ -+ // encapsulationKeySizeMLKEM1024 is the size of an ML-KEM-1024 encapsulation key (raw key material). -+ encapsulationKeySizeMLKEM1024 = 1568 -+) -+ -+const ( -+ sizeOfPrivateSeedMLKEM1024 = 4 + 4 + 4 + 10 + seedSizeMLKEM // dwMagic (4) + cbParameterSet (4) + cbKey (4) + ParameterSet (10 "1024\0") + Key (64) -+ sizeOfPublicKeyMLKEM1024 = 4 + 4 + 4 + 10 + encapsulationKeySizeMLKEM1024 // dwMagic (4) + cbParameterSet (4) + cbKey (4) + ParameterSet (10 "1024\0") + Key (1568) -+) -+ -+// putUint32LE puts a uint32 in little-endian byte order. -+func putUint32LE(b []byte, v uint32) { -+ b[0] = byte(v) -+ b[1] = byte(v >> 8) -+ b[2] = byte(v >> 16) -+ b[3] = byte(v >> 24) -+} -+ -+// getUint32LE reads a uint32 in little-endian byte order. -+func getUint32LE(b []byte) uint32 { -+ return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 -+} -+ -+// putUint16LE puts a uint16 in little-endian byte order. -+func putUint16LE(b []byte, v uint16) { -+ b[0] = byte(v) -+ b[1] = byte(v >> 8) -+} -+ -+type mlkemAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+} -+ -+func loadMLKEM() (mlkemAlgorithm, error) { -+ return loadOrStoreAlg(bcrypt.MLKEM_ALGORITHM, 0, "", func(h bcrypt.ALG_HANDLE) (mlkemAlgorithm, error) { -+ return mlkemAlgorithm{handle: h}, nil -+ }) -+} -+ -+// SupportsMLKEM returns true if ML-KEM is supported on this platform. -+// ML-KEM is supported on Windows 11 24H2/25H2 and Windows Server 2025 and later. -+func SupportsMLKEM() bool { -+ _, err := loadMLKEM() -+ return err == nil -+} -+ -+// generateMLKEMKey generates a new ML-KEM key pair with the specified parameter set -+// and writes the raw key bytes (not the blob) into dst. -+func generateMLKEMKey(paramSet string, dst []byte) error { -+ alg, err := loadMLKEM() -+ if err != nil { -+ return err -+ } -+ -+ var hKey bcrypt.KEY_HANDLE -+ err = bcrypt.GenerateKeyPair(alg.handle, &hKey, 0, 0) -+ if err != nil { -+ return err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ // Set the parameter set -+ if err := setString(bcrypt.HANDLE(hKey), bcrypt.PARAMETER_SET_NAME, paramSet); err != nil { -+ return err -+ } -+ -+ err = bcrypt.FinalizeKeyPair(hKey, 0) -+ if err != nil { -+ return err -+ } -+ -+ // Export the private key blob -+ blob := make([]byte, sizeOfPrivateSeedMLKEM1024) // use the larger size to be safe and avoid an allocation -+ var size uint32 -+ err = bcrypt.ExportKey(hKey, 0, utf16PtrFromString(bcrypt.MLKEM_PRIVATE_SEED_BLOB), blob, &size, 0) -+ if err != nil { -+ return err -+ } -+ -+ // Extract raw key bytes into destination -+ return extractMLKEMKeyBytes(dst, blob[:size]) -+} -+ -+// newMLKEMKeyBlob creates a key blob from raw key bytes. -+func newMLKEMKeyBlob(dst []byte, paramSet string, keyBytes []byte, magic bcrypt.KeyBlobMagicNumber) error { -+ paramSetUTF16 := utf16FromString(paramSet) -+ paramSetByteLen := len(paramSetUTF16) * 2 -+ -+ if len(dst) < 12+paramSetByteLen+len(keyBytes) { -+ return errors.New("mlkem: destination blob too small") -+ } -+ putUint32LE(dst[0:4], uint32(magic)) -+ putUint32LE(dst[4:8], uint32(paramSetByteLen)) // cbParameterSet -+ putUint32LE(dst[8:12], uint32(len(keyBytes))) // cbKey -+ for i, v := range paramSetUTF16 { -+ putUint16LE(dst[12+i*2:], v) -+ } -+ copy(dst[12+paramSetByteLen:], keyBytes) -+ -+ return nil -+} -+ -+// extractMLKEMKeyBytes extracts the raw key bytes from a blob into the provided destination slice. -+func extractMLKEMKeyBytes(dst, blob []byte) error { -+ if len(blob) < 12 { -+ return errors.New("mlkem: blob too small") -+ } -+ cbParameterSet := getUint32LE(blob[4:8]) -+ cbKey := getUint32LE(blob[8:12]) -+ headerSize := 12 + int(cbParameterSet) -+ if len(blob) < headerSize+int(cbKey) { -+ return errors.New("mlkem: invalid blob size") -+ } -+ if len(dst) != int(cbKey) { -+ return errors.New("mlkem: destination size mismatch") -+ } -+ copy(dst, blob[headerSize:headerSize+int(cbKey)]) -+ return nil -+} -+ -+// mlkemDecapsulate is a shared helper for decapsulating with ML-KEM keys. -+func mlkemDecapsulate(paramSet string, seed []byte, ciphertext []byte, expectedCiphertextSize int) ([]byte, error) { -+ if len(ciphertext) != expectedCiphertextSize { -+ return nil, errors.New("mlkem: invalid ciphertext size") -+ } -+ -+ alg, err := loadMLKEM() -+ if err != nil { -+ return nil, err -+ } -+ -+ // Construct blob from seed -+ blob := make([]byte, sizeOfPrivateSeedMLKEM1024) // use the larger size to be safe and avoid an allocation -+ err = newMLKEMKeyBlob(blob, paramSet, seed, bcrypt.MLKEM_PRIVATE_SEED_MAGIC) -+ if err != nil { -+ return nil, err -+ } -+ -+ var hKey bcrypt.KEY_HANDLE -+ err = bcrypt.ImportKeyPair(alg.handle, 0, utf16PtrFromString(bcrypt.MLKEM_PRIVATE_SEED_BLOB), &hKey, blob, 0) -+ if err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ sharedKey := make([]byte, sharedKeySizeMLKEM) -+ var cbResult uint32 -+ -+ err = bcrypt.Decapsulate(hKey, ciphertext, sharedKey, &cbResult, 0) -+ if err != nil { -+ return nil, err -+ } -+ return sharedKey[:cbResult], nil -+} -+ -+// mlkemEncapsulationKey is a shared helper for extracting the encapsulation key from a decapsulation key. -+func mlkemEncapsulationKey(paramSet string, seed []byte, dst []byte) { -+ alg, err := loadMLKEM() -+ if err != nil { -+ panic(err) -+ } -+ -+ // Construct blob from seed -+ blob := make([]byte, sizeOfPrivateSeedMLKEM1024) // use the larger size to be safe and avoid an allocation -+ err = newMLKEMKeyBlob(blob, paramSet, seed, bcrypt.MLKEM_PRIVATE_SEED_MAGIC) -+ if err != nil { -+ panic(err) -+ } -+ -+ var hKey bcrypt.KEY_HANDLE -+ err = bcrypt.ImportKeyPair(alg.handle, 0, utf16PtrFromString(bcrypt.MLKEM_PRIVATE_SEED_BLOB), &hKey, blob, 0) -+ if err != nil { -+ panic(err) -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ // Export the public key blob -+ pubBlob := make([]byte, sizeOfPublicKeyMLKEM1024) // use the larger size to be safe and avoid an allocation -+ var size uint32 -+ err = bcrypt.ExportKey(hKey, 0, utf16PtrFromString(bcrypt.MLKEM_PUBLIC_BLOB), pubBlob, &size, 0) -+ if err != nil { -+ panic(err) -+ } -+ // Extract raw public key bytes from blob -+ if err := extractMLKEMKeyBytes(dst, pubBlob[:size]); err != nil { -+ panic(err) -+ } -+} -+ -+// mlkemEncapsulate is a shared helper for encapsulating with ML-KEM keys. -+func mlkemEncapsulate(paramSet string, keyBytes []byte, expectedCiphertextSize int) ([]byte, []byte) { -+ alg, err := loadMLKEM() -+ if err != nil { -+ panic(err) -+ } -+ -+ // Construct blob from raw key bytes -+ blob := make([]byte, sizeOfPublicKeyMLKEM1024) // use the larger size to be safe and avoid an allocation -+ err = newMLKEMKeyBlob(blob, paramSet, keyBytes, bcrypt.MLKEM_PUBLIC_MAGIC) -+ if err != nil { -+ panic(err) -+ } -+ -+ var hKey bcrypt.KEY_HANDLE -+ err = bcrypt.ImportKeyPair(alg.handle, 0, utf16PtrFromString(bcrypt.MLKEM_PUBLIC_BLOB), &hKey, blob, 0) -+ if err != nil { -+ panic(err) -+ } -+ defer bcrypt.DestroyKey(hKey) -+ -+ sharedKey := make([]byte, sharedKeySizeMLKEM) -+ var cbResult uint32 -+ ciphertext := make([]byte, expectedCiphertextSize) -+ var cbCiphertextResult uint32 -+ -+ err = bcrypt.Encapsulate(hKey, sharedKey, &cbResult, ciphertext, &cbCiphertextResult, 0) -+ if err != nil { -+ panic(err) -+ } -+ -+ return sharedKey[:cbResult], ciphertext[:cbCiphertextResult] -+} -+ -+// DecapsulationKeyMLKEM768 is the secret key used to decapsulate a shared key -+// from a ciphertext. It includes various precomputed values. -+type DecapsulationKeyMLKEM768 [seedSizeMLKEM]byte -+ -+// GenerateKeyMLKEM768 generates a new decapsulation key, drawing random bytes from -+// the default crypto/rand source. The decapsulation key must be kept secret. -+func GenerateKeyMLKEM768() (DecapsulationKeyMLKEM768, error) { -+ var dk DecapsulationKeyMLKEM768 -+ if err := generateMLKEMKey(bcrypt.MLKEM_PARAMETER_SET_768, dk[:]); err != nil { -+ return DecapsulationKeyMLKEM768{}, err -+ } -+ return dk, nil -+} -+ -+// NewDecapsulationKeyMLKEM768 constructs a decapsulation key from its serialized form. -+func NewDecapsulationKeyMLKEM768(seed []byte) (DecapsulationKeyMLKEM768, error) { -+ if len(seed) != seedSizeMLKEM { -+ return DecapsulationKeyMLKEM768{}, errors.New("mlkem: invalid decapsulation key size") -+ } -+ -+ var dk DecapsulationKeyMLKEM768 -+ copy(dk[:], seed) -+ return dk, nil -+} -+ -+// Bytes returns the decapsulation key in its serialized form. -+// -+// The decapsulation key must be kept secret. -+func (dk DecapsulationKeyMLKEM768) Bytes() []byte { -+ return dk[:] -+} -+ -+// Decapsulate generates a shared key from a ciphertext and a decapsulation -+// key. If the ciphertext is not valid, Decapsulate returns an error. -+// -+// The shared key must be kept secret. -+func (dk DecapsulationKeyMLKEM768) Decapsulate(ciphertext []byte) (sharedKey []byte, err error) { -+ return mlkemDecapsulate(bcrypt.MLKEM_PARAMETER_SET_768, dk[:], ciphertext, ciphertextSizeMLKEM768) -+} -+ -+// EncapsulationKey returns the public encapsulation key necessary to produce -+// ciphertexts. -+func (dk DecapsulationKeyMLKEM768) EncapsulationKey() EncapsulationKeyMLKEM768 { -+ var ek EncapsulationKeyMLKEM768 -+ mlkemEncapsulationKey(bcrypt.MLKEM_PARAMETER_SET_768, dk[:], ek[:]) -+ return ek -+} -+ -+// An EncapsulationKeyMLKEM768 is the public key used to produce ciphertexts to be -+// decapsulated by the corresponding DecapsulationKeyMLKEM768. -+type EncapsulationKeyMLKEM768 [encapsulationKeySizeMLKEM768]byte -+ -+// NewEncapsulationKeyMLKEM768 parses an encapsulation key from its encoded form. If -+// the encapsulation key is not valid, NewEncapsulationKeyMLKEM768 returns an error. -+func NewEncapsulationKeyMLKEM768(encapsulationKey []byte) (EncapsulationKeyMLKEM768, error) { -+ if len(encapsulationKey) != encapsulationKeySizeMLKEM768 { -+ return EncapsulationKeyMLKEM768{}, errors.New("mlkem: invalid encapsulation key size") -+ } -+ -+ var ek EncapsulationKeyMLKEM768 -+ copy(ek[:], encapsulationKey) -+ return ek, nil -+} -+ -+// Bytes returns the encapsulation key as a byte slice. -+func (ek EncapsulationKeyMLKEM768) Bytes() []byte { -+ return ek[:] -+} -+ -+// Encapsulate generates a shared key and an associated ciphertext from an -+// encapsulation key, drawing random bytes from the default crypto/rand source. -+// -+// The shared key must be kept secret. -+func (ek EncapsulationKeyMLKEM768) Encapsulate() (sharedKey, ciphertext []byte) { -+ return mlkemEncapsulate(bcrypt.MLKEM_PARAMETER_SET_768, ek[:], ciphertextSizeMLKEM768) -+} -+ -+// DecapsulationKeyMLKEM1024 is the secret key used to decapsulate a shared key -+// from a ciphertext. It includes various precomputed values. -+type DecapsulationKeyMLKEM1024 [seedSizeMLKEM]byte -+ -+// GenerateKeyMLKEM1024 generates a new decapsulation key, drawing random bytes from -+// the default crypto/rand source. The decapsulation key must be kept secret. -+func GenerateKeyMLKEM1024() (DecapsulationKeyMLKEM1024, error) { -+ var dk DecapsulationKeyMLKEM1024 -+ if err := generateMLKEMKey(bcrypt.MLKEM_PARAMETER_SET_1024, dk[:]); err != nil { -+ return DecapsulationKeyMLKEM1024{}, err -+ } -+ return dk, nil -+} -+ -+// NewDecapsulationKeyMLKEM1024 constructs a decapsulation key from its serialized form. -+func NewDecapsulationKeyMLKEM1024(seed []byte) (DecapsulationKeyMLKEM1024, error) { -+ if len(seed) != seedSizeMLKEM { -+ return DecapsulationKeyMLKEM1024{}, errors.New("mlkem: invalid decapsulation key size") -+ } -+ -+ var dk DecapsulationKeyMLKEM1024 -+ copy(dk[:], seed) -+ return dk, nil -+} -+ -+// Bytes returns the decapsulation key in its serialized form. -+// -+// The decapsulation key must be kept secret. -+func (dk DecapsulationKeyMLKEM1024) Bytes() []byte { -+ return dk[:] -+} -+ -+// Decapsulate generates a shared key from a ciphertext and a decapsulation -+// key. If the ciphertext is not valid, Decapsulate returns an error. -+// -+// The shared key must be kept secret. -+func (dk DecapsulationKeyMLKEM1024) Decapsulate(ciphertext []byte) (sharedKey []byte, err error) { -+ return mlkemDecapsulate(bcrypt.MLKEM_PARAMETER_SET_1024, dk[:], ciphertext, ciphertextSizeMLKEM1024) -+} -+ -+// EncapsulationKey returns the public encapsulation key necessary to produce -+// ciphertexts. -+func (dk DecapsulationKeyMLKEM1024) EncapsulationKey() EncapsulationKeyMLKEM1024 { -+ var ek EncapsulationKeyMLKEM1024 -+ mlkemEncapsulationKey(bcrypt.MLKEM_PARAMETER_SET_1024, dk[:], ek[:]) -+ return ek -+} -+ -+// An EncapsulationKeyMLKEM1024 is the public key used to produce ciphertexts to be -+// decapsulated by the corresponding DecapsulationKeyMLKEM1024. -+type EncapsulationKeyMLKEM1024 [encapsulationKeySizeMLKEM1024]byte -+ -+// NewEncapsulationKeyMLKEM1024 parses an encapsulation key from its encoded form. If -+// the encapsulation key is not valid, NewEncapsulationKeyMLKEM1024 returns an error. -+func NewEncapsulationKeyMLKEM1024(encapsulationKey []byte) (EncapsulationKeyMLKEM1024, error) { -+ if len(encapsulationKey) != encapsulationKeySizeMLKEM1024 { -+ return EncapsulationKeyMLKEM1024{}, errors.New("mlkem: invalid encapsulation key size") -+ } -+ -+ var ek EncapsulationKeyMLKEM1024 -+ copy(ek[:], encapsulationKey) -+ return ek, nil -+} -+ -+// Bytes returns the encapsulation key as a byte slice. -+func (ek EncapsulationKeyMLKEM1024) Bytes() []byte { -+ return ek[:] -+} -+ -+// Encapsulate generates a shared key and an associated ciphertext from an -+// encapsulation key, drawing random bytes from the default crypto/rand source. -+// -+// The shared key must be kept secret. -+func (ek EncapsulationKeyMLKEM1024) Encapsulate() (sharedKey, ciphertext []byte) { -+ return mlkemEncapsulate(bcrypt.MLKEM_PARAMETER_SET_1024, ek[:], ciphertextSizeMLKEM1024) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/pbkdf2.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/pbkdf2.go -new file mode 100644 -index 00000000000000..cb9dba21416c6d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/pbkdf2.go -@@ -0,0 +1,70 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "hash" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+func loadPBKDF2() (bcrypt.ALG_HANDLE, error) { -+ return loadOrStoreAlg(bcrypt.PBKDF2_ALGORITHM, bcrypt.ALG_NONE_FLAG, "", func(h bcrypt.ALG_HANDLE) (bcrypt.ALG_HANDLE, error) { -+ return h, nil -+ }) -+} -+ -+func PBKDF2[H hash.Hash](password, salt []byte, iter, keyLen int, fh func() H) ([]byte, error) { -+ ch := fh() -+ hashID := hashToID(ch) -+ if hashID == "" { -+ return nil, errors.New("cng: unsupported hash function") -+ } -+ alg, err := loadPBKDF2() -+ if err != nil { -+ return nil, err -+ } -+ var kh bcrypt.KEY_HANDLE -+ if err := bcrypt.GenerateSymmetricKey(alg, &kh, nil, password, 0); err != nil { -+ return nil, err -+ } -+ defer bcrypt.DestroyKey(kh) -+ u16HashID := utf16FromString(hashID) -+ buffers := make([]bcrypt.Buffer, 0, 3) -+ buffers = append(buffers, -+ bcrypt.Buffer{ -+ Type: bcrypt.KDF_ITERATION_COUNT, -+ Data: uintptr(unsafe.Pointer(&iter)), -+ Length: 8, -+ }, -+ bcrypt.Buffer{ -+ Type: bcrypt.KDF_HASH_ALGORITHM, -+ Data: uintptr(unsafe.Pointer(&u16HashID[0])), -+ Length: uint32(len(u16HashID) * 2), -+ }) -+ if len(salt) > 0 { -+ // The salt is optional. -+ buffers = append(buffers, bcrypt.Buffer{ -+ Type: bcrypt.KDF_SALT, -+ Data: uintptr(unsafe.Pointer(&salt[0])), -+ Length: uint32(len(salt)), -+ }) -+ } -+ params := &bcrypt.BufferDesc{ -+ Count: uint32(len(buffers)), -+ Buffers: &buffers[0], -+ } -+ out := make([]byte, keyLen) -+ var size uint32 -+ err = bcrypt.KeyDerivation(kh, params, out, &size, 0) -+ if err != nil { -+ return nil, err -+ } -+ return out[:size], nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rand.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rand.go -new file mode 100644 -index 00000000000000..cdd845ab5bea98 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rand.go -@@ -0,0 +1,28 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+type randReader int -+ -+func (randReader) Read(b []byte) (int, error) { -+ if len(b) == 0 { -+ return 0, nil -+ } -+ n := len32(b) -+ const flags = bcrypt.USE_SYSTEM_PREFERRED_RNG -+ err := bcrypt.GenRandom(0, b[:n], flags) -+ if err != nil { -+ return 0, err -+ } -+ return n, nil -+} -+ -+const RandReader = randReader(0) -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rc4.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rc4.go -new file mode 100644 -index 00000000000000..f484a3e2211e04 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rc4.go -@@ -0,0 +1,65 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+ "github.com/microsoft/go-crypto-winnative/internal/subtle" -+) -+ -+// A RC4Cipher is an instance of RC4 using a particular key. -+type RC4Cipher struct { -+ kh bcrypt.KEY_HANDLE -+} -+ -+// NewRC4Cipher creates and returns a new Cipher. -+func NewRC4Cipher(key []byte) (*RC4Cipher, error) { -+ kh, err := newCipherHandle(bcrypt.RC4_ALGORITHM, "", key) -+ if err != nil { -+ return nil, err -+ } -+ c := &RC4Cipher{kh: kh} -+ runtime.SetFinalizer(c, (*RC4Cipher).finalize) -+ return c, nil -+} -+ -+func (c *RC4Cipher) finalize() { -+ if c.kh != 0 { -+ bcrypt.DestroyKey(c.kh) -+ } -+} -+ -+// Reset zeros the key data and makes the Cipher unusable. -+func (c *RC4Cipher) Reset() { -+ bcrypt.DestroyKey(c.kh) -+ c.kh = 0 -+} -+ -+// XORKeyStream sets dst to the result of XORing src with the key stream. -+// Dst and src must overlap entirely or not at all. -+func (c *RC4Cipher) XORKeyStream(dst, src []byte) { -+ if c.kh == 0 || len(src) == 0 { -+ return -+ } -+ // rc4.Cipher.XORKeyStream throws an out of bounds panic if -+ // dst is smaller than src. Replicate the same behavior here. -+ _ = dst[len(src)-1] -+ -+ if subtle.InexactOverlap(dst[:len(src)], src) { -+ panic("crypto/rc4: invalid buffer overlap") -+ } -+ var outLen uint32 -+ if err := bcrypt.Encrypt(c.kh, src, nil, nil, dst, &outLen, 0); err != nil { -+ panic("crypto/rc4: encryption failed: " + err.Error()) -+ } -+ if int(outLen) != len(src) { -+ panic("crypto/rc4: src not fully XORed") -+ } -+ runtime.KeepAlive(c) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rsa.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rsa.go -new file mode 100644 -index 00000000000000..42f995a480e0fe ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/rsa.go -@@ -0,0 +1,404 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "crypto" -+ "errors" -+ "hash" -+ "runtime" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+type rsaAlgorithm struct { -+ handle bcrypt.ALG_HANDLE -+ allowedKeyLengths bcrypt.KEY_LENGTHS_STRUCT -+} -+ -+func loadRsa() (rsaAlgorithm, error) { -+ return loadOrStoreAlg(bcrypt.RSA_ALGORITHM, bcrypt.ALG_NONE_FLAG, "", func(h bcrypt.ALG_HANDLE) (rsaAlgorithm, error) { -+ lengths, err := getKeyLengths(bcrypt.HANDLE(h)) -+ if err != nil { -+ return rsaAlgorithm{}, err -+ } -+ return rsaAlgorithm{h, lengths}, nil -+ }) -+} -+ -+func GenerateKeyRSA(bits int) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ bad := func(e error) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ return nil, nil, nil, nil, nil, nil, nil, nil, e -+ } -+ h, err := loadRsa() -+ if err != nil { -+ return bad(err) -+ } -+ if !keyIsAllowed(h.allowedKeyLengths, uint32(bits)) { -+ return bad(errors.New("crypto/rsa: invalid key size")) -+ } -+ var hkey bcrypt.KEY_HANDLE -+ err = bcrypt.GenerateKeyPair(h.handle, &hkey, uint32(bits), 0) -+ if err != nil { -+ return bad(err) -+ } -+ defer bcrypt.DestroyKey(hkey) -+ // The key cannot be used until BcryptFinalizeKeyPair has been called. -+ err = bcrypt.FinalizeKeyPair(hkey, 0) -+ if err != nil { -+ return bad(err) -+ } -+ -+ hdr, data, err := exportRSAKey(hkey, true) -+ if err != nil { -+ return bad(err) -+ } -+ if hdr.Magic != bcrypt.RSAFULLPRIVATE_MAGIC || hdr.BitLength != uint32(bits) { -+ return bad(errors.New("crypto/rsa: exported key is corrupted")) -+ } -+ consumeBigInt := func(size uint32) BigInt { -+ b := data[:size] -+ data = data[size:] -+ return b -+ } -+ E = consumeBigInt(hdr.PublicExpSize) -+ N = consumeBigInt(hdr.ModulusSize) -+ P = consumeBigInt(hdr.Prime1Size) -+ Q = consumeBigInt(hdr.Prime2Size) -+ Dp = consumeBigInt(hdr.Prime1Size) -+ Dq = consumeBigInt(hdr.Prime2Size) -+ Qinv = consumeBigInt(hdr.Prime1Size) -+ D = consumeBigInt(hdr.ModulusSize) -+ return -+} -+ -+type PublicKeyRSA struct { -+ hkey bcrypt.KEY_HANDLE -+ bits uint32 -+} -+ -+func NewPublicKeyRSA(N, E BigInt) (*PublicKeyRSA, error) { -+ h, err := loadRsa() -+ if err != nil { -+ return nil, err -+ } -+ if !keyIsAllowed(h.allowedKeyLengths, uint32(len(N)*8)) { -+ return nil, errors.New("crypto/rsa: invalid key size") -+ } -+ hkey, err := importRSAKey(h.handle, N, E, nil, nil, nil, nil, nil, nil) -+ if err != nil { -+ return nil, err -+ } -+ k := &PublicKeyRSA{hkey, uint32(N.bitLen())} -+ runtime.SetFinalizer(k, (*PublicKeyRSA).finalize) -+ return k, nil -+} -+ -+func (k *PublicKeyRSA) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+type PrivateKeyRSA struct { -+ hkey bcrypt.KEY_HANDLE -+ bits uint32 -+} -+ -+func (k *PrivateKeyRSA) finalize() { -+ bcrypt.DestroyKey(k.hkey) -+} -+ -+func NewPrivateKeyRSA(N, E, D, P, Q, Dp, Dq, Qinv BigInt) (*PrivateKeyRSA, error) { -+ h, err := loadRsa() -+ if err != nil { -+ return nil, err -+ } -+ if !keyIsAllowed(h.allowedKeyLengths, uint32(len(N)*8)) { -+ return nil, errors.New("crypto/rsa: invalid key size") -+ } -+ hkey, err := importRSAKey(h.handle, N, E, D, P, Q, Dp, Dq, Qinv) -+ if err != nil { -+ return nil, err -+ } -+ k := &PrivateKeyRSA{hkey, uint32(N.bitLen())} -+ runtime.SetFinalizer(k, (*PrivateKeyRSA).finalize) -+ return k, nil -+} -+ -+func importRSAKey(h bcrypt.ALG_HANDLE, N, E, D, P, Q, Dp, Dq, Qinv BigInt) (bcrypt.KEY_HANDLE, error) { -+ blob, err := encodeRSAKey(N, E, D, P, Q, Dp, Dq, Qinv) -+ if err != nil { -+ return 0, err -+ } -+ var kind string -+ if D == nil { -+ kind = bcrypt.RSAPUBLIC_KEY_BLOB -+ } else { -+ kind = bcrypt.RSAFULLPRIVATE_BLOB -+ } -+ var hkey bcrypt.KEY_HANDLE -+ err = bcrypt.ImportKeyPair(h, 0, utf16PtrFromString(kind), &hkey, blob, 0) -+ if err != nil { -+ return 0, err -+ } -+ return hkey, nil -+} -+ -+func encodeRSAKey(N, E, D, P, Q, Dp, Dq, Qinv BigInt) ([]byte, error) { -+ hdr := bcrypt.RSAKEY_BLOB{ -+ BitLength: uint32(len(N) * 8), -+ PublicExpSize: uint32(len(E)), -+ ModulusSize: uint32(len(N)), -+ } -+ var blob []byte -+ if D == nil { -+ hdr.Magic = bcrypt.RSAPUBLIC_MAGIC -+ blob = make([]byte, sizeOfRSABlobHeader+hdr.PublicExpSize+hdr.ModulusSize) -+ } else { -+ if P == nil || Q == nil { -+ // This case can happen when the key has been generated with more than 2 primes. -+ // CNG only supports 2-prime keys. -+ return nil, errors.New("crypto/rsa: unsupported private key") -+ } -+ hdr.Magic = bcrypt.RSAFULLPRIVATE_MAGIC -+ hdr.Prime1Size = uint32(len(P)) -+ hdr.Prime2Size = uint32(len(Q)) -+ blob = make([]byte, sizeOfRSABlobHeader+hdr.PublicExpSize+hdr.ModulusSize*2+hdr.Prime1Size*3+hdr.Prime2Size*2) -+ } -+ copy(blob, (*(*[sizeOfRSABlobHeader]byte)(unsafe.Pointer(&hdr)))[:]) -+ data := blob[sizeOfRSABlobHeader:] -+ err := encodeBigInt(data, []sizedBigInt{ -+ {E, hdr.PublicExpSize}, {N, hdr.ModulusSize}, -+ {P, hdr.Prime1Size}, {Q, hdr.Prime2Size}, -+ {Dp, hdr.Prime1Size}, {Dq, hdr.Prime2Size}, -+ {Qinv, hdr.Prime1Size}, {D, hdr.ModulusSize}, -+ }) -+ if err != nil { -+ return nil, err -+ } -+ return blob, nil -+} -+ -+func DecryptRSAOAEP(h hash.Hash, priv *PrivateKeyRSA, ciphertext, label []byte) ([]byte, error) { -+ defer runtime.KeepAlive(priv) -+ return rsaOAEP(h, priv.hkey, ciphertext, label, false) -+} -+ -+func EncryptRSAOAEP(h hash.Hash, pub *PublicKeyRSA, msg, label []byte) ([]byte, error) { -+ defer runtime.KeepAlive(pub) -+ return rsaOAEP(h, pub.hkey, msg, label, true) -+} -+ -+func DecryptRSAPKCS1(priv *PrivateKeyRSA, ciphertext []byte) ([]byte, error) { -+ defer runtime.KeepAlive(priv) -+ return rsaCrypt(priv.hkey, nil, ciphertext, bcrypt.PAD_PKCS1, false) -+} -+ -+func EncryptRSAPKCS1(pub *PublicKeyRSA, msg []byte) ([]byte, error) { -+ defer runtime.KeepAlive(pub) -+ return rsaCrypt(pub.hkey, nil, msg, bcrypt.PAD_PKCS1, true) -+} -+ -+func DecryptRSANoPadding(priv *PrivateKeyRSA, ciphertext []byte) ([]byte, error) { -+ defer runtime.KeepAlive(priv) -+ return rsaCrypt(priv.hkey, nil, ciphertext, bcrypt.PAD_NONE, false) -+ -+} -+ -+func EncryptRSANoPadding(pub *PublicKeyRSA, msg []byte) ([]byte, error) { -+ defer runtime.KeepAlive(pub) -+ return rsaCrypt(pub.hkey, nil, msg, bcrypt.PAD_NONE, true) -+} -+ -+func SignRSAPSS(priv *PrivateKeyRSA, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ defer runtime.KeepAlive(priv) -+ info, err := newPSS_PADDING_INFO(h, priv.bits, saltLen, true) -+ if err != nil { -+ return nil, err -+ } -+ return keySign(priv.hkey, unsafe.Pointer(&info), hashed, bcrypt.PAD_PSS) -+} -+ -+func VerifyRSAPSS(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ defer runtime.KeepAlive(pub) -+ info, err := newPSS_PADDING_INFO(h, pub.bits, saltLen, false) -+ if err != nil { -+ return err -+ } -+ return keyVerify(pub.hkey, unsafe.Pointer(&info), hashed, sig, bcrypt.PAD_PSS) -+} -+ -+// SignRSAPKCS1v15 calculates the signature of hashed using -+// RSASSA-PKCS1-V1_5-SIGN from RSA PKCS #1 v1.5. Note that hashed must -+// be the result of hashing the input message using the given hash -+// function. If hash is zero, hashed is signed directly. -+func SignRSAPKCS1v15(priv *PrivateKeyRSA, hash crypto.Hash, hashed []byte) ([]byte, error) { -+ defer runtime.KeepAlive(priv) -+ if hash != crypto.Hash(0) { -+ if len(hashed) != hash.Size() { -+ return nil, errors.New("crypto/rsa: input must be hashed message") -+ } -+ } -+ info, err := newPKCS1_PADDING_INFO(hash) -+ if err != nil { -+ return nil, err -+ } -+ return keySign(priv.hkey, unsafe.Pointer(&info), hashed, bcrypt.PAD_PKCS1) -+} -+ -+// VerifyPKCS1v15 verifies an RSA PKCS #1 v1.5 signature. -+// hashed is the result of hashing the input message using the given hash -+// function and sig is the signature. A valid signature is indicated by -+// returning a nil error. If hash is zero then hashed is used directly. -+func VerifyRSAPKCS1v15(pub *PublicKeyRSA, hash crypto.Hash, hashed, sig []byte) error { -+ defer runtime.KeepAlive(pub) -+ if hash != crypto.Hash(0) { -+ if len(hashed) != hash.Size() { -+ return errors.New("crypto/rsa: input must be hashed message") -+ } -+ } -+ info, err := newPKCS1_PADDING_INFO(hash) -+ if err != nil { -+ return err -+ } -+ return keyVerify(pub.hkey, unsafe.Pointer(&info), hashed, sig, bcrypt.PAD_PKCS1) -+} -+ -+func rsaCrypt(pkey bcrypt.KEY_HANDLE, info unsafe.Pointer, in []byte, flags bcrypt.PadMode, encrypt bool) ([]byte, error) { -+ var size uint32 -+ var err error -+ if encrypt { -+ err = bcrypt.Encrypt(pkey, in, info, nil, nil, &size, flags) -+ } else { -+ err = bcrypt.Decrypt(pkey, in, info, nil, nil, &size, flags) -+ } -+ if err != nil { -+ return nil, err -+ } -+ out := make([]byte, size) -+ if encrypt { -+ err = bcrypt.Encrypt(pkey, in, info, nil, out, &size, flags) -+ } else { -+ err = bcrypt.Decrypt(pkey, in, info, nil, out, &size, flags) -+ } -+ if err != nil { -+ return nil, err -+ } -+ return out[:size], nil -+} -+ -+func rsaOAEP(h hash.Hash, pkey bcrypt.KEY_HANDLE, in, label []byte, encrypt bool) ([]byte, error) { -+ hashID := hashToID(h) -+ if hashID == "" { -+ return nil, errors.New("crypto/rsa: unsupported hash function") -+ } -+ info := bcrypt.OAEP_PADDING_INFO{ -+ AlgId: utf16PtrFromString(hashID), -+ LabelSize: uint32(len(label)), -+ } -+ if len(label) > 0 { -+ info.Label = &label[0] -+ } -+ return rsaCrypt(pkey, unsafe.Pointer(&info), in, bcrypt.PAD_OAEP, encrypt) -+} -+ -+func keySign(pkey bcrypt.KEY_HANDLE, info unsafe.Pointer, hashed []byte, flags bcrypt.PadMode) ([]byte, error) { -+ var size uint32 -+ err := bcrypt.SignHash(pkey, info, hashed, nil, &size, flags) -+ if err != nil { -+ return nil, err -+ } -+ out := make([]byte, size) -+ err = bcrypt.SignHash(pkey, info, hashed, out, &size, flags) -+ if err != nil { -+ return nil, err -+ } -+ return out[:size], nil -+} -+ -+func keyVerify(pkey bcrypt.KEY_HANDLE, info unsafe.Pointer, hashed, sig []byte, flags bcrypt.PadMode) error { -+ return bcrypt.VerifySignature(pkey, info, hashed, sig, flags) -+} -+ -+func newPSS_PADDING_INFO(h crypto.Hash, sizeBits uint32, saltLen int, sign bool) (info bcrypt.PSS_PADDING_INFO, err error) { -+ hashID := cryptoHashToID(h) -+ if hashID == "" { -+ return info, errors.New("crypto/rsa: unsupported hash function") -+ } -+ info.AlgId = utf16PtrFromString(hashID) -+ -+ // A salt length of -1 and 0 are valid Go sentinel values. -+ if saltLen <= -2 { -+ return info, errors.New("crypto/rsa: invalid PSS salt length") -+ } -+ // CNG does not support salt length special cases like Go crypto does, -+ // so we do a best-effort to resolve them. -+ switch saltLen { -+ case -1: // rsa.PSSSaltLengthEqualsHash -+ info.Salt = uint32(h.Size()) -+ case 0: // rsa.PSSSaltLengthAuto -+ if sign { -+ // Algorithm taken from RFC 3447 Section 9.1.1, which is also implemented by Go at -+ // https://github.com/golang/go/blob/54182ff54a687272dd7632c3a963e036ce03cb7c/src/crypto/rsa/pss.go#L288. -+ emLen := (sizeBits - 1 + 7) / 8 -+ hLen := uint32(h.Size()) -+ info.Salt = emLen - hLen - 2 -+ } else { -+ // Go auto-detects the salt length from the signature structure when verifying. -+ // The auto-detection logic is deep in the verification process, -+ // we can't replicate it without exhaustive validation. -+ err = errors.New("crypto/rsa: rsa.PSSSaltLengthAuto not supported") -+ } -+ default: -+ info.Salt = uint32(saltLen) -+ } -+ return -+} -+ -+func newPKCS1_PADDING_INFO(h crypto.Hash) (bcrypt.PKCS1_PADDING_INFO, error) { -+ var alg *uint16 -+ switch h { -+ case 0: -+ // Unpadded RSA signatures, no need to set the hash algorithm. -+ case crypto.MD5SHA1: -+ // The MD5SHA1 hash is not supported by CNG, but the AlgId field -+ // is only used to pad the signature with the hash OID, and -+ // PKCS1 has historically used a null OID for MD5SHA1. -+ // This is a special case for compatibility with TLS 1.0/1.1. -+ default: -+ hashID := cryptoHashToID(h) -+ if hashID == "" { -+ return bcrypt.PKCS1_PADDING_INFO{}, errors.New("crypto/rsa: unsupported hash function") -+ } -+ alg = utf16PtrFromString(hashID) -+ } -+ return bcrypt.PKCS1_PADDING_INFO{AlgId: alg}, nil -+} -+ -+func cryptoHashToID(ch crypto.Hash) string { -+ switch ch { -+ case crypto.MD4: -+ return bcrypt.MD4_ALGORITHM -+ case crypto.MD5: -+ return bcrypt.MD5_ALGORITHM -+ case crypto.SHA1: -+ return bcrypt.SHA1_ALGORITHM -+ case crypto.SHA256: -+ return bcrypt.SHA256_ALGORITHM -+ case crypto.SHA384: -+ return bcrypt.SHA384_ALGORITHM -+ case crypto.SHA512: -+ return bcrypt.SHA512_ALGORITHM -+ case crypto.SHA3_256: -+ return bcrypt.SHA3_256_ALGORITHM -+ case crypto.SHA3_384: -+ return bcrypt.SHA3_384_ALGORITHM -+ case crypto.SHA3_512: -+ return bcrypt.SHA3_512_ALGORITHM -+ } -+ return "" -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/sha3.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/sha3.go -new file mode 100644 -index 00000000000000..c26c4bcf0d1afe ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/sha3.go -@@ -0,0 +1,203 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "runtime" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+// SumSHA3_256 returns the SHA3-256 checksum of the data. -+func SumSHA3_256(p []byte) (sum [32]byte) { -+ if err := hashOneShot(bcrypt.SHA3_256_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA3_256 failed") -+ } -+ return -+} -+ -+// SumSHA3_384 returns the SHA3-384 checksum of the data. -+func SumSHA3_384(p []byte) (sum [48]byte) { -+ if err := hashOneShot(bcrypt.SHA3_384_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA3_384 failed") -+ } -+ return -+} -+ -+// SumSHA3_512 returns the SHA3-512 checksum of the data. -+func SumSHA3_512(p []byte) (sum [64]byte) { -+ if err := hashOneShot(bcrypt.SHA3_512_ALGORITHM, p, sum[:]); err != nil { -+ panic("bcrypt: SHA3_512 failed") -+ } -+ return -+} -+ -+// SumSHAKE128 applies the SHAKE128 extendable output function to data and -+// returns an output of the given length in bytes. -+func SumSHAKE128(data []byte, length int) []byte { -+ out := make([]byte, length) -+ if err := hashOneShot(bcrypt.CSHAKE128_ALGORITHM, data, out); err != nil { -+ panic("bcrypt: CSHAKE128_ALGORITHM failed") -+ } -+ return out -+} -+ -+// SumSHAKE256 applies the SHAKE256 extendable output function to data and -+// returns an output of the given length in bytes. -+func SumSHAKE256(data []byte, length int) []byte { -+ out := make([]byte, length) -+ if err := hashOneShot(bcrypt.CSHAKE256_ALGORITHM, data, out); err != nil { -+ panic("bcrypt: CSHAKE256_ALGORITHM failed") -+ } -+ return out -+} -+ -+// SupportsSHAKE returns true if the SHAKE and CSHAKE extendable output functions -+// with the given securityBits are supported. -+func SupportsSHAKE(securityBits int) bool { -+ var id string -+ switch securityBits { -+ case 128: -+ id = bcrypt.CSHAKE128_ALGORITHM -+ case 256: -+ id = bcrypt.CSHAKE256_ALGORITHM -+ default: -+ return false -+ } -+ _, err := loadHash(id, bcrypt.ALG_NONE_FLAG) -+ return err == nil -+} -+ -+// NewSHA3_256 returns a new SHA3-256 hash. -+func NewSHA3_256() *Hash { -+ return newHash(bcrypt.SHA3_256_ALGORITHM) -+} -+ -+// NewSHA3_384 returns a new SHA3-384 hash. -+func NewSHA3_384() *Hash { -+ return newHash(bcrypt.SHA3_384_ALGORITHM) -+} -+ -+// NewSHA3_512 returns a new SHA3-512 hash. -+func NewSHA3_512() *Hash { -+ return newHash(bcrypt.SHA3_512_ALGORITHM) -+} -+ -+// SHAKE is an instance of a SHAKE extendable output function. -+type SHAKE struct { -+ ctx bcrypt.HASH_HANDLE -+ blockSize uint32 -+} -+ -+func newShake(id string, N, S []byte) *SHAKE { -+ alg := mustLoadHash(id, bcrypt.ALG_NONE_FLAG) -+ h := &SHAKE{blockSize: alg.blockSize} -+ err := bcrypt.CreateHash(alg.handle, &h.ctx, nil, nil, bcrypt.HASH_REUSABLE_FLAG) -+ if err != nil { -+ panic(err) -+ } -+ if len(N) != 0 { -+ if err := bcrypt.SetProperty(bcrypt.HANDLE(h.ctx), utf16PtrFromString(bcrypt.FUNCTION_NAME_STRING), N, 0); err != nil { -+ panic(err) -+ } -+ } -+ if len(S) != 0 { -+ if err := bcrypt.SetProperty(bcrypt.HANDLE(h.ctx), utf16PtrFromString(bcrypt.CUSTOMIZATION_STRING), S, 0); err != nil { -+ panic(err) -+ } -+ } -+ runtime.SetFinalizer(h, (*SHAKE).finalize) -+ return h -+} -+ -+// NewSHAKE128 creates a new SHAKE128 XOF. -+func NewSHAKE128() *SHAKE { -+ return newShake(bcrypt.CSHAKE128_ALGORITHM, nil, nil) -+} -+ -+// NewSHAKE256 creates a new SHAKE256 XOF. -+func NewSHAKE256() *SHAKE { -+ return newShake(bcrypt.CSHAKE256_ALGORITHM, nil, nil) -+} -+ -+// NewCSHAKE128 creates a new cSHAKE128 XOF. -+// -+// N is used to define functions based on cSHAKE, it can be empty when plain -+// cSHAKE is desired. S is a customization byte string used for domain -+// separation. When N and S are both empty, this is equivalent to NewSHAKE128. -+func NewCSHAKE128(N, S []byte) *SHAKE { -+ return newShake(bcrypt.CSHAKE128_ALGORITHM, N, S) -+} -+ -+// NewCSHAKE256 creates a new cSHAKE256 XOF. -+// -+// N is used to define functions based on cSHAKE, it can be empty when plain -+// cSHAKE is desired. S is a customization byte string used for domain -+// separation. When N and S are both empty, this is equivalent to NewSHAKE256. -+func NewCSHAKE256(N, S []byte) *SHAKE { -+ return newShake(bcrypt.CSHAKE256_ALGORITHM, N, S) -+} -+ -+func (h *SHAKE) finalize() { -+ bcrypt.DestroyHash(h.ctx) -+} -+ -+// Write absorbs more data into the XOF's state. -+// -+// It panics if any output has already been read. -+func (s *SHAKE) Write(p []byte) (n int, err error) { -+ if len(p) == 0 { -+ return 0, nil -+ } -+ defer runtime.KeepAlive(s) -+ hashData(s.ctx, p) -+ return len(p), nil -+} -+ -+// Read squeezes more output from the XOF. -+// -+// Any call to Write after a call to Read will panic. -+func (s *SHAKE) Read(p []byte) (n int, err error) { -+ if len(p) == 0 { -+ return 0, nil -+ } -+ defer runtime.KeepAlive(s) -+ for n < len(p) && err == nil { -+ nn := len32(p[n:]) -+ err = bcrypt.FinishHash(s.ctx, p[n:n+nn], bcrypt.HASH_DONT_RESET_FLAG) -+ n += nn -+ } -+ if err != nil { -+ panic(err) -+ } -+ return len(p), nil -+} -+ -+// Reset resets the XOF to its initial state. -+func (s *SHAKE) Reset() { -+ defer runtime.KeepAlive(s) -+ // SHAKE has a variable size, CNG doesn't change the size of the hash -+ // when resetting, so we can pass a small value here. -+ hashReset(s.ctx, 1) -+} -+ -+// BlockSize returns the rate of the XOF. -+func (s *SHAKE) BlockSize() int { -+ return int(s.blockSize) -+} -+ -+func (s *SHAKE) MarshalBinary() ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (s *SHAKE) AppendBinary(b []byte) ([]byte, error) { -+ return nil, errMarshallUnsupported{} -+} -+ -+func (s *SHAKE) UnmarshalBinary(data []byte) error { -+ return errMarshallUnsupported{} -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/cng/tls1prf.go b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/tls1prf.go -new file mode 100644 -index 00000000000000..3418bf62f22d4d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/cng/tls1prf.go -@@ -0,0 +1,91 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:build windows -+// +build windows -+ -+package cng -+ -+import ( -+ "errors" -+ "hash" -+ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/internal/bcrypt" -+) -+ -+func loadTLS1PRF(id string) (bcrypt.ALG_HANDLE, error) { -+ return loadOrStoreAlg(id, bcrypt.ALG_NONE_FLAG, "", func(h bcrypt.ALG_HANDLE) (bcrypt.ALG_HANDLE, error) { -+ return h, nil -+ }) -+} -+ -+// TLS1PRF implements the TLS 1.0/1.1 pseudo-random function if fh is nil, -+// else it implements the TLS 1.2 pseudo-random function. -+// To use TLS 1.0/1.1 mode with nil fh, specify the type parameter explicitly, -+// for example TLS1PRF[hash.Hash](result, secret, label, seed, nil). -+// The pseudo-random number will be written to result and will be of length len(result). -+func TLS1PRF[H hash.Hash](result, secret, label, seed []byte, fh func() H) error { -+ // TLS 1.0/1.1 PRF uses MD5SHA1. -+ algID := bcrypt.TLS1_1_KDF_ALGORITHM -+ var hashID string -+ if fh != nil { -+ // If fh is specified, assume the caller wants to use TLS 1.2 PRF. -+ // TLS 1.0/1.1 PRF doesn't allow specifying the hash function. -+ if hashID = hashToID(fh()); hashID == "" { -+ return errors.New("cng: unsupported hash function") -+ } -+ algID = bcrypt.TLS1_2_KDF_ALGORITHM -+ } -+ -+ alg, err := loadTLS1PRF(algID) -+ if err != nil { -+ return err -+ } -+ var kh bcrypt.KEY_HANDLE -+ if err := bcrypt.GenerateSymmetricKey(alg, &kh, nil, secret, 0); err != nil { -+ return err -+ } -+ defer bcrypt.DestroyKey(kh) -+ -+ buffers := make([]bcrypt.Buffer, 0, 3) -+ if len(label) > 0 { -+ buffers = append(buffers, bcrypt.Buffer{ -+ Type: bcrypt.KDF_TLS_PRF_LABEL, -+ Data: uintptr(unsafe.Pointer(&label[0])), -+ Length: uint32(len(label)), -+ }) -+ } -+ if len(seed) > 0 { -+ buffers = append(buffers, bcrypt.Buffer{ -+ Type: bcrypt.KDF_TLS_PRF_SEED, -+ Data: uintptr(unsafe.Pointer(&seed[0])), -+ Length: uint32(len(seed)), -+ }) -+ } -+ if algID == bcrypt.TLS1_2_KDF_ALGORITHM { -+ u16HashID := utf16FromString(hashID) -+ buffers = append(buffers, bcrypt.Buffer{ -+ Type: bcrypt.KDF_HASH_ALGORITHM, -+ Data: uintptr(unsafe.Pointer(&u16HashID[0])), -+ Length: uint32(len(u16HashID) * 2), -+ }) -+ } -+ params := &bcrypt.BufferDesc{ -+ Count: uint32(len(buffers)), -+ Buffers: &buffers[0], -+ } -+ var size uint32 -+ err = bcrypt.KeyDerivation(kh, params, result, &size, 0) -+ if err != nil { -+ return err -+ } -+ // The Go standard library expects TLS1PRF to return the requested number of bytes, -+ // fail if it doesn't. While there is no known situation where this will happen, -+ // BCryptKeyDerivation handles multiple algorithms and there could be a subtle mismatch -+ // after more code changes in the future. -+ if size != uint32(len(result)) { -+ return errors.New("tls1-prf: derived less bytes than requested") -+ } -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/bcrypt_windows.go b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/bcrypt_windows.go -new file mode 100644 -index 00000000000000..7c24727f821191 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/bcrypt_windows.go -@@ -0,0 +1,434 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+//go:generate go run github.com/microsoft/go-crypto-winnative/cmd/mksyscall -output zsyscall_windows.go bcrypt_windows.go ntstatus_windows.go -+ -+// Package bcrypt implements interop with bcrypt.dll, a component of Windows CNG. -+// See https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/ -+// -+// Note: this package is not related to the bcrypt password hashing algorithm. -+package bcrypt -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+const ( -+ SHA1_ALGORITHM = "SHA1" -+ SHA256_ALGORITHM = "SHA256" -+ SHA384_ALGORITHM = "SHA384" -+ SHA512_ALGORITHM = "SHA512" -+ SHA3_256_ALGORITHM = "SHA3-256" -+ SHA3_384_ALGORITHM = "SHA3-384" -+ SHA3_512_ALGORITHM = "SHA3-512" -+ CSHAKE128_ALGORITHM = "CSHAKE128" -+ CSHAKE256_ALGORITHM = "CSHAKE256" -+ AES_ALGORITHM = "AES" -+ RC4_ALGORITHM = "RC4" -+ RSA_ALGORITHM = "RSA" -+ MD4_ALGORITHM = "MD4" -+ MD5_ALGORITHM = "MD5" -+ ECDSA_ALGORITHM = "ECDSA" -+ ECDH_ALGORITHM = "ECDH" -+ HKDF_ALGORITHM = "HKDF" -+ PBKDF2_ALGORITHM = "PBKDF2" -+ DES_ALGORITHM = "DES" -+ DES3_ALGORITHM = "3DES" // 3DES_ALGORITHM -+ TLS1_1_KDF_ALGORITHM = "TLS1_1_KDF" -+ TLS1_2_KDF_ALGORITHM = "TLS1_2_KDF" -+ DSA_ALGORITHM = "DSA" -+ MLDSA_ALGORITHM = "ML-DSA" -+ MLKEM_ALGORITHM = "ML-KEM" -+ -+ CHACHA20_POLY1305_ALGORITHM = "CHACHA20_POLY1305" -+) -+ -+const ( -+ ECC_CURVE_25519 = "curve25519" -+ ECC_CURVE_NISTP224 = "nistP224" -+ ECC_CURVE_NISTP256 = "nistP256" -+ ECC_CURVE_NISTP384 = "nistP384" -+ ECC_CURVE_NISTP521 = "nistP521" -+) -+ -+const ( -+ HASH_LENGTH = "HashDigestLength" -+ HASH_BLOCK_LENGTH = "HashBlockLength" -+ CHAINING_MODE = "ChainingMode" -+ CHAIN_MODE_ECB = "ChainingModeECB" -+ CHAIN_MODE_CBC = "ChainingModeCBC" -+ CHAIN_MODE_GCM = "ChainingModeGCM" -+ KEY_LENGTH = "KeyLength" -+ KEY_LENGTHS = "KeyLengths" -+ SIGNATURE_LENGTH = "SignatureLength" -+ BLOCK_LENGTH = "BlockLength" -+ ECC_CURVE_NAME = "ECCCurveName" -+ FUNCTION_NAME_STRING = "FunctionNameString" -+ CUSTOMIZATION_STRING = "CustomizationString" -+) -+ -+const ( -+ RSAPUBLIC_KEY_BLOB = "RSAPUBLICBLOB" -+ RSAFULLPRIVATE_BLOB = "RSAFULLPRIVATEBLOB" -+ ECCPUBLIC_BLOB = "ECCPUBLICBLOB" -+ ECCPRIVATE_BLOB = "ECCPRIVATEBLOB" -+ DSA_PUBLIC_BLOB = "DSAPUBLICBLOB" -+ DSA_PRIVATE_BLOB = "DSAPRIVATEBLOB" -+ PQDSA_PUBLIC_BLOB = "PQDSAPUBLICBLOB" -+ PQDSA_PRIVATE_BLOB = "PQDSAPRIVATEBLOB" -+ PQDSA_PRIVATE_SEED_BLOB = "PQDSAPRIVATESEEDBLOB" -+ MLKEM_PUBLIC_BLOB = "MLKEMPUBLICBLOB" -+ MLKEM_PRIVATE_SEED_BLOB = "MLKEMPRIVATESEEDBLOB" -+) -+ -+const ( -+ KDF_HKDF_INFO = 0x14 -+ HKDF_HASH_ALGORITHM = "HkdfHashAlgorithm" -+ HKDF_SALT_AND_FINALIZE = "HkdfSaltAndFinalize" -+ HKDF_PRK_AND_FINALIZE = "HkdfPrkAndFinalize" -+) -+ -+const ( -+ KDF_HASH_ALGORITHM = 0x0 -+ KDF_TLS_PRF_LABEL = 0x4 -+ KDF_TLS_PRF_SEED = 0x5 -+ KDF_TLS_PRF_PROTOCOL = 0x6 -+ KDF_ITERATION_COUNT = 0x10 -+ KDF_SALT = 0xF -+) -+ -+const ( -+ KEY_DATA_BLOB = "KeyDataBlob" -+ KEY_DATA_BLOB_MAGIC = 0x4d42444b -+ KEY_DATA_BLOB_VERSION1 = 1 -+) -+ -+type KEY_DATA_BLOB_HEADER struct { -+ Magic uint32 -+ Version uint32 -+ Length uint32 -+} -+ -+type Buffer struct { -+ Length uint32 -+ Type uint32 -+ Data uintptr -+} -+ -+type BufferDesc struct { -+ Version uint32 -+ Count uint32 // number of buffers -+ Buffers *Buffer -+} -+ -+const ( -+ USE_SYSTEM_PREFERRED_RNG = 0x00000002 -+) -+ -+const ( -+ HASH_DONT_RESET_FLAG = 0x00000001 -+ HASH_REUSABLE_FLAG = 0x00000020 -+) -+ -+const ( -+ KDF_RAW_SECRET = "TRUNCATE" -+) -+ -+const ( -+ DSA_PARAMETERS = "DSAParameters" -+) -+ -+const ( -+ // Post-quantum related properties and constants -+ PARAMETER_SET_NAME = "ParameterSetName" -+ MLDSA_PARAMETER_SET_44 = "44" -+ MLDSA_PARAMETER_SET_65 = "65" -+ MLDSA_PARAMETER_SET_87 = "87" -+ MLKEM_PARAMETER_SET_768 = "768" -+ MLKEM_PARAMETER_SET_1024 = "1024" -+) -+ -+type HASHALGORITHM_ENUM uint32 -+ -+const ( -+ DSA_HASH_ALGORITHM_SHA1 HASHALGORITHM_ENUM = iota -+ DSA_HASH_ALGORITHM_SHA256 -+ DSA_HASH_ALGORITHM_SHA512 -+) -+ -+type DSAFIPSVERSION_ENUM uint32 -+ -+const ( -+ DSA_FIPS186_2 DSAFIPSVERSION_ENUM = iota -+ DSA_FIPS186_3 -+) -+ -+type DSA_PARAMETER_HEADER struct { -+ Length uint32 -+ Magic KeyBlobMagicNumber -+ KeySize uint32 -+ Count [4]uint8 -+ Seed [20]uint8 -+ Q [20]uint8 -+} -+ -+type DSA_PARAMETER_HEADER_V2 struct { -+ Length uint32 -+ Magic KeyBlobMagicNumber -+ KeySize uint32 -+ HashAlgorithm HASHALGORITHM_ENUM -+ StandardVersion DSAFIPSVERSION_ENUM -+ SeedLength uint32 -+ GroupSize uint32 -+ Count [4]uint8 -+} -+ -+type PadMode uint32 -+ -+const ( -+ PAD_UNDEFINED PadMode = 0x0 -+ PAD_NONE PadMode = 0x1 -+ PAD_PKCS1 PadMode = 0x2 -+ PAD_OAEP PadMode = 0x4 -+ PAD_PSS PadMode = 0x8 -+ PAD_PQDSA PadMode = 0x20 -+ MLDSA_EXTERNAL_MU PadMode = 0x40 -+) -+ -+type AlgorithmProviderFlags uint32 -+ -+const ( -+ ALG_NONE_FLAG AlgorithmProviderFlags = 0x00000000 -+ ALG_HANDLE_HMAC_FLAG AlgorithmProviderFlags = 0x00000008 -+) -+ -+type KeyBlobMagicNumber uint32 -+ -+const ( -+ RSAPUBLIC_MAGIC KeyBlobMagicNumber = 0x31415352 -+ RSAFULLPRIVATE_MAGIC KeyBlobMagicNumber = 0x33415352 -+ -+ ECDSA_PUBLIC_GENERIC_MAGIC KeyBlobMagicNumber = 0x50444345 -+ ECDSA_PRIVATE_GENERIC_MAGIC KeyBlobMagicNumber = 0x56444345 -+ -+ ECDH_PUBLIC_GENERIC_MAGIC KeyBlobMagicNumber = 0x504B4345 -+ ECDH_PRIVATE_GENERIC_MAGIC KeyBlobMagicNumber = 0x564B4345 -+ -+ DSA_PARAMETERS_MAGIC KeyBlobMagicNumber = 0x4d505344 -+ DSA_PUBLIC_MAGIC KeyBlobMagicNumber = 0x42505344 -+ DSA_PRIVATE_MAGIC KeyBlobMagicNumber = 0x56505344 -+ -+ DSA_PARAMETERS_MAGIC_V2 KeyBlobMagicNumber = 0x324d5044 -+ DSA_PUBLIC_MAGIC_V2 KeyBlobMagicNumber = 0x32425044 -+ DSA_PRIVATE_MAGIC_V2 KeyBlobMagicNumber = 0x32565044 -+ -+ MLDSA_PUBLIC_MAGIC KeyBlobMagicNumber = 0x4B505344 -+ MLDSA_PRIVATE_MAGIC KeyBlobMagicNumber = 0x4B535344 -+ MLDSA_PRIVATE_SEED_MAGIC KeyBlobMagicNumber = 0x53535344 -+ -+ MLKEM_PUBLIC_MAGIC KeyBlobMagicNumber = 0x504B4C4D -+ MLKEM_PRIVATE_MAGIC KeyBlobMagicNumber = 0x524B4C4D -+ MLKEM_PRIVATE_SEED_MAGIC KeyBlobMagicNumber = 0x534B4C4D -+) -+ -+type ( -+ HANDLE syscall.Handle -+ ALG_HANDLE HANDLE -+ HASH_HANDLE HANDLE -+ KEY_HANDLE HANDLE -+ SECRET_HANDLE HANDLE -+) -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_key_lengths_struct -+type KEY_LENGTHS_STRUCT struct { -+ MinLength uint32 -+ MaxLength uint32 -+ Increment uint32 -+} -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_authenticated_cipher_mode_info -+type AUTHENTICATED_CIPHER_MODE_INFO struct { -+ Size uint32 -+ InfoVersion uint32 -+ Nonce *byte -+ NonceSize uint32 -+ AuthData *byte -+ AuthDataSize uint32 -+ Tag *byte -+ TagSize uint32 -+ MacContext *byte -+ MacContextSize uint32 -+ AADSize uint32 -+ DataSize uint64 -+ Flags uint32 -+} -+ -+func NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, tag []byte) *AUTHENTICATED_CIPHER_MODE_INFO { -+ var aad *byte -+ if len(additionalData) > 0 { -+ aad = &additionalData[0] -+ } -+ info := AUTHENTICATED_CIPHER_MODE_INFO{ -+ InfoVersion: 1, -+ Nonce: &nonce[0], -+ NonceSize: uint32(len(nonce)), -+ AuthData: aad, -+ AuthDataSize: uint32(len(additionalData)), -+ Tag: &tag[0], -+ TagSize: uint32(len(tag)), -+ } -+ info.Size = uint32(unsafe.Sizeof(info)) -+ return &info -+} -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_oaep_padding_info -+type OAEP_PADDING_INFO struct { -+ AlgId *uint16 -+ Label *byte -+ LabelSize uint32 -+} -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_pkcs1_padding_info -+type PKCS1_PADDING_INFO struct { -+ AlgId *uint16 -+} -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_pss_padding_info -+type PSS_PADDING_INFO struct { -+ AlgId *uint16 -+ Salt uint32 -+} -+ -+// https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptsignhash -+type PQDSA_PADDING_INFO struct { -+ Context *byte -+ ContextSize uint32 -+ PrehashAlgID *uint16 -+} -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_rsakey_blob -+type RSAKEY_BLOB struct { -+ Magic KeyBlobMagicNumber -+ BitLength uint32 -+ PublicExpSize uint32 -+ ModulusSize uint32 -+ Prime1Size uint32 -+ Prime2Size uint32 -+} -+ -+// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_ecckey_blob -+type ECCKEY_BLOB struct { -+ Magic KeyBlobMagicNumber -+ KeySize uint32 -+} -+ -+// https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_dsa_key_blob -+type DSA_KEY_BLOB struct { -+ Magic KeyBlobMagicNumber -+ KeySize uint32 -+ Count [4]uint8 -+ Seed [20]uint8 -+ Q [20]uint8 -+} -+ -+// https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_dsa_key_blob_v2 -+type DSA_KEY_BLOB_V2 struct { -+ Magic KeyBlobMagicNumber -+ KeySize uint32 -+ HashAlgorithm HASHALGORITHM_ENUM -+ StandardVersion DSAFIPSVERSION_ENUM -+ SeedLength uint32 -+ GroupSize uint32 -+ Count [4]uint8 -+} -+ -+// https://learn.microsoft.com/en-us/windows/win32/seccng/cng-mlkem -+type MLKEM_KEY_BLOB struct { -+ Magic KeyBlobMagicNumber -+} -+ -+func Encrypt(hKey KEY_HANDLE, plaintext []byte, pPaddingInfo unsafe.Pointer, pbIV []byte, ciphertext []byte, pcbResult *uint32, dwFlags PadMode) (ntstatus error) { -+ var pInput *byte -+ if len(plaintext) > 0 { -+ pInput = &plaintext[0] -+ } else { -+ // BCryptEncrypt does not support nil plaintext. -+ // Allocate a zero byte here just to make CNG happy. -+ // It won't be encrypted anyway because the plaintext length is zero. -+ pInput = new(byte) -+ } -+ return _Encrypt(hKey, pInput, uint32(len(plaintext)), pPaddingInfo, pbIV, ciphertext, pcbResult, dwFlags) -+} -+ -+func Decrypt(hKey KEY_HANDLE, ciphertext []byte, pPaddingInfo unsafe.Pointer, pbIV []byte, plaintext []byte, pcbResult *uint32, dwFlags PadMode) (ntstatus error) { -+ // Previous to Windows 2025, BCryptDescrypt did not validate the padding info when ciphertext and plaintext were both zero-length. -+ // To maintain compatibility with those versions, we allocate a zero byte when ciphertext is empty. -+ var pInput, pOutput *byte -+ if len(ciphertext) == 0 && len(plaintext) == 0 { -+ pOutput = new(byte) -+ pInput = pOutput -+ } else { -+ if len(plaintext) > 0 { -+ pOutput = &plaintext[0] -+ } -+ if len(ciphertext) > 0 { -+ pInput = &ciphertext[0] -+ } -+ } -+ return _Decrypt(hKey, pInput, uint32(len(ciphertext)), pPaddingInfo, pbIV, pOutput, uint32(len(plaintext)), pcbResult, dwFlags) -+} -+ -+//sys GetFipsAlgorithmMode(enabled *bool) (ntstatus error) = bcrypt.BCryptGetFipsAlgorithmMode -+//sys SetProperty(hObject HANDLE, pszProperty *uint16, pbInput []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptSetProperty -+//sys GetProperty(hObject HANDLE, pszProperty *uint16, pbOutput []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptGetProperty -+//sys OpenAlgorithmProvider(phAlgorithm *ALG_HANDLE, pszAlgId *uint16, pszImplementation *uint16, dwFlags AlgorithmProviderFlags) (ntstatus error) = bcrypt.BCryptOpenAlgorithmProvider -+//sys CloseAlgorithmProvider(hAlgorithm ALG_HANDLE, dwFlags uint32) (ntstatus error) = bcrypt.BCryptCloseAlgorithmProvider -+ -+// SHA and HMAC -+ -+//sys Hash(hAlgorithm ALG_HANDLE, pbSecret []byte, pbInput []byte, pbOutput []byte) (ntstatus error) = bcrypt.BCryptHash -+//sys CreateHash(hAlgorithm ALG_HANDLE, phHash *HASH_HANDLE, pbHashObject []byte, pbSecret []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptCreateHash -+//sys DestroyHash(hHash HASH_HANDLE) (ntstatus error) = bcrypt.BCryptDestroyHash -+//sys HashData(hHash HASH_HANDLE, pbInput []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptHashData -+//sys HashDataRaw(hHash HASH_HANDLE, pbInput *byte, cbInput uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptHashData -+//sys DuplicateHash(hHash HASH_HANDLE, phNewHash *HASH_HANDLE, pbHashObject []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptDuplicateHash -+//sys FinishHash(hHash HASH_HANDLE, pbOutput []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptFinishHash -+ -+// Rand -+ -+//sys GenRandom(hAlgorithm ALG_HANDLE, pbBuffer []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptGenRandom -+ -+// Keys -+ -+//sys generateSymmetricKey(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, pbKeyObject []byte, pbSecret *byte, cbSecret uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptGenerateSymmetricKey -+//sys GenerateKeyPair(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, dwLength uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptGenerateKeyPair -+//sys FinalizeKeyPair(hKey KEY_HANDLE, dwFlags uint32) (ntstatus error) = bcrypt.BCryptFinalizeKeyPair -+//sys ImportKeyPair (hAlgorithm ALG_HANDLE, hImportKey KEY_HANDLE, pszBlobType *uint16, phKey *KEY_HANDLE, pbInput []byte, dwFlags uint32) (ntstatus error) = bcrypt.BCryptImportKeyPair -+//sys ExportKey(hKey KEY_HANDLE, hExportKey KEY_HANDLE, pszBlobType *uint16, pbOutput []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptExportKey -+//sys DestroyKey(hKey KEY_HANDLE) (ntstatus error) = bcrypt.BCryptDestroyKey -+//sys _Encrypt(hKey KEY_HANDLE, pbInput *byte, cbInput uint32, pPaddingInfo unsafe.Pointer, pbIV []byte, pbOutput []byte, pcbResult *uint32, dwFlags PadMode) (ntstatus error) = bcrypt.BCryptEncrypt -+//sys _Decrypt(hKey KEY_HANDLE, pbInput *byte, cbInput uint32, pPaddingInfo unsafe.Pointer, pbIV []byte, pbOutput *byte, cbOutput uint32, pcbResult *uint32, dwFlags PadMode) (ntstatus error) = bcrypt.BCryptDecrypt -+//sys SignHash (hKey KEY_HANDLE, pPaddingInfo unsafe.Pointer, pbInput []byte, pbOutput []byte, pcbResult *uint32, dwFlags PadMode) (ntstatus error) = bcrypt.BCryptSignHash -+//sys VerifySignature(hKey KEY_HANDLE, pPaddingInfo unsafe.Pointer, pbHash []byte, pbSignature []byte, dwFlags PadMode) (ntstatus error) = bcrypt.BCryptVerifySignature -+//sys SecretAgreement(hPrivKey KEY_HANDLE, hPubKey KEY_HANDLE, phAgreedSecret *SECRET_HANDLE, dwFlags uint32) (ntstatus error) = bcrypt.BCryptSecretAgreement -+//sys DeriveKey(hSharedSecret SECRET_HANDLE, pwszKDF *uint16, pParameterList *BufferDesc, pbDerivedKey []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptDeriveKey -+//sys KeyDerivation(hKey KEY_HANDLE, pParameterList *BufferDesc, pbDerivedKey []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptKeyDerivation -+//sys DestroySecret(hSecret SECRET_HANDLE) (ntstatus error) = bcrypt.BCryptDestroySecret -+ -+// ML-KEM uses standard BCrypt functions -+// BCryptGenerateKeyPair, BCryptSetProperty, BCryptFinalizeKeyPair, BCryptExportKey, BCryptImportKeyPair -+// BCryptEncapsulate, BCryptDecapsulate -+ -+//sys Encapsulate(hKey KEY_HANDLE, pbSecret []byte, pcbResult *uint32, pbCiphertext []byte, pcbCiphertext *uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptEncapsulate -+//sys Decapsulate(hKey KEY_HANDLE, pbCiphertext []byte, pbSecret []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) = bcrypt.BCryptDecapsulate -+ -+func GenerateSymmetricKey(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, pbKeyObject []byte, pbSecret []byte, dwFlags uint32) error { -+ cbLen := uint32(len(pbSecret)) -+ if cbLen == 0 { -+ // BCryptGenerateSymmetricKey does not support nil pbSecret, -+ // stack-allocate a zero byte here just to make CNG happy. -+ pbSecret = make([]byte, 1) -+ } -+ return generateSymmetricKey(hAlgorithm, phKey, pbKeyObject, &pbSecret[0], cbLen, dwFlags) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/ntstatus_windows.go b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/ntstatus_windows.go -new file mode 100644 -index 00000000000000..ec2eb01aa3cd8a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/ntstatus_windows.go -@@ -0,0 +1,45 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+package bcrypt -+ -+import ( -+ "strconv" -+ "syscall" -+ "unicode/utf16" -+) -+ -+const ( -+ FORMAT_MESSAGE_FROM_HMODULE = 2048 -+ FORMAT_MESSAGE_FROM_SYSTEM = 4096 -+ FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 -+ -+ LANG_ENGLISH = 0x09 -+ SUBLANG_ENGLISH_US = 0x01 -+) -+ -+type NTStatus uint32 -+ -+func (s NTStatus) Errno() syscall.Errno { -+ return rtlNtStatusToDosErrorNoTeb(s) -+} -+ -+func langID(pri, sub uint16) uint32 { return uint32(sub)<<10 | uint32(pri) } -+ -+func (s NTStatus) Error() string { -+ b := make([]uint16, 300) -+ n, err := formatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ARGUMENT_ARRAY, modntdll.Handle(), uint32(s), langID(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil) -+ if err != nil { -+ return "NTSTATUS 0x" + strconv.FormatUint(uint64(s), 16) -+ } -+ // trim terminating \r and \n -+ for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- { -+ } -+ return string(utf16.Decode(b[:n])) -+} -+ -+// NT Native APIs -+//sys rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb -+ -+// windows api calls -+//sys formatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/zsyscall_windows.go b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/zsyscall_windows.go -new file mode 100644 -index 00000000000000..6a09e41fceda86 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/bcrypt/zsyscall_windows.go -@@ -0,0 +1,438 @@ -+// Code generated by 'go generate'; DO NOT EDIT. -+ -+package bcrypt -+ -+import ( -+ "github.com/microsoft/go-crypto-winnative/internal/sysdll" -+ "syscall" -+ "unsafe" -+) -+ -+var _ unsafe.Pointer -+ -+// Do the interface allocations only once for common -+// Errno values. -+const ( -+ errnoERROR_IO_PENDING = 997 -+) -+ -+var ( -+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) -+ errERROR_EINVAL error = syscall.EINVAL -+) -+ -+// errnoErr returns common boxed Errno values, to prevent -+// allocations at runtime. -+func errnoErr(e syscall.Errno) error { -+ switch e { -+ case 0: -+ return errERROR_EINVAL -+ case errnoERROR_IO_PENDING: -+ return errERROR_IO_PENDING -+ } -+ // TODO: add more here, after collecting data on the common -+ // error values see on Windows. (perhaps when running -+ // all.bat?) -+ return e -+} -+ -+var ( -+ modbcrypt = syscall.NewLazyDLL(sysdll.Add("bcrypt.dll")) -+ modkernel32 = syscall.NewLazyDLL(sysdll.Add("kernel32.dll")) -+ modntdll = syscall.NewLazyDLL(sysdll.Add("ntdll.dll")) -+ -+ procBCryptCloseAlgorithmProvider = modbcrypt.NewProc("BCryptCloseAlgorithmProvider") -+ procBCryptCreateHash = modbcrypt.NewProc("BCryptCreateHash") -+ procBCryptDecapsulate = modbcrypt.NewProc("BCryptDecapsulate") -+ procBCryptDecrypt = modbcrypt.NewProc("BCryptDecrypt") -+ procBCryptDeriveKey = modbcrypt.NewProc("BCryptDeriveKey") -+ procBCryptDestroyHash = modbcrypt.NewProc("BCryptDestroyHash") -+ procBCryptDestroyKey = modbcrypt.NewProc("BCryptDestroyKey") -+ procBCryptDestroySecret = modbcrypt.NewProc("BCryptDestroySecret") -+ procBCryptDuplicateHash = modbcrypt.NewProc("BCryptDuplicateHash") -+ procBCryptEncapsulate = modbcrypt.NewProc("BCryptEncapsulate") -+ procBCryptEncrypt = modbcrypt.NewProc("BCryptEncrypt") -+ procBCryptExportKey = modbcrypt.NewProc("BCryptExportKey") -+ procBCryptFinalizeKeyPair = modbcrypt.NewProc("BCryptFinalizeKeyPair") -+ procBCryptFinishHash = modbcrypt.NewProc("BCryptFinishHash") -+ procBCryptGenRandom = modbcrypt.NewProc("BCryptGenRandom") -+ procBCryptGenerateKeyPair = modbcrypt.NewProc("BCryptGenerateKeyPair") -+ procBCryptGenerateSymmetricKey = modbcrypt.NewProc("BCryptGenerateSymmetricKey") -+ procBCryptGetFipsAlgorithmMode = modbcrypt.NewProc("BCryptGetFipsAlgorithmMode") -+ procBCryptGetProperty = modbcrypt.NewProc("BCryptGetProperty") -+ procBCryptHash = modbcrypt.NewProc("BCryptHash") -+ procBCryptHashData = modbcrypt.NewProc("BCryptHashData") -+ procBCryptImportKeyPair = modbcrypt.NewProc("BCryptImportKeyPair") -+ procBCryptKeyDerivation = modbcrypt.NewProc("BCryptKeyDerivation") -+ procBCryptOpenAlgorithmProvider = modbcrypt.NewProc("BCryptOpenAlgorithmProvider") -+ procBCryptSecretAgreement = modbcrypt.NewProc("BCryptSecretAgreement") -+ procBCryptSetProperty = modbcrypt.NewProc("BCryptSetProperty") -+ procBCryptSignHash = modbcrypt.NewProc("BCryptSignHash") -+ procBCryptVerifySignature = modbcrypt.NewProc("BCryptVerifySignature") -+ procFormatMessageW = modkernel32.NewProc("FormatMessageW") -+ procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") -+) -+ -+func CloseAlgorithmProvider(hAlgorithm ALG_HANDLE, dwFlags uint32) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptCloseAlgorithmProvider.Addr(), uintptr(hAlgorithm), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func CreateHash(hAlgorithm ALG_HANDLE, phHash *HASH_HANDLE, pbHashObject []byte, pbSecret []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbHashObject) > 0 { -+ _p0 = &pbHashObject[0] -+ } -+ var _p1 *byte -+ if len(pbSecret) > 0 { -+ _p1 = &pbSecret[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptCreateHash.Addr(), uintptr(hAlgorithm), uintptr(unsafe.Pointer(phHash)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbHashObject)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbSecret)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func Decapsulate(hKey KEY_HANDLE, pbCiphertext []byte, pbSecret []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbCiphertext) > 0 { -+ _p0 = &pbCiphertext[0] -+ } -+ var _p1 *byte -+ if len(pbSecret) > 0 { -+ _p1 = &pbSecret[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptDecapsulate.Addr(), uintptr(hKey), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbCiphertext)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbSecret)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func _Decrypt(hKey KEY_HANDLE, pbInput *byte, cbInput uint32, pPaddingInfo unsafe.Pointer, pbIV []byte, pbOutput *byte, cbOutput uint32, pcbResult *uint32, dwFlags PadMode) (ntstatus error) { -+ var _p0 *byte -+ if len(pbIV) > 0 { -+ _p0 = &pbIV[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptDecrypt.Addr(), uintptr(hKey), uintptr(unsafe.Pointer(pbInput)), uintptr(cbInput), uintptr(pPaddingInfo), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbIV)), uintptr(unsafe.Pointer(pbOutput)), uintptr(cbOutput), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func DeriveKey(hSharedSecret SECRET_HANDLE, pwszKDF *uint16, pParameterList *BufferDesc, pbDerivedKey []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbDerivedKey) > 0 { -+ _p0 = &pbDerivedKey[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptDeriveKey.Addr(), uintptr(hSharedSecret), uintptr(unsafe.Pointer(pwszKDF)), uintptr(unsafe.Pointer(pParameterList)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbDerivedKey)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func DestroyHash(hHash HASH_HANDLE) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptDestroyHash.Addr(), uintptr(hHash)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func DestroyKey(hKey KEY_HANDLE) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptDestroyKey.Addr(), uintptr(hKey)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func DestroySecret(hSecret SECRET_HANDLE) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptDestroySecret.Addr(), uintptr(hSecret)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func DuplicateHash(hHash HASH_HANDLE, phNewHash *HASH_HANDLE, pbHashObject []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbHashObject) > 0 { -+ _p0 = &pbHashObject[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptDuplicateHash.Addr(), uintptr(hHash), uintptr(unsafe.Pointer(phNewHash)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbHashObject)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func Encapsulate(hKey KEY_HANDLE, pbSecret []byte, pcbResult *uint32, pbCiphertext []byte, pcbCiphertext *uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbSecret) > 0 { -+ _p0 = &pbSecret[0] -+ } -+ var _p1 *byte -+ if len(pbCiphertext) > 0 { -+ _p1 = &pbCiphertext[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptEncapsulate.Addr(), uintptr(hKey), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbSecret)), uintptr(unsafe.Pointer(pcbResult)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbCiphertext)), uintptr(unsafe.Pointer(pcbCiphertext)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func _Encrypt(hKey KEY_HANDLE, pbInput *byte, cbInput uint32, pPaddingInfo unsafe.Pointer, pbIV []byte, pbOutput []byte, pcbResult *uint32, dwFlags PadMode) (ntstatus error) { -+ var _p0 *byte -+ if len(pbIV) > 0 { -+ _p0 = &pbIV[0] -+ } -+ var _p1 *byte -+ if len(pbOutput) > 0 { -+ _p1 = &pbOutput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptEncrypt.Addr(), uintptr(hKey), uintptr(unsafe.Pointer(pbInput)), uintptr(cbInput), uintptr(pPaddingInfo), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbIV)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbOutput)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func ExportKey(hKey KEY_HANDLE, hExportKey KEY_HANDLE, pszBlobType *uint16, pbOutput []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbOutput) > 0 { -+ _p0 = &pbOutput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptExportKey.Addr(), uintptr(hKey), uintptr(hExportKey), uintptr(unsafe.Pointer(pszBlobType)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbOutput)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func FinalizeKeyPair(hKey KEY_HANDLE, dwFlags uint32) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptFinalizeKeyPair.Addr(), uintptr(hKey), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func FinishHash(hHash HASH_HANDLE, pbOutput []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbOutput) > 0 { -+ _p0 = &pbOutput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptFinishHash.Addr(), uintptr(hHash), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbOutput)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func GenRandom(hAlgorithm ALG_HANDLE, pbBuffer []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbBuffer) > 0 { -+ _p0 = &pbBuffer[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptGenRandom.Addr(), uintptr(hAlgorithm), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbBuffer)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func GenerateKeyPair(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, dwLength uint32, dwFlags uint32) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptGenerateKeyPair.Addr(), uintptr(hAlgorithm), uintptr(unsafe.Pointer(phKey)), uintptr(dwLength), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func generateSymmetricKey(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, pbKeyObject []byte, pbSecret *byte, cbSecret uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbKeyObject) > 0 { -+ _p0 = &pbKeyObject[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptGenerateSymmetricKey.Addr(), uintptr(hAlgorithm), uintptr(unsafe.Pointer(phKey)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbKeyObject)), uintptr(unsafe.Pointer(pbSecret)), uintptr(cbSecret), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func GetFipsAlgorithmMode(enabled *bool) (ntstatus error) { -+ var _p0 uint32 -+ if *enabled { -+ _p0 = 1 -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptGetFipsAlgorithmMode.Addr(), uintptr(unsafe.Pointer(&_p0))) -+ *enabled = _p0 != 0 -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func GetProperty(hObject HANDLE, pszProperty *uint16, pbOutput []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbOutput) > 0 { -+ _p0 = &pbOutput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptGetProperty.Addr(), uintptr(hObject), uintptr(unsafe.Pointer(pszProperty)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbOutput)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func Hash(hAlgorithm ALG_HANDLE, pbSecret []byte, pbInput []byte, pbOutput []byte) (ntstatus error) { -+ var _p0 *byte -+ if len(pbSecret) > 0 { -+ _p0 = &pbSecret[0] -+ } -+ var _p1 *byte -+ if len(pbInput) > 0 { -+ _p1 = &pbInput[0] -+ } -+ var _p2 *byte -+ if len(pbOutput) > 0 { -+ _p2 = &pbOutput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptHash.Addr(), uintptr(hAlgorithm), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbSecret)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbInput)), uintptr(unsafe.Pointer(_p2)), uintptr(len(pbOutput))) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func HashDataRaw(hHash HASH_HANDLE, pbInput *byte, cbInput uint32, dwFlags uint32) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptHashData.Addr(), uintptr(hHash), uintptr(unsafe.Pointer(pbInput)), uintptr(cbInput), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func HashData(hHash HASH_HANDLE, pbInput []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbInput) > 0 { -+ _p0 = &pbInput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptHashData.Addr(), uintptr(hHash), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbInput)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func ImportKeyPair(hAlgorithm ALG_HANDLE, hImportKey KEY_HANDLE, pszBlobType *uint16, phKey *KEY_HANDLE, pbInput []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbInput) > 0 { -+ _p0 = &pbInput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptImportKeyPair.Addr(), uintptr(hAlgorithm), uintptr(hImportKey), uintptr(unsafe.Pointer(pszBlobType)), uintptr(unsafe.Pointer(phKey)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbInput)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func KeyDerivation(hKey KEY_HANDLE, pParameterList *BufferDesc, pbDerivedKey []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbDerivedKey) > 0 { -+ _p0 = &pbDerivedKey[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptKeyDerivation.Addr(), uintptr(hKey), uintptr(unsafe.Pointer(pParameterList)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbDerivedKey)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func OpenAlgorithmProvider(phAlgorithm *ALG_HANDLE, pszAlgId *uint16, pszImplementation *uint16, dwFlags AlgorithmProviderFlags) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptOpenAlgorithmProvider.Addr(), uintptr(unsafe.Pointer(phAlgorithm)), uintptr(unsafe.Pointer(pszAlgId)), uintptr(unsafe.Pointer(pszImplementation)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func SecretAgreement(hPrivKey KEY_HANDLE, hPubKey KEY_HANDLE, phAgreedSecret *SECRET_HANDLE, dwFlags uint32) (ntstatus error) { -+ r0, _, _ := syscall.SyscallN(procBCryptSecretAgreement.Addr(), uintptr(hPrivKey), uintptr(hPubKey), uintptr(unsafe.Pointer(phAgreedSecret)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func SetProperty(hObject HANDLE, pszProperty *uint16, pbInput []byte, dwFlags uint32) (ntstatus error) { -+ var _p0 *byte -+ if len(pbInput) > 0 { -+ _p0 = &pbInput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptSetProperty.Addr(), uintptr(hObject), uintptr(unsafe.Pointer(pszProperty)), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbInput)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func SignHash(hKey KEY_HANDLE, pPaddingInfo unsafe.Pointer, pbInput []byte, pbOutput []byte, pcbResult *uint32, dwFlags PadMode) (ntstatus error) { -+ var _p0 *byte -+ if len(pbInput) > 0 { -+ _p0 = &pbInput[0] -+ } -+ var _p1 *byte -+ if len(pbOutput) > 0 { -+ _p1 = &pbOutput[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptSignHash.Addr(), uintptr(hKey), uintptr(pPaddingInfo), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbInput)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbOutput)), uintptr(unsafe.Pointer(pcbResult)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func VerifySignature(hKey KEY_HANDLE, pPaddingInfo unsafe.Pointer, pbHash []byte, pbSignature []byte, dwFlags PadMode) (ntstatus error) { -+ var _p0 *byte -+ if len(pbHash) > 0 { -+ _p0 = &pbHash[0] -+ } -+ var _p1 *byte -+ if len(pbSignature) > 0 { -+ _p1 = &pbSignature[0] -+ } -+ r0, _, _ := syscall.SyscallN(procBCryptVerifySignature.Addr(), uintptr(hKey), uintptr(pPaddingInfo), uintptr(unsafe.Pointer(_p0)), uintptr(len(pbHash)), uintptr(unsafe.Pointer(_p1)), uintptr(len(pbSignature)), uintptr(dwFlags)) -+ if r0 != 0 { -+ ntstatus = NTStatus(r0) -+ } -+ return -+} -+ -+func formatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) { -+ var _p0 *uint16 -+ if len(buf) > 0 { -+ _p0 = &buf[0] -+ } -+ r0, _, e1 := syscall.SyscallN(procFormatMessageW.Addr(), uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args))) -+ n = uint32(r0) -+ if n == 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+func rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) { -+ r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(ntstatus)) -+ ret = syscall.Errno(r0) -+ return -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/internal/subtle/aliasing.go b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/subtle/aliasing.go -new file mode 100644 -index 00000000000000..db09e4aae64f8c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/subtle/aliasing.go -@@ -0,0 +1,32 @@ -+// Copyright 2018 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Package subtle implements functions that are often useful in cryptographic -+// code but require careful thought to use correctly. -+// -+// This is a mirror of golang.org/x/crypto/internal/subtle. -+package subtle -+ -+import "unsafe" -+ -+// AnyOverlap reports whether x and y share memory at any (not necessarily -+// corresponding) index. The memory beyond the slice length is ignored. -+func AnyOverlap(x, y []byte) bool { -+ return len(x) > 0 && len(y) > 0 && -+ uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) && -+ uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1])) -+} -+ -+// InexactOverlap reports whether x and y share memory at any non-corresponding -+// index. The memory beyond the slice length is ignored. Note that x and y can -+// have different lengths and still not have any inexact overlap. -+// -+// InexactOverlap can be used to implement the requirements of the crypto/cipher -+// AEAD, Block, BlockMode and Stream interfaces. -+func InexactOverlap(x, y []byte) bool { -+ if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] { -+ return false -+ } -+ return AnyOverlap(x, y) -+} -diff --git a/src/vendor/github.com/microsoft/go-crypto-winnative/internal/sysdll/sys_windows.go b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/sysdll/sys_windows.go -new file mode 100644 -index 00000000000000..1722410e5af193 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go-crypto-winnative/internal/sysdll/sys_windows.go -@@ -0,0 +1,55 @@ -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+ -+// Package sysdll is a custom version of the standard library internal/syscall/windows/sysdll package. -+// sysdll is used to guard against Windows DLL preloading attacks. -+// We can't call Go's sysdll.Add function from within go-crypto-winnative because sysdll is an internal package, -+// so we have reimplemented the sysdll.Add function in a way that it always returns -+// DLL absolute paths rooted at the system directory. -+// See go.dev/issues/14959 for more info. -+package sysdll -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+var ( -+ // kernel32.dll is a known system DLL used by Go, -+ // so protected against DLL preloading attacks. -+ modkernel32 = syscall.NewLazyDLL("kernel32.dll") -+ procGetSystemDirectoryW = modkernel32.NewProc("GetSystemDirectoryW") -+) -+ -+func getSystemDirectoryW(dir *uint16, dirLen uint32) (len uint32, err error) { -+ r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) -+ len = uint32(r0) -+ if len == 0 { -+ err = e1 -+ } -+ return -+} -+ -+// getSystemDirectory retrieves the path to current location of the system -+// directory, which is typically, though not always, `C:\Windows\System32`. -+func getSystemDirectory() string { -+ n := uint32(syscall.MAX_PATH) -+ for { -+ b := make([]uint16, n) -+ l, e := getSystemDirectoryW(&b[0], n) -+ if e != nil { -+ panic(e) -+ } -+ if l <= n { -+ return syscall.UTF16ToString(b[:l]) -+ } -+ n = l -+ } -+} -+ -+// Add returns the absolute path of the dll. -+// The returned path points to the system directory, -+// so it is secure against DLL preloading attacks. -+func Add(dll string) string { -+ return getSystemDirectory() + "\\" + dll -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/README.md b/src/vendor/github.com/microsoft/go/cryptobackend/README.md -new file mode 100644 -index 00000000000000..ce4f4d20892a6f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/README.md -@@ -0,0 +1,21 @@ -+# Cryptobackend and standard-library internals -+ -+This package is maintained as the standalone module `github.com/microsoft/go/cryptobackend`, but the Microsoft build of Go compiles it from the vendored copy in the Go source tree: -+ -+```text -+go/src/vendor/github.com/microsoft/go/cryptobackend -+``` -+ -+That location matters. Packages imported by the standard library are resolved through `GOROOT/src/vendor`, so the backend becomes part of the standard-library dependency graph even though its module source lives outside `go/src` in this repository. -+ -+Normally, Go's `internal` package rule would reject imports such as `crypto/internal/fips140only` or `crypto/internal/boring/sig` from `github.com/microsoft/go/cryptobackend`, because that import path is outside the `crypto` tree. The Microsoft build carries a narrow `cmd/go` exception for the GOROOT-vendored cryptobackend package: when the importer is under `GOROOT/src/vendor/github.com/microsoft/go/cryptobackend`, imports whose paths begin with `crypto/internal` are allowed. -+ -+The same loader hook also adds the `msgostd` tool tag when cryptobackend is imported by the standard library, or when the package directory is the GOROOT-vendored copy. Files guarded by that tag, such as `backend_windows_msgostd.go`, can therefore contain the std-only glue that wires the backend into packages like `crypto/internal/fips140only`. -+ -+The exception is deliberately scoped to the GOROOT-vendored copy. Building this module directly as an ordinary external dependency should not rely on importing `crypto/internal` packages. -+ -+## Algorithm package shape -+ -+The algorithm subpackages under `cryptobackend` mirror the algorithm-oriented layout of `crypto/internal/fips140/...`. Each package owns its platform-specific bindings directly: Linux packages call `go-crypto-openssl`, Windows packages call `go-crypto-winnative`, and Darwin packages call `go-crypto-darwin`. -+ -+These packages are intended as a migration step toward making cryptobackend usable as a drop-in replacement for `crypto/internal/fips140` without changing the backend implementation model all at once. -\ No newline at end of file -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_darwin.go -new file mode 100644 -index 00000000000000..97d73de468500c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_darwin.go -@@ -0,0 +1,15 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package aes -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func New(key []byte) (cipher.Block, error) { return xcrypto.NewAESCipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_linux.go -new file mode 100644 -index 00000000000000..a261f6401dbdda ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_linux.go -@@ -0,0 +1,15 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package aes -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func New(key []byte) (cipher.Block, error) { return openssl.NewAESCipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_windows.go -new file mode 100644 -index 00000000000000..d776d725a4bf4d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/aes_windows.go -@@ -0,0 +1,15 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package aes -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func New(key []byte) (cipher.Block, error) { return cng.NewAESCipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_darwin.go -new file mode 100644 -index 00000000000000..a05c567366845c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_darwin.go -@@ -0,0 +1,17 @@ -+// Copyright 2013 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package gcm -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func NewTLS(c cipher.Block) (cipher.AEAD, error) { return xcrypto.NewGCMTLS(c) } -+ -+func NewTLS13(c cipher.Block) (cipher.AEAD, error) { return xcrypto.NewGCMTLS13(c) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_linux.go -new file mode 100644 -index 00000000000000..3d12e43471870b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_linux.go -@@ -0,0 +1,17 @@ -+// Copyright 2013 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package gcm -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func NewTLS(c cipher.Block) (cipher.AEAD, error) { return openssl.NewGCMTLS(c) } -+ -+func NewTLS13(c cipher.Block) (cipher.AEAD, error) { return openssl.NewGCMTLS13(c) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_windows.go -new file mode 100644 -index 00000000000000..ea35fd5da12c11 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/gcm_windows.go -@@ -0,0 +1,17 @@ -+// Copyright 2013 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package gcm -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func NewTLS(c cipher.Block) (cipher.AEAD, error) { return cng.NewGCMTLS(c) } -+ -+func NewTLS13(c cipher.Block) (cipher.AEAD, error) { return cng.NewGCMTLS13(c) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/init.go -new file mode 100644 -index 00000000000000..d3f35e9ded321c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package gcm -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/nobackend.go -new file mode 100644 -index 00000000000000..1e899e9cbd9417 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/gcm/nobackend.go -@@ -0,0 +1,13 @@ -+// Copyright 2013 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package gcm -+ -+import "crypto/cipher" -+ -+func NewTLS(c cipher.Block) (cipher.AEAD, error) { panic("cryptobackend: not available") } -+ -+func NewTLS13(c cipher.Block) (cipher.AEAD, error) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/init.go -new file mode 100644 -index 00000000000000..d32a04def17368 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package aes -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/aes/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/aes/nobackend.go -new file mode 100644 -index 00000000000000..521f1a8deaf127 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/aes/nobackend.go -@@ -0,0 +1,11 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package aes -+ -+import "crypto/cipher" -+ -+func New(key []byte) (cipher.Block, error) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/backend_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/backend_darwin.go -new file mode 100644 -index 00000000000000..3b552bc0b06596 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/backend_darwin.go -@@ -0,0 +1,17 @@ -+// Copyright 2017 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package backend -+ -+func init() { -+ // Darwin is considered FIPS compliant. -+ if err := checkFIPS(func() bool { return true }); err != nil { -+ panic("darwincrypto: " + err.Error()) -+ } -+} -+ -+// Enabled controls whether FIPS crypto is enabled. -+const Enabled = true -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/backend_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/backend_linux.go -new file mode 100644 -index 00000000000000..60bf13c11a6a1f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/backend_linux.go -@@ -0,0 +1,27 @@ -+// Copyright 2017 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package backend -+ -+import "github.com/microsoft/go-crypto-openssl/osslsetup" -+ -+// Enabled controls whether FIPS crypto is enabled. -+const Enabled = true -+ -+func init() { -+ // Some distributions, e.g. Azure Linux 3, don't set the `fips=yes` property when running in FIPS mode, -+ // but they configure OpenSSL to use a FIPS-compliant provider (in the case of Azure Linux 3, the SCOSSL provider). -+ // In these cases, openssl.FIPS would return `false` and openssl.FIPSCapable would return `true`. -+ // We don't care about the `fips=yes` property as long as the provider is FIPS-compliant, so use -+ // osslsetup.FIPSCapable to determine whether FIPS mode is enabled. -+ if err := checkFIPS(func() bool { return osslsetup.FIPSCapable() }); err != nil { -+ // This path can be reached for the following reasons: -+ // - In OpenSSL 1, the active engine doesn't support FIPS mode. -+ // - In OpenSSL 1, the active engine supports FIPS mode, but it is not enabled. -+ // - In OpenSSL 3, the provider used by default doesn't match the `fips=yes` query. -+ panic("opensslcrypto: " + err.Error() + ": " + osslsetup.VersionText()) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/backend_msgostd.go b/src/vendor/github.com/microsoft/go/cryptobackend/backend_msgostd.go -new file mode 100644 -index 00000000000000..a9ee1b58fd4ce1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/backend_msgostd.go -@@ -0,0 +1,17 @@ -+// Copyright 2017 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto && msgostd -+ -+package backend -+ -+import ( -+ "crypto/internal/fips140only" -+ -+ bhash "github.com/microsoft/go/cryptobackend/hash" -+) -+ -+func init() { -+ fips140only.BackendApprovedHash = bhash.Approved -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/backend_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/backend_windows.go -new file mode 100644 -index 00000000000000..a660f516b3527c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/backend_windows.go -@@ -0,0 +1,17 @@ -+// Copyright 2017 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package backend -+ -+func init() { -+ // Windows is considered FIPS compliant. -+ if err := checkFIPS(func() bool { return true }); err != nil { -+ panic("cngcrypto: " + err.Error()) -+ } -+} -+ -+// Enabled controls whether FIPS crypto is enabled. -+const Enabled = true -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big.go b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big.go -new file mode 100644 -index 00000000000000..20251a290dc2e0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big.go -@@ -0,0 +1,17 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package bbig -+ -+import "math/big" -+ -+func Enc(b *big.Int) []uint { -+ return nil -+} -+ -+func Dec(b []uint) *big.Int { -+ return nil -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_darwin.go -new file mode 100644 -index 00000000000000..889f2ff7c703d8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_darwin.go -@@ -0,0 +1,12 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package bbig -+ -+import "github.com/microsoft/go-crypto-darwin/bbig" -+ -+var Enc = bbig.Enc -+var Dec = bbig.Dec -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_linux.go -new file mode 100644 -index 00000000000000..1b515fe6244a52 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_linux.go -@@ -0,0 +1,12 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package bbig -+ -+import "github.com/microsoft/go-crypto-openssl/bbig" -+ -+var Enc = bbig.Enc -+var Dec = bbig.Dec -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_windows.go -new file mode 100644 -index 00000000000000..f2c21a88bff471 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/big_windows.go -@@ -0,0 +1,12 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package bbig -+ -+import "github.com/microsoft/go-crypto-winnative/cng/bbig" -+ -+var Enc = bbig.Enc -+var Dec = bbig.Dec -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/bbig/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/init.go -new file mode 100644 -index 00000000000000..35fb416a0b6981 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/bbig/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package bbig -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_darwin.go -new file mode 100644 -index 00000000000000..a840478d38b9f5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_darwin.go -@@ -0,0 +1,24 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package chacha20poly1305 -+ -+import ( -+ "crypto/cipher" -+ "crypto/fips140" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Supports() bool { return true } -+ -+func New(key []byte) (cipher.AEAD, error) { -+ if fips140.Enforced() { -+ return nil, errors.New("chacha20poly1305: use of ChaCha20Poly1305 is not allowed in FIPS 140-only mode") -+ } -+ return xcrypto.NewChaCha20Poly1305(key) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_linux.go -new file mode 100644 -index 00000000000000..1ed61f6848da91 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_linux.go -@@ -0,0 +1,24 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package chacha20poly1305 -+ -+import ( -+ "crypto/cipher" -+ "crypto/fips140" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Supports() bool { return openssl.SupportsChaCha20Poly1305() } -+ -+func New(key []byte) (cipher.AEAD, error) { -+ if fips140.Enforced() { -+ return nil, errors.New("chacha20poly1305: use of ChaCha20Poly1305 is not allowed in FIPS 140-only mode") -+ } -+ return openssl.NewChaCha20Poly1305(key) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_windows.go -new file mode 100644 -index 00000000000000..06911c728d8fb0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/chacha20poly1305_windows.go -@@ -0,0 +1,24 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package chacha20poly1305 -+ -+import ( -+ "crypto/cipher" -+ "crypto/fips140" -+ "errors" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Supports() bool { return cng.SupportsChaCha20Poly1305() } -+ -+func New(key []byte) (cipher.AEAD, error) { -+ if fips140.Enforced() { -+ return nil, errors.New("chacha20poly1305: use of ChaCha20Poly1305 is not allowed in FIPS 140-only mode") -+ } -+ return cng.NewChaCha20Poly1305(key) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/init.go -new file mode 100644 -index 00000000000000..d29ea00af78056 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package chacha20poly1305 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/nobackend.go -new file mode 100644 -index 00000000000000..ef029383dfac21 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/chacha20poly1305/nobackend.go -@@ -0,0 +1,13 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package chacha20poly1305 -+ -+import "crypto/cipher" -+ -+func Supports() bool { return false } -+ -+func New(key []byte) (cipher.AEAD, error) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/common.go b/src/vendor/github.com/microsoft/go/cryptobackend/common.go -new file mode 100644 -index 00000000000000..fc38aa225ef25e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/common.go -@@ -0,0 +1,47 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package backend -+ -+import ( -+ "runtime" -+ -+ "github.com/microsoft/go/cryptobackend/internal/fips140state" -+) -+ -+func checkFIPS(fips func() bool) error { -+ return fips140state.Check(Enabled, fips) -+} -+ -+// Unreachable marks code that should be unreachable -+// when backend is in use. -+func Unreachable() { -+ if Enabled { -+ panic("cryptobackend: invalid code execution") -+ } -+} -+ -+// Provided by runtime.crypto_backend_runtime_arg0 to avoid os import. -+func runtime_arg0() string -+ -+func hasSuffix(s, t string) bool { -+ return len(s) > len(t) && s[len(s)-len(t):] == t -+} -+ -+// UnreachableExceptTests marks code that should be unreachable -+// when backend is in use. It panics. -+func UnreachableExceptTests() { -+ // runtime_arg0 is not supported on windows. -+ // We are going through the same code patch on linux, -+ // so if we are unintentionally calling an 'unreachable' function, -+ // we will catch it there. -+ if Enabled && runtime.GOOS != "windows" { -+ name := runtime_arg0() -+ // If ran on Windows we'd need to allow _test.exe and .test.exe as well. -+ if !hasSuffix(name, "_test") && !hasSuffix(name, ".test") { -+ println("cryptobackend: unexpected code execution in", name) -+ panic("cryptobackend: invalid code execution") -+ } -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/des/des_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/des/des_darwin.go -new file mode 100644 -index 00000000000000..9df97e1cabc36c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/des/des_darwin.go -@@ -0,0 +1,21 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package des -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func SupportsDES() bool { return true } -+ -+func SupportsTripleDES() bool { return true } -+ -+func NewDES(key []byte) (cipher.Block, error) { return xcrypto.NewDESCipher(key) } -+ -+func NewTripleDES(key []byte) (cipher.Block, error) { return xcrypto.NewTripleDESCipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/des/des_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/des/des_linux.go -new file mode 100644 -index 00000000000000..f3d505d7b444f1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/des/des_linux.go -@@ -0,0 +1,21 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package des -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func SupportsDES() bool { return openssl.SupportsDESCipher() } -+ -+func SupportsTripleDES() bool { return openssl.SupportsTripleDESCipher() } -+ -+func NewDES(key []byte) (cipher.Block, error) { return openssl.NewDESCipher(key) } -+ -+func NewTripleDES(key []byte) (cipher.Block, error) { return openssl.NewTripleDESCipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/des/des_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/des/des_windows.go -new file mode 100644 -index 00000000000000..13b0cdefffc3cc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/des/des_windows.go -@@ -0,0 +1,21 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package des -+ -+import ( -+ "crypto/cipher" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func SupportsDES() bool { return true } -+ -+func SupportsTripleDES() bool { return true } -+ -+func NewDES(key []byte) (cipher.Block, error) { return cng.NewDESCipher(key) } -+ -+func NewTripleDES(key []byte) (cipher.Block, error) { return cng.NewTripleDESCipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/des/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/des/init.go -new file mode 100644 -index 00000000000000..2f52fc630264b3 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/des/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package des -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/des/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/des/nobackend.go -new file mode 100644 -index 00000000000000..fe44442e005da2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/des/nobackend.go -@@ -0,0 +1,17 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package des -+ -+import "crypto/cipher" -+ -+func SupportsDES() bool { panic("cryptobackend: not available") } -+ -+func SupportsTripleDES() bool { panic("cryptobackend: not available") } -+ -+func NewDES(key []byte) (cipher.Block, error) { panic("cryptobackend: not available") } -+ -+func NewTripleDES(key []byte) (cipher.Block, error) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/drbg/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/init.go -new file mode 100644 -index 00000000000000..f65a9f261fc1bc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package drbg -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/drbg/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/nobackend.go -new file mode 100644 -index 00000000000000..9693380c061526 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/nobackend.go -@@ -0,0 +1,9 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package drbg -+ -+func Read(b []byte) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_darwin.go -new file mode 100644 -index 00000000000000..be7f0f574c9486 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_darwin.go -@@ -0,0 +1,19 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package drbg -+ -+import ( -+ "io" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Read(b []byte) { -+ if _, err := io.ReadFull(xcrypto.RandReader, b); err != nil { -+ panic(err) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_linux.go -new file mode 100644 -index 00000000000000..f46fcaaab05cfc ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_linux.go -@@ -0,0 +1,19 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package drbg -+ -+import ( -+ "io" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Read(b []byte) { -+ if _, err := io.ReadFull(openssl.RandReader, b); err != nil { -+ panic(err) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_windows.go -new file mode 100644 -index 00000000000000..e1e2192cdf5b6d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/drbg/rand_windows.go -@@ -0,0 +1,19 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package drbg -+ -+import ( -+ "io" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Read(b []byte) { -+ if _, err := io.ReadFull(cng.RandReader, b); err != nil { -+ panic(err) -+ } -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_darwin.go -new file mode 100644 -index 00000000000000..0654c1962dd371 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_darwin.go -@@ -0,0 +1,25 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package dsa -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type BigInt = xcrypto.BigInt -+type PrivateKey struct{} -+type PublicKey struct{} -+ -+func Supports(l, n int) bool { return false } -+func GenerateParameters(l, n int) (p, q, g BigInt, err error) { panic("cryptobackend: not available") } -+func GenerateKey(p, q, g BigInt) (x, y BigInt, err error) { panic("cryptobackend: not available") } -+func NewPrivateKey(p, q, g, x, y BigInt) (*PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPublicKey(p, q, g, y BigInt) (*PublicKey, error) { panic("cryptobackend: not available") } -+func Sign(priv *PrivateKey, hash []byte, parseSignature func([]byte) (BigInt, BigInt, error)) (r, s BigInt, err error) { -+ panic("cryptobackend: not available") -+} -+func Verify(pub *PublicKey, hashed []byte, r, s BigInt, encodeSignature func(r, s BigInt) ([]byte, error)) bool { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_linux.go -new file mode 100644 -index 00000000000000..e6d47ef708758b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_linux.go -@@ -0,0 +1,46 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package dsa -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type BigInt = openssl.BigInt -+type PrivateKey = openssl.PrivateKeyDSA -+type PublicKey = openssl.PublicKeyDSA -+ -+func Supports(l, n int) bool { return openssl.SupportsDSA() } -+func GenerateParameters(l, n int) (p, q, g BigInt, err error) { -+ params, err := openssl.GenerateParametersDSA(l, n) -+ return params.P, params.Q, params.G, err -+} -+func GenerateKey(p, q, g BigInt) (x, y BigInt, err error) { -+ return openssl.GenerateKeyDSA(openssl.DSAParameters{P: p, Q: q, G: g}) -+} -+func NewPrivateKey(p, q, g, x, y BigInt) (*PrivateKey, error) { -+ return openssl.NewPrivateKeyDSA(openssl.DSAParameters{P: p, Q: q, G: g}, x, y) -+} -+func NewPublicKey(p, q, g, y BigInt) (*PublicKey, error) { -+ return openssl.NewPublicKeyDSA(openssl.DSAParameters{P: p, Q: q, G: g}, y) -+} -+func Sign(priv *PrivateKey, hash []byte, parseSignature func([]byte) (BigInt, BigInt, error)) (r, s BigInt, err error) { -+ sig, err := openssl.SignDSA(priv, hash) -+ if err != nil { -+ return nil, nil, err -+ } -+ r, s, err = parseSignature(sig) -+ if err != nil { -+ return nil, nil, err -+ } -+ return BigInt(r), BigInt(s), nil -+} -+func Verify(pub *PublicKey, hashed []byte, r, s BigInt, encodeSignature func(r, s BigInt) ([]byte, error)) bool { -+ sig, err := encodeSignature(r, s) -+ if err != nil { -+ return false -+ } -+ return openssl.VerifyDSA(pub, hashed, sig) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_windows.go -new file mode 100644 -index 00000000000000..30f19c4dfa4c92 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/dsa_windows.go -@@ -0,0 +1,37 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package dsa -+ -+import "github.com/microsoft/go-crypto-winnative/cng" -+ -+type BigInt = cng.BigInt -+type PrivateKey = cng.PrivateKeyDSA -+type PublicKey = cng.PublicKeyDSA -+ -+func Supports(l, n int) bool { return n == 160 || n == 256 } -+func GenerateParameters(l, n int) (p, q, g BigInt, err error) { -+ params, err := cng.GenerateParametersDSA(l) -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ return params.P, params.Q, params.G, nil -+} -+func GenerateKey(p, q, g BigInt) (x, y BigInt, err error) { -+ return cng.GenerateKeyDSA(cng.DSAParameters{P: p, Q: q, G: g}) -+} -+func NewPrivateKey(p, q, g, x, y BigInt) (*PrivateKey, error) { -+ return cng.NewPrivateKeyDSA(cng.DSAParameters{P: p, Q: q, G: g}, x, y) -+} -+func NewPublicKey(p, q, g, y BigInt) (*PublicKey, error) { -+ return cng.NewPublicKeyDSA(cng.DSAParameters{P: p, Q: q, G: g}, y) -+} -+func Sign(priv *PrivateKey, hash []byte, parseSignature func([]byte) (BigInt, BigInt, error)) (r, s BigInt, err error) { -+ return cng.SignDSA(priv, hash) -+} -+func Verify(pub *PublicKey, hashed []byte, r, s BigInt, encodeSignature func(r, s BigInt) ([]byte, error)) bool { -+ return cng.VerifyDSA(pub, hashed, r, s) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/dsa/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/init.go -new file mode 100644 -index 00000000000000..198bc973ae790c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package dsa -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/dsa/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/nobackend.go -new file mode 100644 -index 00000000000000..0dba0c2a39d8a5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/dsa/nobackend.go -@@ -0,0 +1,23 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package dsa -+ -+type BigInt = []uint -+type PrivateKey struct{ _ int } -+type PublicKey struct{ _ int } -+ -+func Supports(l, n int) bool { panic("cryptobackend: not available") } -+func GenerateParameters(l, n int) (p, q, g BigInt, err error) { panic("cryptobackend: not available") } -+func GenerateKey(p, q, g BigInt) (x, y BigInt, err error) { panic("cryptobackend: not available") } -+func NewPrivateKey(p, q, g, x, y BigInt) (*PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPublicKey(p, q, g, y BigInt) (*PublicKey, error) { panic("cryptobackend: not available") } -+func Sign(priv *PrivateKey, hash []byte, parseSignature func([]byte) (BigInt, BigInt, error)) (r, s BigInt, err error) { -+ panic("cryptobackend: not available") -+} -+func Verify(pub *PublicKey, hashed []byte, r, s BigInt, encodeSignature func(r, s BigInt) ([]byte, error)) bool { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_darwin.go -new file mode 100644 -index 00000000000000..67de2e7bb2098e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_darwin.go -@@ -0,0 +1,32 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ecdh -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type PrivateKey = xcrypto.PrivateKeyECDH -+type PublicKey = xcrypto.PublicKeyECDH -+ -+func SupportsCurve(curve string) bool { -+ switch curve { -+ case "P-256", "P-384", "P-521", "X25519": -+ return true -+ } -+ return false -+} -+ -+func GenerateKey(curve string) (*PrivateKey, []byte, error) { return xcrypto.GenerateKeyECDH(curve) } -+ -+func NewPrivateKey(curve string, key []byte) (*PrivateKey, error) { -+ return xcrypto.NewPrivateKeyECDH(curve, key) -+} -+ -+func NewPublicKey(curve string, key []byte) (*PublicKey, error) { -+ return xcrypto.NewPublicKeyECDH(curve, key) -+} -+ -+func ECDH(priv *PrivateKey, pub *PublicKey) ([]byte, error) { return xcrypto.ECDH(priv, pub) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_linux.go -new file mode 100644 -index 00000000000000..0c46cb3858c955 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_linux.go -@@ -0,0 +1,26 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ecdh -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type PrivateKey = openssl.PrivateKeyECDH -+type PublicKey = openssl.PublicKeyECDH -+ -+func SupportsCurve(curve string) bool { return openssl.SupportsCurve(curve) } -+ -+func GenerateKey(curve string) (*PrivateKey, []byte, error) { return openssl.GenerateKeyECDH(curve) } -+ -+func NewPrivateKey(curve string, key []byte) (*PrivateKey, error) { -+ return openssl.NewPrivateKeyECDH(curve, key) -+} -+ -+func NewPublicKey(curve string, key []byte) (*PublicKey, error) { -+ return openssl.NewPublicKeyECDH(curve, key) -+} -+ -+func ECDH(priv *PrivateKey, pub *PublicKey) ([]byte, error) { return openssl.ECDH(priv, pub) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_windows.go -new file mode 100644 -index 00000000000000..4e21a465b2b085 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/ecdh_windows.go -@@ -0,0 +1,32 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ecdh -+ -+import "github.com/microsoft/go-crypto-winnative/cng" -+ -+type PrivateKey = cng.PrivateKeyECDH -+type PublicKey = cng.PublicKeyECDH -+ -+func SupportsCurve(curve string) bool { -+ switch curve { -+ case "P-224", "P-256", "P-384", "P-521", "X25519": -+ return true -+ } -+ return false -+} -+ -+func GenerateKey(curve string) (*PrivateKey, []byte, error) { return cng.GenerateKeyECDH(curve) } -+ -+func NewPrivateKey(curve string, key []byte) (*PrivateKey, error) { -+ return cng.NewPrivateKeyECDH(curve, key) -+} -+ -+func NewPublicKey(curve string, key []byte) (*PublicKey, error) { -+ return cng.NewPublicKeyECDH(curve, key) -+} -+ -+func ECDH(priv *PrivateKey, pub *PublicKey) ([]byte, error) { return cng.ECDH(priv, pub) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/init.go -new file mode 100644 -index 00000000000000..581418bf1b9809 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package ecdh -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/nobackend.go -new file mode 100644 -index 00000000000000..ec110b3e1471ed ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdh/nobackend.go -@@ -0,0 +1,22 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package ecdh -+ -+type PrivateKey struct{} -+type PublicKey struct{} -+ -+func SupportsCurve(curve string) bool { panic("cryptobackend: not available") } -+func GenerateKey(curve string) (*PrivateKey, []byte, error) { panic("cryptobackend: not available") } -+func NewPrivateKey(curve string, key []byte) (*PrivateKey, error) { -+ panic("cryptobackend: not available") -+} -+func NewPublicKey(curve string, key []byte) (*PublicKey, error) { -+ panic("cryptobackend: not available") -+} -+func (k *PrivateKey) PublicKey() (*PublicKey, error) { panic("cryptobackend: not available") } -+func (k *PublicKey) Bytes() []byte { panic("cryptobackend: not available") } -+func ECDH(priv *PrivateKey, pub *PublicKey) ([]byte, error) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_darwin.go -new file mode 100644 -index 00000000000000..5c4fe0ba43beed ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_darwin.go -@@ -0,0 +1,37 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ecdsa -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type BigInt = xcrypto.BigInt -+type PrivateKey = xcrypto.PrivateKeyECDSA -+type PublicKey = xcrypto.PublicKeyECDSA -+ -+func SupportsCurve(curve string) bool { -+ switch curve { -+ case "P-256", "P-384", "P-521", "X25519": -+ return true -+ } -+ return false -+} -+ -+func GenerateKey(curve string) (X, Y, D BigInt, err error) { return xcrypto.GenerateKeyECDSA(curve) } -+ -+func NewPrivateKey(curve string, X, Y, D BigInt) (*PrivateKey, error) { -+ return xcrypto.NewPrivateKeyECDSA(curve, X, Y, D) -+} -+ -+func NewPublicKey(curve string, X, Y BigInt) (*PublicKey, error) { -+ return xcrypto.NewPublicKeyECDSA(curve, X, Y) -+} -+ -+func SignMarshal(priv *PrivateKey, hash []byte) ([]byte, error) { -+ return xcrypto.SignMarshalECDSA(priv, hash) -+} -+ -+func Verify(pub *PublicKey, hash, sig []byte) bool { return xcrypto.VerifyECDSA(pub, hash, sig) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_linux.go -new file mode 100644 -index 00000000000000..dedc0491ce3072 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_linux.go -@@ -0,0 +1,31 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ecdsa -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type BigInt = openssl.BigInt -+type PrivateKey = openssl.PrivateKeyECDSA -+type PublicKey = openssl.PublicKeyECDSA -+ -+func SupportsCurve(curve string) bool { return openssl.SupportsCurve(curve) } -+ -+func GenerateKey(curve string) (X, Y, D BigInt, err error) { return openssl.GenerateKeyECDSA(curve) } -+ -+func NewPrivateKey(curve string, X, Y, D BigInt) (*PrivateKey, error) { -+ return openssl.NewPrivateKeyECDSA(curve, X, Y, D) -+} -+ -+func NewPublicKey(curve string, X, Y BigInt) (*PublicKey, error) { -+ return openssl.NewPublicKeyECDSA(curve, X, Y) -+} -+ -+func SignMarshal(priv *PrivateKey, hash []byte) ([]byte, error) { -+ return openssl.SignMarshalECDSA(priv, hash) -+} -+ -+func Verify(pub *PublicKey, hash, sig []byte) bool { return openssl.VerifyECDSA(pub, hash, sig) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_windows.go -new file mode 100644 -index 00000000000000..d19262f7369ba6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/ecdsa_windows.go -@@ -0,0 +1,57 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ecdsa -+ -+import ( -+ _ "unsafe" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+type BigInt = cng.BigInt -+type PrivateKey = cng.PrivateKeyECDSA -+type PublicKey = cng.PublicKeyECDSA -+ -+func SupportsCurve(curve string) bool { -+ switch curve { -+ case "P-224", "P-256", "P-384", "P-521", "X25519": -+ return true -+ } -+ return false -+} -+ -+func GenerateKey(curve string) (X, Y, D BigInt, err error) { return cng.GenerateKeyECDSA(curve) } -+ -+func NewPrivateKey(curve string, X, Y, D BigInt) (*PrivateKey, error) { -+ return cng.NewPrivateKeyECDSA(curve, X, Y, D) -+} -+ -+func NewPublicKey(curve string, X, Y BigInt) (*PublicKey, error) { -+ return cng.NewPublicKeyECDSA(curve, X, Y) -+} -+ -+//go:linkname encodeSignature crypto/ecdsa.encodeSignature -+func encodeSignature(r, s []byte) ([]byte, error) -+ -+//go:linkname parseSignature crypto/ecdsa.parseSignature -+func parseSignature(sig []byte) (r, s []byte, err error) -+ -+func SignMarshal(priv *PrivateKey, hash []byte) ([]byte, error) { -+ r, s, err := cng.SignECDSA(priv, hash) -+ if err != nil { -+ return nil, err -+ } -+ return encodeSignature(r, s) -+} -+ -+func Verify(pub *PublicKey, hash, sig []byte) bool { -+ r, s, err := parseSignature(sig) -+ if err != nil { -+ return false -+ } -+ return cng.VerifyECDSA(pub, hash, cng.BigInt(r), cng.BigInt(s)) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/init.go -new file mode 100644 -index 00000000000000..9d257ffe06362e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package ecdsa -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/nobackend.go -new file mode 100644 -index 00000000000000..e435806685c325 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ecdsa/nobackend.go -@@ -0,0 +1,24 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package ecdsa -+ -+type BigInt = []uint -+type PrivateKey struct{ _ int } -+type PublicKey struct{ _ int } -+ -+func SupportsCurve(curve string) bool { panic("cryptobackend: not available") } -+func GenerateKey(curve string) (X, Y, D BigInt, err error) { panic("cryptobackend: not available") } -+func NewPrivateKey(curve string, X, Y, D BigInt) (*PrivateKey, error) { -+ panic("cryptobackend: not available") -+} -+func NewPublicKey(curve string, X, Y BigInt) (*PublicKey, error) { -+ panic("cryptobackend: not available") -+} -+func SignMarshal(priv *PrivateKey, hash []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func Verify(pub *PublicKey, hash, sig []byte) bool { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_darwin.go -new file mode 100644 -index 00000000000000..339ad263058c45 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_darwin.go -@@ -0,0 +1,24 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ed25519 -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type PrivateKey = xcrypto.PrivateKeyEd25519 -+type PublicKey = xcrypto.PublicKeyEd25519 -+ -+func Supports() bool { return true } -+func GenerateKey() (PrivateKey, error) { return xcrypto.GenerateKeyEd25519(), nil } -+func NewPrivateKey(priv []byte) (PrivateKey, error) { return xcrypto.NewPrivateKeyEd25519(priv) } -+func NewPublicKey(pub []byte) (PublicKey, error) { return xcrypto.NewPublicKeyEd25519(pub) } -+func NewPrivateKeyFromSeed(seed []byte) (PrivateKey, error) { -+ return xcrypto.NewPrivateKeyEd25519FromSeed(seed) -+} -+func Sign(priv PrivateKey, message []byte) ([]byte, error) { return xcrypto.SignEd25519(priv, message) } -+func Verify(pub PublicKey, message, sig []byte) error { -+ return xcrypto.VerifyEd25519(pub, message, sig) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_linux.go -new file mode 100644 -index 00000000000000..2a396ab5a7e6aa ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_linux.go -@@ -0,0 +1,24 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ed25519 -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type PrivateKey = *openssl.PrivateKeyEd25519 -+type PublicKey = *openssl.PublicKeyEd25519 -+ -+func Supports() bool { return openssl.SupportsEd25519() } -+func GenerateKey() (PrivateKey, error) { return openssl.GenerateKeyEd25519() } -+func NewPrivateKey(priv []byte) (PrivateKey, error) { return openssl.NewPrivateKeyEd25519(priv) } -+func NewPublicKey(pub []byte) (PublicKey, error) { return openssl.NewPublicKeyEd25519(pub) } -+func NewPrivateKeyFromSeed(seed []byte) (PrivateKey, error) { -+ return openssl.NewPrivateKeyEd25519FromSeed(seed) -+} -+func Sign(priv PrivateKey, message []byte) ([]byte, error) { return openssl.SignEd25519(priv, message) } -+func Verify(pub PublicKey, message, sig []byte) error { -+ return openssl.VerifyEd25519(pub, message, sig) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_windows.go -new file mode 100644 -index 00000000000000..7802098b6a9c56 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/ed25519_windows.go -@@ -0,0 +1,21 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package ed25519 -+ -+type PrivateKey struct{} -+type PublicKey struct{} -+ -+func (k PrivateKey) Bytes() ([]byte, error) { panic("cryptobackend: not available") } -+func (k PublicKey) Bytes() ([]byte, error) { panic("cryptobackend: not available") } -+ -+func Supports() bool { return false } -+func GenerateKey() (PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPrivateKey(priv []byte) (PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPublicKey(pub []byte) (PublicKey, error) { panic("cryptobackend: not available") } -+func NewPrivateKeyFromSeed(seed []byte) (PrivateKey, error) { panic("cryptobackend: not available") } -+func Sign(priv PrivateKey, message []byte) ([]byte, error) { panic("cryptobackend: not available") } -+func Verify(pub PublicKey, message, sig []byte) error { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/init.go -new file mode 100644 -index 00000000000000..b8321dff37e05e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package ed25519 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/nobackend.go -new file mode 100644 -index 00000000000000..a666c8143e84d8 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/ed25519/nobackend.go -@@ -0,0 +1,21 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package ed25519 -+ -+type PrivateKey struct{} -+type PublicKey struct{} -+ -+func (k PrivateKey) Bytes() ([]byte, error) { panic("cryptobackend: not available") } -+func (k PublicKey) Bytes() ([]byte, error) { panic("cryptobackend: not available") } -+ -+func Supports() bool { panic("cryptobackend: not available") } -+func GenerateKey() (PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPrivateKey(priv []byte) (PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPublicKey(pub []byte) (PublicKey, error) { panic("cryptobackend: not available") } -+func NewPrivateKeyFromSeed(seed []byte) (PrivateKey, error) { panic("cryptobackend: not available") } -+func Sign(priv PrivateKey, message []byte) ([]byte, error) { panic("cryptobackend: not available") } -+func Verify(pub PublicKey, message, sig []byte) error { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/fips140/fips140.go b/src/vendor/github.com/microsoft/go/cryptobackend/fips140/fips140.go -new file mode 100644 -index 00000000000000..2b98ef4138312e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/fips140/fips140.go -@@ -0,0 +1,15 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package fips140 -+ -+import ( -+ "github.com/microsoft/go/cryptobackend/internal/fips140state" -+) -+ -+// Enabled reports whether FIPS 140 mode is enabled by using GODEBUG, GOFIPS, -+// GOLANG_FIPS, or any platform-specific mechanism. -+func Enabled() bool { -+ return fips140state.Enabled() -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_darwin.go -new file mode 100644 -index 00000000000000..30b7bebbacd109 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_darwin.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hash -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Approved(h hash.Hash) bool { return xcrypto.FIPSApprovedHash(h) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_linux.go -new file mode 100644 -index 00000000000000..453a666f292419 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_linux.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hash -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Approved(h hash.Hash) bool { return openssl.FIPSApprovedHash(h) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_windows.go -new file mode 100644 -index 00000000000000..9767cb7aa3e73e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hash/hash_windows.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hash -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Approved(h hash.Hash) bool { return cng.FIPSApprovedHash(h) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hash/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/hash/nobackend.go -new file mode 100644 -index 00000000000000..e5844f1d94a65d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hash/nobackend.go -@@ -0,0 +1,11 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package hash -+ -+import "hash" -+ -+func Approved(h hash.Hash) bool { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf.go b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf.go -new file mode 100644 -index 00000000000000..ac9d5cd23236c2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf.go -@@ -0,0 +1,15 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package hkdf -+ -+import "hash" -+ -+func Key[H hash.Hash](h func() H, secret, salt, info []byte, keyLen int) ([]byte, error) { -+ prk, err := Extract(h, secret, salt) -+ if err != nil { -+ return nil, err -+ } -+ return Expand(h, prk, info, keyLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_darwin.go -new file mode 100644 -index 00000000000000..3393f3708ddfed ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_darwin.go -@@ -0,0 +1,21 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hkdf -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Supports() bool { return true } -+func Extract[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ return xcrypto.ExtractHKDF(h, secret, salt) -+} -+func Expand[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLen int) ([]byte, error) { -+ return xcrypto.ExpandHKDF(h, pseudorandomKey, info, keyLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_linux.go -new file mode 100644 -index 00000000000000..25b816f14ef1bf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_linux.go -@@ -0,0 +1,21 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hkdf -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Supports() bool { return openssl.SupportsHKDF() } -+func Extract[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ return openssl.ExtractHKDF(h, secret, salt) -+} -+func Expand[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLen int) ([]byte, error) { -+ return openssl.ExpandHKDF(h, pseudorandomKey, info, keyLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_windows.go -new file mode 100644 -index 00000000000000..5e042f504c32d5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/hkdf_windows.go -@@ -0,0 +1,21 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hkdf -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Supports() bool { return cng.SupportsHKDF() } -+func Extract[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ return cng.ExtractHKDF(h, secret, salt) -+} -+func Expand[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLen int) ([]byte, error) { -+ return cng.ExpandHKDF(h, pseudorandomKey, info, keyLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/init.go -new file mode 100644 -index 00000000000000..78838e1a5df924 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package hkdf -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/nobackend.go -new file mode 100644 -index 00000000000000..ccc52d824a2c4c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hkdf/nobackend.go -@@ -0,0 +1,17 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package hkdf -+ -+import "hash" -+ -+func Supports() bool { panic("cryptobackend: not available") } -+func Extract[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func Expand[H hash.Hash](h func() H, pseudorandomKey, info []byte, keyLen int) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_darwin.go -new file mode 100644 -index 00000000000000..9623b2e99b8cad ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_darwin.go -@@ -0,0 +1,17 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hmac -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func New[H hash.Hash](h func() H, key []byte) hash.Hash { -+ return xcrypto.NewHMAC(h, key) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_linux.go -new file mode 100644 -index 00000000000000..c5f029b2c61fb3 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_linux.go -@@ -0,0 +1,17 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hmac -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func New[H hash.Hash](h func() H, key []byte) hash.Hash { -+ return openssl.NewHMAC(h, key) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_windows.go -new file mode 100644 -index 00000000000000..56d313c19608bd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/hmac_windows.go -@@ -0,0 +1,17 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package hmac -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func New[H hash.Hash](h func() H, key []byte) hash.Hash { -+ return cng.NewHMAC(h, key) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hmac/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/init.go -new file mode 100644 -index 00000000000000..99d6e62025e92a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package hmac -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/hmac/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/nobackend.go -new file mode 100644 -index 00000000000000..b76bb3356fc26b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/hmac/nobackend.go -@@ -0,0 +1,11 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package hmac -+ -+import "hash" -+ -+func New[H hash.Hash](h func() H, key []byte) hash.Hash { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/isrequirefips.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/isrequirefips.go -new file mode 100644 -index 00000000000000..122185bb417d3c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/isrequirefips.go -@@ -0,0 +1,9 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build requirefips -+ -+package fips140state -+ -+const isRequireFIPS = true -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/norequirefips.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/norequirefips.go -new file mode 100644 -index 00000000000000..1967f167d30436 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/norequirefips.go -@@ -0,0 +1,9 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !requirefips -+ -+package fips140state -+ -+const isRequireFIPS = false -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/nosystemcrypto.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/nosystemcrypto.go -new file mode 100644 -index 00000000000000..28ec07f7b20eaf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/nosystemcrypto.go -@@ -0,0 +1,11 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package fips140state -+ -+func systemFIPSMode() bool { -+ return false -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/requirefips_nosystemcrypto.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/requirefips_nosystemcrypto.go -new file mode 100644 -index 00000000000000..4fe623e27e1d35 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/requirefips_nosystemcrypto.go -@@ -0,0 +1,15 @@ -+// Copyright 2025 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build requirefips && !goexperiment.systemcrypto -+ -+package fips140state -+ -+func init() { -+ ` -+ The requirefips tag is enabled, but no crypto backend is enabled. -+ A crypto backend is required to enable FIPS mode. -+ For more information, visit https://github.com/microsoft/go/tree/microsoft/main/eng/doc/fips -+ ` -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_off.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_off.go -new file mode 100644 -index 00000000000000..b8458bb58011d5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_off.go -@@ -0,0 +1,9 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !ms_skipfipscheck -+ -+package fips140state -+ -+const isSkipFIPSCheck = false -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_on.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_on.go -new file mode 100644 -index 00000000000000..d13b8a7d07916e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/skipfipscheck_on.go -@@ -0,0 +1,9 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build ms_skipfipscheck -+ -+package fips140state -+ -+const isSkipFIPSCheck = true -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state.go -new file mode 100644 -index 00000000000000..7fc56a55282e88 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state.go -@@ -0,0 +1,88 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package fips140state -+ -+import ( -+ "errors" -+ "runtime" -+ "syscall" -+) -+ -+var enabled bool -+ -+// message is a human-readable message about how [Enabled] was set. -+var message string -+ -+func init() { -+ // TODO: Decide which environment variable to use. -+ // See https://github.com/microsoft/go/issues/397. -+ enabled, message = detect(fips140GODEBUG, syscall.Getenv, systemFIPSMode) -+} -+ -+func Enabled() bool { -+ return enabled -+} -+ -+func Check(backendEnabled bool, fips func() bool) error { -+ if isRequireFIPS { -+ if isSkipFIPSCheck { -+ panic("the 'requirefips' build tag is enabled, but it conflicts " + -+ "with the 'ms_skipfipscheck' build tag") -+ } -+ message = "requirefips tag set" -+ enabled = true -+ } -+ if isSkipFIPSCheck || !enabled { -+ return nil -+ } -+ if !backendEnabled { -+ if runtime.GOOS != "linux" && runtime.GOOS != "windows" && runtime.GOOS != "darwin" { -+ return errors.New("FIPS mode requested (" + message + ") but no crypto backend is supported on " + runtime.GOOS) -+ } -+ return errors.New("FIPS mode requested (" + message + ") but no supported crypto backend is enabled") -+ } -+ if !fips() { -+ return errors.New("FIPS mode requested (" + message + ") but not available") -+ } -+ return nil -+} -+ -+// detect reports whether FIPS 140 mode should be enabled and returns a -+// human-readable message describing how the decision was made. -+// -+// godebug is the value of the fips140 GODEBUG setting. getenv is used to look -+// up the GOFIPS and GOLANG_FIPS environment variables and mirrors the -+// semantics of [syscall.Getenv]. systemFIPS reports whether the platform -+// indicates that FIPS mode should be enabled (e.g. the Linux kernel FIPS flag). -+// -+// The inputs are taken as parameters, rather than read directly, to make the -+// detection logic easy to test without depending on process state. -+func detect(godebug string, getenv func(string) (string, bool), systemFIPS func() bool) (enabled bool, message string) { -+ switch godebug { -+ case "on", "only", "debug": -+ return true, "environment variable GODEBUG=fips140=" + godebug -+ case "off": -+ // GODEBUG=fips140=off explicitly disables FIPS mode and bypasses -+ // the platform-specific FIPS detection (e.g. the Linux kernel FIPS flag). -+ // This is the only supported way to skip the platform FIPS detection. -+ return false, "environment variable GODEBUG=fips140=off" -+ } -+ // Only "1" is a meaningful value for GOFIPS and GOLANG_FIPS. Any other -+ // value (including "0" and the empty string) is treated as if the -+ // variable were unset, to match the documented behavior and to avoid -+ // silently bypassing the platform FIPS detection due to a typo or -+ // accidental setting. To explicitly disable FIPS mode and skip the -+ // platform FIPS detection, use GODEBUG=fips140=off. -+ if v, ok := getenv("GOFIPS"); ok && v == "1" { -+ return true, "environment variable GOFIPS=1" -+ } -+ if v, ok := getenv("GOLANG_FIPS"); ok && v == "1" { -+ return true, "environment variable GOLANG_FIPS=1" -+ } -+ if systemFIPS() { -+ return true, "system FIPS mode" -+ } -+ return false, "" -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_msgostd.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_msgostd.go -new file mode 100644 -index 00000000000000..b65c80ec4555c1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_msgostd.go -@@ -0,0 +1,11 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build msgostd -+ -+package fips140state -+ -+import "internal/godebug" -+ -+var fips140GODEBUG = godebug.New("fips140").Value() -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_nomsgostd.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_nomsgostd.go -new file mode 100644 -index 00000000000000..0b8449193868f0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/state_nomsgostd.go -@@ -0,0 +1,9 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !msgostd -+ -+package fips140state -+ -+var fips140GODEBUG = "off" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_darwin.go -new file mode 100644 -index 00000000000000..a6fba27162a6ef ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_darwin.go -@@ -0,0 +1,11 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package fips140state -+ -+func systemFIPSMode() bool { -+ return false -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_linux.go -new file mode 100644 -index 00000000000000..943cee5223368c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_linux.go -@@ -0,0 +1,57 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package fips140state -+ -+import ( -+ _ "github.com/microsoft/go/cryptobackend/internal/opensslsetup" -+ "syscall" -+ -+ "github.com/microsoft/go-crypto-openssl/osslsetup" -+) -+ -+// systemFIPSMode reports whether the system is in FIPS mode. -+// It first checks the kernel, and if that is not available, it checks the -+// OpenSSL library. -+func systemFIPSMode() bool { -+ if kernelFIPSMode() { -+ return true -+ } -+ return osslsetup.FIPS() -+} -+ -+// kernelFIPSMode reports whether the kernel is in FIPS mode. -+func kernelFIPSMode() bool { -+ var fd int -+ for { -+ var err error -+ fd, err = syscall.Open("/proc/sys/crypto/fips_enabled", syscall.O_RDONLY, 0) -+ if err == nil { -+ break -+ } -+ switch err { -+ case syscall.EINTR: -+ continue -+ case syscall.ENOENT: -+ return false -+ default: -+ // If there is an error reading we could either panic or assume FIPS is not enabled. -+ // Panicking would be too disruptive for apps that don't require FIPS. -+ // If an app wants to be 100% sure that is running in FIPS mode -+ // it should use fips140.Enabled() or GODEBUG=fips140=1. -+ return false -+ } -+ } -+ defer syscall.Close(fd) -+ var tmp [1]byte -+ n, err := syscall.Read(fd, tmp[:]) -+ if n != 1 || err != nil { -+ // We return false instead of panicing for the same reason as before. -+ return false -+ } -+ // fips_enabled can be either '0' or '1'. -+ return tmp[0] == '1' -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_windows.go -new file mode 100644 -index 00000000000000..2dc899297e4c3d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/fips140state/systemfips_windows.go -@@ -0,0 +1,32 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package fips140state -+ -+import ( -+ "syscall" -+ "unsafe" -+) -+ -+// Don't use github.com/microsoft/go-crypto-winnative here. -+// The fips140 package should have minimal dependencies. -+// Also, don't directly query the system FIPS mode from the registry, -+// there are some no-longer documented legacy entries that can enable FIPS mode, -+// and BCryptGetFipsAlgorithmMode supports them all. -+var ( -+ bcrypt = syscall.MustLoadDLL("bcrypt.dll") -+ -+ bcryptGetFipsAlgorithmMode = bcrypt.MustFindProc("BCryptGetFipsAlgorithmMode") -+) -+ -+func systemFIPSMode() bool { -+ var enabled uint32 -+ ret, _, _ := bcryptGetFipsAlgorithmMode.Call(uintptr(unsafe.Pointer(&enabled))) -+ if ret != 0 { -+ return false -+ } -+ return enabled != 0 -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/opensslsetup_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/opensslsetup_linux.go -new file mode 100644 -index 00000000000000..350c8ee7fa2bc6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/opensslsetup_linux.go -@@ -0,0 +1,68 @@ -+// Copyright 2025 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+// opensslsetup is a package that initializes the OpenSSL library. -+// It doesn't export any symbol, but blank importing it has the -+// side effect of initializing the OpenSSL library. -+package opensslsetup -+ -+import ( -+ "syscall" -+ -+ "github.com/microsoft/go-crypto-openssl/osslsetup" -+) -+ -+// knownVersions is a list of supported and well-known libcrypto.so suffixes in decreasing version order. -+// FreeBSD library version numbering does not directly align to the version of osslsetup. -+// Its preferred search order is 11 -> 111. -+var knownVersions = [...]string{"3", "1.1", "11", "111"} -+ -+const lcryptoPrefix = "libcrypto.so." -+ -+func init() { -+ lib := library() -+ if err := osslsetup.Init(lib); err != nil { -+ panic("opensslcrypto: can't initialize OpenSSL " + lib + ": " + err.Error()) -+ } -+} -+ -+// library returns the name of the OpenSSL library to use. -+// It first checks the environment variable GO_OPENSSL_VERSION_OVERRIDE. -+// If that is not set, it searches a well-known list of library names. -+// If no library is found, it returns "libcrypto.so". -+func library() string { -+ if version, _ := syscall.Getenv("GO_OPENSSL_VERSION_OVERRIDE"); version != "" { -+ return lcryptoPrefix + version -+ } -+ if lib := searchKnownLibrary(); lib != "" { -+ return lib -+ } -+ return lcryptoPrefix[:len(lcryptoPrefix)-1] // no version found, try without version suffix -+} -+ -+// checkVersion is a variable that holds the osslsetup.CheckVersion function. -+// It is initialized in the init function to allow overriding in tests. -+var checkVersion = osslsetup.CheckVersion -+ -+// searchKnownLibrary returns the name of the highest available FIPS-enabled version of OpenSSL -+// using the known library suffixes. -+// If no FIPS-enabled version is found, it returns the name of the highest available version. -+// If no version is found, it returns an empty string. -+func searchKnownLibrary() string { -+ var lcryptoFallback string -+ for _, v := range knownVersions { -+ lcryptoCandidate := lcryptoPrefix + v -+ if exists, fips := checkVersion(lcryptoCandidate); exists { -+ if fips { -+ return lcryptoCandidate -+ } -+ if lcryptoFallback == "" { -+ lcryptoFallback = lcryptoCandidate -+ } -+ } -+ } -+ return lcryptoFallback -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/stub.go b/src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/stub.go -new file mode 100644 -index 00000000000000..19fd29e19e7b96 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/internal/opensslsetup/stub.go -@@ -0,0 +1,8 @@ -+// Copyright 2025 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Placeholder to allow the opensslsetup package to be imported -+// without cgo enabled or without goexperiment.systemcrypto on linux. -+ -+package opensslsetup -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/md5/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/md5/init.go -new file mode 100644 -index 00000000000000..c9e96039ca836d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/md5/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package md5 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_darwin.go -new file mode 100644 -index 00000000000000..2d5cd1659573c5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_darwin.go -@@ -0,0 +1,20 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package md5 -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Supports() bool { return xcrypto.SupportsHash(crypto.MD5) } -+ -+func New() hash.Hash { return xcrypto.NewMD5() } -+ -+func Sum(data []byte) [16]byte { return xcrypto.MD5(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_linux.go -new file mode 100644 -index 00000000000000..99c922e5040b16 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_linux.go -@@ -0,0 +1,20 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package md5 -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Supports() bool { return openssl.SupportsHash(crypto.MD5) } -+ -+func New() hash.Hash { return openssl.NewMD5() } -+ -+func Sum(data []byte) [16]byte { return openssl.MD5(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_windows.go -new file mode 100644 -index 00000000000000..613ad4aa9177da ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/md5/md5_windows.go -@@ -0,0 +1,20 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package md5 -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Supports() bool { return cng.SupportsHash(crypto.MD5) } -+ -+func New() hash.Hash { return cng.NewMD5() } -+ -+func Sum(data []byte) [16]byte { return cng.MD5(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/md5/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/md5/nobackend.go -new file mode 100644 -index 00000000000000..448046680b09b7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/md5/nobackend.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package md5 -+ -+import "hash" -+ -+func Supports() bool { panic("cryptobackend: not available") } -+ -+func New() hash.Hash { panic("cryptobackend: not available") } -+ -+func Sum(data []byte) [16]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/init.go -new file mode 100644 -index 00000000000000..370d574f5bb2d2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package mldsa -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_darwin.go -new file mode 100644 -index 00000000000000..2888d5253905d0 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_darwin.go -@@ -0,0 +1,26 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package mldsa -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type Parameters = xcrypto.MLDSAParameters -+type PrivateKey = xcrypto.PrivateKeyMLDSA -+type PublicKey = xcrypto.PublicKeyMLDSA -+ -+func MLDSA44() Parameters { return Parameters{} } -+func MLDSA65() Parameters { return xcrypto.MLDSA65() } -+func MLDSA87() Parameters { return xcrypto.MLDSA87() } -+func Supports(params Parameters) bool { return xcrypto.SupportsMLDSA(params) } -+func SupportsExternalMu() bool { return false } -+func GenerateKey(params Parameters) (*PrivateKey, error) { return xcrypto.GenerateKeyMLDSA(params) } -+func NewPrivateKey(params Parameters, seed []byte) (*PrivateKey, error) { -+ return xcrypto.NewPrivateKeyMLDSA(params, seed) -+} -+func NewPublicKey(params Parameters, publicKey []byte) (*PublicKey, error) { -+ return xcrypto.NewPublicKeyMLDSA(params, publicKey) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_linux.go -new file mode 100644 -index 00000000000000..51b08c69dd8226 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_linux.go -@@ -0,0 +1,26 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package mldsa -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type Parameters = openssl.MLDSAParameters -+type PrivateKey = openssl.PrivateKeyMLDSA -+type PublicKey = openssl.PublicKeyMLDSA -+ -+func MLDSA44() Parameters { return openssl.MLDSA44() } -+func MLDSA65() Parameters { return openssl.MLDSA65() } -+func MLDSA87() Parameters { return openssl.MLDSA87() } -+func Supports(params Parameters) bool { return openssl.SupportsMLDSA(params) } -+func SupportsExternalMu() bool { return true } -+func GenerateKey(params Parameters) (*PrivateKey, error) { return openssl.GenerateKeyMLDSA(params) } -+func NewPrivateKey(params Parameters, seed []byte) (*PrivateKey, error) { -+ return openssl.NewPrivateKeyMLDSA(params, seed) -+} -+func NewPublicKey(params Parameters, publicKey []byte) (*PublicKey, error) { -+ return openssl.NewPublicKeyMLDSA(params, publicKey) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_windows.go -new file mode 100644 -index 00000000000000..b71f10a2d50b98 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/mldsa_windows.go -@@ -0,0 +1,26 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package mldsa -+ -+import "github.com/microsoft/go-crypto-winnative/cng" -+ -+type Parameters = cng.MLDSAParameters -+type PrivateKey = cng.PrivateKeyMLDSA -+type PublicKey = cng.PublicKeyMLDSA -+ -+func MLDSA44() Parameters { return cng.MLDSA44() } -+func MLDSA65() Parameters { return cng.MLDSA65() } -+func MLDSA87() Parameters { return cng.MLDSA87() } -+func Supports(params Parameters) bool { return cng.SupportsMLDSA() } -+func SupportsExternalMu() bool { return true } -+func GenerateKey(params Parameters) (*PrivateKey, error) { return cng.GenerateKeyMLDSA(params) } -+func NewPrivateKey(params Parameters, seed []byte) (*PrivateKey, error) { -+ return cng.NewPrivateKeyMLDSA(params, seed) -+} -+func NewPublicKey(params Parameters, publicKey []byte) (*PublicKey, error) { -+ return cng.NewPublicKeyMLDSA(params, publicKey) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/nobackend.go -new file mode 100644 -index 00000000000000..73adf24df4e98d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mldsa/nobackend.go -@@ -0,0 +1,44 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package mldsa -+ -+type Parameters struct{} -+type PrivateKey struct{} -+type PublicKey struct{} -+ -+func MLDSA44() Parameters { panic("cryptobackend: not available") } -+func MLDSA65() Parameters { panic("cryptobackend: not available") } -+func MLDSA87() Parameters { panic("cryptobackend: not available") } -+func (params Parameters) String() string { panic("cryptobackend: not available") } -+func Supports(params Parameters) bool { panic("cryptobackend: not available") } -+func SupportsExternalMu() bool { panic("cryptobackend: not available") } -+func GenerateKey(params Parameters) (*PrivateKey, error) { panic("cryptobackend: not available") } -+func NewPrivateKey(params Parameters, seed []byte) (*PrivateKey, error) { -+ panic("cryptobackend: not available") -+} -+func NewPublicKey(params Parameters, publicKey []byte) (*PublicKey, error) { -+ panic("cryptobackend: not available") -+} -+func (key *PrivateKey) Bytes() []byte { panic("cryptobackend: not available") } -+func (key *PrivateKey) Equal(other *PrivateKey) bool { panic("cryptobackend: not available") } -+func (key *PrivateKey) Parameters() Parameters { panic("cryptobackend: not available") } -+func (key *PrivateKey) PublicKey() *PublicKey { panic("cryptobackend: not available") } -+func (key *PrivateKey) Sign(message []byte, context string) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func (key *PrivateKey) SignExternalMu(mu []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func (key *PublicKey) Bytes() []byte { panic("cryptobackend: not available") } -+func (key *PublicKey) Equal(other *PublicKey) bool { panic("cryptobackend: not available") } -+func (key *PublicKey) Parameters() Parameters { panic("cryptobackend: not available") } -+func (key *PublicKey) Verify(message, signature []byte, context string) error { -+ panic("cryptobackend: not available") -+} -+func (key *PublicKey) VerifyExternalMu(mu, signature []byte) error { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/init.go -new file mode 100644 -index 00000000000000..0148516f57ae02 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package mlkem -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_darwin.go -new file mode 100644 -index 00000000000000..9a0cc2702913db ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_darwin.go -@@ -0,0 +1,31 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package mlkem -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type DecapsulationKey768 = xcrypto.DecapsulationKeyMLKEM768 -+type EncapsulationKey768 = xcrypto.EncapsulationKeyMLKEM768 -+type DecapsulationKey1024 = xcrypto.DecapsulationKeyMLKEM1024 -+type EncapsulationKey1024 = xcrypto.EncapsulationKeyMLKEM1024 -+ -+func Supports768() bool { return xcrypto.SupportsMLKEM() } -+func Supports1024() bool { return xcrypto.SupportsMLKEM() } -+func GenerateKey768() (DecapsulationKey768, error) { return xcrypto.GenerateKeyMLKEM768() } -+func NewDecapsulationKey768(seed []byte) (DecapsulationKey768, error) { -+ return xcrypto.NewDecapsulationKeyMLKEM768(seed) -+} -+func NewEncapsulationKey768(encapsulationKey []byte) (EncapsulationKey768, error) { -+ return xcrypto.NewEncapsulationKeyMLKEM768(encapsulationKey) -+} -+func GenerateKey1024() (DecapsulationKey1024, error) { return xcrypto.GenerateKeyMLKEM1024() } -+func NewDecapsulationKey1024(seed []byte) (DecapsulationKey1024, error) { -+ return xcrypto.NewDecapsulationKeyMLKEM1024(seed) -+} -+func NewEncapsulationKey1024(encapsulationKey []byte) (EncapsulationKey1024, error) { -+ return xcrypto.NewEncapsulationKeyMLKEM1024(encapsulationKey) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_linux.go -new file mode 100644 -index 00000000000000..f8320035cc8a6d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_linux.go -@@ -0,0 +1,31 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package mlkem -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type DecapsulationKey768 = openssl.DecapsulationKeyMLKEM768 -+type EncapsulationKey768 = openssl.EncapsulationKeyMLKEM768 -+type DecapsulationKey1024 = openssl.DecapsulationKeyMLKEM1024 -+type EncapsulationKey1024 = openssl.EncapsulationKeyMLKEM1024 -+ -+func Supports768() bool { return openssl.SupportsMLKEM768() } -+func Supports1024() bool { return openssl.SupportsMLKEM1024() } -+func GenerateKey768() (DecapsulationKey768, error) { return openssl.GenerateKeyMLKEM768() } -+func NewDecapsulationKey768(seed []byte) (DecapsulationKey768, error) { -+ return openssl.NewDecapsulationKeyMLKEM768(seed) -+} -+func NewEncapsulationKey768(encapsulationKey []byte) (EncapsulationKey768, error) { -+ return openssl.NewEncapsulationKeyMLKEM768(encapsulationKey) -+} -+func GenerateKey1024() (DecapsulationKey1024, error) { return openssl.GenerateKeyMLKEM1024() } -+func NewDecapsulationKey1024(seed []byte) (DecapsulationKey1024, error) { -+ return openssl.NewDecapsulationKeyMLKEM1024(seed) -+} -+func NewEncapsulationKey1024(encapsulationKey []byte) (EncapsulationKey1024, error) { -+ return openssl.NewEncapsulationKeyMLKEM1024(encapsulationKey) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_windows.go -new file mode 100644 -index 00000000000000..b4b7cf41660673 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/mlkem_windows.go -@@ -0,0 +1,31 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package mlkem -+ -+import "github.com/microsoft/go-crypto-winnative/cng" -+ -+type DecapsulationKey768 = cng.DecapsulationKeyMLKEM768 -+type EncapsulationKey768 = cng.EncapsulationKeyMLKEM768 -+type DecapsulationKey1024 = cng.DecapsulationKeyMLKEM1024 -+type EncapsulationKey1024 = cng.EncapsulationKeyMLKEM1024 -+ -+func Supports768() bool { return cng.SupportsMLKEM() } -+func Supports1024() bool { return cng.SupportsMLKEM() } -+func GenerateKey768() (DecapsulationKey768, error) { return cng.GenerateKeyMLKEM768() } -+func NewDecapsulationKey768(seed []byte) (DecapsulationKey768, error) { -+ return cng.NewDecapsulationKeyMLKEM768(seed) -+} -+func NewEncapsulationKey768(encapsulationKey []byte) (EncapsulationKey768, error) { -+ return cng.NewEncapsulationKeyMLKEM768(encapsulationKey) -+} -+func GenerateKey1024() (DecapsulationKey1024, error) { return cng.GenerateKeyMLKEM1024() } -+func NewDecapsulationKey1024(seed []byte) (DecapsulationKey1024, error) { -+ return cng.NewDecapsulationKeyMLKEM1024(seed) -+} -+func NewEncapsulationKey1024(encapsulationKey []byte) (EncapsulationKey1024, error) { -+ return cng.NewEncapsulationKeyMLKEM1024(encapsulationKey) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/nobackend.go -new file mode 100644 -index 00000000000000..6340abf8fab44f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/mlkem/nobackend.go -@@ -0,0 +1,51 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package mlkem -+ -+type DecapsulationKey768 struct{} -+type EncapsulationKey768 struct{} -+type DecapsulationKey1024 struct{} -+type EncapsulationKey1024 struct{} -+ -+func Supports768() bool { panic("cryptobackend: not available") } -+func Supports1024() bool { panic("cryptobackend: not available") } -+func GenerateKey768() (DecapsulationKey768, error) { panic("cryptobackend: not available") } -+func NewDecapsulationKey768(seed []byte) (DecapsulationKey768, error) { -+ panic("cryptobackend: not available") -+} -+func NewEncapsulationKey768(encapsulationKey []byte) (EncapsulationKey768, error) { -+ panic("cryptobackend: not available") -+} -+func (dk DecapsulationKey768) Bytes() []byte { panic("cryptobackend: not available") } -+func (dk DecapsulationKey768) Decapsulate(ciphertext []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func (dk DecapsulationKey768) EncapsulationKey() EncapsulationKey768 { -+ panic("cryptobackend: not available") -+} -+func (ek EncapsulationKey768) Bytes() []byte { panic("cryptobackend: not available") } -+func (ek EncapsulationKey768) Encapsulate() (sharedKey, ciphertext []byte) { -+ panic("cryptobackend: not available") -+} -+func GenerateKey1024() (DecapsulationKey1024, error) { panic("cryptobackend: not available") } -+func NewDecapsulationKey1024(seed []byte) (DecapsulationKey1024, error) { -+ panic("cryptobackend: not available") -+} -+func NewEncapsulationKey1024(encapsulationKey []byte) (EncapsulationKey1024, error) { -+ panic("cryptobackend: not available") -+} -+func (dk DecapsulationKey1024) Bytes() []byte { panic("cryptobackend: not available") } -+func (dk DecapsulationKey1024) Decapsulate(ciphertext []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func (dk DecapsulationKey1024) EncapsulationKey() EncapsulationKey1024 { -+ panic("cryptobackend: not available") -+} -+func (ek EncapsulationKey1024) Bytes() []byte { panic("cryptobackend: not available") } -+func (ek EncapsulationKey1024) Encapsulate() (sharedKey, ciphertext []byte) { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/nobackend.go -new file mode 100644 -index 00000000000000..5c7c1fc6d53878 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/nobackend.go -@@ -0,0 +1,15 @@ -+// Copyright 2017 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package backend -+ -+func init() { -+ if err := checkFIPS(func() bool { return false }); err != nil { -+ panic(err) -+ } -+} -+ -+const Enabled = false -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/init.go -new file mode 100644 -index 00000000000000..89a597b39369ce ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package pbkdf2 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/nobackend.go -new file mode 100644 -index 00000000000000..67b8f139f0bd58 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/nobackend.go -@@ -0,0 +1,14 @@ -+// Copyright 2012 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package pbkdf2 -+ -+import "hash" -+ -+func Supports() bool { panic("cryptobackend: not available") } -+func Key[H hash.Hash](h func() H, password, salt []byte, iter, keyLen int) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_darwin.go -new file mode 100644 -index 00000000000000..6e3be3909d18c6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_darwin.go -@@ -0,0 +1,18 @@ -+// Copyright 2012 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package pbkdf2 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Supports() bool { return true } -+func Key[H hash.Hash](h func() H, password, salt []byte, iter, keyLen int) ([]byte, error) { -+ return xcrypto.PBKDF2(password, salt, iter, keyLen, h) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_linux.go -new file mode 100644 -index 00000000000000..6a709121ae5ddf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_linux.go -@@ -0,0 +1,18 @@ -+// Copyright 2012 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package pbkdf2 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Supports() bool { return openssl.SupportsPBKDF2() } -+func Key[H hash.Hash](h func() H, password, salt []byte, iter, keyLen int) ([]byte, error) { -+ return openssl.PBKDF2(password, salt, iter, keyLen, h) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_windows.go -new file mode 100644 -index 00000000000000..f7d2ec9960a412 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/pbkdf2/pbkdf2_windows.go -@@ -0,0 +1,18 @@ -+// Copyright 2012 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package pbkdf2 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Supports() bool { return true } -+func Key[H hash.Hash](h func() H, password, salt []byte, iter, keyLen int) ([]byte, error) { -+ return cng.PBKDF2(password, salt, iter, keyLen, h) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rc4/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/init.go -new file mode 100644 -index 00000000000000..7ddcec9bba9a89 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package rc4 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rc4/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/nobackend.go -new file mode 100644 -index 00000000000000..086c022ac44b1a ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/nobackend.go -@@ -0,0 +1,17 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package rc4 -+ -+type Cipher struct{} -+ -+func (c *Cipher) Reset() { panic("cryptobackend: not available") } -+ -+func (c *Cipher) XORKeyStream(dst, src []byte) { panic("cryptobackend: not available") } -+ -+func Supports() bool { panic("cryptobackend: not available") } -+ -+func New(key []byte) (*Cipher, error) { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_darwin.go -new file mode 100644 -index 00000000000000..ddcff4caa4da2e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_darwin.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package rc4 -+ -+import "github.com/microsoft/go-crypto-darwin/xcrypto" -+ -+type Cipher = xcrypto.RC4Cipher -+ -+func Supports() bool { return true } -+ -+func New(key []byte) (*Cipher, error) { return xcrypto.NewRC4Cipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_linux.go -new file mode 100644 -index 00000000000000..b1229abc6cb995 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_linux.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package rc4 -+ -+import "github.com/microsoft/go-crypto-openssl/openssl" -+ -+type Cipher = openssl.RC4Cipher -+ -+func Supports() bool { return openssl.SupportsRC4() } -+ -+func New(key []byte) (*Cipher, error) { return openssl.NewRC4Cipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_windows.go -new file mode 100644 -index 00000000000000..3615c93038d920 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rc4/rc4_windows.go -@@ -0,0 +1,15 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package rc4 -+ -+import "github.com/microsoft/go-crypto-winnative/cng" -+ -+type Cipher = cng.RC4Cipher -+ -+func Supports() bool { return true } -+ -+func New(key []byte) (*Cipher, error) { return cng.NewRC4Cipher(key) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rsa/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/init.go -new file mode 100644 -index 00000000000000..aaac913048b23b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package rsa -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rsa/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/nobackend.go -new file mode 100644 -index 00000000000000..0ea9f01be8ec8c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/nobackend.go -@@ -0,0 +1,61 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package rsa -+ -+import ( -+ "crypto" -+ "hash" -+) -+ -+type BigInt = []uint -+type PrivateKey struct{ _ int } -+type PublicKey struct{ _ int } -+ -+func SupportsPrivateKey(bits, primes int) bool { panic("cryptobackend: not available") } -+func SupportsPublicKey(bits int) bool { panic("cryptobackend: not available") } -+func SupportsSaltLength(sign bool, salt int) bool { panic("cryptobackend: not available") } -+func SupportsOAEPLabel(label []byte) bool { panic("cryptobackend: not available") } -+func SupportsPKCS1v15Encryption() bool { panic("cryptobackend: not available") } -+func SupportsPKCS1v15Signature(h crypto.Hash) bool { panic("cryptobackend: not available") } -+func SupportsPSSHash(h crypto.Hash) bool { panic("cryptobackend: not available") } -+func GenerateKey(bits int) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ panic("cryptobackend: not available") -+} -+func NewPrivateKey(N, E, D, P, Q, Dp, Dq, Qinv BigInt) (*PrivateKey, error) { -+ panic("cryptobackend: not available") -+} -+func NewPublicKey(N, E BigInt) (*PublicKey, error) { panic("cryptobackend: not available") } -+func EncryptOAEP(h, mgfHash hash.Hash, pub *PublicKey, msg, label []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func DecryptOAEP(h, mgfHash hash.Hash, priv *PrivateKey, ciphertext, label []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func EncryptPKCS1v15(pub *PublicKey, msg []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func DecryptPKCS1v15(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func EncryptNoPadding(pub *PublicKey, msg []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func DecryptNoPadding(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func SignPKCS1v15(priv *PrivateKey, h crypto.Hash, hashed []byte) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func VerifyPKCS1v15(pub *PublicKey, h crypto.Hash, hashed, sig []byte) error { -+ panic("cryptobackend: not available") -+} -+func SignPSS(priv *PrivateKey, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -+func VerifyPSS(pub *PublicKey, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_darwin.go -new file mode 100644 -index 00000000000000..22ca259a1833bf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_darwin.go -@@ -0,0 +1,100 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package rsa -+ -+import ( -+ "crypto" -+ "hash" -+ _ "unsafe" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+type BigInt = xcrypto.BigInt -+type PrivateKey = xcrypto.PrivateKeyRSA -+type PublicKey = xcrypto.PublicKeyRSA -+ -+func SupportsPrivateKey(bits, primes int) bool { return primes == 2 && SupportsPublicKey(bits) } -+func SupportsPublicKey(bits int) bool { return bits >= 1024 && bits%8 == 0 && bits <= 16384 } -+func SupportsSaltLength(sign bool, salt int) bool { return salt == -1 } -+func SupportsOAEPLabel(label []byte) bool { return len(label) == 0 } -+func SupportsPKCS1v15Encryption() bool { return true } -+func SupportsPKCS1v15Signature(h crypto.Hash) bool { -+ switch h { -+ case crypto.SHA1, crypto.SHA224, crypto.SHA256, crypto.SHA384, crypto.SHA512, 0: -+ return true -+ } -+ return false -+} -+ -+func SupportsPSSHash(h crypto.Hash) bool { return xcrypto.SupportsHash(h) } -+ -+//go:linkname decodeKey crypto/rsa.decodeKey -+func decodeKey(data []byte) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) -+ -+//go:linkname encodeKey crypto/rsa.encodeKey -+func encodeKey(N, E, D, P, Q, Dp, Dq, Qinv BigInt) ([]byte, error) -+ -+//go:linkname encodePublicKey crypto/rsa.encodePublicKey -+func encodePublicKey(N, E BigInt) ([]byte, error) -+ -+func GenerateKey(bits int) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ data, err := xcrypto.GenerateKeyRSA(bits) -+ if err != nil { -+ return -+ } -+ return decodeKey(data) -+} -+ -+func NewPrivateKey(N, E, D, P, Q, Dp, Dq, Qinv BigInt) (*PrivateKey, error) { -+ encoded, err := encodeKey(N, E, D, P, Q, Dp, Dq, Qinv) -+ if err != nil { -+ return nil, err -+ } -+ return xcrypto.NewPrivateKeyRSA(encoded) -+} -+ -+func NewPublicKey(N, E BigInt) (*PublicKey, error) { -+ encoded, err := encodePublicKey(N, E) -+ if err != nil { -+ return nil, err -+ } -+ return xcrypto.NewPublicKeyRSA(encoded) -+} -+ -+func EncryptOAEP(h, mgfHash hash.Hash, pub *PublicKey, msg, label []byte) ([]byte, error) { -+ return xcrypto.EncryptRSAOAEP(h, pub, msg, label) -+} -+ -+func DecryptOAEP(h, mgfHash hash.Hash, priv *PrivateKey, ciphertext, label []byte) ([]byte, error) { -+ return xcrypto.DecryptRSAOAEP(h, priv, ciphertext, label) -+} -+ -+func EncryptPKCS1v15(pub *PublicKey, msg []byte) ([]byte, error) { -+ return xcrypto.EncryptRSAPKCS1(pub, msg) -+} -+func DecryptPKCS1v15(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ return xcrypto.DecryptRSAPKCS1(priv, ciphertext) -+} -+func EncryptNoPadding(pub *PublicKey, msg []byte) ([]byte, error) { -+ return xcrypto.EncryptRSANoPadding(pub, msg) -+} -+func DecryptNoPadding(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ return xcrypto.DecryptRSANoPadding(priv, ciphertext) -+} -+func SignPKCS1v15(priv *PrivateKey, h crypto.Hash, hashed []byte) ([]byte, error) { -+ return xcrypto.SignRSAPKCS1v15(priv, h, hashed) -+} -+func VerifyPKCS1v15(pub *PublicKey, h crypto.Hash, hashed, sig []byte) error { -+ return xcrypto.VerifyRSAPKCS1v15(pub, h, hashed, sig) -+} -+func SignPSS(priv *PrivateKey, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ return xcrypto.SignRSAPSS(priv, h, hashed, saltLen) -+} -+func VerifyPSS(pub *PublicKey, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ return xcrypto.VerifyRSAPSS(pub, h, hashed, sig, saltLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_linux.go -new file mode 100644 -index 00000000000000..f375e7ad6e4959 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_linux.go -@@ -0,0 +1,85 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package rsa -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+ bfips140 "github.com/microsoft/go/cryptobackend/fips140" -+) -+ -+type BigInt = openssl.BigInt -+type PrivateKey = openssl.PrivateKeyRSA -+type PublicKey = openssl.PublicKeyRSA -+ -+func SupportsPrivateKey(bits, primes int) bool { return primes == 2 && SupportsPublicKey(bits) } -+ -+func SupportsPublicKey(bits int) bool { -+ min := 1024 -+ if bfips140.Enabled() { -+ min = 2048 -+ } -+ return bits >= min && bits%8 == 0 && bits <= 16384 -+} -+ -+func SupportsSaltLength(sign bool, salt int) bool { return true } -+func SupportsOAEPLabel(label []byte) bool { return true } -+func SupportsPKCS1v15Encryption() bool { return openssl.SupportsRSAPKCS1v15Encryption() } -+func SupportsPKCS1v15Signature(h crypto.Hash) bool { return openssl.SupportsRSAPKCS1v15Signature(h) } -+func SupportsPSSHash(h crypto.Hash) bool { return openssl.SupportsHash(h) } -+ -+func GenerateKey(bits int) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ return openssl.GenerateKeyRSA(bits) -+} -+ -+func NewPrivateKey(N, E, D, P, Q, Dp, Dq, Qinv BigInt) (*PrivateKey, error) { -+ return openssl.NewPrivateKeyRSA(N, E, D, P, Q, Dp, Dq, Qinv) -+} -+ -+func NewPublicKey(N, E BigInt) (*PublicKey, error) { return openssl.NewPublicKeyRSA(N, E) } -+ -+func EncryptOAEP(h, mgfHash hash.Hash, pub *PublicKey, msg, label []byte) ([]byte, error) { -+ return openssl.EncryptRSAOAEP(h, mgfHash, pub, msg, label) -+} -+ -+func DecryptOAEP(h, mgfHash hash.Hash, priv *PrivateKey, ciphertext, label []byte) ([]byte, error) { -+ return openssl.DecryptRSAOAEP(h, mgfHash, priv, ciphertext, label) -+} -+ -+func EncryptPKCS1v15(pub *PublicKey, msg []byte) ([]byte, error) { -+ return openssl.EncryptRSAPKCS1(pub, msg) -+} -+ -+func DecryptPKCS1v15(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ return openssl.DecryptRSAPKCS1(priv, ciphertext) -+} -+ -+func EncryptNoPadding(pub *PublicKey, msg []byte) ([]byte, error) { -+ return openssl.EncryptRSANoPadding(pub, msg) -+} -+ -+func DecryptNoPadding(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ return openssl.DecryptRSANoPadding(priv, ciphertext) -+} -+ -+func SignPKCS1v15(priv *PrivateKey, h crypto.Hash, hashed []byte) ([]byte, error) { -+ return openssl.SignRSAPKCS1v15(priv, h, hashed) -+} -+ -+func VerifyPKCS1v15(pub *PublicKey, h crypto.Hash, hashed, sig []byte) error { -+ return openssl.VerifyRSAPKCS1v15(pub, h, hashed, sig) -+} -+ -+func SignPSS(priv *PrivateKey, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ return openssl.SignRSAPSS(priv, h, hashed, saltLen) -+} -+ -+func VerifyPSS(pub *PublicKey, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ return openssl.VerifyRSAPSS(pub, h, hashed, sig, saltLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_windows.go -new file mode 100644 -index 00000000000000..76bfa0daa30a64 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/rsa/rsa_windows.go -@@ -0,0 +1,77 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package rsa -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+type BigInt = cng.BigInt -+type PrivateKey = cng.PrivateKeyRSA -+type PublicKey = cng.PublicKeyRSA -+ -+func SupportsPrivateKey(bits, primes int) bool { return primes == 2 && SupportsPublicKey(bits) } -+func SupportsPublicKey(bits int) bool { return bits >= 512 && bits%8 == 0 && bits <= 16384 } -+func SupportsSaltLength(sign bool, salt int) bool { -+ if sign { -+ return true -+ } -+ return salt != 0 -+} -+func SupportsOAEPLabel(label []byte) bool { return true } -+func SupportsPKCS1v15Encryption() bool { return true } -+func SupportsPKCS1v15Signature(h crypto.Hash) bool { -+ switch h { -+ case 0, crypto.MD5SHA1: -+ return true -+ default: -+ return cng.SupportsHash(h) -+ } -+} -+ -+func SupportsPSSHash(h crypto.Hash) bool { return cng.SupportsHash(h) } -+ -+func GenerateKey(bits int) (N, E, D, P, Q, Dp, Dq, Qinv BigInt, err error) { -+ return cng.GenerateKeyRSA(bits) -+} -+func NewPrivateKey(N, E, D, P, Q, Dp, Dq, Qinv BigInt) (*PrivateKey, error) { -+ return cng.NewPrivateKeyRSA(N, E, D, P, Q, Dp, Dq, Qinv) -+} -+func NewPublicKey(N, E BigInt) (*PublicKey, error) { return cng.NewPublicKeyRSA(N, E) } -+func EncryptOAEP(h, mgfHash hash.Hash, pub *PublicKey, msg, label []byte) ([]byte, error) { -+ return cng.EncryptRSAOAEP(h, pub, msg, label) -+} -+func DecryptOAEP(h, mgfHash hash.Hash, priv *PrivateKey, ciphertext, label []byte) ([]byte, error) { -+ return cng.DecryptRSAOAEP(h, priv, ciphertext, label) -+} -+func EncryptPKCS1v15(pub *PublicKey, msg []byte) ([]byte, error) { -+ return cng.EncryptRSAPKCS1(pub, msg) -+} -+func DecryptPKCS1v15(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ return cng.DecryptRSAPKCS1(priv, ciphertext) -+} -+func EncryptNoPadding(pub *PublicKey, msg []byte) ([]byte, error) { -+ return cng.EncryptRSANoPadding(pub, msg) -+} -+func DecryptNoPadding(priv *PrivateKey, ciphertext []byte) ([]byte, error) { -+ return cng.DecryptRSANoPadding(priv, ciphertext) -+} -+func SignPKCS1v15(priv *PrivateKey, h crypto.Hash, hashed []byte) ([]byte, error) { -+ return cng.SignRSAPKCS1v15(priv, h, hashed) -+} -+func VerifyPKCS1v15(pub *PublicKey, h crypto.Hash, hashed, sig []byte) error { -+ return cng.VerifyRSAPKCS1v15(pub, h, hashed, sig) -+} -+func SignPSS(priv *PrivateKey, h crypto.Hash, hashed []byte, saltLen int) ([]byte, error) { -+ return cng.SignRSAPSS(priv, h, hashed, saltLen) -+} -+func VerifyPSS(pub *PublicKey, h crypto.Hash, hashed, sig []byte, saltLen int) error { -+ return cng.VerifyRSAPSS(pub, h, hashed, sig, saltLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha1/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/init.go -new file mode 100644 -index 00000000000000..58bc2e10b927ab ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package sha1 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha1/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/nobackend.go -new file mode 100644 -index 00000000000000..1583a29a01c45f ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/nobackend.go -@@ -0,0 +1,13 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package sha1 -+ -+import "hash" -+ -+func New() hash.Hash { panic("cryptobackend: not available") } -+ -+func Sum(data []byte) [20]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_darwin.go -new file mode 100644 -index 00000000000000..db59a9d7047daf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_darwin.go -@@ -0,0 +1,17 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha1 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func New() hash.Hash { return xcrypto.NewSHA1() } -+ -+func Sum(data []byte) [20]byte { return xcrypto.SHA1(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_linux.go -new file mode 100644 -index 00000000000000..739b0dd8e013e6 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_linux.go -@@ -0,0 +1,17 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha1 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func New() hash.Hash { return openssl.NewSHA1() } -+ -+func Sum(data []byte) [20]byte { return openssl.SHA1(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_windows.go -new file mode 100644 -index 00000000000000..7a6696bc3a66a5 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha1/sha1_windows.go -@@ -0,0 +1,17 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha1 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func New() hash.Hash { return cng.NewSHA1() } -+ -+func Sum(data []byte) [20]byte { return cng.SHA1(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha256/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/init.go -new file mode 100644 -index 00000000000000..087abd8fd50ecf ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package sha256 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha256/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/nobackend.go -new file mode 100644 -index 00000000000000..7cda5e6fd3890d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/nobackend.go -@@ -0,0 +1,16 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package sha256 -+ -+import "hash" -+ -+func Supports224() bool { panic("cryptobackend: not available") } -+ -+func New() hash.Hash { panic("cryptobackend: not available") } -+func New224() hash.Hash { panic("cryptobackend: not available") } -+func Sum256(data []byte) [32]byte { panic("cryptobackend: not available") } -+func Sum224(data []byte) [28]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_darwin.go -new file mode 100644 -index 00000000000000..24998928a3e884 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_darwin.go -@@ -0,0 +1,20 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha256 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Supports224() bool { return false } -+ -+func New() hash.Hash { return xcrypto.NewSHA256() } -+func New224() hash.Hash { panic("cryptobackend: not available") } -+func Sum256(data []byte) [32]byte { return xcrypto.SHA256(data) } -+func Sum224(data []byte) [28]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_linux.go -new file mode 100644 -index 00000000000000..a146988a3477cd ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_linux.go -@@ -0,0 +1,21 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha256 -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Supports224() bool { return openssl.SupportsHash(crypto.SHA224) } -+ -+func New() hash.Hash { return openssl.NewSHA256() } -+func New224() hash.Hash { return openssl.NewSHA224() } -+func Sum256(data []byte) [32]byte { return openssl.SHA256(data) } -+func Sum224(data []byte) [28]byte { return openssl.SHA224(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_windows.go -new file mode 100644 -index 00000000000000..28c0487aa0f414 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha256/sha256_windows.go -@@ -0,0 +1,20 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha256 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Supports224() bool { return false } -+ -+func New() hash.Hash { return cng.NewSHA256() } -+func New224() hash.Hash { panic("cryptobackend: not available") } -+func Sum256(data []byte) [32]byte { return cng.SHA256(data) } -+func Sum224(data []byte) [28]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha3/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/init.go -new file mode 100644 -index 00000000000000..ccf22fff428921 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package sha3 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha3/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/nobackend.go -new file mode 100644 -index 00000000000000..3e3f135dc779c2 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/nobackend.go -@@ -0,0 +1,50 @@ -+// Copyright 2014 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package sha3 -+ -+import ( -+ "hash" -+ "io" -+) -+ -+type Digest struct{ hash.Cloner } -+type Hash = Digest -+ -+type SHAKE struct { -+ io.Reader -+ hash.Hash -+} -+ -+func (d *Digest) MarshalBinary() ([]byte, error) { panic("cryptobackend: not available") } -+func (d *Digest) AppendBinary(p []byte) ([]byte, error) { panic("cryptobackend: not available") } -+func (d *Digest) UnmarshalBinary(data []byte) error { panic("cryptobackend: not available") } -+func (s *SHAKE) MarshalBinary() ([]byte, error) { panic("cryptobackend: not available") } -+func (s *SHAKE) AppendBinary(p []byte) ([]byte, error) { panic("cryptobackend: not available") } -+func (s *SHAKE) UnmarshalBinary(data []byte) error { panic("cryptobackend: not available") } -+ -+func Supports224() bool { panic("cryptobackend: not available") } -+func Supports256() bool { panic("cryptobackend: not available") } -+func Supports384() bool { panic("cryptobackend: not available") } -+func Supports512() bool { panic("cryptobackend: not available") } -+ -+func SupportsSHAKE(securityBits int) bool { panic("cryptobackend: not available") } -+func SupportsCSHAKE(securityBits int) bool { panic("cryptobackend: not available") } -+ -+func New224() *Digest { panic("cryptobackend: not available") } -+func New256() *Digest { panic("cryptobackend: not available") } -+func New384() *Digest { panic("cryptobackend: not available") } -+func New512() *Digest { panic("cryptobackend: not available") } -+func NewShake128() *SHAKE { panic("cryptobackend: not available") } -+func NewShake256() *SHAKE { panic("cryptobackend: not available") } -+func NewCShake128(N, S []byte) *SHAKE { panic("cryptobackend: not available") } -+func NewCShake256(N, S []byte) *SHAKE { panic("cryptobackend: not available") } -+func Sum224(data []byte) [28]byte { panic("cryptobackend: not available") } -+func Sum256(data []byte) [32]byte { panic("cryptobackend: not available") } -+func Sum384(data []byte) [48]byte { panic("cryptobackend: not available") } -+func Sum512(data []byte) [64]byte { panic("cryptobackend: not available") } -+func SumSHAKE128(data []byte, length int) []byte { panic("cryptobackend: not available") } -+func SumSHAKE256(data []byte, length int) []byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_darwin.go -new file mode 100644 -index 00000000000000..d0eda8e86b877b ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_darwin.go -@@ -0,0 +1,50 @@ -+// Copyright 2014 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha3 -+ -+import ( -+ "crypto" -+ "hash" -+ "io" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+type Digest = xcrypto.Hash -+type Hash = xcrypto.Hash -+ -+type SHAKE struct { -+ io.Reader -+ hash.Hash -+} -+ -+func (s *SHAKE) MarshalBinary() ([]byte, error) { panic("cryptobackend: not available") } -+func (s *SHAKE) AppendBinary(p []byte) ([]byte, error) { panic("cryptobackend: not available") } -+func (s *SHAKE) UnmarshalBinary(data []byte) error { panic("cryptobackend: not available") } -+ -+func Supports224() bool { return false } -+func Supports256() bool { return xcrypto.SupportsHash(crypto.SHA3_256) } -+func Supports384() bool { return xcrypto.SupportsHash(crypto.SHA3_384) } -+func Supports512() bool { return xcrypto.SupportsHash(crypto.SHA3_512) } -+ -+func SupportsSHAKE(securityBits int) bool { return false } -+func SupportsCSHAKE(securityBits int) bool { return false } -+ -+func New224() *Digest { panic("cryptobackend: not available") } -+func New256() *Digest { return xcrypto.NewSHA3_256() } -+func New384() *Digest { return xcrypto.NewSHA3_384() } -+func New512() *Digest { return xcrypto.NewSHA3_512() } -+func NewShake128() *SHAKE { panic("cryptobackend: not available") } -+func NewShake256() *SHAKE { panic("cryptobackend: not available") } -+func NewCShake128(N, S []byte) *SHAKE { panic("cryptobackend: not available") } -+func NewCShake256(N, S []byte) *SHAKE { panic("cryptobackend: not available") } -+func Sum224(data []byte) [28]byte { panic("cryptobackend: not available") } -+func Sum256(data []byte) [32]byte { return xcrypto.SumSHA3_256(data) } -+func Sum384(data []byte) [48]byte { return xcrypto.SumSHA3_384(data) } -+func Sum512(data []byte) [64]byte { return xcrypto.SumSHA3_512(data) } -+func SumSHAKE128(data []byte, length int) []byte { panic("cryptobackend: not available") } -+func SumSHAKE256(data []byte, length int) []byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_linux.go -new file mode 100644 -index 00000000000000..8aa8a443a46039 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_linux.go -@@ -0,0 +1,40 @@ -+// Copyright 2014 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha3 -+ -+import ( -+ "crypto" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+type Digest = openssl.Hash -+type Hash = openssl.Hash -+type SHAKE = openssl.SHAKE -+ -+func Supports224() bool { return openssl.SupportsHash(crypto.SHA3_224) } -+func Supports256() bool { return openssl.SupportsHash(crypto.SHA3_256) } -+func Supports384() bool { return openssl.SupportsHash(crypto.SHA3_384) } -+func Supports512() bool { return openssl.SupportsHash(crypto.SHA3_512) } -+ -+func SupportsSHAKE(securityBits int) bool { return openssl.SupportsSHAKE(securityBits) } -+func SupportsCSHAKE(securityBits int) bool { return openssl.SupportsCSHAKE(securityBits) } -+ -+func New224() *Digest { return openssl.NewSHA3_224() } -+func New256() *Digest { return openssl.NewSHA3_256() } -+func New384() *Digest { return openssl.NewSHA3_384() } -+func New512() *Digest { return openssl.NewSHA3_512() } -+func NewShake128() *SHAKE { return openssl.NewSHAKE128() } -+func NewShake256() *SHAKE { return openssl.NewSHAKE256() } -+func NewCShake128(N, S []byte) *SHAKE { return openssl.NewCSHAKE128(N, S) } -+func NewCShake256(N, S []byte) *SHAKE { return openssl.NewCSHAKE256(N, S) } -+func Sum224(data []byte) [28]byte { return openssl.SumSHA3_224(data) } -+func Sum256(data []byte) [32]byte { return openssl.SumSHA3_256(data) } -+func Sum384(data []byte) [48]byte { return openssl.SumSHA3_384(data) } -+func Sum512(data []byte) [64]byte { return openssl.SumSHA3_512(data) } -+func SumSHAKE128(data []byte, length int) []byte { return openssl.SumSHAKE128(data, length) } -+func SumSHAKE256(data []byte, length int) []byte { return openssl.SumSHAKE256(data, length) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_windows.go -new file mode 100644 -index 00000000000000..f696161963cd1c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha3/sha3_windows.go -@@ -0,0 +1,40 @@ -+// Copyright 2014 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha3 -+ -+import ( -+ "crypto" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+type Digest = cng.Hash -+type Hash = cng.Hash -+type SHAKE = cng.SHAKE -+ -+func Supports224() bool { return false } -+func Supports256() bool { return cng.SupportsHash(crypto.SHA3_256) } -+func Supports384() bool { return cng.SupportsHash(crypto.SHA3_384) } -+func Supports512() bool { return cng.SupportsHash(crypto.SHA3_512) } -+ -+func SupportsSHAKE(securityBits int) bool { return cng.SupportsSHAKE(securityBits) } -+func SupportsCSHAKE(securityBits int) bool { return cng.SupportsSHAKE(securityBits) } -+ -+func New224() *Digest { panic("cryptobackend: not available") } -+func New256() *Digest { return cng.NewSHA3_256() } -+func New384() *Digest { return cng.NewSHA3_384() } -+func New512() *Digest { return cng.NewSHA3_512() } -+func NewShake128() *SHAKE { return cng.NewSHAKE128() } -+func NewShake256() *SHAKE { return cng.NewSHAKE256() } -+func NewCShake128(N, S []byte) *SHAKE { return cng.NewCSHAKE128(N, S) } -+func NewCShake256(N, S []byte) *SHAKE { return cng.NewCSHAKE256(N, S) } -+func Sum224(data []byte) [28]byte { panic("cryptobackend: not available") } -+func Sum256(data []byte) [32]byte { return cng.SumSHA3_256(data) } -+func Sum384(data []byte) [48]byte { return cng.SumSHA3_384(data) } -+func Sum512(data []byte) [64]byte { return cng.SumSHA3_512(data) } -+func SumSHAKE128(data []byte, length int) []byte { return cng.SumSHAKE128(data, length) } -+func SumSHAKE256(data []byte, length int) []byte { return cng.SumSHAKE256(data, length) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha512/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/init.go -new file mode 100644 -index 00000000000000..20aa2e29e87e68 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package sha512 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha512/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/nobackend.go -new file mode 100644 -index 00000000000000..85613cc2301ab1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/nobackend.go -@@ -0,0 +1,21 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package sha512 -+ -+import "hash" -+ -+func Supports512_224() bool { panic("cryptobackend: not available") } -+func Supports512_256() bool { panic("cryptobackend: not available") } -+ -+func New() hash.Hash { panic("cryptobackend: not available") } -+func New512_224() hash.Hash { panic("cryptobackend: not available") } -+func New512_256() hash.Hash { panic("cryptobackend: not available") } -+func New384() hash.Hash { panic("cryptobackend: not available") } -+func Sum512(data []byte) [64]byte { panic("cryptobackend: not available") } -+func Sum384(data []byte) [48]byte { panic("cryptobackend: not available") } -+func Sum512_224(data []byte) [28]byte { panic("cryptobackend: not available") } -+func Sum512_256(data []byte) [32]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_darwin.go -new file mode 100644 -index 00000000000000..9f243570638d35 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_darwin.go -@@ -0,0 +1,25 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha512 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-darwin/xcrypto" -+) -+ -+func Supports512_224() bool { return false } -+func Supports512_256() bool { return false } -+ -+func New() hash.Hash { return xcrypto.NewSHA512() } -+func New512_224() hash.Hash { panic("cryptobackend: not available") } -+func New512_256() hash.Hash { panic("cryptobackend: not available") } -+func New384() hash.Hash { return xcrypto.NewSHA384() } -+func Sum512(data []byte) [64]byte { return xcrypto.SHA512(data) } -+func Sum384(data []byte) [48]byte { return xcrypto.SHA384(data) } -+func Sum512_224(data []byte) [28]byte { panic("cryptobackend: not available") } -+func Sum512_256(data []byte) [32]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_linux.go -new file mode 100644 -index 00000000000000..d2f65c859caa38 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_linux.go -@@ -0,0 +1,26 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha512 -+ -+import ( -+ "crypto" -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func Supports512_224() bool { return openssl.SupportsHash(crypto.SHA512_224) } -+func Supports512_256() bool { return openssl.SupportsHash(crypto.SHA512_256) } -+ -+func New() hash.Hash { return openssl.NewSHA512() } -+func New512_224() hash.Hash { return openssl.NewSHA512_224() } -+func New512_256() hash.Hash { return openssl.NewSHA512_256() } -+func New384() hash.Hash { return openssl.NewSHA384() } -+func Sum512(data []byte) [64]byte { return openssl.SHA512(data) } -+func Sum384(data []byte) [48]byte { return openssl.SHA384(data) } -+func Sum512_224(data []byte) [28]byte { return openssl.SHA512_224(data) } -+func Sum512_256(data []byte) [32]byte { return openssl.SHA512_256(data) } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_windows.go -new file mode 100644 -index 00000000000000..9803c63f320ba7 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/sha512/sha512_windows.go -@@ -0,0 +1,25 @@ -+// Copyright 2009 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package sha512 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func Supports512_224() bool { return false } -+func Supports512_256() bool { return false } -+ -+func New() hash.Hash { return cng.NewSHA512() } -+func New512_224() hash.Hash { panic("cryptobackend: not available") } -+func New512_256() hash.Hash { panic("cryptobackend: not available") } -+func New384() hash.Hash { return cng.NewSHA384() } -+func Sum512(data []byte) [64]byte { return cng.SHA512(data) } -+func Sum384(data []byte) [48]byte { return cng.SHA384(data) } -+func Sum512_224(data []byte) [28]byte { panic("cryptobackend: not available") } -+func Sum512_256(data []byte) [32]byte { panic("cryptobackend: not available") } -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/stub.s b/src/vendor/github.com/microsoft/go/cryptobackend/stub.s -new file mode 100644 -index 00000000000000..5e4b436554d44d ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/stub.s -@@ -0,0 +1,10 @@ -+// Copyright 2017 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// runtime_arg0 is declared in common.go without a body. -+// It's provided by package runtime, -+// but the go command doesn't know that. -+// Having this assembly file keeps the go command -+// from complaining about the missing body -+// (because the implementation might be here). -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls12/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/init.go -new file mode 100644 -index 00000000000000..11f4c37aaccefb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package tls12 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls12/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/nobackend.go -new file mode 100644 -index 00000000000000..41c22794c3a622 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/nobackend.go -@@ -0,0 +1,14 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package tls12 -+ -+import "hash" -+ -+func SupportsPRF() bool { panic("cryptobackend: not available") } -+func PRF(result, secret, label, seed []byte, h func() hash.Hash) error { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_darwin.go -new file mode 100644 -index 00000000000000..d7fbd0c8ed14a4 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_darwin.go -@@ -0,0 +1,14 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package tls12 -+ -+import "hash" -+ -+func SupportsPRF() bool { return false } -+func PRF(result, secret, label, seed []byte, h func() hash.Hash) error { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_linux.go -new file mode 100644 -index 00000000000000..beb3cecce069c1 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_linux.go -@@ -0,0 +1,18 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package tls12 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func SupportsPRF() bool { return openssl.SupportsTLS1PRF() } -+func PRF(result, secret, label, seed []byte, h func() hash.Hash) error { -+ return openssl.TLS1PRF(result, secret, label, seed, h) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_windows.go -new file mode 100644 -index 00000000000000..6f3d4d19b3e12c ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls12/tls12_windows.go -@@ -0,0 +1,18 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package tls12 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-winnative/cng" -+) -+ -+func SupportsPRF() bool { return true } -+func PRF(result, secret, label, seed []byte, h func() hash.Hash) error { -+ return cng.TLS1PRF(result, secret, label, seed, h) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls13/init.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/init.go -new file mode 100644 -index 00000000000000..7e1cd12b92cbdb ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/init.go -@@ -0,0 +1,7 @@ -+// Copyright 2026 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package tls13 -+ -+import _ "github.com/microsoft/go/cryptobackend" -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls13/nobackend.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/nobackend.go -new file mode 100644 -index 00000000000000..bd0fa1f4f1b34e ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/nobackend.go -@@ -0,0 +1,14 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !goexperiment.systemcrypto -+ -+package tls13 -+ -+import "hash" -+ -+func SupportsKDF() bool { panic("cryptobackend: not available") } -+func ExpandKDF[H hash.Hash](h func() H, pseudorandomKey, label, context []byte, keyLen int) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_darwin.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_darwin.go -new file mode 100644 -index 00000000000000..dfefdaeeed2da9 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_darwin.go -@@ -0,0 +1,14 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package tls13 -+ -+import "hash" -+ -+func SupportsKDF() bool { return false } -+func ExpandKDF[H hash.Hash](h func() H, pseudorandomKey, label, context []byte, keyLen int) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_linux.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_linux.go -new file mode 100644 -index 00000000000000..3b6c4eee8d5375 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_linux.go -@@ -0,0 +1,18 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package tls13 -+ -+import ( -+ "hash" -+ -+ "github.com/microsoft/go-crypto-openssl/openssl" -+) -+ -+func SupportsKDF() bool { return openssl.SupportsTLS13KDF() } -+func ExpandKDF[H hash.Hash](h func() H, pseudorandomKey, label, context []byte, keyLen int) ([]byte, error) { -+ return openssl.ExpandTLS13KDF(h, pseudorandomKey, label, context, keyLen) -+} -diff --git a/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_windows.go b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_windows.go -new file mode 100644 -index 00000000000000..dfefdaeeed2da9 ---- /dev/null -+++ b/src/vendor/github.com/microsoft/go/cryptobackend/tls13/tls13_windows.go -@@ -0,0 +1,14 @@ -+// Copyright 2024 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build goexperiment.systemcrypto -+ -+package tls13 -+ -+import "hash" -+ -+func SupportsKDF() bool { return false } -+func ExpandKDF[H hash.Hash](h func() H, pseudorandomKey, label, context []byte, keyLen int) ([]byte, error) { -+ panic("cryptobackend: not available") -+} -diff --git a/src/vendor/modules.txt b/src/vendor/modules.txt -index 54fcbab6a221c0..04b01df0f90b75 100644 ---- a/src/vendor/modules.txt -+++ b/src/vendor/modules.txt -@@ -1,3 +1,57 @@ -+# github.com/microsoft/go-crypto-darwin v0.0.3-0.20260605073440-7505334b131b -+## explicit; go 1.25 -+github.com/microsoft/go-crypto-darwin/bbig -+github.com/microsoft/go-crypto-darwin/internal/commoncrypto -+github.com/microsoft/go-crypto-darwin/internal/cryptokit -+github.com/microsoft/go-crypto-darwin/internal/fakecgo -+github.com/microsoft/go-crypto-darwin/internal/security -+github.com/microsoft/go-crypto-darwin/internal/xsyscall -+github.com/microsoft/go-crypto-darwin/xcrypto -+# github.com/microsoft/go-crypto-openssl v0.0.0-20260605082236-c86f934c8ba7 -+## explicit; go 1.25 -+github.com/microsoft/go-crypto-openssl/bbig -+github.com/microsoft/go-crypto-openssl/internal/fakecgo -+github.com/microsoft/go-crypto-openssl/internal/ossl -+github.com/microsoft/go-crypto-openssl/openssl -+github.com/microsoft/go-crypto-openssl/osslsetup -+# github.com/microsoft/go-crypto-winnative v0.0.0-20260605073512-713d2add0825 -+## explicit; go 1.25 -+github.com/microsoft/go-crypto-winnative/cng -+github.com/microsoft/go-crypto-winnative/cng/bbig -+github.com/microsoft/go-crypto-winnative/internal/bcrypt -+github.com/microsoft/go-crypto-winnative/internal/subtle -+github.com/microsoft/go-crypto-winnative/internal/sysdll -+# github.com/microsoft/go/cryptobackend v0.0.0 => ../../cryptobackend -+## explicit; go 1.26 -+github.com/microsoft/go/cryptobackend -+github.com/microsoft/go/cryptobackend/aes -+github.com/microsoft/go/cryptobackend/aes/gcm -+github.com/microsoft/go/cryptobackend/bbig -+github.com/microsoft/go/cryptobackend/chacha20poly1305 -+github.com/microsoft/go/cryptobackend/des -+github.com/microsoft/go/cryptobackend/drbg -+github.com/microsoft/go/cryptobackend/dsa -+github.com/microsoft/go/cryptobackend/ecdh -+github.com/microsoft/go/cryptobackend/ecdsa -+github.com/microsoft/go/cryptobackend/ed25519 -+github.com/microsoft/go/cryptobackend/fips140 -+github.com/microsoft/go/cryptobackend/hash -+github.com/microsoft/go/cryptobackend/hkdf -+github.com/microsoft/go/cryptobackend/hmac -+github.com/microsoft/go/cryptobackend/internal/fips140state -+github.com/microsoft/go/cryptobackend/internal/opensslsetup -+github.com/microsoft/go/cryptobackend/md5 -+github.com/microsoft/go/cryptobackend/mldsa -+github.com/microsoft/go/cryptobackend/mlkem -+github.com/microsoft/go/cryptobackend/pbkdf2 -+github.com/microsoft/go/cryptobackend/rc4 -+github.com/microsoft/go/cryptobackend/rsa -+github.com/microsoft/go/cryptobackend/sha1 -+github.com/microsoft/go/cryptobackend/sha256 -+github.com/microsoft/go/cryptobackend/sha3 -+github.com/microsoft/go/cryptobackend/sha512 -+github.com/microsoft/go/cryptobackend/tls12 -+github.com/microsoft/go/cryptobackend/tls13 - # golang.org/x/crypto v0.52.1-0.20260526024921-9beb694f9766 - ## explicit; go 1.25.0 - golang.org/x/crypto/chacha20 -@@ -30,3 +84,4 @@ golang.org/x/text/secure/bidirule - golang.org/x/text/transform - golang.org/x/text/unicode/bidi - golang.org/x/text/unicode/norm -+# github.com/microsoft/go/cryptobackend => ../../cryptobackend