UNPKG

wowok

Version:

Wowok Blockchain TypeScript API

1 lines 1.97 kB
import{fromBase64,toBase64}from'../_deps/bcs/index.js';import{blake2b}from'@noble/hashes/blake2b';import{bytesToHex}from'@noble/hashes/utils';import{bcs}from'../bcs/index.js';import{normalizeWowAddress,WOW_ADDRESS_LENGTH}from'../utils/wow-types.js';import{messageWithIntent}from'./intent.js';import{SIGNATURE_FLAG_TO_SCHEME,SIGNATURE_SCHEME_TO_SIZE}from'./signature-scheme.js';export function bytesEqual(c,d){if(c===d)return!![];if(c['length']!==d['length'])return![];for(let e=0x0;e<c['length'];e++){if(c[e]!==d[e])return![];}return!![];}export class PublicKey{['equals'](a){return bytesEqual(this['toRawBytes'](),a['toRawBytes']());}['toBase64'](){return toBase64(this['toRawBytes']());}['toString'](){throw new Error('`toString`\x20is\x20not\x20implemented\x20on\x20public\x20keys.\x20Use\x20`toBase64()`\x20or\x20`toRawBytes()`\x20instead.');}['toWPublicKey'](){const a=this['toWBytes']();return toBase64(a);}['verifyWithIntent'](a,b,c){const d=messageWithIntent(c,a),e=blake2b(d,{'dkLen':0x20});return this['verify'](e,b);}['verifyPersonalMessage'](a,b){return this['verifyWithIntent'](bcs['byteVector']()['serialize'](a)['toBytes'](),b,'PersonalMessage');}['verifyTransaction'](a,b){return this['verifyWithIntent'](a,b,'TransactionData');}['verifyAddress'](a){return this['toWAddress']()===a;}['toWBytes'](){const a=this['toRawBytes'](),b=new Uint8Array(a['length']+0x1);return b['set']([this['flag']()]),b['set'](a,0x1),b;}['toWAddress'](){return normalizeWowAddress(bytesToHex(blake2b(this['toWBytes'](),{'dkLen':0x20}))['slice'](0x0,WOW_ADDRESS_LENGTH*0x2));}}export function parseSerializedKeypairSignature(a){const b=fromBase64(a),c=SIGNATURE_FLAG_TO_SCHEME[b[0x0]];switch(c){case'MultiSig':case'Falcon512':const d=SIGNATURE_SCHEME_TO_SIZE[c],e=b['slice'](0x1,b['length']-d),f=b['slice'](0x1+e['length']);return{'serializedSignature':a,'signatureScheme':c,'signature':e,'publicKey':f,'bytes':b};default:throw new Error('Unsupported\x20signature\x20scheme');}}