Add encryption handling and session flags management.
This commit is contained in:
parent
1d452bc71b
commit
86435a3d0b
13 changed files with 857 additions and 134 deletions
41
src/Socialbox/Objects/Database/DecryptedRecord.php
Normal file
41
src/Socialbox/Objects/Database/DecryptedRecord.php
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace Socialbox\Objects\Database;
|
||||
|
||||
class DecryptedRecord
|
||||
{
|
||||
private string $key;
|
||||
private string $pepper;
|
||||
private string $salt;
|
||||
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->key = $data['key'];
|
||||
$this->pepper = $data['pepper'];
|
||||
$this->salt = $data['salt'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getKey(): string
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPepper(): string
|
||||
{
|
||||
return $this->pepper;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSalt(): string
|
||||
{
|
||||
return $this->salt;
|
||||
}
|
||||
}
|
84
src/Socialbox/Objects/Database/EncryptionRecord.php
Normal file
84
src/Socialbox/Objects/Database/EncryptionRecord.php
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
namespace Socialbox\Objects\Database;
|
||||
|
||||
use Socialbox\Classes\Configuration;
|
||||
use Socialbox\Classes\SecuredPassword;
|
||||
use Socialbox\Exceptions\CryptographyException;
|
||||
use Socialbox\Managers\EncryptionRecordsManager;
|
||||
|
||||
class EncryptionRecord
|
||||
{
|
||||
private string $data;
|
||||
private string $iv;
|
||||
private string $tag;
|
||||
|
||||
/**
|
||||
* Public constructor for the EncryptionRecord
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->data = $data['data'];
|
||||
$this->iv = $data['iv'];
|
||||
$this->tag = $data['tag'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the stored data.
|
||||
*
|
||||
* @return string The stored data.
|
||||
*/
|
||||
public function getData(): string
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the initialization vector (IV).
|
||||
*
|
||||
* @return string The initialization vector.
|
||||
*/
|
||||
public function getIv(): string
|
||||
{
|
||||
return $this->iv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the tag.
|
||||
*
|
||||
* @return string The tag.
|
||||
*/
|
||||
public function getTag(): string
|
||||
{
|
||||
return $this->tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts the encrypted record using available encryption keys.
|
||||
*
|
||||
* Iterates through the configured encryption keys to attempt decryption of the data.
|
||||
* If successful, returns a DecryptedRecord object with the decrypted data.
|
||||
* Throws an exception if decryption fails with all available keys.
|
||||
*
|
||||
* @return DecryptedRecord The decrypted record containing the original data.
|
||||
* @throws CryptographyException If decryption fails with all provided keys.
|
||||
*/
|
||||
public function decrypt(): DecryptedRecord
|
||||
{
|
||||
foreach(Configuration::getInstanceConfiguration()->getEncryptionKeys() as $encryptionKey)
|
||||
{
|
||||
$decryptedVault = openssl_decrypt(base64_decode($this->data), SecuredPassword::ENCRYPTION_ALGORITHM,
|
||||
$encryptionKey, OPENSSL_RAW_DATA, base64_decode($this->iv), base64_decode($this->tag)
|
||||
);
|
||||
|
||||
if ($decryptedVault !== false)
|
||||
{
|
||||
return new DecryptedRecord(json_decode($decryptedVault, true));
|
||||
}
|
||||
}
|
||||
|
||||
throw new CryptographyException("Decryption failed");
|
||||
}
|
||||
}
|
84
src/Socialbox/Objects/Database/SecurePasswordRecord.php
Normal file
84
src/Socialbox/Objects/Database/SecurePasswordRecord.php
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
namespace Socialbox\Objects\Database;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class SecurePasswordRecord
|
||||
{
|
||||
private string $peerUuid;
|
||||
private string $iv;
|
||||
private string $encryptedPassword;
|
||||
private string $encryptedTag;
|
||||
private DateTime $updated;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with provided data.
|
||||
*
|
||||
* @param array $data An associative array containing keys:
|
||||
* - 'peer_uuid': The UUID of the peer.
|
||||
* - 'iv': The initialization vector.
|
||||
* - 'encrypted_password': The encrypted password.
|
||||
* - 'encrypted_tag': The encrypted tag.
|
||||
*
|
||||
* @throws \DateMalformedStringException
|
||||
*/
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->peerUuid = $data['peer_uuid'];
|
||||
$this->iv = $data['iv'];
|
||||
$this->encryptedPassword = $data['encrypted_password'];
|
||||
$this->encryptedTag = $data['encrypted_tag'];
|
||||
$this->updated = new DateTime($data['updated']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the UUID of the peer.
|
||||
*
|
||||
* @return string The UUID of the peer.
|
||||
*/
|
||||
public function getPeerUuid(): string
|
||||
{
|
||||
return $this->peerUuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the initialization vector (IV) value.
|
||||
*
|
||||
* @return string The initialization vector.
|
||||
*/
|
||||
public function getIv(): string
|
||||
{
|
||||
return $this->iv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the encrypted password.
|
||||
*
|
||||
* @return string The encrypted password.
|
||||
*/
|
||||
public function getEncryptedPassword(): string
|
||||
{
|
||||
return $this->encryptedPassword;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the encrypted tag.
|
||||
*
|
||||
* @return string The encrypted tag.
|
||||
*/
|
||||
public function getEncryptedTag(): string
|
||||
{
|
||||
return $this->encryptedTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the updated timestamp.
|
||||
*
|
||||
* @return DateTime The updated timestamp.
|
||||
*/
|
||||
public function getUpdated(): DateTime
|
||||
{
|
||||
return $this->updated;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue