From a83f507ed8a6032e1587e5cbf3277e1905439e06 Mon Sep 17 00:00:00 2001 From: ston1th Date: Sun, 12 Jul 2020 17:04:07 +0200 Subject: [PATCH] added dsa secret channel --- dsa.go | 36 ++++++++++++++++++++++++++++++++++++ go.mod | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 dsa.go diff --git a/dsa.go b/dsa.go new file mode 100644 index 0000000..e264b2e --- /dev/null +++ b/dsa.go @@ -0,0 +1,36 @@ +package main + +import ( + "bytes" + "crypto/dsa" + "crypto/rand" + "fmt" + "math/big" +) + +func extract(priv *dsa.PrivateKey, r, s *big.Int, hash []byte) string { + z := new(big.Int).SetBytes(hash) + h := new(big.Int).Mod(z, priv.Parameters.Q) + ns := new(big.Int).ModInverse(s, priv.Parameters.Q) + xr := new(big.Int).Mul(priv.X, r) + k := new(big.Int).Add(h, xr) + num := new(big.Int).Mul(ns, k) + msg := new(big.Int).Mod(num, priv.Parameters.Q) + return string(msg.Bytes()) +} + +func main() { + priv := new(dsa.PrivateKey) + err := dsa.GenerateParameters(&priv.Parameters, rand.Reader, dsa.L1024N160) + fmt.Println(err) + err = dsa.GenerateKey(priv, rand.Reader) + fmt.Println(err) + hash := []byte("hello") + msg := []byte("0000000000000000world") + buf := bytes.NewBuffer(msg) + r, s, err := dsa.Sign(buf, priv, hash) + fmt.Println(r, s, err) + fmt.Println(dsa.Verify(&priv.PublicKey, hash, r, s)) + msg1 := extract(priv, r, s, hash) + fmt.Println(msg1) +} diff --git a/go.mod b/go.mod index 6bd0de5..c413313 100644 --- a/go.mod +++ b/go.mod @@ -1 +1,3 @@ module main + +go 1.14