diff --git a/example/src/main/java/org/xmtp/android/example/account/WalletConnectV2Account.kt b/example/src/main/java/org/xmtp/android/example/account/WalletConnectV2Account.kt index 95e38852..e3fad92c 100644 --- a/example/src/main/java/org/xmtp/android/example/account/WalletConnectV2Account.kt +++ b/example/src/main/java/org/xmtp/android/example/account/WalletConnectV2Account.kt @@ -26,34 +26,10 @@ data class WalletConnectV2Account( ) override suspend fun sign(data: ByteArray): SignatureOuterClass.Signature? { - return signLegacy(String(data)) + return sign(String(data)) } - override fun sign(text: String): ByteArray { - val (parentChain, chainId, account) = session.namespaces.getValue(chain).accounts[0].split(":") - val requestParams = session.namespaces.getValue(chain).methods.find { method -> - method == "personal_sign" - }?.let { method -> - Modal.Params.Request( - sessionTopic = session.topic, - method = method, - params = getPersonalSignBody(text, account), - chainId = "$parentChain:$chainId" - ) - } - - runCatching { - runBlocking { - requestMethod(requestParams!!, sendSessionRequestDeepLink).first().getOrThrow() - } - }.onSuccess { - return it - }.onFailure {} - - return byteArrayOf() - } - - override suspend fun signLegacy(message: String): SignatureOuterClass.Signature? { + override suspend fun sign(message: String): SignatureOuterClass.Signature? { val (parentChain, chainId, account) = session.namespaces.getValue(chain).accounts[0].split(":") val requestParams = session.namespaces.getValue(chain).methods.find { method -> method == "personal_sign" diff --git a/library/src/androidTest/java/org/xmtp/android/library/TestHelpers.kt b/library/src/androidTest/java/org/xmtp/android/library/TestHelpers.kt index 4e72fd9f..4662fb93 100644 --- a/library/src/androidTest/java/org/xmtp/android/library/TestHelpers.kt +++ b/library/src/androidTest/java/org/xmtp/android/library/TestHelpers.kt @@ -47,12 +47,8 @@ class FakeWallet : SigningKey { return signature } - override fun sign(text: String): ByteArray { - return privateKeyBuilder.sign(text) - } - - override suspend fun signLegacy(message: String): Signature { - val signature = privateKeyBuilder.signLegacy(message) + override suspend fun sign(message: String): Signature { + val signature = privateKeyBuilder.sign(message) return signature } diff --git a/library/src/main/java/org/xmtp/android/library/Client.kt b/library/src/main/java/org/xmtp/android/library/Client.kt index 3ee28528..d5df1555 100644 --- a/library/src/main/java/org/xmtp/android/library/Client.kt +++ b/library/src/main/java/org/xmtp/android/library/Client.kt @@ -33,6 +33,7 @@ import org.xmtp.android.library.messages.encrypted import org.xmtp.android.library.messages.ensureWalletSignature import org.xmtp.android.library.messages.generate import org.xmtp.android.library.messages.getPublicKeyBundle +import org.xmtp.android.library.messages.rawData import org.xmtp.android.library.messages.recoverWalletSignerPublicKey import org.xmtp.android.library.messages.toPublicKeyBundle import org.xmtp.android.library.messages.toV2 @@ -335,14 +336,16 @@ class Client() { null } - if (v3Client?.textToSign() == null) { - v3Client?.registerIdentity(null) - } else if (account != null) { - v3Client.textToSign()?.let { - v3Client.registerIdentity(account.sign(it)) + if (v3Client != null) { + if (v3Client.textToSign() == null) { + v3Client.registerIdentity(null) + } else if (account != null) { + v3Client.textToSign()?.let { + v3Client.registerIdentity(account.sign(it)?.rawData) + } + } else { + throw XMTPException("No signer passed but signer was required.") } - } else { - Log.i(TAG, "No signer passed but signer was required.") } return v3Client diff --git a/library/src/main/java/org/xmtp/android/library/SigningKey.kt b/library/src/main/java/org/xmtp/android/library/SigningKey.kt index 11b314f4..34bd986d 100644 --- a/library/src/main/java/org/xmtp/android/library/SigningKey.kt +++ b/library/src/main/java/org/xmtp/android/library/SigningKey.kt @@ -21,9 +21,7 @@ interface SigningKey { suspend fun sign(data: ByteArray): SignatureOuterClass.Signature? - suspend fun signLegacy(message: String): SignatureOuterClass.Signature? - - fun sign(text: String): ByteArray + suspend fun sign(message: String): SignatureOuterClass.Signature? } /** @@ -52,7 +50,7 @@ fun SigningKey.createIdentity( val signatureClass = Signature.newBuilder().build() val signatureText = signatureClass.createIdentityText(key = slimKey.toByteArray()) val digest = signatureClass.ethHash(message = signatureText) - val signature = runBlocking { signLegacy(signatureText) } ?: throw XMTPException("Illegal signature") + val signature = runBlocking { sign(signatureText) } ?: throw XMTPException("Illegal signature") val signatureData = KeyUtil.getSignatureData(signature.rawData.toByteString().toByteArray()) val publicKey = Sign.recoverFromSignature( diff --git a/library/src/main/java/org/xmtp/android/library/messages/EncryptedPrivateKeyBundle.kt b/library/src/main/java/org/xmtp/android/library/messages/EncryptedPrivateKeyBundle.kt index 3e19b524..6835612e 100644 --- a/library/src/main/java/org/xmtp/android/library/messages/EncryptedPrivateKeyBundle.kt +++ b/library/src/main/java/org/xmtp/android/library/messages/EncryptedPrivateKeyBundle.kt @@ -19,7 +19,7 @@ fun EncryptedPrivateKeyBundle.decrypted( } val signature = runBlocking { - key.signLegacy( + key.sign( message = Signature.newBuilder().build() .enableIdentityText(key = v1.walletPreKey.toByteArray()), ) diff --git a/library/src/main/java/org/xmtp/android/library/messages/PrivateKey.kt b/library/src/main/java/org/xmtp/android/library/messages/PrivateKey.kt index 613f16dc..f9c0a192 100644 --- a/library/src/main/java/org/xmtp/android/library/messages/PrivateKey.kt +++ b/library/src/main/java/org/xmtp/android/library/messages/PrivateKey.kt @@ -9,7 +9,6 @@ import org.xmtp.android.library.KeyUtil import org.xmtp.android.library.SigningKey import org.xmtp.proto.message.contents.PublicKeyOuterClass import org.xmtp.proto.message.contents.SignatureOuterClass -import java.nio.charset.StandardCharsets import java.security.SecureRandom import java.util.Date @@ -93,16 +92,7 @@ class PrivateKeyBuilder : SigningKey { }.build() } - override fun sign(text: String): ByteArray { - val messageBytes: ByteArray = text.toByteArray(StandardCharsets.UTF_8) - val signature = Sign.signPrefixedMessage( - messageBytes, - ECKeyPair.create(privateKey.secp256K1.bytes.toByteArray()) - ) - return signature.r + signature.s + signature.v - } - - override suspend fun signLegacy(message: String): SignatureOuterClass.Signature { + override suspend fun sign(message: String): SignatureOuterClass.Signature { val digest = Signature.newBuilder().build().ethHash(message) return sign(digest) } diff --git a/library/src/main/java/org/xmtp/android/library/messages/PrivateKeyBundle.kt b/library/src/main/java/org/xmtp/android/library/messages/PrivateKeyBundle.kt index cafdfa88..d353f84d 100644 --- a/library/src/main/java/org/xmtp/android/library/messages/PrivateKeyBundle.kt +++ b/library/src/main/java/org/xmtp/android/library/messages/PrivateKeyBundle.kt @@ -36,7 +36,7 @@ fun PrivateKeyBundle.encrypted( val signature = runBlocking { - key.signLegacy( + key.sign( message = Signature.newBuilder().build().enableIdentityText(key = walletPreKey) ) } ?: throw XMTPException("Illegal signature") diff --git a/library/src/main/jniLibs/arm64-v8a/libuniffi_xmtpv3.so b/library/src/main/jniLibs/arm64-v8a/libuniffi_xmtpv3.so index 54422d4a..b9dd08d6 100755 Binary files a/library/src/main/jniLibs/arm64-v8a/libuniffi_xmtpv3.so and b/library/src/main/jniLibs/arm64-v8a/libuniffi_xmtpv3.so differ diff --git a/library/src/main/jniLibs/armeabi-v7a/libuniffi_xmtpv3.so b/library/src/main/jniLibs/armeabi-v7a/libuniffi_xmtpv3.so index bb407dde..d1fa2e0b 100755 Binary files a/library/src/main/jniLibs/armeabi-v7a/libuniffi_xmtpv3.so and b/library/src/main/jniLibs/armeabi-v7a/libuniffi_xmtpv3.so differ diff --git a/library/src/main/jniLibs/x86/libuniffi_xmtpv3.so b/library/src/main/jniLibs/x86/libuniffi_xmtpv3.so index 8486ddb0..10aeb510 100755 Binary files a/library/src/main/jniLibs/x86/libuniffi_xmtpv3.so and b/library/src/main/jniLibs/x86/libuniffi_xmtpv3.so differ diff --git a/library/src/main/jniLibs/x86_64/libuniffi_xmtpv3.so b/library/src/main/jniLibs/x86_64/libuniffi_xmtpv3.so index 869f60b8..2f4b88dd 100755 Binary files a/library/src/main/jniLibs/x86_64/libuniffi_xmtpv3.so and b/library/src/main/jniLibs/x86_64/libuniffi_xmtpv3.so differ diff --git a/library/src/test/java/org/xmtp/android/library/TestHelpers.kt b/library/src/test/java/org/xmtp/android/library/TestHelpers.kt index aea2b90c..8ea449f9 100644 --- a/library/src/test/java/org/xmtp/android/library/TestHelpers.kt +++ b/library/src/test/java/org/xmtp/android/library/TestHelpers.kt @@ -47,12 +47,8 @@ class FakeWallet : SigningKey { return signature } - override fun sign(text: String): ByteArray { - return privateKeyBuilder.sign(text) - } - - override suspend fun signLegacy(message: String): Signature { - val signature = privateKeyBuilder.signLegacy(message) + override suspend fun sign(message: String): Signature { + val signature = privateKeyBuilder.sign(message) return signature }