22
22
23
23
using namespace std ;
24
24
25
+ static uint8_t constexpr SATSE_SHA256_LENGTH = 32 ;
26
+ static uint8_t constexpr SATSE_EC256_SIGNATURE_LENGTH = 64 ;
27
+ static uint8_t constexpr SATSE_EC256_PUB_KEY_LENGTH = 64 ;
28
+
25
29
SoftwareATSEClass::SoftwareATSEClass () {
26
30
27
31
}
@@ -124,9 +128,9 @@ int SoftwareATSEClass::generatePrivateKey(int keyID, byte publicKey[])
124
128
if (publicKey != nullptr ) {
125
129
modem.read_using_size ();
126
130
if (modem.write (string (PROMPT (_SOFTSE_PRI_KEY)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_PRI_KEY), keyID)) {
127
- if (res.size () >= 64 ) {
128
- memcpy (publicKey, (uint8_t *)&res[0 ], 64 );
129
- return 64 ;
131
+ if (res.size () == SATSE_EC256_PUB_KEY_LENGTH ) {
132
+ memcpy (publicKey, (uint8_t *)&res[0 ], SATSE_EC256_PUB_KEY_LENGTH );
133
+ return 1 ;
130
134
}
131
135
}
132
136
}
@@ -139,9 +143,9 @@ int SoftwareATSEClass::generatePublicKey(int keyID, byte publicKey[])
139
143
if (publicKey != nullptr ) {
140
144
modem.read_using_size ();
141
145
if (modem.write (string (PROMPT (_SOFTSE_PUB_KEY)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_PUB_KEY), keyID)) {
142
- if (res.size () >= 64 ) {
143
- memcpy (publicKey, (uint8_t *)&res[0 ], 64 );
144
- return 64 ;
146
+ if (res.size () == SATSE_EC256_PUB_KEY_LENGTH ) {
147
+ memcpy (publicKey, (uint8_t *)&res[0 ], SATSE_EC256_PUB_KEY_LENGTH );
148
+ return 1 ;
145
149
}
146
150
}
147
151
}
@@ -152,18 +156,18 @@ int SoftwareATSEClass::ecSign(int slot, const byte message[], byte signature[])
152
156
{
153
157
string res = " " ;
154
158
if ( message != nullptr ) {
155
- modem.write_nowait (string (PROMPT (_SOFTSE_S_V_BUF_SET)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_S_V_BUF_SET), 32 );
156
- if (!modem.passthrough (( uint8_t *) message, 32 )) {
159
+ modem.write_nowait (string (PROMPT (_SOFTSE_S_V_BUF_SET)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_S_V_BUF_SET), SATSE_SHA256_LENGTH );
160
+ if (!modem.passthrough (message, SATSE_SHA256_LENGTH )) {
157
161
return 0 ;
158
162
}
159
163
}
160
164
161
165
if (signature != nullptr ) {
162
166
modem.read_using_size ();
163
167
if (modem.write (string (PROMPT (_SOFTSE_SIGN_GET)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_SIGN_GET), slot)) {
164
- if (res.size () == 64 ) {
165
- memcpy (signature, (uint8_t *)&res[0 ], 64 );
166
- return 64 ;
168
+ if (res.size () == SATSE_EC256_SIGNATURE_LENGTH ) {
169
+ memcpy (signature, (uint8_t *)&res[0 ], SATSE_EC256_SIGNATURE_LENGTH );
170
+ return 1 ;
167
171
}
168
172
}
169
173
}
@@ -174,12 +178,13 @@ int SoftwareATSEClass::ecdsaVerify(const byte message[], const byte signature[],
174
178
{
175
179
string res = " " ;
176
180
if ( message != nullptr && signature!= nullptr ) {
177
- byte tmp[256 ];
178
- memcpy (tmp, message,32 );
179
- memcpy (&tmp[32 ], signature, 64 );
180
- memcpy (&tmp[32 +64 ], pubkey, 64 );
181
- modem.write_nowait (string (PROMPT (_SOFTSE_S_V_BUF_SET)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_S_V_BUF_SET), 32 +64 +64 );
182
- if (!modem.passthrough ((uint8_t *)tmp, 32 +64 +64 )) {
181
+ static const byte len = SATSE_SHA256_LENGTH + SATSE_EC256_SIGNATURE_LENGTH + SATSE_EC256_PUB_KEY_LENGTH;
182
+ byte tmp[len];
183
+ memcpy (tmp, message, SATSE_SHA256_LENGTH);
184
+ memcpy (&tmp[SATSE_SHA256_LENGTH], signature, SATSE_EC256_SIGNATURE_LENGTH);
185
+ memcpy (&tmp[SATSE_SHA256_LENGTH + SATSE_EC256_SIGNATURE_LENGTH], pubkey, SATSE_EC256_PUB_KEY_LENGTH);
186
+ modem.write_nowait (string (PROMPT (_SOFTSE_S_V_BUF_SET)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_S_V_BUF_SET), len);
187
+ if (!modem.passthrough (tmp, len)) {
183
188
return 0 ;
184
189
}
185
190
}
@@ -196,17 +201,17 @@ int SoftwareATSEClass::SHA256(const uint8_t *buffer, size_t size, uint8_t *diges
196
201
string res = " " ;
197
202
if ( buffer != nullptr ) {
198
203
modem.write_nowait (string (PROMPT (_SOFTSE_S_V_BUF_SET)), res, " %s%d\r\n " , CMD_WRITE (_SOFTSE_S_V_BUF_SET), size);
199
- if (!modem.passthrough (( uint8_t *) buffer, size)) {
204
+ if (!modem.passthrough (buffer, size)) {
200
205
return 0 ;
201
206
}
202
207
}
203
208
204
209
if (digest != nullptr ) {
205
210
modem.read_using_size ();
206
211
if (modem.write (string (PROMPT (_SOFTSE_SHA256_GET)), res, " %s" , CMD (_SOFTSE_SHA256_GET))) {
207
- if (res.size () == 32 ) {
208
- memcpy (digest, (uint8_t *)&res[0 ], 32 );
209
- return 32 ;
212
+ if (res.size () == SATSE_SHA256_LENGTH ) {
213
+ memcpy (digest, (uint8_t *)&res[0 ], SATSE_SHA256_LENGTH );
214
+ return 1 ;
210
215
}
211
216
}
212
217
}
@@ -222,7 +227,7 @@ int SoftwareATSEClass::readSlot(int slot, byte data[], int length)
222
227
if (res.size ()) {
223
228
int len = res.size () > length ? length : res.size ();
224
229
memcpy (data, (uint8_t *)&res[0 ], len);
225
- return len ;
230
+ return 1 ;
226
231
}
227
232
}
228
233
}
@@ -234,8 +239,8 @@ int SoftwareATSEClass::writeSlot(int slot, const byte data[], int length)
234
239
string res = " " ;
235
240
if ( data != nullptr && length > 0 ) {
236
241
modem.write_nowait (string (PROMPT (_SOFTSE_WRITE_SLOT)), res, " %s%d,%d\r\n " , CMD_WRITE (_SOFTSE_WRITE_SLOT), slot, length);
237
- if (modem.passthrough (( uint8_t *) data, length)) {
238
- return length ;
242
+ if (modem.passthrough (data, length)) {
243
+ return 1 ;
239
244
}
240
245
}
241
246
return 0 ;
0 commit comments