UNPKG

jsonld-signatures-merkleproof2019

Version:

A jsonld signature implementation to support MerkleProof2019 verification in Verifiable Credential context

37 lines (36 loc) 1.72 kB
import { publicKeyUInt8ArrayFromJwk, publicKeyUInt8ArrayFromMultibase } from '../utils/keyUtils.js'; import { computeBitcoinAddressFromPublicKey, computeEthereumAddressFromPublicKey } from '../utils/issuingAddress.js'; import getText from '../helpers/getText.js'; import VerifierError from '../models/VerifierError.js'; import { SupportedChains } from '@blockcerts/explorer-lookup'; function hasPublicKeyMultibase(o) { return o.publicKeyMultibase !== undefined; } export default async function deriveIssuingAddressFromPublicKey(verificationMethodPublicKey, chain) { let publicKey; if ('publicKeyJwk' in verificationMethodPublicKey) { publicKey = publicKeyUInt8ArrayFromJwk(verificationMethodPublicKey.publicKeyJwk); } else if (hasPublicKeyMultibase(verificationMethodPublicKey)) { publicKey = await publicKeyUInt8ArrayFromMultibase(verificationMethodPublicKey); } const baseError = getText('errors', 'identityErrorBaseMessage'); let address = ''; switch (chain.code) { case SupportedChains.Bitcoin: case SupportedChains.Mocknet: case SupportedChains.Testnet: address = computeBitcoinAddressFromPublicKey(publicKey, chain); break; case SupportedChains.Ethmain: case SupportedChains.Ethropst: case SupportedChains.Ethrinkeby: case SupportedChains.Ethgoerli: case SupportedChains.Ethsepolia: address = computeEthereumAddressFromPublicKey(publicKey, chain); break; default: throw new VerifierError('deriveIssuingAddressFromPublicKey', `${baseError} - ${getText('errors', 'deriveIssuingAddressFromPublicKey')}`); } return address; }