@@ -79,7 +79,7 @@ int ASN1UtilsClass::signatureLength(const byte signature[])
79
79
int rLength = 32 ;
80
80
int sLength = 32 ;
81
81
82
- while (*r == 0x00 && rLength) {
82
+ while (*r == 0x00 && rLength > 1 ) {
83
83
r++;
84
84
rLength--;
85
85
}
@@ -88,7 +88,7 @@ int ASN1UtilsClass::signatureLength(const byte signature[])
88
88
rLength++;
89
89
}
90
90
91
- while (*s == 0x00 && sLength ) {
91
+ while (*s == 0x00 && sLength > 1 ) {
92
92
s++;
93
93
sLength --;
94
94
}
@@ -102,12 +102,12 @@ int ASN1UtilsClass::signatureLength(const byte signature[])
102
102
103
103
int ASN1UtilsClass::serialNumberLength (const byte serialNumber[], int length)
104
104
{
105
- while (*serialNumber == 0 && length) {
105
+ while (*serialNumber == 0 && length > 1 ) {
106
106
serialNumber++;
107
107
length--;
108
108
}
109
109
110
- if (length && *serialNumber & 0x80 ) {
110
+ if (*serialNumber & 0x80 ) {
111
111
length++;
112
112
}
113
113
@@ -233,12 +233,12 @@ int ASN1UtilsClass::appendSignature(const byte signature[], byte out[])
233
233
int rLength = 32 ;
234
234
int sLength = 32 ;
235
235
236
- while (*r == 0 && rLength) {
236
+ while (*r == 0 && rLength > 1 ) {
237
237
r++;
238
238
rLength--;
239
239
}
240
240
241
- while (*s == 0 && sLength ) {
241
+ while (*s == 0 && sLength > 1 ) {
242
242
s++;
243
243
sLength --;
244
244
}
@@ -260,45 +260,57 @@ int ASN1UtilsClass::appendSignature(const byte signature[], byte out[])
260
260
261
261
*out++ = ASN1_INTEGER;
262
262
*out++ = rLength;
263
- if (( *r & 0x80 ) && rLength ) {
263
+ if (*r & 0x80 ) {
264
264
*out++ = 0 ;
265
265
rLength--;
266
266
}
267
267
memcpy (out, r, rLength);
268
268
out += rLength;
269
269
270
+ if (*r & 0x80 ) {
271
+ rLength++;
272
+ }
273
+
270
274
*out++ = ASN1_INTEGER;
271
275
*out++ = sLength ;
272
- if (( *s & 0x80 ) && sLength ) {
276
+ if (*s & 0x80 ) {
273
277
*out++ = 0 ;
274
278
sLength --;
275
279
}
276
280
memcpy (out, s, sLength );
277
- out += rLength;
278
-
281
+ out += sLength ;
282
+
283
+ if (*s & 0x80 ) {
284
+ sLength ++;
285
+ }
286
+
279
287
return (21 + rLength + sLength );
280
288
}
281
289
282
290
int ASN1UtilsClass::appendSerialNumber (const byte serialNumber[], int length, byte out[])
283
291
{
284
- while (*serialNumber == 0 && length) {
292
+ while (*serialNumber == 0 && length > 1 ) {
285
293
serialNumber++;
286
294
length--;
287
295
}
288
296
289
- if (length && *serialNumber & 0x80 ) {
297
+ if (*serialNumber & 0x80 ) {
290
298
length++;
291
299
}
292
300
293
301
*out++ = ASN1_INTEGER;
294
302
*out++ = length;
295
303
296
- if (length && *serialNumber & 0x80 ) {
304
+ if (*serialNumber & 0x80 ) {
297
305
*out++ = 0x00 ;
298
306
length--;
299
307
}
300
308
301
309
memcpy (out, serialNumber, length);
310
+
311
+ if (*serialNumber & 0x80 ) {
312
+ length++;
313
+ }
302
314
303
315
return (2 + length);
304
316
}
0 commit comments