mirror of
https://github.com/billbuchanan/appliedcrypto.git
synced 2026-02-20 13:50:42 +00:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
"crypto/elliptic"
|
|
"crypto/rand"
|
|
"crypto/sha256"
|
|
|
|
"fmt"
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
fmt.Printf("--ECC Parameters--\n")
|
|
fmt.Printf(" Name: %s\n",elliptic.P256().Params().Name)
|
|
fmt.Printf(" N: %x\n",elliptic.P256().Params().N)
|
|
fmt.Printf(" P: %x\n",elliptic.P256().Params().P)
|
|
fmt.Printf(" Gx: %x\n",elliptic.P256().Params().Gx)
|
|
fmt.Printf(" Gy: %x\n",elliptic.P256().Params().Gy)
|
|
fmt.Printf(" Bitsize: %x\n\n",elliptic.P256().Params().BitSize)
|
|
|
|
priva, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
|
privb, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
|
|
|
puba := priva.PublicKey
|
|
pubb := privb.PublicKey
|
|
|
|
|
|
|
|
fmt.Printf("\nPrivate key (Alice) %x", priva.D)
|
|
fmt.Printf("\nPrivate key (Bob) %x\n", privb.D)
|
|
|
|
fmt.Printf("\nPublic key (Alice) (%x,%x)", puba.X,puba.Y)
|
|
fmt.Printf("\nPublic key (Bob) (%x %x)\n", pubb.X,pubb.Y)
|
|
|
|
a, _ := puba.Curve.ScalarMult(puba.X, puba.Y, privb.D.Bytes())
|
|
b, _ := pubb.Curve.ScalarMult(pubb.X, pubb.Y, priva.D.Bytes())
|
|
|
|
shared1 := sha256.Sum256(a.Bytes())
|
|
shared2 := sha256.Sum256(b.Bytes())
|
|
|
|
|
|
fmt.Printf("\nShared key (Alice) %x\n", shared1)
|
|
fmt.Printf("\nShared key (Bob) %x\n", shared2)
|
|
|
|
}
|
|
|