You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
1.8 KiB
90 lines
1.8 KiB
#include <stdint.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include "argon2src/argon2.h" |
|
|
|
//extern "C" __attribute__((visibility("default"))) __attribute__((used)) |
|
int32_t native_add(int32_t x, int32_t y) { |
|
return x + y; |
|
} |
|
//EOF |
|
|
|
#define HASHLEN 32 |
|
#define SALTLEN 16 |
|
#define PWD "password" |
|
|
|
|
|
// base64 encoding https://nachtimwald.com/2017/11/18/base64-encode-and-decode-in-c/ |
|
|
|
size_t b64_encoded_size(size_t inlen) |
|
{ |
|
size_t ret; |
|
|
|
ret = inlen; |
|
if (inlen % 3 != 0) |
|
ret += 3 - (inlen % 3); |
|
ret /= 3; |
|
ret *= 4; |
|
|
|
return ret; |
|
} |
|
|
|
const char b64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
|
|
|
char *b64_encode(const unsigned char *in, size_t len) |
|
{ |
|
char *out; |
|
size_t elen; |
|
size_t i; |
|
size_t j; |
|
size_t v; |
|
|
|
if (in == NULL || len == 0) |
|
return NULL; |
|
|
|
elen = b64_encoded_size(len); |
|
out = malloc(elen+1); |
|
out[elen] = '\0'; |
|
|
|
for (i=0, j=0; i<len; i+=3, j+=4) { |
|
v = in[i]; |
|
v = i+1 < len ? v << 8 | in[i+1] : v << 8; |
|
v = i+2 < len ? v << 8 | in[i+2] : v << 8; |
|
|
|
out[j] = b64chars[(v >> 18) & 0x3F]; |
|
out[j+1] = b64chars[(v >> 12) & 0x3F]; |
|
if (i+1 < len) { |
|
out[j+2] = b64chars[(v >> 6) & 0x3F]; |
|
} else { |
|
out[j+2] = '='; |
|
} |
|
if (i+2 < len) { |
|
out[j+3] = b64chars[v & 0x3F]; |
|
} else { |
|
out[j+3] = '='; |
|
} |
|
} |
|
|
|
return out; |
|
} |
|
|
|
|
|
char* hashStuff(char* hashPwd) { |
|
uint8_t hash1[HASHLEN]; |
|
uint8_t salt[SALTLEN]; |
|
memset( salt, 0x00, SALTLEN ); |
|
|
|
uint8_t *pwd = (uint8_t *)strdup(PWD); |
|
uint32_t pwdlen = strlen((char *)pwd); |
|
|
|
uint32_t t_cost = 2; // 1-pass computation |
|
uint32_t m_cost = (1<<16); // 64 mebibytes memory usage |
|
uint32_t parallelism = 1; // number of threads and lanes |
|
argon2i_hash_raw(t_cost, m_cost, parallelism, pwd, pwdlen, salt, SALTLEN, hash1, HASHLEN); |
|
char *b64ret = b64_encode(hash1, HASHLEN); |
|
return b64ret; |
|
} |
|
|
|
|
|
|
|
|
|
|