Я хочу посмотреть на библиотеки, которые могут реализовать криптографические функции для проверки цифровых подписей.
Есть ли встроенная функция проверки цифровой подписи в Daml?
Ответы (3)
В Daml нет встроенной функции для проверки подписи. Вся проверка подписи происходит через объявление подписанта в шаблонах, которые должны быть достаточно гибкими с помощью различных шаблонов. для обработки проверки подписи, однако вам нужно.
Было бы полезно понять, чего вы пытаетесь достичь с проверкой подписи.
В криптовалютах необходимы общедоступные криптографические примитивы, поскольку открытые ключи определяют личность, другими словами, подписи должны быть публично проверяемыми. В Daml это обычно не требуется, поскольку party
определяет личность, а большая часть информации по своей сути является частной для какой-либо группы. Таким образом, публичная проверка не является распространенным вариантом использования.
Один из способов использования криптографических примитивов вместе с Daml — заставить клиентов Ledger API подписывать и проверять подписи. Например, если я хочу подтвердить, что конкретный человек выполняет действие на основе имеющейся у него смарт-карты, часть рабочего процесса может включать:
- сторона
verifier
создает случайный одноразовый номер в качестве вызова, который записывается в контракт - сторона
alice
использует свою смарт-карту для подписи одноразового номера и отправляет подпись в качестве параметра выбора - сторона
verifier
проверяет подпись, чтобы продолжить рабочий процесс
Если вы используете DAML, ниже приведен код для принятия выпущенной криптовалюты, здесь вы можете добавить свою условную проверку или проверить coinAgreement.issuer
перейти здесь
Например, убедитесь, что он является и эмитентом, и владельцем
coinIssuerVerify <- queryFilter @coinIssuerVerify issuer
(\cI -> (cI.issuer == issuer) && (cI.owner == owner))
template CoinIssue
with
coinAgreement: CoinIssueAgreement
where
signatory coinAgreement.issuer
controller coinAgreement.owner can
AcceptCoinProposal
: ContractId CoinIssueAgreement
do create coinAgreement