ecdh.go raw
1 package secp
2
3 import (
4 "fmt"
5 )
6
7 // ECDH computes an EC Diffie-Hellman shared secret
8 func (c *Context) ECDH(pubkey []byte, seckey []byte) (output []byte, err error) {
9 if ecdh == nil {
10 err = fmt.Errorf("ecdh module not available")
11 return
12 }
13
14 if len(pubkey) != PublicKeySize {
15 err = fmt.Errorf("public key must be %d bytes", PublicKeySize)
16 return
17 }
18
19 if len(seckey) != PrivateKeySize {
20 err = fmt.Errorf("private key must be %d bytes", PrivateKeySize)
21 return
22 }
23
24 output = make([]byte, SharedSecretSize)
25 ret := ecdh(c.ctx, &output[0], &pubkey[0], &seckey[0], 0, 0)
26 if ret != 1 {
27 err = fmt.Errorf("failed to compute ECDH")
28 return
29 }
30
31 return
32 }
33