diff --git a/bootfs.manifest b/bootfs.manifest index 56feea1741110b4daef3333171eee2e0740a3375..51167bdd988e694b0cc056448b2a0fed4cd72f2a 100644 --- a/bootfs.manifest +++ b/bootfs.manifest @@ -115,4 +115,5 @@ /console/ifconfig.js: ../../console/ifconfig.js /console/cli.js: ../../console/cli.js /console/init.js: ../../console/init.js +/console/md5sum.js: ../../console/md5sum.js /&/etc/hosts: ../../static/& diff --git a/console/cli.js b/console/cli.js index 9467e3f639e8bf65d3e1c649c68ce7a0a57dc16d..f8e12354543110eb5d5edf2fec3ecbe03821ba61 100644 --- a/console/cli.js +++ b/console/cli.js @@ -15,6 +15,7 @@ load("/console/tests.js"); load("/console/run.js"); load("/console/ifconfig.js"); load("/console/arp.js"); +load("/console/md5sum.js"); load("/console/route.js"); // Commands @@ -29,6 +30,7 @@ _commands["run"] = run_cmd; _commands["ifconfig"] = ifconfig_cmd; _commands["arp"] = arp_cmd; _commands["route"] = route_cmd; +_commands["md5sum"] = md5sum_cmd; // Create interface to networking functions var networking_interface = new Networking(); diff --git a/console/md5sum.js b/console/md5sum.js new file mode 100644 index 0000000000000000000000000000000000000000..c4035b14934ce441a0031f44ba6682937cfa98b6 --- /dev/null +++ b/console/md5sum.js @@ -0,0 +1,41 @@ +var md5sum_cmd = { + init: function() { + this._md5 = new MD5(); + }, + + md5sum: function(filename) { + + var digest = this._md5.md5(cd.pwd() + "/" + filename); + return (digest) + }, + + invoke: function(inp) { + if (inp.length < 2) { + this.help(); + return; + } + + var digest = this.md5sum(inp[1]); + print(digest + " " + inp[1]); + + return (digest); + }, + + tab: function(inp) { + if (inp.length > 2) { + return ([]); + } + + if ((inp.length == 2) && (completed_word())) { + return ([]); + } + + return (ls.ls()); + }, + + help: function() { + print("md5sum: calculate md5 of file"); + print("usage: md5sum <filename>"); + } + +} diff --git a/java/cloudius/com/cloudius/util/MD5.java b/java/cloudius/com/cloudius/util/MD5.java new file mode 100644 index 0000000000000000000000000000000000000000..7424417623be72a56e7e4d56c828840cadb0e73a --- /dev/null +++ b/java/cloudius/com/cloudius/util/MD5.java @@ -0,0 +1,46 @@ +package com.cloudius.util; + +import java.io.FileInputStream; +import java.security.MessageDigest; + +public class MD5 { + + public static String toHex(byte[] bytes) { + final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + char[] hexChars = new char[bytes.length * 2]; + int v; + for ( int j = 0; j < bytes.length; j++ ) { + v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + + public static String md5(String filename) { + try { + FileInputStream fi = new FileInputStream(filename); + MessageDigest m = MessageDigest.getInstance("MD5"); + m.reset(); + + int chunk_sz = 0x1000; + byte bytes[] = new byte[chunk_sz]; + + int len = chunk_sz; + while (len == chunk_sz) { + len = fi.read(bytes); + m.update(bytes, 0, len); + } + fi.close(); + + // Calculate digest + byte[] digest = m.digest(); + return (toHex(digest)); + + } catch (Exception ex){ + System.out.println("md5() error:"); + ex.printStackTrace(); + return (null); + } + } +}