Exposes decryption crashing because it is used by Notification Services to check which account can decrypt a GiftWrap.
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.crypto.nip44
|
package com.vitorpamplona.quartz.crypto.nip44
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import com.vitorpamplona.quartz.crypto.nip04.Nip04
|
import com.vitorpamplona.quartz.crypto.nip04.Nip04
|
||||||
import com.vitorpamplona.quartz.events.Event
|
import com.vitorpamplona.quartz.events.Event
|
||||||
import fr.acinq.secp256k1.Secp256k1
|
import fr.acinq.secp256k1.Secp256k1
|
||||||
@@ -85,42 +84,41 @@ class Nip44(
|
|||||||
json: String,
|
json: String,
|
||||||
privateKey: ByteArray,
|
privateKey: ByteArray,
|
||||||
pubKey: ByteArray,
|
pubKey: ByteArray,
|
||||||
): String? =
|
): String? {
|
||||||
try {
|
val info = Event.mapper.readValue(json, EncryptedInfoString::class.java)
|
||||||
val info = Event.mapper.readValue(json, EncryptedInfoString::class.java)
|
|
||||||
|
|
||||||
when (info.v) {
|
return when (info.v) {
|
||||||
Nip04.EncryptedInfo.V -> {
|
Nip04.EncryptedInfo.V -> {
|
||||||
val encryptedInfo =
|
val encryptedInfo =
|
||||||
Nip04.EncryptedInfo(
|
Nip04.EncryptedInfo(
|
||||||
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
||||||
nonce = Base64.getDecoder().decode(info.nonce),
|
nonce = Base64.getDecoder().decode(info.nonce),
|
||||||
)
|
)
|
||||||
nip04.decrypt(encryptedInfo, privateKey, pubKey)
|
nip04.decrypt(encryptedInfo, privateKey, pubKey)
|
||||||
}
|
|
||||||
Nip44v1.EncryptedInfo.V -> {
|
|
||||||
val encryptedInfo =
|
|
||||||
Nip44v1.EncryptedInfo(
|
|
||||||
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
|
||||||
nonce = Base64.getDecoder().decode(info.nonce),
|
|
||||||
)
|
|
||||||
v1.decrypt(encryptedInfo, privateKey, pubKey)
|
|
||||||
}
|
|
||||||
Nip44v2.EncryptedInfo.V -> {
|
|
||||||
val encryptedInfo =
|
|
||||||
Nip44v2.EncryptedInfo(
|
|
||||||
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
|
||||||
nonce = Base64.getDecoder().decode(info.nonce),
|
|
||||||
mac = Base64.getDecoder().decode(info.mac),
|
|
||||||
)
|
|
||||||
v2.decrypt(encryptedInfo, privateKey, pubKey)
|
|
||||||
}
|
|
||||||
else -> null
|
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e("CryptoUtils", "NIP44: Unable to find version and decrypt $json", e)
|
Nip44v1.EncryptedInfo.V -> {
|
||||||
null
|
val encryptedInfo =
|
||||||
|
Nip44v1.EncryptedInfo(
|
||||||
|
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
||||||
|
nonce = Base64.getDecoder().decode(info.nonce),
|
||||||
|
)
|
||||||
|
v1.decrypt(encryptedInfo, privateKey, pubKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
Nip44v2.EncryptedInfo.V -> {
|
||||||
|
val encryptedInfo =
|
||||||
|
Nip44v2.EncryptedInfo(
|
||||||
|
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
||||||
|
nonce = Base64.getDecoder().decode(info.nonce),
|
||||||
|
mac = Base64.getDecoder().decode(info.mac),
|
||||||
|
)
|
||||||
|
v2.decrypt(encryptedInfo, privateKey, pubKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> null
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun decryptNIP44FromBase64(
|
fun decryptNIP44FromBase64(
|
||||||
payload: String,
|
payload: String,
|
||||||
@@ -129,18 +127,13 @@ class Nip44(
|
|||||||
): String? {
|
): String? {
|
||||||
if (payload.isEmpty()) return null
|
if (payload.isEmpty()) return null
|
||||||
|
|
||||||
return try {
|
val byteArray = Base64.getDecoder().decode(payload)
|
||||||
val byteArray = Base64.getDecoder().decode(payload)
|
|
||||||
|
|
||||||
when (byteArray[0].toInt()) {
|
return when (byteArray[0].toInt()) {
|
||||||
Nip04.EncryptedInfo.V -> nip04.decrypt(payload, privateKey, pubKey)
|
Nip04.EncryptedInfo.V -> nip04.decrypt(payload, privateKey, pubKey)
|
||||||
Nip44v1.EncryptedInfo.V -> v1.decrypt(payload, privateKey, pubKey)
|
Nip44v1.EncryptedInfo.V -> v1.decrypt(payload, privateKey, pubKey)
|
||||||
Nip44v2.EncryptedInfo.V -> v2.decrypt(payload, privateKey, pubKey)
|
Nip44v2.EncryptedInfo.V -> v2.decrypt(payload, privateKey, pubKey)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e("CryptoUtils", "NIP44: Unable to find version and decrypt $payload", e)
|
|
||||||
null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,27 +72,34 @@ class GiftWrapEvent(
|
|||||||
onReady: (Event) -> Unit,
|
onReady: (Event) -> Unit,
|
||||||
) = unwrap(signer, onReady)
|
) = unwrap(signer, onReady)
|
||||||
|
|
||||||
|
fun unwrapThrowing(
|
||||||
|
signer: NostrSigner,
|
||||||
|
onReady: (Event) -> Unit,
|
||||||
|
) {
|
||||||
|
plainContent(signer) { giftStr ->
|
||||||
|
val gift =
|
||||||
|
try {
|
||||||
|
fromJson(giftStr)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.w("GiftWrapEvent", "Couldn't Parse the content " + this.toNostrUri() + " " + giftStr)
|
||||||
|
return@plainContent
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gift is WrappedEvent) {
|
||||||
|
gift.host = HostStub(this.id, this.pubKey, this.kind)
|
||||||
|
}
|
||||||
|
innerEventId = gift.id
|
||||||
|
|
||||||
|
onReady(gift)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun unwrap(
|
fun unwrap(
|
||||||
signer: NostrSigner,
|
signer: NostrSigner,
|
||||||
onReady: (Event) -> Unit,
|
onReady: (Event) -> Unit,
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
plainContent(signer) { giftStr ->
|
unwrapThrowing(signer, onReady)
|
||||||
val gift =
|
|
||||||
try {
|
|
||||||
fromJson(giftStr)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.w("GiftWrapEvent", "Couldn't Parse the content " + this.toNostrUri() + " " + giftStr)
|
|
||||||
return@plainContent
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gift is WrappedEvent) {
|
|
||||||
gift.host = HostStub(this.id, this.pubKey, this.kind)
|
|
||||||
}
|
|
||||||
innerEventId = gift.id
|
|
||||||
|
|
||||||
onReady(gift)
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.w("GiftWrapEvent", "Couldn't Decrypt the content " + this.toNostrUri())
|
Log.w("GiftWrapEvent", "Couldn't Decrypt the content " + this.toNostrUri())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user