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