Code Samples: PHP

IMPORTANT! C# is our official client and the only code that we support.  This PHP code has been provided by another customer; and we encourage you to let us know if you find any problems, so that we can update accordingly.

Common

// Common to all and references the two files needed for the encryption process
<?php
require_once('padCrypt.php');
require_once('AES_Encryption.php');

class FTSSamples

// Common to all
{
    protected $serviceEndpointUrl;
    protected $securityContext;
    protected $securityToken;
    protected $apiKey;
    public function __construct ()
    {
        $this->serviceEndpointUrl = "https://api.sfaxme.com/api/";
        $this->securityContext = ""; //<--- Required but leave blank exactly as it is here
        $this->apiKey = "";//Required Key    
    }

public function OutboundFaxCreate

{
        // Service Connection and Security Settings
        $isSuccess = false;
        // IMPORTANT: key parameters
        $faxNumber = "15123668506";    //<--- IMPORTANT: Enter a valid fax number
        $filePath = getcwd() . "/Page1.tif";   //<--- IMPORTANT: Enter a valid path to primary file to be faxed
        $faxRecipient = "GeneTest";                            
    $optionalParams="CoverPageName=None;CoverPageSubject=PHPTest;CoverPageReference=PhpTest1234;TrackingCode=PHPTest1234";//Parameters to pass for CoverPages
        // Set Security Token
        $FTSAES = new FTSAESHelper($this->securityContext);
        $this->securityToken = $FTSAES->GenerateSecurityTokenUrl();
        // Construct the base service URL endpoint
        $url = $this->serviceEndpointUrl; 
        $url .= "sendfax?";
        $url .= "token=". urlencode($this->securityToken);
        $url .= "&ApiKey=" . urlencode($this->apiKey);
        // Add the method specific parameters
        $url .= "&RecipientFax=" . urlencode($faxNumber);
        $url .= "&RecipientName=" . urlencode($faxRecipient);
        $url .= "&OptionalParams=" . urlencode($optionalParams);
        //echo "URL: " . $url;
        //reference primary file to fax
        $postData = array('file'=>"@$filePath");
        //initialize cURL and set cURL options
        $ch = curl_init($url); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HEADER, true); 
        //curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        curl_setopt($ch, CURLOPT_NOBODY, false); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        //specific cURL options for HTTPS sites
        //see <a href="http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/">http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/</a>
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/EquifaxSecureGlobalBusinessCA-1.crt");
        //trust any cert - FOR DEVELOPMENT ONLY
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //execute curl and get response information
        $responseBody = curl_exec($ch);
        $responseInfo = curl_getinfo($ch);
        $error = curl_error($ch);
        curl_close ($ch);
        //get headers and response data
        $helper = new FTSHelper();
        $headers = $helper->GetHeaders($responseBody, $responseInfo);
        if ($responseInfo["http_code"] == 200)
        {            
            //get additional information from XML payload
            //response data xml payload
            $xResponseData = $helper->GetResponseData($responseBody, $responseInfo);
            if ($xResponseData != null)
            {
            }            
        }
        else
        {
            //something went wrong so investigate result and error information
            //get result information from response headers
            $xwsResultCode = $responseInfo["http_code"];
            echo "ResultCode=" . $xwsResultCode ;
            //get error information from response headers
            $xwsErrorCode = $responseInfo["http_code"];
            echo "ErrorCode=" . $xwsErrorCode ;
        }
    }

public function OutboundFaxStatus

        // key parameters
        $sendfaxQueueId = ""; //<--- IMPORTANT: Enter a valid transmissionId
        // Set Security Token
        $FTSAES = new FTSAESHelper($this->securityContext);
        $this->securityToken = $FTSAES->GenerateSecurityTokenUrl();
        // Construct the base service URL endpoint
        $url = $this->serviceEndpointUrl; 
        $url .= "sendfaxstatus?";
        $url .= "token=". urlencode($this->securityToken);
        $url .= "&ApiKey=" . urlencode($this->apiKey);
        // Add the method specific parameters
        $url .= "&SendFaxQueueId=" . urlencode($sendfaxQueueId);
        //initialize cURL and set cURL options
        $ch = curl_init($url); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HEADER, true); 
        curl_setopt($ch, CURLOPT_NOBODY, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        //curl_setopt($ch, CURLOPT_POST, true);
        //curl_setopt($ch, CURLOPT_GETHTTP, true);
        //curl_setopt($ch, CURLOPT_POSTFIELDS, "");
        //specific cURL options for HTTPS sites
        //see <a href="http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/">http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/</a>
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/EquifaxSecureGlobaleBusinessCA-1.crt");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //execute curl and get response information
        //echo "URL: " . $url;
        $responseBody = curl_exec($ch);
        $responseInfo = curl_getinfo($ch);
        $error = curl_error($ch);
        curl_close ($ch);
        //get headers and response data
        $helper = new FTSHelper();
        $headers = $helper->GetHeaders($responseBody, $responseInfo);
        if ($responseInfo["http_code"] == 200)
        {            
            //get additional information from XML payload
            //response data xml payload
            $xResponseData = $helper->GetResponseData($responseBody, $responseInfo);
            if ($xResponseData != null)
            {
            }            
        }
        else
        {
            //something went wrong so investigate result and error information
            //get result information from response headers
            $xwsResultCode = $responseInfo["http_code"];
            echo "ResultCode=" . $xwsResultCode ;
            //get error information from response headers
            $xwsErrorCode = $responseInfo["http_code"];
            echo "ErrorCode=" . $xwsErrorCode ;
        }
    }

public function InboundFaxRetrieveSet

{
        // Set Security Token
        $FTSAES = new FTSAESHelper($this->securityContext);
        $this->securityToken = $FTSAES->GenerateSecurityTokenUrl();
        // Construct the base service URL endpoint
        $url = $this->serviceEndpointUrl; 
        $url .= "receiveinboundfax?";
        $url .= "token=". urlencode($this->securityToken);
        $url .= "&ApiKey=" . urlencode($this->apiKey);
        // Add the method specific parameters
        $url .= "&StartDateUTC=" . urlencode("");//Optional provide a start date 01/01/2013
        $url .= "&EndDateUTC=" . urlencode("");//Option provide a end date 02/01/2013
        $url .= "&MaxItems=" . urlencode("");//Option provide a numeric number from 1 to 500. Defaults to 500 results
        //initialize cURL and set cURL options
        $ch = curl_init($url); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HEADER, true); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        //specific cURL options for HTTPS sites
        //see <a href="http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/">http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/</a>
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/EquifaxSecureGlobaleBusinessCA-1.crt");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //execute curl and get response information
        $responseBody = curl_exec($ch);
        $responseInfo = curl_getinfo($ch);
        $error = curl_error($ch);
        curl_close ($ch);
        //get headers and response data
        $helper = new FTSHelper();
        $headers = $helper->GetHeaders($responseBody, $responseInfo);
        if ($responseInfo["http_code"] == 200)
        {            
            //get additional information from XML payload
            //response data xml payload
            $xResponseData = $helper->GetResponseData($responseBody, $responseInfo);
            if ($xResponseData != null)
            {
            }            
        }
        else
        {
            //something went wrong so investigate result and error information
            //get result information from response headers
            $xwsResultCode = $responseInfo["http_code"];
            echo "ResultCode=" . $xwsResultCode ;
            //get error information from response headers
            $xwsErrorCode = $responseInfo["http_code"];
            echo "ErrorCode=" . $xwsErrorCode ;
        }
    }

public function InboundFaxDownloadAsTIF

  // IMPORTANT: key parameters
        $faxId = ""; //<--- IMPORTANT: Enter a valid faxId
        // Set Security Token
        $FTSAES = new FTSAESHelper($this->securityContext);
        $this->securityToken = $FTSAES->GenerateSecurityTokenUrl();
        // Construct the base service URL endpoint
        $url = $this->serviceEndpointUrl; 
        $url .= "downloadinboundfaxastif?";
        $url .= "token=". urlencode($this->securityToken);
        $url .= "&ApiKey=" . urlencode($this->apiKey);
        // Add the method specific parameters
        $url .= "&FaxId=" . urlencode($faxId);
        //initialize cURL and set cURL options
        $ch = curl_init($url); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HEADER, true); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        //curl_setopt($ch, CURLOPT_POST, true);
        //curl_setopt($ch, CURLOPT_POSTFIELDS, "");
        //specific cURL options for HTTPS sites
        //see <a href="http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/">http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/</a>
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/EquifaxSecureGlobaleBusinessCA-1.crt");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //execute curl and get response information
        $responseBody = curl_exec($ch);
        $responseInfo = curl_getinfo($ch);
        $error = curl_error($ch);
        curl_close ($ch);
        //get headers and response data
        $helper = new FTSHelper();
        $headers = $helper->GetHeaders($responseBody, $responseInfo);
        if ($responseInfo["http_code"] == 200)
        {            
            //$faxId = $headers["XwsReturnData"];
            $helper->WriteResponseToFile($responseBody, $responseInfo,   $faxId . ".tif");        
        }
        else
        {
            //something went wrong so investigate result and error information
            //get result information from response headers
            $xwsResultCode = $responseInfo["http_code"];
            echo "ResultCode=" . $xwsResultCode ;
            //get error information from response headers
            $xwsErrorCode = $responseInfo["http_code"];
            echo "ErrorCode=" . $xwsErrorCode ;
        }
    }

public function InboundFaxDownloadAsPDF

{
        // IMPORTANT: key parameters
        $faxId = ""; //<--- IMPORTANT: Enter a valid faxId
        // Set Security Token
        $FTSAES = new FTSAESHelper($this->securityContext);
        $this->securityToken = $FTSAES->GenerateSecurityTokenUrl();
        // Construct the base service URL endpoint
        $url = $this->serviceEndpointUrl; 
        $url .= "downloadinboundfaxaspdf?";
        $url .= "token=". urlencode($this->securityToken);
        $url .= "&ApiKey=" . urlencode($this->apiKey);
        // Add the method specific parameters
        $url .= "&FaxId=" . urlencode($faxId);
        //initialize cURL and set cURL options
        $ch = curl_init($url); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HEADER, true); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        //curl_setopt($ch, CURLOPT_POST, true);
        //curl_setopt($ch, CURLOPT_POSTFIELDS, "");
        //specific cURL options for HTTPS sites
        //see <a href="http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/">http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/</a>
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/EquifaxSecureGlobaleBusinessCA-1.crt");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //execute curl and get response information
        $responseBody = curl_exec($ch);
        $responseInfo = curl_getinfo($ch);
        $error = curl_error($ch);
        curl_close ($ch);
        //get headers and response data
        $helper = new FTSHelper();
        $headers = $helper->GetHeaders($responseBody, $responseInfo);
        if ($responseInfo["http_code"] == 200)
        {            
            //$faxId = $headers["XwsReturnData"];
            $helper->WriteResponseToFile($responseBody, $responseInfo,   $faxId . ".pdf");        
        }
        else
        {
            //something went wrong so investigate result and error information
            //get result information from response headers
            $xwsResultCode = $responseInfo["http_code"];
            echo "ResultCode=" . $xwsResultCode ;
            //get error information from response headers
            $xwsErrorCode = $responseInfo["http_code"];
            echo "ErrorCode=" . $xwsErrorCode ;
        }
    }
}

class FTSHelper

// Common to all
{
    public static function GetHeaders($responseBody, $responseInfo)
    {
        $header_text = substr($responseBody, 0, $responseInfo['header_size']);
        $headers = array();
        foreach(explode("\n",$header_text) as $line) 
        {
            $parts = explode(": ",$line);
            if(count($parts) == 2) 
            {
                if (isset($headers[$parts[0]])) 
                {
                    if (is_array($headers[$parts[0]])) $headers[$parts[0]][] = chop($parts[1]);
                    else $headers[$parts[0]] = array($headers[$parts[0]], chop($parts[1]));
                } else 
                {
                    $headers[$parts[0]] = chop($parts[1]);
                }
            }
        }
        return $headers;        
    }

public static function GetResponseData($responseBody, $responseInfo)

// Common to all
{
        $body = "" . substr($responseBody, $responseInfo['header_size']);
        echo "SendFaxResponse: " . $body;
    }

public static function GetInboundResponseData($responseBody, $responseInfo)

// Common ONLY to Inbound Fax RetrieveSet

{
        $body = "" . substr($responseBody, $responseInfo['header_size']);
        echo "InboundRetrieveSets: " . $body;
    }

public static function WriteResponseToFile($responseBody, $responseInfo, $localFileName)

// Common to ONLY InboundFaxDownloadTIF & InboundFaxDownloadPDF
{
        $data = substr($responseBody, $responseInfo['header_size']);
        $fp = fopen($localFileName, "w");
        fwrite($fp, $data, strlen($data));
        fclose($fp);
    }
}

class FTSAESHelper

// Common to All
{
    protected $pTokenContext; 
    protected $pTokenUsername;
    protected $pTokenApiKey;
    protected $pTokenClient; 
    protected $pEncryptionKey; 
    protected $pEncryptionInitVector;
    public function __construct($pSecurityContext)
    {
    $this->pTokenContext=$pSecurityContext;                        
        $this->pTokenUsername="";  //<--- IMPORTANT: Enter a valid Username
        $this->pTokenApiKey=  "";  //<--- IMPORTANT: Enter a valid ApiKey
        $this->pTokenClient="";   //<--- IMPORTANT: Leave Blank
        $this->pEncryptionKey="";  //<--- IMPORTANT: Enter a valid Encryption key
        $this->pEncryptionInitVector="x49e*wJVXr8BrALE";  //<--- IMPORTANT: Enter a valid Init vector
    }
    public function GenerateSecurityTokenUrl()
    {
        $tokenDataInput;
        $tokenDataEncoded;
        $tokenGenDT;
        $tokenGenDT = gmdate("Y-m-d") . "T" . gmdate("H:i:s") . "Z";
        $tokenDataInput = "Context=" . $this->pTokenContext . "&Username=" . $this->pTokenUsername. "&ApiKey=" . $this->pTokenApiKey . "&GenDT=" . $tokenGenDT . "";
        if($this->pTokenClient != null && $this->pTokenClient != "")
        {
            $tokenDataInput .= "&Client=" . $this->pTokenClient;
        }
        $AES = new AES_Encryption($this->pEncryptionKey, $this->pEncryptionInitVector, "PKCS7", "cbc");
        $tokenDataEncoded = base64_encode($AES->encrypt($tokenDataInput));
        return $tokenDataEncoded;
    }
}

AES_Encryption

<?php
// Common to All
/***
 * AES_Encryption
 * This class allows you to easily encrypt and decrypt text in AES format
 * The class automatically determines whether you need 128, 192, or 256 bits
 * based on your key size. It handles multiple padding formats.
 * 
 * Dependencies:
 * This class is dependent on PHP's mcrypt extension and a class called padCrypt
 * 
 * Information about mcrypt extension is at:
 * <a href="http://us.php.net/mcrypt">http://us.php.net/mcrypt</a>
 * 
 * padCrypt class is published at:
 * <a href="http://dev.strategystar.net/2011/10/php-cryptography-padding-ansi-x-923-iso-10126-pkcs7-bit-zero/">http://dev.strategystar.net/2011/10/php-cryptography-padding-ansi-x-923-iso-10126-pkcs7-bit-zero/</a>
 * 
 * The padCrypt class provides methods for padding strings with the 
 * common methods described at:
 * <a href="http://en.wikipedia.org/wiki/Padding_%28cryptography%29">http://en.wikipedia.org/wiki/Padding_%28cryptography%29</a>
 * 
 * -- AES_Encryption Information
 * 
 * Key Sizes:
 * 16 bytes = 128 bit encryption
 * 24 bytes = 192 bit encryption
 * 32 bytes = 256 bit encryption
 * 
 * Padding Formats:
 * ANSI_X.923
 * ISO_10126
 * PKCS7
 * BIT
 * ZERO
 * 
 * The default padding method in this AES_Encryption class is ZERO padding
 * ZERO padding is generally OK for paddings in messages because 
 * null bytes stripped at the end of a readable message should not hurt
 * the point of the text. If you are concerned about message integrity, 
 * you can use PKCS7 instead
 * 
 * This class does not generate keys or vectors for you. You have to 
 * generate them yourself because you need to keep track of them yourself 
 * anyway in order to decrypt AES encryptions.
 * 
 * -- Example Usage:
 * 
 * $key     = "bac09c63f34c9845c707228b20cac5e0";
 * $iv         = "47c743d1b21de03034e0842352ae6b98";
 * $message = "Meet me at 11 o'clock behind the monument.";
 * 
 * $AES              = new AES_Encryption($key, $iv);
 * $encrypted        = $AES->encrypt($message);
 * $decrypted        = $AES->decrypt($encrypted);
 * $base64_encrypted = base64_encode($encrypted);
 * 
 * -- Credits:
 * 
 * @author Strategy Star Inc.
 * @website <a href="http://www.strategystar.net">http://www.strategystar.net</a>
 **/
class AES_Encryption
{
    private $key, $initVector, $mode, $cipher, $encryption = null;
    private $allowed_bits = array(128, 192, 256);
    private $allowed_modes = array('ecb', 'cfb', 'cbc', 'nofb', 'ofb');
    private $vector_modes = array('cbc','cfb','ofb');
    private $allowed_paddings = array(
        'ANSI_X.923' => 'ANSI_X923',
        'ISO_10126'     => 'ISO_10126',
        'PKCS7'         => 'PKCS7',
        'BIT'         => 'BIT',
        'ZERO'         => 'ZERO',
    );
    private $padCrypt_url   = 'http://dev.strategystar.net/2011/10/php-cryptography-padding-ansi-x-923-iso-10126-pkcs7-bit-zero/';
    private $aesEncrypt_url = 'http://dev.strategystar.net/';
    /***
     * String $key        = Your secret key that you will use to encrypt/decrypt
     * String $initVector = Your secret vector that you will use to encrypt/decrypt if using CBC, CFB, OFB, or a STREAM algorhitm that requires an IV
     * String $padding    = The padding method you want to use. The default is ZERO (aka NULL byte) [ANSI_X.923,ISO_10126,PKCS7,BIT,ZERO]
     * String $mode       = The encryption mode you want to use. The default is cbc [ecb,cfb,cbc,stream,nofb,ofb]
     **/
    public function __construct($key, $initVector='', $padding='ZERO', $mode='cbc')
    {
        $mode = strtolower($mode);
        $padding = strtoupper($padding);
        if(!class_exists('padCrypt'))
        {
            throw new Exception('The padCrypt class must be loaded for AES_Encryption to work: '.$padCrypt_url);
        }
        if(!function_exists('mcrypt_module_open'))
        {
            throw new Exception('The mcrypt extension must be loaded.');
        }
        if(strlen($initVector) != 16 && in_array($mode, $this->vector_modes))
        {
            throw new Exception('The $initVector is supposed to be 16 bytes in for CBC, CFB, NOFB, and OFB modes.');
        }
        elseif(!in_array($mode, $this->vector_modes) && !empty($initVector))
        {
            throw new Exception('The specified encryption mode does not use an initialization vector. You should pass an empty string, zero, FALSE, or NULL.');
        }
        $this->encryption = strlen($key)*8;
        if(!in_array($this->encryption, $this->allowed_bits))
        {
            throw new Exception('The $key must be either 16, 24, or 32 bytes in length for 128, 192, and 256 bit encryption respectively.');
        }
        $this->key = $key;
        $this->initVector = $initVector;
        if(!in_array($mode, $this->allowed_modes))
        {
            throw new Exception('The $mode must be one of the following: '.implode(', ', $this->allowed_modes));
        }
        if(!array_key_exists($padding, $this->allowed_paddings))
        {
            throw new Exception('The $padding must be one of the following: '.implode(', ', $this->allowed_paddings));
        }
        $this->mode = $mode;
        $this->padding = $padding;
        $this->cipher = mcrypt_module_open('rijndael-128', '', $this->mode, '');
        $this->block_size = mcrypt_get_block_size('rijndael-128', $this->mode);
    }
    /***
     * String $text = The text that you want to encrypt
     **/
    public function encrypt($text)
    {
        mcrypt_generic_init($this->cipher, $this->key, $this->initVector);
        $encrypted_text = mcrypt_generic($this->cipher, $this->pad($text, $this->block_size));
        mcrypt_generic_deinit($this->cipher);
        return $encrypted_text;
    }
    /***
     * String $text = The text that you want to decrypt
     **/
    public function decrypt($text)
    {
        mcrypt_generic_init($this->cipher, $this->key, $this->initVector);
        $decrypted_text = mdecrypt_generic($this->cipher, $text);
        mcrypt_generic_deinit($this->cipher);
        return $this->unpad($decrypted_text);
    }
    /***
     * Use this function to export the key, init_vector, padding, and mode
     * This information is necessary to later decrypt an encrypted message
     **/
    public function getConfiguration()
    {
        return array(
            'key'             => $this->key,
            'init_vector'   => $this->initVector,
            'padding'         => $this->padding,
            'mode'             => $this->mode,
            'encryption'    => $this->encryption . ' Bit',
            'block_size'    => $this->block_size,
        );
    }
    private function pad($text, $block_size)
    {
        return call_user_func_array(array('padCrypt', 'pad_'.$this->allowed_paddings[$this->padding]), array($text, $block_size));
    }
    private function unpad($text)
    {
        return call_user_func_array(array('padCrypt', 'unpad_'.$this->allowed_paddings[$this->padding]), array($text));
    }
    public function __destruct()
    {
        mcrypt_module_close($this->cipher);
    }
}

padCrypt

// Common to All
<?php
/**
 * padCrypt.php
 * 
 * This class can be used to pad strings with the following methods:
 * ANSI X.923, ISO 10126, PKCS7, Zero Padding, and Bit Padding
 * 
 * The methods are implemented as documented at:
 * <a href="http://en.wikipedia.org/wiki/Padding_(cryptography">http://en.wikipedia.org/wiki/Padding_(cryptography</a>)
 *
 * @author Strategy Star Inc.
 * @website <a href="http://www.strategystar.net">http://www.strategystar.net</a>
 */
class padCrypt
{
    public static function pad_ISO_10126($data, $block_size)
    {
        $padding = $block_size - (strlen($data) % $block_size);
        for($x=1; $x<$padding; $x++)
        {
            mt_srand();
            $data .= chr(mt_rand(0,255));
        }
        return $data . chr($padding);
    }
    public static function unpad_ISO_10126($data)
    {
        $length = ord(substr($data, -1));
        return substr($data, 0, strlen($data)-$length);
    }
    public static function pad_ANSI_X923($data, $block_size)
    {
        $padding = $block_size - (strlen($data) % $block_size);
        return $data . str_repeat(chr(0), $padding - 1) . chr($padding);
    }
    public static function unpad_ANSI_X923($data)
    {
        $length = ord(substr($data, -1));
        $padding_position = strlen($data) - $length;
        $padding = substr($data, $padding_position, -1);
        for($x=0; $x<$length; $x++)
        {
            if(ord(substr($padding, $x, 1)) != 0)
            {
                return $data;
            }
        }
        return substr($data, 0, $padding_position);
    }
    public static function pad_PKCS7($data, $block_size)
    {
        $padding = $block_size - (strlen($data) % $block_size);
        $pattern = chr($padding);        
        return $data . str_repeat($pattern, $padding);
    }
    public static function unpad_PKCS7($data)
    {
        $pattern = substr($data, -1);
        $length = ord($pattern);
        $padding = str_repeat($pattern, $length);
        $pattern_pos = strlen($data) - $length;
        if(substr($data, $pattern_pos) == $padding)
        {
            return substr($data, 0, $pattern_pos);
        }
        return $data;
    }
    public static function pad_BIT($data, $block_size)
    {
        $length = $block_size - (strlen($data) % $block_size) - 1;
        return $data . "\x80" . str_repeat("\x00", $length);
    }
    public static function unpad_BIT($data)
    {    
        if(substr(rtrim($data, "\x00"), -1) == "\x80")
        {
            return substr(rtrim($data, "\x00"), 0, -1);
        }
        return $data;
    }
    public static function pad_ZERO($data, $block_size)
    {
        $length = $block_size - (strlen($data) % $block_size);
        return $data . str_repeat("\x00", $length);
    }
    public static function unpad_ZERO($data)
    {
        return rtrim($data, "\x00");
    }
}
?>