From 9e6160daffb25ea1d208755d55f115c786f3ea3e Mon Sep 17 00:00:00 2001 From: Leslie Krause Date: Wed, 13 Feb 2019 23:37:00 -0500 Subject: [PATCH] BUILD 01 --- README.txt | 32 ++++++++++++++++++++++++++++++ cipher.awk | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ init.lua | 47 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 README.txt create mode 100644 cipher.awk create mode 100644 init.lua diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..7ae5a08 --- /dev/null +++ b/README.txt @@ -0,0 +1,32 @@ +Simple Cipher Mod v1.0 +By Leslie E. Krause + +Simple Cipher is a lightweight, portable hashing algorithm providing a minimal degree +of security for non mission-critical data (e.g. unique, non-guessable URLs). + + +Source Code License +---------------------- + +MIT License + +Copyright (c) 2016-2019, Leslie E. Krause. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/cipher.awk b/cipher.awk new file mode 100644 index 0000000..97af265 --- /dev/null +++ b/cipher.awk @@ -0,0 +1,57 @@ +#!/bin/awk -f + +function ord_init( _low, _high, _i, _t ) +{ + _low = 0; + _high = 127; + for( _i = _low; _i <= _high; _i++ ) { + _t = sprintf( "%c", _i ); + ord_data[ _t ] = _i; + } +} + +function ord( _s, _i ) +{ + return ord_data[ substr( _s, _i, 1 ) ] +} + +function chr( _c ) +{ + return sprintf( "%c", _c ); +} + +function getToken( idx, _alphabet, _str, _base ) +{ + _alphabet = "7pdy3jbhvms5zxrftnc9gqw"; + _base = length( _alphabet ); + + idx += 4294836226; + while( idx > 0 ) { + _str = _str substr( _alphabet, idx % _base + 1, 1 ); + idx = int( idx / _base ); + } + + return _str; +} + +function getChecksum( input, _a, _b, _hash, _idx ) +{ + _a = 378551; + _b = 63689; + _hash = 0; + _i = 0; + + for( _i = 0; _i < length( input ); _i++ ) { + _hash = ( _hash * _a + ord( input, _i + 1 ) ) % 2147483648; + _a = ( _a * _b ) % 65536; + } + return 4294967295 - _hash; +} + +BEGIN { + ord_init( ); + + x = "sorcerykid"; + print getChecksum( x ) "->" getToken( getChecksum( x ) ) +} + diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..881b005 --- /dev/null +++ b/init.lua @@ -0,0 +1,47 @@ +-------------------------------------------------------- +-- Minetest :: Simple Cipher Mod v1.0 (cipher) +-- +-- See README.txt for licensing and other information. +-- Copyright (c) 2016-2019, Leslie E. Krause +-- +-- ./games/just_test_tribute/mods/cipher/init.lua +-------------------------------------------------------- + +-- alphabet soup to be used by the tokenizer +local alphabet = "pdy3jbh7vms5zxrftnc9gqw" + +cipher = { } + +cipher.tokenize = function ( hash ) + local base = #alphabet + local str = "" + + hash = hash + 4294836226 + + while hash > 0 do + local idx = hash % base + 1 + str = str .. string.sub( alphabet, idx, idx ) + hash = math.floor( hash / base ) + end + + return str +end + +cipher.get_checksum = function ( input ) + local a = 378551 + local b = 63689 + local hash = 0 + local i = 0 + + for i = 1, #input do + hash = ( hash * a + string.byte( input, i ) ) % 2147483648 + a = ( a * b ) % 65536 + end + + return 4294967295 - hash +end + +if cipher.tokenize( cipher.get_checksum( "sorcerykid" ) ) ~= "gfwd9pmd" then + -- basic sanity check upon startup + error( "[cipher] Failed to generate correct token from hash!" ) +end