PHP Classes

File: src/Integration/Defuse.php

Recommend this page to a friend!
  Classes of Scott Arciszewski   Easy PHP ECC   src/Integration/Defuse.php   Download  
File: src/Integration/Defuse.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Easy PHP ECC
Encrypt, decrypt and sign messages with PHPECC
Author: By
Last change:
Date: 3 years ago
Size: 3,536 bytes
 

Contents

Class file image Download
<?php
declare(strict_types=1);
namespace
ParagonIE\EasyECC\Integration;
use
Defuse\Crypto\Crypto;
use
Defuse\Crypto\Encoding;
use
Defuse\Crypto\Exception\BadFormatException;
use
Defuse\Crypto\Exception\EnvironmentIsBrokenException;
use
Defuse\Crypto\Exception\WrongKeyOrModifiedCiphertextException;
use
Defuse\Crypto\Key;
use
Mdanter\Ecc\Crypto\Key\PrivateKeyInterface;
use
Mdanter\Ecc\Crypto\Key\PublicKeyInterface;
use
ParagonIE\ConstantTime\Base64UrlSafe;
use
ParagonIE\EasyECC\EasyECC;

/**
 * Class Defuse
 * @package ParagonIE\EasyECC\Integration
 */
class Defuse
{
   
/** @var EasyECC $ecc */
   
protected $ecc;

   
/**
     * Defuse constructor.
     * @param EasyECC $ecc
     */
   
public function __construct(EasyECC $ecc)
    {
       
$this->ecc = $ecc;
    }

   
/**
     * @param PrivateKeyInterface $private
     * @param PublicKeyInterface $public
     * @param bool $isClient
     * @return Key
     *
     * @throws \Defuse\Crypto\Exception\BadFormatException
     * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException
     * @throws \SodiumException
     * @throws \TypeError
     */
   
public function keyExchange(
       
PrivateKeyInterface $private,
       
PublicKeyInterface $public,
       
bool $isClient
   
): Key {
        return
Key::loadFromAsciiSafeString(
           
Encoding::saveBytesToChecksummedAsciiSafeString(
               
Key::KEY_CURRENT_VERSION,
               
$this->ecc->keyExchange($private, $public, $isClient, 'sha256')
            )
        );
    }

   
/**
     * @param string $message
     * @param PrivateKeyInterface $privateKey
     * @param PublicKeyInterface $publicKey
     * @return string
     *
     * @throws EnvironmentIsBrokenException
     * @throws BadFormatException
     * @throws \SodiumException
     * @throws \TypeError
     */
   
public function asymmetricEncrypt(
       
string $message,
       
PrivateKeyInterface $privateKey,
       
PublicKeyInterface $publicKey
   
): string {
        return
$this->symmetricEncrypt(
           
$message,
           
$this->keyExchange($privateKey, $publicKey, true)
        );
    }

   
/**
     * @param string $message
     * @param PrivateKeyInterface $privateKey
     * @param PublicKeyInterface $publicKey
     * @return string
     *
     * @throws EnvironmentIsBrokenException
     * @throws WrongKeyOrModifiedCiphertextException
     * @throws BadFormatException
     * @throws \SodiumException
     * @throws \TypeError
     */
   
public function asymmetricDecrypt(
       
string $message,
       
PrivateKeyInterface $privateKey,
       
PublicKeyInterface $publicKey
   
): string {
        return
$this->symmetricDecrypt(
           
$message,
           
$this->keyExchange($privateKey, $publicKey, false)
        );
    }

   
/**
     * @param string $message
     * @param Key $key
     * @return string
     *
     * @throws EnvironmentIsBrokenException
     */
   
public function symmetricEncrypt(string $message, Key $key): string
   
{
        return
Base64UrlSafe::encode(
           
Crypto::encrypt($message, $key, true)
        );
    }

   
/**
     * @param string $message
     * @param Key $key
     * @return string
     *
     * @throws EnvironmentIsBrokenException
     * @throws WrongKeyOrModifiedCiphertextException
     * @throws \TypeError
     */
   
public function symmetricDecrypt(string $message, Key $key): string
   
{
        return
Crypto::decrypt(
           
Base64UrlSafe::decode($message),
           
$key,
           
true
       
);
    }
}