diff --git a/assets/init.js b/assets/init.js index 2c38ad1..1196181 100644 --- a/assets/init.js +++ b/assets/init.js @@ -190,6 +190,21 @@ let Convert = { }); }, + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @returns {ArrayBuffer} + */ + encryptAesEcb: (value, key) => { + return sendMessage({ + method: "convert", + type: "aes-ecb", + value: value, + key: key, + isEncode: true + }); + }, + /** * @param {ArrayBuffer} value * @param {ArrayBuffer} key @@ -205,6 +220,23 @@ let Convert = { }); }, + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @param {ArrayBuffer} iv + * @returns {ArrayBuffer} + */ + encryptAesCbc: (value, key, iv) => { + return sendMessage({ + method: "convert", + type: "aes-cbc", + value: value, + key: key, + iv: iv, + isEncode: true + }); + }, + /** * @param {ArrayBuffer} value * @param {ArrayBuffer} key @@ -225,20 +257,58 @@ let Convert = { /** * @param {ArrayBuffer} value * @param {ArrayBuffer} key + * @param {ArrayBuffer} iv * @param {number} blockSize * @returns {ArrayBuffer} */ - decryptAesCfb: (value, key, blockSize) => { + encryptAesCfb: (value, key, iv, blockSize) => { return sendMessage({ method: "convert", type: "aes-cfb", value: value, key: key, + iv: iv, + blockSize: blockSize, + isEncode: true + }); + }, + + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @param {ArrayBuffer} iv + * @param {number} blockSize + * @returns {ArrayBuffer} + */ + decryptAesCfb: (value, key, iv, blockSize) => { + return sendMessage({ + method: "convert", + type: "aes-cfb", + value: value, + key: key, + iv: iv, blockSize: blockSize, isEncode: false }); }, + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @param {number} blockSize + * @returns {ArrayBuffer} + */ + encryptAesOfb: (value, key, blockSize) => { + return sendMessage({ + method: "convert", + type: "aes-ofb", + value: value, + key: key, + blockSize: blockSize, + isEncode: true + }); + }, + /** * @param {ArrayBuffer} value * @param {ArrayBuffer} key diff --git a/lib/foundation/js_engine.dart b/lib/foundation/js_engine.dart index 551561a..290e4fb 100644 --- a/lib/foundation/js_engine.dart +++ b/lib/foundation/js_engine.dart @@ -436,83 +436,72 @@ mixin class _JSEngineApi { return Uint8List.fromList(hmac.convert(value).bytes); } case "aes-ecb": - if (!isEncode) { - var key = data["key"]; - var cipher = ECBBlockCipher(AESEngine()); - cipher.init( - false, - KeyParameter(key), + var key = data["key"]; + var cipher = ECBBlockCipher(AESEngine()); + cipher.init( + isEncode, + KeyParameter(key), + ); + var offset = 0; + var result = Uint8List(value.length); + while (offset < value.length) { + offset += cipher.processBlock( + value, + offset, + result, + offset, ); - var offset = 0; - var result = Uint8List(value.length); - while (offset < value.length) { - offset += cipher.processBlock( - value, - offset, - result, - offset, - ); - } - return result; } - return null; + return result; case "aes-cbc": - if (!isEncode) { - var key = data["key"]; - var iv = data["iv"]; - var cipher = CBCBlockCipher(AESEngine()); - cipher.init(false, ParametersWithIV(KeyParameter(key), iv)); - var offset = 0; - var result = Uint8List(value.length); - while (offset < value.length) { - offset += cipher.processBlock( - value, - offset, - result, - offset, - ); - } - return result; + var key = data["key"]; + var iv = data["iv"]; + var cipher = CBCBlockCipher(AESEngine()); + cipher.init(isEncode, ParametersWithIV(KeyParameter(key), iv)); + var offset = 0; + var result = Uint8List(value.length); + while (offset < value.length) { + offset += cipher.processBlock( + value, + offset, + result, + offset, + ); } - return null; + return result; case "aes-cfb": - if (!isEncode) { - var key = data["key"]; - var blockSize = data["blockSize"]; - var cipher = CFBBlockCipher(AESEngine(), blockSize); - cipher.init(false, KeyParameter(key)); - var offset = 0; - var result = Uint8List(value.length); - while (offset < value.length) { - offset += cipher.processBlock( - value, - offset, - result, - offset, - ); - } - return result; + var key = data["key"]; + var iv = data["iv"]; + var blockSize = data["blockSize"]; + var cipher = CFBBlockCipher(AESEngine(), blockSize); + cipher.init(isEncode, ParametersWithIV(KeyParameter(key), iv)); + var offset = 0; + var result = Uint8List(value.length); + while (offset < value.length) { + offset += cipher.processBlock( + value, + offset, + result, + offset, + ); } - return null; + return result; case "aes-ofb": - if (!isEncode) { - var key = data["key"]; - var blockSize = data["blockSize"]; - var cipher = OFBBlockCipher(AESEngine(), blockSize); - cipher.init(false, KeyParameter(key)); - var offset = 0; - var result = Uint8List(value.length); - while (offset < value.length) { - offset += cipher.processBlock( - value, - offset, - result, - offset, - ); - } - return result; + var key = data["key"]; + var blockSize = data["blockSize"]; + var cipher = OFBBlockCipher(AESEngine(), blockSize); + cipher.init(isEncode, KeyParameter(key)); + var offset = 0; + var result = Uint8List(value.length); + while (offset < value.length) { + offset += cipher.processBlock( + value, + offset, + result, + offset, + ); } - return null; + return result; case "rsa": if (!isEncode) { var key = data["key"];