Mercurial > dropbear
comparison dss.c @ 1692:1051e4eea25a
Update LibTomMath to 1.2.0 (#84)
* update C files
* update other files
* update headers
* update makefiles
* remove mp_set/get_double()
* use ltm 1.2.0 API
* update ltm_desc
* use bundled tommath if system-tommath is too old
* XMALLOC etc. were changed to MP_MALLOC etc.
author | Steffen Jaeckel <s@jaeckel.eu> |
---|---|
date | Tue, 26 May 2020 17:36:47 +0200 |
parents | 5916af64acd4 |
children |
comparison
equal
deleted
inserted
replaced
1691:2d3745d58843 | 1692:1051e4eea25a |
---|---|
282 * to the buffer */ | 282 * to the buffer */ |
283 void buf_put_dss_sign(buffer* buf, const dropbear_dss_key *key, const buffer *data_buf) { | 283 void buf_put_dss_sign(buffer* buf, const dropbear_dss_key *key, const buffer *data_buf) { |
284 unsigned char msghash[SHA1_HASH_SIZE]; | 284 unsigned char msghash[SHA1_HASH_SIZE]; |
285 unsigned int writelen; | 285 unsigned int writelen; |
286 unsigned int i; | 286 unsigned int i; |
287 size_t written; | |
287 DEF_MP_INT(dss_k); | 288 DEF_MP_INT(dss_k); |
288 DEF_MP_INT(dss_m); | 289 DEF_MP_INT(dss_m); |
289 DEF_MP_INT(dss_temp1); | 290 DEF_MP_INT(dss_temp1); |
290 DEF_MP_INT(dss_temp2); | 291 DEF_MP_INT(dss_temp2); |
291 DEF_MP_INT(dss_r); | 292 DEF_MP_INT(dss_r); |
338 } | 339 } |
339 | 340 |
340 buf_putstring(buf, SSH_SIGNKEY_DSS, SSH_SIGNKEY_DSS_LEN); | 341 buf_putstring(buf, SSH_SIGNKEY_DSS, SSH_SIGNKEY_DSS_LEN); |
341 buf_putint(buf, 2*SHA1_HASH_SIZE); | 342 buf_putint(buf, 2*SHA1_HASH_SIZE); |
342 | 343 |
343 writelen = mp_unsigned_bin_size(&dss_r); | 344 writelen = mp_ubin_size(&dss_r); |
344 dropbear_assert(writelen <= SHA1_HASH_SIZE); | 345 dropbear_assert(writelen <= SHA1_HASH_SIZE); |
345 /* need to pad to 160 bits with leading zeros */ | 346 /* need to pad to 160 bits with leading zeros */ |
346 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) { | 347 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) { |
347 buf_putbyte(buf, 0); | 348 buf_putbyte(buf, 0); |
348 } | 349 } |
349 if (mp_to_unsigned_bin(&dss_r, buf_getwriteptr(buf, writelen)) | 350 if (mp_to_ubin(&dss_r, buf_getwriteptr(buf, writelen), writelen, &written) |
350 != MP_OKAY) { | 351 != MP_OKAY) { |
351 dropbear_exit("DSS error"); | 352 dropbear_exit("DSS error"); |
352 } | 353 } |
353 mp_clear(&dss_r); | 354 mp_clear(&dss_r); |
354 buf_incrwritepos(buf, writelen); | 355 buf_incrwritepos(buf, written); |
355 | 356 |
356 writelen = mp_unsigned_bin_size(&dss_s); | 357 writelen = mp_ubin_size(&dss_s); |
357 dropbear_assert(writelen <= SHA1_HASH_SIZE); | 358 dropbear_assert(writelen <= SHA1_HASH_SIZE); |
358 /* need to pad to 160 bits with leading zeros */ | 359 /* need to pad to 160 bits with leading zeros */ |
359 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) { | 360 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) { |
360 buf_putbyte(buf, 0); | 361 buf_putbyte(buf, 0); |
361 } | 362 } |
362 if (mp_to_unsigned_bin(&dss_s, buf_getwriteptr(buf, writelen)) | 363 if (mp_to_ubin(&dss_s, buf_getwriteptr(buf, writelen), writelen, &written) |
363 != MP_OKAY) { | 364 != MP_OKAY) { |
364 dropbear_exit("DSS error"); | 365 dropbear_exit("DSS error"); |
365 } | 366 } |
366 mp_clear(&dss_s); | 367 mp_clear(&dss_s); |
367 buf_incrwritepos(buf, writelen); | 368 buf_incrwritepos(buf, written); |
368 | 369 |
369 mp_clear_multi(&dss_k, &dss_temp1, &dss_temp2, &dss_r, &dss_s, | 370 mp_clear_multi(&dss_k, &dss_temp1, &dss_temp2, &dss_r, &dss_s, |
370 &dss_m, NULL); | 371 &dss_m, NULL); |
371 | 372 |
372 /* create the signature to return */ | 373 /* create the signature to return */ |