module mppcs_block_enc #( parameter DW = 32, /// max. data width parameter HW = 4, /// max. header width parameter ND = 16 /// max. data per block ) ( /// ingress data interface input logic block_start, /// block synchronization signal input logic [HW-1:0] header_in, /// block header input logic [DW-1:0] data_in, /// ingress data before header insertion input logic in_valid, /// ingress flow control output logic in_ready, /// ingress flow control /// egress data interface output logic [DW-1:0] data_out, /// egress data after header insertion output logic out_valid, /// egress flow control input logic out_ready, /// egress flow control /// control options input [$clog2(DW)-1:0] msb_data, /// number of data bits - 1 input [$clog2(HW)-1:0] msb_header, /// number of header bits - 1 input [$clog2(ND)-1:0] msb_num_data, /// number of data per block - 1 output logic sync_track, /// block synchronization tracking signal input logic sync_mode, /// 0: use block_start, 1: use sync_track input logic enable, /// 0: clock-gated, 1: mission mode input logic bypass, /// 1: data pass-through without header insertion /// clock & reset input clk, input rst );
时间: 2024-04-27 22:23:23 浏览: 131
这段代码中的参数 DW、HW 和 ND 分别代表数据的最大宽度、头部的最大宽度和每个块中数据的最大数量。模块包含 ingress 和 egress 数据接口,其中 ingress 数据接口包括了用于同步块的 block_start 信号、块头部的 header_in 信号、未插入头部的 ingress 数据 data_in 信号、ingress 控制信号 in_valid 和 in_ready。egress 数据接口包括了插入头部后的 egress 数据 data_out 信号、egress 控制信号 out_valid 和 out_ready。控制选项包括了数据位数 msb_data、头部位数 msb_header、每块数据的数量 msb_num_data 和同步跟踪信号 sync_track。同时,还包括了使能和绕过选项 enable 和 bypass,以及时钟和复位输入 clk 和 rst。
相关问题
try { //存储 SM4 算法的上下文信息 SM4_Context ctx = new SM4_Context(); ctx.isPadding = true;//是否需要填充 ctx.mode = SM4.SM4_ENCRYPT;//加密模式 //将传入的密钥 secretKey 转换为字节数组 keyBytes byte[] keyBytes; keyBytes = Util.hexStringToBytes(secretKey); SM4 sm4 = new SM4(); sm4.sm4_setkey_enc(ctx, keyBytes); byte[] encrypted = sm4.sm4_crypt_ecb(ctx, plainText.getBytes("UTF-8")); return Util.byteToHex(encrypted); }
这段代码使用 SM4 算法对传入的明文 `plainText` 进行 ECB 模式的加密,并返回加密后的密文的十六进制表示。具体来说,它首先创建了一个 SM4_Context 对象 `ctx`,并将 `isPadding` 设置为 `true`,表示需要进行填充,将 `mode` 设置为 `SM4_ENCRYPT`,表示加密模式。接着,它将传入的密钥 `secretKey` 转换为字节数组 `keyBytes`,并使用 `sm4_setkey_enc()` 方法将其设置为加密密钥。然后,它使用 `sm4_crypt_ecb()` 方法对明文进行加密,并将结果存储在 `encrypted` 数组中。最后,它使用 `byteToHex()` 方法将密文转换为十六进制字符串并返回。需要注意的是,在将明文转换为字节数组时使用了指定字符集 `"UTF-8"`,这可以保证不同平台或环境下的结果一致。
import { Sha256 } from '@aws-crypto/sha256-js' import CryptoJs from 'crypto-js' import encHex from 'crypto-js/enc-hex' onmessage = async function (event) { const data = event.data // 获取文件数据 // chunk方式读取文件 const chunkSize: number = 1024 * 1024 // 每次读取1MB const fileSize: number = data.size // 文件大小 let offset: number = 0 // 偏移量 const createSha256Uint8Array32 = new Sha256() // SHA256 Unit8Array(32) const createSha1 = CryptoJs.algo.SHA1.create() // SHA1 Hex const createSha256 = CryptoJs.algo.SHA256.create() // SHA256 Hex const createSha512 = CryptoJs.algo.SHA512.create() // SHA512 Hex const createMD5 = CryptoJs.algo.MD5.create() // MD5 while (offset < fileSize) { const chunk = new Uint8Array(await data.slice(offset, offset + chunkSize).arrayBuffer()) // 读取chunkSize大小的文件块 const wordArray = CryptoJs.lib.WordArray.create(chunk) createSha256Uint8Array32.update(chunk) createSha1.update(wordArray) createSha256.update(wordArray) createSha512.update(wordArray) createMD5.update(wordArray) offset += chunkSize // 计算进度 // const progress = Math.min(100, Math.round((offset / fileSize) * 100)) // 计算进度 // console.log(progress) // 打印进度 // postMessage({ progress, offset, fileSize }) // 将进度发送给主线程 } const [sha256Uint8Array32, sha1, sha256, sha512, md5] = await Promise.all([ createSha256Uint8Array32.digest(), // SHA256 Unit8Array(32) encHex.stringify(createSha1.finalize()), // SHA1 Hex encHex.stringify(createSha256.finalize()), // SHA256 Hex encHex.stringify(createSha512.finalize()), // SHA512 Hex encHex.stringify(createMD5.finalize()), // MD5 ]) const obj = { md5, // MD5 sha1, // SHA1 Hex sha256, // SHA256 Hex sha512, // SHA512 Hex sha256Int8Array32: Array.from(new Int8Array(sha256Uint8Array32)), // SHA256 Int8Array(32) } console.log(obj) // 打印结果对象 postMessage(obj) // 将结果对象发送给主线程 } 增加功能计算 sm3
需要在代码中增加计算 SM3 哈希值的功能,可以使用第三方库 jsrsasign 来实现。具体步骤如下:
1. 在代码头部导入 jsrsasign 库:
```javascript
import { Sha256 } from '@aws-crypto/sha256-js'
import CryptoJs from 'crypto-js'
import encHex from 'crypto-js/enc-hex'
import { SM3 } from 'jsrsasign'
```
2. 在 while 循环中计算 SM3 哈希值:
```javascript
const createSM3 = new SM3() // 创建 SM3 对象
createSM3.updateBinary(chunk) // 输入文件块
```
3. 在 Promise.all 中加入 SM3 哈希值的计算:
```javascript
const [sha256Uint8Array32, sha1, sha256, sha512, md5, sm3] = await Promise.all([
createSha256Uint8Array32.digest(), // SHA256 Unit8Array(32)
encHex.stringify(createSha1.finalize()), // SHA1 Hex
encHex.stringify(createSha256.finalize()), // SHA256 Hex
encHex.stringify(createSha512.finalize()), // SHA512 Hex
encHex.stringify(createMD5.finalize()), // MD5
createSM3.digest() // SM3
])
```
4. 将 SM3 哈希值加入结果对象:
```javascript
const obj = {
md5, // MD5
sha1, // SHA1 Hex
sha256, // SHA256 Hex
sha512, // SHA512 Hex
sha256Int8Array32: Array.from(new Int8Array(sha256Uint8Array32)), // SHA256 Int8Array(32)
sm3: Array.from(new Int8Array(sm3)) // SM3 Int8Array
}
```
完整代码如下:
阅读全文
相关推荐

















