From db16d3b53473a690726a4a42fd957e4f9e9293a5 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Fri, 18 Aug 2017 16:03:46 +0100 Subject: This program really saddens me. --- type7 | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 type7 (limited to 'type7') diff --git a/type7 b/type7 new file mode 100755 index 0000000..db423cb --- /dev/null +++ b/type7 @@ -0,0 +1,75 @@ +#!/usr/bin/env ruby + +module CiscoType7 + MAGIC="dsfd;kfoA,.iyewrkldJKDHSUBsgvca69834ncxv9873254k;fg87" + + def CiscoType7.encode(pass, salt = (0..15).to_a.sample) + out = "%02d" % salt + (0...pass.length).each do |i| + j = (i + salt) % 53 + byte = pass[i].ord ^ MAGIC[j].ord + out += "%02X" % byte + end + return out + end + + def CiscoType7.decode(hash) + out = "" + salt = hash[0..1].to_i + pass = hash[2..-1] + (0...(pass.length/2)).each do |i| + j = (i + salt) % 53 + byte = pass[(i*2)..((i*2)+1)].to_i(16) ^ MAGIC[j].ord + out += byte.chr + end + return out + end + + def CiscoType7.test_equal(hash1, hash2) + return decode(hash1) == decode(hash2) + end +end + +def mode_looks_like(args) + return :equal if args.length == 2 + return :decode if args[0] =~ /^(0[0-9]|1[0-5])([0-9A-F]{2})+$/ + return :encode +end + +require 'optparse' + +options = {:mode => :magic} + +OptionParser.new do |opts| + opts.banner = "Usage: type7 [options] ARG1 [ARG2]" + + opts.on("-e", "--encode", "Encode mode") do + options[:mode] = :encode + end + + opts.on("-d", "--decode", "Decode mode") do + options[:mode] = :decode + end + + opts.on("-q", "--equal", "Test equality mode") do + options[:mode] = :equal + end + + opts.on("-h", "--help", "Display help") do + puts opts.banner + puts opts.summarize + puts "The default mode is magic mode, where type7 will work out what you want to do." + exit 0 + end +end.parse! + +options[:mode] = mode_looks_like(ARGV) if options[:mode] == :magic + +case options[:mode] +when :encode + puts CiscoType7::encode(ARGV[0]) +when :decode + puts CiscoType7::decode(ARGV[0]) +when :equal + puts CiscoType7::test_equal(ARGV[0], ARGV[1]) ? "Match" : "Differ" +end -- cgit v1.2.1