File: utils.c

package info (click to toggle)
haskell-securemem 0.1.10-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 64 kB
  • sloc: haskell: 123; ansic: 108; makefile: 2
file content (129 lines) | stat: -rw-r--r-- 2,251 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

#define SCRUBVAR 0xa5a5a5a5a5a5a5a5ULL

void finalizer_scrub8(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	sz_ptr[0] = SCRUBVAR;
}

void finalizer_scrub16(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	sz_ptr[0] = SCRUBVAR;
	sz_ptr[1] = SCRUBVAR;
}

void finalizer_scrub24(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	sz_ptr[0] = SCRUBVAR;
	sz_ptr[1] = SCRUBVAR;
	sz_ptr[2] = SCRUBVAR;
}

void finalizer_scrub32(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	sz_ptr[0] = SCRUBVAR;
	sz_ptr[1] = SCRUBVAR;
	sz_ptr[2] = SCRUBVAR;
	sz_ptr[3] = SCRUBVAR;
}

void finalizer_scrub64(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	sz_ptr[0] = SCRUBVAR;
	sz_ptr[1] = SCRUBVAR;
	sz_ptr[2] = SCRUBVAR;
	sz_ptr[3] = SCRUBVAR;
	sz_ptr[4] = SCRUBVAR;
	sz_ptr[5] = SCRUBVAR;
	sz_ptr[6] = SCRUBVAR;
	sz_ptr[7] = SCRUBVAR;
}

void finalizer_scrub128(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	int i;

	for (i = 0; i < 16; i++)
		sz_ptr[i] = SCRUBVAR;
}

void finalizer_scrub256(void *ptr)
{
	uint64_t *sz_ptr = (uint64_t *) ptr;
	int i;

	for (i = 0; i < 32; i++)
		sz_ptr[i] = SCRUBVAR;
}

void finalizer_scrubvar(uint32_t sz, void *ptr)
{
	memset(ptr, 0xa5, sz);
}

int compare_eq(uint32_t size, uint8_t *p1, uint8_t *p2)
{
	uint32_t i;
	int acc = 1;

	for (i = 0; i < size; i++)
		acc &= (p1[i] == p2[i]);
	return acc;
}

#define COMPARE_LOOP(n) \
	uint64_t *sp1, *sp2; \
	int i, acc; \
	sp1 = (uint64_t *) p1; sp2 = (uint64_t *) p2; \
	acc = 1; \
	for (i = 0; i < n; i++) \
		acc &= (sp1[i] == sp2[i]); \
	return acc; \

int compare_eq8(uint8_t *p1, uint8_t *p2)
{
	uint64_t *sp1, *sp2;
	sp1 = (uint64_t *) p1; sp2 = (uint64_t *) p2;
	return (p1[0] == p2[0]);
}

int compare_eq16(uint8_t *p1, uint8_t *p2)
{
	uint64_t *sp1, *sp2;
	sp1 = (uint64_t *) p1; sp2 = (uint64_t *) p2;
	return ((p1[0] == p2[0]) & (p1[1] == p2[1])) == 1;
}

int compare_eq24(uint8_t *p1, uint8_t *p2)
{
	COMPARE_LOOP(3);
}

int compare_eq32(uint8_t *p1, uint8_t *p2)
{
	COMPARE_LOOP(4);
}

int compare_eq64(uint8_t *p1, uint8_t *p2)
{
	COMPARE_LOOP(8);
}

int compare_eq128(uint8_t *p1, uint8_t *p2)
{
	COMPARE_LOOP(16);
}

int compare_eq256(uint8_t *p1, uint8_t *p2)
{
	COMPARE_LOOP(32);
}