Files
dev-chiefworks 47f4fad75c Added Other AP
2022-04-26 11:30:34 -04:00

109 lines
3.6 KiB
PHP

<?php
# Imports the Google Cloud client libraries
use Google\ApiCore\ApiException;
use Google\Cloud\Kms\V1\CryptoKey;
use Google\Cloud\Kms\V1\CryptoKey\CryptoKeyPurpose;
use Google\Cloud\Kms\V1\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\KeyRing;
class GoogleKMS {
private $client;
private $projectId;
private $authFile;
private $keyRing = NULL;
private $keyRingId = NULL;
private $keyRingName = NULL;
private $keyName = NULL;
private $cryptoKey = NULL;
private $location = 'global';
public function __construct($projectId, $authFile, $keyRingId=NULL, $keyId=NULL) {
// Your Google Cloud Platform project ID
$this->projectId = $projectId; // 'float-app-224118';
// The file path to credentials JSON
//error_log($authFile);
putenv("GOOGLE_APPLICATION_CREDENTIALS=${authFile}");
apache_setenv("GOOGLE_APPLICATION_CREDENTIALS",$authFile,true);
$this->authFile = $authFile; // './float-app-224118-52ef1783d2c5.json';
// Instantiates a client
$this->client = new KeyManagementServiceClient([
'projectId' => $projectId,
'keyFile' => json_decode(file_get_contents($authFile), true)
]);
if ($keyRingId!=NULL) {
$this->createKeyring($keyRingId);
if ($keyId!=NULL) {
$this->createCryptokey($keyId);
}
}
}
public function createKeyring($keyRingId) {
try {
$locationName = $this->client::locationName(
$this->projectId,
$this->location
);
$keyRingName = $this->client::keyRingName(
$this->projectId,
$this->location,
$keyRingId
);
$this->keyRing = $this->client->getKeyRing($keyRingName);
$this->keyRingId = $keyRingId;
$this->keyRingName = $keyRingName;
} catch (ApiException $e) {
if ($e->getStatus() === 'NOT_FOUND') {
$this->keyRing = new KeyRing();
$this->keyRing->setName($keyRingName);
$this->client->createKeyRing(
$locationName,
$keyRingId,
$this->keyRing);
$this->keyRingId = $keyRingId;
$this->keyRingName = $keyRingName;
}
}
return $this->keyRing;
}
public function createCryptokey($keyId) {
try {
$keyName = $this->client::cryptoKeyName(
$this->projectId,
$this->location,
$this->keyRingId,
$keyId);
$this->cryptoKey = $this->client->getCryptoKey($keyName);
$this->keyName = $keyName;
} catch (ApiException $e) {
if ($e->getStatus() === 'NOT_FOUND') {
$this->cryptoKey = new CryptoKey();
$this->cryptoKey->setPurpose(CryptoKeyPurpose::ENCRYPT_DECRYPT);
$this->cryptoKey = $this->client->createCryptoKey(
$this->keyRingName,
$keyId,
$this->cryptoKey);
$this->keyName = $keyName;
}
}
return $this->cryptoKey;
}
public function encrypt($secret) {
$response = $this->client->encrypt($this->keyName, $secret);
$cipherText = $response->getCiphertext();
return $cipherText;
}
public function decrypt($cipherText) {
$response = $this->client->decrypt($this->keyName, $cipherText);
$plainText = $response->getPlaintext();
return $plainText;
}
}