comparison dss.c @ 297:79bf1023cf11 agent-client

propagate from branch 'au.asn.ucc.matt.dropbear' (head 0501e6f661b5415eb76f3b312d183c3adfbfb712) to branch 'au.asn.ucc.matt.dropbear.cli-agent' (head 01038174ec27245b51bd43a66c01ad930880f67b)
author Matt Johnston <matt@ucc.asn.au>
date Tue, 21 Mar 2006 16:20:59 +0000
parents c5d3ef11155f
children 454a34b2dfd1 ed910547d449
comparison
equal deleted inserted replaced
225:ca7e76d981d9 297:79bf1023cf11
44 * These should be freed with dss_key_free. 44 * These should be freed with dss_key_free.
45 * Returns DROPBEAR_SUCCESS or DROPBEAR_FAILURE */ 45 * Returns DROPBEAR_SUCCESS or DROPBEAR_FAILURE */
46 int buf_get_dss_pub_key(buffer* buf, dss_key *key) { 46 int buf_get_dss_pub_key(buffer* buf, dss_key *key) {
47 47
48 TRACE(("enter buf_get_dss_pub_key")) 48 TRACE(("enter buf_get_dss_pub_key"))
49 assert(key != NULL); 49 dropbear_assert(key != NULL);
50 key->p = m_malloc(sizeof(mp_int)); 50 key->p = m_malloc(sizeof(mp_int));
51 key->q = m_malloc(sizeof(mp_int)); 51 key->q = m_malloc(sizeof(mp_int));
52 key->g = m_malloc(sizeof(mp_int)); 52 key->g = m_malloc(sizeof(mp_int));
53 key->y = m_malloc(sizeof(mp_int)); 53 key->y = m_malloc(sizeof(mp_int));
54 m_mp_init_multi(key->p, key->q, key->g, key->y, NULL); 54 m_mp_init_multi(key->p, key->q, key->g, key->y, NULL);
78 * Returns DROPBEAR_SUCCESS or DROPBEAR_FAILURE */ 78 * Returns DROPBEAR_SUCCESS or DROPBEAR_FAILURE */
79 int buf_get_dss_priv_key(buffer* buf, dss_key *key) { 79 int buf_get_dss_priv_key(buffer* buf, dss_key *key) {
80 80
81 int ret = DROPBEAR_FAILURE; 81 int ret = DROPBEAR_FAILURE;
82 82
83 assert(key != NULL); 83 dropbear_assert(key != NULL);
84 84
85 ret = buf_get_dss_pub_key(buf, key); 85 ret = buf_get_dss_pub_key(buf, key);
86 if (ret == DROPBEAR_FAILURE) { 86 if (ret == DROPBEAR_FAILURE) {
87 return DROPBEAR_FAILURE; 87 return DROPBEAR_FAILURE;
88 } 88 }
135 * mpint g 135 * mpint g
136 * mpint y 136 * mpint y
137 */ 137 */
138 void buf_put_dss_pub_key(buffer* buf, dss_key *key) { 138 void buf_put_dss_pub_key(buffer* buf, dss_key *key) {
139 139
140 assert(key != NULL); 140 dropbear_assert(key != NULL);
141 buf_putstring(buf, SSH_SIGNKEY_DSS, SSH_SIGNKEY_DSS_LEN); 141 buf_putstring(buf, SSH_SIGNKEY_DSS, SSH_SIGNKEY_DSS_LEN);
142 buf_putmpint(buf, key->p); 142 buf_putmpint(buf, key->p);
143 buf_putmpint(buf, key->q); 143 buf_putmpint(buf, key->q);
144 buf_putmpint(buf, key->g); 144 buf_putmpint(buf, key->g);
145 buf_putmpint(buf, key->y); 145 buf_putmpint(buf, key->y);
147 } 147 }
148 148
149 /* Same as buf_put_dss_pub_key, but with the private "x" key appended */ 149 /* Same as buf_put_dss_pub_key, but with the private "x" key appended */
150 void buf_put_dss_priv_key(buffer* buf, dss_key *key) { 150 void buf_put_dss_priv_key(buffer* buf, dss_key *key) {
151 151
152 assert(key != NULL); 152 dropbear_assert(key != NULL);
153 buf_put_dss_pub_key(buf, key); 153 buf_put_dss_pub_key(buf, key);
154 buf_putmpint(buf, key->x); 154 buf_putmpint(buf, key->x);
155 155
156 } 156 }
157 157
170 DEF_MP_INT(val4); 170 DEF_MP_INT(val4);
171 char * string = NULL; 171 char * string = NULL;
172 int stringlen; 172 int stringlen;
173 173
174 TRACE(("enter buf_dss_verify")) 174 TRACE(("enter buf_dss_verify"))
175 assert(key != NULL); 175 dropbear_assert(key != NULL);
176 176
177 m_mp_init_multi(&val1, &val2, &val3, &val4, NULL); 177 m_mp_init_multi(&val1, &val2, &val3, &val4, NULL);
178 178
179 /* get blob, check length */ 179 /* get blob, check length */
180 string = buf_getstring(buf, &stringlen); 180 string = buf_getstring(buf, &stringlen);
308 DEF_MP_INT(dss_r); 308 DEF_MP_INT(dss_r);
309 DEF_MP_INT(dss_s); 309 DEF_MP_INT(dss_s);
310 hash_state hs; 310 hash_state hs;
311 311
312 TRACE(("enter buf_put_dss_sign")) 312 TRACE(("enter buf_put_dss_sign"))
313 assert(key != NULL); 313 dropbear_assert(key != NULL);
314 314
315 /* hash the data */ 315 /* hash the data */
316 sha1_init(&hs); 316 sha1_init(&hs);
317 sha1_process(&hs, data, len); 317 sha1_process(&hs, data, len);
318 sha1_done(&hs, msghash); 318 sha1_done(&hs, msghash);
378 378
379 buf_putstring(buf, SSH_SIGNKEY_DSS, SSH_SIGNKEY_DSS_LEN); 379 buf_putstring(buf, SSH_SIGNKEY_DSS, SSH_SIGNKEY_DSS_LEN);
380 buf_putint(buf, 2*SHA1_HASH_SIZE); 380 buf_putint(buf, 2*SHA1_HASH_SIZE);
381 381
382 writelen = mp_unsigned_bin_size(&dss_r); 382 writelen = mp_unsigned_bin_size(&dss_r);
383 assert(writelen <= SHA1_HASH_SIZE); 383 dropbear_assert(writelen <= SHA1_HASH_SIZE);
384 /* need to pad to 160 bits with leading zeros */ 384 /* need to pad to 160 bits with leading zeros */
385 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) { 385 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) {
386 buf_putbyte(buf, 0); 386 buf_putbyte(buf, 0);
387 } 387 }
388 if (mp_to_unsigned_bin(&dss_r, buf_getwriteptr(buf, writelen)) 388 if (mp_to_unsigned_bin(&dss_r, buf_getwriteptr(buf, writelen))
391 } 391 }
392 mp_clear(&dss_r); 392 mp_clear(&dss_r);
393 buf_incrwritepos(buf, writelen); 393 buf_incrwritepos(buf, writelen);
394 394
395 writelen = mp_unsigned_bin_size(&dss_s); 395 writelen = mp_unsigned_bin_size(&dss_s);
396 assert(writelen <= SHA1_HASH_SIZE); 396 dropbear_assert(writelen <= SHA1_HASH_SIZE);
397 /* need to pad to 160 bits with leading zeros */ 397 /* need to pad to 160 bits with leading zeros */
398 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) { 398 for (i = 0; i < SHA1_HASH_SIZE - writelen; i++) {
399 buf_putbyte(buf, 0); 399 buf_putbyte(buf, 0);
400 } 400 }
401 if (mp_to_unsigned_bin(&dss_s, buf_getwriteptr(buf, writelen)) 401 if (mp_to_unsigned_bin(&dss_s, buf_getwriteptr(buf, writelen))