jsonld-signatures-merkleproof2019
Version:
A jsonld signature implementation to support MerkleProof2019 verification in Verifiable Credential context
37 lines (36 loc) • 1.72 kB
JavaScript
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;
}