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

4-write-mass-data-objects.sh

#!/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"

8-clean-mass_slots

#!/bin/bash

TOTAL_OBJECTS=17
slot_count=0
SLOT_PREFIX="Token"

while [ $slot_count -lt $TOTAL_OBJECTS ]; do
    slot_label="${SLOT_PREFIX}${slot_count}"
    echo "removing slots: ${slot_label}"
    softhsm2-util --delete-token --token $slot_label
    slot_count=$((slot_count + 1))
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值