Skip to content
This repository was archived by the owner on Nov 7, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions crypto/paillier/paillier.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ type (
PublicKey
Lambda *big.Int // lcm(p-1, q-1)
Phi *big.Int // (p-1) * (q-1)
P *big.Int
Q *big.Int
}
)

Expand Down Expand Up @@ -64,7 +62,7 @@ func NewKeyPair(concurrency ...int) (*PrivateKey, *PublicKey, error) {
lambda := new(big.Int).Div(phi, gcd)

publicKey := &PublicKey{N: n}
privateKey := &PrivateKey{PublicKey: *publicKey, Lambda: lambda, Phi: phi, P: p, Q: q}
privateKey := &PrivateKey{PublicKey: *publicKey, Lambda: lambda, Phi: phi}
return privateKey, publicKey, nil
}

Expand Down
4 changes: 2 additions & 2 deletions crypto/zkp/aff_g_proof_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ func TestAffGProof(t *testing.T) {
// -----------------------GeneratePreParams-------------------------------
fmt.Println("----------------------- TestAffGProof ---------------------------------")
pesersen, _ := pedersen.NewPedersenParameters(8)
const bits = 512
// const bits = 1024
// const bits = 512
const bits = 1024

concurrency := 4
var values = make(chan *big.Int, concurrency)
Expand Down
16 changes: 4 additions & 12 deletions tss/ecdsa/keygen/keygen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@ import (

"github.com/okx/threshold-lib/crypto/curves"
"github.com/okx/threshold-lib/crypto/paillier"
"github.com/okx/threshold-lib/crypto/pedersen"
"github.com/okx/threshold-lib/tss"
"github.com/okx/threshold-lib/tss/key/bip32"
"github.com/okx/threshold-lib/tss/key/dkg"
)

const (
pedParamsStr = "{\"S\":13817395213773423665748976106069887563215400031989903034408049429189159623246888881612592317674727022888953512054385819429092977115403239906258157202244097241485415363298451415160695747089414269924804324563172126254731208935288395176853289248153163224344837947195551794352714372170241862006229745350720206100529568569903326706522465071953160407559249327843406829943397877417499624472421566341035438108378118335635756026876702727809585543003644182652106484868612447592410485489825417344886519578261106535281338786314136945870688227272056742451068061150072357667594255200825455371193294242284424803170897668949426555425,\"T\":12646452867496863933920518693245448076945324934065007179150675937842809462143388041137327217366863480604024164454053181476261134056508042173677396619091621046697295845899271429173694327241538528083559862042799634332752900457929032597135516603322969801330022552710943053979389903574351073197184678971851077867038477328389498837083801534992728001111781813986801825092859612842444546665472308805440478879962403831545378204083199782379489048179968109465785715883325834618148037339660146296886384179431949544922529706581349706257973164686615951349082129935811005980537931685280584875211268792796177935510214118753649879253,\"Ntilde\":31203981932332851330684971902204167683279436670222650769704368232932597705714815213178259489761831567249732027535018308556325009159384987976366013997949424098969119874421206142006896077007148702247620090092698015141805616903301830015820714685345412225561073461417430194324516227295135698439299870481751523667676431358649281499087889608995507141224753283985619068058187485838992611877407102364133884863015657088284949501806199503611081229593950592540379747602331347045247394118938229140216860250432071881042897379699134249065339561622661666095475238856269226548968314840715169536541404692806522202600968606674667098881}"
preParamsStr = "{\"NTildei\":24471520908795186059871345359891817090375082425235011162673163562293216820664510789828605476260176115517411842055396836257208343639030995277175322263758084624457414755788632175712521955658505919013279743494979368113272203677789463548602565981118301653800716121189384752156994925287997166225339564621441206438778955740393180221057367383300037154792187952963218391388563468946645409334612971210896085905056280930519856946112538908255424632924121317632150416586598586793214306932742138260070923446615537142905564533718729288946652140359207920360574975200706166078989291834969251532287540567858173716968846357015270138349,\"H1i\":20525427855544097812900242461323906064694844566721127908596308189362139634932796351990338037155331859755165166468225804820912268858944197770981804143947455994501442981149428098822310447470928457374682794682110850354710456200518000366554808847135225010507970105885978332438055746828580641608638198174105260354736906195605319753574667723013578689012516753815219539851516961366236404521980593518182365012603240654581994925529765101249024754689309931635963810794661571475581905272286571260842205785767159676205901368018463391470835581427837444426656612683690455228541028875229228051625995552836658561731443995968771287788,\"H2i\":14561886462801513025229647032463855918071292086106088637653093122443632316900764053418831163999153989988643257167279826735804838683222492162945450354760976026539895948631486301719383942423900097939116970423123551167467739873293443276733568908835651175478613657226786889798591766941448274568403953774018961350069278513251708000024532723935518612136374339804631761356041438752219980855367614912814730211618900394962484968025879140621313034875912024520604802101951780131868299628079385785798916363779339123951610598183476830672767548597981792629985786029649395570390192737424564998427393536184577476205531938017713907537,\"Alpha\":15562395633401930119640319530685053105534487592669191131770549017020512836227813395433398013401899672808149896260415156005395650961577495248684112199870239290842042560405884222603358515341370868923091465869971181089036403932954215982530133253275808649915955629978395955053483946662714544209903814385313430160541625128661561277888916430771363680920637690494652922130604979659273437231654682379800477479474793339467647687163077730878952413184314085561763375724610716711310748898159971608300807004602791622905928075714005483877645756072135214117404734704436395780584072358660771347598146098721453405712285848600410929912,\"Beta\":2395165474635562375328345168197470419270712853015774984255058066914332835031654638443038211809208885507287294824752534870350008496826826350516586118916243850537128710018544377070657961787021005710261809699685606781195081429046500235631252686233860824641938201591401143177392380699803128257310699979970380819582013645704325217394895352558949906568690971372208643798583918394057857288004538171668501365327120899644543818081629047710813539155106955681360755489819630513934947888711688521552671506732141320287584388268958167835966566882566177748042701818683114194170779163415799948893004383756208873564628601506303306733,\"P\":78946358809465488657785646401276462719477605320468420301685497279392498318081224458347091460869018078980790500414678741720386595780837578599171293477368521302224467006469988809257162522761685335900641074366451195515153523873921985410903393962006195879192213513994867756111011843999943944429711391222186861091,\"Q\":77494140571626675280459642381974308521056398681316094978062801680359479201622037388948094745850542427491783310684134503735540058334580018731497272439023435198860202702815565075741003080812047756218005315134111060182393701088010552028153733171070602610292439056776957470549025846108495103549355647541809857301}"
)

Expand Down Expand Up @@ -54,23 +52,17 @@ func TestKeyGen(t *testing.T) {
fmt.Println("preParams Unmarshal error, ", err)
}

ped := &pedersen.PedersenParameters{}
err = json.Unmarshal([]byte(pedParamsStr), ped)
if err != nil {
fmt.Println("pedersen parameters Unmarshal error, ", err)
}

// 1-->2 1--->3
paiPriKey, _, _ := paillier.NewKeyPair(8)
p1Data, _ := P1(p1SaveData.ShareI, paiPriKey, setUp1.DeviceNumber, setUp2.DeviceNumber, preParams, ped)
p1Data, _ := P1(p1SaveData.ShareI, paiPriKey, setUp1.DeviceNumber, setUp2.DeviceNumber, preParams)
fmt.Println("p1Data", p1Data)
publicKey, _ := curves.NewECPoint(curve, p2SaveData.PublicKey.X, p2SaveData.PublicKey.Y)
p2Data, _ := P2(p2SaveData.ShareI, publicKey, p1Data, setUp1.DeviceNumber, setUp2.DeviceNumber, ped)
p2Data, _ := P2(p2SaveData.ShareI, publicKey, p1Data, setUp1.DeviceNumber, setUp2.DeviceNumber)
fmt.Println("p2Data", p2Data)

p1Data, _ = P1(p1SaveData.ShareI, paiPriKey, setUp1.DeviceNumber, setUp3.DeviceNumber, preParams, ped)
p1Data, _ = P1(p1SaveData.ShareI, paiPriKey, setUp1.DeviceNumber, setUp3.DeviceNumber, preParams)
fmt.Println("p1Data", p1Data)
p2Data, _ = P2(p3SaveData.ShareI, publicKey, p1Data, setUp1.DeviceNumber, setUp3.DeviceNumber, ped)
p2Data, _ = P2(p3SaveData.ShareI, publicKey, p1Data, setUp1.DeviceNumber, setUp3.DeviceNumber)
fmt.Println("p2Data", p2Data)

fmt.Println("=========bip32==========")
Expand Down
41 changes: 15 additions & 26 deletions tss/ecdsa/keygen/party1.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"github.com/okx/threshold-lib/crypto"
"github.com/okx/threshold-lib/crypto/curves"
"github.com/okx/threshold-lib/crypto/paillier"
"github.com/okx/threshold-lib/crypto/pedersen"
"github.com/okx/threshold-lib/crypto/schnorr"
"github.com/okx/threshold-lib/crypto/vss"
"github.com/okx/threshold-lib/crypto/zkp"
Expand Down Expand Up @@ -74,18 +73,16 @@ type P1Data struct {
PaiPubKey *paillier.PublicKey // paillier public key
X1 *curves.ECPoint

NIZKProof []string
DlnProof1 *zkp.DlnProof
DlnProof2 *zkp.DlnProof
PDLwSlackProof *zkp.PDLwSlackProof
StatementParams *zkp.StatementParams
PaillierBlumProof *zkp.PaillierBlumProof
NSFProof *zkp.NoSmallFactorProof
NIZKProof []string
DlnProof1 *zkp.DlnProof
DlnProof2 *zkp.DlnProof
PDLwSlackProof *zkp.PDLwSlackProof
StatementParams *zkp.StatementParams
}

// P1 after dkg, prepare for 2-party signature, P1 send encrypt x1 to P2
// paillier key pair generation is time-consuming, generated in advance, encrypted storage?
func P1(share1 *big.Int, paiPriKey *paillier.PrivateKey, from, to int, preParams *PreParams, ped *pedersen.PedersenParameters) (*tss.Message, error) {
func P1(share1 *big.Int, paiPriKey *paillier.PrivateKey, from, to int, preParams *PreParams) (*tss.Message, error) {
// lagrangian interpolation x1
x1 := vss.CalLagrangian(curve, big.NewInt(int64(from)), share1, []*big.Int{big.NewInt(int64(from)), big.NewInt(int64(to))})
paiPubKey := &paiPriKey.PublicKey
Expand Down Expand Up @@ -139,24 +136,16 @@ func P1(share1 *big.Int, paiPriKey *paillier.PrivateKey, from, to int, preParams
return nil, fmt.Errorf("PDLwSlack proof fail")
}

// PaillierBlumProof
paillierBlumPf := zkp.PaillierBlumProve(paiPubKey.N, paiPriKey.P, paiPriKey.Q)

// No Small Factor Proof
nsfProof := zkp.NoSmallFactorProve(paiPubKey.N, paiPriKey.P, paiPriKey.Q, ped)

p1Data := P1Data{
E_x1: E_x1,
Proof: proof,
PaiPubKey: paiPubKey,
X1: X1,
NIZKProof: nizkProof,
DlnProof1: dlnProof1,
DlnProof2: dlnProof2,
PDLwSlackProof: pdlWSlackPf,
StatementParams: statementParams,
PaillierBlumProof: paillierBlumPf,
NSFProof: nsfProof,
E_x1: E_x1,
Proof: proof,
PaiPubKey: paiPubKey,
X1: X1,
NIZKProof: nizkProof,
DlnProof1: dlnProof1,
DlnProof2: dlnProof2,
PDLwSlackProof: pdlWSlackPf,
StatementParams: statementParams,
}
bytes, err := json.Marshal(p1Data)
if err != nil {
Expand Down
15 changes: 1 addition & 14 deletions tss/ecdsa/keygen/party2.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/okx/threshold-lib/crypto/curves"
"github.com/okx/threshold-lib/crypto/paillier"
"github.com/okx/threshold-lib/crypto/pedersen"
"github.com/okx/threshold-lib/crypto/schnorr"
"github.com/okx/threshold-lib/crypto/vss"
"github.com/okx/threshold-lib/crypto/zkp"
Expand All @@ -23,7 +22,7 @@ type P2SaveData struct {
}

// P2 after dkg, prepare for 2-party signature, P2 receives encrypt x1 and paillier public key from P1
func P2(share2 *big.Int, publicKey *curves.ECPoint, msg *tss.Message, from, to int, ped *pedersen.PedersenParameters) (*P2SaveData, error) {
func P2(share2 *big.Int, publicKey *curves.ECPoint, msg *tss.Message, from, to int) (*P2SaveData, error) {
if msg.From != from || msg.To != to {
return nil, fmt.Errorf("message mismatch")
}
Expand Down Expand Up @@ -82,18 +81,6 @@ func P2(share2 *big.Int, publicKey *curves.ECPoint, msg *tss.Message, from, to i
return nil, fmt.Errorf("PDLwSlackVerify fail")
}

// paillier blum verify
paillierBlumVerify := zkp.PaillierBlumVerify(p1Data.PaiPubKey.N, p1Data.PaillierBlumProof)
if !paillierBlumVerify {
return nil, fmt.Errorf("PaillierBlumVerify fail")
}

// no small factor verify
nsfVerify := zkp.NoSmallFactorVerify(p1Data.PaiPubKey.N, p1Data.NSFProof, ped)
if !nsfVerify {
return nil, fmt.Errorf("NoSmallFactorVerify fail")
}

// P2 additional save key information
p2SaveData := &P2SaveData{
From: from,
Expand Down
4 changes: 2 additions & 2 deletions tss/ecdsa/sign/sign_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ func TestEcdsaSign(t *testing.T) {
}

paiPrivate, _, _ := paillier.NewKeyPair(8)
p1Dto, _ := keygen.P1(p1Data.ShareI, paiPrivate, p1Data.Id, p2Data.Id, preParams, ped)
p1Dto, _ := keygen.P1(p1Data.ShareI, paiPrivate, p1Data.Id, p2Data.Id, preParams)
publicKey, _ := curves.NewECPoint(curve, p2Data.PublicKey.X, p2Data.PublicKey.Y)
p2SaveData, err := keygen.P2(p2Data.ShareI, publicKey, p1Dto, p1Data.Id, p2Data.Id, ped)
p2SaveData, err := keygen.P2(p2Data.ShareI, publicKey, p1Dto, p1Data.Id, p2Data.Id)
fmt.Println(p2SaveData, err)

fmt.Println("=========bip32==========")
Expand Down