mirror of
https://github.com/albertobsd/keyhunt.git
synced 2025-03-18 05:41:50 +01:00
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
/*
|
|
* This file is part of the BSGS distribution (https://github.com/JeanLucPons/BSGS).
|
|
* Copyright (c) 2020 Jean Luc PONS.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, version 3.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "IntGroup.h"
|
|
|
|
using namespace std;
|
|
|
|
IntGroup::IntGroup(int size) {
|
|
this->size = size;
|
|
subp = (Int *)malloc(size * sizeof(Int));
|
|
}
|
|
|
|
IntGroup::~IntGroup() {
|
|
free(subp);
|
|
}
|
|
|
|
void IntGroup::Set(Int *pts) {
|
|
ints = pts;
|
|
}
|
|
|
|
// Compute modular inversion of the whole group
|
|
void IntGroup::ModInv() {
|
|
|
|
Int newValue;
|
|
Int inverse;
|
|
|
|
subp[0].Set(&ints[0]);
|
|
for (int i = 1; i < size; i++) {
|
|
subp[i].ModMulK1(&subp[i - 1], &ints[i]);
|
|
}
|
|
|
|
// Do the inversion
|
|
inverse.Set(&subp[size - 1]);
|
|
inverse.ModInv();
|
|
|
|
for (int i = size - 1; i > 0; i--) {
|
|
newValue.ModMulK1(&subp[i - 1], &inverse);
|
|
inverse.ModMulK1(&ints[i]);
|
|
ints[i].Set(&newValue);
|
|
}
|
|
|
|
ints[0].Set(&inverse);
|
|
|
|
} |