- break;
- }
-
- return FALSE;
-}
-
-SILC_PKCS_API_ENCRYPT(rsa)
-{
- RsaKey *key = (RsaKey *)context;
- int i, tmplen;
- SilcInt mp_tmp;
- SilcInt mp_dst;
-
- silc_mp_init_set_ui(&mp_tmp, 0);
- silc_mp_init_set_ui(&mp_dst, 0);
-
- /* Format the data into MP int */
- for (i = 0; i < src_len; i++) {
- silc_mp_mul_2exp(&mp_tmp, &mp_tmp, 8);
- silc_mp_add_ui(&mp_tmp, &mp_tmp, src[i]);
- }
-
- /* Encrypt */
- rsa_en_de_crypt(&mp_dst, &mp_tmp, &key->e, &key->n);
-
- tmplen = (1024 + 7) / 8;
-
- /* Format the MP int back into data */
- for (i = tmplen; i > 0; i--) {
- dst[i - 1] = (unsigned char)(silc_mp_get_ui(&mp_dst) & 0xff);
- silc_mp_fdiv_q_2exp(&mp_dst, &mp_dst, 8);
- }
- *dst_len = tmplen;
-
- silc_mp_clear(&mp_tmp);
- silc_mp_clear(&mp_dst);
-
- return TRUE;
-}
-
-SILC_PKCS_API_DECRYPT(rsa)
-{
- RsaKey *key = (RsaKey *)context;
- int i, tmplen;
- SilcInt mp_tmp;
- SilcInt mp_dst;
-
- silc_mp_init_set_ui(&mp_tmp, 0);
- silc_mp_init_set_ui(&mp_dst, 0);
-
- /* Format the data into MP int */
- for (i = 0; i < src_len; i++) {
- silc_mp_mul_2exp(&mp_tmp, &mp_tmp, 8);
- silc_mp_add_ui(&mp_tmp, &mp_tmp, src[i]);
- }
-
- /* Decrypt */
- rsa_en_de_crypt(&mp_dst, &mp_tmp, &key->d, &key->n);
-
- tmplen = (1024 + 7) / 8;
-
- /* Format the MP int back into data */
- for (i = tmplen; i > 0; i--) {
- dst[i - 1] = (unsigned char)(silc_mp_get_ui(&mp_dst) & 0xff);
- silc_mp_fdiv_q_2exp(&mp_dst, &mp_dst, 8);
- }
- *dst_len = tmplen;
-
- silc_mp_clear(&mp_tmp);
- silc_mp_clear(&mp_dst);
-
- return TRUE;
-}
-
-SILC_PKCS_API_SIGN(rsa)
-{
- RsaKey *key = (RsaKey *)context;
- int i, tmplen;
- SilcInt mp_tmp;
- SilcInt mp_dst;
-
- silc_mp_init_set_ui(&mp_tmp, 0);
- silc_mp_init_set_ui(&mp_dst, 0);
-
- /* Format the data into MP int */
- for (i = 0; i < src_len; i++) {
- silc_mp_mul_2exp(&mp_tmp, &mp_tmp, 8);
- silc_mp_add_ui(&mp_tmp, &mp_tmp, src[i]);
- }
-
- /* Sign */
- rsa_en_de_crypt(&mp_dst, &mp_tmp, &key->d, &key->n);
-
- tmplen = (1024 + 7) / 8;
-
- /* Format the MP int back into data */
- for (i = tmplen; i > 0; i--) {
- dst[i - 1] = (unsigned char)(silc_mp_get_ui(&mp_dst) & 0xff);
- silc_mp_fdiv_q_2exp(&mp_dst, &mp_dst, 8);
- }
- *dst_len = tmplen;
-
- silc_mp_clear(&mp_tmp);
- silc_mp_clear(&mp_dst);