Skip to content

Commit 2c06f4f

Browse files
authored
Merge pull request #6417 from halibobo1205/fix/code-scanning
refactor(crypto,api): improve code quality
2 parents b730030 + f8bd7cf commit 2c06f4f

File tree

12 files changed

+47
-76
lines changed

12 files changed

+47
-76
lines changed

actuator/src/main/java/org/tron/core/vm/PrecompiledContracts.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.apache.commons.lang3.tuple.Triple;
4242
import org.tron.common.crypto.Blake2bfMessageDigest;
4343
import org.tron.common.crypto.Hash;
44+
import org.tron.common.crypto.Rsv;
4445
import org.tron.common.crypto.SignUtils;
4546
import org.tron.common.crypto.SignatureInterface;
4647
import org.tron.common.crypto.zksnark.BN128;
@@ -352,22 +353,13 @@ private static byte[] encodeMultiRes(byte[]... words) {
352353
}
353354

354355
private static byte[] recoverAddrBySign(byte[] sign, byte[] hash) {
355-
byte v;
356-
byte[] r;
357-
byte[] s;
358356
byte[] out = null;
359357
if (ArrayUtils.isEmpty(sign) || sign.length < 65) {
360358
return new byte[0];
361359
}
362360
try {
363-
r = Arrays.copyOfRange(sign, 0, 32);
364-
s = Arrays.copyOfRange(sign, 32, 64);
365-
v = sign[64];
366-
if (v < 27) {
367-
v += 27;
368-
}
369-
370-
SignatureInterface signature = SignUtils.fromComponents(r, s, v,
361+
Rsv rsv = Rsv.fromSignature(sign);
362+
SignatureInterface signature = SignUtils.fromComponents(rsv.getR(), rsv.getS(), rsv.getV(),
371363
CommonParameter.getInstance().isECKeyCryptoEngine());
372364
if (signature.validateComponents()) {
373365
out = SignUtils.signatureToAddress(hash, signature,

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import lombok.extern.slf4j.Slf4j;
4242
import org.apache.commons.lang3.ArrayUtils;
4343
import org.tron.common.crypto.ECKey.ECDSASignature;
44+
import org.tron.common.crypto.Rsv;
4445
import org.tron.common.crypto.SignInterface;
4546
import org.tron.common.crypto.SignUtils;
4647
import org.tron.common.es.ExecutorServiceManager;
@@ -456,14 +457,8 @@ public static long getCallValue(Transaction.Contract contract) {
456457
}
457458

458459
public static String getBase64FromByteString(ByteString sign) {
459-
byte[] r = sign.substring(0, 32).toByteArray();
460-
byte[] s = sign.substring(32, 64).toByteArray();
461-
byte v = sign.byteAt(64);
462-
if (v < 27) {
463-
v += 27; //revId -> v
464-
}
465-
ECDSASignature signature = ECDSASignature.fromComponents(r, s, v);
466-
return signature.toBase64();
460+
Rsv rsv = Rsv.fromSignature(sign.toByteArray());
461+
return ECDSASignature.fromComponents(rsv.getR(), rsv.getS(), rsv.getV()).toBase64();
467462
}
468463

469464
public static boolean validateSignature(Transaction transaction,

chainbase/src/main/java/org/tron/core/service/MortgageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ private long computeReward(long cycle, List<Pair<byte[], Long>> votes) {
182182
}
183183
long userVote = vote.getValue();
184184
double voteRate = (double) userVote / totalVote;
185-
reward += voteRate * totalReward;
185+
reward += (long) (voteRate * totalReward);
186186
}
187187
return reward;
188188
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.tron.common.crypto;
2+
3+
4+
import java.util.Arrays;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
8+
@Getter
9+
@AllArgsConstructor
10+
public class Rsv {
11+
12+
private final byte[] r;
13+
private final byte[] s;
14+
private final byte v;
15+
16+
17+
public static Rsv fromSignature(byte[] sign) {
18+
byte[] r = Arrays.copyOfRange(sign, 0, 32);
19+
byte[] s = Arrays.copyOfRange(sign, 32, 64);
20+
byte v = sign[64];
21+
if (v < 27) {
22+
v += (byte) 27; //revId -> v
23+
}
24+
return new Rsv(r, s, v);
25+
}
26+
}

framework/src/main/java/org/tron/core/capsule/utils/RLP.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ static short decodeShort(byte[] data, int index) {
165165
byte pow = (byte) (length - 1);
166166
for (int i = 1; i <= length; ++i) {
167167
// << (8 * pow) == bit shift to 0 (*1), 8 (*256) , 16 (*65..)
168-
value += (data[index + i] & 0xFF) << (8 * pow);
168+
value += (short) ((data[index + i] & 0xFF) << (8 * pow));
169169
pow--;
170170
}
171171
} else {

framework/src/main/java/org/tron/core/services/http/GetBrokerageServlet.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2828
response.getWriter().println("{\"brokerage\": " + value + "}");
2929
} catch (DecoderException | IllegalArgumentException e) {
3030
try {
31-
response.getWriter()
32-
.println("{\"Error\": " + "\"INVALID address, " + e.getMessage() + "\"}");
31+
response.getWriter().println("{\"Error\": " + "\"INVALID address\"}");
3332
} catch (IOException ioe) {
3433
logger.debug("IOException: {}", ioe.getMessage());
3534
}

framework/src/main/java/org/tron/core/services/http/GetRewardServlet.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2727
response.getWriter().println("{\"reward\": " + value + "}");
2828
} catch (DecoderException | IllegalArgumentException e) {
2929
try {
30-
response.getWriter()
31-
.println("{\"Error\": " + "\"INVALID address, " + e.getMessage() + "\"}");
30+
response.getWriter().println("{\"Error\": " + "\"INVALID address\"}");
3231
} catch (IOException ioe) {
3332
logger.debug("IOException: {}", ioe.getMessage());
3433
}

framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServlet.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
3030
String input = request.getParameter("value");
3131
fillResponse(ByteString.copyFrom(ByteArray.fromHexString(input)), visible, response);
3232
} catch (Exception e) {
33-
logger.debug("Exception: {}", e.getMessage());
34-
try {
35-
response.getWriter().println(e.getMessage());
36-
} catch (IOException ioe) {
37-
logger.debug("IOException: {}", ioe.getMessage());
38-
}
33+
Util.processError(e, response);
3934
}
4035
}
4136

@@ -46,12 +41,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
4641
JsonFormat.merge(params.getParams(), build, params.isVisible());
4742
fillResponse(build.build().getValue(), params.isVisible(), response);
4843
} catch (Exception e) {
49-
logger.debug("Exception: {}", e.getMessage());
50-
try {
51-
response.getWriter().println(e.getMessage());
52-
} catch (IOException ioe) {
53-
logger.debug("IOException: {}", ioe.getMessage());
54-
}
44+
Util.processError(e, response);
5545
}
5646
}
5747

framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionInfoByIdSolidityServlet.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.tron.core.services.http.solidity;
22

33
import com.google.protobuf.ByteString;
4-
import java.io.IOException;
54
import javax.servlet.http.HttpServletRequest;
65
import javax.servlet.http.HttpServletResponse;
76
import lombok.extern.slf4j.Slf4j;
@@ -37,12 +36,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
3736
response.getWriter().println(JsonFormat.printToString(transInfo, visible));
3837
}
3938
} catch (Exception e) {
40-
logger.debug("Exception: {}", e.getMessage());
41-
try {
42-
response.getWriter().println(e.getMessage());
43-
} catch (IOException ioe) {
44-
logger.debug("IOException: {}", ioe.getMessage());
45-
}
39+
Util.processError(e, response);
4640
}
4741
}
4842

@@ -60,12 +54,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
6054
response.getWriter().println(JsonFormat.printToString(transInfo, params.isVisible()));
6155
}
6256
} catch (Exception e) {
63-
logger.debug("Exception: {}", e.getMessage());
64-
try {
65-
response.getWriter().println(e.getMessage());
66-
} catch (IOException ioe) {
67-
logger.debug("IOException: {}", ioe.getMessage());
68-
}
57+
Util.processError(e, response);
6958
}
7059
}
7160

framework/src/main/java/org/tron/core/services/jsonrpc/types/TransactionResult.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
77
import com.google.protobuf.ByteString;
8-
import java.util.Arrays;
98
import lombok.Getter;
109
import lombok.ToString;
10+
import org.tron.common.crypto.Rsv;
1111
import org.tron.common.utils.ByteArray;
1212
import org.tron.core.Wallet;
1313
import org.tron.core.capsule.BlockCapsule;
@@ -65,16 +65,10 @@ private void parseSignature(Transaction tx) {
6565
}
6666

6767
ByteString signature = tx.getSignature(0); // r[32] + s[32] + v[1]
68-
byte[] signData = signature.toByteArray();
69-
byte[] rByte = Arrays.copyOfRange(signData, 0, 32);
70-
byte[] sByte = Arrays.copyOfRange(signData, 32, 64);
71-
byte vByte = signData[64];
72-
if (vByte < 27) {
73-
vByte += 27;
74-
}
75-
v = ByteArray.toJsonHex(vByte);
76-
r = ByteArray.toJsonHex(rByte);
77-
s = ByteArray.toJsonHex(sByte);
68+
Rsv rsv = Rsv.fromSignature(signature.toByteArray());
69+
r = ByteArray.toJsonHex(rsv.getR());
70+
s = ByteArray.toJsonHex(rsv.getS());
71+
v = ByteArray.toJsonHex(rsv.getV());
7872
}
7973

8074
private String parseInput(Transaction tx) {

0 commit comments

Comments
 (0)