package main
import "fmt"
// Public constant
const (
g = 2 // 基数
p = 97 // devisor, 法, 割る数 (g < p で、素数であること)
)
func main() {
// Bob's secret key
x := 15
// Bob's public key (0 < i < p)
i := (g ^ x) % p
fmt.Println("Bob secret:", x)
fmt.Println("Bob public:", i)
// Alice's secret key
y := 10
// Alice's public key (0 < j < p)
j := (g ^ y) % p
fmt.Println("Alice secret:", y)
fmt.Println("Alice public:", j)
// Bob's shared secret calculation from Alice's public key
bobKey := (j ^ x) % p
fmt.Println("Bob shared secret:", bobKey)
// Alice's shared secret calculation from Bob's public key
aliceKey := (i ^ y) % p
fmt.Println("Alice shared secret:", aliceKey)
// Output:
// Bob secret: 15
// Bob public: 13
// Alice secret: 10
// Alice public: 8
// Bob shared secret: 7
// Alice shared secret: 7
}
- View online @ GoPlayground