Pular para o conteúdo
Escalibur Wallet

Novidades

O que mudou.

Versão 1.0.0 (build 11). Em preparação para a App Store.

Esta página é gerada a cada publicação, do histórico da main no GitHub: cada item é uma entrega, com o que mudou e o commit. Os textos do repositório são escritos sem acento; aqui o acento volta onde não há dúvida.

Imagem de compartilhamento com versão no endereço, para as previas buscarem a nova

Commit 9a101c6 no GitHub

Chave da lista de versões com nome neutro: escalibur-mac-1

O que mudou

O mesmo par de chaves do Secure Enclave do Mac do dono, com outro nome a partir do build 11. A assinatura vale só para o texto da lista, então nada foi assinado de novo: a lista do site leva a mesma assinatura sob os dois nomes (os builds 7 a 10 só conhecem o antigo), e a lista que vai dentro do app, agora num arquivo próprio, só sob o novo. O versoes.swift escreve as duas e confere que tem o mesmo texto; um teste confere as duas como os builds novos e antigos conferem.

Commit dd14e8a no GitHub

Checagem sem a frase do jailbreak escondido, e a imagem de compartilhamento com os dois selos

O que mudou

A checagem do aparelho terminada diz só que tudo foi checado aqui, sem internet, e que nada sai do aparelho. A imagem de compartilhamento do site: a foto a esquerda, e a direita o ícone, o nome, uma linha e os selos da App Store e do Google Play na mesma altura.

Commit db97fdb no GitHub

Abertura com o video novo das moedas em volta da espada

O que mudou

O mesmo formato: 7,5 s em HEVC, sem áudio, e a emenda do loop misturando o fim com o começo em meio segundo. O quadro parado sai do início do video.

Commit 013db36 no GitHub

Imagem de compartilhamento limpa: o iPhone no gráfico do Bitcoin, o ícone e o nome

O que mudou

Até o app estar na loja, "Em breve na App Store" no lugar do selo oficial (o script gera a versão com o selo com o argumento selo).

Commit fcd40a2 no GitHub

Dominio escaliburwallet.com: site na Cloudflare, e-mail de suporte do dominio

O que mudou

O site sai também em escaliburwallet.com, por um Worker de arquivos estaticos na Cloudflare, com cabecalhos de segurança e o www levando ao dominio. O app nunca fala com esse servidor: a lista de versões e a auditoria continuam vindo do GitHub. O contato do app, da Política, dos Termos, do site e das licencas passa a ser support@escaliburwallet.com (security@ para relato de falha). A imagem de compartilhamento do site e a foto da campanha da mao tirando o iPhone da pedra.

Commit b03e70e no GitHub

Checagem volta a só perguntar se há texto copiado, e tools/loja/encaixar.swift

O que mudou

A limpeza da área de transferência na demonstração quebrava a regra do verificar.sh de que a checagem nunca mexe no conteúdo; sai. encaixar.swift poe imagens de campanha em 9:16 no tamanho de 6,9" da App Store, cortando as laterais.

Commit ec6679a no GitHub

Checagem: "Instalado pela App Store", e -checagem-aparelho para as capturas da loja

O que mudou

O item da origem deixa de citar o TestFlight na tela (a mensagem de quando falha continua citando). Só na depuração, -checagem-aparelho mostra o jailbreak e a origem como num iPhone com o app da loja e limpa a área de transferência do simulador.

Commit a7dae66 no GitHub

Checagem do aparelho no build de depuração também traduzida, e a ilha só sai em fundo liso

Commit bbfbc91 no GitHub

Imagens da loja: de volta a título e apoio pequeno, com o apoio no espacamento da fonte

Commit 41ce1c2 no GitHub

Imagens da loja: texto num paragrafo só, no centro, e a abertura com as redes em orbita

Commit 3f50181 no GitHub

XRP Ledger de novo com três servidores: a 51234 da Ripple liberada, e as imagens da loja

O que mudou

A trava de porta da auditoria 6 recusava s1 e s2.ripple.com na 51234, a porta de JSON-RPC deles: a XRP Ledger ficava com um servidor só e a leitura por dois parava (troca, ordem limite e envio, no build 9). A 51234 vale só para os dois, e um teste novo confere todo endereço escrito no código contra a regra do HTTPClient.

As capturas da loja saem em português e inglês: a revisão com a placa aberta, a troca de XRP que a carteira de teste consegue fazer, o envelope parado no trancado, e a ilha dinâmica coberta quando a captura vem do simctl.

Commit d34ef07 no GitHub

Build 9: o tour antes do PIN, os textos novos da abertura e a lista de versões com o build 9

O que mudou

A abertura diz que as chaves ficam criptografadas e que a Escalibur não tem como ajudar a recuperar a senha da carteira; o tour vem antes do PIN e o segundo passo virou "Você no controle"; o rodape do PIN aparece inteiro; o "Antes de ver as palavras" fica centralizado, com os textos novos do print e dos 2 minutos; o aceite diz "criptografada" e "A Escalibur não tem acesso". As capturas da loja ganham o idioma e a revisão do envio, e tools/loja monta as imagens no aparelho do site.

Commit 9eedd95 no GitHub

Auditoria 6: quatro revisores, os achados e os consertos

O que mudou

Ligar o Super Security já em "Bloquear as carteiras" volta a pedir as palavras (A6-04); travar fecha as folhas de PIN, passphrase e voz, e gravar travado da erro (A6-05); as cotações diretas contam como uma fonte só (A6-06); escolha fraca de palavras recusada (A6-08); palavras coreanas de 33 bytes (A6-09); busca de Receber com cara de frase não sai do iPhone (A6-11); versoes.swift confere antes de assinar, respeita o limiar e confere a lista dentro do app pronto (A6-12); verificar.sh com qualquer .package(, Package.resolved e a lista de símbolos (A6-14, A6-15); relato de falha por e-mail (A6-16). Os altos esperam a decisão do dono.

Commit 45ed4c3 no GitHub

Auditoria 5: o que mudou desde a auditoria 4, os achados e os consertos

O que mudou
  • docs/auditoria-5.md: o que foi olhado, os achados (medios: a janela de senha do iOS nas chaves do PIN, o build 8 fora do pipeline, uma chave só de assinatura, o texto do código auditável), os consertos e os testes.
  • A lista de versões assinada vai dentro do app (recurso do commit): a conferência da versão instalada não depende mais de rede.
  • O teste do núcleo da lista confere também o build do projeto: subir o build pede a assinatura antes.
  • Criar carteira: a escolha de 12 ou 24 palavras sai de tras do rodape.
  • Checagem do aparelho: o VoiceOver lê o horario sem o nome do ícone.
  • Testes de interface desatualizados pelas telas novas, ajustados.

Commit ae15289 no GitHub

Super Security sem o pedido de senha do iOS, "Antes de ligar" novo, saldo livre na troca e ordens de 10 em 10

O que mudou
  • Chaves do PIN (kpin, kand.pin.a/b): o embrulho buscava a chave do Secure Enclave sem a senha de aplicativo, e no iPhone o iOS abria "Digite a senha para Escalibur" ao ligar e ao desligar o Super Security (e podia abrir ao criar ou trocar o PIN). Agora o embrulho dessas chaves leva a senha e proibe interface (`wrap(_:slot:password:)`); o embrulho sem senha recusa os slots do PIN e também não mostra interface. O duble dos testes acusa qualquer embrulho de chave do PIN sem a senha. O simulador não tem senha de aplicativo: só o próximo build no iPhone confirma.
  • Folha do PIN no Super Security: o motivo e, na linha de baixo, "Depois do PIN, o Face ID confirma que é você." (sem o vao e sem o "Super Security:" de novo).
  • "Antes de ligar": o emblema do PIN e do rosto, o resumo do que muda, a política numa linha que abre as três opções, e o deslizar de pixels. "Continuar normal" sem o "redefinir pode fechar", que vale para as três e fica na tela da política.
  • Troca imediata: o disponível desconta o que as ordens abertas ainda vao vender, como na ordem limite ("Livre X, o resto em ordens").
  • Ordens abertas: "(N)" no título e de 10 em 10, com "Carregar mais".
  • Testes: o do bloqueio rola até a linha da política; o das ordens aceita o contador.

Commit eba1479 no GitHub

Ordem criada mais acima, "Ordem cancelada", Safe Keyboard com barra, segurar sem lupa e o aviso da passphrase errada

O que mudou
  • Ordem limite criada, troca enviada e cancelamento: o selo e o texto um pouco acima do meio; o cancelamento diz "Ordem cancelada" (os textos de baixo continuam dizendo o que ainda pode acontecer).
  • Safe Keyboard de texto com a barra do alto, como o das palavras: o nome do teclado e o "Pronto", sem sugestão (ela mostraria a senha). A barra de espaço diz "espaço".
  • Campo de senha: segurar para ver não abre mais a lupa do iOS (os gestos do campo esperam o segurar falhar).
  • Passphrase errada: o aviso aparece no alto da tela, por cima de tudo (o erro de cada tela ficava no fim dela, fora da vista). Criar uma carteira com passphrase conta a tentativa sem o aviso.
  • A folha da passphrase com o selo menor, para o "Continuar" caber acima do teclado.

Commit 8c5ff77 no GitHub

Envelope abrindo em pixels, bloqueio com deslizar, auditoria no app e alertas até 7 moedas

O que mudou
  • Abrir um envelope: a cena de pixels do lacre tocada ao contrario (EnvelopePixelScene opening): o anel apaga, o cadeado se desfaz, a aba abre, os pixels sobem e se montam nas palavras, e o cifrado vira palavra de exemplo. Título "Abrir um envelope criptografado" e o caminho inteiro no texto.
  • "Só a sua senha abre": as palavras reveladas no mesmo fundo de antes.
  • Bloquear as carteiras: título "Trancar de vez se o Face ID mudar", texto reescrito e no meio, e o deslizar de pixels no lugar do botão (volta ao começo se a ativação para com aviso). Sair do bloqueio escolhido pede o PIN também com o Super Security desligado. O motivo embaixo do PIN: "Para trocar o que fazer se o Face ID mudar."
  • Auditar o código: a página de auditoria do site dentro do app, no navegador da Apple (SiteBrowser, SFSafariViewController em outro processo, só https://tmzzjr.github.io). O repositório esta privado, e a auditoria do site e pública. A regra 21 do verificar.sh e da doc de segurança: WKWebView e afins continuam proibidos; o Safari da Apple só nesse arquivo.
  • Alertas de preço: no máximo 7 moedas (eram 30), com "N de 7" e o aviso quando enche.
  • Detalhe da transação: "Conferida na rede" em cinza, sem o fundo do selo.
  • A lista de carteiras com o fundo de antes.
  • Teste: a auditoria abre dentro do app; o do bloqueio desliza.

Commit 45183a4 no GitHub

Leva de telas: Super Security, teclado travado, 10 minutos, passphrase, envelope e o bloqueio

O que mudou

Super Security

  • Sem a etiqueta "Desligado" (a de ligado fica); o aviso do rosto novo e o do "esperar 24 horas" curtos, com o risco de cada opção na tela da política.
  • Com o Super Security ligado, o Safe Keyboard não desliga: sem o globo no teclado das palavras e nos outros campos, e sem "Usar o teclado do iPhone nesta tela".
  • "Bloquear as carteiras": sem as três carteiras embaixo; quadro 2 com o Face ID e um anel de pixels acendendo como um cadastro de rosto, e o "+" no fim; quadro 3 com o selo de pixels e o cadeado vermelho; quadro 4 com a folha das palavras sendo anotada (PaperScribble). O botão diz "Ativar o bloqueio".

Telas

  • Bloquear o app: 10 minutos também.
  • Passphrase: a tela de criar com o conteúdo mais para cima; o selo de pixels (CipherEmblem) nas telas de digitar, de conferir e na que pede antes de mover saldo.
  • "Confira a seed phrase de X" no lugar de "Confira a cópia de X".
  • A lista de carteiras com o mesmo fundo da tela de copiar endereço.

Envelope

  • Pixels de fundo do cartão e do desenho do envelope em cinza escuro, quase preto; as palavras reveladas num fundo mais escuro; abrindo, sem a faixa de varredura.
  • O selo de pixels nas telas de digitar a senha (criar, repetir e abrir), que agora rolam com o botão preso acima do teclado; título e texto no meio; a cena de "Criptografar a senha da carteira" sem o alto cortado.
  • "Segure para usar mesmo assim" volta aos pixels, com a frente reta (PixelFill.tilt 0).

Flags de teste: `-tela bloquear`, `-quadros` (os quadros parados) e `-segure <fracao>`.

Commit 8cd8c3d no GitHub

Lista de versões assinada: 1.0.0 build 7, pela chave mac-thomaz-1

O que mudou
  • site/versoes.json, assinado no Secure Enclave do Mac do dono, com o Touch ID. O site pública a lista; o app confere com as chaves compiladas.
  • Teste do núcleo: a lista do site passa pelo mesmo código do app (ReleaseManifest.verified, ReleaseKeys) e autoriza a versão do project.yml.

Commit e675b31 no GitHub

Carteira: o copiar endereço vai para a lista de carteiras

O que mudou

O botão de copiar sai do alto da Carteira e fica na lista que abre no nome da carteira, em cada carteira, ao lado do lapis (por cima da linha, com o toque próprio, sem escolher a carteira). Abre a mesma tela de copiar, rede por rede. O teste abre a lista pelo nome (`carteira-nome`) e tira a foto dela.

Commit 0ba5f3e no GitHub

Leva de telas: envelope, segurar em verde, alertas, placa, copiar, receber, adicionar moeda e Carteira

O que mudou

Envelope

  • Sortear com os pixels do "o app sorteia" (DrawPixels) no lugar do dado, nos dois botões.
  • A tela de criar a senha diz que a próxima pede a senha de novo; a de repetir ganhou o voltar (o fechar vai para a direita), e as palavras sorteadas voltam as mesmas.
  • Sem a frase do pendrive na folha da senha fraca.
  • "Criptografar a senha da carteira" com o "Como funciona" e a cena mais para cima.

Telas

  • HoldButton: o verde enche da esquerda, com a ponta direita levemente arredondada, e o texto escurece onde o verde passou (no lugar dos pixels). `-segure <fracao>` no teste.
  • Alertas de preço: o check das moedas escolhidas em verde.
  • A chapa de aco: a borda de baixo mais fina, com teto ao arrastar para cima.
  • "Copiar as palavras" de fundo branco (PrimaryButton light).
  • Receber: "Contrato da moeda X", sem o "quem envia tem de usar este".
  • Adicionar moeda: logos de moedas girando em volta do "+" (os que vem no app).
  • Carteira: o copiar menor, logo depois da setinha do nome.

"Abrir em outro app" saiu dos Ajustes e foi para o site, na página Redes e moedas, com as regras e cada rede (os dados que estavam em RecoveryGuideView). O texto de depois das palavras aponta para o site.

Testes: o do envelope segura até o fim, repete e volta; o dos alertas acompanha as moedas que já vem ligadas (estava desatualizado: esperava a lista vazia).

Commit 20afc04 no GitHub

Trava de alerta: passo único sem número, Face ID automático espera a trava sair

O que mudou
  • UpdateAlarmView: com um passo só, o texto vai sem o número.
  • UpdateAlarmWindow.covering: alguma trava na tela. O LockView não abre o Face ID automático por cima dela.
  • Conferência periodica com a sessão.

Commit 9b6dcb9 no GitHub

Trava de alerta: quadro com os pixels, textos novos e rodape sem deslizar

O que mudou
  • O quadro "Seus fundos estão seguros" com o selo de pixels que cifram (CipherEmblem verde) no lugar do cadeado; "cifradas somente no chip", sem "os fundos só se movem com elas".
  • "Não atualize o app por enquanto, até a Escalibur confirmar a versão nova"; "não visualizar as palavras da carteira" no lugar de "não usar a carteira".
  • UpdateAlarmView sem `onEmergency` mostra um rodape fixo no lugar do deslizar.
  • Traduções em inglês; testes de interface da trava.

Commit 90b70a1 no GitHub

Trava de alerta: rótulo e título no meio, texto novo, some sozinha, e nenhum build sem a lista

O que mudou
  • A trava da versão não confirmada: "Alerta de segurança" e o título centralizados e em branco; sem o passo de não abrir a versão nova; "a versão possivelmente adulterada não chegou a rodar aqui"; e o aviso de que o alerta some sozinho quando a Escalibur confirmar.
  • Some sozinha depois da conferência da Escalibur: versão assinada, ou a de fora trocada na loja por uma assinada, e a próxima conferência tira a trava. Com a trava na tela, a conferência repete a cada volta para a frente (mínimo de 1 minuto) e a cada 5 minutos.
  • UpdateAlarmView recebe o texto de quem trava; UpdateAlarmWindow com o nível da janela.
  • Conferência periodica (StoreSync) ao voltar para a frente.
  • release.yml: o job assinatura recusa a tag (testflight-* e v*) se o site/versoes.json do commit não trouxer a versão com aquele build; docs/release.md com a ordem (autorizar, lista na main, tag).

Commit 975c3fc no GitHub

Versão não confirmada: trava o app inteiro com o alerta de tentativa de hack

O que mudou
  • No lugar do aviso na Carteira, uma tela numa janela própria, acima de tudo (até do pedido de PIN): "Detectamos uma tentativa de hack", o que aconteceu, que a equipe da Escalibur esta investigando, que as palavras continuam cifradas no chip e a versão adulterada não rodou ali, e o que fazer. O deslizar de pixels "Usar em emergência" tira a trava até o app fechar.
  • O alarme fica guardado entre aberturas (Preferences.updateAlarm): sem internet, a trava continua; só uma conferência que responde a tira.
  • CipherEmblem com a cor do símbolo; o escudo vermelho na trava.
  • Teste de interface: a trava aparece, o deslizar tira, a carteira atende. Traduções em inglês.
  • docs/seguranca.md §8.6, docs/release.md e a página de segurança falam da trava.
  • O teste do prazo mole da troca com folga para o runner do CI carregado: a fonte lenta em 3,2 s, entre o prazo mole e o duro, e a parcial antes de 2,9 s (no CI saiu em 2,6 s).

Commit af33ab9 no GitHub