File: GUIDE.md

Recommend this page to a friend!
  Classes of Jason Gerfen   jQuery.pidCrypt   GUIDE.md   Download  
File: GUIDE.md
Role: Documentation
Content type: text/plain
Description: Auxiliary data
Class: jQuery.pidCrypt
Encrypt form values using RSA and AES
Author: By
Last change: Update of GUIDE.md
Date: 2 years ago
Size: 6,027 bytes
 

Contents

Class file image Download
#jQuery.pidCrypt an implementation guide ## Requirements: * jQuery libraries (required - http://www.jquery.com) * pidCrypt RSA & AES libraries (required - https://www.pidder.com/pidcrypt/) * jQuery cookie plugin (optional - http://plugins.jquery.com/files/jquery.cookie.js.txt) * OpenSSL < 0.9.8 * PHP < 5.3 * A modern browser (doh!) ## Client setup Here is a simple method of getting the necessary requirements in place to begin implementing this project. ### Includes: The necessary libraries must be included. In the following example I am including the minified versions of the pidCrypt JS libraries as well as the CDN minified version of the latest stable jQuery libraries and finally including the minified version of the client for this project. ```html <!-- Latest CDN version of jQuery --> <script src="http://code.jquery.com/jquery.min.js"></script> <!-- Latest minified versions of pidCrypt library --> <script src="libs/js/pidCrypt/javascripts/compressed/pidcrypt_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/pidcrypt_util_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/md5_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/sha512_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/asn1_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/jsbn_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/rng_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/prng4_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/rsa_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/aes_core_c.js"></script> <script src="libs/js/pidCrypt/javascripts/compressed/aes_cbc_c.js"></script> <!-- Latest minified version of this plug-in --> <script src="libs/js/jquery.pidCrypt.min.js"></script> ``` ### Binding: Next bind the plug-in to the form you wish to provide RSA public key encryption for. There are several options available for the plug-in however here I will only provide the *recommended* arguments. ```javascript <script> $(document).ready(function(){ $('#form-id').pidCrypt({ appID:'<?php echo $_SESSION[$libs->_getRealIPv4()]["token"]; ?>', callback: function(data){ console.log(data); } }); }); ``` Simply echo out the server generated CSRF token to make the client aware. The AJAX framework which accompanies this project uses customized headers to help with data integrity in various manners. ## Server setup Here we go over the necessary server settings and requirements as well as code flow. ### Configuration A sample configuration was deemed necessary to clarify the requirements of the PHP OpenSSL extension. Two arrays are necessary, one specifies the runtime configuration options including key size, algorithm for signing etc. Please see http://www.php.net/manual/en/function.openssl-csr-new.php for more information about this array's available options. ```php <?php $settings['config']['cnf'] = array('config'=>'openssl.cnf', 'x509_extensions'=>'usr_cert'); $settings['config']['expires'] = 365; $settings['config']['private'] = true; $settings['config']['private_key_type'] = OPENSSL_KEYTYPE_RSA; $settings['config']['digest'] = ''; $settings['config']['keybits'] = 256; ``` The second is location specific and used when certificate creation and signing is used. Please see http://www.php.net/manual/en/function.openssl-csr-new.php for more information on its options and use. ```php <?php $settings['dn']['countryName'] = 'US'; $settings['dn']['stateOrProvinceName'] = 'Utah'; $settings['dn']['localityName'] = 'Salt Lake City'; $settings['dn']['organizationName'] = 'jQuery.pidCrypt'; $settings['dn']['organizationalUnitName'] = 'Plug-in for easy implementation of RSA public key encryption'; $settings['dn']['commonName'] = 'Jason Gerfen'; $settings['dn']['emailAddress'] = 'jason.gerfen@gmail.com'; ``` It is recommended you place these above two arrays within their own configuration file and simply include it withing your project like so. ```php <?php if (!file_exists('config.php')) { exit('config.php file does not exist'); } include 'config.php'; ``` ### Includes The project includes several core class files providing for easy implementation and extendability. These core class files can be located in the 'libs/classes/' folder. #### class.libraries.php Several re-usable functions reside within the class allowing such as retrieving the remote clients IPv4 address, generating a valid RFC-4122 GUID & serialization of strings. ```php <?php if (!file_exists('../libs/classes/class.libraries.php')) { exit('../libs/classes/class.libraries.php does not exist'); } include '../libs/classes/class.libraries.php'; /* handle for libraries object */ $libs = new libraries; ``` #### class.ajax.php This class attempts to provide methods of preventing script injections, cross site request forgeries even going so far as to checksum the submitted form data. ```php <?php /* load the ajax class */ if (!file_exists('../libs/classes/class.ajax.php')) { exit('../libs/classes/class.ajax.php does not exist'); } include '../libs/classes/class.ajax.php'; /* ensure our ajax request passes required checks */ $ajax = new ajax; if (!$ajax){ exit($libs->JSONencode(array('error'=>'AJAX request did not pass sanity checks'))); } ``` #### class.openssl.php An easy to use interface to PHP's OpenSSL functionality. Methods exist to seed the random number generators, generate password protected private keys, derive public keys, encrypt & decrypt (both symmetric and asymmetric cihpers) as well as sign and validate signed data. ```php <?php if (!file_exists('../libs/classes/class.openssl.php')) { exit('../libs/classes/class.openssl.php does not exist'); } include '../libs/classes/class.openssl.php'; ``` ###