mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-16 00:00:07 +01:00
x509: support DER recovery
This commit is contained in:
parent
108b4608f4
commit
12d535f839
3 changed files with 34 additions and 0 deletions
|
@ -42,6 +42,11 @@ enum lws_tls_cert_info {
|
||||||
* same tls backend, ie, OpenSSL or mbedTLS. The different backends
|
* same tls backend, ie, OpenSSL or mbedTLS. The different backends
|
||||||
* produce different, incompatible representations for the same cert.
|
* produce different, incompatible representations for the same cert.
|
||||||
*/
|
*/
|
||||||
|
LWS_TLS_CERT_INFO_DER_RAW,
|
||||||
|
/**< the certificate's raw DER representation. If it's too big,
|
||||||
|
* -1 is returned and the size will be returned in buf->ns.len.
|
||||||
|
* If the certificate cannot be found -1 is returned and 0 in
|
||||||
|
* buf->ns.len. */
|
||||||
};
|
};
|
||||||
|
|
||||||
union lws_tls_cert_info_results {
|
union lws_tls_cert_info_results {
|
||||||
|
|
|
@ -166,6 +166,19 @@ lws_tls_mbedtls_cert_info(mbedtls_x509_crt *x509, enum lws_tls_cert_info type,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case LWS_TLS_CERT_INFO_DER_RAW:
|
||||||
|
|
||||||
|
buf->ns.len = (int)x509->raw.len;
|
||||||
|
|
||||||
|
if (len < x509->raw.len)
|
||||||
|
/*
|
||||||
|
* The buffer is too small and the attempt failed, but
|
||||||
|
* the required object length is in buf->ns.len
|
||||||
|
*/
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
memcpy(buf->ns.name, x509->raw.p, x509->raw.len);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -164,6 +164,22 @@ lws_tls_openssl_cert_info(X509 *x509, enum lws_tls_cert_info type,
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
case LWS_TLS_CERT_INFO_DER_RAW:
|
||||||
|
{
|
||||||
|
int der_len = i2d_X509(x509, NULL);
|
||||||
|
uint8_t *tmp = (uint8_t *)buf->ns.name;
|
||||||
|
|
||||||
|
buf->ns.len = der_len < 0 ? 0 : der_len;
|
||||||
|
|
||||||
|
if (der_len < 0 || (size_t)der_len > len)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
der_len = i2d_X509(x509, &tmp);
|
||||||
|
if (der_len < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue