123456789101112131415161718192021222324252627282930313233343536373839 |
- package dhellman
- import (
- "math/big"
- "git.ali33.ru/fcg-xvii/curve/v2/tools"
- "git.ali33.ru/fcg-xvii/go-tools/json"
- )
- func randomCurveKeyPrivate(curve *tools.Curve) (priv *curveKeyPrivate, err error) {
- if err = curve.IsValidP(); err != nil {
- return
- }
- priv = &curveKeyPrivate{
- x: tools.Random(big.NewInt(1), tools.Sub64(curve.P(), 1)),
- }
- return
- }
- type curveKeyPrivate struct {
- x *big.Int
- }
- func (s *curveKeyPrivate) Map() json.Map {
- return json.Map{
- "x": s.x,
- }
- }
- func (s *curveKeyPrivate) MarshalJSON() ([]byte, error) {
- return s.Map().JSON(), nil
- }
- func (s *curveKeyPrivate) secret(pub *curveKeyPublic, curve *tools.Curve) (*tools.Point, error) {
- if err := curve.IsValidG(); err != nil {
- return nil, err
- }
- return pub.p.Mul(s.x)
- }
|