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.
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.
Lista de versões assinada: 1.0.0 build 11
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.
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.
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).
Ignora o cache do wrangler
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.
Lista de versões assinada: 1.0.0 build 10
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.
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.
Checagem do aparelho no build de depuração também traduzida, e a ilha só sai em fundo liso
Imagens da loja: de volta a título e apoio pequeno, com o apoio no espacamento da fonte
Imagens da loja: texto num paragrafo só, no centro, e a abertura com as redes em orbita
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.
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.
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.
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.
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.
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.
Lista de versões assinada: 1.0.0 build 8
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.
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>`.
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.
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.
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).
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.
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.
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).
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).