@@ -1736,6 +1736,75 @@ static int addEkuOid(JNIEnv* jenv, jobjectArray ret, int idx,
17361736 return idx ;
17371737}
17381738
1739+ #if !defined(WOLFCRYPT_ONLY ) && !defined(NO_CERTS ) && \
1740+ (defined(OPENSSL_EXTRA ) || defined(OPENSSL_ALL ) || \
1741+ defined(WOLFSSL_NGINX ) || defined(WOLFSSL_HAPROXY )) && \
1742+ ((LIBWOLFSSL_VERSION_HEX > 0x05008004 ) || \
1743+ defined(WOLFSSL_PR9728_PATCH_APPLIED ))
1744+
1745+ static jobjectArray stackStringToArray (JNIEnv * jenv , jclass jcl ,
1746+ WOLF_STACK_OF (WOLFSSL_STRING )* sk )
1747+ {
1748+ jobjectArray ret = NULL ;
1749+ jclass stringClass = NULL ;
1750+ int count ;
1751+ int i ;
1752+
1753+ if (jenv == NULL || sk == NULL ) {
1754+ return NULL ;
1755+ }
1756+
1757+ count = wolfSSL_sk_WOLFSSL_STRING_num (sk );
1758+ if (count <= 0 ) {
1759+ wolfSSL_X509_email_free (sk );
1760+ return NULL ;
1761+ }
1762+
1763+ stringClass = (* jenv )-> FindClass (jenv , "java/lang/String" );
1764+ if (stringClass == NULL ) {
1765+ wolfSSL_X509_email_free (sk );
1766+ return NULL ;
1767+ }
1768+
1769+ ret = (* jenv )-> NewObjectArray (jenv , count , stringClass , NULL );
1770+ if (ret == NULL ) {
1771+ (* jenv )-> DeleteLocalRef (jenv , stringClass );
1772+ wolfSSL_X509_email_free (sk );
1773+ return NULL ;
1774+ }
1775+
1776+ for (i = 0 ; i < count ; i ++ ) {
1777+ const char * str = wolfSSL_sk_WOLFSSL_STRING_value (sk , i );
1778+ jstring jstr = (* jenv )-> NewStringUTF (jenv , (str != NULL ) ? str : "" );
1779+ if (jstr == NULL ) {
1780+ (* jenv )-> DeleteLocalRef (jenv , ret );
1781+ (* jenv )-> DeleteLocalRef (jenv , stringClass );
1782+ wolfSSL_X509_email_free (sk );
1783+ (* jenv )-> ThrowNew (jenv , jcl ,
1784+ "Failed to create String in native AIA getter" );
1785+ return NULL ;
1786+ }
1787+
1788+ (* jenv )-> SetObjectArrayElement (jenv , ret , i , jstr );
1789+ (* jenv )-> DeleteLocalRef (jenv , jstr );
1790+ if ((* jenv )-> ExceptionOccurred (jenv )) {
1791+ (* jenv )-> ExceptionDescribe (jenv );
1792+ (* jenv )-> ExceptionClear (jenv );
1793+ (* jenv )-> DeleteLocalRef (jenv , ret );
1794+ (* jenv )-> DeleteLocalRef (jenv , stringClass );
1795+ wolfSSL_X509_email_free (sk );
1796+ (* jenv )-> ThrowNew (jenv , jcl ,
1797+ "Failed to set String[] element in native AIA getter" );
1798+ return NULL ;
1799+ }
1800+ }
1801+
1802+ (* jenv )-> DeleteLocalRef (jenv , stringClass );
1803+ wolfSSL_X509_email_free (sk );
1804+ return ret ;
1805+ }
1806+ #endif
1807+
17391808JNIEXPORT jobjectArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1extended_1key_1usage
17401809 (JNIEnv * jenv , jclass jcl , jlong x509Ptr )
17411810{
@@ -1800,6 +1869,87 @@ JNIEXPORT jobjectArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1ex
18001869 return ret ;
18011870}
18021871
1872+ JNIEXPORT jobjectArray JNICALL
1873+ Java_com_wolfssl_WolfSSLCertificate_X509_1get1_1ocsp
1874+ (JNIEnv * jenv , jclass jcl , jlong x509Ptr )
1875+ {
1876+ /* AIA API extensions were added after wolfSSL 5.8.4 in PR 9728. Version
1877+ * check must be greater than 5.8.4 or patch from PR 9728 must be applied
1878+ * and WOLFSSL_PR9728_PATCH_APPLIED defined when compiling this wrapper. */
1879+ #if !defined(WOLFCRYPT_ONLY ) && !defined(NO_CERTS ) && \
1880+ (defined(OPENSSL_EXTRA ) || defined(OPENSSL_ALL ) || \
1881+ defined(WOLFSSL_NGINX ) || defined(WOLFSSL_HAPROXY )) && \
1882+ ((LIBWOLFSSL_VERSION_HEX > 0x05008004 ) || \
1883+ defined(WOLFSSL_PR9728_PATCH_APPLIED ))
1884+ WOLFSSL_X509 * x509 = (WOLFSSL_X509 * )(uintptr_t )x509Ptr ;
1885+ WOLF_STACK_OF (WOLFSSL_STRING )* sk = NULL ;
1886+
1887+ if (jenv == NULL || x509 == NULL ) {
1888+ return NULL ;
1889+ }
1890+
1891+ sk = wolfSSL_X509_get1_ocsp (x509 );
1892+ return stackStringToArray (jenv , jcl , sk );
1893+ #else
1894+ (void )jenv ;
1895+ (void )jcl ;
1896+ (void )x509Ptr ;
1897+ return NULL ;
1898+ #endif
1899+ }
1900+
1901+ JNIEXPORT jint JNICALL
1902+ Java_com_wolfssl_WolfSSLCertificate_X509_1get_1aia_1overflow
1903+ (JNIEnv * jenv , jclass jcl , jlong x509Ptr )
1904+ {
1905+ #if !defined(WOLFCRYPT_ONLY ) && !defined(NO_CERTS ) && \
1906+ (defined(OPENSSL_EXTRA ) || defined(OPENSSL_ALL ) || \
1907+ defined(WOLFSSL_NGINX ) || defined(WOLFSSL_HAPROXY )) && \
1908+ ((LIBWOLFSSL_VERSION_HEX > 0x05008004 ) || \
1909+ defined(WOLFSSL_PR9728_PATCH_APPLIED ))
1910+ WOLFSSL_X509 * x509 = (WOLFSSL_X509 * )(uintptr_t )x509Ptr ;
1911+ (void )jcl ;
1912+
1913+ if (jenv == NULL || x509 == NULL ) {
1914+ return 0 ;
1915+ }
1916+
1917+ return (jint )wolfSSL_X509_get_aia_overflow (x509 );
1918+ #else
1919+ (void )jenv ;
1920+ (void )jcl ;
1921+ (void )x509Ptr ;
1922+ return (jint )NOT_COMPILED_IN ;
1923+ #endif
1924+ }
1925+
1926+ JNIEXPORT jobjectArray JNICALL
1927+ Java_com_wolfssl_WolfSSLCertificate_X509_1get1_1ca_1issuers
1928+ (JNIEnv * jenv , jclass jcl , jlong x509Ptr )
1929+ {
1930+ #if !defined(WOLFCRYPT_ONLY ) && !defined(NO_CERTS ) && \
1931+ (defined(OPENSSL_EXTRA ) || defined(OPENSSL_ALL ) || \
1932+ defined(WOLFSSL_NGINX ) || defined(WOLFSSL_HAPROXY )) && \
1933+ defined(WOLFSSL_ASN_CA_ISSUER ) && \
1934+ ((LIBWOLFSSL_VERSION_HEX > 0x05008004 ) || \
1935+ defined(WOLFSSL_PR9728_PATCH_APPLIED ))
1936+ WOLFSSL_X509 * x509 = (WOLFSSL_X509 * )(uintptr_t )x509Ptr ;
1937+ WOLF_STACK_OF (WOLFSSL_STRING )* sk = NULL ;
1938+
1939+ if (jenv == NULL || x509 == NULL ) {
1940+ return NULL ;
1941+ }
1942+
1943+ sk = wolfSSL_X509_get1_ca_issuers (x509 );
1944+ return stackStringToArray (jenv , jcl , sk );
1945+ #else
1946+ (void )jenv ;
1947+ (void )jcl ;
1948+ (void )x509Ptr ;
1949+ return NULL ;
1950+ #endif
1951+ }
1952+
18031953JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1extension
18041954 (JNIEnv * jenv , jclass jcl , jlong x509Ptr , jstring oidIn )
18051955{
@@ -2385,4 +2535,3 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1ext_1d2i_
23852535 return 0 ;
23862536#endif
23872537}
2388-
0 commit comments