Anonymous user
Bitcoin/address validation: Difference between revisions
Update Seed7 example
m (minor tidy) |
(Update Seed7 example) |
||
Line 1,970:
=={{header|Seed7}}==
The Seed7 library [http://seed7.sourceforge.net/libraries/encoding.htm encoding.s7i] defines
the function [http://seed7.sourceforge.net/libraries/encoding.htm#fromBase58(in_string) fromBase58],
which decodes a Base58 encoded string.
The Seed7 library [http://seed7.sourceforge.net/libraries/msgdigest.htm msgdigest.s7i] defines
the function [http://seed7.sourceforge.net/libraries/msgdigest.htm#sha256(in_var_string) sha256]
which computes a SHA-256 message digest.
No external library is needed.
<lang seed7>$ include "seed7_05.s7i";
include "msgdigest.s7i";
include "encoding.s7i";
const
local
var
begin
if not succeeds(decoded := fromBase58(stri)) then
elsif length(decoded)
state :=
end for;▼
▲ if digit <> 0 then
▲ if state = "" and sha256(sha256(decoded[.. 21]))[.. 4] <> decoded[22 ..] then
state := "bad digest";
writeln(" *** Expected " <& literal(expected) <& " for " <& stri <& ", but got " <& literal(state) <& ".");
end if;
end func;
const proc: main is func
const array string: tests is [] ("1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9",▼
begin
▲ if state = "" then
assertBitcoin("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62j", "bad digest");
▲ writeln(test <& ": okay");
assertBitcoin("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62X", "bad digest");
assertBitcoin("1ANNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", "bad digest");
▲ writeln(test <& ": " <& state);
assertBitcoin("oMRDCDfyQhEerkaSmwCfSPqf3MLgBwNvs", "not version 0");
assertBitcoin("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62iz", "wrong length");
assertBitcoin("1BGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", "bad digest");
assertBitcoin("1A Na15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", "bad char");
assertBitcoin("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62!", "bad char");
assertBitcoin("1AGNa15ZQXAZUgFiqJ3i7Z2DPU2J6hW62i", "bad digest");
assertBitcoin("1111111111111111111114oLvT2", "okay");
assertBitcoin("17NdbrSGoUotzeGCcMMCqnFkEvLymoou9j", "okay");
assertBitcoin("1badbadbadbadbadbadbadbadbadbadbad", "wrong length");
assertBitcoin("BZbvjr", "wrong length");
assertBitcoin("i55j", "wrong length");
assertBitcoin("16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM", "okay");
end func;</lang>
{{out}}
<pre>
1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9: okay
1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nJ9: bad digest
▲1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i: okay
1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i: okay
▲1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nJ9: bad digest
1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62j: bad digest
▲1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62I: bad char
1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62X: bad digest
1ANNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i: bad digest
oMRDCDfyQhEerkaSmwCfSPqf3MLgBwNvs: not version 0
1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62iz: wrong length
1BGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i: bad digest
1A Na15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i: bad char
1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62I: bad char
1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62!: bad char
1AGNa15ZQXAZUgFiqJ3i7Z2DPU2J6hW62i: bad digest
1111111111111111111114oLvT2: okay
17NdbrSGoUotzeGCcMMCqnFkEvLymoou9j: okay
1badbadbadbadbadbadbadbadbadbadbad: wrong length
BZbvjr: wrong length
i55j: wrong length
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM: okay
</pre>
|