From 20e0eea9e5da183cc865aef22e65b84db07d5d59 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Fri, 12 Jul 2019 23:21:55 +1000 Subject: Added ch-2 p5 solution --- challenge-016/ruben-westerberg/perl5/ch-2.pl | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 challenge-016/ruben-westerberg/perl5/ch-2.pl diff --git a/challenge-016/ruben-westerberg/perl5/ch-2.pl b/challenge-016/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..b9b9e40927 --- /dev/null +++ b/challenge-016/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,38 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use bigint;; +use Digest::SHA qw(sha256 sha256_hex); +use v5.26; + +my @addresses=@ARGV; +@addresses= qw<1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 + 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy> unless @addresses; + +my %b; +for ("1".."9","A".."H","J".."N","P".."Z","a".."k","m".."z") { + state $i=0; + $b{$_}=$i++; +} + +for (@addresses) { + print "Testing Address: $_\n"; + if (/[IlO]/) { print "Invalid characters found: $_\n"; next}; + my $sum=0; + my @a=reverse (split ("", $_)); + while (my ($k,$v)=each @a) { + my $in=$b{$v}; + $sum+=$in *(58**$k);; + } + my $bytes=$sum->as_bytes(); + unless (length $bytes <= 25) { print "Invalid length: $_\n";next } + my $buff=''; + vec($buff,$_,8)=0x00 for (0..24); + my $offset=length($buff)-length($bytes); + substr($buff,$offset,length($bytes),$bytes); + my $check= substr(sha256(sha256(substr $buff,0,21)),0,4); + my $inCheck=substr($buff,21,4); + unless ($check eq $inCheck) { print "Check sum mismatch: $_\n";next}; + print "Address OK: $_\n\n"; + +} -- cgit