Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
/*
3
 * Copyright 2011 Google Inc.
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
 
18
if (!class_exists('Google_Client')) {
19
  require_once dirname(__FILE__) . '/../autoload.php';
20
}
21
 
22
/**
23
 * Verifies signatures using PEM encoded certificates.
24
 *
25
 * @author Brian Eaton <beaton@google.com>
26
 */
27
#[AllowDynamicProperties]
28
class Google_Verifier_Pem extends Google_Verifier_Abstract
29
{
30
  private $publicKey;
31
 
32
  /**
33
   * Constructs a verifier from the supplied PEM-encoded certificate.
34
   *
35
   * $pem: a PEM encoded certificate (not a file).
36
   * @param $pem
37
   * @throws Google_Auth_Exception
38
   * @throws Google_Exception
39
   */
40
  public function __construct($pem)
41
  {
42
    if (!function_exists('openssl_x509_read')) {
43
      throw new Google_Exception('Google API PHP client needs the openssl PHP extension');
44
    }
45
    $this->publicKey = openssl_x509_read($pem);
46
    if (!$this->publicKey) {
47
      throw new Google_Auth_Exception("Unable to parse PEM: $pem");
48
    }
49
  }
50
 
51
  public function __destruct()
52
  {
53
    if ($this->publicKey) {
54
      // TODO: Remove this block once PHP 8.0 becomes required.
55
      if (PHP_MAJOR_VERSION < 8) {
56
          openssl_x509_free($this->publicKey);
57
      }
58
    }
59
  }
60
 
61
  /**
62
   * Verifies the signature on data.
63
   *
64
   * Returns true if the signature is valid, false otherwise.
65
   * @param $data
66
   * @param $signature
67
   * @throws Google_Auth_Exception
68
   * @return bool
69
   */
70
  public function verify($data, $signature)
71
  {
72
    $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
73
    $status = openssl_verify($data, $signature, $this->publicKey, $hash);
74
    if ($status === -1) {
75
      throw new Google_Auth_Exception('Signature verification error: ' . openssl_error_string());
76
    }
77
    return $status === 1;
78
  }
79
}