secp256r1 c语言程序,rust代码阅读 之 libsecp256k1 (1)

在密码学的运算中, 数字通常是非常大的. 以 ECDSA 椭圆曲线为例, 私钥是 256 位的.

所以在 libsecp256k1 这个库里, 定义了计算的元素 Field. 其中 n 为 320 位.

pub struct Field {

pub(crate) n: [u32; 10],

pub(crate) magnitude: u32,

pub(crate) normalized: bool,

}

为其实现加法运算符, 即 Add 和 AddAssign 特征:

impl AddAssign for Field {

fn add_assign(&mut self, other: &'a Field) {

self.n[0] += other.n[0];

self.n[1] += other.n[1];

self.n[2] += other.n[2];

self.n[3] += other.n[3];

self.n[4] += other.n[4];

self.n[5] += other.n[5];

self.n[6] += other.n[6];

self.n[7] += other.n[7];

self.n[8] += other.n[8];

self.n[9] += other.n[9];

self.magnitude += other.magnitude;

self.normalized = false;

debug_assert!(self.verify());

}

}

在 rust 里, 想要让某个 struct 可以进行某种运算, 例如加法, 只需要实现对应的 Trait 即可, 非常方便. 另外, 每种 Trait 的标识包括名称和类型签名. 一样的名称, 可以有不一样的类型签名.

小贴士: 这里 debug_assert! 宏是只在未开启优化的编译包中才有效.

Field 可以被压缩成 FieldStorage, 也就是我们常见的 256 位. 便于存储.

pub struct FieldStorage(pub [u32; 8]);

impl Into for Field {

fn into(self) -> FieldStorage {

debug_assert!(self.normalized);

let mut r = FieldStorage::default();

r.0[0] = self.n[0] | self.n[1] << 26;

...

r

}

}

小贴士: 定义 struct 的时候可以用上面这种方法直接以 tuple 作为项.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python位运算符_详细介绍Python语言中的按位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下&#xff1a; 按位与 ( bitwise and of x and y ) & 举例&#xff1a; 5&3 1 解释&#xff1a; 101 11 相同位仅为个位1 &#xff0c;故结果为 1 按位或 ( bitwise or of x and y ) | 举例&…

c语言代码测试电脑性能,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼易言版本……跑100000万成绩不如PHP。。。。.版本 2.程序集 程序集1.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行.局部变量 参数, 文本型, , "0".局部变量 to, 整数型.局部变量 fr, 整数型.局部变量 n,…

python find函数 和index的区别_使用带有find和index的map时Python2和Python3之间的区别...

给定一个模式和一个字符串str,找到str是否遵循相同的模式. 以下是完全匹配,使得在模式中的字母和str中的非空字之间存在双射. 例子&#xff1a; pattern “abba”,str “dog cat cat dog”应该返回true;狗是一只猫,猫是b,而这些词形成了abba模式. pattern “abba”,str “dog c…

c语言3368题目,电大《C语言程序设计课程》期末考试复习资料

0993C 评议程序设计A 第 1 页 共 31 页C 语言程序设计课程期末复习练习一、单选题 1&#xff0e;在每个C 语言程序中都必须包含有这样一个函数&#xff0c;该函数的函数名为( )。A. main 2&#xff0e;每个C 语言程序文件的编译错误分为( )类。B. 2 3. 字符串"ab12\n"…

【LeetCode】链表精选12题

目录 快慢指针&#xff1a; 1. 相交链表&#xff08;简单&#xff09; 2. 环形链表&#xff08;简单&#xff09; 3. 快乐数&#xff08;简单&#xff09; 4. 环形链表 II&#xff08;中等&#xff09; 5. 删除链表的倒数第 N 个节点&#xff08;中等&#xff09; 递归迭…

python类的属性和对象属性_python 类属性、对象属性-阿里云开发者社区

类的普通属性:  dir(Myclass), 返回一个key列表&#xff1b; Myclass.__dir__,返回一个字典&#xff1b; 1、类的数据属性&#xff1b; 2、类的方法&#xff1b; 类的特殊属性&#xff1a; 1、Myclass.__name__  类的名字 2、Myclass.__doc__   类的文档字符串 3、Mycla…

击鼓传花c语言编程题,c语言-第5章 循环程序设计.ppt

《c语言-第5章 循环程序设计.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《c语言-第5章 循环程序设计.ppt(83页珍藏版)》请在人人文库网上搜索。1、第5章 循环程序设计,管理学院 电子商务系,2,第5章 循环程序设计,5.1 概述 5.2 while和do while循环 5.3 for循环…

python快速检测视频跳过帧_python实现视频分帧效果

本文实例为大家分享了python实现视频分帧的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 import cv2 vidcap cv2.VideoCapture(005.avi) success,image vidcap.read() count 0 success True while success: success,image vidcap.read() cv2.imwrite("fr…

最大素数c语言,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include int* pt NULL; // primes_tableint pt_size 0; // primes_table 数量大小int init_primes_table(void){FILE* pFile;pFile fopen("primes_table.bin", "rb");if (pFile NULL) {fputs(&q…

python去重保留唯一一个值_Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)...

摘要 在进行数据分析时&#xff0c;我们经常需要对DataFrame去重&#xff0c;但有时候也会需要只保留重复值。 这里就简单的介绍一下对于DataFrame去重和取重复值的操作。 创建DataFrame 这里首先创建一个包含一行重复值的DataFrame。2.DataFrame去重&#xff0c;可以选择是否保…

自定义日历控android,Android 一个日历控件的实现小记

先看几张动态的效果图吧&#xff01;这里主要记录一下在编写日历控件过程中一些主要的点&#xff1a;一、主要功能1、支持农历、节气、常用节假日2、日期范围设置&#xff0c;默认支持的最大日期范围[1900.1~2049.12]3、禁用日期范围设置4、初始化选中单个或多个日期5、单选、多…

python先返回再处理_python xpath解析返回对象怎么处理

3 4 5 text 6 7 ... 8 ... 9 ......10 11 12 ...13 ...14 ......15 16 17 18

android文件读取工具类,Android 下读取Assets Properties操作封装工具类

Android 下读取Assets Properties操作封装工具类发布时间&#xff1a;2018-06-03作者&#xff1a;laosun阅读(2081)为了方便使用&#xff0c;首先创建BaseApplication类&#xff0c;如下所示&#xff1a;import android.app.Application;import android.content.Context;/*** C…

python粘性拓展_如何将tkinter小部件置于粘性框架中

在google中使用“如何使tkinter网格扩展”&#xff0c;我遇到了这个问题。 引用布莱恩奥克利的话Rows and columns have "weight" which describes how they grow or shrink to fill extra space >in the master. By default a row or column has a weight of zer…

android 固件 编辑器,RK3288编译 Android 5.1 固件

1 准备工作编译 Android 对机器的配置要求较高&#xff1a;64 位 CPU16GB 物理内存交换内存30GB 空闲的磁盘空间用于构建&#xff0c;源码树另外占用大约 25GBUbuntu 14.04 操作系统八核i7&#xff0c;编译完成需要一个半小时安装 JDK 7:sudo apt-get install openjdk-7-jdkUbu…

python解压到指定文件夹_在Python中压缩和解压文件

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。 如果你已经使用计算机一段时间&#xff0c;你可能遇到了.zip扩展名的文件。它们是可以保存许多其他文件&#xff0c;文件夹和子文件夹的压缩内容的特殊文件。这种类型的文件在使用互联网…

android bar布局,Android学习路线(十)如何将Action Bar叠放在你的布局上

默认状况下&#xff0c;action bar出如今activity窗口的顶部&#xff0c;略微减小了activity布局的总空间。若是你想隐藏或者显示action bar&#xff0c;在这堂用户体验的课程中&#xff0c;你能够经过调用htmlFigure 1. Gallerys action bar in overlay mode.android为了不在a…

geant4运行例子_Geant4--一次编译,运行多个Run,极大提升模拟效率

文|梁佐佐应唐光毅博士/后之约&#xff0c;对于Geant4模拟&#xff0c;我们看是否能解决这么一个问题&#xff1a;我现在想模拟探测器不同角度下的响应&#xff0c;每次模拟需要/run/beamOn 100&#xff0c; 可是我真的不想一遍一遍的去http://DetectorConstruction.cc中修改几…

python3.7基础教程_关于本教程 |《Python 官方文档:入门教程 3.7.0》| Python 技术论坛...

本文档最新版为 3.8&#xff0c;旧版本可能放弃维护&#xff0c;推荐阅读最新版&#xff01; Python 入门教程 Python 是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构&#xff0c;并能够用简单又有效的方式进行面向对象编程。Python 优雅的语法和动态类型&…

android listview countdowntimer,Android-ListView中的CountDownTimer随机闪烁

我正在使用计时器制作列表视图&#xff0c;每个计时器都有不同的截止日期&#xff0c;具体取决于数据库(类似于拍卖)Time now new Time();now.setToNow();now.normalize(true);nowMillis now.toMillis(true);..String endtime a.get(position).get(TAG_ENDTIME);Integer tim…