Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,19 @@ data class RecipientDetailItem(
recipientFormattedName: String?,
recipientIssuerName: String?,
recipientConcatKDFAlgorithmURI: String?,
): List<RecipientDetailItem> =
listOf(
): List<RecipientDetailItem> {
val recipientCertificate = recipient.data.x509Certificate()
return listOf(
RecipientDetailItem(
icon = R.drawable.ic_m3_expand_content_48dp_wght400,
icon =
if (recipientCertificate != null) {
R.drawable.ic_m3_expand_content_48dp_wght400
} else {
0
},
label = R.string.recipient_details_name_label,
value = recipientFormattedName,
certificate = recipient.data.x509Certificate(),
certificate = recipientCertificate,
contentDescription =
if (value != null) {
"${stringResource(
Expand Down Expand Up @@ -111,5 +117,24 @@ data class RecipientDetailItem(
},
testTag = "recipientCertificateValidTo",
),
RecipientDetailItem(
icon = 0,
label = R.string.recipient_details_key_label,
value = recipient.keyLabel,
testTag = "recipientKeyLabel",
),
RecipientDetailItem(
icon = 0,
label = R.string.recipient_details_keyserver_label,
value = recipient.serverId,
testTag = "recipientServerId",
),
RecipientDetailItem(
icon = 0,
label = R.string.recipient_details_transaction_label,
value = recipient.transactionId,
testTag = "recipientTransactionId",
),
)
}
}
3 changes: 3 additions & 0 deletions app/src/main/res/values-et/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,9 @@
<string name="recipient_details_certificate_issuer_label">Adressaadi sertifikaadi väljaandja:</string>
<string name="recipient_details_concat_kdf_algorithm_url">ConcatKDF referaatmeetod:</string>
<string name="recipient_details_certificate_valid_to_label">Adressaadi sertifikaadi aegumiskuupäev:</string>
<string name="recipient_details_key_label">Adressaadi tehnilised andmed:</string>
<string name="recipient_details_keyserver_label">Serveri identifikaator:</string>
<string name="recipient_details_transaction_label">Transaktsiooni identifikaator:</string>

<!-- Signature Details -->
<string name="signature_error_details_title">Hoiatused</string>
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,9 @@
<string name="recipient_details_certificate_issuer_label">Recipient\'s Certificate issuer:</string>
<string name="recipient_details_concat_kdf_algorithm_url">ConcatKDF reference method:</string>
<string name="recipient_details_certificate_valid_to_label">Recipient\'s Certificate expiry date:</string>
<string name="recipient_details_key_label">Recipient\'s technical details:</string>
<string name="recipient_details_keyserver_label">Server identifier:</string>
<string name="recipient_details_transaction_label">Transaction identifier:</string>

<!-- Signature Details -->
<string name="signature_error_details_title">Warnings</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ class Addressee(
var validTo: Date?,
var concatKDFAlgorithmURI: String?,
) : Serializable {
var keyLabel: String? = null
var serverId: String? = null
var transactionId: String? = null

constructor(cn: String, sn: String, certType: CertType, validTo: Date?, data: ByteArray) : this(
data = data,
identifier = "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,65 +169,60 @@ class CryptoContainer
context: Context,
file: File,
): CryptoContainer {
val dataFiles = ArrayList<File>()
var recipients = ArrayList<Addressee>()
if (file.extension == CDOC1_EXTENSION) {
val cdoc1Container = openCDOC1(context, file)
dataFiles.addAll(cdoc1Container.getDataFiles())
recipients.addAll(cdoc1Container.getRecipients())
}
val cdoc1 = if (file.extension == CDOC1_EXTENSION) openCDOC1(context, file) else null

val addressees = ArrayList<Addressee>()
val cdocReader = CDocReader.createReader(file.path, null, null, null)
debugLog(LOG_TAG, "Reader created: (version ${cdocReader.version})")

withContext(IO) {
cdocReader.locks.forEach { lock ->
if (lock.isCertificate) {
var concatKDFAlgorithmURI = ""
if (!lock.isRSA) {
concatKDFAlgorithmURI = lock.getString(Lock.Params.CONCAT_DIGEST)
}
addressees.add(
Addressee(lock.label, lock.getBytes(Lock.Params.CERT), concatKDFAlgorithmURI),
)
} else if (lock.isPKI) {
addressees.add(
Addressee(lock.label, lock.getBytes(Lock.Params.RCPT_KEY), ""),
)
} else if (lock.isSymmetric) {
addressees.add(
Addressee(lock.label, "", CertType.UnknownType, null, ByteArray(0)),
)
} else {
addressees.add(Addressee("Unknown capsule", ByteArray(0), ""))
val lockAddressees =
withContext(IO) {
try {
cdocReader.locks.map(::addresseeOf)
} finally {
cdocReader.delete()
}
}
cdocReader.delete()
}

if (!recipients.isEmpty()) {
addressees.forEach { addressee ->
recipients.forEach { recipient ->
if (addressee.data.contentEquals(recipient.data)) {
recipient.concatKDFAlgorithmURI = addressee.concatKDFAlgorithmURI
}
val cdoc1Recipients = cdoc1?.getRecipients().orEmpty()
val recipients =
if (cdoc1Recipients.isNotEmpty()) {
cdoc1Recipients.onEach { recipient ->
lockAddressees
.firstOrNull { it.data.contentEquals(recipient.data) }
?.let { recipient.concatKDFAlgorithmURI = it.concatKDFAlgorithmURI }
}
} else {
lockAddressees
}
} else {
recipients = addressees
}

return create(
context,
file,
dataFiles,
cdoc1?.getDataFiles().orEmpty(),
recipients,
decrypted = false,
encrypted = true,
)
}

private fun addresseeOf(lock: Lock): Addressee =
when {
lock.isCDoc1 ->
Addressee(lock.getBytes(Lock.Params.CERT)).apply {
if (!lock.isRSA) {
concatKDFAlgorithmURI = lock.getString(Lock.Params.CONCAT_DIGEST)
}
}
lock.isPKI -> Addressee(lock.label, lock.getBytes(Lock.Params.RCPT_KEY), "")
lock.isSymmetric -> Addressee(lock.label, "", CertType.UnknownType, null, ByteArray(0))
else -> Addressee("Unknown capsule", ByteArray(0), "")
}.apply {
keyLabel = lock.label.takeIf { it.isNotBlank() }
if (lock.type == Lock.Type.SERVER) {
serverId = lock.getString(Lock.Params.KEYSERVER_ID).takeIf { it.isNotBlank() }
transactionId = lock.getString(Lock.Params.TRANSACTION_ID).takeIf { it.isNotBlank() }
}
}

@Throws(CryptoException::class)
suspend fun openCDOC1(
context: Context,
Expand Down
Loading