X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fbtls%2Fbtls-x509.c;h=473d94fbaf3e341d0d7851860952bf6de7216bc8;hb=HEAD;hp=54174223fb9acc33a5ecddf9307375465d692dbb;hpb=c950be01aca0ecce9b5f68b9f4430e99ecc51037;p=mono.git diff --git a/mono/btls/btls-x509.c b/mono/btls/btls-x509.c index 54174223fb9..473d94fbaf3 100644 --- a/mono/btls/btls-x509.c +++ b/mono/btls/btls-x509.c @@ -10,7 +10,7 @@ #include #include -X509 * +MONO_API X509 * mono_btls_x509_from_data (const void *buf, int len, MonoBtlsX509Format format) { BIO *bio; @@ -29,52 +29,52 @@ mono_btls_x509_from_data (const void *buf, int len, MonoBtlsX509Format format) return cert; } -X509 * +MONO_API X509 * mono_btls_x509_up_ref (X509 *x509) { X509_up_ref (x509); return x509; } -void +MONO_API void mono_btls_x509_free (X509 *x509) { X509_free (x509); } -X509 * +MONO_API X509 * mono_btls_x509_dup (X509 *x509) { return X509_dup (x509); } -MonoBtlsX509Name * +MONO_API MonoBtlsX509Name * mono_btls_x509_get_subject_name (X509 *x509) { return mono_btls_x509_name_copy (X509_get_subject_name (x509)); } -MonoBtlsX509Name * +MONO_API MonoBtlsX509Name * mono_btls_x509_get_issuer_name (X509 *x509) { return mono_btls_x509_name_copy (X509_get_issuer_name (x509)); } -int +MONO_API int mono_btls_x509_get_subject_name_string (X509 *name, char *buffer, int size) { *buffer = 0; return X509_NAME_oneline (X509_get_subject_name (name), buffer, size) != NULL; } -int +MONO_API int mono_btls_x509_get_issuer_name_string (X509 *name, char *buffer, int size) { *buffer = 0; return X509_NAME_oneline (X509_get_issuer_name (name), buffer, size) != NULL; } -int +MONO_API int mono_btls_x509_get_raw_data (X509 *x509, BIO *bio, MonoBtlsX509Format format) { switch (format) { @@ -87,13 +87,13 @@ mono_btls_x509_get_raw_data (X509 *x509, BIO *bio, MonoBtlsX509Format format) } } -int +MONO_API int mono_btls_x509_cmp (const X509 *a, const X509 *b) { return X509_cmp (a, b); } -int +MONO_API int mono_btls_x509_get_hash (X509 *x509, const void **data) { X509_check_purpose (x509, -1, 0); @@ -101,19 +101,19 @@ mono_btls_x509_get_hash (X509 *x509, const void **data) return SHA_DIGEST_LENGTH; } -long +MONO_API int64_t mono_btls_x509_get_not_before (X509 *x509) { return mono_btls_util_asn1_time_to_ticks (X509_get_notBefore (x509)); } -long +MONO_API int64_t mono_btls_x509_get_not_after (X509 *x509) { return mono_btls_util_asn1_time_to_ticks (X509_get_notAfter (x509)); } -int +MONO_API int mono_btls_x509_get_public_key (X509 *x509, BIO *bio) { EVP_PKEY *pkey; @@ -135,11 +135,11 @@ mono_btls_x509_get_public_key (X509 *x509, BIO *bio) return ret; } -int +MONO_API int mono_btls_x509_get_serial_number (X509 *x509, char *buffer, int size, int mono_style) { ASN1_INTEGER *serial; - char *pos; + unsigned char *temp, *p; int len, idx; serial = X509_get_serialNumber (x509); @@ -151,23 +151,28 @@ mono_btls_x509_get_serial_number (X509 *x509, char *buffer, int size, int mono_s return serial->length; } - pos = buffer; - len = 0; + temp = OPENSSL_malloc (serial->length + 1); + if (!temp) + return 0; + + p = temp; + len = i2c_ASN1_INTEGER (serial, &p); - for (idx = serial->length - 1; idx >= 0; idx--) { - *pos++ = serial->data [idx]; - len++; + if (!len) { + OPENSSL_free (temp); + return 0; } - if (serial->data [0] >= 0x80) { - *pos++ = 0; - len++; + for (idx = 0; idx < len; idx++) { + buffer [idx] = *(--p); } + buffer [len] = 0; + OPENSSL_free (temp); return len; } -int +MONO_API int mono_btls_x509_get_public_key_algorithm (X509 *x509, char *buffer, int size) { X509_PUBKEY *pkey; @@ -186,13 +191,13 @@ mono_btls_x509_get_public_key_algorithm (X509 *x509, char *buffer, int size) return OBJ_obj2txt (buffer, size, ppkalg, 1); } -int +MONO_API int mono_btls_x509_get_version (X509 *x509) { return (int)X509_get_version (x509) + 1; } -int +MONO_API int mono_btls_x509_get_signature_algorithm (X509 *x509, char *buffer, int size) { const ASN1_OBJECT *obj; @@ -209,7 +214,7 @@ mono_btls_x509_get_signature_algorithm (X509 *x509, char *buffer, int size) return OBJ_obj2txt (buffer, size, obj, 1); } -int +MONO_API int mono_btls_x509_get_public_key_asn1 (X509 *x509, char *out_oid, int oid_len, uint8_t **buffer, int *size) { X509_PUBKEY *pkey; @@ -246,7 +251,7 @@ mono_btls_x509_get_public_key_asn1 (X509 *x509, char *out_oid, int oid_len, uint } -int +MONO_API int mono_btls_x509_get_public_key_parameters (X509 *x509, char *out_oid, int oid_len, uint8_t **buffer, int *size) { X509_PUBKEY *pkey; @@ -305,13 +310,13 @@ mono_btls_x509_get_public_key_parameters (X509 *x509, char *out_oid, int oid_len } } -EVP_PKEY * +MONO_API EVP_PKEY * mono_btls_x509_get_pubkey (X509 *x509) { return X509_get_pubkey (x509); } -int +MONO_API int mono_btls_x509_get_subject_key_identifier (X509 *x509, uint8_t **buffer, int *size) { ASN1_OCTET_STRING *skid; @@ -335,7 +340,7 @@ mono_btls_x509_get_subject_key_identifier (X509 *x509, uint8_t **buffer, int *si return 1; } -int +MONO_API int mono_btls_x509_print (X509 *x509, BIO *bio) { return X509_print_ex (bio, x509, XN_FLAG_COMPAT, X509_FLAG_COMPAT); @@ -354,7 +359,7 @@ get_trust_nid (MonoBtlsX509Purpose purpose) } } -int +MONO_API int mono_btls_x509_add_trust_object (X509 *x509, MonoBtlsX509Purpose purpose) { ASN1_OBJECT *trust; @@ -372,7 +377,7 @@ mono_btls_x509_add_trust_object (X509 *x509, MonoBtlsX509Purpose purpose) return X509_add1_trust_object (x509, trust); } -int +MONO_API int mono_btls_x509_add_reject_object (X509 *x509, MonoBtlsX509Purpose purpose) { ASN1_OBJECT *reject; @@ -390,7 +395,7 @@ mono_btls_x509_add_reject_object (X509 *x509, MonoBtlsX509Purpose purpose) return X509_add1_reject_object (x509, reject); } -int +MONO_API int mono_btls_x509_add_explicit_trust (X509 *x509, MonoBtlsX509TrustKind kind) { int ret = 0;