An implementation of Steve Gibson's Perfect Paper Passwords (PPP) system.

CryptoPPP Library Module For Processwire

Implements Steve Gibson's PPP One-Time-Pad System along with some additional helpers.

Pre-requisites


Requires OpenSSL and bcmaths PHP extension to be installed.

Version 3.1.0 changed from the, now deprecated, mcrypt library over to using OpenSSL internally.

Generating A Single Key


Simply use $key = CryptoPPP::genKeys(); or $key = CryptoPPP::genKeys(1);

Generating Multiple Keys.


If you want 2 keys you would do $keys = CryptoPPP::genKeys(2); to get them in the $keys array or do list($k1, $k2) = CryptoPPP::genKeys(2); to assign them to named variables.

Now that you have at least one key, you can use it as the basis of generating tokens or token streams.

Converting A Key Into A Token (a strings of characters).


The simplest way to convert a key into a token of a given length and using a given output alphabet is to call the CryptoPPP::keyToToken static method. If no length or alphabet is defined a 12 character token using the default alphabet (!#%+23456789:=?@ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnopqrstuvwxyz) will be created from the key.

To create tokens with a format such as 'X7gM-jA9v-KtWs' where the length of the 'blocks' and the 'glue' between them are customisable you can use the related helper method CryptoPPP::keyToTokenBlocks().

Generating A Token Sequence (a One-Time-Pad) From A Key + Sequence Number.


If your application can associate an incrementing sequence number with a key, then you can use the PPP system to generate a One-Time-Pad (a stream of tokens.) This is simply done by passing the key, the sequence position, output alphabet and token length to CryptoPPP::getCode(). Once your application finishes using that token from the token stream, simply increment the sequence number ready for the next usage.

Install and use modules at your own risk. Always have a site and database backup before installing new modules.

Twitter updates

  • A review of weekly core updates, plus a simple recipe for a very effective listing cache—More
    24 June 2022
  • Weekly update: Making ProcessWire render pages at old WordPress URLs (or building a simple/custom URL router in PW): More
    17 June 2022
  • New post: ProcessWire now comes with just 1 site installation profile, the "blank" profile. It makes very few assumptions, making it a minimal though excellent starting point. Here’s how you might use it— More
    10 June 2022

Latest news

  • ProcessWire Weekly #423
    In the 423rd issue of ProcessWire Weekly we'll cover latest weekly update from Ryan, share some recent module updates and forum highlights, and more. Read on!
    Weekly.pw / 18 June 2022
  • Starting a site with the “blank” profile
    ProcessWire 3.0.200+ comes with just 1 site installation profile, the site-blank profile. This profile makes very few assumptions, making it a minimal though excellent starting point. Here’s how you might use it. 
    Blog / 10 June 2022
  • Subscribe to weekly ProcessWire news

“…building with ProcessWire was a breeze, I really love all the flexibility the system provides. I can’t imagine using any other CMS in the future.” —Thomas Aull