curve_key_private.go 759 B

123456789101112131415161718192021222324252627282930313233343536373839
  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, curve *tools.Curve) (*tools.Point, error) {
  28. if err := curve.IsValidG(); err != nil {
  29. return nil, err
  30. }
  31. return pub.p.Mul(s.x)
  32. }