easecrypt - various dev files
[anomen-overlay.git] / www-apps / pmwiki / cookbook / AesCrypt / attic / aescrypt.00.php
blob7257c6e70f4aa2d64c245328e644933b89c8d3f4
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'] = '2012-12-17-DEV';
15 SDV($AesCryptKDF, 'sha256_dup');
16 SDV($AesCryptPlainToken, '(:encrypt ');
17 SDV($AesCryptCipherToken, '(:aes ');
18 SDV($AesCryptEndToken, ':)');
19 SDV($AesCryptPadding, 8);
20 SDV($AesCryptSelectionMode, true);
22 SDV($HTMLStylesFmt['aescrypt'], "
23 .aescrypt_overlay {
24 visibility: hidden;
25 position: absolute;
26 left: 0px;
27 top: 0px;
28 width:100%;
29 height:100%;
30 text-align:center;
31 z-index: 1000;
34 .aescrypt_overlay div {
35 width:300px;
36 margin: 100px auto;
37 background-color: #ffffff;
38 border:1px solid #000000;
39 padding:15px;
40 text-align:center;
42 ");
45 $HTMLHeaderFmt['aescrypt_common'] = "
46 <script type=\"text/javascript\" src=\"\$PubDirUrl/aescrypt/aescrypt.js\"></script>
47 <script type=\"text/javascript\">
48 // <![CDATA[
50 function aescryptOverlay(id, state) {
51 var el = document.getElementById('aescrypt_o_'+id);
52 el.style.visibility = state ? 'visible' : 'hidden';
53 if (state) {
54 var pw = document.getElementById('aescrypt_p_'+id);
55 pw.focus();
59 function aescryptDecSubmit(id)
61 aescryptOverlay(id, false);
62 var pwel = document.getElementById('aescrypt_p_'+id);
63 var pw = pwel.value;
64 var pwel = document.getElementById('aescrypt_c_'+id);
66 var contentel = document.getElementById('aescrypt_c_'+id);
67 var cipher = contentel.childNodes[0].nodeValue;
68 var plain = AesCtr.decrypt(cipher,pw,256);
69 contentel.childNodes[0].nodeValue = plain;
70 contentel.style.display='block';
72 var linkel = document.getElementById('aescrypt_a_'+id);
73 linkel.style.visibility='hidden';
74 linkel.style.display='none';
79 AesCtr.kdf = function(password, nBits, nonce) {
80 return AesCtr.kdf_$AesCryptKDF (password, nBits, nonce);
83 function aescryptDecClick(elem) {
84 var node = elem.childNodes[0];
85 var nodeDec = elem.childNodes[1];
86 if (nodeDec.style.visibility=='hidden') {
87 return;
89 var aesDecrypt = node.childNodes[0].nodeValue;
90 var res = AesCtr.decrypt(aesDecrypt,prompt('Decrypt key','TopSecret'),256);
91 res = res.replace(/^\\s\\s*/, '').replace(/\\s\\s*\$/, '');
92 node.childNodes[0].nodeValue = res;
93 node.style.display='block';
94 nodeDec.style.visibility='hidden';
95 nodeDec.style.display='none';
98 function aescryptOverlayDecClick(elem) {
99 aescryptOverlay();
100 var node = elem.childNodes[0];
101 var crypted = node.childNodes[0].nodeValue;
102 var aesDecrypt = getElementById('aescryptLabel').nodevalue = crypted;
106 // ]]>
107 </script>
110 if ($action == 'edit') {
111 $HTMLHeaderFmt['aescrypt_edit'] = "
112 <script type=\"text/javascript\">
113 // <![CDATA[
115 function aescryptEncSubmit() {
117 var pwel = document.getElementById('aescrypt_p_0');
118 var pw = pwel.value;
120 aescryptOverlay(0, false);
122 // find selection
123 var textarea = document.getElementById('text');
125 if (document.selection) { // IE variant
126 textarea.focus();
127 var sel = document.selection.createRange();
128 // alert the selected text in textarea
129 // alert(sel.text);
130 // Finally replace the value of the selected text with this new replacement one
131 if (sel != null && sel.text != null && sel.text != '' ) {
132 sel.text = aesPrompt(pw, sel.text);
133 } else {
134 alert('Please select text to encrypt');
136 } else {
137 var len = textarea.value.length;
138 var start = textarea.selectionStart;
139 var end = textarea.selectionEnd;
140 var sel = textarea.value.substring(start, end);
142 if (start < end) {
143 var replace = aesOverlayPrompt(pw, sel);
144 // Here we are replacing the selected text with this one
145 textarea.value = textarea.value.substring(0,start) + replace + textarea.value.substring(end,len);
147 else {
148 alert('Please select text to encrypt');
149 return;
155 function aesOverlayPrompt(pass, tpart) {
156 var padding = $AesCryptPadding;
157 var tarr = '$AesCryptCipherToken';
158 var markup_end = '$AesCryptEndToken';
160 while ((tpart.length % padding) > 0) {
161 tpart = tpart.concat(' ');
164 tarr +=AesCtr.encrypt(tpart,pass,256);
165 tarr += ' ';
166 tarr += markup_end;
167 return tarr;
170 function aesPrompt(tmark, tpart) {
171 var padding = $AesCryptPadding;
172 var tarr = '$AesCryptCipherToken';
173 var markup_end = '$AesCryptEndToken';
175 var tpass = prompt('Encrypt key for text starting at position '+tmark,'TopSecret');
177 while ((tpart.length % padding) > 0) {
178 tpart = tpart.concat(' ');
181 tarr +=AesCtr.encrypt(tpart,tpass,256);
182 tarr += ' ';
183 tarr += markup_end;
184 return tarr;
187 function aesSelectionClick() {
189 var textarea = document.getElementById('text');
191 if (document.selection) { // IE variant
192 textarea.focus();
193 var sel = document.selection.createRange();
194 // alert the selected text in textarea
195 // alert(sel.text);
196 // Finally replace the value of the selected text with this new replacement one
197 if (sel != null && sel.text != null && sel.text != '' ) {
198 sel.text = aesPrompt('[selection]', sel.text);
199 } else {
200 alert('Please select text to encrypt');
202 } else {
203 var len = textarea.value.length;
204 var start = textarea.selectionStart;
205 var end = textarea.selectionEnd;
206 var sel = textarea.value.substring(start, end);
208 if (start < end) {
209 var replace = aesPrompt(start, sel);
210 // Here we are replacing the selected text with this one
211 textarea.value = textarea.value.substring(0,start) + replace + textarea.value.substring(end,len);
213 else {
214 alert('Please select text to encrypt');
215 return;
221 function aescryptDecSubmit($id)
223 aescryptOverlay(false);
224 var textField = document.getElementById('aescrypt_c_$id');
225 var enc = elem.childNodes[0];
226 alert (enc);
229 function aesClick() {
231 var textField = document.getElementById('text');
233 var markup1 = '$AesCryptPlainToken';
234 var markup2 = '$AesCryptCipherToken';
235 var markup_end = '$AesCryptEndToken';
236 var padding = $AesCryptPadding;
238 var testt = textField.value;
239 var tmark2 = 0;
240 var tarr = new String;
241 var tmark = testt.indexOf(markup1);
243 while(tmark >= 0) {
244 tarr += testt.substring(tmark2,tmark);
245 tmark2 = testt.indexOf(markup_end,tmark);
246 var tpart = testt.substring(tmark+markup1.length,tmark2);
248 tarr += aesPrompt(tmark, tpart);
250 tmark2 += markup_end.length;
251 tmark = testt.indexOf(markup1,tmark2);
254 tarr += testt.substr(tmark2);
256 textField.value = tarr;
259 function registerAesEvent()
261 // TODO: add protection handler to save buttons
263 var formElement = document.getElementById('text').parentNode;
264 //alert(formElement.nodeValue);
266 var inputs = document.getElementsByTagName('input');
267 var button;
268 for (var i=0; i < inputs.length; i++)
270 if ((inputs[i].getAttribute('type') == 'submit') && (inputs[i].getAttribute('name') == name))
272 button = inputs[i];
279 if ( document.addEventListener ) {
280 window.addEventListener( 'load', registerAesEvent, false );
281 } else if ( document.attachEvent ) {
282 window.attachEvent( 'onload', registerAesEvent );
285 // ]]>
286 </script>
291 function aescryptMarkup($ciphertext)
293 static $id = 0;
294 $id++;
295 $res = "\n";
296 $res .= "<div id=\"aescrypt_c_$id\" style=\"white-space:pre;display:none;\">$ciphertext</div>";
297 $res .= "<div id=\"aescrypt_d_$id\">";
298 $res .= "<a id=\"aescrypt_a_$id\" href=\"javascript:void (0);\" onClick=\"aescryptOverlay($id, true);\">";
299 $res .= "[Decrypt]";
300 $res .= "</a>";
301 $res .= "</div>";
302 $c = $ciphertext;
303 if (strlen($c) > 30) {
304 $c = substr($c, 0, 27) . "...";
306 $res .= "<div id=\"aescrypt_o_$id\" class=\"aescrypt_overlay\">
307 <div>
308 <p id=\"aescrypt_l_$id\">Decrypting \"$c\".</p>
309 <form id=\"aescrypt_f_$id\" onsubmit=\"aescryptDecSubmit($id);return false;\">
310 <label for=\"aescrypt_p_$id\">Password </label>
311 <input type=\"password\" name=\"aescrypt_p_$id\" id=\"aescrypt_p_$id\" />
312 <input type=\"submit\" />
313 </form>
314 </div>
315 </div>";
317 return $res;
320 Markup('aescrypt',
321 'directives',
322 "/\\Q$AesCryptCipherToken\\E\\s*(.*?)\\s*\\Q$AesCryptEndToken\\E/se",
323 "aescryptMarkup('$1')");
325 if ($action == 'edit') {
327 if (IsEnabled($EnableGUIButtons)) {
328 $GUIButtons['aescrypt'] = array(750, '', '', '',
329 // TODO: add overlay DIV here & test browsers
330 "<a href='#' onclick=\"aescryptOverlay(0, true);\"><img src='\$GUIButtonDirUrlFmt/aescrypt.png' title='Encrypt' /></a>
331 <div id=\"aescrypt_o_0\" class=\"aescrypt_overlay\">
332 <div>
333 <p id=\"aescrypt_l_0\">Encrypt selected text:</p>
334 <form id=\"aescrypt_f_0\" onsubmit=\"aescryptEncSubmit();return false;\">
335 <input type=\"password\" name=\"aescrypt_p_0\" id=\"aescrypt_p_0\" />
336 <input type=\"submit\" />
337 </form>
338 </div>
339 </div>");
341 } else {
342 // TODO: simply add overlay DIV here
343 $MessagesFmt[] = "<input type='button' name='aesButton' value='Encrypt' onClick=\"aescryptOverlay(0, true);\"/>
344 <div id=\"aescrypt_o_0\" class=\"aescrypt_overlay\">
345 <div>
346 <p id=\"aescrypt_l_0\">Encrypt selected text:</p>
347 <form id=\"aescrypt_f_0\" onsubmit=\"aescryptEncSubmit();return false;\">
348 <input type=\"password\" name=\"aescrypt_p_0\" id=\"aescrypt_p_0\" />
349 <input type=\"submit\" />
350 </form>
351 </div>
352 </div>";