AES.ets 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. /*
  2. * Copyright (C) 2024 桃花镇童长老 @pura/harmony-utils
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. *
  15. * https://ohpm.openharmony.cn/#/cn/detail/@pura%2Fharmony-utils
  16. */
  17. import cryptoFramework from '@ohos.security.cryptoFramework';
  18. import { CryptoUtil } from './CryptoUtil';
  19. /**
  20. * TODO AES加解密
  21. * author: 桃花镇童长老ᥫ᭡
  22. * since: 2024/07/01
  23. * 仓库主页:https://ohpm.openharmony.cn/#/cn/detail/@pura%2Fharmony-utils
  24. * github: https://github.com/787107497
  25. * gitee: https://gitee.com/tongyuyan/harmony-utils
  26. * CSDN: https://blog.csdn.net/qq_32922545
  27. * QQ交流群: 569512366
  28. */
  29. export class AES {
  30. /**
  31. * 加密(GCM模式),异步
  32. * @param data 加密或者解密的数据。data不能为null。
  33. * @param symKey 指定加密或解密的密钥。
  34. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  35. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|GCM|PKCS7、AES192|GCM|PKCS7、AES128|GCM|PKCS7)。
  36. * @returns
  37. */
  38. static async encryptGCM(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  39. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7'): Promise<cryptoFramework.DataBlob> {
  40. let cipher = cryptoFramework.createCipher(transformation);
  41. await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
  42. let encryptUpdate = await cipher.update(data);
  43. //GCM模式加密doFinal时传入空,获得tag数据,并更新至gcmParams对象中。
  44. gcmParams.authTag = await cipher.doFinal(null);
  45. return encryptUpdate;
  46. }
  47. /**
  48. * 加密(GCM模式),同步
  49. * @param data 加密或者解密的数据。data不能为null。
  50. * @param symKey 指定加密或解密的密钥。
  51. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  52. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|GCM|PKCS7、AES192|GCM|PKCS7、AES128|GCM|PKCS7)。
  53. * @returns
  54. */
  55. static encryptGCMSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  56. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7'): cryptoFramework.DataBlob {
  57. let cipher = cryptoFramework.createCipher(transformation);
  58. cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
  59. let encryptUpdate = cipher.updateSync(data);
  60. //GCM模式加密doFinal时传入空,获得tag数据,并更新至gcmParams对象中。
  61. gcmParams.authTag = cipher.doFinalSync(null);
  62. return encryptUpdate;
  63. }
  64. /**
  65. * 解密(GCM模式),异步
  66. * @param data 加密或者解密的数据。data不能为null。
  67. * @param symKey 指定加密或解密的密钥。
  68. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  69. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|GCM|PKCS7、AES192|GCM|PKCS7、AES128|GCM|PKCS7)。
  70. * @returns
  71. */
  72. static async decryptGCM(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  73. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7'): Promise<cryptoFramework.DataBlob> {
  74. let decoder = cryptoFramework.createCipher(transformation);
  75. await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams);
  76. let decryptUpdate = await decoder.update(data);
  77. //GCM模式解密doFinal时传入空,验证init时传入的tag数据,如果验证失败会抛出异常。
  78. await decoder.doFinal(null)
  79. return decryptUpdate;
  80. }
  81. /**
  82. * 解密(GCM模式),同步
  83. * @param data 加密或者解密的数据。data不能为null。
  84. * @param symKey 指定加密或解密的密钥。
  85. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  86. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|GCM|PKCS7、AES192|GCM|PKCS7、AES128|GCM|PKCS7)。
  87. * @returns
  88. */
  89. static decryptGCMSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  90. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7'): cryptoFramework.DataBlob {
  91. let decoder = cryptoFramework.createCipher(transformation);
  92. decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams);
  93. let decryptUpdate = decoder.updateSync(data);
  94. //GCM模式解密doFinal时传入空,验证init时传入的tag数据,如果验证失败会抛出异常。
  95. decoder.doFinalSync(null)
  96. return decryptUpdate;
  97. }
  98. /**
  99. * 加密(CBC模式),异步
  100. * @param data 加密或者解密的数据。data不能为null。
  101. * @param symKey 指定加密或解密的密钥。
  102. * @param ivParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  103. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|CBC|PKCS7、AES192|CBC|PKCS7、AES128|CBC|PKCS7)。
  104. * @returns
  105. */
  106. static async encryptCBC(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  107. ivParams: cryptoFramework.IvParamsSpec, transformation: string = 'AES256|CBC|PKCS7'): Promise<cryptoFramework.DataBlob> {
  108. return AES.encrypt(data, symKey, ivParams, transformation);
  109. }
  110. /**
  111. * 加密(CBC模式),同步
  112. * @param data 加密或者解密的数据。data不能为null。
  113. * @param symKey 指定加密或解密的密钥。
  114. * @param ivParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  115. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|CBC|PKCS7、AES192|CBC|PKCS7、AES128|CBC|PKCS7)。
  116. * @returns
  117. */
  118. static encryptCBCSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  119. ivParams: cryptoFramework.IvParamsSpec, transformation: string = 'AES256|CBC|PKCS7'): cryptoFramework.DataBlob {
  120. return AES.encryptSync(data, symKey, ivParams, transformation);
  121. }
  122. /**
  123. * 解密(CBC模式),异步
  124. * @param data 加密或者解密的数据。data不能为null。
  125. * @param symKey 指定加密或解密的密钥。
  126. * @param ivParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  127. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|CBC|PKCS7、AES192|CBC|PKCS7、AES128|CBC|PKCS7)。
  128. * @returns
  129. */
  130. static async decryptCBC(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  131. ivParams: cryptoFramework.IvParamsSpec, transformation: string = 'AES256|CBC|PKCS7'): Promise<cryptoFramework.DataBlob> {
  132. return AES.decrypt(data, symKey, ivParams, transformation);
  133. }
  134. /**
  135. * 解密(CBC模式),同步
  136. * @param data 加密或者解密的数据。data不能为null。
  137. * @param symKey 指定加密或解密的密钥。
  138. * @param ivParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  139. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|CBC|PKCS7、AES192|CBC|PKCS7、AES128|CBC|PKCS7)。
  140. * @returns
  141. */
  142. static decryptCBCSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  143. ivParams: cryptoFramework.IvParamsSpec, transformation: string = 'AES256|CBC|PKCS7'): cryptoFramework.DataBlob {
  144. return AES.decryptSync(data, symKey, ivParams, transformation);
  145. }
  146. /**
  147. * 加密(ECB模式),异步
  148. * @param data 加密或者解密的数据。data不能为null。
  149. * @param symKey 指定加密或解密的密钥。
  150. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|ECB|PKCS7、AES192|ECB|PKCS7、AES128|ECB|PKCS7)。
  151. * @returns
  152. */
  153. static async encryptECB(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  154. transformation: string = 'AES256|ECB|PKCS7'): Promise<cryptoFramework.DataBlob> {
  155. return AES.encrypt(data, symKey, null, transformation);
  156. }
  157. /**
  158. * 加密(ECB模式),异步
  159. * @param data 加密或者解密的数据。data不能为null。
  160. * @param symKey 指定加密或解密的密钥。
  161. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|ECB|PKCS7、AES192|ECB|PKCS7、AES128|ECB|PKCS7)。
  162. * @returns
  163. */
  164. static encryptECBSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  165. transformation: string = 'AES256|ECB|PKCS7'): cryptoFramework.DataBlob {
  166. return AES.encryptSync(data, symKey, null, transformation);
  167. }
  168. /**
  169. * 解密(ECB模式),异步
  170. * @param data 加密或者解密的数据。data不能为null。
  171. * @param symKey 指定加密或解密的密钥。
  172. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|ECB|PKCS7、AES192|ECB|PKCS7、AES128|ECB|PKCS7)。
  173. * @returns
  174. */
  175. static async decryptECB(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  176. transformation: string = 'AES256|ECB|PKCS7'): Promise<cryptoFramework.DataBlob> {
  177. return AES.decrypt(data, symKey, null, transformation);
  178. }
  179. /**
  180. * 解密(ECB模式),异步
  181. * @param data 加密或者解密的数据。data不能为null。
  182. * @param symKey 指定加密或解密的密钥。
  183. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|ECB|PKCS7、AES192|ECB|PKCS7、AES128|ECB|PKCS7)。
  184. * @returns
  185. */
  186. static decryptECBSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  187. transformation: string = 'AES256|ECB|PKCS7'): cryptoFramework.DataBlob {
  188. return AES.decryptSync(data, symKey, null, transformation);
  189. }
  190. /**
  191. * 加密,异步
  192. * @param data 加密或者解密的数据。data不能为null。
  193. * @param symKey 指定加密或解密的密钥。
  194. * @param params 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  195. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。
  196. * @returns
  197. */
  198. static async encrypt(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  199. params: cryptoFramework.ParamsSpec | null, transformation: string): Promise<cryptoFramework.DataBlob> {
  200. return CryptoUtil.encrypt(data, symKey, params, transformation);
  201. }
  202. /**
  203. * 加密,同步
  204. * @param data 加密或者解密的数据。data不能为null。
  205. * @param symKey 指定加密或解密的密钥。
  206. * @param params 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  207. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。
  208. * @returns
  209. */
  210. static encryptSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  211. params: cryptoFramework.ParamsSpec | null, transformation: string): cryptoFramework.DataBlob {
  212. return CryptoUtil.encryptSync(data, symKey, params, transformation);
  213. }
  214. /**
  215. * 解密,异步
  216. * @param data 加密或者解密的数据。data不能为null。
  217. * @param symKey 指定加密或解密的密钥。
  218. * @param params 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  219. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。
  220. * @returns
  221. */
  222. static async decrypt(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  223. params: cryptoFramework.ParamsSpec | null, transformation: string): Promise<cryptoFramework.DataBlob> {
  224. return CryptoUtil.decrypt(data, symKey, params, transformation);
  225. }
  226. /**
  227. * 解密,同步
  228. * @param data 加密或者解密的数据。data不能为null。
  229. * @param symKey 指定加密或解密的密钥。
  230. * @param params 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  231. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。
  232. * @returns
  233. */
  234. static decryptSync(data: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  235. params: cryptoFramework.ParamsSpec | null, transformation: string): cryptoFramework.DataBlob {
  236. return CryptoUtil.decryptSync(data, symKey, params, transformation);
  237. }
  238. /**
  239. * 加密(GCM模式)分段,异步
  240. * @param dataBlob 加密或者解密的数据。dataBlob不能为null。
  241. * @param key 指定加密或解密的密钥。
  242. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  243. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES128|GCM|PKCS7、AES192|GCM|PKCS7、AES256|GCM|PKCS7、、等)。
  244. * @param len 自定义的数据拆分长度。
  245. * @returns
  246. */
  247. static async encryptGCMSegment(dataBlob: cryptoFramework.DataBlob, key: cryptoFramework.Key,
  248. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7',
  249. len: number = 128): Promise<cryptoFramework.DataBlob> {
  250. let cipher = cryptoFramework.createCipher(transformation);
  251. await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, gcmParams);
  252. let encryptData = new Uint8Array();
  253. for (let i = 0; i < dataBlob.data.length; i += len) {
  254. let updateData = dataBlob.data.subarray(i, i + len);
  255. let updateDataBlob: cryptoFramework.DataBlob = { data: updateData };
  256. let updateOutput = await cipher.update(updateDataBlob); //分段update
  257. let mergeTData = new Uint8Array(encryptData.length + updateOutput.data.length);
  258. mergeTData.set(encryptData);
  259. mergeTData.set(updateOutput.data, encryptData.length);
  260. encryptData = mergeTData;
  261. }
  262. gcmParams.authTag = await cipher.doFinal(null);
  263. let encryptBlob: cryptoFramework.DataBlob = { data: encryptData };
  264. return encryptBlob;
  265. }
  266. /**
  267. * 加密(GCM模式)分段,同步
  268. * @param dataBlob 加密或者解密的数据。dataBlob不能为null。
  269. * @param key 指定加密或解密的密钥。
  270. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  271. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES128|GCM|PKCS7、AES192|GCM|PKCS7、AES256|GCM|PKCS7、、等)。
  272. * @param len 自定义的数据拆分长度。
  273. * @returns
  274. */
  275. static encryptGCMSegmentSync(dataBlob: cryptoFramework.DataBlob, key: cryptoFramework.Key,
  276. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7',
  277. len: number = 128): cryptoFramework.DataBlob {
  278. let cipher = cryptoFramework.createCipher(transformation);
  279. cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, gcmParams);
  280. let encryptData = new Uint8Array();
  281. for (let i = 0; i < dataBlob.data.length; i += len) {
  282. let updateData = dataBlob.data.subarray(i, i + len);
  283. let updateDataBlob: cryptoFramework.DataBlob = { data: updateData };
  284. let updateOutput = cipher.updateSync(updateDataBlob); //分段update
  285. let mergeTData = new Uint8Array(encryptData.length + updateOutput.data.length);
  286. mergeTData.set(encryptData);
  287. mergeTData.set(updateOutput.data, encryptData.length);
  288. encryptData = mergeTData;
  289. }
  290. gcmParams.authTag = cipher.doFinalSync(null);
  291. let encryptBlob: cryptoFramework.DataBlob = { data: encryptData };
  292. return encryptBlob;
  293. }
  294. /**
  295. * 解密(GCM模式),异步
  296. * @param data 加密或者解密的数据。data不能为null。
  297. * @param symKey 指定加密或解密的密钥。
  298. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  299. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|GCM|PKCS7、AES192|GCM|PKCS7、AES128|GCM|PKCS7)。
  300. * @param len 自定义的数据拆分长度。
  301. * @returns
  302. */
  303. static async decryptGCMSegment(dataBlob: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  304. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7',
  305. len: number = 128): Promise<cryptoFramework.DataBlob> {
  306. let decoder = cryptoFramework.createCipher(transformation);
  307. await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams);
  308. let decryptData = new Uint8Array();
  309. for (let i = 0; i < dataBlob.data.length; i += len) {
  310. let updateData = dataBlob.data.subarray(i, i + len);
  311. let updateDataBlob: cryptoFramework.DataBlob = { data: updateData };
  312. let updateOutput = await decoder.update(updateDataBlob); //分段update
  313. //把update的结果拼接起来,得到明文
  314. let mergeData = new Uint8Array(decryptData.length + updateOutput.data.length);
  315. mergeData.set(decryptData);
  316. mergeData.set(updateOutput.data, decryptData.length);
  317. decryptData = mergeData;
  318. }
  319. await decoder.doFinal(null);
  320. let decryptBlob: cryptoFramework.DataBlob = { data: decryptData };
  321. return decryptBlob;
  322. }
  323. /**
  324. * 解密(GCM模式),异步
  325. * @param data 加密或者解密的数据。data不能为null。
  326. * @param symKey 指定加密或解密的密钥。
  327. * @param gcmParams 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
  328. * @param transformation 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合(AES256|GCM|PKCS7、AES192|GCM|PKCS7、AES128|GCM|PKCS7)。
  329. * @param len 自定义的数据拆分长度。
  330. * @returns
  331. */
  332. static decryptGCMSegmentSync(dataBlob: cryptoFramework.DataBlob, symKey: cryptoFramework.SymKey,
  333. gcmParams: cryptoFramework.GcmParamsSpec, transformation: string = 'AES256|GCM|PKCS7',
  334. len: number = 128): cryptoFramework.DataBlob {
  335. let decoder = cryptoFramework.createCipher(transformation);
  336. decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams);
  337. let decryptData = new Uint8Array();
  338. for (let i = 0; i < dataBlob.data.length; i += len) {
  339. let updateData = dataBlob.data.subarray(i, i + len);
  340. let updateDataBlob: cryptoFramework.DataBlob = { data: updateData };
  341. let updateOutput = decoder.updateSync(updateDataBlob); //分段update
  342. //把update的结果拼接起来,得到明文
  343. let mergeTData = new Uint8Array(decryptData.length + updateOutput.data.length);
  344. mergeTData.set(decryptData);
  345. mergeTData.set(updateOutput.data, decryptData.length);
  346. decryptData = mergeTData;
  347. }
  348. decoder.doFinalSync(null);
  349. let decryptBlob: cryptoFramework.DataBlob = { data: decryptData };
  350. return decryptBlob;
  351. }
  352. /**
  353. * 生成对称密钥SymKey,异步
  354. * @param symAlgName 待生成对称密钥生成器的算法名称(AES128、AES192、AES256)
  355. * @returns
  356. */
  357. static async generateSymKey(algName: string = 'AES256'): Promise<cryptoFramework.SymKey> {
  358. return CryptoUtil.generateSymKey(algName);
  359. }
  360. /**
  361. * 生成对称密钥SymKey,同步
  362. * @param symAlgName 待生成对称密钥生成器的算法名称(AES128、AES192、AES256)
  363. * @returns
  364. */
  365. static generateSymKeySync(algName: string = 'AES256'): cryptoFramework.SymKey {
  366. return CryptoUtil.generateSymKeySync(algName);
  367. }
  368. }