aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--tests/test-rsa.c46
-rw-r--r--tests/test-rsa.h18
3 files changed, 47 insertions, 18 deletions
diff --git a/.gitignore b/.gitignore
index 23e4de9..20d13e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ config.log
config.status
tests/test-aes-key-wrap
tests/test-hash
+tests/test-rsa
diff --git a/tests/test-rsa.c b/tests/test-rsa.c
index 95b366a..23d1b8b 100644
--- a/tests/test-rsa.c
+++ b/tests/test-rsa.c
@@ -49,12 +49,11 @@ static int _set_register(const off_t addr,
w1[i] = value & 0xFF;
value >>= 8;
}
- printf("Setting register %#lx %s\n", (unsigned long) addr, name);
+ printf("Setting register %#lx %s...\n", (unsigned long) addr, name);
check(hal_io_write(addr, w1, sizeof(w1)));
check(hal_io_read(addr, w2, sizeof(w2)));
if (memcmp(w1, w2, sizeof(w1)) != 0)
printf("MISMATCH\n");
- printf("\n");
return 0;
}
@@ -70,11 +69,10 @@ static int _get_blockmem(const off_t reset_addr,
const size_t length)
{
size_t i;
- assert(reset_name != NULL && data_name != NULL && value != NULL && length % 4 == 0 && length <= sizeof(value));
- printf("Setting register %#lx %s\n", (unsigned long) reset_addr, reset_name);
+ assert(reset_name != NULL && data_name != NULL && value != NULL && length % 4 == 0);
+ printf("Setting register %#lx %s...\n", (unsigned long) reset_addr, reset_name);
check(hal_io_write(reset_addr, one, sizeof(one)));
- printf("\n");
- printf("Getting blockmem %#lx %s\n", (unsigned long) data_addr, data_name);
+ printf("Getting blockmem %#lx %s...\n", (unsigned long) data_addr, data_name);
for (i = 0; i < length; i += 4)
check(hal_io_read(data_addr, &value[i], 4));
return 0;
@@ -95,13 +93,11 @@ static int _set_blockmem(const off_t reset_addr,
{
size_t i;
assert(reset_name != NULL && data_name != NULL && value != NULL && buffer_length >= value_length && value_length % 4 == 0);
- printf("Setting register %#lx %s\n", (unsigned long) reset_addr, reset_name);
+ printf("Setting register %#lx %s...\n", (unsigned long) reset_addr, reset_name);
check(hal_io_write(reset_addr, one, sizeof(one)));
- printf("\n");
- printf("Setting blockmem %#lx %s\n", (unsigned long) data_addr, data_name);
+ printf("Setting blockmem %#lx %s...\n", (unsigned long) data_addr, data_name);
for (i = 0; i < value_length; i += 4)
check(hal_io_write(data_addr, &value[i], 4));
- printf("\n");
check(_get_blockmem(reset_addr, reset_name, data_addr, data_name, buffer, value_length));
if (memcmp(value, buffer, value_length))
printf("MISMATCH\n");
@@ -116,8 +112,8 @@ static int _set_blockmem(const off_t reset_addr,
#define set_register(_field_, _value_) \
_set_register(_field_, #_field_, _value_)
-#define get_blockmem(_field_, _value_) \
- _get_blockmem(_field_##_PTR_RST, #_field_ "_PTR_RST", _field_##_DATA, #_field_ "_DATA", _value_, sizeof(_value_))
+#define get_blockmem(_field_, _value_, _length_) \
+ _get_blockmem(_field_##_PTR_RST, #_field_ "_PTR_RST", _field_##_DATA, #_field_ "_DATA", _value_, _length_)
#define set_blockmem(_field_, _value_, _buffer_) \
_set_blockmem(_field_##_PTR_RST, #_field_ "_PTR_RST", _field_##_DATA, #_field_ "_DATA", (_value_).val, (_value_).len, _buffer_, sizeof(_buffer_))
@@ -130,6 +126,8 @@ static int test(const rsa_tc_t * const tc)
{
uint8_t b[4096];
+ hal_io_set_debug(1);
+
printf("Signature test for %lu-bit RSA key\n", (unsigned long) tc->size);
check(set_blockmem(MODEXP_MODULUS, tc->n, b));
@@ -145,11 +143,15 @@ static int test(const rsa_tc_t * const tc)
check(set_register(MODEXP_ADDR_CTRL, 1));
+ hal_io_set_debug(0);
+
printf("Waiting for ready\n");
check(hal_io_wait(MODEXP_ADDR_STATUS, STATUS_READY, NULL));
printf("\n");
- check(get_blockmem(MODEXP_RESULT, b));
+ hal_io_set_debug(1);
+
+ check(get_blockmem(MODEXP_RESULT, b, tc->n.len));
printf("Comparing results with known value...");
if (memcmp(b, tc->s.val, tc->s.len))
@@ -172,11 +174,15 @@ static int test(const rsa_tc_t * const tc)
check(set_register(MODEXP_ADDR_CTRL, 1));
+ hal_io_set_debug(0);
+
printf("Waiting for ready\n");
check(hal_io_wait(MODEXP_ADDR_STATUS, STATUS_READY, NULL));
printf("\n");
- check(get_blockmem(MODEXP_RESULT, b));
+ hal_io_set_debug(1);
+
+ check(get_blockmem(MODEXP_RESULT, b, tc->n.len));
printf("Comparing results with known value...");
if (memcmp(b, tc->m.val, tc->m.len))
@@ -201,13 +207,17 @@ int main(int argc, char *argv[])
check(hal_io_read(MODEXP_ADDR_VERSION, version, sizeof(version)));
printf("\"%8.8s\" \"%4.4s\"\n\n", name, version);
- hal_io_set_debug(1);
-
/*
- * Run all the test cases.
+ * Run the test cases.
*/
- for (i = 0; i < sizeof(rsa_tc)/sizeof(*rsa_tc); i++)
+#if 0
+#define N (sizeof(rsa_tc)/sizeof(*rsa_tc))
+#else
+#define N (1)
+#endif
+
+ for (i = 0; i < N; i++)
if (test(&rsa_tc[i]))
return 1;
diff --git a/tests/test-rsa.h b/tests/test-rsa.h
index b6e6ba6..5ae3ada 100644
--- a/tests/test-rsa.h
+++ b/tests/test-rsa.h
@@ -40,6 +40,24 @@ static const uint8_t n_1024[] = { /* key component n, 128 bytes */
};
static const uint8_t e_1024[] = { /* key component e, 4 bytes */
+#if 1
+ /*
+ * Test Joachim's theory that it's just a known bug with short
+ * numbers: pad e out to same size as modulus, so an extra 124
+ * leading zeros.
+ */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+#endif
0x00, 0x01, 0x00, 0x01
};
'>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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150