diff options
Diffstat (limited to 'src/daemon/https/x509/x509_privkey.c')
-rw-r--r-- | src/daemon/https/x509/x509_privkey.c | 94 |
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 | **/ |
106 | int | 106 | int |
107 | MHD_gnutls_x509_privkey_cpy (MHD_gnutls_x509_privkey_t dst, MHD_gnutls_x509_privkey_t src) | 107 | MHD_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 | */ |
149 | ASN1_TYPE | 150 | ASN1_TYPE |
150 | MHD__gnutls_privkey_decode_pkcs1_rsa_key (const MHD_gnutls_datum_t * raw_key, | 151 | MHD__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 | **/ |
268 | int | 270 | int |
269 | MHD_gnutls_x509_privkey_import (MHD_gnutls_x509_privkey_t key, | 271 | MHD_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 | **/ |
361 | int | 365 | int |
362 | MHD_gnutls_x509_privkey_import_rsa_raw (MHD_gnutls_x509_privkey_t key, | 366 | MHD_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 | |||