2222
2323using namespace std ;
2424
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+
2529SoftwareATSEClass::SoftwareATSEClass () {
2630
2731}
@@ -124,9 +128,9 @@ int SoftwareATSEClass::generatePrivateKey(int keyID, byte publicKey[])
124128 if (publicKey != nullptr ) {
125129 modem.read_using_size ();
126130 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 ;
130134 }
131135 }
132136 }
@@ -139,9 +143,9 @@ int SoftwareATSEClass::generatePublicKey(int keyID, byte publicKey[])
139143 if (publicKey != nullptr ) {
140144 modem.read_using_size ();
141145 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 ;
145149 }
146150 }
147151 }
@@ -152,18 +156,18 @@ int SoftwareATSEClass::ecSign(int slot, const byte message[], byte signature[])
152156{
153157 string res = " " ;
154158 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 )) {
157161 return 0 ;
158162 }
159163 }
160164
161165 if (signature != nullptr ) {
162166 modem.read_using_size ();
163167 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 ;
167171 }
168172 }
169173 }
@@ -174,12 +178,13 @@ int SoftwareATSEClass::ecdsaVerify(const byte message[], const byte signature[],
174178{
175179 string res = " " ;
176180 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)) {
183188 return 0 ;
184189 }
185190 }
@@ -196,17 +201,17 @@ int SoftwareATSEClass::SHA256(const uint8_t *buffer, size_t size, uint8_t *diges
196201 string res = " " ;
197202 if ( buffer != nullptr ) {
198203 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)) {
200205 return 0 ;
201206 }
202207 }
203208
204209 if (digest != nullptr ) {
205210 modem.read_using_size ();
206211 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 ;
210215 }
211216 }
212217 }
@@ -222,7 +227,7 @@ int SoftwareATSEClass::readSlot(int slot, byte data[], int length)
222227 if (res.size ()) {
223228 int len = res.size () > length ? length : res.size ();
224229 memcpy (data, (uint8_t *)&res[0 ], len);
225- return len ;
230+ return 1 ;
226231 }
227232 }
228233 }
@@ -234,8 +239,8 @@ int SoftwareATSEClass::writeSlot(int slot, const byte data[], int length)
234239 string res = " " ;
235240 if ( data != nullptr && length > 0 ) {
236241 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 ;
239244 }
240245 }
241246 return 0 ;
0 commit comments