source: vendor/google/auth/src/ServiceAccountSignerTrait.php@ f9c482b

Last change on this file since f9c482b was f9c482b, checked in by Vlado 222039 <vlado.popovski@…>, 7 days ago

Upload new project files

  • Property mode set to 100644
File size: 1.8 KB
Line 
1<?php
2/*
3 * Copyright 2019 Google LLC
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18namespace Google\Auth;
19
20use phpseclib3\Crypt\PublicKeyLoader;
21use phpseclib3\Crypt\RSA;
22
23/**
24 * Sign a string using a Service Account private key.
25 */
26trait ServiceAccountSignerTrait
27{
28 /**
29 * Sign a string using the service account private key.
30 *
31 * @param string $stringToSign
32 * @param bool $forceOpenssl Whether to use OpenSSL regardless of
33 * whether phpseclib is installed. **Defaults to** `false`.
34 * @return string
35 */
36 public function signBlob($stringToSign, $forceOpenssl = false)
37 {
38 $privateKey = $this->auth->getSigningKey();
39
40 $signedString = '';
41 if (class_exists(phpseclib3\Crypt\RSA::class) && !$forceOpenssl) {
42 $key = PublicKeyLoader::load($privateKey);
43 $rsa = $key->withHash('sha256')->withPadding(RSA::SIGNATURE_PKCS1);
44
45 $signedString = $rsa->sign($stringToSign);
46 } elseif (extension_loaded('openssl')) {
47 openssl_sign($stringToSign, $signedString, $privateKey, 'sha256WithRSAEncryption');
48 } else {
49 // @codeCoverageIgnoreStart
50 throw new \RuntimeException('OpenSSL is not installed.');
51 }
52 // @codeCoverageIgnoreEnd
53
54 return base64_encode($signedString);
55 }
56}
Note: See TracBrowser for help on using the repository browser.