- Apache 2.0 section 4(b): the patches modify files that are the work of Hyperledger Besu and now say so, with the notice inside the modified files, which is what the licence asks for and what applying the patch produces. - patches/ and precompiles/ now carry the staged versions rather than an older export. The two had drifted in both directions; the only thing the published copy had that the staged one lacked was the word "audited" in front of Bouncy Castle, which we cannot evidence and which the staged version had dropped. - the brand was spelled two ways in the same repository, 62 times one way and 23 the other. It is Aere Network; AERE is the ticker. The 96 AERE_* code identifiers are untouched.
63 lines
2.2 KiB
Java
63 lines
2.2 KiB
Java
/*
|
|
* Copyright contributors to the Aere Network.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations under the License.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
package org.hyperledger.besu.evm.precompile;
|
|
|
|
import org.hyperledger.besu.evm.frame.MessageFrame;
|
|
import org.hyperledger.besu.evm.gascalculator.GasCalculator;
|
|
|
|
import jakarta.validation.constraints.NotNull;
|
|
import org.apache.tuweni.bytes.Bytes;
|
|
import org.bouncycastle.pqc.crypto.falcon.FalconParameters;
|
|
|
|
/**
|
|
* AERE PQC precompile: Falcon-1024 signature verification (NIST round-3 reference encoding).
|
|
*
|
|
* <p>Input: {@code pk(1793) || sm(rest)} where pk is the reference public key (header 0x0A) and sm
|
|
* is the reference signed-message blob. Output: 32-byte word, {@code ...01} valid else {@code ...00}.
|
|
*/
|
|
public class Falcon1024PrecompiledContract extends AbstractPrecompiledContract {
|
|
|
|
static final int PK_LEN = 1793;
|
|
private static final int LOGN = 10;
|
|
private static final long GAS = 75_000L;
|
|
|
|
/**
|
|
* Instantiates a new Falcon-1024 precompiled contract.
|
|
*
|
|
* @param gasCalculator the gas calculator
|
|
*/
|
|
Falcon1024PrecompiledContract(final GasCalculator gasCalculator) {
|
|
super("AereFalcon1024", gasCalculator);
|
|
}
|
|
|
|
@Override
|
|
public long gasRequirement(final Bytes input) {
|
|
return GAS;
|
|
}
|
|
|
|
@NotNull
|
|
@Override
|
|
public PrecompileContractResult computePrecompile(
|
|
final Bytes input, @NotNull final MessageFrame messageFrame) {
|
|
boolean valid = false;
|
|
if (input.size() > PK_LEN) {
|
|
final byte[] pk = input.slice(0, PK_LEN).toArrayUnsafe();
|
|
final byte[] sm = input.slice(PK_LEN).toArrayUnsafe();
|
|
valid = AereFalconSupport.verify(FalconParameters.falcon_1024, LOGN, pk, sm);
|
|
}
|
|
return PrecompileContractResult.success(AereFalconSupport.resultWord(valid));
|
|
}
|
|
}
|