init: v1.0.0

This commit is contained in:
yaole
2026-05-27 23:03:00 +08:00
commit 8d97f750eb
466 changed files with 80067 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
package main
import (
"crypto"
"crypto/sha256"
"fmt"
"os"
"runtime"
"strconv"
"sync"
"time"
"xdx.jelly/xgcl/rsa"
)
var wg sync.WaitGroup
func sign(sk *rsa.PrivateKey, digestData []byte, work, done chan struct{}) {
for {
select {
case <-work:
_, _ = rsa.PKCS1v15{}.Sign(sk, crypto.SHA256, digestData)
case <-done:
wg.Done()
return
}
}
}
func main() {
msg := []byte("message")
digestData := sha256.Sum256(msg)
sk, _, _ := rsa.PKCS1v15{}.GenerateKeyPairRSA(2048)
threads := runtime.NumCPU()
loops := 1000
work := make(chan struct{})
done := make(chan struct{})
if len(os.Args) >= 2 {
threads, _ = strconv.Atoi(os.Args[1])
}
if len(os.Args) >= 3 {
loops, _ = strconv.Atoi(os.Args[2])
}
for i := 0; i < threads; i++ {
wg.Add(1)
go sign(sk, digestData[:], work, done)
}
for i := 0; i < 1000; i++ {
// warm up
work <- struct{}{}
}
start := time.Now()
for i := 0; i < threads*loops; i++ {
work <- struct{}{}
}
close(done)
wg.Wait()
elapsed := time.Since(start)
cnt := threads * loops
fmt.Printf("Sign %d times on %d cores\n", threads*loops, threads)
fmt.Printf("Used time: %d ms, %d pcs/s\n", elapsed.Milliseconds(), int(float64(cnt)/float64(elapsed.Milliseconds())*1000))
}
+26
View File
@@ -0,0 +1,26 @@
package main_test
import (
"fmt"
"math/big"
"testing"
"time"
)
func TestPow(t *testing.T) {
n, _ := big.NewInt(1).SetString("151787717184422252307365020658866150659139813606887864663574443176328014948429913407344055128026662986925949147541666619511526142491196760869802510776788353419093645990851372578901256051814507665042918937343846064086867942964225457691185973174205523727877484153730596121423900155549117133518141928295347285789", 10)
m, _ := big.NewInt(1).SetString("15178771718442225230736502065886615065913981360688786466357444317632801494842991340734405512802666298692594914754166661951152614249119676086980251077678835341909364599085137257890125605181450766504291893734384606408686794296422545769118597317420552372787748415373059612142390015554911713351814192829534728578", 10)
d, _ := big.NewInt(1).SetString("141787717184422252307365020658866150659139813606887864663574443176328014948429913407344055128026662986925949147541666619511526142491196760869802510776788353419093645990851372578901256051814507665042918937343846064086867942964225457691185973174205523727877484153730596121423900155549117133518141928295347285789", 10)
c := big.NewInt(1)
cnt := 10000
start := time.Now()
for i := 0; i < cnt; i++ {
c.Exp(m, d, n)
}
elapsed := time.Since(start)
fmt.Printf("Sign %d times\n", cnt)
fmt.Printf("Used time: %d ms, %d pcs/s\n", elapsed.Milliseconds(), int(float64(cnt)/float64(elapsed.Seconds())))
}