PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo-forks/avalanchejs/src/serializable/pvm
Просмотр файла: proofOfPossession.ts
import { serializable } from '../common/types';
import { bufferToHex, concatBytes } from '../../utils/buffer';
import { bls } from '../../crypto';
import { TypeSymbols } from '../constants';
/**
* @see https://docs.avax.network/specs/platform-transaction-serialization#proof-of-possession-specification-1
*/
@serializable()
export class ProofOfPossession {
_type = TypeSymbols.ProofOfPossession;
constructor(
public readonly publicKey: Uint8Array,
public readonly signature: Uint8Array,
) {
const pk = bls.publicKeyFromBytes(publicKey);
const sig = bls.signatureFromBytes(signature);
pk.assertValidity();
sig.assertValidity();
if (!bls.verifyProofOfPossession(pk, sig, bls.publicKeyToBytes(pk))) {
throw new Error(`Invalid proof of possession`);
}
}
static fromBytes(bytes: Uint8Array): [ProofOfPossession, Uint8Array] {
const pubkey = bytes.slice(0, bls.PUBLIC_KEY_LENGTH);
const signature = bytes.slice(
bls.PUBLIC_KEY_LENGTH,
bls.PUBLIC_KEY_LENGTH + bls.SIGNATURE_LENGTH,
);
const rest = bytes.slice(bls.PUBLIC_KEY_LENGTH + bls.SIGNATURE_LENGTH);
return [new ProofOfPossession(pubkey, signature), rest];
}
toString() {
return bufferToHex(this.toBytes());
}
toBytes() {
return concatBytes(this.publicKey, this.signature);
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!