Add encryptAes for js_engine (#645)

This commit is contained in:
RuriNyan
2025-11-29 14:18:18 +08:00
committed by GitHub
parent bdaa10fa06
commit b3239757a8
2 changed files with 129 additions and 70 deletions

View File

@@ -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} value
* @param {ArrayBuffer} key * @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} value
* @param {ArrayBuffer} key * @param {ArrayBuffer} key
@@ -225,20 +257,58 @@ let Convert = {
/** /**
* @param {ArrayBuffer} value * @param {ArrayBuffer} value
* @param {ArrayBuffer} key * @param {ArrayBuffer} key
* @param {ArrayBuffer} iv
* @param {number} blockSize * @param {number} blockSize
* @returns {ArrayBuffer} * @returns {ArrayBuffer}
*/ */
decryptAesCfb: (value, key, blockSize) => { encryptAesCfb: (value, key, iv, blockSize) => {
return sendMessage({ return sendMessage({
method: "convert", method: "convert",
type: "aes-cfb", type: "aes-cfb",
value: value, value: value,
key: key, 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, blockSize: blockSize,
isEncode: false 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} value
* @param {ArrayBuffer} key * @param {ArrayBuffer} key

View File

@@ -436,11 +436,10 @@ mixin class _JSEngineApi {
return Uint8List.fromList(hmac.convert(value).bytes); return Uint8List.fromList(hmac.convert(value).bytes);
} }
case "aes-ecb": case "aes-ecb":
if (!isEncode) {
var key = data["key"]; var key = data["key"];
var cipher = ECBBlockCipher(AESEngine()); var cipher = ECBBlockCipher(AESEngine());
cipher.init( cipher.init(
false, isEncode,
KeyParameter(key), KeyParameter(key),
); );
var offset = 0; var offset = 0;
@@ -454,14 +453,11 @@ mixin class _JSEngineApi {
); );
} }
return result; return result;
}
return null;
case "aes-cbc": case "aes-cbc":
if (!isEncode) {
var key = data["key"]; var key = data["key"];
var iv = data["iv"]; var iv = data["iv"];
var cipher = CBCBlockCipher(AESEngine()); var cipher = CBCBlockCipher(AESEngine());
cipher.init(false, ParametersWithIV(KeyParameter(key), iv)); cipher.init(isEncode, ParametersWithIV(KeyParameter(key), iv));
var offset = 0; var offset = 0;
var result = Uint8List(value.length); var result = Uint8List(value.length);
while (offset < value.length) { while (offset < value.length) {
@@ -473,14 +469,12 @@ mixin class _JSEngineApi {
); );
} }
return result; return result;
}
return null;
case "aes-cfb": case "aes-cfb":
if (!isEncode) {
var key = data["key"]; var key = data["key"];
var iv = data["iv"];
var blockSize = data["blockSize"]; var blockSize = data["blockSize"];
var cipher = CFBBlockCipher(AESEngine(), blockSize); var cipher = CFBBlockCipher(AESEngine(), blockSize);
cipher.init(false, KeyParameter(key)); cipher.init(isEncode, ParametersWithIV(KeyParameter(key), iv));
var offset = 0; var offset = 0;
var result = Uint8List(value.length); var result = Uint8List(value.length);
while (offset < value.length) { while (offset < value.length) {
@@ -492,14 +486,11 @@ mixin class _JSEngineApi {
); );
} }
return result; return result;
}
return null;
case "aes-ofb": case "aes-ofb":
if (!isEncode) {
var key = data["key"]; var key = data["key"];
var blockSize = data["blockSize"]; var blockSize = data["blockSize"];
var cipher = OFBBlockCipher(AESEngine(), blockSize); var cipher = OFBBlockCipher(AESEngine(), blockSize);
cipher.init(false, KeyParameter(key)); cipher.init(isEncode, KeyParameter(key));
var offset = 0; var offset = 0;
var result = Uint8List(value.length); var result = Uint8List(value.length);
while (offset < value.length) { while (offset < value.length) {
@@ -511,8 +502,6 @@ mixin class _JSEngineApi {
); );
} }
return result; return result;
}
return null;
case "rsa": case "rsa":
if (!isEncode) { if (!isEncode) {
var key = data["key"]; var key = data["key"];