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,83 +436,72 @@ 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( isEncode,
false, KeyParameter(key),
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": 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(isEncode, ParametersWithIV(KeyParameter(key), iv));
cipher.init(false, 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) { offset += cipher.processBlock(
offset += cipher.processBlock( value,
value, offset,
offset, result,
result, offset,
offset, );
);
}
return result;
} }
return null; return result;
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) {
offset += cipher.processBlock( offset += cipher.processBlock(
value, value,
offset, offset,
result, result,
offset, offset,
); );
}
return result;
} }
return null; return result;
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(isEncode, KeyParameter(key));
cipher.init(false, 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) { offset += cipher.processBlock(
offset += cipher.processBlock( value,
value, offset,
offset, result,
result, offset,
offset, );
);
}
return result;
} }
return null; return result;
case "rsa": case "rsa":
if (!isEncode) { if (!isEncode) {
var key = data["key"]; var key = data["key"];