All done except 1
[sws1-1415.git] / ass3 / mart / sws1-assignment3-s4109503-s4202015 / exercise2.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <stdbool.h>
4
5 typedef unsigned char uc;
6 typedef unsigned __int128 uint128;
7
8 void addvector(int *r, const int *a, const int *b, size_t len)
9 {
10 for(int *r2 = r; r2 < r + len; r2++)
11 *r2 = *a++ + *b++;
12 }
13
14 int memcmp(const void *s1, const void *s2, size_t n)
15 {
16 for(uc *s3 = (uc*)s1, *s4 = (uc*)s2; s3 < (uc*)s1 + n; s3++, s4++)
17 if(*s3 != *s4)
18 return *s3-*s4;
19 return 0;
20 }
21
22 int memcmp_backwards(const void *s1, const void *s2, size_t n)
23 {
24 for(uc *s3 = (uc*)s1+n, *s4 = (uc*)s2+n; s3 >= (uc*)s1; s3--, s4--)
25 if(*s3 != *s4)
26 return *s3-*s4;
27 return 0;
28 }
29
30 int memcmp_fast(const void *s1, const void *s2, size_t n)
31 {
32 uint128 *s3 = (uint128 *)s1;
33 uint128 *s4 = (uint128 *)s2;
34 unsigned int blocks = n/sizeof(uint128);
35 for(; s3<((uint128*)s1)+blocks; s3++, s4++)
36 if(*s3 != *s4)
37 return memcmp(s3, s4, sizeof(uint128));
38 return memcmp(s3, s4, n % sizeof(uint128));
39 }
40
41 int memcmp_consttime(const void *s1, const void *s2, size_t n)
42 {
43 int returnvalue = 0;
44 for(uc *s3 = (uc*)s1, *s4 = (uc*)s2; s3 < (uc*)s1 + n; s3++, s4++)
45 if(*s3 != *s4 && returnvalue == 0)
46 returnvalue = *s3 - *s4;
47 return returnvalue;
48 }