public static function create_key_pair() { $privBin = ''; for ($i = 0; $i < 32; $i++) { $privBin .= chr(mt_rand(0, $i ? 0xff : 0xfe)); } $point = Point::mul(bcmath_Utils::bin2bc("" . $privBin), self::$secp256k1_G); $pubBinStr = "" . str_pad(bcmath_Utils::bc2bin($point->getX()), 32, "", STR_PAD_LEFT) . str_pad(bcmath_Utils::bc2bin($point->getY()), 32, "", STR_PAD_LEFT); $pubBinStrCompressed = (intval(substr($point->getY(), -1, 1)) % 2 == 0 ? "" : "") . str_pad(bcmath_Utils::bc2bin($point->getX()), 32, "", STR_PAD_LEFT); self::$key_pair_public = hash('ripemd160', hash('sha256', $pubBinStr, true), true); self::$key_pair_public_hex = bin2hex($pubBinStr); self::$key_pair_private = $privBin; self::$key_pair_private_hex = bin2hex($privBin); self::$key_pair_compressed_public = hash('ripemd160', hash('sha256', $pubBinStrCompressed, true), true); self::$key_pair_compressed_public_hex = bin2hex($pubBinStrCompressed); self::$key_pair_compressed_private = self::base58check_encode(self::$prefix_private, $privBin, 0x1); self::$key_pair_compressed_private_hex = self::$key_pair_private_hex; }