Advertisement
agent-0007

Create bitcoin key pair

Dec 11th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.12 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. use Crypt::PK::ECC;
  7. use Crypt::RIPEMD160;
  8. use Digest::SHA qw(sha256);
  9. use String::CRC32;
  10. use v5.14;
  11.  
  12. use bigint;
  13. use integer;
  14.  
  15. sub key2wif()
  16. {
  17.     my $ver = shift;
  18.     my $src = shift;
  19.     my $sum = substr sha256(sha256($ver.$src)), 0, 4;
  20.     return encode_base58(hex(unpack("H*","$ver$src$sum")));
  21. }
  22.  
  23. sub pub2addr()
  24. {
  25.     my $pub = shift;
  26.     my $hash= chr(0).Crypt::RIPEMD160->hash(sha256($pub));
  27.     my $sum = substr sha256(sha256($hash)), 0, 4;
  28.     my $dst = encode_base58(hex(unpack("H*","$hash$sum")));
  29.     return '1'x(34-length($dst)) . $dst;
  30. }
  31.  
  32. sub encode_base58()
  33. {
  34.     my $val = shift;
  35.     my $dst = '';
  36.     my @b58 = split '', "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
  37.     #
  38.     while( $val > 0 ){
  39.     $dst = $b58[$val%58] . $dst;
  40.     $val = int($val/58);
  41.     }
  42.     return $dst;
  43. }
  44.  
  45.     my $pk = Crypt::PK::ECC->new();
  46.     $pk->generate_key('secp256k1');
  47.  
  48.     my $pri = $pk->export_key_raw('private');
  49.     my $pub = $pk->export_key_raw('public');
  50.     print &pub2addr( $pub ).' '.&key2wif( chr(0x80), $pri )."\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement