(random io.Reader)
| 628 | } |
| 629 | |
| 630 | func GenerateKey(random io.Reader) (*PrivateKey, error) { |
| 631 | c := P256Sm2() |
| 632 | if random == nil { |
| 633 | random = rand.Reader //If there is no external trusted random source,please use rand.Reader to instead of it. |
| 634 | } |
| 635 | params := c.Params() |
| 636 | b := make([]byte, params.BitSize/8+8) |
| 637 | _, err := io.ReadFull(random, b) |
| 638 | if err != nil { |
| 639 | return nil, err |
| 640 | } |
| 641 | |
| 642 | k := new(big.Int).SetBytes(b) |
| 643 | n := new(big.Int).Sub(params.N, two) |
| 644 | k.Mod(k, n) |
| 645 | k.Add(k, one) |
| 646 | priv := new(PrivateKey) |
| 647 | priv.PublicKey.Curve = c |
| 648 | priv.D = k |
| 649 | priv.PublicKey.X, priv.PublicKey.Y = c.ScalarBaseMult(k.Bytes()) |
| 650 | |
| 651 | return priv, nil |
| 652 | } |
| 653 | |
| 654 | type zr struct { |
| 655 | io.Reader |
searching dependent graphs…