- sz = mp_octets(rp.n);
- if (sz < msz + 11)
- die(EXIT_FAILURE, "key too small (help!)");
- DENSURE(d, sz);
- p = d->buf + d->len;
- memcpy(p + sz - msz, m, msz);
- p[0] = 0;
- p[1] = 1;
- memset(p + 2, 0xff, sz - msz - 3);
- p[sz - msz - 1] = 0;
- memcpy(p + sz - msz, m, msz);
- x = mp_loadb(MP_NEW, p, sz);
- x = rsa_decrypt(&rp, x, x, &rand_global);
- mp_storeb(x, p, sz);
- d->len += sz;
- mp_drop(x);
+ rsa_privcreate(&rpc, &rp, &rand_global);
+ if (rsa_sign(&rpc, m, msz, d, pkcs1_sigencode, &pk) < 0)
+ die(EXIT_FAILURE, "internal error in rsasign (key too small?)");
+ rsa_privdestroy(&rpc);