uint64_t data;
uint8_t *sbp; /* sboxpointer */
permute((uint8_t*)e_permtab, (uint8_t*)&r, (uint8_t*)&data);
- for(i=0; i<7; ++i)
+ for(i=0; i<6; ++i)
((uint8_t*)&data)[i] ^= kr[i];
/* Sbox substitution */
size_t in_index = 0;
// loop through the out_index to make sure we don't go too far
- for (size_t out_index=0; out_index < max_len; out_index++) {
+ for (size_t out_index=0; out_index < max_len-2; out_index++) {
// set character
sprintf(tmp++, "%u", data[in_index]);
// check if a line break is needed and we have room to print it in our array
uint8_t GetParity( uint8_t *bits, uint8_t type, int length)
{
int x;
-
- for(x= 0 ; length > 0 ; --length)
+ for( x = 0 ; length > 0 ; --length)
x += bits[length - 1];
x %= 2;
-
return x ^ type;
}
return tmp;
}
-// RotateLeft - Ultralight, Desfire
+// RotateLeft - Ultralight, Desfire, works on byte level
+// 00-01-02 >> 01-02-00
void rol(uint8_t *data, const size_t len){
uint8_t first = data[0];
for (size_t i = 0; i < len-1; i++) {
#include <time.h>
#include "data.h"
+#ifndef ROTR
+# define ROTR(x,n) (((uintmax_t)(x) >> (n)) | ((uintmax_t)(x) << ((sizeof(x) * 8) - (n))))
+#endif
#ifndef MIN
# define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif