50 lines
2.5 KiB
Text
50 lines
2.5 KiB
Text
$ include "seed7_05.s7i";
|
|
include "msgdigest.s7i";
|
|
include "encoding.s7i";
|
|
|
|
const func boolean: validBitcoinAddress (in string: address) is func
|
|
result
|
|
var boolean: isValid is FALSE;
|
|
local
|
|
var string: decoded is "";
|
|
begin
|
|
if succeeds(decoded := fromBase58(address)) and
|
|
length(decoded) = 25 and decoded[1] = '\0;' and
|
|
sha256(sha256(decoded[.. 21]))[.. 4] = decoded[22 ..] then
|
|
isValid := TRUE;
|
|
end if;
|
|
end func;
|
|
|
|
const proc: checkValidationFunction (in string: address, in boolean: expected) is func
|
|
local
|
|
var boolean: isValid is FALSE;
|
|
begin
|
|
isValid := validBitcoinAddress(address);
|
|
writeln((address <& ": ") rpad 37 <& isValid);
|
|
if isValid <> expected then
|
|
writeln(" *** Expected " <& expected <& " for " <& address <& ", but got " <& isValid <& ".");
|
|
end if;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
begin
|
|
checkValidationFunction("1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9", TRUE); # okay
|
|
checkValidationFunction("1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nJ9", FALSE); # bad digest
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", TRUE); # okay
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62j", FALSE); # bad digest
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62X", FALSE); # bad digest
|
|
checkValidationFunction("1ANNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", FALSE); # bad digest
|
|
checkValidationFunction("oMRDCDfyQhEerkaSmwCfSPqf3MLgBwNvs", FALSE); # not version 0
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62iz", FALSE); # wrong length
|
|
checkValidationFunction("1BGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", FALSE); # bad digest
|
|
checkValidationFunction("1A Na15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", FALSE); # bad char
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62I", FALSE); # bad char
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62!", FALSE); # bad char
|
|
checkValidationFunction("1AGNa15ZQXAZUgFiqJ3i7Z2DPU2J6hW62i", FALSE); # bad digest
|
|
checkValidationFunction("1111111111111111111114oLvT2", TRUE); # okay
|
|
checkValidationFunction("17NdbrSGoUotzeGCcMMCqnFkEvLymoou9j", TRUE); # okay
|
|
checkValidationFunction("1badbadbadbadbadbadbadbadbadbadbad", FALSE); # wrong length
|
|
checkValidationFunction("BZbvjr", FALSE); # wrong length
|
|
checkValidationFunction("i55j", FALSE); # wrong length
|
|
checkValidationFunction("16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM", TRUE); # okay
|
|
end func;
|