|
|
|
@ -1,6 +1,15 @@
|
|
|
|
|
* libkhash - kana-hash
|
|
|
|
|
Kana mnemonic hashes
|
|
|
|
|
|
|
|
|
|
** Example output
|
|
|
|
|
Input is "uguu~" using the default salt.
|
|
|
|
|
| Algorithm | Output |
|
|
|
|
|
|--------------------+------------------------------------------------------------------|
|
|
|
|
|
| SHA256 | おシソまツアでぅせツモァだゅノびヲろぢォセつマぶけぁユねハァがゅ |
|
|
|
|
|
| CRC32 | わぼぢァ |
|
|
|
|
|
| CRC64 | づやワえぼちレこ |
|
|
|
|
|
| SHA256 (truncated) | おシソまツアで |
|
|
|
|
|
|
|
|
|
|
** Installation
|
|
|
|
|
The dynamic library is built with ~Cargo~ and ~Rust~, and the cli example program is built with ~gcc~.
|
|
|
|
|
|
|
|
|
@ -56,29 +65,29 @@
|
|
|
|
|
|
|
|
|
|
*** Example
|
|
|
|
|
To create a context
|
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
|
#include <khash.h>
|
|
|
|
|
|
|
|
|
|
const char* input_salt = "salt!";
|
|
|
|
|
const char* input_data = "some data to hash".
|
|
|
|
|
khash_context ctx;
|
|
|
|
|
assert(khash_new_context(KHASH_ALGO_SHA256, KHASH_SALT_TYPE_SPECIFIC, input_salt, strlen(input_salt), &ctx) == KHASH_SUCCESS, "khash_new_context() failed.");
|
|
|
|
|
#+END_SRC
|
|
|
|
|
#+END_SRC
|
|
|
|
|
Find the buffer length we need.
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
|
size_t length;
|
|
|
|
|
assert(khash_length(&ctx, input_data, strlen(input_data), &length) == KHASH_SUCCESS, "khash_length() failed.");
|
|
|
|
|
#+END_SRC
|
|
|
|
|
#+END_SRC
|
|
|
|
|
Create the buffer and hash, then print the result to ~stdout~.
|
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
|
char* buffer = alloca(length+1);
|
|
|
|
|
assert(khash_do(&ctx, input_data, strlen(input_data), buffer, length) == KHASH_SUCCESS, "khash_do() failed.");
|
|
|
|
|
buffer[length] = 0; // Ensure we have a NUL terminator.
|
|
|
|
|
|
|
|
|
|
setlocale(LC_ALL, ""); //Ensure we can print UTF-8.
|
|
|
|
|
printf("Kana hash: %s\n", buffer);
|
|
|
|
|
#+END_SRC
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
*** Definitions
|
|
|
|
|
|
|
|
|
|