key_private.go 763 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package dhellman
  2. import (
  3. "math/big"
  4. "git.ali33.ru/fcg-xvii/curve/v2/tools"
  5. "git.ali33.ru/fcg-xvii/go-tools/json"
  6. )
  7. func randomCurveKeyPrivate(curve *tools.Curve) (priv *curveKeyPrivate, err error) {
  8. if err = curve.IsValidP(); err != nil {
  9. return
  10. }
  11. priv = &curveKeyPrivate{
  12. x: tools.Random(big.NewInt(1), tools.Sub64(curve.P(), 1)),
  13. }
  14. return
  15. }
  16. type curveKeyPrivate struct {
  17. x *big.Int
  18. }
  19. func (s *curveKeyPrivate) Map() json.Map {
  20. return json.Map{
  21. "x": s.x,
  22. }
  23. }
  24. func (s *curveKeyPrivate) MarshalJSON() ([]byte, error) {
  25. return s.Map().JSON(), nil
  26. }
  27. func (s *curveKeyPrivate) secret(pub *curveKeyPublic) (*tools.Point, error) {
  28. curve := pub.p.Curve()
  29. if err := curve.IsValidG(); err != nil {
  30. return nil, err
  31. }
  32. return pub.p.Mul(s.x)
  33. }