change variable names for consistency
This commit is contained in:
parent
fffdf712e7
commit
b9fd3d903c
|
|
@ -40,10 +40,12 @@ func ceilSqrt(x *big.Int) *big.Int {
|
||||||
return z
|
return z
|
||||||
}
|
}
|
||||||
|
|
||||||
func babyStepGiantStep(n, g, x, order *big.Int) (*big.Int, error) {
|
// TODO: this can be extended to work with n, b not coprime
|
||||||
z := new(big.Int).GCD(nil, nil, g, n)
|
// https://cp-algorithms.com/algebra/discrete-log.html
|
||||||
|
func babyStepGiantStep(n, b, x, order *big.Int) (*big.Int, error) {
|
||||||
|
z := new(big.Int).GCD(nil, nil, b, n)
|
||||||
if z.Cmp(big.NewInt(1)) != 0 {
|
if z.Cmp(big.NewInt(1)) != 0 {
|
||||||
return nil, fmt.Errorf("base %v is not invertible modulo %v", g, n)
|
return nil, fmt.Errorf("base %v is not invertible modulo %v", b, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
var m *big.Int
|
var m *big.Int
|
||||||
|
|
@ -58,13 +60,13 @@ func babyStepGiantStep(n, g, x, order *big.Int) (*big.Int, error) {
|
||||||
|
|
||||||
table := make(map[string]*big.Int)
|
table := make(map[string]*big.Int)
|
||||||
for j := big.NewInt(1); j.Cmp(m) <= 0; j.Add(j, big.NewInt(1)) {
|
for j := big.NewInt(1); j.Cmp(m) <= 0; j.Add(j, big.NewInt(1)) {
|
||||||
a := new(big.Int).Exp(g, j, n)
|
a := new(big.Int).Exp(b, j, n)
|
||||||
table[a.String()] = new(big.Int).Set(j)
|
table[a.String()] = new(big.Int).Set(j)
|
||||||
}
|
}
|
||||||
|
|
||||||
// p = g^-m modulo n
|
// p = b^-m modulo n
|
||||||
p := new(big.Int).Neg(m)
|
p := new(big.Int).Neg(m)
|
||||||
p.Exp(g, p, n)
|
p.Exp(b, p, n)
|
||||||
|
|
||||||
gamma := new(big.Int).Set(x)
|
gamma := new(big.Int).Set(x)
|
||||||
|
|
||||||
|
|
@ -84,12 +86,12 @@ func babyStepGiantStep(n, g, x, order *big.Int) (*big.Int, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func discreteLog(cmd *cobra.Command, args []string) {
|
func discreteLog(cmd *cobra.Command, args []string) {
|
||||||
n, ok := new(big.Int).SetString(discreteLogModulus, 10)
|
m, ok := new(big.Int).SetString(discreteLogModulus, 10)
|
||||||
if !ok {
|
if !ok {
|
||||||
cobra.CheckErr("invalid modulus " + discreteLogModulus)
|
cobra.CheckErr("invalid modulus " + discreteLogModulus)
|
||||||
}
|
}
|
||||||
|
|
||||||
g, ok := new(big.Int).SetString(discreteLogBase, 10)
|
b, ok := new(big.Int).SetString(discreteLogBase, 10)
|
||||||
if !ok {
|
if !ok {
|
||||||
cobra.CheckErr("invalid base " + discreteLogBase)
|
cobra.CheckErr("invalid base " + discreteLogBase)
|
||||||
}
|
}
|
||||||
|
|
@ -107,7 +109,7 @@ func discreteLog(cmd *cobra.Command, args []string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
k, err := babyStepGiantStep(n, g, x, order)
|
k, err := babyStepGiantStep(m, b, x, order)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cobra.CheckErr(err)
|
cobra.CheckErr(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue