MIRACL密码库分析报告3 mrio.c

2021SC@SDUSC

mrio1.c和mrio2.c主要实现库的输入输出。

int instr(_MIPD_ flash x,char *string)
{  /*  input a big number       *
    *  returns length in digits */
    int i,ipt,n,s,e,pads;
	BOOL first_after_pad;
    int ch,lc;
#ifdef MR_FLASH
    BOOL frac;
#endif
#ifdef MR_OS_THREADS
    miracl *mr_mip=get_mip();
#endif
    if (mr_mip->ERNUM) return 0;

    MR_IN(76)

    if (mr_mip->apbase==0 || mr_mip->apbase>256)
    {
        mr_berror(_MIPP_ MR_ERR_BASE_TOO_BIG);
        MR_OUT
        return 0;
    }

    if (!mr_mip->active)
    {
        mr_berror(_MIPP_ MR_ERR_NO_MIRSYS);
        MR_OUT
        return 0;
    }

该方法主要实现了输入一个大数之后返回其长度的功能。

#ifdef MR_FLASH
    done=FALSE;
    numer(_MIPP_ x,mr_mip->w6);
    if (mr_mip->RPOINT)
    { /* output with radix point */
        denom(_MIPP_ x,mr_mip->w5);
        if (size(mr_mip->w5)>1)
        { /* multiply up numerator to get full precision in *
           * the output. Remember position of radix point.  */
            nw=(int)(lx&MR_MSK);
            dw=(int)((lx>>MR_BTS)&MR_MSK);
            if (nw==0) nw++;
            check=mr_mip->check;
            mr_mip->check=OFF;
            if (nw>dw) mr_shift(_MIPP_ mr_mip->w5,nw-dw,mr_mip->w5);
            if (dw>nw) mr_shift(_MIPP_ mr_mip->w6,dw-nw,mr_mip->w6);
            nd=mr_mip->nib;
            if (mr_compare(mr_mip->w6,mr_mip->w5)>=0) nd--;
            copy(mr_mip->w6,mr_mip->w0);
            if (((int)mr_mip->w0->len+nd)>2*mr_mip->nib) nd=2*mr_mip->nib-(int)mr_mip->w0->len;
            mr_shift(_MIPP_ mr_mip->w0,nd,mr_mip->w0);
            divide(_MIPP_ mr_mip->w0,mr_mip->w5,mr_mip->w6);
            mr_mip->check=check;
            rp=mr_mip->pack*(nd+dw-nw);
        }
    }

实现了小数和分数的输入输出。

static void cbase(_MIPD_ big x,mr_small oldbase,big y)
{  /*  change radix of x from oldbase to base  */
    int i,s;
    mr_small n;
    BOOL done;
#ifdef MR_OS_THREADS
    miracl *mr_mip=get_mip();
#endif
    if (mr_mip->ERNUM) return;
    if (mr_mip->base==oldbase)
    {
        copy(x,y);
        return;
    }

    MR_IN(13)

    s=exsign(x);
#ifdef MR_FLASH
    numer(_MIPP_ x,mr_mip->w1);
    denom(_MIPP_ x,mr_mip->w2);
    done=FALSE;
#else
    copy(x,mr_mip->w1);
    done=TRUE;
#endif
    insign(PLUS,mr_mip->w1);

    forever
    {
        zero(mr_mip->w6);
        convert(_MIPP_ 1,mr_mip->w0);

        for (i=0;i<(int)mr_mip->w1->len;i++)  
        { /* this is a bit slow - but not time critical */


            mr_pmul(_MIPP_ mr_mip->w0,mr_mip->w1->w[i],mr_mip->w5);

            add(_MIPP_ mr_mip->w6,mr_mip->w5,mr_mip->w6);
            if (oldbase==0)
            { /* bit of a frig! */
                n=mr_shiftbits(1,MIRACL/2);
                mr_pmul(_MIPP_ mr_mip->w0,n,mr_mip->w0);
                mr_pmul(_MIPP_ mr_mip->w0,n,mr_mip->w0);
            }
            else mr_pmul(_MIPP_ mr_mip->w0,oldbase,mr_mip->w0);
        }
        if (mr_mip->ERNUM || done) break;
#ifdef MR_FLASH
        copy(mr_mip->w2,mr_mip->w1);
        copy(mr_mip->w6,mr_mip->w7);
        done=TRUE;

将x的基数从旧基数改为基数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MIRACL密码是一种用于STM32单片机的开源密码,它为开发人员提供了一套用于加密和解密操作的函数和算法。使用MIRACL密码开发人员可以轻松地在STM32单片机上实现各种密码学算法,例如对称加密算法、非对称加密算法和哈希函数等。 首先,MIRACL密码提供了一系列功能强大的对称加密算法,如AES(高级加密标准)、DES(数据加密标准)和RC4(Rivest Cipher 4)等。这些算法能够对数据进行高效的加密和解密操作,确保数据的机密性和完整性。 其次,MIRACL密码还支持非对称加密算法,如RSA(Rivest, Shamir, Adleman)、ECC(椭圆曲线加密)和DH(Diffie-Hellman)等。这些算法可以实现公钥和私钥的生成,以及加密和解密操作。非对称加密算法在数据传输过程中起到重要的作用,保护数据的安全性。 此外,MIRACL密码还包含了各种哈希函数,如SHA(安全散列算法)、MD5(消息摘要算法)和HMAC(带密钥的散列函数)等。哈希函数可以将任意长度的数据转换为固定长度的摘要,并提供一种数据一致性验证的方式,用于检测数据是否被篡改。 总之,MIRACL密码是一种功能强大、易用且高性能的密码,适用于STM32单片机。它提供了多种加密算法和哈希函数,能够保护数据的安全性和完整性,为开发人员提供了一种简洁高效的密码学解决方案。 ### 回答2: Miracl密码是一款适用于STM32微控制器的密码。STM32是STMicroelectronics公司推出的一系列32位ARM Cortex-M微控制器产品,广泛应用于嵌入式系统开发中。 Miracl密码提供了多种密码学算法的实现,包括对称加密算法(如AES、DES)、非对称加密算法(如RSA、ECC)、消息摘要算法(如SHA-1、SHA-256)以及随机数生成器等。它的设计目标是在有限的资源环境下提供高效的密码学运算能力。 对于STM32微控制器来说,资源有限是一个主要的挑战。Miracl密码针对STM32的特点进行了优化,采用了紧凑的数据结构和高效的算法实现,尽量减少内存占用和计算开销,以适应STM32的资源限制。 使用Miracl密码开发人员可以方便地在STM32上实现各种密码学功能。借助该提供的API接口,开发人员可以轻松地调用各种加密算法和摘要算法,实现数据的保护、身份验证、数字签名等功能。与使用原生的密码学算法相比,使用Miracl密码可以显著提高开发效率和系统性能。 总之,Miracl密码为STM32提供了一种高效、灵活的密码学解决方案。通过使用该开发人员可以在资源有限的嵌入式环境中实现安全可靠的密码学功能,保护系统的数据和通信安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值