UNPKG

@ckb-ccc/core

Version:

Core of CCC - CKBer's Codebase

34 lines (33 loc) 1.1 kB
import { secp256k1 } from "@noble/curves/secp256k1"; import { ripemd160 } from "@noble/hashes/ripemd160"; import { sha256 } from "@noble/hashes/sha256"; import { magicHash } from "bitcoinjs-message"; import bs58check from "bs58check"; import { bytesConcat, bytesFrom } from "../../bytes/index.js"; import { hexFrom } from "../../hex/index.js"; /** * @public */ export function btcEcdsaPublicKeyHash(publicKey) { return ripemd160(sha256(bytesFrom(publicKey))); } /** * @public */ export function btcP2pkhAddressFromPublicKey(publicKey, network) { return bs58check.encode(bytesConcat([network], btcEcdsaPublicKeyHash(publicKey))); } /** * @public */ export function btcPublicKeyFromP2pkhAddress(address) { return hexFrom(bs58check.decode(address).slice(1)); } /** * @public */ export function verifyMessageBtcEcdsa(message, signature, publicKey) { const challenge = typeof message === "string" ? message : hexFrom(message).slice(2); const rawSign = bytesFrom(signature, "base64").slice(1); return secp256k1.verify(bytesFrom(rawSign), magicHash(challenge), publicKey); }