Initial commit
This commit is contained in:
115
sources/com/google/zxing/common/reedsolomon/GenericGF.java
Normal file
115
sources/com/google/zxing/common/reedsolomon/GenericGF.java
Normal file
@@ -0,0 +1,115 @@
|
||||
package com.google.zxing.common.reedsolomon;
|
||||
|
||||
import com.ijm.dataencryption.de.DataDecryptTool;
|
||||
import com.ubt.jimu.base.util.FileUtil;
|
||||
import com.ubt.jimu.diy.model.DiyPreviewStep;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class GenericGF {
|
||||
public static final GenericGF h = new GenericGF(4201, FileUtil.ZIP_BUFFER_SIZE, 1);
|
||||
public static final GenericGF i = new GenericGF(1033, DataDecryptTool.DECRYPT_SP_FILE, 1);
|
||||
public static final GenericGF j = new GenericGF(67, 64, 1);
|
||||
public static final GenericGF k = new GenericGF(19, 16, 1);
|
||||
public static final GenericGF l = new GenericGF(285, DataDecryptTool.DECRYPT_ALL_FILE, 0);
|
||||
public static final GenericGF m;
|
||||
public static final GenericGF n;
|
||||
public static final GenericGF o;
|
||||
private final int[] a;
|
||||
private final int[] b;
|
||||
private final GenericGFPoly c;
|
||||
private final GenericGFPoly d;
|
||||
private final int e;
|
||||
private final int f;
|
||||
private final int g;
|
||||
|
||||
static {
|
||||
GenericGF genericGF = new GenericGF(DiyPreviewStep.TYPE_PROGRAM, DataDecryptTool.DECRYPT_ALL_FILE, 1);
|
||||
m = genericGF;
|
||||
n = genericGF;
|
||||
o = j;
|
||||
}
|
||||
|
||||
public GenericGF(int i2, int i3, int i4) {
|
||||
this.f = i2;
|
||||
this.e = i3;
|
||||
this.g = i4;
|
||||
this.a = new int[i3];
|
||||
this.b = new int[i3];
|
||||
int i5 = 1;
|
||||
for (int i6 = 0; i6 < i3; i6++) {
|
||||
this.a[i6] = i5;
|
||||
i5 <<= 1;
|
||||
if (i5 >= i3) {
|
||||
i5 = (i5 ^ i2) & (i3 - 1);
|
||||
}
|
||||
}
|
||||
for (int i7 = 0; i7 < i3 - 1; i7++) {
|
||||
this.b[this.a[i7]] = i7;
|
||||
}
|
||||
this.c = new GenericGFPoly(this, new int[]{0});
|
||||
this.d = new GenericGFPoly(this, new int[]{1});
|
||||
}
|
||||
|
||||
static int c(int i2, int i3) {
|
||||
return i2 ^ i3;
|
||||
}
|
||||
|
||||
GenericGFPoly a(int i2, int i3) {
|
||||
if (i2 < 0) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
if (i3 == 0) {
|
||||
return this.c;
|
||||
}
|
||||
int[] iArr = new int[i2 + 1];
|
||||
iArr[0] = i3;
|
||||
return new GenericGFPoly(this, iArr);
|
||||
}
|
||||
|
||||
GenericGFPoly b() {
|
||||
return this.d;
|
||||
}
|
||||
|
||||
int c(int i2) {
|
||||
if (i2 != 0) {
|
||||
return this.b[i2];
|
||||
}
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
GenericGFPoly d() {
|
||||
return this.c;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "GF(0x" + Integer.toHexString(this.f) + ',' + this.e + ')';
|
||||
}
|
||||
|
||||
int b(int i2) {
|
||||
if (i2 != 0) {
|
||||
return this.a[(this.e - this.b[i2]) - 1];
|
||||
}
|
||||
throw new ArithmeticException();
|
||||
}
|
||||
|
||||
public int c() {
|
||||
return this.e;
|
||||
}
|
||||
|
||||
int b(int i2, int i3) {
|
||||
if (i2 == 0 || i3 == 0) {
|
||||
return 0;
|
||||
}
|
||||
int[] iArr = this.a;
|
||||
int[] iArr2 = this.b;
|
||||
return iArr[(iArr2[i2] + iArr2[i3]) % (this.e - 1)];
|
||||
}
|
||||
|
||||
int a(int i2) {
|
||||
return this.a[i2];
|
||||
}
|
||||
|
||||
public int a() {
|
||||
return this.g;
|
||||
}
|
||||
}
|
199
sources/com/google/zxing/common/reedsolomon/GenericGFPoly.java
Normal file
199
sources/com/google/zxing/common/reedsolomon/GenericGFPoly.java
Normal file
@@ -0,0 +1,199 @@
|
||||
package com.google.zxing.common.reedsolomon;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
final class GenericGFPoly {
|
||||
private final GenericGF a;
|
||||
private final int[] b;
|
||||
|
||||
GenericGFPoly(GenericGF genericGF, int[] iArr) {
|
||||
if (iArr.length == 0) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
this.a = genericGF;
|
||||
int length = iArr.length;
|
||||
if (length <= 1 || iArr[0] != 0) {
|
||||
this.b = iArr;
|
||||
return;
|
||||
}
|
||||
int i = 1;
|
||||
while (i < length && iArr[i] == 0) {
|
||||
i++;
|
||||
}
|
||||
if (i == length) {
|
||||
this.b = new int[]{0};
|
||||
return;
|
||||
}
|
||||
this.b = new int[length - i];
|
||||
int[] iArr2 = this.b;
|
||||
System.arraycopy(iArr, i, iArr2, 0, iArr2.length);
|
||||
}
|
||||
|
||||
int[] a() {
|
||||
return this.b;
|
||||
}
|
||||
|
||||
int b() {
|
||||
return this.b.length - 1;
|
||||
}
|
||||
|
||||
boolean c() {
|
||||
return this.b[0] == 0;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder(b() * 8);
|
||||
for (int b = b(); b >= 0; b--) {
|
||||
int b2 = b(b);
|
||||
if (b2 != 0) {
|
||||
if (b2 < 0) {
|
||||
sb.append(" - ");
|
||||
b2 = -b2;
|
||||
} else if (sb.length() > 0) {
|
||||
sb.append(" + ");
|
||||
}
|
||||
if (b == 0 || b2 != 1) {
|
||||
int c = this.a.c(b2);
|
||||
if (c == 0) {
|
||||
sb.append('1');
|
||||
} else if (c == 1) {
|
||||
sb.append('a');
|
||||
} else {
|
||||
sb.append("a^");
|
||||
sb.append(c);
|
||||
}
|
||||
}
|
||||
if (b != 0) {
|
||||
if (b == 1) {
|
||||
sb.append('x');
|
||||
} else {
|
||||
sb.append("x^");
|
||||
sb.append(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
int a(int i) {
|
||||
if (i == 0) {
|
||||
return b(0);
|
||||
}
|
||||
if (i == 1) {
|
||||
int i2 = 0;
|
||||
for (int i3 : this.b) {
|
||||
i2 = GenericGF.c(i2, i3);
|
||||
}
|
||||
return i2;
|
||||
}
|
||||
int[] iArr = this.b;
|
||||
int i4 = iArr[0];
|
||||
int length = iArr.length;
|
||||
for (int i5 = 1; i5 < length; i5++) {
|
||||
i4 = GenericGF.c(this.a.b(i, i4), this.b[i5]);
|
||||
}
|
||||
return i4;
|
||||
}
|
||||
|
||||
int b(int i) {
|
||||
return this.b[(r0.length - 1) - i];
|
||||
}
|
||||
|
||||
GenericGFPoly c(GenericGFPoly genericGFPoly) {
|
||||
if (!this.a.equals(genericGFPoly.a)) {
|
||||
throw new IllegalArgumentException("GenericGFPolys do not have same GenericGF field");
|
||||
}
|
||||
if (c() || genericGFPoly.c()) {
|
||||
return this.a.d();
|
||||
}
|
||||
int[] iArr = this.b;
|
||||
int length = iArr.length;
|
||||
int[] iArr2 = genericGFPoly.b;
|
||||
int length2 = iArr2.length;
|
||||
int[] iArr3 = new int[(length + length2) - 1];
|
||||
for (int i = 0; i < length; i++) {
|
||||
int i2 = iArr[i];
|
||||
for (int i3 = 0; i3 < length2; i3++) {
|
||||
int i4 = i + i3;
|
||||
iArr3[i4] = GenericGF.c(iArr3[i4], this.a.b(i2, iArr2[i3]));
|
||||
}
|
||||
}
|
||||
return new GenericGFPoly(this.a, iArr3);
|
||||
}
|
||||
|
||||
GenericGFPoly[] b(GenericGFPoly genericGFPoly) {
|
||||
if (this.a.equals(genericGFPoly.a)) {
|
||||
if (!genericGFPoly.c()) {
|
||||
GenericGFPoly d = this.a.d();
|
||||
int b = this.a.b(genericGFPoly.b(genericGFPoly.b()));
|
||||
GenericGFPoly genericGFPoly2 = d;
|
||||
GenericGFPoly genericGFPoly3 = this;
|
||||
while (genericGFPoly3.b() >= genericGFPoly.b() && !genericGFPoly3.c()) {
|
||||
int b2 = genericGFPoly3.b() - genericGFPoly.b();
|
||||
int b3 = this.a.b(genericGFPoly3.b(genericGFPoly3.b()), b);
|
||||
GenericGFPoly a = genericGFPoly.a(b2, b3);
|
||||
genericGFPoly2 = genericGFPoly2.a(this.a.a(b2, b3));
|
||||
genericGFPoly3 = genericGFPoly3.a(a);
|
||||
}
|
||||
return new GenericGFPoly[]{genericGFPoly2, genericGFPoly3};
|
||||
}
|
||||
throw new IllegalArgumentException("Divide by 0");
|
||||
}
|
||||
throw new IllegalArgumentException("GenericGFPolys do not have same GenericGF field");
|
||||
}
|
||||
|
||||
GenericGFPoly a(GenericGFPoly genericGFPoly) {
|
||||
if (this.a.equals(genericGFPoly.a)) {
|
||||
if (c()) {
|
||||
return genericGFPoly;
|
||||
}
|
||||
if (genericGFPoly.c()) {
|
||||
return this;
|
||||
}
|
||||
int[] iArr = this.b;
|
||||
int[] iArr2 = genericGFPoly.b;
|
||||
if (iArr.length > iArr2.length) {
|
||||
iArr = iArr2;
|
||||
iArr2 = iArr;
|
||||
}
|
||||
int[] iArr3 = new int[iArr2.length];
|
||||
int length = iArr2.length - iArr.length;
|
||||
System.arraycopy(iArr2, 0, iArr3, 0, length);
|
||||
for (int i = length; i < iArr2.length; i++) {
|
||||
iArr3[i] = GenericGF.c(iArr[i - length], iArr2[i]);
|
||||
}
|
||||
return new GenericGFPoly(this.a, iArr3);
|
||||
}
|
||||
throw new IllegalArgumentException("GenericGFPolys do not have same GenericGF field");
|
||||
}
|
||||
|
||||
GenericGFPoly c(int i) {
|
||||
if (i == 0) {
|
||||
return this.a.d();
|
||||
}
|
||||
if (i == 1) {
|
||||
return this;
|
||||
}
|
||||
int length = this.b.length;
|
||||
int[] iArr = new int[length];
|
||||
for (int i2 = 0; i2 < length; i2++) {
|
||||
iArr[i2] = this.a.b(this.b[i2], i);
|
||||
}
|
||||
return new GenericGFPoly(this.a, iArr);
|
||||
}
|
||||
|
||||
GenericGFPoly a(int i, int i2) {
|
||||
if (i < 0) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
if (i2 == 0) {
|
||||
return this.a.d();
|
||||
}
|
||||
int length = this.b.length;
|
||||
int[] iArr = new int[i + length];
|
||||
for (int i3 = 0; i3 < length; i3++) {
|
||||
iArr[i3] = this.a.b(this.b[i3], i2);
|
||||
}
|
||||
return new GenericGFPoly(this.a, iArr);
|
||||
}
|
||||
}
|
@@ -0,0 +1,118 @@
|
||||
package com.google.zxing.common.reedsolomon;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class ReedSolomonDecoder {
|
||||
private final GenericGF a;
|
||||
|
||||
public ReedSolomonDecoder(GenericGF genericGF) {
|
||||
this.a = genericGF;
|
||||
}
|
||||
|
||||
public void a(int[] iArr, int i) throws ReedSolomonException {
|
||||
GenericGFPoly genericGFPoly = new GenericGFPoly(this.a, iArr);
|
||||
int[] iArr2 = new int[i];
|
||||
boolean z = true;
|
||||
for (int i2 = 0; i2 < i; i2++) {
|
||||
GenericGF genericGF = this.a;
|
||||
int a = genericGFPoly.a(genericGF.a(genericGF.a() + i2));
|
||||
iArr2[(i - 1) - i2] = a;
|
||||
if (a != 0) {
|
||||
z = false;
|
||||
}
|
||||
}
|
||||
if (z) {
|
||||
return;
|
||||
}
|
||||
GenericGFPoly[] a2 = a(this.a.a(i, 1), new GenericGFPoly(this.a, iArr2), i);
|
||||
GenericGFPoly genericGFPoly2 = a2[0];
|
||||
GenericGFPoly genericGFPoly3 = a2[1];
|
||||
int[] a3 = a(genericGFPoly2);
|
||||
int[] a4 = a(genericGFPoly3, a3);
|
||||
for (int i3 = 0; i3 < a3.length; i3++) {
|
||||
int length = (iArr.length - 1) - this.a.c(a3[i3]);
|
||||
if (length < 0) {
|
||||
throw new ReedSolomonException("Bad error location");
|
||||
}
|
||||
iArr[length] = GenericGF.c(iArr[length], a4[i3]);
|
||||
}
|
||||
}
|
||||
|
||||
private GenericGFPoly[] a(GenericGFPoly genericGFPoly, GenericGFPoly genericGFPoly2, int i) throws ReedSolomonException {
|
||||
if (genericGFPoly.b() < genericGFPoly2.b()) {
|
||||
genericGFPoly2 = genericGFPoly;
|
||||
genericGFPoly = genericGFPoly2;
|
||||
}
|
||||
GenericGFPoly d = this.a.d();
|
||||
GenericGFPoly b = this.a.b();
|
||||
do {
|
||||
GenericGFPoly genericGFPoly3 = genericGFPoly2;
|
||||
genericGFPoly2 = genericGFPoly;
|
||||
genericGFPoly = genericGFPoly3;
|
||||
GenericGFPoly genericGFPoly4 = b;
|
||||
GenericGFPoly genericGFPoly5 = d;
|
||||
d = genericGFPoly4;
|
||||
if (genericGFPoly.b() >= i / 2) {
|
||||
if (!genericGFPoly.c()) {
|
||||
GenericGFPoly d2 = this.a.d();
|
||||
int b2 = this.a.b(genericGFPoly.b(genericGFPoly.b()));
|
||||
while (genericGFPoly2.b() >= genericGFPoly.b() && !genericGFPoly2.c()) {
|
||||
int b3 = genericGFPoly2.b() - genericGFPoly.b();
|
||||
int b4 = this.a.b(genericGFPoly2.b(genericGFPoly2.b()), b2);
|
||||
d2 = d2.a(this.a.a(b3, b4));
|
||||
genericGFPoly2 = genericGFPoly2.a(genericGFPoly.a(b3, b4));
|
||||
}
|
||||
b = d2.c(d).a(genericGFPoly5);
|
||||
} else {
|
||||
throw new ReedSolomonException("r_{i-1} was zero");
|
||||
}
|
||||
} else {
|
||||
int b5 = d.b(0);
|
||||
if (b5 != 0) {
|
||||
int b6 = this.a.b(b5);
|
||||
return new GenericGFPoly[]{d.c(b6), genericGFPoly.c(b6)};
|
||||
}
|
||||
throw new ReedSolomonException("sigmaTilde(0) was zero");
|
||||
}
|
||||
} while (genericGFPoly2.b() < genericGFPoly.b());
|
||||
throw new IllegalStateException("Division algorithm failed to reduce polynomial?");
|
||||
}
|
||||
|
||||
private int[] a(GenericGFPoly genericGFPoly) throws ReedSolomonException {
|
||||
int b = genericGFPoly.b();
|
||||
int i = 0;
|
||||
if (b == 1) {
|
||||
return new int[]{genericGFPoly.b(1)};
|
||||
}
|
||||
int[] iArr = new int[b];
|
||||
for (int i2 = 1; i2 < this.a.c() && i < b; i2++) {
|
||||
if (genericGFPoly.a(i2) == 0) {
|
||||
iArr[i] = this.a.b(i2);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (i == b) {
|
||||
return iArr;
|
||||
}
|
||||
throw new ReedSolomonException("Error locator degree does not match number of roots");
|
||||
}
|
||||
|
||||
private int[] a(GenericGFPoly genericGFPoly, int[] iArr) {
|
||||
int length = iArr.length;
|
||||
int[] iArr2 = new int[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
int b = this.a.b(iArr[i]);
|
||||
int i2 = 1;
|
||||
for (int i3 = 0; i3 < length; i3++) {
|
||||
if (i != i3) {
|
||||
int b2 = this.a.b(iArr[i3], b);
|
||||
i2 = this.a.b(i2, (b2 & 1) == 0 ? b2 | 1 : b2 & (-2));
|
||||
}
|
||||
}
|
||||
iArr2[i] = this.a.b(genericGFPoly.a(b), this.a.b(i2));
|
||||
if (this.a.a() != 0) {
|
||||
iArr2[i] = this.a.b(iArr2[i], b);
|
||||
}
|
||||
}
|
||||
return iArr2;
|
||||
}
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
package com.google.zxing.common.reedsolomon;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class ReedSolomonEncoder {
|
||||
private final GenericGF a;
|
||||
private final List<GenericGFPoly> b = new ArrayList();
|
||||
|
||||
public ReedSolomonEncoder(GenericGF genericGF) {
|
||||
this.a = genericGF;
|
||||
this.b.add(new GenericGFPoly(genericGF, new int[]{1}));
|
||||
}
|
||||
|
||||
private GenericGFPoly a(int i) {
|
||||
if (i >= this.b.size()) {
|
||||
List<GenericGFPoly> list = this.b;
|
||||
GenericGFPoly genericGFPoly = list.get(list.size() - 1);
|
||||
for (int size = this.b.size(); size <= i; size++) {
|
||||
GenericGF genericGF = this.a;
|
||||
genericGFPoly = genericGFPoly.c(new GenericGFPoly(genericGF, new int[]{1, genericGF.a((size - 1) + genericGF.a())}));
|
||||
this.b.add(genericGFPoly);
|
||||
}
|
||||
}
|
||||
return this.b.get(i);
|
||||
}
|
||||
|
||||
public void a(int[] iArr, int i) {
|
||||
if (i != 0) {
|
||||
int length = iArr.length - i;
|
||||
if (length > 0) {
|
||||
GenericGFPoly a = a(i);
|
||||
int[] iArr2 = new int[length];
|
||||
System.arraycopy(iArr, 0, iArr2, 0, length);
|
||||
int[] a2 = new GenericGFPoly(this.a, iArr2).a(i, 1).b(a)[1].a();
|
||||
int length2 = i - a2.length;
|
||||
for (int i2 = 0; i2 < length2; i2++) {
|
||||
iArr[length + i2] = 0;
|
||||
}
|
||||
System.arraycopy(a2, 0, iArr, length + length2, a2.length);
|
||||
return;
|
||||
}
|
||||
throw new IllegalArgumentException("No data bytes provided");
|
||||
}
|
||||
throw new IllegalArgumentException("No error correction bytes");
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
package com.google.zxing.common.reedsolomon;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class ReedSolomonException extends Exception {
|
||||
public ReedSolomonException(String str) {
|
||||
super(str);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user