CodeSampleX

Beispiel

cloud.google.com/go/kms v1.35.0: apiv1.DefaultAuthScopes, apiv1.NewKeyManagementClient, kmspb.CryptoKey

Verifiziertes Beispiel für golang cloud.google.com/go/kms v1.35.0: apiv1.DefaultAuthScopes, apiv1.NewKeyManagementClient, kmspb.CryptoKey. Der Vertrag lief…

sha256:3ea25b7b5ce56f0020e67125686fc3c3af3d7957ac7f5304776a9b635115a7e6

Dieses Netzwerk bietet eine Sache: ein Sample, das baut. Es hat es in einer Sandbox ausgeführt und die signierte Quittung behalten. Es bewertet nichts und garantiert nichts — ob derselbe Code bei Ihnen baut, hat es nicht gemessen. Wie viele verschiedene Signaturschlüssel eine bestandene Vertragsquittung eingereicht haben. Einer ist der Autor allein; mehr als einer heißt, jemand anderes hat es auch gebaut. Ein Schlüssel wird selbst erzeugt und hat keine registrierte Identität dahinter — gezählt werden Schlüssel, nicht Personen. MIT-0

Ausführungsbelege

Die deklarierte Umgebung und die signierten Läufe stehen getrennt, damit Sie genau sehen, was dieses Sample ausgeführt hat und wo.

Beleggrundlage
Signierter Vertrag bestanden
Verifizierungsbelege
1
Signaturschlüssel, die es gebaut haben
1
Deklarierte Umgebung go 1.26 linux 24 · ubuntu · glibc 2.39 x64 go 1.26 go go 1

Umgebungen der Verifizierungsläufe

Umgebung Contract Stufen Lauf
go 1.26 · linux debian/x64 · docker ed25519:c1973797be207ac4 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1golang:1.26@sha256:e30143be198a…
2026-10-09

Fall

HOW
Ziel
verify pkg:golang/cloud.google.com/go/kms@v1.35.0
Pakete
Symbole
  • cloud.google.com/go/kms/apiv1.DefaultAuthScopes
  • cloud.google.com/go/kms/apiv1.NewKeyManagementClient
  • cloud.google.com/go/kms/apiv1/kmspb.CryptoKey
  • cloud.google.com/go/kms/apiv1/kmspb.CryptoKeyVersion_CryptoKeyVersionState
  • cloud.google.com/go/kms/apiv1/kmspb.DecryptRequest
  • cloud.google.com/go/kms/apiv1/kmspb.EncryptRequest
  • cloud.google.com/go/kms/apiv1/kmspb.ProtectionLevel
Umgebung
go 1.26.6
Erstellt
2026-10-09T15:18:05Z

Contract

  1. kms.DefaultAuthScopes returns standard Cloud KMS authentication scopes
  2. kms.NewKeyManagementClient initializes a client offline with WithoutAuthentication and insecure endpoint
  3. kmspb.CryptoKey constructs with purpose and protobuf serialization round-trips correctly
  4. kmspb.EncryptRequest and DecryptRequest construct and validate payload fields
  5. kmspb enum values for CryptoKeyVersion_CryptoKeyVersionState and ProtectionLevel match defined constants

Dateien

  • PROMPT.md
  • csx.json
  • go.mod
  • go.sum
  • main.go
  • spec.json
  • test/contract.go

Quellartefakt herunterladen (tar.gz)

Quelltext

PROMPT.md
Clean-room public code sample — generation instructions

Write a brand-new, minimal, self-contained code sample in this clean-room directory.
Do not copy, paraphrase, or reference any existing project source. Work only from this spec.

A csx.json manifest scaffold already exists. Do not recreate it from memory. Preserve its case.goal, packages and symbols; fill its empty case.contract with exact assertions and correct its environment, commands and verifierAdapter for the files you generate.

Goal: verify pkg:golang/cloud.google.com/go/kms@v1.35.0
Kind: HOW

Use EXACTLY these public packages and versions:
  - pkg:golang/cloud.google.com/go/kms@v1.35.0
Demonstrate these symbols/APIs:
  - cloud.google.com/go/kms/apiv1.DefaultAuthScopes
  - cloud.google.com/go/kms/apiv1.NewKeyManagementClient
  - cloud.google.com/go/kms/apiv1/kmspb.CryptoKey
  - cloud.google.com/go/kms/apiv1/kmspb.CryptoKeyVersion_CryptoKeyVersionState
  - cloud.google.com/go/kms/apiv1/kmspb.DecryptRequest
  - cloud.google.com/go/kms/apiv1/kmspb.EncryptRequest
  - cloud.google.com/go/kms/apiv1/kmspb.ProtectionLevel

Rules:
  - One focused purpose; the smallest project that proves the goal.
  - Include a contract test (test/contract.*) that runs OFFLINE and exits 0 exactly when the goal behavior works.
  - Pin every dependency with a lockfile so resolution is reproducible.
  - No secrets, credentials, or tokens. No real URLs (only example.com or localhost). No absolute paths.
  - No personal names, emails, company names, or project identifiers of any kind.
  - No binaries and no generated output (node_modules, dist, target, venv, .git, .env).
  - Keep it under 200 files and 256KB packed.
csx.json
{"case":{"caseId":"case:sha256:ad89c2e4edba515bdc69569a42a7f2cafd3ae82290a6b42f62f43213c0470e62","contract":["kms.DefaultAuthScopes returns standard Cloud KMS authentication scopes","kms.NewKeyManagementClient initializes a client offline with WithoutAuthentication and insecure endpoint","kmspb.CryptoKey constructs with purpose and protobuf serialization round-trips correctly","kmspb.EncryptRequest and DecryptRequest construct and validate payload fields","kmspb enum values for CryptoKeyVersion_CryptoKeyVersionState and ProtectionLevel match defined constants"],"goal":"verify pkg:golang/cloud.google.com/go/kms@v1.35.0","kind":"HOW","packages":["pkg:golang/cloud.google.com/go/kms@v1.35.0"],"schemaVersion":1,"symbols":["cloud.google.com/go/kms/apiv1.DefaultAuthScopes","cloud.google.com/go/kms/apiv1.NewKeyManagementClient","cloud.google.com/go/kms/apiv1/kmspb.CryptoKey","cloud.google.com/go/kms/apiv1/kmspb.CryptoKeyVersion_CryptoKeyVersionState","cloud.google.com/go/kms/apiv1/kmspb.DecryptRequest","cloud.google.com/go/kms/apiv1/kmspb.EncryptRequest","cloud.google.com/go/kms/apiv1/kmspb.ProtectionLevel"]},"contractCommand":["go","run","./test"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"golang","language":"go","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"go","packageManagerVersion":"1.26.6","runtime":"go","runtimeVersion":"1.26.6","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/cloud.google.com/go/kms@v1.35.0"],"schemaVersion":1,"subject":"pkg:golang/cloud.google.com/go/kms@v1.35.0","symbols":["cloud.google.com/go/kms/apiv1.DefaultAuthScopes","cloud.google.com/go/kms/apiv1.NewKeyManagementClient","cloud.google.com/go/kms/apiv1/kmspb.CryptoKey","cloud.google.com/go/kms/apiv1/kmspb.CryptoKeyVersion_CryptoKeyVersionState","cloud.google.com/go/kms/apiv1/kmspb.DecryptRequest","cloud.google.com/go/kms/apiv1/kmspb.EncryptRequest","cloud.google.com/go/kms/apiv1/kmspb.ProtectionLevel"],"verifierAdapter":"golang@1"}
go.mod
module example.com/sample

go 1.26.6

require (
	cloud.google.com/go/kms v1.35.0
	google.golang.org/api v0.287.1
	google.golang.org/grpc v1.83.2
	google.golang.org/protobuf v1.36.11
)

require (
	cloud.google.com/go v0.123.0 // indirect
	cloud.google.com/go/auth v0.20.0 // indirect
	cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
	cloud.google.com/go/compute/metadata v0.9.0 // indirect
	cloud.google.com/go/iam v1.11.0 // indirect
	cloud.google.com/go/longrunning v1.2.0 // indirect
	github.com/cespare/xxhash/v2 v2.3.0 // indirect
	github.com/felixge/httpsnoop v1.0.4 // indirect
	github.com/go-logr/logr v1.4.3 // indirect
	github.com/go-logr/stdr v1.2.2 // indirect
	github.com/google/s2a-go v0.1.9 // indirect
	github.com/googleapis/enterprise-certificate-proxy v0.3.17 // indirect
	github.com/googleapis/gax-go/v2 v2.23.0 // indirect
	go.opentelemetry.io/auto/sdk v1.2.1 // indirect
	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect
	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect
	go.opentelemetry.io/otel v1.44.0 // indirect
	go.opentelemetry.io/otel/metric v1.44.0 // indirect
	go.opentelemetry.io/otel/trace v1.44.0 // indirect
	golang.org/x/crypto v0.55.0 // indirect
	golang.org/x/net v0.58.0 // indirect
	golang.org/x/oauth2 v0.36.0 // indirect
	golang.org/x/sync v0.22.0 // indirect
	golang.org/x/sys v0.47.0 // indirect
	golang.org/x/text v0.41.0 // indirect
	golang.org/x/time v0.15.0 // indirect
	google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect
	google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 // indirect
	google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7 // indirect
)
go.sum
cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE=
cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU=
cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA=
cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q=
cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM=
cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4=
cloud.google.com/go/kms v1.35.0 h1:nJ/ktaqspx1nPM9vIcO0SHbhqCAm8nvAxL1siuVgKm0=
cloud.google.com/go/kms v1.35.0/go.mod h1:0++71pIHvJL+GmMa8K4jOWFq7gNOX3jm2PRMSJwTKJw=
cloud.google.com/go/longrunning v1.2.0 h1:WjYH3YHBGCxGJP9M4dWGHBfXr/cFIjMkNgWcJj7/iMM=
cloud.google.com/go/longrunning v1.2.0/go.mod h1:5KMQALFGOCtFoi2xSOA1u3H7WKlhmckgiyFw7+LGQp0=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik=
github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=
github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=
github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds=
github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.17 h1:73NfMHdiqo9JFU9+7a5ExpVa10/R29pXfZIaW559nrg=
github.com/googleapis/enterprise-certificate-proxy v0.3.17/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k=
github.com/googleapis/gax-go/v2 v2.23.0 h1:Tchl7qkvE7Ip3y+ztvNufYFvkfqTe7NfLTYGIdJRLuE=
github.com/googleapis/gax-go/v2 v2.23.0/go.mod h1:rBQKOVJCdb8IFEzg+FCwlt1LP/xMDGuqUXhUG+XMXEg=
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg=
go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M=
golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis=
golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To=
golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU=
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/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek=
golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8=
golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
google.golang.org/api v0.287.1 h1:LiyJx32VU3cwQfLchn/513qKhc25hq0pEANYJoWNnnI=
google.golang.org/api v0.287.1/go.mod h1:lM2kYRzYUCBY91P9h6VF1PYmvhxii3O5hji37qRvIcY=
google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0=
google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I=
google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 h1:jQ9p21COKWjP3VwuFrNRiiOTMh3mPpN45R7SLrH/HUU=
google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7/go.mod h1:KqHwBx2upmfa1XSi1WuRvC+2VGCLtooKkfmyvRbUmqA=
google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7 h1:eM/YSd5bBFagF51o1E745Ta7RwzpW0h+z+QDNZOgmQ8=
google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU=
google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
main.go
package main

import (
	"context"
	"fmt"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
	"google.golang.org/api/option"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"google.golang.org/protobuf/proto"
)

func main() {
	ctx := context.Background()
	client, err := kms.NewKeyManagementClient(ctx,
		option.WithoutAuthentication(),
		option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
		option.WithEndpoint("localhost:50051"),
	)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	scopes := kms.DefaultAuthScopes()
	fmt.Printf("Default scopes count: %d\n", len(scopes))

	key := &kmspb.CryptoKey{
		Name:    "projects/sample-project/locations/global/keyRings/sample-ring/cryptoKeys/sample-key",
		Purpose: kmspb.CryptoKey_ENCRYPT_DECRYPT,
	}

	data, err := proto.Marshal(key)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Serialized CryptoKey: %d bytes\n", len(data))
}
spec.json
{
  "schemaVersion": 1,
  "goal": "verify pkg:golang/cloud.google.com/go/kms@v1.35.0",
  "kind": "HOW",
  "packages": [
    "pkg:golang/cloud.google.com/go/kms@v1.35.0"
  ],
  "symbols": [
    "cloud.google.com/go/kms/apiv1.DefaultAuthScopes",
    "cloud.google.com/go/kms/apiv1.NewKeyManagementClient",
    "cloud.google.com/go/kms/apiv1/kmspb.CryptoKey",
    "cloud.google.com/go/kms/apiv1/kmspb.CryptoKeyVersion_CryptoKeyVersionState",
    "cloud.google.com/go/kms/apiv1/kmspb.DecryptRequest",
    "cloud.google.com/go/kms/apiv1/kmspb.EncryptRequest",
    "cloud.google.com/go/kms/apiv1/kmspb.ProtectionLevel"
  ]
}
test/contract.go
package main

import (
	"context"
	"fmt"
	"os"
	"strings"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
	"google.golang.org/api/option"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"google.golang.org/protobuf/proto"
)

func main() {
	// Assertion 1: kms.DefaultAuthScopes returns standard Cloud KMS authentication scopes
	scopes := kms.DefaultAuthScopes()
	if len(scopes) == 0 {
		fmt.Fprintf(os.Stderr, "FAIL: DefaultAuthScopes returned empty slice\n")
		os.Exit(1)
	}
	hasKmsScope := false
	for _, s := range scopes {
		if strings.Contains(s, "cloudkms") {
			hasKmsScope = true
			break
		}
	}
	if !hasKmsScope {
		fmt.Fprintf(os.Stderr, "FAIL: DefaultAuthScopes missing cloudkms scope\n")
		os.Exit(1)
	}

	// Assertion 2: kms.NewKeyManagementClient initializes a client offline with WithoutAuthentication and insecure endpoint
	ctx := context.Background()
	client, err := kms.NewKeyManagementClient(ctx,
		option.WithoutAuthentication(),
		option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
		option.WithEndpoint("localhost:50051"),
	)
	if err != nil {
		fmt.Fprintf(os.Stderr, "FAIL: NewKeyManagementClient error: %v\n", err)
		os.Exit(1)
	}
	if client == nil {
		fmt.Fprintf(os.Stderr, "FAIL: NewKeyManagementClient returned nil client\n")
		os.Exit(1)
	}
	if err := client.Close(); err != nil {
		fmt.Fprintf(os.Stderr, "FAIL: client.Close error: %v\n", err)
		os.Exit(1)
	}

	// Assertion 3: kmspb.CryptoKey constructs with purpose and protobuf serialization round-trips correctly
	keyName := "projects/sample-project/locations/global/keyRings/sample-ring/cryptoKeys/sample-key"
	key := &kmspb.CryptoKey{
		Name:    keyName,
		Purpose: kmspb.CryptoKey_ENCRYPT_DECRYPT,
	}
	data, err := proto.Marshal(key)
	if err != nil {
		fmt.Fprintf(os.Stderr, "FAIL: proto.Marshal(key) error: %v\n", err)
		os.Exit(1)
	}
	var unmarshaled kmspb.CryptoKey
	if err := proto.Unmarshal(data, &unmarshaled); err != nil {
		fmt.Fprintf(os.Stderr, "FAIL: proto.Unmarshal(data) error: %v\n", err)
		os.Exit(1)
	}
	if unmarshaled.GetName() != keyName || unmarshaled.GetPurpose() != kmspb.CryptoKey_ENCRYPT_DECRYPT {
		fmt.Fprintf(os.Stderr, "FAIL: unmarshaled CryptoKey mismatch: %+v\n", unmarshaled)
		os.Exit(1)
	}

	// Assertion 4: kmspb.EncryptRequest and DecryptRequest construct and validate payload fields
	plaintext := []byte("sample-data-payload")
	encReq := &kmspb.EncryptRequest{
		Name:      keyName,
		Plaintext: plaintext,
	}
	if string(encReq.GetPlaintext()) != string(plaintext) {
		fmt.Fprintf(os.Stderr, "FAIL: EncryptRequest plaintext mismatch\n")
		os.Exit(1)
	}
	ciphertext := []byte("sample-ciphertext-payload")
	decReq := &kmspb.DecryptRequest{
		Name:       keyName,
		Ciphertext: ciphertext,
	}
	if string(decReq.GetCiphertext()) != string(ciphertext) {
		fmt.Fprintf(os.Stderr, "FAIL: DecryptRequest ciphertext mismatch\n")
		os.Exit(1)
	}

	// Assertion 5: kmspb enum values for CryptoKeyVersion_CryptoKeyVersionState and ProtectionLevel match defined constants
	if kmspb.CryptoKeyVersion_ENABLED != 1 {
		fmt.Fprintf(os.Stderr, "FAIL: CryptoKeyVersion_ENABLED mismatch: got %d, want 1\n", kmspb.CryptoKeyVersion_ENABLED)
		os.Exit(1)
	}
	if kmspb.ProtectionLevel_SOFTWARE != 1 {
		fmt.Fprintf(os.Stderr, "FAIL: ProtectionLevel_SOFTWARE mismatch: got %d, want 1\n", kmspb.ProtectionLevel_SOFTWARE)
		os.Exit(1)
	}
	if kmspb.ProtectionLevel_HSM != 2 {
		fmt.Fprintf(os.Stderr, "FAIL: ProtectionLevel_HSM mismatch: got %d, want 2\n", kmspb.ProtectionLevel_HSM)
		os.Exit(1)
	}

	fmt.Println("All kms contract assertions passed.")
}

Ursprungs-Seeder

anonym