45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
#include "stdio.h"
|
|
#include "stdlib.h"
|
|
#include "limits.h"
|
|
#include "sodium.h"
|
|
#include "strtoui.h"
|
|
|
|
int map(int i, int i_min, int i_max, int o_min, int o_max) {
|
|
double r = (double)(o_max - o_min) / (double)(i_max - i_min);
|
|
int j = (double) (i - i_min) * r + o_min;
|
|
return j;
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
if(argc == 1) {
|
|
puts("Usage: chars [length]");
|
|
puts(" Max length is 1024");
|
|
exit(EXIT_SUCCESS);
|
|
}
|
|
|
|
unsigned int len;
|
|
enum strtoui_error error = strtoui(&len, argv[1], 10);
|
|
if(error != STRTOUI_SUCCESS){
|
|
fputs("Bad input\n", stderr);
|
|
exit(EXIT_FAILURE);
|
|
}else if (len > 1024) {
|
|
fputs("The length is to big\n", stderr);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
char lower_range = 0x20;
|
|
char upper_range= 0x7e;
|
|
|
|
char data[len];
|
|
randombytes_buf(data, sizeof len);
|
|
|
|
for(int i = 0; i < len; i++) {
|
|
int random = randombytes_uniform(upper_range);
|
|
data[i] = map(random, 0, upper_range, lower_range, upper_range);
|
|
printf("%c", data[i]);
|
|
}
|
|
printf("\n");
|
|
|
|
exit(EXIT_SUCCESS);
|
|
}
|