幼儿贫血吃什么补血最快| 明矾是什么东西| 室间隔缺损是什么意思| 梦见捡钱是什么预兆| 排暖期出血是什么原因| 自杀吃什么药| 马达是什么| 奇变偶不变是什么意思| 鬼斧神工是什么意思| 护照需要什么材料| 来姨妈吃什么水果好| 苯醚甲环唑防治什么病| 月经黑红色是什么原因| 高血压吃什么| 浪是什么意思| 手黄是什么原因| 手肘关节疼痛什么原因| 女性吃什么降低雄激素| 半熟芝士是什么意思| 锅包肉用什么淀粉| 山茱萸的功效与作用是什么| 上火喉咙痛吃什么药| 蛇遇猪就得哭什么意思| 白术是什么样子的图片| 面瘫吃什么药好得快| 狗吐黄水吃什么药| 鱼肚是什么| 百草枯什么味道| 子夜是指什么时间| 念珠菌用什么药最好| 什么是1型和2型糖尿病| sc是什么意思| 梦笔生花的意思是什么| 什么原因引起痛风| 阴阳是什么意思| 嬛嬛一袅楚宫腰什么意思| 寒疾现代叫什么病| 尿频是什么症状| 陈赫是什么星座的| 偶发室性早搏是什么意思| 2035年属什么生肖| 黄盖代表什么生肖| pt是什么单位| 谷氨酰转肽酶是指什么| 讳莫如深是什么意思| 什么东西泡脚减肥| 微博id是什么| 鲱鱼罐头那么臭为什么还有人吃| 西洋参什么人不能吃| 11月份生日是什么星座| 高压偏低是什么原因造成的| 黄芪喝多了有什么副作用| 什么是象声词| 苹果手机用的什么系统| 脑电图异常是什么病| 女人能日到什么时候| 巨蟹女喜欢什么样的男生| 张什么结什么| 发烧了吃什么食物好| 43是什么意思| 生孩子送什么| 苦瓜汤为什么要放黄豆| 白猫进家有什么预兆| 中耳炎吃什么药效果比较好| 马润什么意思| hib是什么疫苗| 做宫腔镜检查需要提前做什么准备| 萝卜炖什么好吃| 什么是牛蒡| 做妇科检查前需要注意什么| 绝望的绝是什么意思| 时迁的绰号是什么| 脚上真菌感染用什么药| 什么是筋膜| 伤口出水是什么原因| 人为什么会做梦科学解释| 小卡是什么| 来减一笔是什么字| 宝宝肠炎吃什么药| 中国什么时候打仗| 为什么都开头孢不开阿莫西林| 体毛多是什么原因| 幽门螺旋杆菌是什么病| 三联和四联有什么区别| 军校出来能干什么| 生命科学专业学什么| 子宫筛查主要检查什么| 4.2什么星座| 刘邦是汉什么帝| 吃茄子对身体有什么好处| 子宫占位是什么意思| 夜尿频多是什么原因| RH是什么| 土化是什么字| 火碱是什么| 进贡是什么意思| 甲亢看什么指标| 什么游戏赚钱| 八月十一号是什么星座| 什么的珊瑚| 万劫不复什么意思| 彩超跟b超有什么区别| 眼屎多吃什么药| 胰岛素高是什么意思| 一月二十五号是什么星座| 经典什么意思| 感冒咳嗽吃什么药| 2007年五行属什么| 西葫芦不能和什么一起吃| 什么是埋线双眼皮| 戒指戴左手中指是什么意思| 八月十三号是什么星座| essence是什么意思| 尿碘是检查什么的| 冬至为什么吃水饺| 转述句是什么意思| 上海青是什么菜| 高铁上不能带什么| 喝什么酒容易醉| 梦见河水是什么意思| 米诺地尔搽剂和米诺地尔酊有什么区别| 师兄是什么意思| 资本运作是什么意思| 什么是1型和2型糖尿病| 家里来猫是什么征兆| 头皮疼是什么原因引起的| 算命先生是什么生肖| 孕妇不吃饭对胎儿有什么影响| 用什么水和面烙饼最软| 什么是考生号| 哪吒是一个什么样的人| 刀伤用什么药愈合最快| 女攻男受是什么意思| 3.17是什么星座| 8月29日什么星座| 西夏国是现在什么地方| 缠头是什么意思| 6月5日是世界什么日| 血小板减少吃什么能补回来| 小三阳吃什么药| 肛门湿疹用什么药| 脱相是什么意思| 枸杞对女人有什么好处| 什么是物理| 丁字五行属什么| 今年33岁属什么生肖的| 三点水一个高念什么| 27岁属什么| 是什么结构| 补牙属于口腔什么科| 脂肪肝应注意什么| 女儿茶属于什么茶| 复原是什么意思| 跑龙套是什么意思| 男友力是什么意思| 吃什么降血脂和胆固醇| 饕餮什么意思| 大排畸主要检查什么| 青少年腰疼是什么原因引起的| 半夜会醒是什么原因| 喝碳酸饮料有什么危害| 尿微肌酐比值高是什么情况| 手指关节肿胀是什么原因| cns医学上是什么意思| 信誓旦旦是什么意思| 附耳是什么| 火麻仁是什么| sdh是什么意思| 漠漠什么意思| 龙什么鱼| 特步属于什么档次| 飞机联程票是什么意思| 治字五行属什么| 仲夏是什么意思| 天秤座后面是什么星座| 血氯高是什么原因| o型血的人是什么性格| 什么树木| 老人头晕吃什么药效果好| 9.9是什么星座| 痈肿疮疖是什么意思| 肩膀发麻是什么原因| 穆萨是什么意思| 脂溢性脱发用什么洗发水好| 六月19是什么日子| 为什么小腹总是胀痛| 离婚需要什么资料| po是什么的缩写| 聪明是什么意思| 不割包皮有什么影响| 癌前病变是什么意思| 二月七号是什么星座| 骨密度挂什么科| 20度穿什么衣服合适| 矿物质是什么| 仟字五行属什么| 6.1号是什么星座| 灰指甲用什么药效果好| 看望病人送什么东西| 讲解是什么意思| 什么瓜不能吃| 刺史是什么官职| 身体出汗多是什么原因| 乔治白属于什么档次| 有结石不能吃什么东西| sat是什么考试| 什么一边什么一边什么| 拍身份证穿什么颜色衣服| 生物冰袋里面是什么| 结膜水肿用什么眼药水| 老是低血糖是什么原因| 四大才子是什么生肖| gpr是什么意思| 老有眼屎是什么原因| 水瓶座和什么座最配对| 血竭是什么东西| 碟中谍是什么意思| 剥苔舌是什么原因| 裸辞是什么意思| 腋下属于什么科| 优五行属性是什么| 包饺子什么意思| eland是什么牌子| 政治家是什么意思| 食物链是什么意思| 洗脑是什么意思| 养老金什么时候可以领取| 相对而行是什么意思| 阴血亏虚吃什么中成药| 手球是什么运动| 吃黄体酮有什么副作用| 手掉皮是缺什么维生素| 一直打嗝吃什么药| 黄花梨树长什么样| 甲功五项是什么意思| 大s什么病| 为什么嘴巴老是干| 梦见买东西是什么意思| 属猴男和什么属相最配| 思源名字的寓意是什么| 一氧化碳是什么| 经常跑步对身体有什么好处| 穆斯林不吃什么| 一个不一个好念什么| 氨基酸态氮是什么| 梦见家里着火了是什么征兆| 吃什么会回奶| andy是什么意思| 车前草治什么病最好| 他将是你的新郎是什么歌| 痞块是什么意思| 胃疼想吐恶心是什么原因| opd是什么意思| 小三阳吃什么药能转阴| 水准仪是测量什么的| 滞后是什么意思| 爱被蚊子咬是什么体质| 向日葵是什么季节| 胃胀吃点什么药| 维生素C起什么作用| 什么道路| 南京立秋吃什么| 鸡眼膏为什么越贴越疼| 成什么上什么| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? 软件与操作系统 ? rtthread硬件加密-4RNG加密分析

共1条 1/1 1 跳转至

rtthread硬件加密-4RNG加密分析

高工
2025-08-04 23:42:22     打赏
百度 两只小猴都很健康。

      虽然写的是RNG加密,但个人认为他的真实叫法应该是硬件随机数生成。

源码分析

代码路径

components\drivers\hwcrypto\hw_rng.c
components\drivers\hwcrypto\hw_rng.h

数据结构

struct hwcrypto_rng_ops
{
    rt_uint32_t (*update)(struct hwcrypto_rng *ctx);    /**< 返回一个随机数 */
};

struct hwcrypto_rng
{
    struct rt_hwcrypto_ctx parent;          /**< 硬件加密框架设备 */
    const struct hwcrypto_rng_ops *ops;     /**< 初始化时需要提供的入口 */
};

获取RNG上下文

struct rt_hwcrypto_ctx *rt_hwcrypto_rng_create(struct rt_hwcrypto_device *device)
{
    struct rt_hwcrypto_ctx *ctx;

    ctx = rt_hwcrypto_ctx_create(device, HWCRYPTO_TYPE_RNG, sizeof(struct hwcrypto_rng));
    return ctx;
}

rt_err_t rt_hwcrypto_rng_default(struct rt_hwcrypto_device *device)
{
    struct rt_hwcrypto_ctx *tmp_ctx;

    /* 如果传入设备为空,则销毁设备,
       有些看不明白这操作,直接返回错误,让上层决定如何操作不更好嘛 */
    if (device == RT_NULL)
    {
        if (ctx_default)
        {
            rt_hwcrypto_rng_destroy(ctx_default);
            ctx_default = RT_NULL;
        }
        return RT_EOK;
    }
    /* 尝试获取默认的加密设备 */
    tmp_ctx = rt_hwcrypto_rng_create(device);
    if (tmp_ctx == RT_NULL)
    {
        return -RT_ERROR;
    }

    /* 销毁旧的上下文,并更新成新的上下文 */
    rt_hwcrypto_rng_destroy(ctx_default);
    ctx_default = tmp_ctx;

    return RT_EOK;
}

销毁RNG上下文

void rt_hwcrypto_rng_destroy(struct rt_hwcrypto_ctx *ctx)
{
    if (ctx == ctx_default)
    {
        ctx_default = RT_NULL;
    }
    rt_hwcrypto_ctx_destroy(ctx);
}

获取RNG值

rt_uint32_t rt_hwcrypto_rng_update_ctx(struct rt_hwcrypto_ctx *ctx)
{
    if (ctx)
    {
        return ((struct hwcrypto_rng *)ctx)->ops->update((struct hwcrypto_rng *)ctx);
    }
    return 0;
}

rt_uint32_t rt_hwcrypto_rng_update(void)
{
    // 没有则创建
    if (ctx_default == RT_NULL)
    {
        rt_hwcrypto_rng_default(rt_hwcrypto_dev_default());
    }
    // 获取值
    return rt_hwcrypto_rng_update_ctx(ctx_default);
}

总结

    从代码也可以看出来,这个部分,本质上就是硬件随机数生成,个人并不认为这属于加密设备,但既然这部分在RTT框架里也加到了硬件加密框架中,那就也总结一下驱动适配时的默认模板 。

#include <rtconfig.h>

#if defined(RT_USING_HWCRYPTO)
#include <rtdevice.h>
#include <rtdbg.h>
#include <board.h>

#if defined(BSP_USING_RNG)
rt_uint32_t rng_update(struct hwcrypto_rng *ctx)
{
    // TODO:rng生成实现
    return length;
}

static const struct hwcrypto_rng_ops rng_ops=
{
    .update = rng_update,
};
#endif

static rt_err_t hwcrypto_create(struct rt_hwcrypto_ctx *ctx)
{
    rt_err_t res = RT_EOK;

    switch (ctx->type & HWCRYPTO_MAIN_TYPE_MASK)
    {

#if defined(BSP_USING_RNG)
    case HWCRYPTO_TYPE_RNG:
    {
        ctx->contex = RT_NULL;
        //Setup rng operation
        ((struct hwcrypto_rng_ops *)ctx)->ops = &rng_ops;
        break;
    }
#endif /* BSP_USING_BIGNUM */
    default:
        res = -RT_ERROR;
        break;
    }

    return res;
}

static void hwcrypto_destroy(struct rt_hwcrypto_ctx *ctx)
{
    if (ctx->contex)
        rt_free(ctx->contex);
}

static rt_err_t hwcrypto_clone(struct rt_hwcrypto_ctx *des, const struct rt_hwcrypto_ctx *src)
{
    rt_err_t res = RT_EOK;

    if (des->contex && src->contex)
    {
        rt_memcpy(des->contex, src->contex, sizeof(struct rt_hwcrypto_ctx));
    }
    else
        return -RT_EINVAL;
    return res;
}

static void hwcrypto_reset(struct rt_hwcrypto_ctx *ctx)
{
    switch (ctx->type & HWCRYPTO_MAIN_TYPE_MASK)
    {
#if defined(BSP_USING_RNG)
    case HWCRYPTO_TYPE_RNG:
    {
        // TODO: rng reset
        break;
    }
#endif /* BSP_USING_RNG */

    default:
        res = -RT_ERROR;
        break;
    }
    return;
}

static const struct rt_hwcrypto_ops hwcrypto_ops =
{
    .create = hwcrypto_create,
    .destroy = hwcrypto_destroy,
    .copy = hwcrypto_clone,
    .reset = hwcrypto_reset,
};

int hwcrypto_device_init(void)
{
    static struct rt_hwcrypto_device hwcrypto_dev;

    hwcrypto_dev.ops = &hwcrypto_ops;
    hwcrypto_dev.id = 0;
    hwcrypto_dev.user_data = &hwcrypto_dev;

    // 硬件资源初始化

    // 注册加密设备
    if (rt_hwcrypto_register(&hwcrypto_dev, RT_HWCRYPTO_DEFAULT_NAME) != RT_EOK)
    {
        return -1;
    }

    return 0;
}
INIT_DEVICE_EXPORT(hwcrypto_device_init);
#endif //#if defined(RT_USING_HWCRYPTO)




关键词: rtthread     硬件     加密     RNG     hwcryp    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
总胆红素高是怎么回事有什么危害 老九门2什么时候上映 血钾查什么项目 甲亢什么不能吃 牛宝是什么
毕业送什么礼物好 补办医保卡去什么地方 怀孕两个月有什么症状 2004属什么 梦见蛇蛋是什么意思啊
微信密码是什么 夏季适合种什么花 束在什么情况下读su 叶公好龙讽刺了什么 切除扁桃体有什么好处和坏处
双子女喜欢什么样的男生 日斤读什么字 龟头上抹什么可以延时 农历4月14日是什么星座 奇门遁甲什么意思
4.2什么星座hcv7jop6ns5r.cn 海底有什么生物hcv7jop6ns8r.cn 插管是什么意思hcv9jop6ns4r.cn 一竖一点念什么hcv8jop4ns2r.cn 鼻烟为什么没人吸了hcv8jop4ns4r.cn
朝鲜冷面是什么面wuhaiwuya.com 开心果树长什么样hcv8jop0ns8r.cn 心电图异常q波是什么意思hcv8jop5ns3r.cn 共济失调是什么意思hcv9jop4ns8r.cn 解体是什么意思hcv7jop4ns5r.cn
儿童过敏性鼻炎吃什么药好qingzhougame.com 麻小是什么意思hcv9jop5ns6r.cn 广东属于什么地区0735v.com 啼笑皆非的意思是什么hcv8jop7ns4r.cn 雪村和赵英俊什么关系hcv8jop9ns9r.cn
物流是什么hcv8jop5ns5r.cn 脑疝是什么意思beikeqingting.com 一叶一菩提一花一世界什么意思jingluanji.com 蝉的鸣叫声像什么hcv8jop6ns9r.cn 小水滴会变成什么hcv8jop2ns1r.cn
百度