what-the-bank/sources/org/bouncycastle/pqc/crypto/newhope/NTT.java

74 lines
11 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package org.bouncycastle.pqc.crypto.newhope;
import java.nio.ByteBuffer;
import org.bouncycastle.i18n.LocalizedMessage;
/* loaded from: classes6.dex */
class NTT {
private static final short[] BitReverseTable;
/* JADX INFO: Access modifiers changed from: package-private */
public static void mulCoefficients(short[] sArr, short[] sArr2) {
for (int i = 0; i < 1024; i++) {
sArr[i] = Reduce.montgomery((sArr[i] & 65535) * (65535 & sArr2[i]));
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void core(short[] sArr, short[] sArr2) {
for (int i = 0; i < 10; i += 2) {
int i2 = 1 << i;
for (int i3 = 0; i3 < i2; i3++) {
int i4 = 0;
int i5 = i3;
while (i5 < 1023) {
int i6 = sArr[i5] & 65535;
int i7 = i5 + i2;
int i8 = sArr[i7] & 65535;
short s = sArr2[i4];
sArr[i5] = (short) (i6 + i8);
sArr[i7] = Reduce.montgomery(s * ((i6 + 36867) - i8));
i5 += i2 << 1;
i4++;
}
}
int i9 = i2 << 1;
for (int i10 = 0; i10 < i9; i10++) {
int i11 = 0;
int i12 = i10;
while (i12 < 1023) {
int i13 = sArr[i12] & 65535;
int i14 = i12 + i9;
int i15 = sArr[i14] & 65535;
short s2 = sArr2[i11];
sArr[i12] = Reduce.barrett((short) (i13 + i15));
sArr[i14] = Reduce.montgomery(s2 * ((i13 + 36867) - i15));
i12 += i2 << 2;
i11++;
}
}
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void bitReverse(short[] sArr) {
for (int i = 0; i < 1024; i++) {
short s = BitReverseTable[i];
if (i < s) {
short s2 = sArr[i];
sArr[i] = sArr[s];
sArr[s] = s2;
}
}
}
NTT() {
}
static {
short[] sArr = new short[1024];
ByteBuffer.wrap("\u0000\u0000\u0002\u0000\u0001\u0000\u0003\u0000\u0000\u0080\u0002\u0080\u0001\u0080\u0003\u0080\u0000@\u0002@\u0001@\u0003@\u0000À\u0002À\u0001À\u0003À\u0000 \u0002 \u0001 \u0003 \u0000 \u0002 \u0001 \u0003 \u0000`\u0002`\u0001`\u0003`\u0000à\u0002à\u0001à\u0003à\u0000\u0010\u0002\u0010\u0001\u0010\u0003\u0010\u0000\u0090\u0002\u0090\u0001\u0090\u0003\u0090\u0000P\u0002P\u0001P\u0003P\u0000Ð\u0002Ð\u0001Ð\u0003Ð\u00000\u00020\u00010\u00030\u0000°\u0002°\u0001°\u0003°\u0000p\u0002p\u0001p\u0003p\u0000ð\u0002ð\u0001ð\u0003ð\u0000\b\u0002\b\u0001\b\u0003\b\u0000\u0088\u0002\u0088\u0001\u0088\u0003\u0088\u0000H\u0002H\u0001H\u0003H\u0000È\u0002È\u0001È\u0003È\u0000(\u0002(\u0001(\u0003(\u0000¨\u0002¨\u0001¨\u0003¨\u0000h\u0002h\u0001h\u0003h\u0000è\u0002è\u0001è\u0003è\u0000\u0018\u0002\u0018\u0001\u0018\u0003\u0018\u0000\u0098\u0002\u0098\u0001\u0098\u0003\u0098\u0000X\u0002X\u0001X\u0003X\u0000Ø\u0002Ø\u0001Ø\u0003Ø\u00008\u00028\u00018\u00038\u0000¸\u0002¸\u0001¸\u0003¸\u0000x\u0002x\u0001x\u0003x\u0000ø\u0002ø\u0001ø\u0003ø\u0000\u0004\u0002\u0004\u0001\u0004\u0003\u0004\u0000\u0084\u0002\u0084\u0001\u0084\u0003\u0084\u0000D\u0002D\u0001D\u0003D\u0000Ä\u0002Ä\u0001Ä\u0003Ä\u0000$\u0002$\u0001$\u0003$\u0000¤\u0002¤\u0001¤\u0003¤\u0000d\u0002d\u0001d\u0003d\u0000ä\u0002ä\u0001ä\u0003ä\u0000\u0014\u0002\u0014\u0001\u0014\u0003\u0014\u0000\u0094\u0002\u0094\u0001\u0094\u0003\u0094\u0000T\u0002T\u0001T\u0003T\u0000Ô\u0002Ô\u0001Ô\u0003Ô\u00004\u00024\u00014\u00034\u0000´\u0002´\u0001´\u0003´\u0000t\u0002t\u0001t\u0003t\u0000ô\u0002ô\u0001ô\u0003ô\u0000\f\u0002\f\u0001\f\u0003\f\u0000\u008c\u0002\u008c\u0001\u008c\u0003\u008c\u0000L\u0002L\u0001L\u0003L\u0000Ì\u0002Ì\u0001Ì\u0003Ì\u0000,\u0002,\u0001,\u0003,\u0000¬\u0002¬\u0001¬\u0003¬\u0000l\u0002l\u0001l\u0003l\u0000ì\u0002ì\u0001ì\u0003ì\u0000\u001c\u0002\u001c\u0001\u001c\u0003\u001c\u0000\u009c\u0002\u009c\u0001\u009c\u0003\u009c\u0000\\\u0002\\\u0001\\\u0003\\\u0000Ü\u0002Ü\u0001Ü\u0003Ü\u0000<\u0002<\u0001<\u0003<\u0000¼\u0002¼\u0001¼\u0003¼\u0000|\u0002|\u0001|\u0003|\u0000ü\u0002ü\u0001ü\u0003ü\u0000\u0002\u0002\u0002\u0001\u0002\u0003\u0002\u0000\u0082\u0002\u0082\u0001\u0082\u0003\u0082\u0000B\u0002B\u0001B\u0003B\u0000Â\u0002Â\u0001Â\u0003Â\u0000\"\u0002\"\u0001\"\u0003\"\u0000¢\u0002¢\u0001¢\u0003¢\u0000b\u0002b\u0001b\u0003b\u0000â\u0002â\u0001â\u0003â\u0000\u0012\u0002\u0012\u0001\u0012\u0003\u0012\u0000\u0092\u0002\u0092\u0001\u0092\u0003\u0092\u0000R\u0002R\u0001R\u0003R\u0000Ò\u0002Ò\u0001Ò\u0003Ò\u00002\u00022\u00012\u00032\u0000²\u0002²\u0001²\u0003²\u0000r\u0002r\u0001r\u0003r\u0000ò\u0002ò\u0001ò\u0003ò\u0000\n\u0002\n\u0001\n\u0003\n\u0000\u008a\u0002\u008a\u0001\u008a\u0003\u008a\u0000J\u0002J\u0001J\u0003J\u0000Ê\u0002Ê\u0001Ê\u0003Ê\u0000*\u0002*\u0001*\u0003*\u0000ª\u0002ª\u0001ª\u0003ª\u0000j\u0002j\u0001j\u0003j\u0000ê\u0002ê\u0001ê\u0003ê\u0000\u001a\u0002\u001a\u0001\u001a\u0003\u001a\u0000\u009a\u0002\u009a\u0001\u009a\u0003\u009a\u0000Z\u0002Z\u0001Z\u0003Z\u0000Ú\u0002Ú\u0001Ú\u0003Ú\u0000:\u0002:\u0001:\u0003:\u0000º\u0002º\u0001º\u0003º\u0000z\u0002z\u0001z\u0003z\u0000ú\u0002ú\u0001ú\u0003ú\u0000\u0006\u0002\u0006\u0001\u0006\u0003\u0006\u0000\u0086\u0002\u0086\u0001\u0086\u0003\u0086\u0000F\u0002F\u0001F\u0003F\u0000Æ\u0002Æ\u0001Æ\u0003Æ\u0000&\u0002&\u0001&\u0003&\u0000¦\u0002¦\u0001¦\u0003¦\u0000f\u0002f\u0001f\u0003f\u0000æ\u0002æ\u0001æ\u0003æ\u0000\u0016\u0002\u0016\u0001\u0016\u0003\u0016\u0000\u0096\u0002\u0096\u0001\u0096\u0003\u0096\u0000V\u0002V\u0001V\u0003V\u0000Ö\u0002Ö\u0001Ö\u0003Ö\u00006\u00026\u00016\u00036\u0000¶\u0002¶\u0001¶\u0003¶\u0000v\u0002v\u0001v\u0003v\u0000ö\u0002ö\u0001ö\u0003ö\u0000\u000e\u0002\u000e\u0001\u000e\u0003\u000e\u0000\u008e\u0002\u008e\u0001\u008e\u0003\u008e\u0000N\u0002N\u0001N\u0003N\u0000Î\u0002Î\u0001Î\u0003Î\u0000.\u0002.\u0001.\u0003.\u0000®\u0002®\u0001®\u0003®\u0000n\u0002n\u0001n\u0003n\u0000î\u0002î\u0001î\u0003î\u0000\u001e\u0002\u001e\u0001\u001e\u0003\u001e\u0000\u009e\u0002\u009e\u0001\u009e\u0003\u009e\u0000^\u0002^\u0001^\u0003^\u0000Þ\u0002Þ\u0001Þ\u0003Þ\u0000>\u0002>\u0001>\u0003>\u0000¾\u0002¾\u0001¾\u0003¾\u0000~\u0002~\u0001~\u0003~\u0000þ\u0002þ\u0001þ\u0003þ\u0000\u0001\u0002\u0001\u0001\u0001\u0003\u0001\u0000\u0081\u0002\u0081\u0001\u0081\u0003\u0081\u0000A\u0002A\u0001A\u0003A\u0000Á\u0002Á\u0001Á\u0003Á\u0000!\u0002!\u0001!\u0003!\u0000¡\u0002¡\u0001¡\u0003¡\u0000a\u0002a\u0001a\u0003a\u0000á\u0002á\u0001á\u0003á\u0000\u0011\u0002\u0011\u0001\u0011\u0003\u0011\u0000\u0091\u0002\u0091\u0001\u0091\u0003\u0091\u0000Q\u0002Q\u0001Q\u0003Q\u0000Ñ\u0002Ñ\u0001Ñ\u0003Ñ\u00001\u00021\u00011\u00031\u0000±\u0002±\u0001±\u0003±\u0000q\u0002q\u0001q\u0003q\u0000ñ\u0002ñ\u0001ñ\u0003ñ\u0000\t\u0002\t\u0001\t\u0003\t\u0000\u0089\u0002\u0089\u0001\u0089\u0003\u0089\u0000I\u0002I\u0001I\u0003I\u0000É\u0002É\u0001É\u0003É\u0000)\u0002)\u0001)\u0003)\u0000©\u0002©\u0001©\u0003©\u0000i\u0002i\u0001i\u0003i\u0000é\u0002é\u0001é\u0003é\u0000\u0019\u0002\u0019\u0001\u0019\u0003\u0019\u0000\u0099\u0002\u0099\u0001\u0099\u0003\u0099\u0000Y\u0002Y\u0001Y\u0003Y\u0000Ù\u0002Ù\u0001Ù\u0003Ù\u00009\u00029\u00019\u00039\u0000¹\u0002¹\u0001¹\u0003¹\u0000y\u0002y\u0001y\u0003y\u0000ù\u0002ù\u0001ù\u0003ù\u0000\u0005\u0002\u0005\u0001\u0005\u0003\u0005\u0000\u0085\u0002\u0085\u0001\u0085\u0003\u0085\u0000E\u0002E\u0001E\u0003E\u0000Å\u0002Å\u0001Å\u0003Å\u0000%\u0002%\u0001%\u0003%\u0000¥\u0002¥\u0001¥\u0003¥\u0000e\u0002e\u0001e\u0003e\u0000å\u0002å\u0001å\u0003å\u0000\u0015\u0002\u0015\u0001\u0015\u0003\u0015\u0000\u0095\u0002\u0095\u0001\u0095\u0003\u0095\u0000U\u0002U\u0001U\u0003U\u0000Õ\u0002Õ\u0001Õ\u0003Õ\u00005\u00025\u00015\u00035\u0000µ\u0002µ\u0001µ\u0003µ\u0000u\u0002u\u0001u\u0003u\u0000õ\u0002õ\u0001õ\u0003õ\u0000\r\u0002\r\u0001\r\u0003\r\u0000\u008d\u0002\u008d\u0001\u008d\u0003\u008d\u0000M\u0002M\u0001M\u0003M\u0000Í\u0002Í\u0001Í\u0003Í\u0000-\u0002-\u0001-\u0003-\u0000\u00ad\u0002\u00ad\u0001\u00ad\u0003\u00ad\u0000m\u0002m\u0001m\u0003m\u0000í\u0002í\u0001í\u0003í\u0000\u001d\u0002\u001d\u0001\u001d\u0003\u001d\u0000\u009d\u0002\u009d\u0001\u009d\u0003\u009d\u0000]\u0002]\u0001]\u0003]\u0000Ý\u0002Ý\u0001Ý\u0003Ý\u0000=\u0002=\u0001=\u0003=\u0000½\u0002½\u0001½\u0003½\u0000}\u0002}\u0001}\u0003}\u0000ý\u0002ý\u0001ý\u0003ý\u0000\u0003\u0002\u0003\u0001\u0003\u0003\u0003\u0000\u0083\u0002\u0083\u0001\u0083\u0003\u0083\u0000C\u0002C\u0001C\u0003C\u0000Ã\u0002Ã\u0001Ã\u0003Ã\u0000#\u0002#\u0001#\u0003#\u0000£\u0002£\u0001£\u0003£\u0000c\u0002c\u0001c\u0003c\u0000ã\u0002ã\u0001ã\u0003ã\u0000\u0013\u0002\u0013\u0001\u0013\u0003\u0013\u0000\u0093\u0002\u0093\u0001\u0093\u0003\u0093\u0000S\u0002S\u0001S\u0003S\u0000Ó\u0002Ó\u0001Ó\u0003Ó\u00003\u00023\u00013\u00033\u0000³\u0002³\u0001³\u0003³\u0000s\u0002s\u0001s\u0003s\u0000ó\u0002ó\u0001ó\u0003ó\u0000\u000b\u0002\u000b\u0001\u000b\u0003\u000b\u0000\u008b\u0002\u008b\u0001\u008b\u0003\u008b\u0000K\u0002K\u0001K\u0003K\u0000Ë\u0002Ë\u0001Ë\u0003Ë\u0000+\u0002+\u0001+\u0003+\u0000«\u0002«\u0001«\u0003«\u0000k\u0002k\u0001k\u0003k\u0000ë\u0002ë\u0001ë\u0003ë\u0000\u001b\u0002\u001b\u0001\u001b\u0003\u001b\u0000\u009b\u0002\u009b\u0001\u009b\u0003\u009b\u0000[\u0002[\u0001[\u0003[\u0000Û\u0002Û\u0001Û\u0003Û\u0000;\u0002;\u0001;\u0003;\u0000»\u0002»\u0001»\u0003»\u0000{\u0002{\u0001{\u0003{\u0000û\u0002û\u0001û\u0003û\u0000\u0007\u0002\u0007\u0001\u0007\u0003\u0007\u0000\u0087\u0002\u0087\u0001\u0087\u0003\u0087\u0000G\u0002G\u0001G\u0003G\u0000Ç\u0002Ç\u0001Ç\u0003Ç\u0000'\u0002'\u0001'\u0003'\u0000§\u0002§\u0001§\u0003§\u0000g\u0002g\u0001g\u0003g\u0000ç\u0002ç\u0001ç\u0003ç\u0000\u0017\u0002\u0017\u0001\u0017\u0003\u0017\u0000\u0097\u0002\u0097\u0001\u0097\u0003\u0097\u0000W\u0002W\u0001W\u0003W\u0000×\u0002×\u0001×\u0003×\u00007\u00027\u00017\u00037\u0000·\u0002·\u0001·\u0003·\u0000w\u0002w\u0001w\u0003w\u0000÷\u0002÷\u0001÷\u0003÷\u0000\u000f\u0002\u000f\u0001\u000f\u0003\u000f\u0000\u008f\u0002\u008f\u0001\u008f\u0003\u008f\u0000O\u0002O\u0001O\u0003O\u0000Ï\u0002Ï\u0001Ï\u0003Ï\u0000/\u0002/\u0001/\u0003/\u0000¯\u0002¯\u0001¯\u0003¯\u0000o\u0002o\u0001o\u0003o\u0000ï\u0002ï\u0001ï\u0003ï\u0000\u001f\u0002\u001f\u0001\u001f\u0003\u001f\u0000\u009f\u0002\u009f\u0001\u009f\u0003\u009f\u0000_\u0002_\u0001_\u0003_\u0000ß\u0002ß\u0001ß\u0003ß\u0000?\u0002?\u0001?\u0003?\u0000¿\u0002¿\u0001¿\u0003¿\u0000\u007f\u0002\u007f\u0001\u007f\u0003\u007f\u0000ÿ\u0002ÿ\u0001ÿ\u0003ÿ".getBytes(LocalizedMessage.DEFAULT_ENCODING)).asShortBuffer().get(sArr, 0, 1024);
BitReverseTable = sArr;
}
}