put data item into sotfhsm as data objects in different block size

news/2025/2/25 5:50:55
#!/bin/bash
# 该脚本用于向智能卡写入4096个数据对象,每个token最多容纳256个数据对象
# 当前token满载时,自动初始化新token

START_TIME=$(date +%s%3N)
# 模块路径,根据实际情况调整
MODULE_PATH="/home/ubuntu/Documents/HSM/20250106/SoftHSMv2_bgk/build/src/lib/libsofthsm2.so"
# 初始SO PIN和用户PIN,根据实际配置调整
SO_PIN="12345"
USER_PIN="1234"
# 数据对象前缀
DATA_PREFIX="DataObject_"
# 每个token的最大数据对象数量
MAX_OBJECTS_PER_TOKEN=64
# 总数据对象数量
TOTAL_OBJECTS=4096

# 定义文件路径和大小
FILE_NAME="/tmp/random_data.bin"
FILE_SIZE=512*1024

# 初始化第一个token
echo "初始化第一个token..."
./pkcs11-tool --module $MODULE_PATH --init-token --slot-index 0  --label "Token0" --so-pin $SO_PIN --init-pin --pin $USER_PIN

if [ $? -ne 0 ]; then
    echo "初始化第一个token失败。"
    exit 1
fi

target_slot_id=$(./pkcs11-tool --module $MODULE_PATH --list-slots | grep "Slot" | awk '{print $7}' |  awk 'NR==1')
echo "slot 0 : "
echo $target_slot_id

# 设置初始计数器
current_token=0
object_count=0

# 循环写入数据对象
while [ $object_count -lt $TOTAL_OBJECTS ]; do
    # 生成当前数据对象的唯一标识符
    obj_label="${DATA_PREFIX}${object_count}"
    echo "Data_${object_count}" > /tmp/data.bin
    dd if=/dev/urandom of=$FILE_NAME bs=1024 count=$(($FILE_SIZE / 1024)) 2> /dev/null

    echo "正在写入数据对象: ${obj_label}"

    # 使用pkcs11-tool写入数据对象
    ./pkcs11-tool --module $MODULE_PATH --slot $target_slot_id --login --pin $USER_PIN --write-object $FILE_NAME  --type data --label "${obj_label}"

    # 检查写入是否成功
    if [ $? -ne 0 ]; then
        echo "写入数据对象${obj_label}失败。"
        exit 1
    fi

    # 增加计数器
    object_count=$((object_count + 1))
    
    # 检查是否需要切换到新token
    if [ $((object_count % MAX_OBJECTS_PER_TOKEN)) -eq 0 ]; then
        current_token=$((current_token + 1))
        echo "当前token已满, 初始化新token${current_token}..."
        unset current_tokens
        unset new_tokens
        unset added_lines
        unset target_slot_id

        current_tokens=$(./pkcs11-tool --module $MODULE_PATH --list-slots | grep "Slot" | awk '{print $7}')
        # 初始化新token
        ./pkcs11-tool --module $MODULE_PATH --init-token --slot-index ${current_token}  --label "Token${current_token}" --so-pin $SO_PIN --init-pin --pin $USER_PIN
        # 检查初始化是否成功
        if [ $? -ne 0 ]; then
            echo "初始化新token失败。"
            exit 1
        fi
        new_tokens=$(./pkcs11-tool --module $MODULE_PATH --list-slots | grep "Slot" |  awk '{print $7}')

        while IFS= read -r line; do
            if ! echo "$current_tokens" | grep "^$line$" | grep -q .; then
                added_lines=$(echo -e "$added_lines\n$line")
            fi
        done <<< "$new_tokens"
        target_slot_id=$(echo "$added_lines" | awk 'NR==2')
    fi
done

echo "所有${TOTAL_OBJECTS}个数据对象已成功写入。"

END_TIME=$(date +%s%3N)
DIFF=$((END_TIME - START_TIME))
if [ $DIFF -lt 0 ]; then
    DIFF=$((START_TIME - END_TIME))
fi
echo "Execute Time: ${DIFF} ms"


http://www.niftyadmin.cn/n/5865050.html

相关文章

Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器

Fisher信息矩阵与自然梯度下降&#xff1a;机器学习中的优化利器 在机器学习尤其是深度学习中&#xff0c;优化模型参数是一个核心任务。我们通常依赖梯度下降&#xff08;Gradient Descent&#xff09;来调整参数&#xff0c;但普通的梯度下降有时会显得“笨拙”&#xff0c;…

轻量级SDK,大能量:EasyRTC重塑嵌入式设备音视频体验

在智能硬件与物联网迅猛发展的今天&#xff0c;嵌入式设备的音视频通讯能力正变得愈加关键。然而&#xff0c;受限于硬件资源&#xff0c;尤其是Flash存储空间的不足&#xff0c;传统的音视频通讯方案往往难以在嵌入式设备上实现高效集成。EasyRTC凭借其轻量级SDK和先进的技术架…

Spring Boot 多模块怎么统一管理

在 Spring Boot 中&#xff0c;多模块项目是一种常见的架构模式&#xff0c;尤其适用于构建大型、复杂的应用程序。将应用程序拆分成多个模块可以提高代码的可维护性、可重用性和团队协作效率。然而&#xff0c;多模块项目也带来了一些管理上的挑战&#xff0c;例如依赖版本管理…

uni-app 系统学习,从入门到实战(二)—— 项目结构解析

全篇大概 2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间 10min 一、UniApp 目录结构详解 UniApp 基于 Vue.js 开发&#xff0c;其目录结构遵循约定大于配置的原则&#xff0c;以下是一个标准项目的核心目录结构&#xff1a; pages # 页面目录&#xff08;核…

springboot集成jackson-dataformat-xml实现发送XML请求和XML响应参数处理

背景 最近在做发票相关的业务&#xff0c;需要对接第三方进行开发票等一系列操作&#xff0c;对方的系统是较老系统&#xff0c;需要采用XML的请求方式。 思路 一般来说&#xff0c;基于springboot的项目采用的都是JSON格式的请求参数和响应参数&#xff0c;因此需要做一个转…

基金基础知识

一、基金的本质与价值 定义&#xff1a; 基金是通过集合投资者资金&#xff0c;由专业管理人&#xff08;基金经理&#xff09;进行多元化投资&#xff08;如股票、债券等&#xff09;的金融工具&#xff0c;收益按持有份额分配。 核心优势&#xff1a; 分散风险&#xff1a;…

AI写代码工具赋能前端开发:高效学习与应用AI前端框架

近年来&#xff0c;人工智能技术飞速发展&#xff0c;深刻地改变着软件开发的模式。在前端开发领域&#xff0c;AI写代码工具的兴起更是掀起了一场革命&#xff0c;为开发者带来了前所未有的效率提升和全新的开发体验。掌握AI前端框架已不再是锦上添花&#xff0c;而是提升竞争…

《Effective Objective-C》阅读笔记(下)

目录 内存管理 理解引用计数 引用计数工作原理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵循的方法命名规则 变量的内存管理语义 ARC如何清理实例变量 在dealloc方法中只释放引用并解除监听 编写“异常安全代码”时留意内存管理问题 以弱引用避免保留环 …