public static function create_key_pair() { self::debug('create_key_pair'); $privBin = ''; for ($i = 0; $i < 32; $i++) { $privBin .= chr(mt_rand(0, $i ? 0xff : 0xfe)); } self::debug('create_key_pair: privBin: ' . bin2hex($privBin)); //self::debug('create_key_pair: point'); $point = Point::mul(bcmath_Utils::bin2bc("" . $privBin), self::$secp256k1_G); self::debug('create_key_pair: point: ' . $point); //self::debug('create_key_pair: pubBinStr'); $pubBinStr = "" . str_pad(bcmath_Utils::bc2bin($point->getX()), 32, "", STR_PAD_LEFT) . str_pad(bcmath_Utils::bc2bin($point->getY()), 32, "", STR_PAD_LEFT); self::debug('create_key_pair: pubBinStr: ' . bin2hex($pubBinStr)); self::$key_pair_public = hash('ripemd160', hash('sha256', $pubBinStr, true), true); self::debug('create_key_pair: key_pair_public: ' . bin2hex(self::$key_pair_public)); self::$key_pair_private = $privBin; self::debug('create_key_pair: key_pair_private: ' . bin2hex($privBin)); //return array('public' => hash('ripemd160', hash('sha256', $pubBinStr, true), true), 'private' => $privBin); }
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; }