diff options
author | Mattias Andrée <maandree@operamail.com> | 2013-02-12 17:51:38 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2013-02-12 17:51:38 +0100 |
commit | aefa9f1bd3389c0bc19f697c6ba2f6da02de1c56 (patch) | |
tree | eeb2ecf7825a98accd271d2832f391da42b462ab /vala/sha3sum.vala | |
parent | m update readme (diff) | |
download | sha3sum-aefa9f1bd3389c0bc19f697c6ba2f6da02de1c56.tar.gz sha3sum-aefa9f1bd3389c0bc19f697c6ba2f6da02de1c56.tar.bz2 sha3sum-aefa9f1bd3389c0bc19f697c6ba2f6da02de1c56.tar.xz |
a bunch of vala:fication
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
-rw-r--r-- | vala/sha3sum.vala | 212 |
1 files changed, 123 insertions, 89 deletions
diff --git a/vala/sha3sum.vala b/vala/sha3sum.vala index 4cd84f5..8093dd1 100644 --- a/vala/sha3sum.vala +++ b/vala/sha3sum.vala @@ -37,6 +37,26 @@ static void arraycopy(int8[] src, int soff, int8[] dest, int doff, int length) dest[doff + i] = src[soff + i]; } + +/** + * Copy an array segment into an array + * + * @param src The source array + * @param soff The source array offset + * @param dest The destination array + * @param doff The destination array offset + * @param length The number of elements to copy + */ +static void arraycopy_string(string[] src, int soff, string[] dest, int doff, int length) +{ + if (soff + length < doff) + for (int i = 0; i < length; i++) + dest[doff + i] = src[soff + i]; + else + for (int i = length - 1; i >= 0; i--) + dest[doff + i] = src[soff + i]; +} + /** * SHA-3/Keccak hash algorithm implementation @@ -599,15 +619,16 @@ class SHA3 : Object */ static int main(string[] cmdargs) { + string[] HEXADECA = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; + string cmd = cmdargs[0]; string[] argv = new string[cmdargs.length - 1]; - arraycopy(cmdargs, 1, argv, 0, argv.length); + arraycopy_string(cmdargs, 1, argv, 0, argv.length); - if (cmd.indexOf('/') >= 0) - cmd = cmd.substring(cmd.lastIndexOf('/') + 1); - if (cmd.endsWith(".jar")) - cmd = cmd.substring(0, cmd.length() - 4); - cmd = cmd.intern(); + if (cmd.contains("/")) + cmd = cmd.substring(cmd.last_index_of("/") + 1); + if (cmd.has_suffix(".jar")) + cmd = cmd.substring(0, cmd.length - 4); int _o, o = _o = 512; /* --outputsize */ if (cmd == "sha3-224sum") o = _o = 224; @@ -627,62 +648,60 @@ static int main(string[] cmdargs) string[] linger = null; string[] args = new string[argv.length + 1]; - arraycopy(argv, 0, args, 0, argv.length); + arraycopy_string(argv, 0, args, 0, argv.length); for (int a = 0, an = args.length; a < an; a++) { string arg = args[a]; - arg = arg == null ? null : arg.intern(); if (linger != null) { - linger[0] = linger[0].intern(); if ((linger[0] == "-h") || (linger[0] == "--help")) { - printf("\n"); - printf("SHA-3/Keccak checksum calculator\n"); - printf("\n"); - printf("USAGE: sha3sum [option...] < file\n"); - printf(" sha3sum [option...] file...\n"); - printf("\n"); - printf("\n"); - printf("OPTIONS:\n"); - printf(" -r BITRATE\n"); - printf(" --bitrate The bitrate to use for SHA-3. (default: " + _r + ")\n"); - printf(" \n"); - printf(" -c CAPACITY\n"); - printf(" --capacity The capacity to use for SHA-3. (default: " + _c + ")\n"); - printf(" \n"); - printf(" -w WORDSIZE\n"); - printf(" --wordsize The word size to use for SHA-3. (default: " + _w + ")\n"); - printf(" \n"); - printf(" -o OUTPUTSIZE\n"); - printf(" --outputsize The output size to use for SHA-3. (default: " + _o + ")\n"); - printf(" \n"); - printf(" -s STATESIZE\n"); - printf(" --statesize The state size to use for SHA-3. (default: " + _s + ")\n"); - printf(" \n"); - printf(" -i ITERATIONS\n"); - printf(" --iterations The number of hash iterations to run. (default: " + _i + ")\n"); - printf(" \n"); - printf(" -b\n"); - printf(" --binary Print the checksum in binary, rather than hexadecimal.\n"); - printf("\n"); - printf("\n"); - printf("COPYRIGHT:\n"); - printf("\n"); - printf("Copyright © 2013 Mattias Andrée (maandree@member.fsf.org)\n"); - printf("\n"); - printf("This program is free software: you can redistribute it and/or modify\n"); - printf("it under the terms of the GNU General Public License as published by\n"); - printf("the Free Software Foundation, either version 3 of the License, or\n"); - printf("(at your option) any later version.\n"); - printf("\n"); - printf("This program is distributed in the hope that it will be useful,\n"); - printf("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); - printf("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); - printf("GNU General Public License for more details.\n"); - printf("\n"); - printf("You should have received a copy of the GNU General Public License\n"); - printf("along with this program. If not, see <http://www.gnu.org/licenses/>.\n"); - printf("\n"); + stdout.printf("\n"); + stdout.printf("SHA-3/Keccak checksum calculator\n"); + stdout.printf("\n"); + stdout.printf("USAGE: sha3sum [option...] < file\n"); + stdout.printf(" sha3sum [option...] file...\n"); + stdout.printf("\n"); + stdout.printf("\n"); + stdout.printf("OPTIONS:\n"); + stdout.printf(" -r BITRATE\n"); + stdout.printf(" --bitrate The bitrate to use for SHA-3. (default: %i)\n", _r); + stdout.printf(" \n"); + stdout.printf(" -c CAPACITY\n"); + stdout.printf(" --capacity The capacity to use for SHA-3. (default: %i)\n", _c); + stdout.printf(" \n"); + stdout.printf(" -w WORDSIZE\n"); + stdout.printf(" --wordsize The word size to use for SHA-3. (default: %i)\n", _w); + stdout.printf(" \n"); + stdout.printf(" -o OUTPUTSIZE\n"); + stdout.printf(" --outputsize The output size to use for SHA-3. (default: %i)\n", _o); + stdout.printf(" \n"); + stdout.printf(" -s STATESIZE\n"); + stdout.printf(" --statesize The state size to use for SHA-3. (default: %i)\n", _s); + stdout.printf(" \n"); + stdout.printf(" -i ITERATIONS\n"); + stdout.printf(" --iterations The number of hash iterations to run. (default: %i)\n", _i); + stdout.printf(" \n"); + stdout.printf(" -b\n"); + stdout.printf(" --binary Print the checksum in binary, rather than hexadecimal.\n"); + stdout.printf("\n"); + stdout.printf("\n"); + stdout.printf("COPYRIGHT:\n"); + stdout.printf("\n"); + stdout.printf("Copyright © 2013 Mattias Andrée (maandree@member.fsf.org)\n"); + stdout.printf("\n"); + stdout.printf("This program is free software: you can redistribute it and/or modify\n"); + stdout.printf("it under the terms of the GNU General Public License as published by\n"); + stdout.printf("the Free Software Foundation, either version 3 of the License, or\n"); + stdout.printf("(at your option) any later version.\n"); + stdout.printf("\n"); + stdout.printf("This program is distributed in the hope that it will be useful,\n"); + stdout.printf("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); + stdout.printf("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); + stdout.printf("GNU General Public License for more details.\n"); + stdout.printf("\n"); + stdout.printf("You should have received a copy of the GNU General Public License\n"); + stdout.printf("along with this program. If not, see <http://www.gnu.org/licenses/>.\n"); + stdout.printf("\n"); return 2; } else @@ -693,20 +712,20 @@ static int main(string[] cmdargs) arg = null; } if ((linger[0] == "-r") || (linger[0] == "--bitrate")) - o = (s - (r = Integer.parseInt(linger[1]))) >> 1; + o = (s - (r = int.parse(linger[1]))) >> 1; else if ((linger[0] == "-c") || (linger[0] == "--capacity")) - r = s - (c = Integer.parseInt(linger[1])); + r = s - (c = int.parse(linger[1])); else if ((linger[0] == "-w") || (linger[0] == "--wordsize")) - s = (w = Integer.parseInt(linger[1])) * 25; + s = (w = int.parse(linger[1])) * 25; else if ((linger[0] == "-o") || (linger[0] == "--outputsize")) - r = s - ((o = Integer.parseInt(linger[1])) << 1); + r = s - ((o = int.parse(linger[1])) << 1); else if ((linger[0] == "-s") || (linger[0] == "--statesize")) - r = (s = Integer.parseInt(linger[1])) - (o << 1); + r = (s = int.parse(linger[1])) - (o << 1); else if ((linger[0] == "-i") || (linger[0] == "--iterations")) - i = Integer.parseInt(linger[1]); + i = int.parse(linger[1]); else { - printf("%s: unrecognised option: %s\n", cmd, linger[0]); + stdout.printf("%s: unrecognised option: %s\n", cmd, linger[0]); return 1; } } @@ -722,26 +741,26 @@ static int main(string[] cmdargs) dashed = true; else if (arg == "-") files[fptr++] = null; - else if (arg.startsWith("--")) - if (arg.indexOf('=') >= 0) - linger = new string[] { arg.substring(0, arg.indexOf('=')), arg.substring(arg.indexOf('=') + 1) }; + else if (arg.has_prefix("--")) + if (arg.contains("=")) + linger = new string[] { arg.substring(0, arg.index_of("=")), arg.substring(arg.index_of("=") + 1) }; else if (arg == "--binary") binary = true; else linger = new string[] { arg, null }; - else if (arg.startsWith("-")) + else if (arg.has_prefix("-")) { arg = arg.substring(1); - if (arg.charAt(0) == 'b') + if (arg[0] == 'b') { binary = true; arg = arg.substring(1); } - else if (arg.length() == 1) + else if (arg.length == 1) linger = new string[] { "-" + arg, null }; else - linger = new string[] { "-" + arg.charAt(0), arg.substring(1) }; + linger = new string[] { "-" + arg[0].to_string(), arg.substring(1) }; } else files[fptr++] = arg; @@ -751,8 +770,8 @@ static int main(string[] cmdargs) files[fptr++] = null; if (i < 1) { - System.err.println(cmd + ": sorry, I will only do at least one iteration!"); - System.exit(3); + stderr.printf("%s: sorry, I will only do at least one iteration!\n", cmd); + return 3; } int8[] stdin = null; @@ -766,10 +785,16 @@ static int main(string[] cmdargs) } string rc = ""; string fn = filename == null ? "/dev/stdin" : filename; - FileInputStream file = null; + FileStream file = null; try { - file = new FileInputStream(fn); + file = FileStream.open(fn, "r"); + if (file == null) + { + stderr.printf("%s: cannot read file: %s\n", cmd, filename); + fail = true; + continue; + } SHA3.initialise(r, c, o); int blksize = 4096; /** XXX os.stat(os.path.realpath(fn)).st_size; **/ int8[] chunk = new int8[blksize]; @@ -780,44 +805,53 @@ static int main(string[] cmdargs) break; SHA3.update(chunk, read); } - int8[] bs = SHA3.digest(); + int8[] bs = SHA3.digest(null, 0); for (int _ = 1; _ < i; _++) { SHA3.initialise(r, c, o); - bs = SHA3.digest(bs); + bs = SHA3.digest(bs, bs.length); } if (binary) { if (filename == null) stdin = bs; System.out.write(bs); - System.out.flush(); + stdout.flush(); } else { for (int b = 0, bn = bs.length; b < bn; b++) - { rc += "0123456789ABCDEF".charAt((bs[b] >> 4) & 15); - rc += "0123456789ABCDEF".charAt(bs[b] & 15); + { + rc += HEXADECA[(bs[b] >> 4) & 15]; + rc += HEXADECA[bs[b] & 15]; } rc += " " + (filename == null ? "-" : filename) + "\n"; if (filename == null) stdin = rc.getBytes("UTF-8"); - System.out.print(rc); - System.out.flush(); + stdout.printf("%s", rc); + stdout.flush(); } } catch - { System.err.println(cmd + ": cannot read file: " + filename); + { + stderr.printf("%s: cannot read file: %s\n", cmd, filename); fail = true; } finally - { if (file != null) + { + if (file != null) + { try - { file.close(); - } - catch - { //ignore - } } } + { + file.close(); + } + catch + { + /* ignore */ + } + } + } + } - System.out.flush(); + stdout.flush(); if (fail) return 5; |