mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-04-10 04:49:25 +02:00
Exposes decryption crashing because it is used by Notification Services to check which account can decrypt a GiftWrap.
This commit is contained in:
parent
f7237b5666
commit
931081c5e7
@ -20,7 +20,6 @@
|
||||
*/
|
||||
package com.vitorpamplona.quartz.crypto.nip44
|
||||
|
||||
import android.util.Log
|
||||
import com.vitorpamplona.quartz.crypto.nip04.Nip04
|
||||
import com.vitorpamplona.quartz.events.Event
|
||||
import fr.acinq.secp256k1.Secp256k1
|
||||
@ -85,42 +84,41 @@ class Nip44(
|
||||
json: String,
|
||||
privateKey: ByteArray,
|
||||
pubKey: ByteArray,
|
||||
): String? =
|
||||
try {
|
||||
val info = Event.mapper.readValue(json, EncryptedInfoString::class.java)
|
||||
): String? {
|
||||
val info = Event.mapper.readValue(json, EncryptedInfoString::class.java)
|
||||
|
||||
when (info.v) {
|
||||
Nip04.EncryptedInfo.V -> {
|
||||
val encryptedInfo =
|
||||
Nip04.EncryptedInfo(
|
||||
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
||||
nonce = Base64.getDecoder().decode(info.nonce),
|
||||
)
|
||||
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
|
||||
return when (info.v) {
|
||||
Nip04.EncryptedInfo.V -> {
|
||||
val encryptedInfo =
|
||||
Nip04.EncryptedInfo(
|
||||
ciphertext = Base64.getDecoder().decode(info.ciphertext),
|
||||
nonce = Base64.getDecoder().decode(info.nonce),
|
||||
)
|
||||
nip04.decrypt(encryptedInfo, privateKey, pubKey)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("CryptoUtils", "NIP44: Unable to find version and decrypt $json", e)
|
||||
null
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
fun decryptNIP44FromBase64(
|
||||
payload: String,
|
||||
@ -129,18 +127,13 @@ class Nip44(
|
||||
): String? {
|
||||
if (payload.isEmpty()) return null
|
||||
|
||||
return try {
|
||||
val byteArray = Base64.getDecoder().decode(payload)
|
||||
val byteArray = Base64.getDecoder().decode(payload)
|
||||
|
||||
when (byteArray[0].toInt()) {
|
||||
Nip04.EncryptedInfo.V -> nip04.decrypt(payload, privateKey, pubKey)
|
||||
Nip44v1.EncryptedInfo.V -> v1.decrypt(payload, privateKey, pubKey)
|
||||
Nip44v2.EncryptedInfo.V -> v2.decrypt(payload, privateKey, pubKey)
|
||||
else -> null
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("CryptoUtils", "NIP44: Unable to find version and decrypt $payload", e)
|
||||
null
|
||||
return when (byteArray[0].toInt()) {
|
||||
Nip04.EncryptedInfo.V -> nip04.decrypt(payload, privateKey, pubKey)
|
||||
Nip44v1.EncryptedInfo.V -> v1.decrypt(payload, privateKey, pubKey)
|
||||
Nip44v2.EncryptedInfo.V -> v2.decrypt(payload, privateKey, pubKey)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -72,27 +72,34 @@ class GiftWrapEvent(
|
||||
onReady: (Event) -> Unit,
|
||||
) = 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(
|
||||
signer: NostrSigner,
|
||||
onReady: (Event) -> Unit,
|
||||
) {
|
||||
try {
|
||||
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)
|
||||
}
|
||||
unwrapThrowing(signer, onReady)
|
||||
} catch (e: Exception) {
|
||||
Log.w("GiftWrapEvent", "Couldn't Decrypt the content " + this.toNostrUri())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user