第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在golang中簽署curve25519密鑰?

如何在golang中簽署curve25519密鑰?

Go
臨摹微笑 2022-06-13 15:33:59
我正在嘗試從 Signal in Go 中實(shí)現(xiàn) X3DH 算法。但是,我在如何簽署 Public Signed PreKey 上陷入了困境。根據(jù)規(guī)范,它應(yīng)該是 X25519 密鑰。在查看 Github 上的先前實(shí)現(xiàn)時(shí),他們[32]byte從curve25519包中生成了一個(gè)密鑰,然后將其轉(zhuǎn)換為一個(gè)ed25519密鑰,然后對(duì)其進(jìn)行簽名。但是,他們用于轉(zhuǎn)換的包已被棄用 ( github.com/agl/ed25519)。因此,我要么需要能夠?qū)⒚荑€轉(zhuǎn)換為,ed25519以便我可以使用當(dāng)前ed25519包 ( golang.org/x/crypto/25519) 對(duì)它們進(jìn)行簽名,要么實(shí)現(xiàn)curve25519密鑰的簽名和驗(yàn)證功能。
查看完整描述

2 回答

?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

Ed25519鍵可以X25519很容易地轉(zhuǎn)換為鍵,使用的扭曲愛德華茲曲線Ed25519和使用的蒙哥馬利曲線X25519是birationally等效的。


愛德華茲曲線上的點(diǎn)通常稱為 ( x, y),而蒙哥馬利曲線上的點(diǎn)通常稱為 ( u, v)。


您不需要庫(kù)來進(jìn)行轉(zhuǎn)換,它真的很簡(jiǎn)單......


(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)

(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))

這是Google 的 Golang 安全主管 Filippo Valsorda 撰寫的一篇很棒的博客,討論了這個(gè)話題。


查看完整回答
反對(duì) 回復(fù) 2022-06-13
?
飲歌長(zhǎng)嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

這需要一個(gè)公共的curve25519 密鑰并將其轉(zhuǎn)換為一個(gè)ed25519 的公共密鑰。我沒有編寫此代碼,但似乎正在做上面伍德斯托克所說的事情。歡迎提供更多信息:


func Verify(publicKey [32]byte, message []byte, signature *[64]byte) bool {


publicKey[31] &= 0x7F


/* Convert the Curve25519 public key into an Ed25519 public key.  In

particular, convert Curve25519's "montgomery" x-coordinate into an

Ed25519 "edwards" y-coordinate:

ed_y = (mont_x - 1) / (mont_x + 1)

NOTE: mont_x=-1 is converted to ed_y=0 since fe_invert is mod-exp

Then move the sign bit into the pubkey from the signature.

*/


var edY, one, montX, montXMinusOne, montXPlusOne FieldElement

FeFromBytes(&montX, &publicKey)

FeOne(&one)

FeSub(&montXMinusOne, &montX, &one)

FeAdd(&montXPlusOne, &montX, &one)

FeInvert(&montXPlusOne, &montXPlusOne)

FeMul(&edY, &montXMinusOne, &montXPlusOne)


var A_ed [32]byte

FeToBytes(&A_ed, &edY)


A_ed[31] |= signature[63] & 0x80

signature[63] &= 0x7F


var sig = make([]byte, 64)

var aed = make([]byte, 32)


copy(sig, signature[:])

copy(aed, A_ed[:])


return ed25519.Verify(aed, message, sig)

這使用“golang.org/x/crypto/ed25519/internal”中的函數(shù)


查看完整回答
反對(duì) 回復(fù) 2022-06-13
  • 2 回答
  • 0 關(guān)注
  • 319 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)