--- import { createVerificationSummary, logLevel, type Summary, VerificationResult, } from "@lib/pgp/summary"; import type { Verification } from "@lib/pgp/verify"; import { Level } from "@utils/index"; import type { NonEmptyArray } from "@utils/iterator"; interface Props extends Verification {} let [errors, keys] = await createVerificationSummary(Astro.props); const failed = errors.filter((summary) => "reason" in summary); if (failed.length > 0) { errors = failed as NonEmptyArray; } let worst; for (const summary of errors) { if (worst === undefined) { worst = summary; } const { result } = summary; const a = logLevel(worst.result); const b = logLevel(result); if (a[0] === b[0] && !a[1] && b[1]) { worst = summary; } else if (b[0] === Level.ERROR) { worst = summary; } else if (a[0] === Level.OK && b[0] === Level.WARN) { worst = summary; } } let lvl: [Level, boolean] | undefined = undefined; let label; let title = ""; let content; const error = worst && "reason" in worst ? worst.reason : undefined; if (worst) { lvl = logLevel(worst.result); switch (lvl[0]) { case Level.OK: { label = "OK"; break; } case Level.WARN: { label = "Aviso"; break; } case Level.ERROR: { label = "Erro"; break; } default: { throw new Error("Unreachable"); } } switch (worst.result) { case VerificationResult.NO_SIGNATURE: { title = "Assinatura não encontrada"; content = `

Este blog post não foi assinado.

Não existe forma de verificar a autentacidade do autor ou a integridade do texto escrito.

`; break; } case VerificationResult.MISSING_KEY: { title = "Chave não encontrada"; content = `

Este blog post está assinado digitalmente, porém a chave pública com KeyID 0x${worst.keyID} com que foi assinado não foi encontrada no chaveiro sendo impossível verificar a assinatura, quer dizer, não existe forma de verificar a autentacidade do autor ou a integridade do texto escrito.

Procure a chave noutro sítio da internet para conseguir fazer a verificação manualmente.

`; break; } case VerificationResult.SIGNATURE_CORRUPTED: { title = "Assinatura corrumpida"; content = `

Exite um ficheiro que supostamente é a assinatura, mas ele está corrompido ou com um formato inválido.

Não existe forma de verificar a autentacidade do autor ou a integridade do texto escrito.

`; break; } case VerificationResult.SIGNATURE_COULD_NOT_BE_CHECKED: { title = "Erro desconhecido"; content = `

A assinatura foi encontrada mas ocorreu um erro inesperado durante a verificação.

Não existe forma de verificar a autentacidade do autor ou a integridade do texto escrito.

`; break; } case VerificationResult.BAD_SIGNATURE: { title = "Assinatura inválida"; content = `

Existe uma assinatura digital porém o conteúdo da blog post não corresponde à assinatura. Talvez o texto tenha sido alterado sem ter sido criada uma nova assinatura.

Pode tentar verificar a assinatura com versões antigas do blog post, mas esta versão não pode ser verificada quanto à autentacidade do autor ou à integridade do texto escrito.

`; break; } case VerificationResult.UNTRUSTED_KEY: { title = "Assinatura válida (chave não confiada)"; content = `

A assinatura digital é criptograficamente válida, porém a chave utilizada não é suficientemente confiada pelo servidor. Mas podes ter a certeza que o dono da chave pública é a mesma pessoa que assinou este blog post.

`; break; } case VerificationResult.TRUSTED_KEY: { title = "Assinatura válida"; content = `

A assinatura digital é criptograficamente válida. O dono da chave pública é a mesma pessoa que assinou este blog post exatamente como ele está, sem alterações.

`; break; } case VerificationResult.EXPIRATION_AFTER_SIGNATURE: { break; } case VerificationResult.EXPIRATION_BEFORE_SIGNATURE: { break; } case VerificationResult.REVOCATION_AFTER_SIGNATURE: { break; } case VerificationResult.REVOCATION_BEFORE_SIGNATURE: { break; } case VerificationResult.KEY_DOES_NOT_SIGN: { break; } default: { throw new Error("Unreachable"); } } } --- { lvl && (
{label?.toUpperCase()}: {title.toUpperCase()} {error &&
{error}
}
) }