1 <?php
if (!defined('PmWiki')) exit();
6 Copyright 2011 Anomen (ludek_h@seznam.cz)
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published
9 by the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
13 $RecipeInfo['AesCrypt']['Version'] = '2011-10-12';
15 SDV($AesCryptKDF, 'sha256');
16 SDV($AesCryptPlainToken, '(:encrypt ');
17 SDV($AesCryptCipherToken, '(:aes ');
18 SDV($AesCryptEndToken, ':)');
19 SDV($AesCryptPadding, 8);
22 $HTMLHeaderFmt['aescrypt_common'] = "
23 <script type=\"text/javascript\" src=\"\$PubDirUrl/aescrypt/aescrypt.js\"></script>
24 <script type=\"text/javascript\">
27 AesCtr.kdf = AesCtr.kdf_$AesCryptKDF;
29 function decAesClick(elem) {
30 var node = elem.childNodes[0];
31 var nodeDec = elem.childNodes[1];
32 if (nodeDec.style.visibility=='hidden') {
35 var aesDecrypt = node.childNodes[0].nodeValue;
36 var res = AesCtr.decrypt(aesDecrypt,prompt('Decrypt key','TopSecret'),256);
37 res = res.replace(/^\\s\\s*/, '').replace(/\\s\\s*\$/, '');
38 node.childNodes[0].nodeValue = res;
39 node.style.display='inline';
40 nodeDec.style.visibility='hidden';
41 nodeDec.style.display='none';
47 if ($action == 'edit') {
48 $HTMLHeaderFmt['aescrypt_edit'] = "
49 <script type=\"text/javascript\">
54 var textField = document.getElementById('text');
56 var markup1 = '$AesCryptPlainToken';
57 var markup2 = '$AesCryptCipherToken';
58 var markup_end = '$AesCryptEndToken';
59 var padding = $AesCryptPadding;
61 var testt = textField.value;
63 var tarr = new String;
64 var tmark = testt.indexOf(markup1);
67 tarr += testt.substring(tmark2,tmark);
68 tmark2 = testt.indexOf(markup_end,tmark);
69 var tpart = testt.substring(tmark+markup1.length,tmark2);
72 var tpass = prompt('Encrypt key for text starting at position '+tmark,'TopSecret');
74 while ((tpart.length % padding) > 0) {
75 tpart = tpart.concat(' ');
78 tarr +=AesCtr.encrypt(tpart,tpass,256);
82 tmark2 += markup_end.length;
83 tmark = testt.indexOf(markup1,tmark2);
86 tarr += testt.substr(tmark2);
88 textField.value = tarr;
91 function registerAesEvent()
93 // TODO: add protection handler to save buttons
95 var formElement = document.getElementById('text').parentNode;
96 //alert(formElement.nodeValue);
98 var inputs = document.getElementsByTagName('input');
100 for (var i=0; i < inputs.length; i++)
102 if ((inputs[i].getAttribute('type') == 'submit') && (inputs[i].getAttribute('name') == name))
111 if ( document.addEventListener ) {
112 window.addEventListener( 'load', registerAesEvent, false );
113 } else if ( document.attachEvent ) {
114 window.attachEvent( 'onload', registerAesEvent );
124 "/\\Q$AesCryptCipherToken\\E\\s*(.*?)\\s*\\Q$AesCryptEndToken\\E/se",
125 "'\n'.'<a href=\"javascript:void (0);\" onClick=\"decAesClick(this);\"><span style=\"white-space:pre;display:none;\">$1</span><span>[Decrypt]</span></a>'");
127 if ($action == 'edit') {
129 if (IsEnabled($EnableGUIButtons)) {
130 $GUIButtons['aescrypt'] = array(750, '', '', '',
131 '<a href=\"#\" onclick=\"aesClick(0);\"><img src=\"$GUIButtonDirUrlFmt/aescrypt.png\" title=\"Encrypt\" /></a>');
133 $MessagesFmt[] = "<input type='button' name='aesButton' value='Encrypt' onClick='aesClick(0);'/>";
138 // $GUIButtons['aescryptDebug'] = array(1750, '', '', '',
139 // '<a href=\"#\" onclick=\"registerAesEvent();\"><img src=\"$GUIButtonDirUrlFmt/aescrypt.png\" title=\"dev\" /></a>');