what-the-bank/sources/org/bouncycastle/pqc/math/linearalgebra/GF2nField.java

154 lines
6.1 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package org.bouncycastle.pqc.math.linearalgebra;
import java.security.SecureRandom;
/* loaded from: classes6.dex */
public abstract class GF2nField {
protected GF2Polynomial fieldPolynomial;
protected java.util.Vector fields;
protected int mDegree;
protected java.util.Vector matrices;
protected final SecureRandom random;
/* JADX INFO: Access modifiers changed from: protected */
public abstract void computeCOBMatrix(GF2nField gF2nField);
protected abstract void computeFieldPolynomial();
/* JADX INFO: Access modifiers changed from: protected */
public abstract GF2nElement getRandomRoot(GF2Polynomial gF2Polynomial);
/* JADX INFO: Access modifiers changed from: protected */
public final GF2Polynomial[] invertMatrix(GF2Polynomial[] gF2PolynomialArr) {
GF2Polynomial[] gF2PolynomialArr2 = new GF2Polynomial[gF2PolynomialArr.length];
GF2Polynomial[] gF2PolynomialArr3 = new GF2Polynomial[gF2PolynomialArr.length];
int i = 0;
for (int i2 = 0; i2 < this.mDegree; i2++) {
try {
gF2PolynomialArr2[i2] = new GF2Polynomial(gF2PolynomialArr[i2]);
GF2Polynomial gF2Polynomial = new GF2Polynomial(this.mDegree);
gF2PolynomialArr3[i2] = gF2Polynomial;
gF2Polynomial.setBit((this.mDegree - 1) - i2);
} catch (RuntimeException unused) {
}
}
while (true) {
int i3 = this.mDegree - 1;
if (i >= i3) {
while (i3 > 0) {
for (int i4 = i3 - 1; i4 >= 0; i4--) {
if (gF2PolynomialArr2[i4].testBit((this.mDegree - 1) - i3)) {
gF2PolynomialArr2[i4].addToThis(gF2PolynomialArr2[i3]);
gF2PolynomialArr3[i4].addToThis(gF2PolynomialArr3[i3]);
}
}
i3--;
}
return gF2PolynomialArr3;
}
int i5 = i;
while (true) {
int i6 = this.mDegree;
if (i5 >= i6 || gF2PolynomialArr2[i5].testBit((i6 - 1) - i)) {
break;
}
i5++;
}
if (i5 >= this.mDegree) {
throw new RuntimeException("GF2nField.invertMatrix: Matrix cannot be inverted!");
}
if (i != i5) {
GF2Polynomial gF2Polynomial2 = gF2PolynomialArr2[i];
gF2PolynomialArr2[i] = gF2PolynomialArr2[i5];
gF2PolynomialArr2[i5] = gF2Polynomial2;
GF2Polynomial gF2Polynomial3 = gF2PolynomialArr3[i];
gF2PolynomialArr3[i] = gF2PolynomialArr3[i5];
gF2PolynomialArr3[i5] = gF2Polynomial3;
}
int i7 = i + 1;
int i8 = i7;
while (true) {
int i9 = this.mDegree;
if (i8 < i9) {
if (gF2PolynomialArr2[i8].testBit((i9 - 1) - i)) {
gF2PolynomialArr2[i8].addToThis(gF2PolynomialArr2[i]);
gF2PolynomialArr3[i8].addToThis(gF2PolynomialArr3[i]);
}
i8++;
}
}
i = i7;
}
}
public int hashCode() {
return this.mDegree + this.fieldPolynomial.hashCode();
}
public final GF2Polynomial getFieldPolynomial() {
if (this.fieldPolynomial == null) {
computeFieldPolynomial();
}
return new GF2Polynomial(this.fieldPolynomial);
}
public final int getDegree() {
return this.mDegree;
}
public final boolean equals(Object obj) {
if (obj == null || !(obj instanceof GF2nField)) {
return false;
}
GF2nField gF2nField = (GF2nField) obj;
if (gF2nField.mDegree != this.mDegree || !this.fieldPolynomial.equals(gF2nField.fieldPolynomial)) {
return false;
}
if (!(this instanceof GF2nPolynomialField) || (gF2nField instanceof GF2nPolynomialField)) {
return !(this instanceof GF2nONBField) || (gF2nField instanceof GF2nONBField);
}
return false;
}
public final GF2nElement convert(GF2nElement gF2nElement, GF2nField gF2nField) throws RuntimeException {
if (gF2nField == this || this.fieldPolynomial.equals(gF2nField.fieldPolynomial)) {
return (GF2nElement) gF2nElement.clone();
}
if (this.mDegree != gF2nField.mDegree) {
throw new RuntimeException("GF2nField.convert: B1 has a different degree and thus cannot be coverted to!");
}
int indexOf = this.fields.indexOf(gF2nField);
if (indexOf == -1) {
computeCOBMatrix(gF2nField);
indexOf = this.fields.indexOf(gF2nField);
}
GF2Polynomial[] gF2PolynomialArr = (GF2Polynomial[]) this.matrices.elementAt(indexOf);
GF2nElement gF2nElement2 = (GF2nElement) gF2nElement.clone();
if (gF2nElement2 instanceof GF2nONBElement) {
((GF2nONBElement) gF2nElement2).reverseOrder();
}
GF2Polynomial gF2Polynomial = new GF2Polynomial(this.mDegree, gF2nElement2.toFlexiBigInt());
gF2Polynomial.expandN(this.mDegree);
GF2Polynomial gF2Polynomial2 = new GF2Polynomial(this.mDegree);
for (int i = 0; i < this.mDegree; i++) {
if (gF2Polynomial.vectorMult(gF2PolynomialArr[i])) {
gF2Polynomial2.setBit((this.mDegree - 1) - i);
}
}
if (gF2nField instanceof GF2nPolynomialField) {
return new GF2nPolynomialElement((GF2nPolynomialField) gF2nField, gF2Polynomial2);
}
if (!(gF2nField instanceof GF2nONBField)) {
throw new RuntimeException("GF2nField.convert: B1 must be an instance of GF2nPolynomialField or GF2nONBField!");
}
GF2nONBElement gF2nONBElement = new GF2nONBElement((GF2nONBField) gF2nField, gF2Polynomial2.toFlexiBigInt());
gF2nONBElement.reverseOrder();
return gF2nONBElement;
}
/* JADX INFO: Access modifiers changed from: protected */
public GF2nField(SecureRandom secureRandom) {
this.random = secureRandom;
}
}