<?php namespace App\Tools; use Elliptic\EC; use kornrunner\Keccak; use Web3p\EthereumTx\Transaction; class Credential{ private $keyPair; public function __construct($keyPair){ $this->keyPair = $keyPair; } public function getPublicKey() { return $this->keyPair->getPublic()->encode('hex'); } public function getPrivateKey() { return $this->keyPair->getPrivate()->toString(16,2); } public function getAddress() { $pubkey = $this->getPublicKey(); return "0x" . substr(Keccak::hash(substr(hex2bin($pubkey), 1), 256), 24); } public function signTransaction($raw){ $txreq = new Transaction($raw); $privateKey = $this->getPrivateKey(); $signed = '0x' . $txreq->sign($privateKey); return $signed; } public static function new(){ $ec = new EC('secp256k1'); $keyPair = $ec->genKeyPair(); return new self($keyPair); } public static function fromKey($privateKey){ $ec = new EC('secp256k1'); $keyPair = $ec->keyFromPrivate($privateKey); return new self($keyPair); } public static function newWallet($pass,$dir){ $credential = self::new(); $private = $credential->getPrivateKey(); $wallet = KeyStore::save($private,$pass,$dir); return $wallet; } public static function fromWallet($pass,$wallet){ $private = KeyStore::load($pass,$wallet); return self::fromKey($private); } } ?>