跳到主要内容

请求摘要签名

此功能基本上与 请求签名 类似,区别在于它能够简化要签名的数据,并保护签名的原始内容,请参阅本文以了解如何使用 DID Connect 签署数据摘要。 基本流程与“快速入门”章节一致,请按如下所示更改处理程序中的代码: const { toTypeInfo } = require('@arcblo

此功能基本上与 请求签名 类似,区别在于它能够简化要签名的数据,并保护签名的原始内容,请参阅本文以了解如何使用 DID Connect 签署数据摘要。

基本流程与“快速入门”章节一致,请按如下所示更改处理程序中的代码:

javascript
const { toTypeInfo } = require('@arcblock/did');
const { fromPublicKey } = require('@ocap/wallet');
const { types, getHasher } = require('@ocap/mcrypto');
const { toBase58 } = require('@ocap/util');

const logger = require('../../libs/logger');

const hasher = getHasher(types.HashType.SHA3);
const data = 'abcdefghijklmnopqrstuvwxyz'.repeat(32);

const action = 'request-digest-signature';

module.exports = {
  action,

onConnect() {

  return {

    signature: () => {

      return {

        description: 'Please sign the digest',

        digest: toBase58(hasher(data, 1)),

      };

    },

  };

},

  onAuth: ({ userDid, userPk, claims, updateSession }) => {
    const type = toTypeInfo(userDid);
    const user = fromPublicKey(userPk, type);
    const claim = claims.find((x) => x.type === 'signature');

    logger.info(`${action}.onAuth`, { userPk, userDid, claim });

    if (claim.origin) {
      if (user.verify(claim.origin, claim.sig, claim.method !== 'none') === false) {
        throw new Error('Invalid origin signature');
      }
    }

    // We do not need to hash the data when verifying
    if (claim.digest) {
      if (user.verify(claim.digest, claim.sig, false) === false) {
        throw new Error('Invalid digest signature');
      }
    }
    updateSession({
      result: {
        origin: data,
        digest: claim.digest,
        sig: claim.sig,
      },
    });
  },
};

将前端部分修改为调用以下的 DID Connect 代码:

javascript
connectApi.open({
  locale: 'en',
  action: 'request-digest-signature',
  onSuccess({ result }) {
    // signatue data will be in result
  },
  messages: {
    title: 'Request Digest Signature',
    scan: 'Please sign the digest to continue',
  },
});