1// Copyright 2020 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
15// Code generated by protoc-gen-go_gapic. DO NOT EDIT.
16
17package kms
18
19import (
20	"context"
21	"fmt"
22	"math"
23	"net/url"
24	"time"
25
26	"github.com/golang/protobuf/proto"
27	gax "github.com/googleapis/gax-go/v2"
28	"google.golang.org/api/iterator"
29	"google.golang.org/api/option"
30	"google.golang.org/api/option/internaloption"
31	gtransport "google.golang.org/api/transport/grpc"
32	kmspb "google.golang.org/genproto/googleapis/cloud/kms/v1"
33	"google.golang.org/grpc"
34	"google.golang.org/grpc/codes"
35	"google.golang.org/grpc/metadata"
36)
37
38var newKeyManagementClientHook clientHook
39
40// KeyManagementCallOptions contains the retry settings for each method of KeyManagementClient.
41type KeyManagementCallOptions struct {
42	ListKeyRings                  []gax.CallOption
43	ListCryptoKeys                []gax.CallOption
44	ListCryptoKeyVersions         []gax.CallOption
45	ListImportJobs                []gax.CallOption
46	GetKeyRing                    []gax.CallOption
47	GetCryptoKey                  []gax.CallOption
48	GetCryptoKeyVersion           []gax.CallOption
49	GetPublicKey                  []gax.CallOption
50	GetImportJob                  []gax.CallOption
51	CreateKeyRing                 []gax.CallOption
52	CreateCryptoKey               []gax.CallOption
53	CreateCryptoKeyVersion        []gax.CallOption
54	ImportCryptoKeyVersion        []gax.CallOption
55	CreateImportJob               []gax.CallOption
56	UpdateCryptoKey               []gax.CallOption
57	UpdateCryptoKeyVersion        []gax.CallOption
58	Encrypt                       []gax.CallOption
59	Decrypt                       []gax.CallOption
60	AsymmetricSign                []gax.CallOption
61	AsymmetricDecrypt             []gax.CallOption
62	UpdateCryptoKeyPrimaryVersion []gax.CallOption
63	DestroyCryptoKeyVersion       []gax.CallOption
64	RestoreCryptoKeyVersion       []gax.CallOption
65}
66
67func defaultKeyManagementClientOptions() []option.ClientOption {
68	return []option.ClientOption{
69		internaloption.WithDefaultEndpoint("cloudkms.googleapis.com:443"),
70		internaloption.WithDefaultMTLSEndpoint("cloudkms.mtls.googleapis.com:443"),
71		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
72		option.WithScopes(DefaultAuthScopes()...),
73		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
74			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
75	}
76}
77
78func defaultKeyManagementCallOptions() *KeyManagementCallOptions {
79	return &KeyManagementCallOptions{
80		ListKeyRings: []gax.CallOption{
81			gax.WithRetry(func() gax.Retryer {
82				return gax.OnCodes([]codes.Code{
83					codes.Internal,
84					codes.Unavailable,
85					codes.DeadlineExceeded,
86				}, gax.Backoff{
87					Initial:    100 * time.Millisecond,
88					Max:        60000 * time.Millisecond,
89					Multiplier: 1.30,
90				})
91			}),
92		},
93		ListCryptoKeys: []gax.CallOption{
94			gax.WithRetry(func() gax.Retryer {
95				return gax.OnCodes([]codes.Code{
96					codes.Internal,
97					codes.Unavailable,
98					codes.DeadlineExceeded,
99				}, gax.Backoff{
100					Initial:    100 * time.Millisecond,
101					Max:        60000 * time.Millisecond,
102					Multiplier: 1.30,
103				})
104			}),
105		},
106		ListCryptoKeyVersions: []gax.CallOption{
107			gax.WithRetry(func() gax.Retryer {
108				return gax.OnCodes([]codes.Code{
109					codes.Internal,
110					codes.Unavailable,
111					codes.DeadlineExceeded,
112				}, gax.Backoff{
113					Initial:    100 * time.Millisecond,
114					Max:        60000 * time.Millisecond,
115					Multiplier: 1.30,
116				})
117			}),
118		},
119		ListImportJobs: []gax.CallOption{
120			gax.WithRetry(func() gax.Retryer {
121				return gax.OnCodes([]codes.Code{
122					codes.Internal,
123					codes.Unavailable,
124					codes.DeadlineExceeded,
125				}, gax.Backoff{
126					Initial:    100 * time.Millisecond,
127					Max:        60000 * time.Millisecond,
128					Multiplier: 1.30,
129				})
130			}),
131		},
132		GetKeyRing: []gax.CallOption{
133			gax.WithRetry(func() gax.Retryer {
134				return gax.OnCodes([]codes.Code{
135					codes.Internal,
136					codes.Unavailable,
137					codes.DeadlineExceeded,
138				}, gax.Backoff{
139					Initial:    100 * time.Millisecond,
140					Max:        60000 * time.Millisecond,
141					Multiplier: 1.30,
142				})
143			}),
144		},
145		GetCryptoKey: []gax.CallOption{
146			gax.WithRetry(func() gax.Retryer {
147				return gax.OnCodes([]codes.Code{
148					codes.Internal,
149					codes.Unavailable,
150					codes.DeadlineExceeded,
151				}, gax.Backoff{
152					Initial:    100 * time.Millisecond,
153					Max:        60000 * time.Millisecond,
154					Multiplier: 1.30,
155				})
156			}),
157		},
158		GetCryptoKeyVersion: []gax.CallOption{
159			gax.WithRetry(func() gax.Retryer {
160				return gax.OnCodes([]codes.Code{
161					codes.Internal,
162					codes.Unavailable,
163					codes.DeadlineExceeded,
164				}, gax.Backoff{
165					Initial:    100 * time.Millisecond,
166					Max:        60000 * time.Millisecond,
167					Multiplier: 1.30,
168				})
169			}),
170		},
171		GetPublicKey: []gax.CallOption{
172			gax.WithRetry(func() gax.Retryer {
173				return gax.OnCodes([]codes.Code{
174					codes.Internal,
175					codes.Unavailable,
176					codes.DeadlineExceeded,
177				}, gax.Backoff{
178					Initial:    100 * time.Millisecond,
179					Max:        60000 * time.Millisecond,
180					Multiplier: 1.30,
181				})
182			}),
183		},
184		GetImportJob: []gax.CallOption{
185			gax.WithRetry(func() gax.Retryer {
186				return gax.OnCodes([]codes.Code{
187					codes.Internal,
188					codes.Unavailable,
189					codes.DeadlineExceeded,
190				}, gax.Backoff{
191					Initial:    100 * time.Millisecond,
192					Max:        60000 * time.Millisecond,
193					Multiplier: 1.30,
194				})
195			}),
196		},
197		CreateKeyRing: []gax.CallOption{
198			gax.WithRetry(func() gax.Retryer {
199				return gax.OnCodes([]codes.Code{
200					codes.Internal,
201					codes.Unavailable,
202					codes.DeadlineExceeded,
203				}, gax.Backoff{
204					Initial:    100 * time.Millisecond,
205					Max:        60000 * time.Millisecond,
206					Multiplier: 1.30,
207				})
208			}),
209		},
210		CreateCryptoKey: []gax.CallOption{
211			gax.WithRetry(func() gax.Retryer {
212				return gax.OnCodes([]codes.Code{
213					codes.Internal,
214					codes.Unavailable,
215					codes.DeadlineExceeded,
216				}, gax.Backoff{
217					Initial:    100 * time.Millisecond,
218					Max:        60000 * time.Millisecond,
219					Multiplier: 1.30,
220				})
221			}),
222		},
223		CreateCryptoKeyVersion: []gax.CallOption{},
224		ImportCryptoKeyVersion: []gax.CallOption{},
225		CreateImportJob: []gax.CallOption{
226			gax.WithRetry(func() gax.Retryer {
227				return gax.OnCodes([]codes.Code{
228					codes.Internal,
229					codes.Unavailable,
230					codes.DeadlineExceeded,
231				}, gax.Backoff{
232					Initial:    100 * time.Millisecond,
233					Max:        60000 * time.Millisecond,
234					Multiplier: 1.30,
235				})
236			}),
237		},
238		UpdateCryptoKey: []gax.CallOption{
239			gax.WithRetry(func() gax.Retryer {
240				return gax.OnCodes([]codes.Code{
241					codes.Internal,
242					codes.Unavailable,
243					codes.DeadlineExceeded,
244				}, gax.Backoff{
245					Initial:    100 * time.Millisecond,
246					Max:        60000 * time.Millisecond,
247					Multiplier: 1.30,
248				})
249			}),
250		},
251		UpdateCryptoKeyVersion: []gax.CallOption{
252			gax.WithRetry(func() gax.Retryer {
253				return gax.OnCodes([]codes.Code{
254					codes.Internal,
255					codes.Unavailable,
256					codes.DeadlineExceeded,
257				}, gax.Backoff{
258					Initial:    100 * time.Millisecond,
259					Max:        60000 * time.Millisecond,
260					Multiplier: 1.30,
261				})
262			}),
263		},
264		Encrypt: []gax.CallOption{
265			gax.WithRetry(func() gax.Retryer {
266				return gax.OnCodes([]codes.Code{
267					codes.Internal,
268					codes.Unavailable,
269					codes.DeadlineExceeded,
270				}, gax.Backoff{
271					Initial:    100 * time.Millisecond,
272					Max:        60000 * time.Millisecond,
273					Multiplier: 1.30,
274				})
275			}),
276		},
277		Decrypt: []gax.CallOption{
278			gax.WithRetry(func() gax.Retryer {
279				return gax.OnCodes([]codes.Code{
280					codes.Internal,
281					codes.Unavailable,
282					codes.DeadlineExceeded,
283				}, gax.Backoff{
284					Initial:    100 * time.Millisecond,
285					Max:        60000 * time.Millisecond,
286					Multiplier: 1.30,
287				})
288			}),
289		},
290		AsymmetricSign: []gax.CallOption{
291			gax.WithRetry(func() gax.Retryer {
292				return gax.OnCodes([]codes.Code{
293					codes.Internal,
294					codes.Unavailable,
295					codes.DeadlineExceeded,
296				}, gax.Backoff{
297					Initial:    100 * time.Millisecond,
298					Max:        60000 * time.Millisecond,
299					Multiplier: 1.30,
300				})
301			}),
302		},
303		AsymmetricDecrypt: []gax.CallOption{
304			gax.WithRetry(func() gax.Retryer {
305				return gax.OnCodes([]codes.Code{
306					codes.Internal,
307					codes.Unavailable,
308					codes.DeadlineExceeded,
309				}, gax.Backoff{
310					Initial:    100 * time.Millisecond,
311					Max:        60000 * time.Millisecond,
312					Multiplier: 1.30,
313				})
314			}),
315		},
316		UpdateCryptoKeyPrimaryVersion: []gax.CallOption{
317			gax.WithRetry(func() gax.Retryer {
318				return gax.OnCodes([]codes.Code{
319					codes.Internal,
320					codes.Unavailable,
321					codes.DeadlineExceeded,
322				}, gax.Backoff{
323					Initial:    100 * time.Millisecond,
324					Max:        60000 * time.Millisecond,
325					Multiplier: 1.30,
326				})
327			}),
328		},
329		DestroyCryptoKeyVersion: []gax.CallOption{
330			gax.WithRetry(func() gax.Retryer {
331				return gax.OnCodes([]codes.Code{
332					codes.Internal,
333					codes.Unavailable,
334					codes.DeadlineExceeded,
335				}, gax.Backoff{
336					Initial:    100 * time.Millisecond,
337					Max:        60000 * time.Millisecond,
338					Multiplier: 1.30,
339				})
340			}),
341		},
342		RestoreCryptoKeyVersion: []gax.CallOption{
343			gax.WithRetry(func() gax.Retryer {
344				return gax.OnCodes([]codes.Code{
345					codes.Internal,
346					codes.Unavailable,
347					codes.DeadlineExceeded,
348				}, gax.Backoff{
349					Initial:    100 * time.Millisecond,
350					Max:        60000 * time.Millisecond,
351					Multiplier: 1.30,
352				})
353			}),
354		},
355	}
356}
357
358// KeyManagementClient is a client for interacting with Cloud Key Management Service (KMS) API.
359//
360// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
361type KeyManagementClient struct {
362	// Connection pool of gRPC connections to the service.
363	connPool gtransport.ConnPool
364
365	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
366	disableDeadlines bool
367
368	// The gRPC API client.
369	keyManagementClient kmspb.KeyManagementServiceClient
370
371	// The call options for this service.
372	CallOptions *KeyManagementCallOptions
373
374	// The x-goog-* metadata to be sent with each request.
375	xGoogMetadata metadata.MD
376}
377
378// NewKeyManagementClient creates a new key management service client.
379//
380// Google Cloud Key Management Service
381//
382// Manages cryptographic keys and operations using those keys. Implements a REST
383// model with the following objects:
384//
385//   KeyRing
386//
387//   CryptoKey
388//
389//   CryptoKeyVersion
390//
391//   ImportJob
392//
393// If you are using manual gRPC libraries, see
394// Using gRPC with Cloud KMS (at https://cloud.google.com/kms/docs/grpc).
395func NewKeyManagementClient(ctx context.Context, opts ...option.ClientOption) (*KeyManagementClient, error) {
396	clientOpts := defaultKeyManagementClientOptions()
397
398	if newKeyManagementClientHook != nil {
399		hookOpts, err := newKeyManagementClientHook(ctx, clientHookParams{})
400		if err != nil {
401			return nil, err
402		}
403		clientOpts = append(clientOpts, hookOpts...)
404	}
405
406	disableDeadlines, err := checkDisableDeadlines()
407	if err != nil {
408		return nil, err
409	}
410
411	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
412	if err != nil {
413		return nil, err
414	}
415	c := &KeyManagementClient{
416		connPool:         connPool,
417		disableDeadlines: disableDeadlines,
418		CallOptions:      defaultKeyManagementCallOptions(),
419
420		keyManagementClient: kmspb.NewKeyManagementServiceClient(connPool),
421	}
422	c.setGoogleClientInfo()
423
424	return c, nil
425}
426
427// Connection returns a connection to the API service.
428//
429// Deprecated.
430func (c *KeyManagementClient) Connection() *grpc.ClientConn {
431	return c.connPool.Conn()
432}
433
434// Close closes the connection to the API service. The user should invoke this when
435// the client is no longer required.
436func (c *KeyManagementClient) Close() error {
437	return c.connPool.Close()
438}
439
440// setGoogleClientInfo sets the name and version of the application in
441// the `x-goog-api-client` header passed on each request. Intended for
442// use by Google-written clients.
443func (c *KeyManagementClient) setGoogleClientInfo(keyval ...string) {
444	kv := append([]string{"gl-go", versionGo()}, keyval...)
445	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
446	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
447}
448
449// ListKeyRings lists KeyRings.
450func (c *KeyManagementClient) ListKeyRings(ctx context.Context, req *kmspb.ListKeyRingsRequest, opts ...gax.CallOption) *KeyRingIterator {
451	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
452	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
453	opts = append(c.CallOptions.ListKeyRings[0:len(c.CallOptions.ListKeyRings):len(c.CallOptions.ListKeyRings)], opts...)
454	it := &KeyRingIterator{}
455	req = proto.Clone(req).(*kmspb.ListKeyRingsRequest)
456	it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.KeyRing, string, error) {
457		var resp *kmspb.ListKeyRingsResponse
458		req.PageToken = pageToken
459		if pageSize > math.MaxInt32 {
460			req.PageSize = math.MaxInt32
461		} else {
462			req.PageSize = int32(pageSize)
463		}
464		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
465			var err error
466			resp, err = c.keyManagementClient.ListKeyRings(ctx, req, settings.GRPC...)
467			return err
468		}, opts...)
469		if err != nil {
470			return nil, "", err
471		}
472
473		it.Response = resp
474		return resp.GetKeyRings(), resp.GetNextPageToken(), nil
475	}
476	fetch := func(pageSize int, pageToken string) (string, error) {
477		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
478		if err != nil {
479			return "", err
480		}
481		it.items = append(it.items, items...)
482		return nextPageToken, nil
483	}
484	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
485	it.pageInfo.MaxSize = int(req.GetPageSize())
486	it.pageInfo.Token = req.GetPageToken()
487	return it
488}
489
490// ListCryptoKeys lists CryptoKeys.
491func (c *KeyManagementClient) ListCryptoKeys(ctx context.Context, req *kmspb.ListCryptoKeysRequest, opts ...gax.CallOption) *CryptoKeyIterator {
492	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
493	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
494	opts = append(c.CallOptions.ListCryptoKeys[0:len(c.CallOptions.ListCryptoKeys):len(c.CallOptions.ListCryptoKeys)], opts...)
495	it := &CryptoKeyIterator{}
496	req = proto.Clone(req).(*kmspb.ListCryptoKeysRequest)
497	it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.CryptoKey, string, error) {
498		var resp *kmspb.ListCryptoKeysResponse
499		req.PageToken = pageToken
500		if pageSize > math.MaxInt32 {
501			req.PageSize = math.MaxInt32
502		} else {
503			req.PageSize = int32(pageSize)
504		}
505		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
506			var err error
507			resp, err = c.keyManagementClient.ListCryptoKeys(ctx, req, settings.GRPC...)
508			return err
509		}, opts...)
510		if err != nil {
511			return nil, "", err
512		}
513
514		it.Response = resp
515		return resp.GetCryptoKeys(), resp.GetNextPageToken(), nil
516	}
517	fetch := func(pageSize int, pageToken string) (string, error) {
518		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
519		if err != nil {
520			return "", err
521		}
522		it.items = append(it.items, items...)
523		return nextPageToken, nil
524	}
525	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
526	it.pageInfo.MaxSize = int(req.GetPageSize())
527	it.pageInfo.Token = req.GetPageToken()
528	return it
529}
530
531// ListCryptoKeyVersions lists CryptoKeyVersions.
532func (c *KeyManagementClient) ListCryptoKeyVersions(ctx context.Context, req *kmspb.ListCryptoKeyVersionsRequest, opts ...gax.CallOption) *CryptoKeyVersionIterator {
533	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
534	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
535	opts = append(c.CallOptions.ListCryptoKeyVersions[0:len(c.CallOptions.ListCryptoKeyVersions):len(c.CallOptions.ListCryptoKeyVersions)], opts...)
536	it := &CryptoKeyVersionIterator{}
537	req = proto.Clone(req).(*kmspb.ListCryptoKeyVersionsRequest)
538	it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.CryptoKeyVersion, string, error) {
539		var resp *kmspb.ListCryptoKeyVersionsResponse
540		req.PageToken = pageToken
541		if pageSize > math.MaxInt32 {
542			req.PageSize = math.MaxInt32
543		} else {
544			req.PageSize = int32(pageSize)
545		}
546		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
547			var err error
548			resp, err = c.keyManagementClient.ListCryptoKeyVersions(ctx, req, settings.GRPC...)
549			return err
550		}, opts...)
551		if err != nil {
552			return nil, "", err
553		}
554
555		it.Response = resp
556		return resp.GetCryptoKeyVersions(), resp.GetNextPageToken(), nil
557	}
558	fetch := func(pageSize int, pageToken string) (string, error) {
559		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
560		if err != nil {
561			return "", err
562		}
563		it.items = append(it.items, items...)
564		return nextPageToken, nil
565	}
566	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
567	it.pageInfo.MaxSize = int(req.GetPageSize())
568	it.pageInfo.Token = req.GetPageToken()
569	return it
570}
571
572// ListImportJobs lists ImportJobs.
573func (c *KeyManagementClient) ListImportJobs(ctx context.Context, req *kmspb.ListImportJobsRequest, opts ...gax.CallOption) *ImportJobIterator {
574	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
575	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
576	opts = append(c.CallOptions.ListImportJobs[0:len(c.CallOptions.ListImportJobs):len(c.CallOptions.ListImportJobs)], opts...)
577	it := &ImportJobIterator{}
578	req = proto.Clone(req).(*kmspb.ListImportJobsRequest)
579	it.InternalFetch = func(pageSize int, pageToken string) ([]*kmspb.ImportJob, string, error) {
580		var resp *kmspb.ListImportJobsResponse
581		req.PageToken = pageToken
582		if pageSize > math.MaxInt32 {
583			req.PageSize = math.MaxInt32
584		} else {
585			req.PageSize = int32(pageSize)
586		}
587		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
588			var err error
589			resp, err = c.keyManagementClient.ListImportJobs(ctx, req, settings.GRPC...)
590			return err
591		}, opts...)
592		if err != nil {
593			return nil, "", err
594		}
595
596		it.Response = resp
597		return resp.GetImportJobs(), resp.GetNextPageToken(), nil
598	}
599	fetch := func(pageSize int, pageToken string) (string, error) {
600		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
601		if err != nil {
602			return "", err
603		}
604		it.items = append(it.items, items...)
605		return nextPageToken, nil
606	}
607	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
608	it.pageInfo.MaxSize = int(req.GetPageSize())
609	it.pageInfo.Token = req.GetPageToken()
610	return it
611}
612
613// GetKeyRing returns metadata for a given KeyRing.
614func (c *KeyManagementClient) GetKeyRing(ctx context.Context, req *kmspb.GetKeyRingRequest, opts ...gax.CallOption) (*kmspb.KeyRing, error) {
615	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
616		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
617		defer cancel()
618		ctx = cctx
619	}
620	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
621	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
622	opts = append(c.CallOptions.GetKeyRing[0:len(c.CallOptions.GetKeyRing):len(c.CallOptions.GetKeyRing)], opts...)
623	var resp *kmspb.KeyRing
624	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
625		var err error
626		resp, err = c.keyManagementClient.GetKeyRing(ctx, req, settings.GRPC...)
627		return err
628	}, opts...)
629	if err != nil {
630		return nil, err
631	}
632	return resp, nil
633}
634
635// GetCryptoKey returns metadata for a given CryptoKey, as well as its
636// primary CryptoKeyVersion.
637func (c *KeyManagementClient) GetCryptoKey(ctx context.Context, req *kmspb.GetCryptoKeyRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
638	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
639		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
640		defer cancel()
641		ctx = cctx
642	}
643	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
644	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
645	opts = append(c.CallOptions.GetCryptoKey[0:len(c.CallOptions.GetCryptoKey):len(c.CallOptions.GetCryptoKey)], opts...)
646	var resp *kmspb.CryptoKey
647	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
648		var err error
649		resp, err = c.keyManagementClient.GetCryptoKey(ctx, req, settings.GRPC...)
650		return err
651	}, opts...)
652	if err != nil {
653		return nil, err
654	}
655	return resp, nil
656}
657
658// GetCryptoKeyVersion returns metadata for a given CryptoKeyVersion.
659func (c *KeyManagementClient) GetCryptoKeyVersion(ctx context.Context, req *kmspb.GetCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
660	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
661		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
662		defer cancel()
663		ctx = cctx
664	}
665	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
666	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
667	opts = append(c.CallOptions.GetCryptoKeyVersion[0:len(c.CallOptions.GetCryptoKeyVersion):len(c.CallOptions.GetCryptoKeyVersion)], opts...)
668	var resp *kmspb.CryptoKeyVersion
669	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
670		var err error
671		resp, err = c.keyManagementClient.GetCryptoKeyVersion(ctx, req, settings.GRPC...)
672		return err
673	}, opts...)
674	if err != nil {
675		return nil, err
676	}
677	return resp, nil
678}
679
680// GetPublicKey returns the public key for the given CryptoKeyVersion. The
681// CryptoKey.purpose must be
682// ASYMMETRIC_SIGN or
683// ASYMMETRIC_DECRYPT.
684func (c *KeyManagementClient) GetPublicKey(ctx context.Context, req *kmspb.GetPublicKeyRequest, opts ...gax.CallOption) (*kmspb.PublicKey, error) {
685	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
686		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
687		defer cancel()
688		ctx = cctx
689	}
690	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
691	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
692	opts = append(c.CallOptions.GetPublicKey[0:len(c.CallOptions.GetPublicKey):len(c.CallOptions.GetPublicKey)], opts...)
693	var resp *kmspb.PublicKey
694	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
695		var err error
696		resp, err = c.keyManagementClient.GetPublicKey(ctx, req, settings.GRPC...)
697		return err
698	}, opts...)
699	if err != nil {
700		return nil, err
701	}
702	return resp, nil
703}
704
705// GetImportJob returns metadata for a given ImportJob.
706func (c *KeyManagementClient) GetImportJob(ctx context.Context, req *kmspb.GetImportJobRequest, opts ...gax.CallOption) (*kmspb.ImportJob, error) {
707	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
708		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
709		defer cancel()
710		ctx = cctx
711	}
712	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
713	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
714	opts = append(c.CallOptions.GetImportJob[0:len(c.CallOptions.GetImportJob):len(c.CallOptions.GetImportJob)], opts...)
715	var resp *kmspb.ImportJob
716	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
717		var err error
718		resp, err = c.keyManagementClient.GetImportJob(ctx, req, settings.GRPC...)
719		return err
720	}, opts...)
721	if err != nil {
722		return nil, err
723	}
724	return resp, nil
725}
726
727// CreateKeyRing create a new KeyRing in a given Project and Location.
728func (c *KeyManagementClient) CreateKeyRing(ctx context.Context, req *kmspb.CreateKeyRingRequest, opts ...gax.CallOption) (*kmspb.KeyRing, error) {
729	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
730		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
731		defer cancel()
732		ctx = cctx
733	}
734	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
735	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
736	opts = append(c.CallOptions.CreateKeyRing[0:len(c.CallOptions.CreateKeyRing):len(c.CallOptions.CreateKeyRing)], opts...)
737	var resp *kmspb.KeyRing
738	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
739		var err error
740		resp, err = c.keyManagementClient.CreateKeyRing(ctx, req, settings.GRPC...)
741		return err
742	}, opts...)
743	if err != nil {
744		return nil, err
745	}
746	return resp, nil
747}
748
749// CreateCryptoKey create a new CryptoKey within a KeyRing.
750//
751// CryptoKey.purpose and
752// CryptoKey.version_template.algorithm
753// are required.
754func (c *KeyManagementClient) CreateCryptoKey(ctx context.Context, req *kmspb.CreateCryptoKeyRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
755	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
756		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
757		defer cancel()
758		ctx = cctx
759	}
760	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
761	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
762	opts = append(c.CallOptions.CreateCryptoKey[0:len(c.CallOptions.CreateCryptoKey):len(c.CallOptions.CreateCryptoKey)], opts...)
763	var resp *kmspb.CryptoKey
764	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
765		var err error
766		resp, err = c.keyManagementClient.CreateCryptoKey(ctx, req, settings.GRPC...)
767		return err
768	}, opts...)
769	if err != nil {
770		return nil, err
771	}
772	return resp, nil
773}
774
775// CreateCryptoKeyVersion create a new CryptoKeyVersion in a CryptoKey.
776//
777// The server will assign the next sequential id. If unset,
778// state will be set to
779// ENABLED.
780func (c *KeyManagementClient) CreateCryptoKeyVersion(ctx context.Context, req *kmspb.CreateCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
781	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
782		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
783		defer cancel()
784		ctx = cctx
785	}
786	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
787	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
788	opts = append(c.CallOptions.CreateCryptoKeyVersion[0:len(c.CallOptions.CreateCryptoKeyVersion):len(c.CallOptions.CreateCryptoKeyVersion)], opts...)
789	var resp *kmspb.CryptoKeyVersion
790	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
791		var err error
792		resp, err = c.keyManagementClient.CreateCryptoKeyVersion(ctx, req, settings.GRPC...)
793		return err
794	}, opts...)
795	if err != nil {
796		return nil, err
797	}
798	return resp, nil
799}
800
801// ImportCryptoKeyVersion imports a new CryptoKeyVersion into an existing CryptoKey using the
802// wrapped key material provided in the request.
803//
804// The version ID will be assigned the next sequential id within the
805// CryptoKey.
806func (c *KeyManagementClient) ImportCryptoKeyVersion(ctx context.Context, req *kmspb.ImportCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
807	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
808		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
809		defer cancel()
810		ctx = cctx
811	}
812	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
813	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
814	opts = append(c.CallOptions.ImportCryptoKeyVersion[0:len(c.CallOptions.ImportCryptoKeyVersion):len(c.CallOptions.ImportCryptoKeyVersion)], opts...)
815	var resp *kmspb.CryptoKeyVersion
816	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
817		var err error
818		resp, err = c.keyManagementClient.ImportCryptoKeyVersion(ctx, req, settings.GRPC...)
819		return err
820	}, opts...)
821	if err != nil {
822		return nil, err
823	}
824	return resp, nil
825}
826
827// CreateImportJob create a new ImportJob within a KeyRing.
828//
829// ImportJob.import_method is required.
830func (c *KeyManagementClient) CreateImportJob(ctx context.Context, req *kmspb.CreateImportJobRequest, opts ...gax.CallOption) (*kmspb.ImportJob, error) {
831	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
832		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
833		defer cancel()
834		ctx = cctx
835	}
836	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
837	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
838	opts = append(c.CallOptions.CreateImportJob[0:len(c.CallOptions.CreateImportJob):len(c.CallOptions.CreateImportJob)], opts...)
839	var resp *kmspb.ImportJob
840	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
841		var err error
842		resp, err = c.keyManagementClient.CreateImportJob(ctx, req, settings.GRPC...)
843		return err
844	}, opts...)
845	if err != nil {
846		return nil, err
847	}
848	return resp, nil
849}
850
851// UpdateCryptoKey update a CryptoKey.
852func (c *KeyManagementClient) UpdateCryptoKey(ctx context.Context, req *kmspb.UpdateCryptoKeyRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
853	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
854		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
855		defer cancel()
856		ctx = cctx
857	}
858	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "crypto_key.name", url.QueryEscape(req.GetCryptoKey().GetName())))
859	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
860	opts = append(c.CallOptions.UpdateCryptoKey[0:len(c.CallOptions.UpdateCryptoKey):len(c.CallOptions.UpdateCryptoKey)], opts...)
861	var resp *kmspb.CryptoKey
862	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
863		var err error
864		resp, err = c.keyManagementClient.UpdateCryptoKey(ctx, req, settings.GRPC...)
865		return err
866	}, opts...)
867	if err != nil {
868		return nil, err
869	}
870	return resp, nil
871}
872
873// UpdateCryptoKeyVersion update a CryptoKeyVersion's metadata.
874//
875// state may be changed between
876// ENABLED and
877// DISABLED using this
878// method. See DestroyCryptoKeyVersion and RestoreCryptoKeyVersion to
879// move between other states.
880func (c *KeyManagementClient) UpdateCryptoKeyVersion(ctx context.Context, req *kmspb.UpdateCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
881	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
882		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
883		defer cancel()
884		ctx = cctx
885	}
886	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "crypto_key_version.name", url.QueryEscape(req.GetCryptoKeyVersion().GetName())))
887	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
888	opts = append(c.CallOptions.UpdateCryptoKeyVersion[0:len(c.CallOptions.UpdateCryptoKeyVersion):len(c.CallOptions.UpdateCryptoKeyVersion)], opts...)
889	var resp *kmspb.CryptoKeyVersion
890	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
891		var err error
892		resp, err = c.keyManagementClient.UpdateCryptoKeyVersion(ctx, req, settings.GRPC...)
893		return err
894	}, opts...)
895	if err != nil {
896		return nil, err
897	}
898	return resp, nil
899}
900
901// Encrypt encrypts data, so that it can only be recovered by a call to Decrypt.
902// The CryptoKey.purpose must be
903// ENCRYPT_DECRYPT.
904func (c *KeyManagementClient) Encrypt(ctx context.Context, req *kmspb.EncryptRequest, opts ...gax.CallOption) (*kmspb.EncryptResponse, error) {
905	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
906		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
907		defer cancel()
908		ctx = cctx
909	}
910	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
911	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
912	opts = append(c.CallOptions.Encrypt[0:len(c.CallOptions.Encrypt):len(c.CallOptions.Encrypt)], opts...)
913	var resp *kmspb.EncryptResponse
914	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
915		var err error
916		resp, err = c.keyManagementClient.Encrypt(ctx, req, settings.GRPC...)
917		return err
918	}, opts...)
919	if err != nil {
920		return nil, err
921	}
922	return resp, nil
923}
924
925// Decrypt decrypts data that was protected by Encrypt. The CryptoKey.purpose
926// must be ENCRYPT_DECRYPT.
927func (c *KeyManagementClient) Decrypt(ctx context.Context, req *kmspb.DecryptRequest, opts ...gax.CallOption) (*kmspb.DecryptResponse, error) {
928	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
929		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
930		defer cancel()
931		ctx = cctx
932	}
933	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
934	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
935	opts = append(c.CallOptions.Decrypt[0:len(c.CallOptions.Decrypt):len(c.CallOptions.Decrypt)], opts...)
936	var resp *kmspb.DecryptResponse
937	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
938		var err error
939		resp, err = c.keyManagementClient.Decrypt(ctx, req, settings.GRPC...)
940		return err
941	}, opts...)
942	if err != nil {
943		return nil, err
944	}
945	return resp, nil
946}
947
948// AsymmetricSign signs data using a CryptoKeyVersion with CryptoKey.purpose
949// ASYMMETRIC_SIGN, producing a signature that can be verified with the public
950// key retrieved from GetPublicKey.
951func (c *KeyManagementClient) AsymmetricSign(ctx context.Context, req *kmspb.AsymmetricSignRequest, opts ...gax.CallOption) (*kmspb.AsymmetricSignResponse, error) {
952	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
953		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
954		defer cancel()
955		ctx = cctx
956	}
957	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
958	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
959	opts = append(c.CallOptions.AsymmetricSign[0:len(c.CallOptions.AsymmetricSign):len(c.CallOptions.AsymmetricSign)], opts...)
960	var resp *kmspb.AsymmetricSignResponse
961	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
962		var err error
963		resp, err = c.keyManagementClient.AsymmetricSign(ctx, req, settings.GRPC...)
964		return err
965	}, opts...)
966	if err != nil {
967		return nil, err
968	}
969	return resp, nil
970}
971
972// AsymmetricDecrypt decrypts data that was encrypted with a public key retrieved from
973// GetPublicKey corresponding to a CryptoKeyVersion with
974// CryptoKey.purpose ASYMMETRIC_DECRYPT.
975func (c *KeyManagementClient) AsymmetricDecrypt(ctx context.Context, req *kmspb.AsymmetricDecryptRequest, opts ...gax.CallOption) (*kmspb.AsymmetricDecryptResponse, error) {
976	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
977		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
978		defer cancel()
979		ctx = cctx
980	}
981	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
982	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
983	opts = append(c.CallOptions.AsymmetricDecrypt[0:len(c.CallOptions.AsymmetricDecrypt):len(c.CallOptions.AsymmetricDecrypt)], opts...)
984	var resp *kmspb.AsymmetricDecryptResponse
985	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
986		var err error
987		resp, err = c.keyManagementClient.AsymmetricDecrypt(ctx, req, settings.GRPC...)
988		return err
989	}, opts...)
990	if err != nil {
991		return nil, err
992	}
993	return resp, nil
994}
995
996// UpdateCryptoKeyPrimaryVersion update the version of a CryptoKey that will be used in Encrypt.
997//
998// Returns an error if called on an asymmetric key.
999func (c *KeyManagementClient) UpdateCryptoKeyPrimaryVersion(ctx context.Context, req *kmspb.UpdateCryptoKeyPrimaryVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKey, error) {
1000	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1001		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
1002		defer cancel()
1003		ctx = cctx
1004	}
1005	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
1006	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1007	opts = append(c.CallOptions.UpdateCryptoKeyPrimaryVersion[0:len(c.CallOptions.UpdateCryptoKeyPrimaryVersion):len(c.CallOptions.UpdateCryptoKeyPrimaryVersion)], opts...)
1008	var resp *kmspb.CryptoKey
1009	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1010		var err error
1011		resp, err = c.keyManagementClient.UpdateCryptoKeyPrimaryVersion(ctx, req, settings.GRPC...)
1012		return err
1013	}, opts...)
1014	if err != nil {
1015		return nil, err
1016	}
1017	return resp, nil
1018}
1019
1020// DestroyCryptoKeyVersion schedule a CryptoKeyVersion for destruction.
1021//
1022// Upon calling this method, CryptoKeyVersion.state will be set to
1023// DESTROY_SCHEDULED
1024// and destroy_time will be set to a time 24
1025// hours in the future, at which point the state
1026// will be changed to
1027// DESTROYED, and the key
1028// material will be irrevocably destroyed.
1029//
1030// Before the destroy_time is reached,
1031// RestoreCryptoKeyVersion may be called to reverse the process.
1032func (c *KeyManagementClient) DestroyCryptoKeyVersion(ctx context.Context, req *kmspb.DestroyCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
1033	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1034		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
1035		defer cancel()
1036		ctx = cctx
1037	}
1038	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
1039	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1040	opts = append(c.CallOptions.DestroyCryptoKeyVersion[0:len(c.CallOptions.DestroyCryptoKeyVersion):len(c.CallOptions.DestroyCryptoKeyVersion)], opts...)
1041	var resp *kmspb.CryptoKeyVersion
1042	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1043		var err error
1044		resp, err = c.keyManagementClient.DestroyCryptoKeyVersion(ctx, req, settings.GRPC...)
1045		return err
1046	}, opts...)
1047	if err != nil {
1048		return nil, err
1049	}
1050	return resp, nil
1051}
1052
1053// RestoreCryptoKeyVersion restore a CryptoKeyVersion in the
1054// DESTROY_SCHEDULED
1055// state.
1056//
1057// Upon restoration of the CryptoKeyVersion, state
1058// will be set to DISABLED,
1059// and destroy_time will be cleared.
1060func (c *KeyManagementClient) RestoreCryptoKeyVersion(ctx context.Context, req *kmspb.RestoreCryptoKeyVersionRequest, opts ...gax.CallOption) (*kmspb.CryptoKeyVersion, error) {
1061	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1062		cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
1063		defer cancel()
1064		ctx = cctx
1065	}
1066	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
1067	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1068	opts = append(c.CallOptions.RestoreCryptoKeyVersion[0:len(c.CallOptions.RestoreCryptoKeyVersion):len(c.CallOptions.RestoreCryptoKeyVersion)], opts...)
1069	var resp *kmspb.CryptoKeyVersion
1070	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1071		var err error
1072		resp, err = c.keyManagementClient.RestoreCryptoKeyVersion(ctx, req, settings.GRPC...)
1073		return err
1074	}, opts...)
1075	if err != nil {
1076		return nil, err
1077	}
1078	return resp, nil
1079}
1080
1081// CryptoKeyIterator manages a stream of *kmspb.CryptoKey.
1082type CryptoKeyIterator struct {
1083	items    []*kmspb.CryptoKey
1084	pageInfo *iterator.PageInfo
1085	nextFunc func() error
1086
1087	// Response is the raw response for the current page.
1088	// It must be cast to the RPC response type.
1089	// Calling Next() or InternalFetch() updates this value.
1090	Response interface{}
1091
1092	// InternalFetch is for use by the Google Cloud Libraries only.
1093	// It is not part of the stable interface of this package.
1094	//
1095	// InternalFetch returns results from a single call to the underlying RPC.
1096	// The number of results is no greater than pageSize.
1097	// If there are no more results, nextPageToken is empty and err is nil.
1098	InternalFetch func(pageSize int, pageToken string) (results []*kmspb.CryptoKey, nextPageToken string, err error)
1099}
1100
1101// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1102func (it *CryptoKeyIterator) PageInfo() *iterator.PageInfo {
1103	return it.pageInfo
1104}
1105
1106// Next returns the next result. Its second return value is iterator.Done if there are no more
1107// results. Once Next returns Done, all subsequent calls will return Done.
1108func (it *CryptoKeyIterator) Next() (*kmspb.CryptoKey, error) {
1109	var item *kmspb.CryptoKey
1110	if err := it.nextFunc(); err != nil {
1111		return item, err
1112	}
1113	item = it.items[0]
1114	it.items = it.items[1:]
1115	return item, nil
1116}
1117
1118func (it *CryptoKeyIterator) bufLen() int {
1119	return len(it.items)
1120}
1121
1122func (it *CryptoKeyIterator) takeBuf() interface{} {
1123	b := it.items
1124	it.items = nil
1125	return b
1126}
1127
1128// CryptoKeyVersionIterator manages a stream of *kmspb.CryptoKeyVersion.
1129type CryptoKeyVersionIterator struct {
1130	items    []*kmspb.CryptoKeyVersion
1131	pageInfo *iterator.PageInfo
1132	nextFunc func() error
1133
1134	// Response is the raw response for the current page.
1135	// It must be cast to the RPC response type.
1136	// Calling Next() or InternalFetch() updates this value.
1137	Response interface{}
1138
1139	// InternalFetch is for use by the Google Cloud Libraries only.
1140	// It is not part of the stable interface of this package.
1141	//
1142	// InternalFetch returns results from a single call to the underlying RPC.
1143	// The number of results is no greater than pageSize.
1144	// If there are no more results, nextPageToken is empty and err is nil.
1145	InternalFetch func(pageSize int, pageToken string) (results []*kmspb.CryptoKeyVersion, nextPageToken string, err error)
1146}
1147
1148// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1149func (it *CryptoKeyVersionIterator) PageInfo() *iterator.PageInfo {
1150	return it.pageInfo
1151}
1152
1153// Next returns the next result. Its second return value is iterator.Done if there are no more
1154// results. Once Next returns Done, all subsequent calls will return Done.
1155func (it *CryptoKeyVersionIterator) Next() (*kmspb.CryptoKeyVersion, error) {
1156	var item *kmspb.CryptoKeyVersion
1157	if err := it.nextFunc(); err != nil {
1158		return item, err
1159	}
1160	item = it.items[0]
1161	it.items = it.items[1:]
1162	return item, nil
1163}
1164
1165func (it *CryptoKeyVersionIterator) bufLen() int {
1166	return len(it.items)
1167}
1168
1169func (it *CryptoKeyVersionIterator) takeBuf() interface{} {
1170	b := it.items
1171	it.items = nil
1172	return b
1173}
1174
1175// ImportJobIterator manages a stream of *kmspb.ImportJob.
1176type ImportJobIterator struct {
1177	items    []*kmspb.ImportJob
1178	pageInfo *iterator.PageInfo
1179	nextFunc func() error
1180
1181	// Response is the raw response for the current page.
1182	// It must be cast to the RPC response type.
1183	// Calling Next() or InternalFetch() updates this value.
1184	Response interface{}
1185
1186	// InternalFetch is for use by the Google Cloud Libraries only.
1187	// It is not part of the stable interface of this package.
1188	//
1189	// InternalFetch returns results from a single call to the underlying RPC.
1190	// The number of results is no greater than pageSize.
1191	// If there are no more results, nextPageToken is empty and err is nil.
1192	InternalFetch func(pageSize int, pageToken string) (results []*kmspb.ImportJob, nextPageToken string, err error)
1193}
1194
1195// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1196func (it *ImportJobIterator) PageInfo() *iterator.PageInfo {
1197	return it.pageInfo
1198}
1199
1200// Next returns the next result. Its second return value is iterator.Done if there are no more
1201// results. Once Next returns Done, all subsequent calls will return Done.
1202func (it *ImportJobIterator) Next() (*kmspb.ImportJob, error) {
1203	var item *kmspb.ImportJob
1204	if err := it.nextFunc(); err != nil {
1205		return item, err
1206	}
1207	item = it.items[0]
1208	it.items = it.items[1:]
1209	return item, nil
1210}
1211
1212func (it *ImportJobIterator) bufLen() int {
1213	return len(it.items)
1214}
1215
1216func (it *ImportJobIterator) takeBuf() interface{} {
1217	b := it.items
1218	it.items = nil
1219	return b
1220}
1221
1222// KeyRingIterator manages a stream of *kmspb.KeyRing.
1223type KeyRingIterator struct {
1224	items    []*kmspb.KeyRing
1225	pageInfo *iterator.PageInfo
1226	nextFunc func() error
1227
1228	// Response is the raw response for the current page.
1229	// It must be cast to the RPC response type.
1230	// Calling Next() or InternalFetch() updates this value.
1231	Response interface{}
1232
1233	// InternalFetch is for use by the Google Cloud Libraries only.
1234	// It is not part of the stable interface of this package.
1235	//
1236	// InternalFetch returns results from a single call to the underlying RPC.
1237	// The number of results is no greater than pageSize.
1238	// If there are no more results, nextPageToken is empty and err is nil.
1239	InternalFetch func(pageSize int, pageToken string) (results []*kmspb.KeyRing, nextPageToken string, err error)
1240}
1241
1242// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1243func (it *KeyRingIterator) PageInfo() *iterator.PageInfo {
1244	return it.pageInfo
1245}
1246
1247// Next returns the next result. Its second return value is iterator.Done if there are no more
1248// results. Once Next returns Done, all subsequent calls will return Done.
1249func (it *KeyRingIterator) Next() (*kmspb.KeyRing, error) {
1250	var item *kmspb.KeyRing
1251	if err := it.nextFunc(); err != nil {
1252		return item, err
1253	}
1254	item = it.items[0]
1255	it.items = it.items[1:]
1256	return item, nil
1257}
1258
1259func (it *KeyRingIterator) bufLen() int {
1260	return len(it.items)
1261}
1262
1263func (it *KeyRingIterator) takeBuf() interface{} {
1264	b := it.items
1265	it.items = nil
1266	return b
1267}
1268