# Payment Handler # Vault.works Инструмент (далее «сайнер») создания криптографической подписи к результату криптографических функций. Инструмент является сопутствующим и работает как дополнение к основному функционалу независимого программного обеспечения, например: 1) Веб кошелек криптовалюты с предоставлением подписи через сайнер 2) Биржа с подписанием ордеров сайнером 3) Сервис документооборота с авторизацией действий криптографической подписью ПО Сайнера можно разделить на четыре составляющие: 1) Service Worker устанавливаемый в браузер для взаимодействия со сторонним ПО через протокол Web Payments API и остальными составляющими через WebRTC\HTTP. 2) ПО хранения секрета (vault) 3) Вспомогательные инструменты 4) Конечные потребители функционала (кошельки, биржи, сервисы и т.д.) ```sequence Client->Service Worker: Payment Request Service Worker->Service Worker: Create one time \naccess token Service Worker->Confirmation: Send confirmation \nrequest Confirmation->Confirmation: Validate hash \nfunction Confirmation->Confirmation: Validate data \nformat \n(well-formed payload) Confirmation->Confirmation: Show human-readable \nsigning data and \nwaiting for \nconfirmation Confirmation->Service Worker: Send signature request\n(with access token) Service Worker->Service Worker: Validate access token Service Worker->Service Worker: Find available \nprivate keys Service Worker->Wallet UI: Send list of public keys Wallet UI->Wallet UI: Create \nprivate \nkey Wallet UI->Service Worker: Send new private key or selected public key Service Worker->Service Worker: Store private key Service Worker->Service Worker: Sign hash with \nselected key Service Worker->Client: Response with signature ``` <!-- Client: отправляет запрос на подпись и ожидает получения подписи Service Worker: хранит секреты (изолировано от внешного мира, а как?) Confirmation: набор небольших веб-приложений предназначенных для первичной верификации подписываемых данных и последующего получения пользовательского разрешения на подпись Signer: графический интерфейс для получения пользовательского выбора ключа подписи --> ## Service worker От конечных потребителей функционала, ожидает два типа сообщений: 1) `canmakepayment` – для проверки наличия возможности создания подписи с определенными настройками 2) `paymentrequest` – запрос на создание подписи ### Payment Request Содержит информацию: 1) Необходимая криптографическая функция, например, sha256, sha3, keccak256 и другие 2) Ожидаемая криптографическая кривая (secp256k1, ed25519 и тд) 3) Оригинальные данные и их тип (если известный) 4) Результат хеш-функции ## Vault Программное обеспечение, установленное на мобильный телефон или настольный компьютер для надежного (изолированного) хранения ключей. Не имеет собственного интерфейса и взаимодействует с Service Worker по защищенному и шифрованному каналу с использованием секретного токена известного только хранилищу и сервис воркера. В минимальной комплекции возможно хранение данных в хранилище браузера с шифрованием пинкодом. ## Confirmation UI Базовая проверка для любого запроса – проверка соответствия, полученного (с запросом) результата хеш-функции и результата выполнения хеш-функции в Service Worker'е. Но для обеспечения положительного пользовательского опыта без ущерба безопасности, vault.works предоставляет ряд вспомогательных интерфейсов для анализа и проверки подписываемых данных (в ручном режиме). 1) Ethereum Send Ether UI (проверка и инспекция транзакции) 2) Ethereum smart contract call (проверка вызываемого метода и передаваемых аргументов) 3) Ethereum signed message (читаемый текст подписываемого сообщения) 4) EOS generic smart-contract call (проверка вызываемого метода и передаваемых аргументов) 5) EOS change account access (проверка применяемых изменений в политике безопасности аккаунта) 6) EOS stake (проверка суммы и назначения создаваемого стейка) 7) EOS ram buy\sell (проверка объема продаваемой/покупаемой памяти) 8) TRON send money (проверка и инспекция транзакции) 9) TRON smart contract call (проверка вызываемого метода и передаваемых аргументов) 10) TRON signed message (читаемый текст подписываемого сообщения) 11) Bitcoin lightning payment request (проверка и инспекция создания запроса на получения средств) 12) Bitcoin lightning send money (проверка запроса и суммы переводимых средств) Для данных, не попадающих под предоставленные анализаторы нужно использовать универсальные для каждой хеш-функции анализаторы. Универсальный анализатор позволяет просмотреть оригинальные данные в разных кодировках: binary, hex, base64, ascii, utf8. ## Wallet UI Вспомогательный интерфейс для выбора доступных для Service Worker’а ключей. Выбор можно оставить на пользователя или явно указать в запросе. Если явно указанный в запросе ключ недоступен – запрос будет отклонен с ошибкой при первичной проверке.