Skip to content

Commit dd62aeb

Browse files
committed
add Credentials.sign()
1 parent 1f55e15 commit dd62aeb

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

etherspace-java/src/main/java/cc/etherspace/Credentials.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import java.nio.charset.Charset
1111
interface Credentials {
1212
val address: String
1313
fun signTransaction(transactionObject: Web3.TransactionObject): String
14+
fun sign(messageHash: ByteArray): Web3.Signature
1415
}
1516

1617
open class WalletCredentials : Credentials {
@@ -55,6 +56,15 @@ open class WalletCredentials : Credentials {
5556
value,
5657
data)
5758

59+
override fun sign(messageHash: ByteArray): Web3.Signature {
60+
val prefixMsgHash = Web3.attachEthereumSignedMessage(messageHash)
61+
val ecKeyPair = ECKeyPair.create(Numeric.toBigInt(privateKey))
62+
val signatureData = Sign.signMessage(prefixMsgHash, ecKeyPair)
63+
return Web3.Signature(signatureData.v,
64+
signatureData.r,
65+
signatureData.s)
66+
}
67+
5868
override fun equals(other: Any?): Boolean {
5969
if (this === other) return true
6070
if (javaClass != other?.javaClass) return false

etherspace-java/src/main/java/cc/etherspace/Web3.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cc.etherspace
22

3+
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils
34
import org.web3j.tx.Contract
45
import org.web3j.tx.ManagedTransaction
56
import org.web3j.utils.Numeric
@@ -115,5 +116,11 @@ interface Web3 {
115116

116117
companion object {
117118
private const val SIGNATURE_LENGTH = 65
119+
120+
fun attachEthereumSignedMessage(messageHash: ByteArray): ByteArray? {
121+
val prefix = "\u0019Ethereum Signed Message:\n".toByteArray(Charsets.UTF_8)
122+
val prefixSize = ByteUtils.concatenate(prefix, messageHash.size.toString().toByteArray(Charsets.UTF_8))
123+
return ByteUtils.concatenate(prefixSize, messageHash)
124+
}
118125
}
119126
}

etherspace-java/src/main/java/cc/etherspace/web3j/Web3jAdapter.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Web3jAdapter(val web3j: Web3j) : Web3 {
2828

2929
class Web3jPersonal : Web3.Personal {
3030
override fun ecRecover(dataThatWasSigned: ByteArray, signature: Web3.Signature): String {
31-
val prefixMsgHash = attachEthereumSignedMessage(dataThatWasSigned)
31+
val prefixMsgHash = Web3.attachEthereumSignedMessage(dataThatWasSigned)
3232
val publicKey = Sign.signedMessageToKey(prefixMsgHash,
3333
Sign.SignatureData(signature.v, signature.r, signature.s))
3434
return Keys.toChecksumAddress(Numeric.prependHexPrefix(Keys.getAddress(publicKey)))
@@ -43,7 +43,7 @@ class Web3jAdapter(val web3j: Web3j) : Web3 {
4343
* from: https://github.com/EuroHsu/TestLibrary/blob/6883528dbcddb283f14955620f042b4ea3253624/src/main/java/com/example/testlibrary/cryptos/signer.java
4444
*/
4545
override fun sign(messageHash: ByteArray, privateKey: String): Web3.Signature {
46-
val prefixMsgHash = attachEthereumSignedMessage(messageHash)
46+
val prefixMsgHash = Web3.attachEthereumSignedMessage(messageHash)
4747
val ecKeyPair = ECKeyPair.create(Numeric.toBigInt(privateKey))
4848
val signatureData = Sign.signMessage(prefixMsgHash, ecKeyPair)
4949
return Web3.Signature(signatureData.v,
@@ -205,11 +205,5 @@ class Web3jAdapter(val web3j: Web3j) : Web3 {
205205
Web3j.build(httpService)
206206
}
207207
}
208-
209-
private fun attachEthereumSignedMessage(messageHash: ByteArray): ByteArray? {
210-
val prefix = "\u0019Ethereum Signed Message:\n".toByteArray(Charsets.UTF_8)
211-
val prefixSize = ByteUtils.concatenate(prefix, messageHash.size.toString().toByteArray(Charsets.UTF_8))
212-
return ByteUtils.concatenate(prefixSize, messageHash)
213-
}
214208
}
215209
}

0 commit comments

Comments
 (0)