)
type PrivateKey struct {
- c *Curve
- mode Mode
- key *big.Int
+ C *Curve
+ Mode Mode
+ Key *big.Int
}
func NewPrivateKey(curve *Curve, mode Mode, raw []byte) (*PrivateKey, error) {
}
func (prv *PrivateKey) Raw() []byte {
- raw := pad(prv.key.Bytes(), int(prv.mode))
+ raw := pad(prv.Key.Bytes(), int(prv.Mode))
reverse(raw)
return raw
}
func (prv *PrivateKey) PublicKey() (*PublicKey, error) {
- x, y, err := prv.c.Exp(prv.key, prv.c.Bx, prv.c.By)
+ x, y, err := prv.C.Exp(prv.Key, prv.C.X, prv.C.Y)
if err != nil {
return nil, err
}
- return &PublicKey{prv.c, prv.mode, x, y}, nil
+ return &PublicKey{prv.C, prv.Mode, x, y}, nil
}
func (prv *PrivateKey) SignDigest(digest []byte, rand io.Reader) ([]byte, error) {
e := bytes2big(digest)
- e.Mod(e, prv.c.Q)
+ e.Mod(e, prv.C.Q)
if e.Cmp(zero) == 0 {
e = big.NewInt(1)
}
- kRaw := make([]byte, int(prv.mode))
+ kRaw := make([]byte, int(prv.Mode))
var err error
var k *big.Int
var r *big.Int
return nil, err
}
k = bytes2big(kRaw)
- k.Mod(k, prv.c.Q)
+ k.Mod(k, prv.C.Q)
if k.Cmp(zero) == 0 {
goto Retry
}
- r, _, err = prv.c.Exp(k, prv.c.Bx, prv.c.By)
+ r, _, err = prv.C.Exp(k, prv.C.X, prv.C.Y)
if err != nil {
return nil, err
}
- r.Mod(r, prv.c.Q)
+ r.Mod(r, prv.C.Q)
if r.Cmp(zero) == 0 {
goto Retry
}
- d.Mul(prv.key, r)
+ d.Mul(prv.Key, r)
k.Mul(k, e)
s.Add(d, k)
- s.Mod(s, prv.c.Q)
+ s.Mod(s, prv.C.Q)
if s.Cmp(zero) == 0 {
goto Retry
}
return append(
- pad(s.Bytes(), int(prv.mode)),
- pad(r.Bytes(), int(prv.mode))...,
+ pad(s.Bytes(), int(prv.Mode)),
+ pad(r.Bytes(), int(prv.Mode))...,
), nil
}