1. Go to this page and download the library: Download paragonie/sapient library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
paragonie / sapient example snippets
use ParagonIE\ConstantTime\Base64UrlSafe;
use ParagonIE\Sapient\Sapient;
use ParagonIE\Sapient\CryptographyKeys\SigningSecretKey;
use Psr\Http\Message\ResponseInterface;
/**
* @var ResponseInterface $response
*
* Let's assume we have a valid ResponseInterface object already.
* (Most likely, after doing normal framework things.)
*/
$sapient = new Sapient();
$serverSignSecret = new SigningSecretKey(
Base64UrlSafe::decode(
'q6KSHArUnD0sEa-KWpBCYLka805gdA6lVG2mbeM9kq82_Cwg1n7XLQXXXHF538URRov8xV7CF2AX20xh_moQTA=='
)
);
$signedResponse = $sapient->signResponse($response, $serverSignSecret);
use ParagonIE\ConstantTime\Base64UrlSafe;
use ParagonIE\Sapient\Sapient;
use ParagonIE\Sapient\CryptographyKeys\SigningPublicKey;
use ParagonIE\Sapient\Exception\{
HeaderMissingException,
InvalidMessageException
};
use Psr\Http\Message\ResponseInterface;
/**
* @var ResponseInterface $response
*
* Let's assume we have a valid ResponseInterface object already.
* (Most likely the result of an HTTP request to the server.)
*/
$sapient = new Sapient();
$serverPublicKey = new SigningPublicKey(
Base64UrlSafe::decode(
'NvwsINZ-1y0F11xxed_FEUaL_MVewhdgF9tMYf5qEEw='
)
);
try {
$verified = $sapient->verifySignedResponse($response, $serverPublicKey);
} catch (HeaderMissingException $ex) {
/* The server didn't provide a header. Discard and log the error! */
} catch (InvalidMessageException $ex) {
/* Invalid signature for the message. Discard and log the error! */
}
use GuzzleHttp\Client;
use ParagonIE\ConstantTime\Base64UrlSafe;
use ParagonIE\Sapient\Adapter\Guzzle as GuzzleAdapter;
use ParagonIE\Sapient\Sapient;
use ParagonIE\Sapient\CryptographyKeys\SigningPublicKey;
use ParagonIE\Sapient\CryptographyKeys\SigningSecretKey;
use ParagonIE\Sapient\Exception\InvalidMessageException;
$http = new Client([
'base_uri' => 'https://your-api.example.com'
]);
$sapient = new Sapient(new GuzzleAdapter($http));
// Keys
$clientSigningKey = new SigningSecretKey(
Base64UrlSafe::decode(
'AHxoibWhTylBMgFzJp6GGgYto24PVbQ-ognw9SPnvKppfti72R8By8XnIMTJ8HbDTks7jK5GmAnvtzaj3rbcTA=='
)
);
$serverPublicKey = new SigningPublicKey(
Base64UrlSafe::decode(
'NvwsINZ-1y0F11xxed_FEUaL_MVewhdgF9tMYf5qEEw='
)
);
// We use an array to define our message
$myMessage = [
'date' => (new DateTime)->format(DateTime::ATOM),
'body' => [
'test' => 'hello world!'
]
];
// Create the signed request:
$request = $sapient->createSignedJsonRequest(
'POST',
'/my/api/endpoint',
$myMessage,
$clientSigningKey
);
$response = $http->send($request);
try {
/** @var array $verifiedResponse */
$verifiedResponse = $sapient->decodeSignedJsonResponse(
$response,
$serverPublicKey
);
} catch (InvalidMessageException $ex) {
\http_response_code(500);
exit;
}
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\ServerRequest;
use ParagonIE\ConstantTime\Base64UrlSafe;
use ParagonIE\Sapient\Adapter\Guzzle as GuzzleAdapter;
use ParagonIE\Sapient\Sapient;
use ParagonIE\Sapient\CryptographyKeys\SigningPublicKey;
use ParagonIE\Sapient\CryptographyKeys\SigningSecretKey;
use ParagonIE\Sapient\Exception\InvalidMessageException;
$http = new Client([
'base_uri' => 'https://your-api.example.com'
]);
$sapient = new Sapient(new GuzzleAdapter($http));
$clientPublicKey = new SigningPublicKey(
Base64UrlSafe::decode(
'aX7Yu9kfAcvF5yDEyfB2w05LO4yuRpgJ77c2o9623Ew='
)
);
$request = ServerRequest::fromGlobals();
try {
/** @var array $decodedRequest */
$decodedRequest = $sapient->decodeSignedJsonRequest(
$request,
$clientPublicKey
);
} catch (InvalidMessageException $ex) {
\http_response_code(500);
exit;
}
/* Business logic goes here */
// Signing a response:
$serverSignSecret = new SigningSecretKey(
Base64UrlSafe::decode(
'q6KSHArUnD0sEa-KWpBCYLka805gdA6lVG2mbeM9kq82_Cwg1n7XLQXXXHF538URRov8xV7CF2AX20xh_moQTA=='
)
);
$responseMessage = [
'date' => (new DateTime)->format(DateTime::ATOM),
'body' => [
'status' => 'OK',
'message' => 'We got your message loud and clear.'
]
];
$response = $sapient->createSignedJsonResponse(
200,
$responseMessage,
$serverSignSecret
);
/* If your framework speaks PSR-7, just return the response object and let it
take care of the rest. */
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.