aboutsummaryrefslogtreecommitdiff
path: root/src/daemon/https/x509/x509_privkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/https/x509/x509_privkey.c')
-rw-r--r--src/daemon/https/x509/x509_privkey.c94
1 files changed, 53 insertions, 41 deletions
diff --git a/src/daemon/https/x509/x509_privkey.c b/src/daemon/https/x509/x509_privkey.c
index 579ce664..d94a6a5d 100644
--- a/src/daemon/https/x509/x509_privkey.c
+++ b/src/daemon/https/x509/x509_privkey.c
@@ -104,7 +104,8 @@ MHD_gnutls_x509_privkey_deinit (MHD_gnutls_x509_privkey_t key)
104 * 104 *
105 **/ 105 **/
106int 106int
107MHD_gnutls_x509_privkey_cpy (MHD_gnutls_x509_privkey_t dst, MHD_gnutls_x509_privkey_t src) 107MHD_gnutls_x509_privkey_cpy (MHD_gnutls_x509_privkey_t dst,
108 MHD_gnutls_x509_privkey_t src)
108{ 109{
109 int i, ret; 110 int i, ret;
110 111
@@ -148,14 +149,14 @@ MHD_gnutls_x509_privkey_cpy (MHD_gnutls_x509_privkey_t dst, MHD_gnutls_x509_priv
148 */ 149 */
149ASN1_TYPE 150ASN1_TYPE
150MHD__gnutls_privkey_decode_pkcs1_rsa_key (const MHD_gnutls_datum_t * raw_key, 151MHD__gnutls_privkey_decode_pkcs1_rsa_key (const MHD_gnutls_datum_t * raw_key,
151 MHD_gnutls_x509_privkey_t pkey) 152 MHD_gnutls_x509_privkey_t pkey)
152{ 153{
153 int result; 154 int result;
154 ASN1_TYPE pkey_asn; 155 ASN1_TYPE pkey_asn;
155 156
156 if ((result = MHD__asn1_create_element (MHD__gnutls_getMHD__gnutls_asn (), 157 if ((result = MHD__asn1_create_element (MHD__gnutls_getMHD__gnutls_asn (),
157 "GNUTLS.RSAPrivateKey", 158 "GNUTLS.RSAPrivateKey",
158 &pkey_asn)) != ASN1_SUCCESS) 159 &pkey_asn)) != ASN1_SUCCESS)
159 { 160 {
160 MHD_gnutls_assert (); 161 MHD_gnutls_assert ();
161 return NULL; 162 return NULL;
@@ -168,43 +169,44 @@ MHD__gnutls_privkey_decode_pkcs1_rsa_key (const MHD_gnutls_datum_t * raw_key,
168 return NULL; 169 return NULL;
169 } 170 }
170 171
171 result = MHD__asn1_der_decoding (&pkey_asn, raw_key->data, raw_key->size, NULL); 172 result =
173 MHD__asn1_der_decoding (&pkey_asn, raw_key->data, raw_key->size, NULL);
172 if (result != ASN1_SUCCESS) 174 if (result != ASN1_SUCCESS)
173 { 175 {
174 MHD_gnutls_assert (); 176 MHD_gnutls_assert ();
175 goto error; 177 goto error;
176 } 178 }
177 179
178 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "modulus", &pkey->params[0])) 180 if ((result =
179 < 0) 181 MHD__gnutls_x509_read_int (pkey_asn, "modulus", &pkey->params[0])) < 0)
180 { 182 {
181 MHD_gnutls_assert (); 183 MHD_gnutls_assert ();
182 goto error; 184 goto error;
183 } 185 }
184 186
185 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "publicExponent", 187 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "publicExponent",
186 &pkey->params[1])) < 0) 188 &pkey->params[1])) < 0)
187 { 189 {
188 MHD_gnutls_assert (); 190 MHD_gnutls_assert ();
189 goto error; 191 goto error;
190 } 192 }
191 193
192 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "privateExponent", 194 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "privateExponent",
193 &pkey->params[2])) < 0) 195 &pkey->params[2])) < 0)
194 { 196 {
195 MHD_gnutls_assert (); 197 MHD_gnutls_assert ();
196 goto error; 198 goto error;
197 } 199 }
198 200
199 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "prime1", &pkey->params[3])) 201 if ((result =
200 < 0) 202 MHD__gnutls_x509_read_int (pkey_asn, "prime1", &pkey->params[3])) < 0)
201 { 203 {
202 MHD_gnutls_assert (); 204 MHD_gnutls_assert ();
203 goto error; 205 goto error;
204 } 206 }
205 207
206 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "prime2", &pkey->params[4])) 208 if ((result =
207 < 0) 209 MHD__gnutls_x509_read_int (pkey_asn, "prime2", &pkey->params[4])) < 0)
208 { 210 {
209 MHD_gnutls_assert (); 211 MHD_gnutls_assert ();
210 goto error; 212 goto error;
@@ -227,7 +229,7 @@ MHD__gnutls_privkey_decode_pkcs1_rsa_key (const MHD_gnutls_datum_t * raw_key,
227 /* p, q */ 229 /* p, q */
228#else 230#else
229 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "coefficient", 231 if ((result = MHD__gnutls_x509_read_int (pkey_asn, "coefficient",
230 &pkey->params[5])) < 0) 232 &pkey->params[5])) < 0)
231 { 233 {
232 MHD_gnutls_assert (); 234 MHD_gnutls_assert ();
233 goto error; 235 goto error;
@@ -267,8 +269,8 @@ error:MHD__asn1_delete_structure (&pkey_asn);
267 **/ 269 **/
268int 270int
269MHD_gnutls_x509_privkey_import (MHD_gnutls_x509_privkey_t key, 271MHD_gnutls_x509_privkey_import (MHD_gnutls_x509_privkey_t key,
270 const MHD_gnutls_datum_t * data, 272 const MHD_gnutls_datum_t * data,
271 MHD_gnutls_x509_crt_fmt_t format) 273 MHD_gnutls_x509_crt_fmt_t format)
272{ 274{
273 int result = 0, need_free = 0; 275 int result = 0, need_free = 0;
274 MHD_gnutls_datum_t _data; 276 MHD_gnutls_datum_t _data;
@@ -291,7 +293,9 @@ MHD_gnutls_x509_privkey_import (MHD_gnutls_x509_privkey_t key,
291 293
292 /* Try the first header */ 294 /* Try the first header */
293 result 295 result
294 = MHD__gnutls_fbase64_decode (PEM_KEY_RSA, data->data, data->size, &out); 296 =
297 MHD__gnutls_fbase64_decode (PEM_KEY_RSA, data->data, data->size,
298 &out);
295 key->pk_algorithm = MHD_GNUTLS_PK_RSA; 299 key->pk_algorithm = MHD_GNUTLS_PK_RSA;
296 300
297 _data.data = out; 301 _data.data = out;
@@ -360,12 +364,12 @@ MHD_gnutls_x509_privkey_import (MHD_gnutls_x509_privkey_t key,
360 **/ 364 **/
361int 365int
362MHD_gnutls_x509_privkey_import_rsa_raw (MHD_gnutls_x509_privkey_t key, 366MHD_gnutls_x509_privkey_import_rsa_raw (MHD_gnutls_x509_privkey_t key,
363 const MHD_gnutls_datum_t * m, 367 const MHD_gnutls_datum_t * m,
364 const MHD_gnutls_datum_t * e, 368 const MHD_gnutls_datum_t * e,
365 const MHD_gnutls_datum_t * d, 369 const MHD_gnutls_datum_t * d,
366 const MHD_gnutls_datum_t * p, 370 const MHD_gnutls_datum_t * p,
367 const MHD_gnutls_datum_t * q, 371 const MHD_gnutls_datum_t * q,
368 const MHD_gnutls_datum_t * u) 372 const MHD_gnutls_datum_t * u)
369{ 373{
370 int i = 0, ret; 374 int i = 0, ret;
371 size_t siz = 0; 375 size_t siz = 0;
@@ -417,7 +421,8 @@ MHD_gnutls_x509_privkey_import_rsa_raw (MHD_gnutls_x509_privkey_t key,
417 } 421 }
418 422
419#ifdef CALC_COEFF 423#ifdef CALC_COEFF
420 key->params[5] = MHD__gnutls_mpi_snew (MHD__gnutls_mpi_get_nbits (key->params[0])); 424 key->params[5] =
425 MHD__gnutls_mpi_snew (MHD__gnutls_mpi_get_nbits (key->params[0]));
421 426
422 if (key->params[5] == NULL) 427 if (key->params[5] == NULL)
423 { 428 {
@@ -501,7 +506,7 @@ MHD__gnutls_asn1_encode_rsa (ASN1_TYPE * c2, mpi_t * params)
501 506
502 /* Now generate exp1 and exp2 507 /* Now generate exp1 and exp2
503 */ 508 */
504 exp1 = MHD__gnutls_mpi_salloc_like (params[0]); /* like modulus */ 509 exp1 = MHD__gnutls_mpi_salloc_like (params[0]); /* like modulus */
505 if (exp1 == NULL) 510 if (exp1 == NULL)
506 { 511 {
507 MHD_gnutls_assert (); 512 MHD_gnutls_assert ();
@@ -600,8 +605,8 @@ MHD__gnutls_asn1_encode_rsa (ASN1_TYPE * c2, mpi_t * params)
600 */ 605 */
601 606
602 if ((result = 607 if ((result =
603 MHD__asn1_create_element (MHD__gnutls_getMHD__gnutls_asn (), "GNUTLS.RSAPrivateKey", 608 MHD__asn1_create_element (MHD__gnutls_getMHD__gnutls_asn (),
604 c2)) != ASN1_SUCCESS) 609 "GNUTLS.RSAPrivateKey", c2)) != ASN1_SUCCESS)
605 { 610 {
606 MHD_gnutls_assert (); 611 MHD_gnutls_assert ();
607 result = MHD_gtls_asn2err (result); 612 result = MHD_gtls_asn2err (result);
@@ -618,16 +623,18 @@ MHD__gnutls_asn1_encode_rsa (ASN1_TYPE * c2, mpi_t * params)
618 goto cleanup; 623 goto cleanup;
619 } 624 }
620 625
621 if ((result = MHD__asn1_write_value (*c2, "publicExponent", pube_data, size[1])) 626 if ((result =
622 != ASN1_SUCCESS) 627 MHD__asn1_write_value (*c2, "publicExponent", pube_data,
628 size[1])) != ASN1_SUCCESS)
623 { 629 {
624 MHD_gnutls_assert (); 630 MHD_gnutls_assert ();
625 result = MHD_gtls_asn2err (result); 631 result = MHD_gtls_asn2err (result);
626 goto cleanup; 632 goto cleanup;
627 } 633 }
628 634
629 if ((result = MHD__asn1_write_value (*c2, "privateExponent", prie_data, size[2])) 635 if ((result =
630 != ASN1_SUCCESS) 636 MHD__asn1_write_value (*c2, "privateExponent", prie_data,
637 size[2])) != ASN1_SUCCESS)
631 { 638 {
632 MHD_gnutls_assert (); 639 MHD_gnutls_assert ();
633 result = MHD_gtls_asn2err (result); 640 result = MHD_gtls_asn2err (result);
@@ -682,14 +689,15 @@ MHD__gnutls_asn1_encode_rsa (ASN1_TYPE * c2, mpi_t * params)
682 MHD_gnutls_free (all_data); 689 MHD_gnutls_free (all_data);
683 690
684 if ((result = MHD__asn1_write_value (*c2, "otherPrimeInfos", 691 if ((result = MHD__asn1_write_value (*c2, "otherPrimeInfos",
685 NULL, 0)) != ASN1_SUCCESS) 692 NULL, 0)) != ASN1_SUCCESS)
686 { 693 {
687 MHD_gnutls_assert (); 694 MHD_gnutls_assert ();
688 result = MHD_gtls_asn2err (result); 695 result = MHD_gtls_asn2err (result);
689 goto cleanup; 696 goto cleanup;
690 } 697 }
691 698
692 if ((result = MHD__asn1_write_value (*c2, "version", &null, 1)) != ASN1_SUCCESS) 699 if ((result =
700 MHD__asn1_write_value (*c2, "version", &null, 1)) != ASN1_SUCCESS)
693 { 701 {
694 MHD_gnutls_assert (); 702 MHD_gnutls_assert ();
695 result = MHD_gtls_asn2err (result); 703 result = MHD_gtls_asn2err (result);
@@ -760,8 +768,8 @@ MHD__gnutls_asn1_encode_dsa (ASN1_TYPE * c2, mpi_t * params)
760 */ 768 */
761 769
762 if ((result = 770 if ((result =
763 MHD__asn1_create_element (MHD__gnutls_getMHD__gnutls_asn (), "GNUTLS.DSAPrivateKey", 771 MHD__asn1_create_element (MHD__gnutls_getMHD__gnutls_asn (),
764 c2)) != ASN1_SUCCESS) 772 "GNUTLS.DSAPrivateKey", c2)) != ASN1_SUCCESS)
765 { 773 {
766 MHD_gnutls_assert (); 774 MHD_gnutls_assert ();
767 result = MHD_gtls_asn2err (result); 775 result = MHD_gtls_asn2err (result);
@@ -770,28 +778,32 @@ MHD__gnutls_asn1_encode_dsa (ASN1_TYPE * c2, mpi_t * params)
770 778
771 /* Write PRIME 779 /* Write PRIME
772 */ 780 */
773 if ((result = MHD__asn1_write_value (*c2, "p", p_data, size[0])) != ASN1_SUCCESS) 781 if ((result =
782 MHD__asn1_write_value (*c2, "p", p_data, size[0])) != ASN1_SUCCESS)
774 { 783 {
775 MHD_gnutls_assert (); 784 MHD_gnutls_assert ();
776 result = MHD_gtls_asn2err (result); 785 result = MHD_gtls_asn2err (result);
777 goto cleanup; 786 goto cleanup;
778 } 787 }
779 788
780 if ((result = MHD__asn1_write_value (*c2, "q", q_data, size[1])) != ASN1_SUCCESS) 789 if ((result =
790 MHD__asn1_write_value (*c2, "q", q_data, size[1])) != ASN1_SUCCESS)
781 { 791 {
782 MHD_gnutls_assert (); 792 MHD_gnutls_assert ();
783 result = MHD_gtls_asn2err (result); 793 result = MHD_gtls_asn2err (result);
784 goto cleanup; 794 goto cleanup;
785 } 795 }
786 796
787 if ((result = MHD__asn1_write_value (*c2, "g", g_data, size[2])) != ASN1_SUCCESS) 797 if ((result =
798 MHD__asn1_write_value (*c2, "g", g_data, size[2])) != ASN1_SUCCESS)
788 { 799 {
789 MHD_gnutls_assert (); 800 MHD_gnutls_assert ();
790 result = MHD_gtls_asn2err (result); 801 result = MHD_gtls_asn2err (result);
791 goto cleanup; 802 goto cleanup;
792 } 803 }
793 804
794 if ((result = MHD__asn1_write_value (*c2, "Y", y_data, size[3])) != ASN1_SUCCESS) 805 if ((result =
806 MHD__asn1_write_value (*c2, "Y", y_data, size[3])) != ASN1_SUCCESS)
795 { 807 {
796 MHD_gnutls_assert (); 808 MHD_gnutls_assert ();
797 result = MHD_gtls_asn2err (result); 809 result = MHD_gtls_asn2err (result);
@@ -808,7 +820,8 @@ MHD__gnutls_asn1_encode_dsa (ASN1_TYPE * c2, mpi_t * params)
808 820
809 MHD_gnutls_free (all_data); 821 MHD_gnutls_free (all_data);
810 822
811 if ((result = MHD__asn1_write_value (*c2, "version", &null, 1)) != ASN1_SUCCESS) 823 if ((result =
824 MHD__asn1_write_value (*c2, "version", &null, 1)) != ASN1_SUCCESS)
812 { 825 {
813 MHD_gnutls_assert (); 826 MHD_gnutls_assert ();
814 result = MHD_gtls_asn2err (result); 827 result = MHD_gtls_asn2err (result);
@@ -822,4 +835,3 @@ cleanup:MHD__asn1_delete_structure (c2);
822 835
823 return result; 836 return result;
824} 837}
825