-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.php
More file actions
57 lines (39 loc) · 1.64 KB
/
Copy pathexample.php
File metadata and controls
57 lines (39 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
require_once("vendor/autoload.php");
use Elliptic\EdDSA;
function encodeBase64($addressWIF) {
$addressWIF = base64_encode(hex2bin($addressWIF));
$addressWIF = str_replace('O', '#', $addressWIF);
$addressWIF = str_replace('l', '@', $addressWIF);
$addressWIF = str_replace('/', '$', $addressWIF);
return $addressWIF;
}
function checksum($hex){
$checksum = hash('sha256', hash('sha256', hex2bin($hex), true), true);
$checksum = substr(bin2hex($checksum), 0, 8);
return $checksum;
}
function generateAddressWIF($unencodedAddress){
$prefix = "584043fe"; //BASE64 HEX WEBD$
$suffix = "FF"; //ending BASE64 HEX
$unencodedAddress = "00" . $unencodedAddress;
$checksum = checksum($unencodedAddress);
$addressWIF = $prefix . $unencodedAddress . $checksum . $suffix;
return encodeBase64($addressWIF);
}
function genwallet($privateKey){
$ec = new EdDSA('ed25519');
$kp = $ec->keyFromSecret($privateKey);
$privateKey = $privateKey . $kp->getPublic('hex');
$publicKey = $kp->getPublic('hex');
$privateKeyAndVersion = "80" . $privateKey;
$checksum = checksum($privateKeyAndVersion);
$privateKeyWIF = $privateKeyAndVersion . $checksum;
$unencodedAddress = hash('ripemd160', hash('sha256', hex2bin($publicKey), true));
$addressWIF = generateAddressWIF($unencodedAddress);
$wallet = '{"version":"0.1","address":"' . $addressWIF . '","publicKey":"' . $publicKey . '","privateKey":"' . $privateKeyWIF . '"}';
return $wallet;
}
$privateKey = bin2hex(openssl_random_pseudo_bytes(32));
$wallet = genwallet($privateKey);
echo $wallet;