public byte[] calcPowValue() { // nonce bytes are expected in Little Endian order, reverting byte[] nonceReverted = Arrays.reverse(nonce); byte[] hashWithoutNonce = HashUtil.sha3(getEncodedWithoutNonce()); byte[] seed = Arrays.concatenate(hashWithoutNonce, nonceReverted); byte[] seedHash = HashUtil.sha512(seed); byte[] concat = Arrays.concatenate(seedHash, mixHash); return HashUtil.sha3(concat); }
int w = params.getMIX_BYTES() / params.getWORD_BYTES(); int mixhashes = params.getMIX_BYTES() / params.getHASH_BYTES(); int[] s = bytesToInts(HashUtil.sha512(merge(blockHeaderTruncHash, reverse(nonce))), false); int[] mix = new int[params.getMIX_BYTES() / 4]; for (int i = 0; i < mixhashes; i++) {
byte[] s = sha512(merge(blockHeaderTruncHash, reverse(nonce))); byte[] mix = new byte[params.getMIX_BYTES()]; for (int i = 0; i < mixhashes; i++) {
private static ECFieldElement hash2FieldElement(ECCurve curve, byte[] hash) { byte[] data = Arrays.reverse(hash); return curve.fromBigInteger(truncate(new BigInteger(1, data), curve.getFieldSize())); }
private void processAAD(byte[] authText, int authOff, int len) { lambda_o = len * BITS_IN_BYTE; engine.processBlock(H, 0, H, 0); int totalLength = len; int inOff_ = authOff; while (totalLength > 0) { for (int byteIndex = 0; byteIndex < engine.getBlockSize(); byteIndex++) { b[byteIndex] ^= authText[inOff_ + byteIndex]; } multiplyOverField(engine.getBlockSize() * BITS_IN_BYTE, b, H, temp); temp = Arrays.reverse(temp); System.arraycopy(temp, 0, b, 0, engine.getBlockSize()); totalLength -= engine.getBlockSize(); inOff_ += engine.getBlockSize(); } }
public static ECField convertField(FiniteField field) { if (ECAlgorithms.isFpField(field)) { return new ECFieldFp(field.getCharacteristic()); } else //if (ECAlgorithms.isF2mField(curveField)) { Polynomial poly = ((PolynomialExtensionField)field).getMinimalPolynomial(); int[] exponents = poly.getExponentsPresent(); int[] ks = Arrays.reverse(Arrays.copyOfRange(exponents, 1, exponents.length - 1)); return new ECFieldF2m(poly.getDegree(), ks); } }
private static ECField convertField(FiniteField field) { if (ECAlgorithms.isFpField(field)) { return new ECFieldFp(field.getCharacteristic()); } else //if (ECAlgorithms.isF2mField(curveField)) { Polynomial poly = ((PolynomialExtensionField)field).getMinimalPolynomial(); int[] exponents = poly.getExponentsPresent(); int[] ks = Arrays.reverse(Arrays.copyOfRange(exponents, 1, exponents.length - 1)); return new ECFieldF2m(poly.getDegree(), ks); } }
private static ECField convertField(FiniteField field) { if (ECAlgorithms.isFpField(field)) { return new ECFieldFp(field.getCharacteristic()); } else //if (ECAlgorithms.isF2mField(curveField)) { Polynomial poly = ((PolynomialExtensionField)field).getMinimalPolynomial(); int[] exponents = poly.getExponentsPresent(); int[] ks = Arrays.reverse(Arrays.copyOfRange(exponents, 1, exponents.length - 1)); return new ECFieldF2m(poly.getDegree(), ks); } } }
private static ECField convertField(FiniteField field) { if (ECAlgorithms.isFpField(field)) { return new ECFieldFp(field.getCharacteristic()); } else //if (ECAlgorithms.isF2mField(curveField)) { Polynomial poly = ((PolynomialExtensionField)field).getMinimalPolynomial(); int[] exponents = poly.getExponentsPresent(); int[] ks = Arrays.reverse(Arrays.copyOfRange(exponents, 1, exponents.length - 1)); return new ECFieldF2m(poly.getDegree(), ks); } } }
private void calculateMac(byte[] input, int inOff, int len) { macBlock = new byte[engine.getBlockSize()]; int totalLength = len; int inOff_ = inOff; while (totalLength > 0) { for (int byteIndex = 0; byteIndex < engine.getBlockSize(); byteIndex++) { b[byteIndex] ^= input[byteIndex + inOff_]; } multiplyOverField(engine.getBlockSize() * BITS_IN_BYTE, b, H, temp); temp = Arrays.reverse(temp); System.arraycopy(temp, 0, b, 0, engine.getBlockSize()); totalLength -= engine.getBlockSize(); inOff_ += engine.getBlockSize(); } Arrays.fill(temp, (byte)0); intToBytes(lambda_o, temp, 0); intToBytes(lambda_c, temp, engine.getBlockSize() / 2); for (int byteIndex = 0; byteIndex < engine.getBlockSize(); byteIndex++) { b[byteIndex] ^= temp[byteIndex]; } engine.processBlock(b, 0, macBlock, 0); }