www-apps/pmwiki - cookbook - rssfeeddisplay, minor fixes in other recipes
[anomen-overlay.git] / www-apps / pmwiki / cookbook / AesCrypt / aescrypt.php
blob8fff2d1f11d67b3b77fb60cbfba7cf3da94d78bb
1 <?php if (!defined('PmWiki')) exit();
3 /*
4 AesCrypt
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\">
25 // <![CDATA[
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') {
33 return;
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';
43 // ]]>
44 </script>
47 if ($action == 'edit') {
48 $HTMLHeaderFmt['aescrypt_edit'] = "
49 <script type=\"text/javascript\">
50 // <![CDATA[
52 function aesClick() {
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;
62 var tmark2 = 0;
63 var tarr = new String;
64 var tmark = testt.indexOf(markup1);
66 while(tmark >= 0) {
67 tarr += testt.substring(tmark2,tmark);
68 tmark2 = testt.indexOf(markup_end,tmark);
69 var tpart = testt.substring(tmark+markup1.length,tmark2);
71 tarr += markup2;
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);
79 tarr += ' ';
80 tarr += markup_end;
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');
99 var button;
100 for (var i=0; i < inputs.length; i++)
102 if ((inputs[i].getAttribute('type') == 'submit') && (inputs[i].getAttribute('name') == name))
104 button = inputs[i];
111 if ( document.addEventListener ) {
112 window.addEventListener( 'load', registerAesEvent, false );
113 } else if ( document.attachEvent ) {
114 window.attachEvent( 'onload', registerAesEvent );
117 // ]]>
118 </script>
122 Markup('aescrypt',
123 '_begin',
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>');
132 } else {
133 $MessagesFmt[] = "<input type='button' name='aesButton' value='Encrypt' onClick='aesClick(0);'/>";
137 // DEV
138 // $GUIButtons['aescryptDebug'] = array(1750, '', '', '',
139 // '<a href=\"#\" onclick=\"registerAesEvent();\"><img src=\"$GUIButtonDirUrlFmt/aescrypt.png\" title=\"dev\" /></a>');