- unsigned short e_len, n_len, d_len;
- unsigned char tmp[2];
-
- e_len = silc_mp_sizeinbase(&key->e, 16);
- n_len = silc_mp_sizeinbase(&key->n, 16);
- d_len = silc_mp_sizeinbase(&key->d, 16);
- e = silc_calloc(e_len + 1, sizeof(unsigned char));
- n = silc_calloc(n_len + 1, sizeof(unsigned char));
- d = silc_calloc(d_len + 1, sizeof(unsigned char));
- silc_mp_get_str(e, 16, &key->e);
- silc_mp_get_str(n, 16, &key->n);
- silc_mp_get_str(d, 16, &key->d);
-
- *ret_len = e_len + 2 + n_len + 2 + d_len + 2;
+ SilcUInt32 e_len, n_len, d_len;
+ unsigned char tmp[4];
+
+ e = silc_mp_mp2bin(&key->e, 0, &e_len);
+ n = silc_mp_mp2bin(&key->n, (key->bits + 7) / 8, &n_len);
+ d = silc_mp_mp2bin(&key->d, 0, &d_len);
+
+ *ret_len = e_len + 4 + n_len + 4 + d_len + 4;