Skip to content

Commit 27f3ddc

Browse files
committed
revert(pbft): drop pq signature additions
1 parent befadeb commit 27f3ddc

11 files changed

Lines changed: 50 additions & 714 deletions

File tree

chainbase/src/main/java/org/tron/core/capsule/PbftSignCapsule.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import com.google.protobuf.ByteString;
44
import com.google.protobuf.InvalidProtocolBufferException;
5-
import java.util.Collections;
65
import java.util.Deque;
76
import java.util.List;
87
import lombok.Getter;
98
import lombok.extern.slf4j.Slf4j;
109
import org.tron.protos.Protocol.PBFTCommitResult;
11-
import org.tron.protos.Protocol.PQAuthSig;
1210

1311
@Slf4j(topic = "pbft")
1412
public class PbftSignCapsule implements ProtoCapsule<PBFTCommitResult> {
@@ -25,18 +23,8 @@ public PbftSignCapsule(byte[] data) {
2523
}
2624

2725
public PbftSignCapsule(ByteString data, List<ByteString> signList) {
28-
this(data, signList, Collections.emptyList());
29-
}
30-
31-
public PbftSignCapsule(ByteString data, List<ByteString> signList,
32-
List<PQAuthSig> pqSignList) {
33-
PBFTCommitResult.Builder builder = PBFTCommitResult.newBuilder().setData(data);
34-
if (signList != null && !signList.isEmpty()) {
35-
builder.addAllSignature(signList);
36-
}
37-
if (pqSignList != null && !pqSignList.isEmpty()) {
38-
builder.addAllPqSignature(pqSignList);
39-
}
26+
PBFTCommitResult.Builder builder = PBFTCommitResult.newBuilder();
27+
builder.setData(data).addAllSignature(signList);
4028
pbftCommitResult = builder.build();
4129
}
4230

consensus/src/main/java/org/tron/consensus/pbft/PbftMessageAction.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.tron.core.ChainBaseManager;
1111
import org.tron.core.capsule.PbftSignCapsule;
1212
import org.tron.protos.Protocol.PBFTMessage.Raw;
13-
import org.tron.protos.Protocol.PQAuthSig;
1413

1514
@Slf4j(topic = "pbft")
1615
@Component
@@ -19,24 +18,22 @@ public class PbftMessageAction {
1918
@Autowired
2019
private ChainBaseManager chainBaseManager;
2120

22-
public void action(PbftMessage message, List<ByteString> dataSignList,
23-
List<PQAuthSig> pqSignList) {
21+
public void action(PbftMessage message, List<ByteString> dataSignList) {
2422
switch (message.getDataType()) {
2523
case BLOCK: {
2624
long blockNum = message.getNumber();
2725
chainBaseManager.getCommonDataBase().saveLatestPbftBlockNum(blockNum);
2826
Raw raw = message.getPbftMessage().getRawData();
2927
chainBaseManager.getPbftSignDataStore()
30-
.putBlockSignData(blockNum,
31-
new PbftSignCapsule(raw.toByteString(), dataSignList, pqSignList));
28+
.putBlockSignData(blockNum, new PbftSignCapsule(raw.toByteString(), dataSignList));
3229
logger.info("commit msg block num is:{}", blockNum);
3330
}
3431
break;
3532
case SRL: {
3633
try {
3734
Raw raw = message.getPbftMessage().getRawData();
3835
chainBaseManager.getPbftSignDataStore().putSrSignData(message.getEpoch(),
39-
new PbftSignCapsule(raw.toByteString(), dataSignList, pqSignList));
36+
new PbftSignCapsule(raw.toByteString(), dataSignList));
4037
logger.info("sr commit msg :{}, epoch:{}", message.getNumber(), message.getEpoch());
4138
} catch (Exception e) {
4239
logger.error("process the sr list error!", e);

consensus/src/main/java/org/tron/consensus/pbft/PbftMessageHandle.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.tron.consensus.pbft.message.PbftMessage;
3333
import org.tron.core.ChainBaseManager;
3434
import org.tron.protos.Protocol.PBFTMessage.DataType;
35-
import org.tron.protos.Protocol.PQAuthSig;
3635

3736
@Slf4j(topic = "pbft")
3837
@Component
@@ -65,15 +64,6 @@ public List<ByteString> load(String s) throws Exception {
6564
}
6665
});
6766

68-
private LoadingCache<String, List<PQAuthSig>> pqSignCache = CacheBuilder.newBuilder()
69-
.initialCapacity(100).maximumSize(1000).expireAfterWrite(2, TimeUnit.MINUTES).build(
70-
new CacheLoader<String, List<PQAuthSig>>() {
71-
@Override
72-
public List<PQAuthSig> load(String s) throws Exception {
73-
return new ArrayList<>();
74-
}
75-
});
76-
7767
private PbftMessage srPbftMessage;
7868

7969
private Timer timer = new Timer("pbft-timer");
@@ -215,21 +205,14 @@ public synchronized void onCommit(PbftMessage message) {
215205
commitVoteMap.put(key, message);
216206
//The number of votes plus 1
217207
long agCou = agreeCommit.incrementAndGet(message.getDataKey());
218-
if (message.getPbftMessage().hasPqAuthSig()) {
219-
pqSignCache.getUnchecked(message.getDataKey())
220-
.add(message.getPbftMessage().getPqAuthSig());
221-
} else {
222-
dataSignCache.getUnchecked(message.getDataKey())
223-
.add(message.getPbftMessage().getSignature());
224-
}
208+
dataSignCache.getUnchecked(message.getDataKey())
209+
.add(message.getPbftMessage().getSignature());
225210
if (agCou >= Param.getInstance().getAgreeNodeCount()) {
226211
srPbftMessage = null;
227212
remove(message.getNo());
228213
//commit,
229214
if (!isSyncing()) {
230-
pbftMessageAction.action(message,
231-
dataSignCache.getUnchecked(message.getDataKey()),
232-
pqSignCache.getUnchecked(message.getDataKey()));
215+
pbftMessageAction.action(message, dataSignCache.getUnchecked(message.getDataKey()));
233216
}
234217
}
235218
}

consensus/src/main/java/org/tron/consensus/pbft/message/PbftBaseMessage.java

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.stream.Collectors;
77
import org.bouncycastle.util.encoders.Hex;
88
import org.tron.common.crypto.ECKey;
9-
import org.tron.common.crypto.pqc.PQSchemeRegistry;
109
import org.tron.common.overlay.message.Message;
1110
import org.tron.common.utils.ByteUtil;
1211
import org.tron.common.utils.Sha256Hash;
@@ -15,8 +14,6 @@
1514
import org.tron.core.exception.P2pException;
1615
import org.tron.protos.Protocol.PBFTMessage;
1716
import org.tron.protos.Protocol.PBFTMessage.DataType;
18-
import org.tron.protos.Protocol.PQAuthSig;
19-
import org.tron.protos.Protocol.PQScheme;
2017
import org.tron.protos.Protocol.SRL;
2118

2219
public abstract class PbftBaseMessage extends Message {
@@ -99,38 +96,8 @@ public DataType getDataType() {
9996

10097
public void analyzeSignature() throws SignatureException {
10198
byte[] hash = Sha256Hash.hash(true, getPbftMessage().getRawData().toByteArray());
102-
boolean hasLegacy = !getPbftMessage().getSignature().isEmpty();
103-
boolean hasPq = getPbftMessage().hasPqAuthSig();
104-
if (hasLegacy == hasPq) {
105-
throw new SignatureException(
106-
"pbft message must set exactly one of signature / pq_auth_sig");
107-
}
108-
if (hasPq) {
109-
publicKey = verifyPqAuthSig(hash, getPbftMessage().getPqAuthSig());
110-
} else {
111-
publicKey = ECKey.signatureToAddress(hash, TransactionCapsule
112-
.getBase64FromByteString(getPbftMessage().getSignature()));
113-
}
114-
}
115-
116-
private static byte[] verifyPqAuthSig(byte[] hash, PQAuthSig pqAuthSig)
117-
throws SignatureException {
118-
PQScheme scheme = pqAuthSig.getScheme();
119-
if (!PQSchemeRegistry.contains(scheme)) {
120-
throw new SignatureException("pbft pq_auth_sig scheme not registered: " + scheme);
121-
}
122-
byte[] publicKey = pqAuthSig.getPublicKey().toByteArray();
123-
if (publicKey.length != PQSchemeRegistry.getPublicKeyLength(scheme)) {
124-
throw new SignatureException("pbft pq_auth_sig public key length mismatch for " + scheme);
125-
}
126-
byte[] signature = pqAuthSig.getSignature().toByteArray();
127-
if (!PQSchemeRegistry.isValidSignatureLength(scheme, signature.length)) {
128-
throw new SignatureException("pbft pq_auth_sig signature length mismatch for " + scheme);
129-
}
130-
if (!PQSchemeRegistry.verify(scheme, publicKey, hash, signature)) {
131-
throw new SignatureException("pbft pq_auth_sig verification failed for " + scheme);
132-
}
133-
return PQSchemeRegistry.computeAddress(scheme, publicKey);
99+
publicKey = ECKey.signatureToAddress(hash, TransactionCapsule
100+
.getBase64FromByteString(getPbftMessage().getSignature()));
134101
}
135102

136103
@Override

consensus/src/main/java/org/tron/consensus/pbft/message/PbftMessage.java

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@
44
import java.util.List;
55
import org.tron.common.crypto.ECKey;
66
import org.tron.common.crypto.ECKey.ECDSASignature;
7-
import org.tron.common.crypto.pqc.PQSchemeRegistry;
87
import org.tron.common.utils.Sha256Hash;
98
import org.tron.consensus.base.Param;
109
import org.tron.consensus.base.Param.Miner;
11-
import org.tron.consensus.base.Param.MinerType;
1210
import org.tron.core.capsule.BlockCapsule;
1311
import org.tron.core.net.message.MessageTypes;
1412
import org.tron.protos.Protocol.PBFTMessage;
1513
import org.tron.protos.Protocol.PBFTMessage.DataType;
1614
import org.tron.protos.Protocol.PBFTMessage.MsgType;
1715
import org.tron.protos.Protocol.PBFTMessage.Raw;
18-
import org.tron.protos.Protocol.PQAuthSig;
19-
import org.tron.protos.Protocol.PQScheme;
2016
import org.tron.protos.Protocol.SRL;
2117

2218
public class PbftMessage extends PbftBaseMessage {
@@ -60,13 +56,15 @@ public static PbftMessage fullNodePrePrepareSRLMsg(BlockCapsule block,
6056
private static PbftMessage buildCommon(DataType dataType, ByteString data, BlockCapsule block,
6157
long epoch, long viewN, Miner miner) {
6258
PbftMessage pbftMessage = new PbftMessage();
59+
ECKey ecKey = ECKey.fromPrivate(miner.getPrivateKey());
6360
Raw.Builder rawBuilder = Raw.newBuilder();
6461
PBFTMessage.Builder builder = PBFTMessage.newBuilder();
6562
rawBuilder.setViewN(viewN).setEpoch(epoch).setDataType(dataType)
6663
.setMsgType(MsgType.PREPREPARE).setData(data);
6764
Raw raw = rawBuilder.build();
6865
byte[] hash = Sha256Hash.hash(true, raw.toByteArray());
69-
signRaw(builder, raw, hash, miner);
66+
ECDSASignature signature = ecKey.sign(hash);
67+
builder.setRawData(raw).setSignature(ByteString.copyFrom(signature.toByteArray()));
7068
PBFTMessage message = builder.build();
7169
pbftMessage.setType(MessageTypes.PBFT_MSG.asByte())
7270
.setPbftMessage(message).setData(message.toByteArray()).setSwitch(block.isSwitch());
@@ -98,6 +96,7 @@ public PbftMessage buildCommitMessage(Miner miner) {
9896

9997
private PbftMessage buildMessageCapsule(MsgType type, Miner miner) {
10098
PbftMessage pbftMessage = new PbftMessage();
99+
ECKey ecKey = ECKey.fromPrivate(miner.getPrivateKey());
101100
PBFTMessage.Builder builder = PBFTMessage.newBuilder();
102101
Raw.Builder rawBuilder = Raw.newBuilder();
103102
rawBuilder.setViewN(getPbftMessage().getRawData().getViewN())
@@ -106,30 +105,11 @@ private PbftMessage buildMessageCapsule(MsgType type, Miner miner) {
106105
.setData(getPbftMessage().getRawData().getData());
107106
Raw raw = rawBuilder.build();
108107
byte[] hash = Sha256Hash.hash(true, raw.toByteArray());
109-
signRaw(builder, raw, hash, miner);
108+
ECDSASignature signature = ecKey.sign(hash);
109+
builder.setRawData(raw).setSignature(ByteString.copyFrom(signature.toByteArray()));
110110
PBFTMessage message = builder.build();
111111
pbftMessage.setType(getType().asByte())
112112
.setPbftMessage(message).setData(message.toByteArray());
113113
return pbftMessage;
114114
}
115-
116-
private static void signRaw(PBFTMessage.Builder builder, Raw raw, byte[] hash, Miner miner) {
117-
builder.setRawData(raw);
118-
if (miner.getType() == MinerType.PQ) {
119-
PQScheme scheme = miner.getPqScheme();
120-
byte[] sk = miner.getPQPrivateKey();
121-
byte[] pk = miner.getPQPublicKey();
122-
byte[] sig = PQSchemeRegistry.sign(scheme, sk, hash);
123-
builder.setPqAuthSig(PQAuthSig.newBuilder()
124-
.setScheme(scheme)
125-
.setPublicKey(ByteString.copyFrom(pk))
126-
.setSignature(ByteString.copyFrom(sig)))
127-
.clearSignature();
128-
} else {
129-
ECKey ecKey = ECKey.fromPrivate(miner.getPrivateKey());
130-
ECDSASignature signature = ecKey.sign(hash);
131-
builder.setSignature(ByteString.copyFrom(signature.toByteArray()))
132-
.clearPqAuthSig();
133-
}
134-
}
135-
}
115+
}

0 commit comments

Comments
 (0)