commit
55277cd965
@ -0,0 +1,24 @@
|
|||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
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 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 information, please refer to <http://unlicense.org/>
|
@ -0,0 +1,37 @@
|
|||||||
|
(def DEFAULT_ALPHABET "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
|
||||||
|
|
||||||
|
(def DEFAULT_SEPS "cfhistuCFHISTU")
|
||||||
|
|
||||||
|
(def DEFAULT_SALT "")
|
||||||
|
|
||||||
|
(def DEFAULT_MIN_LENGTH 0)
|
||||||
|
|
||||||
|
(def MIN_ALPHABET_LENGTH 16)
|
||||||
|
|
||||||
|
(def SEP_DIV (/ 7 2))
|
||||||
|
|
||||||
|
(def GUARD_DIV 12)
|
||||||
|
|
||||||
|
|
||||||
|
(defn consistent-shuffle [alphabet salt]
|
||||||
|
(if (= "" salt) alphabet
|
||||||
|
(let [alph-bytes (apply array (string/bytes alphabet))
|
||||||
|
salt-bytes (string/bytes salt)]
|
||||||
|
(var p 0)
|
||||||
|
|
||||||
|
(loop [i :down [(- (length alph-bytes) 1) 0]]
|
||||||
|
(let [v (mod i (length salt-bytes))
|
||||||
|
n (get salt-bytes v)]
|
||||||
|
(set p (+ p n))
|
||||||
|
(def j (mod (+ n v p) i))
|
||||||
|
(def a (get alph-bytes j))
|
||||||
|
(def b (get alph-bytes i))
|
||||||
|
(put alph-bytes i a)
|
||||||
|
(put alph-bytes j b)
|
||||||
|
))
|
||||||
|
|
||||||
|
(apply string/from-bytes alph-bytes))))
|
||||||
|
|
||||||
|
|
||||||
|
(defn encode [opts num]
|
||||||
|
"j0gW")
|
@ -0,0 +1,10 @@
|
|||||||
|
(declare-project
|
||||||
|
:name "hashids"
|
||||||
|
:author "Jason Staten"
|
||||||
|
:license "Unlicense"
|
||||||
|
:version "0.0.1"
|
||||||
|
:url "https://git.sr.ht/~statianzo/janet-hashids"
|
||||||
|
:repo "git+https://git.sr.ht/~/statianzo/janet-hashids")
|
||||||
|
|
||||||
|
(declare-source
|
||||||
|
:source ["hashids.janet"])
|
@ -0,0 +1,18 @@
|
|||||||
|
(import ../hashids :as h)
|
||||||
|
|
||||||
|
(assert
|
||||||
|
(= "abc" (h/consistent-shuffle "abc" "")))
|
||||||
|
|
||||||
|
(def salt "this is my salt")
|
||||||
|
|
||||||
|
(assert
|
||||||
|
(= "ba" (h/consistent-shuffle "ab" salt)))
|
||||||
|
|
||||||
|
(assert
|
||||||
|
(= "bca" (h/consistent-shuffle "abc" salt)))
|
||||||
|
|
||||||
|
(assert
|
||||||
|
(= "cadb" (h/consistent-shuffle "abcd" salt)))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
(import ../hashids :as h)
|
||||||
|
|
||||||
|
(assert
|
||||||
|
(= "j0gW" (h/encode {} 12345)))
|
||||||
|
|
||||||
|
#(assert
|
||||||
|
#(= "jR" (h/encode {} 1)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#@test "encode: single number" {
|
||||||
|
|
||||||
|
#run ./bashids -e 12345
|
||||||
|
|
||||||
|
#[[ "$output" == "j0gW" ]]
|
||||||
|
|
||||||
|
#run ./bashids -e 1
|
||||||
|
|
||||||
|
#[[ "$output" == "jR" ]]
|
||||||
|
|
||||||
|
#run ./bashids -e 22
|
||||||
|
|
||||||
|
#[[ "$output" == "Lw" ]]
|
||||||
|
|
||||||
|
#run ./bashids -e 333
|
||||||
|
|
||||||
|
#[[ "$output" == "Z0E" ]]
|
||||||
|
|
||||||
|
#run ./bashids -e 9999
|
||||||
|
|
||||||
|
#[[ "$output" == "w0rR" ]]
|
||||||
|
|
||||||
|
#}
|
Loading…
Reference in new issue