You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

755 lines
32 KiB

  1. // Copyright 2019 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. // Code generated by gapic-generator. DO NOT EDIT.
  15. package kms
  16. import (
  17. "context"
  18. "fmt"
  19. "math"
  20. "time"
  21. "github.com/golang/protobuf/proto"
  22. gax "github.com/googleapis/gax-go/v2"
  23. "google.golang.org/api/iterator"
  24. "google.golang.org/api/option"
  25. "google.golang.org/api/transport"
  26. kmspb "google.golang.org/genproto/googleapis/cloud/kms/v1"
  27. "google.golang.org/grpc"
  28. "google.golang.org/grpc/codes"
  29. "google.golang.org/grpc/metadata"
  30. )
  31. // KeyManagementCallOptions contains the retry settings for each method of KeyManagementClient.
  32. type KeyManagementCallOptions struct {
  33. ListKeyRings []gax.CallOption
  34. ListCryptoKeys []gax.CallOption
  35. ListCryptoKeyVersions []gax.CallOption
  36. GetKeyRing []gax.CallOption
  37. GetCryptoKey []gax.CallOption
  38. GetCryptoKeyVersion []gax.CallOption
  39. CreateKeyRing []gax.CallOption
  40. CreateCryptoKey []gax.CallOption
  41. CreateCryptoKeyVersion []gax.CallOption
  42. UpdateCryptoKey []gax.CallOption
  43. UpdateCryptoKeyVersion []gax.CallOption
  44. Encrypt []gax.CallOption
  45. Decrypt []gax.CallOption
  46. UpdateCryptoKeyPrimaryVersion []gax.CallOption
  47. DestroyCryptoKeyVersion []gax.CallOption
  48. RestoreCryptoKeyVersion []gax.CallOption
  49. GetPublicKey []gax.CallOption
  50. AsymmetricDecrypt []gax.CallOption
  51. AsymmetricSign []gax.CallOption
  52. }
  53. func defaultKeyManagementClientOptions() []option.ClientOption {
  54. return []option.ClientOption{
  55. option.WithEndpoint("cloudkms.googleapis.com:443"),
  56. option.WithScopes(DefaultAuthScopes()...),
  57. }
  58. }
  59. func defaultKeyManagementCallOptions() *KeyManagementCallOptions {
  60. retry := map[[2]string][]gax.CallOption{
  61. {"default", "idempotent"}: {
  62. gax.WithRetry(func() gax.Retryer {
  63. return gax.OnCodes([]codes.Code{
  64. codes.DeadlineExceeded,
  65. codes.Unavailable,
  66. }, gax.Backoff{
  67. Initial: 100 * time.Millisecond,
  68. Max: 60000 * time.Millisecond,
  69. Multiplier: 1.3,
  70. })
  71. }),
  72. },
  73. }
  74. return &KeyManagementCallOptions{
  75. ListKeyRings: retry[[2]string{"default", "idempotent"}],
  76. ListCryptoKeys: retry[[2]string{"default", "idempotent"}],
  77. ListCryptoKeyVersions: retry[[2]string{"default", "idempotent"}],
  78. GetKeyRing: retry[[2]string{"default", "idempotent"}],
  79. GetCryptoKey: retry[[2]string{"default", "idempotent"}],
  80. GetCryptoKeyVersion: retry[[2]string{"default", "idempotent"}],
  81. CreateKeyRing: retry[[2]string{"default", "non_idempotent"}],
  82. CreateCryptoKey: retry[[2]string{"default", "non_idempotent"}],
  83. CreateCryptoKeyVersion: retry[[2]string{"default", "non_idempotent"}],
  84. UpdateCryptoKey: retry[[2]string{"default", "non_idempotent"}],
  85. UpdateCryptoKeyVersion: retry[[2]string{"default", "non_idempotent"}],
  86. Encrypt: retry[[2]string{"default", "non_idempotent"}],
  87. Decrypt: retry[[2]string{"default", "non_idempotent"}],
  88. UpdateCryptoKeyPrimaryVersion: retry[[2]string{"default", "non_idempotent"}],
  89. DestroyCryptoKeyVersion: retry[[2]string{"default", "non_idempotent"}],
  90. RestoreCryptoKeyVersion: retry[[2]string{"default", "non_idempotent"}],
  91. GetPublicKey: retry[[2]string{"default", "idempotent"}],
  92. AsymmetricDecrypt: retry[[2]string{"default", "non_idempotent"}],
  93. AsymmetricSign: retry[[2]string{"default", "non_idempotent"}],
  94. }
  95. }
  96. // KeyManagementClient is a client for interacting with Cloud Key Management Service (KMS) API.
  97. //
  98. // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
  99. type KeyManagementClient struct {
  100. // The connection to the service.
  101. conn *grpc.ClientConn
  102. // The gRPC API client.
  103. keyManagementClient kmspb.KeyManagementServiceClient
  104. // The call options for this service.
  105. CallOptions *KeyManagementCallOptions
  106. // The x-goog-* metadata to be sent with each request.
  107. xGoogMetadata metadata.MD
  108. }
  109. // NewKeyManagementClient creates a new key management service client.
  110. //
  111. // Google Cloud Key Management Service
  112. //
  113. // Manages cryptographic keys and operations using those keys. Implements a REST
  114. // model with the following objects:
  115. //
  116. // [KeyRing][google.cloud.kms.v1.KeyRing]
  117. //
  118. // [CryptoKey][google.cloud.kms.v1.CryptoKey]
  119. //
  120. // [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
  121. //
  122. // If you are using manual gRPC libraries, see
  123. // Using gRPC with Cloud KMS (at https://cloud.google.com/kms/docs/grpc).
  124. func NewKeyManagementClient(ctx context.Context, opts ...option.ClientOption) (*KeyManagementClient, error) {
  125. conn, err := transport.DialGRPC(ctx, append(defaultKeyManagementClientOptions(), opts...)...)
  126. if err != nil {
  127. return nil, err
  128. }
  129. c := &KeyManagementClient{
  130. conn: conn,
  131. CallOptions: defaultKeyManagementCallOptions(),
  132. keyManagementClient: kmspb.NewKeyManagementServiceClient(conn),
  133. }
  134. c.setGoogleClientInfo()
  135. return c, nil
  136. }
  137. // Connection returns the client's connection to the API service.
  138. func (c *KeyManagementClient) Connection() *grpc.ClientConn {
  139. return c.conn
  140. }
  141. // Close closes the connection to the API service. The user should invoke this when
  142. // the client is no longer required.
  143. func (c *KeyManagementClient) Close() error {
  144. return c.conn.Close()
  145. }
  146. // setGoogleClientInfo sets the name and version of the application in
  147. // the `x-goog-api-client` header passed on each request. Intended for
  148. // use by Google-written clients.
  149. func (c *KeyManagementClient) setGoogleClientInfo(keyval ...string) {
  150. kv := append([]string{"gl-go", versionGo()}, keyval...)
  151. kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
  152. c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
  153. }
  154. // ListKeyRings lists [KeyRings][google.cloud.kms.v1.KeyRing].
  155. func (c *KeyManagementClient) ListKeyRings(ctx context.Context, req *kmspb.ListKeyRingsRequest, opts ...gax.CallOption) *KeyRingIterator {
  156. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  157. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  158. opts = append(c.CallOptions.ListKeyRings[0:len(c.CallOptions.ListKeyRings):len(c.CallOptions.ListKeyRings)], opts...)
  159. it := &KeyRingIterator{}
  160. req = proto.Clone(req).(*kmspb.ListKeyRingsRequest)
  161. it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.KeyRing, string, error) {
  162. var resp *kmspb.ListKeyRingsResponse
  163. req.PageToken = pageToken
  164. if pageSize > math.MaxInt32 {
  165. req.PageSize = math.MaxInt32
  166. } else {
  167. req.PageSize = int32(pageSize)
  168. }
  169. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  170. var err error
  171. resp, err = c.keyManagementClient.ListKeyRings(ctx, req, settings.GRPC...)
  172. return err
  173. }, opts...)
  174. if err != nil {
  175. return nil, "", err
  176. }
  177. return resp.KeyRings, resp.NextPageToken, nil
  178. }
  179. fetch := func(pageSize int, pageToken string) (string, error) {
  180. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  181. if err != nil {
  182. return "", err
  183. }
  184. it.items = append(it.items, items...)
  185. return nextPageToken, nil
  186. }
  187. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  188. it.pageInfo.MaxSize = int(req.PageSize)
  189. return it
  190. }
  191. // ListCryptoKeys lists [CryptoKeys][google.cloud.kms.v1.CryptoKey].
  192. func (c *KeyManagementClient) ListCryptoKeys(ctx context.Context, req *kmspb.ListCryptoKeysRequest, opts ...gax.CallOption) *CryptoKeyIterator {
  193. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  194. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  195. opts = append(c.CallOptions.ListCryptoKeys[0:len(c.CallOptions.ListCryptoKeys):len(c.CallOptions.ListCryptoKeys)], opts...)
  196. it := &CryptoKeyIterator{}
  197. req = proto.Clone(req).(*kmspb.ListCryptoKeysRequest)
  198. it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.CryptoKey, string, error) {
  199. var resp *kmspb.ListCryptoKeysResponse
  200. req.PageToken = pageToken
  201. if pageSize > math.MaxInt32 {
  202. req.PageSize = math.MaxInt32
  203. } else {
  204. req.PageSize = int32(pageSize)
  205. }
  206. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  207. var err error
  208. resp, err = c.keyManagementClient.ListCryptoKeys(ctx, req, settings.GRPC...)
  209. return err
  210. }, opts...)
  211. if err != nil {
  212. return nil, "", err
  213. }
  214. return resp.CryptoKeys, resp.NextPageToken, nil
  215. }
  216. fetch := func(pageSize int, pageToken string) (string, error) {
  217. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  218. if err != nil {
  219. return "", err
  220. }
  221. it.items = append(it.items, items...)
  222. return nextPageToken, nil
  223. }
  224. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  225. it.pageInfo.MaxSize = int(req.PageSize)
  226. return it
  227. }
  228. // ListCryptoKeyVersions lists [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion].
  229. func (c *KeyManagementClient) ListCryptoKeyVersions(ctx context.Context, req *kmspb.ListCryptoKeyVersionsRequest, opts ...gax.CallOption) *CryptoKeyVersionIterator {
  230. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  231. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  232. opts = append(c.CallOptions.ListCryptoKeyVersions[0:len(c.CallOptions.ListCryptoKeyVersions):len(c.CallOptions.ListCryptoKeyVersions)], opts...)
  233. it := &CryptoKeyVersionIterator{}
  234. req = proto.Clone(req).(*kmspb.ListCryptoKeyVersionsRequest)
  235. it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.CryptoKeyVersion, string, error) {
  236. var resp *kmspb.ListCryptoKeyVersionsResponse
  237. req.PageToken = pageToken
  238. if pageSize > math.MaxInt32 {
  239. req.PageSize = math.MaxInt32
  240. } else {
  241. req.PageSize = int32(pageSize)
  242. }
  243. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  244. var err error
  245. resp, err = c.keyManagementClient.ListCryptoKeyVersions(ctx, req, settings.GRPC...)
  246. return err
  247. }, opts...)
  248. if err != nil {
  249. return nil, "", err
  250. }
  251. return resp.CryptoKeyVersions, resp.NextPageToken, nil
  252. }
  253. fetch := func(pageSize int, pageToken string) (string, error) {
  254. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  255. if err != nil {
  256. return "", err
  257. }
  258. it.items = append(it.items, items...)
  259. return nextPageToken, nil
  260. }
  261. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  262. it.pageInfo.MaxSize = int(req.PageSize)
  263. return it
  264. }
  265. // GetKeyRing returns metadata for a given [KeyRing][google.cloud.kms.v1.KeyRing].
  266. func (c *KeyManagementClient) GetKeyRing(ctx context.Context, req *kmspb.GetKeyRingRequest, opts ...gax.CallOption) (*kmspb.KeyRing, error) {
  267. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  268. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  269. opts = append(c.CallOptions.GetKeyRing[0:len(c.CallOptions.GetKeyRing):len(c.CallOptions.GetKeyRing)], opts...)
  270. var resp *kmspb.KeyRing
  271. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  272. var err error
  273. resp, err = c.keyManagementClient.GetKeyRing(ctx, req, settings.GRPC...)
  274. return err
  275. }, opts...)
  276. if err != nil {
  277. return nil, err
  278. }
  279. return resp, nil
  280. }
  281. // GetCryptoKey returns metadata for a given [CryptoKey][google.cloud.kms.v1.CryptoKey], as
  282. // well as its [primary][google.cloud.kms.v1.CryptoKey.primary]
  283. // [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
  284. func (c *KeyManagementClient) GetCryptoKey(ctx context.Context, req *kmspb.GetCryptoKeyRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
  285. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  286. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  287. opts = append(c.CallOptions.GetCryptoKey[0:len(c.CallOptions.GetCryptoKey):len(c.CallOptions.GetCryptoKey)], opts...)
  288. var resp *kmspb.CryptoKey
  289. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  290. var err error
  291. resp, err = c.keyManagementClient.GetCryptoKey(ctx, req, settings.GRPC...)
  292. return err
  293. }, opts...)
  294. if err != nil {
  295. return nil, err
  296. }
  297. return resp, nil
  298. }
  299. // GetCryptoKeyVersion returns metadata for a given
  300. // [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
  301. func (c *KeyManagementClient) GetCryptoKeyVersion(ctx context.Context, req *kmspb.GetCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
  302. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  303. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  304. opts = append(c.CallOptions.GetCryptoKeyVersion[0:len(c.CallOptions.GetCryptoKeyVersion):len(c.CallOptions.GetCryptoKeyVersion)], opts...)
  305. var resp *kmspb.CryptoKeyVersion
  306. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  307. var err error
  308. resp, err = c.keyManagementClient.GetCryptoKeyVersion(ctx, req, settings.GRPC...)
  309. return err
  310. }, opts...)
  311. if err != nil {
  312. return nil, err
  313. }
  314. return resp, nil
  315. }
  316. // CreateKeyRing create a new [KeyRing][google.cloud.kms.v1.KeyRing] in a given Project and
  317. // Location.
  318. func (c *KeyManagementClient) CreateKeyRing(ctx context.Context, req *kmspb.CreateKeyRingRequest, opts ...gax.CallOption) (*kmspb.KeyRing, error) {
  319. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  320. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  321. opts = append(c.CallOptions.CreateKeyRing[0:len(c.CallOptions.CreateKeyRing):len(c.CallOptions.CreateKeyRing)], opts...)
  322. var resp *kmspb.KeyRing
  323. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  324. var err error
  325. resp, err = c.keyManagementClient.CreateKeyRing(ctx, req, settings.GRPC...)
  326. return err
  327. }, opts...)
  328. if err != nil {
  329. return nil, err
  330. }
  331. return resp, nil
  332. }
  333. // CreateCryptoKey create a new [CryptoKey][google.cloud.kms.v1.CryptoKey] within a
  334. // [KeyRing][google.cloud.kms.v1.KeyRing].
  335. //
  336. // [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] and
  337. // [CryptoKey.version_template.algorithm][google.cloud.kms.v1.CryptoKeyVersionTemplate.algorithm]
  338. // are required.
  339. func (c *KeyManagementClient) CreateCryptoKey(ctx context.Context, req *kmspb.CreateCryptoKeyRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
  340. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  341. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  342. opts = append(c.CallOptions.CreateCryptoKey[0:len(c.CallOptions.CreateCryptoKey):len(c.CallOptions.CreateCryptoKey)], opts...)
  343. var resp *kmspb.CryptoKey
  344. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  345. var err error
  346. resp, err = c.keyManagementClient.CreateCryptoKey(ctx, req, settings.GRPC...)
  347. return err
  348. }, opts...)
  349. if err != nil {
  350. return nil, err
  351. }
  352. return resp, nil
  353. }
  354. // CreateCryptoKeyVersion create a new [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] in a
  355. // [CryptoKey][google.cloud.kms.v1.CryptoKey].
  356. //
  357. // The server will assign the next sequential id. If unset,
  358. // [state][google.cloud.kms.v1.CryptoKeyVersion.state] will be set to
  359. // [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED].
  360. func (c *KeyManagementClient) CreateCryptoKeyVersion(ctx context.Context, req *kmspb.CreateCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
  361. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  362. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  363. opts = append(c.CallOptions.CreateCryptoKeyVersion[0:len(c.CallOptions.CreateCryptoKeyVersion):len(c.CallOptions.CreateCryptoKeyVersion)], opts...)
  364. var resp *kmspb.CryptoKeyVersion
  365. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  366. var err error
  367. resp, err = c.keyManagementClient.CreateCryptoKeyVersion(ctx, req, settings.GRPC...)
  368. return err
  369. }, opts...)
  370. if err != nil {
  371. return nil, err
  372. }
  373. return resp, nil
  374. }
  375. // UpdateCryptoKey update a [CryptoKey][google.cloud.kms.v1.CryptoKey].
  376. func (c *KeyManagementClient) UpdateCryptoKey(ctx context.Context, req *kmspb.UpdateCryptoKeyRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
  377. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "crypto_key.name", req.GetCryptoKey().GetName()))
  378. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  379. opts = append(c.CallOptions.UpdateCryptoKey[0:len(c.CallOptions.UpdateCryptoKey):len(c.CallOptions.UpdateCryptoKey)], opts...)
  380. var resp *kmspb.CryptoKey
  381. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  382. var err error
  383. resp, err = c.keyManagementClient.UpdateCryptoKey(ctx, req, settings.GRPC...)
  384. return err
  385. }, opts...)
  386. if err != nil {
  387. return nil, err
  388. }
  389. return resp, nil
  390. }
  391. // UpdateCryptoKeyVersion update a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]'s
  392. // metadata.
  393. //
  394. // [state][google.cloud.kms.v1.CryptoKeyVersion.state] may be changed between
  395. // [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
  396. // and
  397. // [DISABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED]
  398. // using this method. See
  399. // [DestroyCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.DestroyCryptoKeyVersion]
  400. // and
  401. // [RestoreCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]
  402. // to move between other states.
  403. func (c *KeyManagementClient) UpdateCryptoKeyVersion(ctx context.Context, req *kmspb.UpdateCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
  404. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "crypto_key_version.name", req.GetCryptoKeyVersion().GetName()))
  405. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  406. opts = append(c.CallOptions.UpdateCryptoKeyVersion[0:len(c.CallOptions.UpdateCryptoKeyVersion):len(c.CallOptions.UpdateCryptoKeyVersion)], opts...)
  407. var resp *kmspb.CryptoKeyVersion
  408. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  409. var err error
  410. resp, err = c.keyManagementClient.UpdateCryptoKeyVersion(ctx, req, settings.GRPC...)
  411. return err
  412. }, opts...)
  413. if err != nil {
  414. return nil, err
  415. }
  416. return resp, nil
  417. }
  418. // Encrypt encrypts data, so that it can only be recovered by a call to
  419. // [Decrypt][google.cloud.kms.v1.KeyManagementService.Decrypt]. The
  420. // [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
  421. // [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
  422. func (c *KeyManagementClient) Encrypt(ctx context.Context, req *kmspb.EncryptRequest, opts ...gax.CallOption) (*kmspb.EncryptResponse, error) {
  423. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  424. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  425. opts = append(c.CallOptions.Encrypt[0:len(c.CallOptions.Encrypt):len(c.CallOptions.Encrypt)], opts...)
  426. var resp *kmspb.EncryptResponse
  427. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  428. var err error
  429. resp, err = c.keyManagementClient.Encrypt(ctx, req, settings.GRPC...)
  430. return err
  431. }, opts...)
  432. if err != nil {
  433. return nil, err
  434. }
  435. return resp, nil
  436. }
  437. // Decrypt decrypts data that was protected by
  438. // [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt]. The
  439. // [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
  440. // [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
  441. func (c *KeyManagementClient) Decrypt(ctx context.Context, req *kmspb.DecryptRequest, opts ...gax.CallOption) (*kmspb.DecryptResponse, error) {
  442. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  443. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  444. opts = append(c.CallOptions.Decrypt[0:len(c.CallOptions.Decrypt):len(c.CallOptions.Decrypt)], opts...)
  445. var resp *kmspb.DecryptResponse
  446. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  447. var err error
  448. resp, err = c.keyManagementClient.Decrypt(ctx, req, settings.GRPC...)
  449. return err
  450. }, opts...)
  451. if err != nil {
  452. return nil, err
  453. }
  454. return resp, nil
  455. }
  456. // UpdateCryptoKeyPrimaryVersion update the version of a [CryptoKey][google.cloud.kms.v1.CryptoKey] that
  457. // will be used in
  458. // [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt].
  459. //
  460. // Returns an error if called on an asymmetric key.
  461. func (c *KeyManagementClient) UpdateCryptoKeyPrimaryVersion(ctx context.Context, req *kmspb.UpdateCryptoKeyPrimaryVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
  462. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  463. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  464. opts = append(c.CallOptions.UpdateCryptoKeyPrimaryVersion[0:len(c.CallOptions.UpdateCryptoKeyPrimaryVersion):len(c.CallOptions.UpdateCryptoKeyPrimaryVersion)], opts...)
  465. var resp *kmspb.CryptoKey
  466. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  467. var err error
  468. resp, err = c.keyManagementClient.UpdateCryptoKeyPrimaryVersion(ctx, req, settings.GRPC...)
  469. return err
  470. }, opts...)
  471. if err != nil {
  472. return nil, err
  473. }
  474. return resp, nil
  475. }
  476. // DestroyCryptoKeyVersion schedule a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] for
  477. // destruction.
  478. //
  479. // Upon calling this method,
  480. // [CryptoKeyVersion.state][google.cloud.kms.v1.CryptoKeyVersion.state] will
  481. // be set to
  482. // [DESTROY_SCHEDULED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED]
  483. // and [destroy_time][google.cloud.kms.v1.CryptoKeyVersion.destroy_time] will
  484. // be set to a time 24 hours in the future, at which point the
  485. // [state][google.cloud.kms.v1.CryptoKeyVersion.state] will be changed to
  486. // [DESTROYED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROYED],
  487. // and the key material will be irrevocably destroyed.
  488. //
  489. // Before the
  490. // [destroy_time][google.cloud.kms.v1.CryptoKeyVersion.destroy_time] is
  491. // reached,
  492. // [RestoreCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]
  493. // may be called to reverse the process.
  494. func (c *KeyManagementClient) DestroyCryptoKeyVersion(ctx context.Context, req *kmspb.DestroyCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
  495. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  496. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  497. opts = append(c.CallOptions.DestroyCryptoKeyVersion[0:len(c.CallOptions.DestroyCryptoKeyVersion):len(c.CallOptions.DestroyCryptoKeyVersion)], opts...)
  498. var resp *kmspb.CryptoKeyVersion
  499. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  500. var err error
  501. resp, err = c.keyManagementClient.DestroyCryptoKeyVersion(ctx, req, settings.GRPC...)
  502. return err
  503. }, opts...)
  504. if err != nil {
  505. return nil, err
  506. }
  507. return resp, nil
  508. }
  509. // RestoreCryptoKeyVersion restore a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] in the
  510. // [DESTROY_SCHEDULED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED]
  511. // state.
  512. //
  513. // Upon restoration of the CryptoKeyVersion,
  514. // [state][google.cloud.kms.v1.CryptoKeyVersion.state] will be set to
  515. // [DISABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED],
  516. // and [destroy_time][google.cloud.kms.v1.CryptoKeyVersion.destroy_time] will
  517. // be cleared.
  518. func (c *KeyManagementClient) RestoreCryptoKeyVersion(ctx context.Context, req *kmspb.RestoreCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
  519. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  520. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  521. opts = append(c.CallOptions.RestoreCryptoKeyVersion[0:len(c.CallOptions.RestoreCryptoKeyVersion):len(c.CallOptions.RestoreCryptoKeyVersion)], opts...)
  522. var resp *kmspb.CryptoKeyVersion
  523. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  524. var err error
  525. resp, err = c.keyManagementClient.RestoreCryptoKeyVersion(ctx, req, settings.GRPC...)
  526. return err
  527. }, opts...)
  528. if err != nil {
  529. return nil, err
  530. }
  531. return resp, nil
  532. }
  533. // GetPublicKey returns the public key for the given
  534. // [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]. The
  535. // [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
  536. // [ASYMMETRIC_SIGN][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_SIGN]
  537. // or
  538. // [ASYMMETRIC_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_DECRYPT].
  539. func (c *KeyManagementClient) GetPublicKey(ctx context.Context, req *kmspb.GetPublicKeyRequest, opts ...gax.CallOption) (*kmspb.PublicKey, error) {
  540. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  541. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  542. opts = append(c.CallOptions.GetPublicKey[0:len(c.CallOptions.GetPublicKey):len(c.CallOptions.GetPublicKey)], opts...)
  543. var resp *kmspb.PublicKey
  544. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  545. var err error
  546. resp, err = c.keyManagementClient.GetPublicKey(ctx, req, settings.GRPC...)
  547. return err
  548. }, opts...)
  549. if err != nil {
  550. return nil, err
  551. }
  552. return resp, nil
  553. }
  554. // AsymmetricDecrypt decrypts data that was encrypted with a public key retrieved from
  555. // [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey]
  556. // corresponding to a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
  557. // with [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
  558. // ASYMMETRIC_DECRYPT.
  559. func (c *KeyManagementClient) AsymmetricDecrypt(ctx context.Context, req *kmspb.AsymmetricDecryptRequest, opts ...gax.CallOption) (*kmspb.AsymmetricDecryptResponse, error) {
  560. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  561. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  562. opts = append(c.CallOptions.AsymmetricDecrypt[0:len(c.CallOptions.AsymmetricDecrypt):len(c.CallOptions.AsymmetricDecrypt)], opts...)
  563. var resp *kmspb.AsymmetricDecryptResponse
  564. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  565. var err error
  566. resp, err = c.keyManagementClient.AsymmetricDecrypt(ctx, req, settings.GRPC...)
  567. return err
  568. }, opts...)
  569. if err != nil {
  570. return nil, err
  571. }
  572. return resp, nil
  573. }
  574. // AsymmetricSign signs data using a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
  575. // with [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
  576. // ASYMMETRIC_SIGN, producing a signature that can be verified with the public
  577. // key retrieved from
  578. // [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey].
  579. func (c *KeyManagementClient) AsymmetricSign(ctx context.Context, req *kmspb.AsymmetricSignRequest, opts ...gax.CallOption) (*kmspb.AsymmetricSignResponse, error) {
  580. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  581. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  582. opts = append(c.CallOptions.AsymmetricSign[0:len(c.CallOptions.AsymmetricSign):len(c.CallOptions.AsymmetricSign)], opts...)
  583. var resp *kmspb.AsymmetricSignResponse
  584. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  585. var err error
  586. resp, err = c.keyManagementClient.AsymmetricSign(ctx, req, settings.GRPC...)
  587. return err
  588. }, opts...)
  589. if err != nil {
  590. return nil, err
  591. }
  592. return resp, nil
  593. }
  594. // CryptoKeyIterator manages a stream of *kmspb.CryptoKey.
  595. type CryptoKeyIterator struct {
  596. items []*kmspb.CryptoKey
  597. pageInfo *iterator.PageInfo
  598. nextFunc func() error
  599. // InternalFetch is for use by the Google Cloud Libraries only.
  600. // It is not part of the stable interface of this package.
  601. //
  602. // InternalFetch returns results from a single call to the underlying RPC.
  603. // The number of results is no greater than pageSize.
  604. // If there are no more results, nextPageToken is empty and err is nil.
  605. InternalFetch func(pageSize int, pageToken string) (results []*kmspb.CryptoKey, nextPageToken string, err error)
  606. }
  607. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  608. func (it *CryptoKeyIterator) PageInfo() *iterator.PageInfo {
  609. return it.pageInfo
  610. }
  611. // Next returns the next result. Its second return value is iterator.Done if there are no more
  612. // results. Once Next returns Done, all subsequent calls will return Done.
  613. func (it *CryptoKeyIterator) Next() (*kmspb.CryptoKey, error) {
  614. var item *kmspb.CryptoKey
  615. if err := it.nextFunc(); err != nil {
  616. return item, err
  617. }
  618. item = it.items[0]
  619. it.items = it.items[1:]
  620. return item, nil
  621. }
  622. func (it *CryptoKeyIterator) bufLen() int {
  623. return len(it.items)
  624. }
  625. func (it *CryptoKeyIterator) takeBuf() interface{} {
  626. b := it.items
  627. it.items = nil
  628. return b
  629. }
  630. // CryptoKeyVersionIterator manages a stream of *kmspb.CryptoKeyVersion.
  631. type CryptoKeyVersionIterator struct {
  632. items []*kmspb.CryptoKeyVersion
  633. pageInfo *iterator.PageInfo
  634. nextFunc func() error
  635. // InternalFetch is for use by the Google Cloud Libraries only.
  636. // It is not part of the stable interface of this package.
  637. //
  638. // InternalFetch returns results from a single call to the underlying RPC.
  639. // The number of results is no greater than pageSize.
  640. // If there are no more results, nextPageToken is empty and err is nil.
  641. InternalFetch func(pageSize int, pageToken string) (results []*kmspb.CryptoKeyVersion, nextPageToken string, err error)
  642. }
  643. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  644. func (it *CryptoKeyVersionIterator) PageInfo() *iterator.PageInfo {
  645. return it.pageInfo
  646. }
  647. // Next returns the next result. Its second return value is iterator.Done if there are no more
  648. // results. Once Next returns Done, all subsequent calls will return Done.
  649. func (it *CryptoKeyVersionIterator) Next() (*kmspb.CryptoKeyVersion, error) {
  650. var item *kmspb.CryptoKeyVersion
  651. if err := it.nextFunc(); err != nil {
  652. return item, err
  653. }
  654. item = it.items[0]
  655. it.items = it.items[1:]
  656. return item, nil
  657. }
  658. func (it *CryptoKeyVersionIterator) bufLen() int {
  659. return len(it.items)
  660. }
  661. func (it *CryptoKeyVersionIterator) takeBuf() interface{} {
  662. b := it.items
  663. it.items = nil
  664. return b
  665. }
  666. // KeyRingIterator manages a stream of *kmspb.KeyRing.
  667. type KeyRingIterator struct {
  668. items []*kmspb.KeyRing
  669. pageInfo *iterator.PageInfo
  670. nextFunc func() error
  671. // InternalFetch is for use by the Google Cloud Libraries only.
  672. // It is not part of the stable interface of this package.
  673. //
  674. // InternalFetch returns results from a single call to the underlying RPC.
  675. // The number of results is no greater than pageSize.
  676. // If there are no more results, nextPageToken is empty and err is nil.
  677. InternalFetch func(pageSize int, pageToken string) (results []*kmspb.KeyRing, nextPageToken string, err error)
  678. }
  679. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  680. func (it *KeyRingIterator) PageInfo() *iterator.PageInfo {
  681. return it.pageInfo
  682. }
  683. // Next returns the next result. Its second return value is iterator.Done if there are no more
  684. // results. Once Next returns Done, all subsequent calls will return Done.
  685. func (it *KeyRingIterator) Next() (*kmspb.KeyRing, error) {
  686. var item *kmspb.KeyRing
  687. if err := it.nextFunc(); err != nil {
  688. return item, err
  689. }
  690. item = it.items[0]
  691. it.items = it.items[1:]
  692. return item, nil
  693. }
  694. func (it *KeyRingIterator) bufLen() int {
  695. return len(it.items)
  696. }
  697. func (it *KeyRingIterator) takeBuf() interface{} {
  698. b := it.items
  699. it.items = nil
  700. return b
  701. }