| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build amd64 || arm64 |
| |
| package elliptic |
| |
| import ( |
| "crypto/internal/nistec" |
| "math/big" |
| ) |
| |
| func (c p256Curve) Inverse(k *big.Int) *big.Int { |
| if k.Sign() < 0 { |
| // This should never happen. |
| k = new(big.Int).Neg(k) |
| } |
| if k.Cmp(c.params.N) >= 0 { |
| // This should never happen. |
| k = new(big.Int).Mod(k, c.params.N) |
| } |
| scalar := k.FillBytes(make([]byte, 32)) |
| inverse, err := nistec.P256OrdInverse(scalar) |
| if err != nil { |
| panic("crypto/elliptic: nistec rejected normalized scalar") |
| } |
| return new(big.Int).SetBytes(inverse) |
| } |