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.pswp.cn/news/529123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529123.shtml
英文地址,請注明出處:http://en.pswp.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…