Есть ли встроенная функция проверки цифровой подписи в Daml?

Я хочу посмотреть на библиотеки, которые могут реализовать криптографические функции для проверки цифровых подписей.


person Prachi Gupta    schedule 04.02.2021    source источник


Ответы (3)


В Daml нет встроенной функции для проверки подписи. Вся проверка подписи происходит через объявление подписанта в шаблонах, которые должны быть достаточно гибкими с помощью различных шаблонов. для обработки проверки подписи, однако вам нужно.

person Anthony - Daml    schedule 05.02.2021

Было бы полезно понять, чего вы пытаетесь достичь с проверкой подписи.

В криптовалютах необходимы общедоступные криптографические примитивы, поскольку открытые ключи определяют личность, другими словами, подписи должны быть публично проверяемыми. В Daml это обычно не требуется, поскольку party определяет личность, а большая часть информации по своей сути является частной для какой-либо группы. Таким образом, публичная проверка не является распространенным вариантом использования.

Один из способов использования криптографических примитивов вместе с Daml — заставить клиентов Ledger API подписывать и проверять подписи. Например, если я хочу подтвердить, что конкретный человек выполняет действие на основе имеющейся у него смарт-карты, часть рабочего процесса может включать:

  1. сторона verifier создает случайный одноразовый номер в качестве вызова, который записывается в контракт
  2. сторона alice использует свою смарт-карту для подписи одноразового номера и отправляет подпись в качестве параметра выбора
  3. сторона verifier проверяет подпись, чтобы продолжить рабочий процесс
person user1756254    schedule 08.02.2021

Если вы используете 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
person Transformer    schedule 15.02.2021