How about just seeding rand() to get a random number between 0 and 128?
Also my updated code (entropy was generated using crypto#randomBytes in node.js):
uint8_t asc2key(uint8_t l)
{
switch (l) {
case 'A': return KC_A;
case 'B': return KC_B;
case 'C': return KC_C;
case 'D': return KC_D;
case 'E': return KC_E;
case 'F': return KC_F;
case 'G': return KC_G;
case 'H': return KC_H;
case 'I': return KC_I;
case 'J': return KC_J;
case 'K': return KC_K;
case 'L': return KC_L;
case 'M': return KC_M;
case 'N': return KC_N;
case 'O': return KC_O;
case 'P': return KC_P;
case 'Q': return KC_Q;
case 'R': return KC_R;
case 'S': return KC_S;
case 'T': return KC_T;
case 'U': return KC_U;
case 'V': return KC_V;
case 'W': return KC_W;
case 'X': return KC_X;
case 'Y': return KC_Y;
case 'Z': return KC_Z;
case '1': return KC_1;
case '2': return KC_2;
case '3': return KC_3;
case '4': return KC_4;
case '5': return KC_5;
case '6': return KC_6;
case '7': return KC_7;
case '8': return KC_8;
case '9': return KC_9;
case '0': return KC_0;
case '\n': return KC_ENTER;
case 0x1B: return KC_ESCAPE;
case '\b': return KC_BSPACE;
case '\t': return KC_TAB;
case ' ': return KC_SPACE;
case '-': return KC_MINUS;
case '=': return KC_EQUAL;
case '[': return KC_LBRACKET;
case ']': return KC_RBRACKET;
case '\\': return KC_BSLASH;
case ';': return KC_SCOLON;
case '\'': return KC_QUOTE;
case '`': return KC_GRAVE;
case ',': return KC_COMMA;
case '.': return KC_DOT;
case '/': return KC_SLASH;
default: return KC_NO;
}
}
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case ENTROPY:
if (!record->event.pressed && record->tap.count > 0 && !(record->tap.interrupted)) {
// Select chars in entropy[] seed starting at pos(i)
char MAP_HEX[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
uint8_t MAP_CODE[] = { 0x27, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
char entropy[] = {
'6','5','D','A','1','9','9','8','6','B','E','7','1','0','7','A','6','1','D','4','B','D','4','3','6','B','D','1','5','9','5','C','A','3','4','C','0','7','9','3','7','F','9','F','D','D','A','4','1','0','1','3','1','F','9','C','9','0','4','6','F','1','D','0','2','5','7','C','4','2','1','C','A','B','3','1','F','F','1','8','5','0','D','1','5','B','E','8','7','5','2','3','E','7','A','2','B','2','9','3','6','5','A','E','B','E','A','3','6','B','9','7','B','C','9','4','A','A','8','0','5','8','3','D','2','E','E','F',
'7','F','9','7','3','2','0','D','9','5','B','F','5','D','0','1','7','D','6','D','B','A','1','4','5','E','2','F','C','0','9','7','A','6','E','1','F','9','1','4','A','2','3','C','8','6','5','0','4','D','2','8','1','5','1','F','F','9','8','C','1','5','2','B','7','6','B','C','B','3','C','B','B','C','A','C','B','9','A','1','D','5','0','F','5','F','E','0','A','9','1','5','5','0','2','8','9','4','F','6','7','C','8','4','2','8','C','4','E','8','6','7','3','1','3','5','2','4','0','6','C','7','5','9','1','B','8','9',
'2','1','0','6','3','7','F','6','F','2','1','C','4','3','3','6','E','6','1','0','A','E','6','7','5','A','E','E','C','D','2','3','1','D','1','6','5','D','B','7','1','6','3','3','3','9','7','A','B','5','6','C','2','1','E','1','C','F','6','B','5','C','2','D','B','8','2','0','2','E','F','E','B','1','8','5','0','7','C','D','E','0','9','D','E','4','4','C','0','A','0','D','6','1','8','1','2','4','1','2','6','7','B','F','F','5','C','D','F','E','1','6','8','F','A','6','0','6','2','7','E','2','4','C','B','2','6','7',
};
int max = sizeof(entropy) / sizeof(entropy[0]);
for (int i = 0; i < 64 * 2; i += 2) {
/** Begin loop code on i**/
// Sanitize range
i = (i <= 0) ? 0 : i;
i = (i >= max) ? max - 1 : i;
// Get char at pos(i)
int pos = (i % 2) ? i - 1 : i;
char c1 = entropy[pos];
char c2 = entropy[pos + 1];
// printf("%d: char(%c, %c) -> send(0x%x, 0x%x)\n", i, c1, c2, k1, k2);
register_code(asc2key(c1)); unregister_code(asc2key(c1));
register_code(asc2key(c2)); unregister_code(asc2key(c2));
/** End loop code on i**/
}
send_keyboard_report();
record->tap.count = 0; // ad hoc: cancel tap
}
break;
}
}