func()

in fakekms/crypto_key_rpcs.go [154:186]


func (f *fakeKMS) UpdateCryptoKey(ctx context.Context, req *kmspb.UpdateCryptoKeyRequest) (*kmspb.CryptoKey, error) {
	if err := allowlist("crypto_key", "update_mask").check(req); err != nil {
		return nil, err
	}

	if len(req.UpdateMask.GetPaths()) == 0 {
		return nil, errInvalidArgument("no fields selected for update")
	}

	name, err := parseCryptoKeyName(req.CryptoKey.Name)
	if err != nil {
		return nil, err
	}

	ck, err := f.cryptoKey(name)
	if err != nil {
		return nil, err
	}

	for _, p := range req.UpdateMask.Paths {
		switch p {
		case "version_template.algorithm":
			if err := validateAlgorithm(req.CryptoKey.VersionTemplate.Algorithm, ck.pb.Purpose); err != nil {
				return nil, err
			}
			ck.pb.VersionTemplate.Algorithm = req.CryptoKey.VersionTemplate.Algorithm
		default:
			return nil, errInvalidArgument("unsupported update path: %s", p)
		}
	}

	return ck.pb, nil
}