Code Samples: PHP

Please note that C# is our Official client, and that is what 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");
    }
}
?>