modularized symmetric crypto code into its own js file, since openpgp.crypto.js accesses the window and document objects
This commit is contained in:
parent
83ac8fe762
commit
61d905e5de
|
@ -83,43 +83,6 @@ function openpgp_crypto_asymetricDecrypt(algo, publicMPIs, secretMPIs, dataMPIs)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Symmetrically encrypts data using prefixedrandom, a key with length
|
||||
* depending on the algorithm in openpgp_cfb mode with or without resync
|
||||
* (MDC style)
|
||||
* @param prefixrandom secure random bytes as string in length equal to the
|
||||
* block size of the algorithm used (use openpgp_crypto_getPrefixRandom(algo)
|
||||
* to retrieve that string
|
||||
* @param algo [Integer] algorithm to use (see RFC4880 9.2)
|
||||
* @param key [String] key as string. length is depending on the algorithm used
|
||||
* @param data [String] data to encrypt
|
||||
* @param openpgp_cfb [boolean]
|
||||
* @return [String] encrypted data
|
||||
*/
|
||||
function openpgp_crypto_symmetricEncrypt(prefixrandom, algo, key, data, openpgp_cfb) {
|
||||
switch(algo) {
|
||||
case 0: // Plaintext or unencrypted data
|
||||
return data; // blockcipherencryptfn, plaintext, block_size, key
|
||||
case 2: // TripleDES (DES-EDE, [SCHNEIER] [HAC] - 168 bit key derived from 192)
|
||||
return openpgp_cfb_encrypt(prefixrandom, desede, data,8,key, openpgp_cfb).substring(0, data.length + 10);
|
||||
case 3: // CAST5 (128 bit key, as per [RFC2144])
|
||||
return openpgp_cfb_encrypt(prefixrandom, cast5_encrypt, data,8,key, openpgp_cfb).substring(0, data.length + 10);
|
||||
case 4: // Blowfish (128 bit key, 16 rounds) [BLOWFISH]
|
||||
return openpgp_cfb_encrypt(prefixrandom, BFencrypt, data,8,key, openpgp_cfb).substring(0, data.length + 10);
|
||||
case 7: // AES with 128-bit key [AES]
|
||||
case 8: // AES with 192-bit key
|
||||
case 9: // AES with 256-bit key
|
||||
return openpgp_cfb_encrypt(prefixrandom, AESencrypt, data, 16, keyExpansion(key), openpgp_cfb).substring(0, data.length + 18);
|
||||
case 10: // Twofish with 256-bit key [TWOFISH]
|
||||
return openpgp_cfb_encrypt(prefixrandom, TFencrypt, data,16, key, openpgp_cfb).substring(0, data.length + 18);
|
||||
case 1: // IDEA [IDEA]
|
||||
util.print_error("IDEA Algorithm not implemented");
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* generate random byte prefix as string for the specified algorithm
|
||||
* @param algo [Integer] algorithm to use (see RFC4880 9.2)
|
||||
|
@ -141,44 +104,6 @@ function openpgp_crypto_getPrefixRandom(algo) {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Symmetrically decrypts data using a key with length depending on the
|
||||
* algorithm in openpgp_cfb mode with or without resync (MDC style)
|
||||
* @param algo [Integer] algorithm to use (see RFC4880 9.2)
|
||||
* @param key [String] key as string. length is depending on the algorithm used
|
||||
* @param data [String] data to be decrypted
|
||||
* @param openpgp_cfb [boolean] if true use the resync (for encrypteddata);
|
||||
* otherwise use without the resync (for MDC encrypted data)
|
||||
* @return [String] plaintext data
|
||||
*/
|
||||
function openpgp_crypto_symmetricDecrypt(algo, key, data, openpgp_cfb) {
|
||||
util.print_debug_hexstr_dump("openpgp_crypto_symmetricDecrypt:\nalgo:"+algo+"\nencrypteddata:",data);
|
||||
var n = 0;
|
||||
if (!openpgp_cfb)
|
||||
n = 2;
|
||||
switch(algo) {
|
||||
case 0: // Plaintext or unencrypted data
|
||||
return data;
|
||||
case 2: // TripleDES (DES-EDE, [SCHNEIER] [HAC] - 168 bit key derived from 192)
|
||||
return openpgp_cfb_decrypt(desede, 8, key, data, openpgp_cfb).substring(n, (data.length+n)-10);
|
||||
case 3: // CAST5 (128 bit key, as per [RFC2144])
|
||||
return openpgp_cfb_decrypt(cast5_encrypt, 8, key, data, openpgp_cfb).substring(n, (data.length+n)-10);
|
||||
case 4: // Blowfish (128 bit key, 16 rounds) [BLOWFISH]
|
||||
return openpgp_cfb_decrypt(BFencrypt, 8, key, data, openpgp_cfb).substring(n, (data.length+n)-10);
|
||||
case 7: // AES with 128-bit key [AES]
|
||||
case 8: // AES with 192-bit key
|
||||
case 9: // AES with 256-bit key
|
||||
return openpgp_cfb_decrypt(AESencrypt, 16, keyExpansion(key), data, openpgp_cfb).substring(n, (data.length+n)-18);
|
||||
case 10: // Twofish with 256-bit key [TWOFISH]
|
||||
var result = openpgp_cfb_decrypt(TFencrypt, 16, key, data, openpgp_cfb).substring(n, (data.length+n)-18);
|
||||
return result;
|
||||
case 1: // IDEA [IDEA]
|
||||
util.print_error(""+ (algo == 1 ? "IDEA Algorithm not implemented" : "Twofish Algorithm not implemented"));
|
||||
return null;
|
||||
default:
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve the MDC prefixed bytes by decrypting them
|
||||
|
|
94
src/ciphers/openpgp.crypto.sym.js
Normal file
94
src/ciphers/openpgp.crypto.sym.js
Normal file
|
@ -0,0 +1,94 @@
|
|||
// GPG4Browsers - An OpenPGP implementation in javascript
|
||||
// Copyright (C) 2011 Recurity Labs GmbH
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
// The GPG4Browsers symmetric crypto interface
|
||||
|
||||
/**
|
||||
* Symmetrically encrypts data using prefixedrandom, a key with length
|
||||
* depending on the algorithm in openpgp_cfb mode with or without resync
|
||||
* (MDC style)
|
||||
* @param prefixrandom secure random bytes as string in length equal to the
|
||||
* block size of the algorithm used (use openpgp_crypto_getPrefixRandom(algo)
|
||||
* to retrieve that string
|
||||
* @param algo [Integer] algorithm to use (see RFC4880 9.2)
|
||||
* @param key [String] key as string. length is depending on the algorithm used
|
||||
* @param data [String] data to encrypt
|
||||
* @param openpgp_cfb [boolean]
|
||||
* @return [String] encrypted data
|
||||
*/
|
||||
function openpgp_crypto_symmetricEncrypt(prefixrandom, algo, key, data, openpgp_cfb) {
|
||||
switch(algo) {
|
||||
case 0: // Plaintext or unencrypted data
|
||||
return data; // blockcipherencryptfn, plaintext, block_size, key
|
||||
case 2: // TripleDES (DES-EDE, [SCHNEIER] [HAC] - 168 bit key derived from 192)
|
||||
return openpgp_cfb_encrypt(prefixrandom, desede, data,8,key, openpgp_cfb).substring(0, data.length + 10);
|
||||
case 3: // CAST5 (128 bit key, as per [RFC2144])
|
||||
return openpgp_cfb_encrypt(prefixrandom, cast5_encrypt, data,8,key, openpgp_cfb).substring(0, data.length + 10);
|
||||
case 4: // Blowfish (128 bit key, 16 rounds) [BLOWFISH]
|
||||
return openpgp_cfb_encrypt(prefixrandom, BFencrypt, data,8,key, openpgp_cfb).substring(0, data.length + 10);
|
||||
case 7: // AES with 128-bit key [AES]
|
||||
case 8: // AES with 192-bit key
|
||||
case 9: // AES with 256-bit key
|
||||
return openpgp_cfb_encrypt(prefixrandom, AESencrypt, data, 16, keyExpansion(key), openpgp_cfb).substring(0, data.length + 18);
|
||||
case 10: // Twofish with 256-bit key [TWOFISH]
|
||||
return openpgp_cfb_encrypt(prefixrandom, TFencrypt, data,16, key, openpgp_cfb).substring(0, data.length + 18);
|
||||
case 1: // IDEA [IDEA]
|
||||
util.print_error("IDEA Algorithm not implemented");
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Symmetrically decrypts data using a key with length depending on the
|
||||
* algorithm in openpgp_cfb mode with or without resync (MDC style)
|
||||
* @param algo [Integer] algorithm to use (see RFC4880 9.2)
|
||||
* @param key [String] key as string. length is depending on the algorithm used
|
||||
* @param data [String] data to be decrypted
|
||||
* @param openpgp_cfb [boolean] if true use the resync (for encrypteddata);
|
||||
* otherwise use without the resync (for MDC encrypted data)
|
||||
* @return [String] plaintext data
|
||||
*/
|
||||
function openpgp_crypto_symmetricDecrypt(algo, key, data, openpgp_cfb) {
|
||||
util.print_debug_hexstr_dump("openpgp_crypto_symmetricDecrypt:\nalgo:"+algo+"\nencrypteddata:",data);
|
||||
var n = 0;
|
||||
if (!openpgp_cfb)
|
||||
n = 2;
|
||||
switch(algo) {
|
||||
case 0: // Plaintext or unencrypted data
|
||||
return data;
|
||||
case 2: // TripleDES (DES-EDE, [SCHNEIER] [HAC] - 168 bit key derived from 192)
|
||||
return openpgp_cfb_decrypt(desede, 8, key, data, openpgp_cfb).substring(n, (data.length+n)-10);
|
||||
case 3: // CAST5 (128 bit key, as per [RFC2144])
|
||||
return openpgp_cfb_decrypt(cast5_encrypt, 8, key, data, openpgp_cfb).substring(n, (data.length+n)-10);
|
||||
case 4: // Blowfish (128 bit key, 16 rounds) [BLOWFISH]
|
||||
return openpgp_cfb_decrypt(BFencrypt, 8, key, data, openpgp_cfb).substring(n, (data.length+n)-10);
|
||||
case 7: // AES with 128-bit key [AES]
|
||||
case 8: // AES with 192-bit key
|
||||
case 9: // AES with 256-bit key
|
||||
return openpgp_cfb_decrypt(AESencrypt, 16, keyExpansion(key), data, openpgp_cfb).substring(n, (data.length+n)-18);
|
||||
case 10: // Twofish with 256-bit key [TWOFISH]
|
||||
var result = openpgp_cfb_decrypt(TFencrypt, 16, key, data, openpgp_cfb).substring(n, (data.length+n)-18);
|
||||
return result;
|
||||
case 1: // IDEA [IDEA]
|
||||
util.print_error(""+ (algo == 1 ? "IDEA Algorithm not implemented" : "Twofish Algorithm not implemented"));
|
||||
return null;
|
||||
default:
|
||||
}
|
||||
return null;
|
||||
}
|
Loading…
Reference in New Issue
Block a user