[英]How do I add two curve25519 points
我在curve25519上有兩個點([32]字節)。 我如何添加它們(a + b)。 我顯然不能使用 big.Int 來做到這一點,因為它們不是數字而是曲線上的點。 到目前為止,我還沒有找到任何庫來做類似於我可以使用edwards25519做的事情:
a := [32]byte // I get that from another function
b := [32]byte // also from another function
pointA, _ := new(edwards25519.Point).SetBytes(a)
pointB, _ := new(edwards25519.Point).SetBytes(b)
pointC := pointA.Add(pointA, pointB)
fmt.Println(pointC.Bytes())
我已經嘗試使用它並使用&edwards25519.Point{}.BytesMontgomery()
將結果轉換為蒙哥馬利曲線,但我無法將a
和b
都導入 edwards25519 曲線,因為它們是曲線 25519 上的點。
您可以通過兩個步驟使用libsodium
來實現此目的。
從Edwards25519/Ed25519
密鑰開始,生成兩個公鑰/點,然后調用crypto_core_ed25519_add
(文檔)。
通過雙有理 map(文檔)使用crypto_sign_ed25519_pk_to_curve25519
將結果轉換為curve25519
。
Go
有綁定。 您需要小心,不要使用一些“隨機”庫,這些東西很難在恆定時間內正確且難以完成(避免側通道)。
RFC 7748將公式提供給 map (x, y) Ed25519 Edwards
指向(u, v) Curve25519 Montgomery
點,反之亦然。
雙有理圖是:
(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)
(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.