# 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’а ключей. Выбор можно оставить на пользователя или явно указать в запросе. Если явно указанный в запросе ключ недоступен – запрос будет отклонен с ошибкой при первичной проверке.