From efd91a15ca63d94441d275330260e3bca3ffb90f Mon Sep 17 00:00:00 2001 From: anomen Date: Sun, 5 Feb 2012 21:14:00 +0100 Subject: [PATCH] easecrypt - various dev files --- .../cookbook/AesCrypt/aescrypt-testvectors.js | 42 +++ .../{aescrypt.php.00 => attic/aescrypt.00.php} | 0 .../cookbook/AesCrypt/cryptojs/crypto-sha256.js | 14 + .../cookbook/AesCrypt/cryptojs/cryptojs-aes.js | 407 +++++++++++++++++++++ .../cookbook/AesCrypt/cryptojs/cryptojs-sha256.js | 135 +++++++ .../cookbook/AesCrypt/{ => submodal}/close.gif | Bin .../cookbook/AesCrypt/{ => submodal}/common.js | 0 .../cookbook/AesCrypt/{ => submodal}/dialog.html | 0 .../cookbook/AesCrypt/{ => submodal}/index.html | 0 .../AesCrypt/{index.html => submodal/index.php} | 13 +- .../cookbook/AesCrypt/{ => submodal}/loading.html | 0 .../pmwiki/cookbook/AesCrypt/submodal/maskBG.png | 1 + .../cookbook/AesCrypt/{ => submodal}/style.css | 0 .../cookbook/AesCrypt/{ => submodal}/subModal.css | 0 .../cookbook/AesCrypt/{ => submodal}/subModal.js | 0 .../AesCrypt/webtoolkit/webtoolkit.sha256.js | 129 +++++++ 16 files changed, 736 insertions(+), 5 deletions(-) create mode 100644 www-apps/pmwiki/cookbook/AesCrypt/aescrypt-testvectors.js rename www-apps/pmwiki/cookbook/AesCrypt/{aescrypt.php.00 => attic/aescrypt.00.php} (100%) create mode 100644 www-apps/pmwiki/cookbook/AesCrypt/cryptojs/crypto-sha256.js create mode 100644 www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-aes.js create mode 100644 www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-sha256.js rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/close.gif (100%) rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/common.js (100%) rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/dialog.html (100%) copy www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/index.html (100%) rename www-apps/pmwiki/cookbook/AesCrypt/{index.html => submodal/index.php} (59%) rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/loading.html (100%) create mode 120000 www-apps/pmwiki/cookbook/AesCrypt/submodal/maskBG.png rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/style.css (100%) rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/subModal.css (100%) rename www-apps/pmwiki/cookbook/AesCrypt/{ => submodal}/subModal.js (100%) create mode 100644 www-apps/pmwiki/cookbook/AesCrypt/webtoolkit/webtoolkit.sha256.js diff --git a/www-apps/pmwiki/cookbook/AesCrypt/aescrypt-testvectors.js b/www-apps/pmwiki/cookbook/AesCrypt/aescrypt-testvectors.js new file mode 100644 index 0000000..7d468a8 --- /dev/null +++ b/www-apps/pmwiki/cookbook/AesCrypt/aescrypt-testvectors.js @@ -0,0 +1,42 @@ + + +AesCtr.testVectors = function() { + var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES + if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys + plaintext = Utf8.encode(plaintext); + password = Utf8.encode(password); + //var t = new Date(); // timer + + var key = [0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81,0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4]; + + // initialise counter block (NIST SP800-38A §B.2): millisecond time-stamp for nonce in 1st 8 bytes, + // block counter in 2nd 8 bytes + var counterBlock = [0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff]; + + // TOOD: finish + + // generate key schedule - an expansion of the key into distinct Key Rounds for each round + var keySchedule = Aes.KeyExpansion(key); + + var blockCount = Math.ceil(plaintext.length/blockSize); + var ciphertxt = new Array(blockCount); // ciphertext as array of strings + + for (var b=0; b>> c*8) & 0xff; + for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8) + + var cipherCntr = Aes.Cipher(counterBlock, keySchedule); // -- encrypt counter block -- + + // block size is reduced on final block + var blockLength = b>>32-b},rotr:function(a,b){return a<<32-b|a>>>b},endian:function(a){if(a.constructor==Number)return m.rotl(a,8)&16711935|m.rotl(a,24)&4278255360;for(var b=0;b0;a--)b.push(Math.floor(Math.random()*256));return b},bytesToWords:function(a){for(var b=[],c=0,f=0;c>>5]|=a[c]<<24- +f%32;return b},wordsToBytes:function(a){for(var b=[],c=0;c>>5]>>>24-c%32&255);return b},bytesToHex:function(a){for(var b=[],c=0;c>>4).toString(16));b.push((a[c]&15).toString(16))}return b.join("")},hexToBytes:function(a){for(var b=[],c=0;c>>6*(3-d)&63)):b.push("=");return b.join("")},base64ToBytes:function(a){if(typeof atob=="function")return n.stringToBytes(atob(a));a=a.replace(/[^A-Z0-9+\/]/ig,"");for(var b=[],c=0,f=0;c>> +6-f*2);return b}};j=j.charenc={};j.UTF8={stringToBytes:function(a){return n.stringToBytes(unescape(encodeURIComponent(a)))},bytesToString:function(a){return decodeURIComponent(escape(n.bytesToString(a)))}};var n=j.Binary={stringToBytes:function(a){for(var b=[],c=0;c>5]|=128<<24-e%32;k[(e+64>>9<<4)+15]=e;for(v=0;v>>7)^(l<<14|l>>>18)^l>>>3)+(o[g-7]>>>0)+((i<<15|i>>>17)^(i<<13|i>>>19)^i>>>10)+(o[g-16]>>>0)}i=e&p^e&q^p&q;var w=(e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22);l=(u>>>0)+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7| +h>>>25))+(h&r^~h&s)+c[g]+(o[g]>>>0);i=w+i;u=s;s=r;r=h;h=t+l;t=q;q=p;p=e;e=l+i}d[0]+=e;d[1]+=p;d[2]+=q;d[3]+=t;d[4]+=h;d[5]+=r;d[6]+=s;d[7]+=u}return d};f._blocksize=16;f._digestsize=32})(); diff --git a/www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-aes.js b/www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-aes.js new file mode 100644 index 0000000..bca0e13 --- /dev/null +++ b/www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-aes.js @@ -0,0 +1,407 @@ +/* + * Crypto-JS v2.4.0 + * http://code.google.com/p/crypto-js/ + * Copyright (c) 2011, Jeff Mott. All rights reserved. + * http://code.google.com/p/crypto-js/wiki/License + */ +(function(){ + +// Shortcuts +var C = Crypto, + util = C.util, + charenc = C.charenc, + UTF8 = charenc.UTF8; + +// Precomputed SBOX +var SBOX = [ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ]; + +// Compute inverse SBOX lookup table +for (var INVSBOX = [], i = 0; i < 256; i++) INVSBOX[SBOX[i]] = i; + +// Compute mulitplication in GF(2^8) lookup tables +var MULT2 = [], + MULT3 = [], + MULT9 = [], + MULTB = [], + MULTD = [], + MULTE = []; + +function xtime(a, b) { + for (var result = 0, i = 0; i < 8; i++) { + if (b & 1) result ^= a; + var hiBitSet = a & 0x80; + a = (a << 1) & 0xFF; + if (hiBitSet) a ^= 0x1b; + b >>>= 1; + } + return result; +} + +for (var i = 0; i < 256; i++) { + MULT2[i] = xtime(i,2); + MULT3[i] = xtime(i,3); + MULT9[i] = xtime(i,9); + MULTB[i] = xtime(i,0xB); + MULTD[i] = xtime(i,0xD); + MULTE[i] = xtime(i,0xE); +} + +// Precomputed RCon lookup +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + +// Inner state +var state = [[], [], [], []], + keylength, + nrounds, + keyschedule; + +var AES = C.AES = { + + /** + * Public API + */ + + encrypt: function (message, password, options) { + + options = options || {}; + + // Determine mode + var mode = options.mode || new C.mode.OFB; + + // Allow mode to override options + if (mode.fixOptions) mode.fixOptions(options); + + var + + // Convert to bytes if message is a string + m = ( + message.constructor == String ? + UTF8.stringToBytes(message) : + message + ), + + // Generate random IV + iv = options.iv || util.randomBytes(AES._blocksize * 4), + + // Generate key + k = ( + password.constructor == String ? + // Derive key from passphrase + C.PBKDF2(password, iv, 32, { asBytes: true }) : + // else, assume byte array representing cryptographic key + password + ); + + // Encrypt + AES._init(k); + mode.encrypt(AES, m, iv); + + // Return ciphertext + m = options.iv ? m : iv.concat(m); + return (options && options.asBytes) ? m : util.bytesToBase64(m); + + }, + + decrypt: function (ciphertext, password, options) { + + options = options || {}; + + // Determine mode + var mode = options.mode || new C.mode.OFB; + + // Allow mode to override options + if (mode.fixOptions) mode.fixOptions(options); + + var + + // Convert to bytes if ciphertext is a string + c = ( + ciphertext.constructor == String ? + util.base64ToBytes(ciphertext): + ciphertext + ), + + // Separate IV and message + iv = options.iv || c.splice(0, AES._blocksize * 4), + + // Generate key + k = ( + password.constructor == String ? + // Derive key from passphrase + C.PBKDF2(password, iv, 32, { asBytes: true }) : + // else, assume byte array representing cryptographic key + password + ); + + // Decrypt + AES._init(k); + mode.decrypt(AES, c, iv); + + // Return plaintext + return (options && options.asBytes) ? c : UTF8.bytesToString(c); + + }, + + + /** + * Package private methods and properties + */ + + _blocksize: 4, + + _encryptblock: function (m, offset) { + + // Set input + for (var row = 0; row < AES._blocksize; row++) { + for (var col = 0; col < 4; col++) + state[row][col] = m[offset + col * 4 + row]; + } + + // Add round key + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] ^= keyschedule[col][row]; + } + + for (var round = 1; round < nrounds; round++) { + + // Sub bytes + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] = SBOX[state[row][col]]; + } + + // Shift rows + state[1].push(state[1].shift()); + state[2].push(state[2].shift()); + state[2].push(state[2].shift()); + state[3].unshift(state[3].pop()); + + // Mix columns + for (var col = 0; col < 4; col++) { + + var s0 = state[0][col], + s1 = state[1][col], + s2 = state[2][col], + s3 = state[3][col]; + + state[0][col] = MULT2[s0] ^ MULT3[s1] ^ s2 ^ s3; + state[1][col] = s0 ^ MULT2[s1] ^ MULT3[s2] ^ s3; + state[2][col] = s0 ^ s1 ^ MULT2[s2] ^ MULT3[s3]; + state[3][col] = MULT3[s0] ^ s1 ^ s2 ^ MULT2[s3]; + + } + + // Add round key + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] ^= keyschedule[round * 4 + col][row]; + } + + } + + // Sub bytes + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] = SBOX[state[row][col]]; + } + + // Shift rows + state[1].push(state[1].shift()); + state[2].push(state[2].shift()); + state[2].push(state[2].shift()); + state[3].unshift(state[3].pop()); + + // Add round key + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] ^= keyschedule[nrounds * 4 + col][row]; + } + + // Set output + for (var row = 0; row < AES._blocksize; row++) { + for (var col = 0; col < 4; col++) + m[offset + col * 4 + row] = state[row][col]; + } + + }, + + _decryptblock: function (c, offset) { + + // Set input + for (var row = 0; row < AES._blocksize; row++) { + for (var col = 0; col < 4; col++) + state[row][col] = c[offset + col * 4 + row]; + } + + // Add round key + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] ^= keyschedule[nrounds * 4 + col][row]; + } + + for (var round = 1; round < nrounds; round++) { + + // Inv shift rows + state[1].unshift(state[1].pop()); + state[2].push(state[2].shift()); + state[2].push(state[2].shift()); + state[3].push(state[3].shift()); + + // Inv sub bytes + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] = INVSBOX[state[row][col]]; + } + + // Add round key + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] ^= keyschedule[(nrounds - round) * 4 + col][row]; + } + + // Inv mix columns + for (var col = 0; col < 4; col++) { + + var s0 = state[0][col], + s1 = state[1][col], + s2 = state[2][col], + s3 = state[3][col]; + + state[0][col] = MULTE[s0] ^ MULTB[s1] ^ MULTD[s2] ^ MULT9[s3]; + state[1][col] = MULT9[s0] ^ MULTE[s1] ^ MULTB[s2] ^ MULTD[s3]; + state[2][col] = MULTD[s0] ^ MULT9[s1] ^ MULTE[s2] ^ MULTB[s3]; + state[3][col] = MULTB[s0] ^ MULTD[s1] ^ MULT9[s2] ^ MULTE[s3]; + + } + + } + + // Inv shift rows + state[1].unshift(state[1].pop()); + state[2].push(state[2].shift()); + state[2].push(state[2].shift()); + state[3].push(state[3].shift()); + + // Inv sub bytes + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] = INVSBOX[state[row][col]]; + } + + // Add round key + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) + state[row][col] ^= keyschedule[col][row]; + } + + // Set output + for (var row = 0; row < AES._blocksize; row++) { + for (var col = 0; col < 4; col++) + c[offset + col * 4 + row] = state[row][col]; + } + + }, + + + /** + * Private methods + */ + + _init: function (k) { + keylength = k.length / 4; + nrounds = keylength + 6; + AES._keyexpansion(k); + }, + + // Generate a key schedule + _keyexpansion: function (k) { + + keyschedule = []; + + for (var row = 0; row < keylength; row++) { + keyschedule[row] = [ + k[row * 4], + k[row * 4 + 1], + k[row * 4 + 2], + k[row * 4 + 3] + ]; + } + + for (var row = keylength; row < AES._blocksize * (nrounds + 1); row++) { + + var temp = [ + keyschedule[row - 1][0], + keyschedule[row - 1][1], + keyschedule[row - 1][2], + keyschedule[row - 1][3] + ]; + + if (row % keylength == 0) { + + // Rot word + temp.push(temp.shift()); + + // Sub word + temp[0] = SBOX[temp[0]]; + temp[1] = SBOX[temp[1]]; + temp[2] = SBOX[temp[2]]; + temp[3] = SBOX[temp[3]]; + + temp[0] ^= RCON[row / keylength]; + + } else if (keylength > 6 && row % keylength == 4) { + + // Sub word + temp[0] = SBOX[temp[0]]; + temp[1] = SBOX[temp[1]]; + temp[2] = SBOX[temp[2]]; + temp[3] = SBOX[temp[3]]; + + } + + keyschedule[row] = [ + keyschedule[row - keylength][0] ^ temp[0], + keyschedule[row - keylength][1] ^ temp[1], + keyschedule[row - keylength][2] ^ temp[2], + keyschedule[row - keylength][3] ^ temp[3] + ]; + + } + + } + +}; + +})(); diff --git a/www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-sha256.js b/www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-sha256.js new file mode 100644 index 0000000..e3e2969 --- /dev/null +++ b/www-apps/pmwiki/cookbook/AesCrypt/cryptojs/cryptojs-sha256.js @@ -0,0 +1,135 @@ +/* + * Crypto-JS v2.4.0 + * http://code.google.com/p/crypto-js/ + * Copyright (c) 2011, Jeff Mott. All rights reserved. + * http://code.google.com/p/crypto-js/wiki/License + */ +(function(){ + +// Shortcuts +var C = Crypto, + util = C.util, + charenc = C.charenc, + UTF8 = charenc.UTF8, + Binary = charenc.Binary; + +// Constants +var K = [ 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 ]; + +// Public API +var SHA256 = C.SHA256 = function (message, options) { + var digestbytes = util.wordsToBytes(SHA256._sha256(message)); + return options && options.asBytes ? digestbytes : + options && options.asString ? Binary.bytesToString(digestbytes) : + util.bytesToHex(digestbytes); +}; + +// The core +SHA256._sha256 = function (message) { + + // Convert to byte array + if (message.constructor == String) message = UTF8.stringToBytes(message); + /* else, assume byte array already */ + + var m = util.bytesToWords(message), + l = message.length * 8, + H = [ 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, + 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 ], + w = [], + a, b, c, d, e, f, g, h, i, j, + t1, t2; + + // Padding + m[l >> 5] |= 0x80 << (24 - l % 32); + m[((l + 64 >> 9) << 4) + 15] = l; + + for (var i = 0; i < m.length; i += 16) { + + a = H[0]; + b = H[1]; + c = H[2]; + d = H[3]; + e = H[4]; + f = H[5]; + g = H[6]; + h = H[7]; + + for (var j = 0; j < 64; j++) { + + if (j < 16) w[j] = m[j + i]; + else { + + var gamma0x = w[j - 15], + gamma1x = w[j - 2], + gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3), + gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + w[j] = gamma0 + (w[j - 7] >>> 0) + + gamma1 + (w[j - 16] >>> 0); + + } + + var ch = e & f ^ ~e & g, + maj = a & b ^ a & c ^ b & c, + sigma0 = ((a << 30) | (a >>> 2)) ^ + ((a << 19) | (a >>> 13)) ^ + ((a << 10) | (a >>> 22)), + sigma1 = ((e << 26) | (e >>> 6)) ^ + ((e << 21) | (e >>> 11)) ^ + ((e << 7) | (e >>> 25)); + + + t1 = (h >>> 0) + sigma1 + ch + (K[j]) + (w[j] >>> 0); + t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + + } + + H[0] += a; + H[1] += b; + H[2] += c; + H[3] += d; + H[4] += e; + H[5] += f; + H[6] += g; + H[7] += h; + + } + + return H; + +}; + +// Package private blocksize +SHA256._blocksize = 16; + +SHA256._digestsize = 32; + +})(); diff --git a/www-apps/pmwiki/cookbook/AesCrypt/close.gif b/www-apps/pmwiki/cookbook/AesCrypt/submodal/close.gif similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/close.gif rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/close.gif diff --git a/www-apps/pmwiki/cookbook/AesCrypt/common.js b/www-apps/pmwiki/cookbook/AesCrypt/submodal/common.js similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/common.js rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/common.js diff --git a/www-apps/pmwiki/cookbook/AesCrypt/dialog.html b/www-apps/pmwiki/cookbook/AesCrypt/submodal/dialog.html similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/dialog.html rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/dialog.html diff --git a/www-apps/pmwiki/cookbook/AesCrypt/index.html b/www-apps/pmwiki/cookbook/AesCrypt/submodal/index.html similarity index 100% copy from www-apps/pmwiki/cookbook/AesCrypt/index.html copy to www-apps/pmwiki/cookbook/AesCrypt/submodal/index.html diff --git a/www-apps/pmwiki/cookbook/AesCrypt/index.html b/www-apps/pmwiki/cookbook/AesCrypt/submodal/index.php similarity index 59% rename from www-apps/pmwiki/cookbook/AesCrypt/index.html rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/index.php index ad2e74c..bfb2bd4 100644 --- a/www-apps/pmwiki/cookbook/AesCrypt/index.html +++ b/www-apps/pmwiki/cookbook/AesCrypt/submodal/index.php @@ -1,15 +1,18 @@ + AsWiki test Page - - + + - + DEVELOPMENT PAGE ONLY !!! @@ -29,7 +32,7 @@ function aescryptEncCallback(password)

This is a test page for the subModal - a DHTML modal dialog solution.

- +
diff --git a/www-apps/pmwiki/cookbook/AesCrypt/loading.html b/www-apps/pmwiki/cookbook/AesCrypt/submodal/loading.html similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/loading.html rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/loading.html diff --git a/www-apps/pmwiki/cookbook/AesCrypt/submodal/maskBG.png b/www-apps/pmwiki/cookbook/AesCrypt/submodal/maskBG.png new file mode 120000 index 0000000..13181d6 --- /dev/null +++ b/www-apps/pmwiki/cookbook/AesCrypt/submodal/maskBG.png @@ -0,0 +1 @@ +../maskBG.png \ No newline at end of file diff --git a/www-apps/pmwiki/cookbook/AesCrypt/style.css b/www-apps/pmwiki/cookbook/AesCrypt/submodal/style.css similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/style.css rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/style.css diff --git a/www-apps/pmwiki/cookbook/AesCrypt/subModal.css b/www-apps/pmwiki/cookbook/AesCrypt/submodal/subModal.css similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/subModal.css rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/subModal.css diff --git a/www-apps/pmwiki/cookbook/AesCrypt/subModal.js b/www-apps/pmwiki/cookbook/AesCrypt/submodal/subModal.js similarity index 100% rename from www-apps/pmwiki/cookbook/AesCrypt/subModal.js rename to www-apps/pmwiki/cookbook/AesCrypt/submodal/subModal.js diff --git a/www-apps/pmwiki/cookbook/AesCrypt/webtoolkit/webtoolkit.sha256.js b/www-apps/pmwiki/cookbook/AesCrypt/webtoolkit/webtoolkit.sha256.js new file mode 100644 index 0000000..e9c6599 --- /dev/null +++ b/www-apps/pmwiki/cookbook/AesCrypt/webtoolkit/webtoolkit.sha256.js @@ -0,0 +1,129 @@ +/** +* +* Secure Hash Algorithm (SHA256) +* http://www.webtoolkit.info/ +* +* Original code by Angel Marin, Paul Johnston. +* +**/ + +function SHA256(s){ + + var chrsz = 8; + var hexcase = 0; + + function safe_add (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } + + function S (X, n) { return ( X >>> n ) | (X << (32 - n)); } + function R (X, n) { return ( X >>> n ); } + function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); } + function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); } + function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); } + function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); } + function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); } + function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); } + + function core_sha256 (m, l) { + var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2); + var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19); + var W = new Array(64); + var a, b, c, d, e, f, g, h, i, j; + var T1, T2; + + m[l >> 5] |= 0x80 << (24 - l % 32); + m[((l + 64 >> 9) << 4) + 15] = l; + + for ( var i = 0; i>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32); + } + return bin; + } + + function Utf8Encode(string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + } + + function binb2hex (binarray) { + var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + var str = ""; + var bin = []; + for(var i = 0; i < binarray.length * 4; i++) { + str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + + hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); + } + return str; + } + + s = Utf8Encode(s); + return binb2hex(core_sha256(str2binb(s), s.length * chrsz)); + +} + -- 2.11.4.GIT