|
31 | 31 | #include <wolfssl/ssl.h> |
32 | 32 | #include <wolfssl/wolfcrypt/asn.h> |
33 | 33 | #include <wolfssl/wolfcrypt/asn_public.h> |
| 34 | +#include <wolfssl/wolfcrypt/hash.h> /* for wc_ShaHash */ |
34 | 35 | #include <wolfssl/openssl/evp.h> /* for EVP_PKEY functions */ |
35 | 36 | #include <wolfssl/openssl/x509v3.h> /* for WOLFSSL_X509_EXTENSION */ |
36 | 37 | #include <wolfssl/error-ssl.h> |
@@ -1937,3 +1938,251 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1next_1a |
1937 | 1938 | #endif |
1938 | 1939 | } |
1939 | 1940 |
|
| 1941 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1set_1subject_1key_1id_1from_1pubkey |
| 1942 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr) |
| 1943 | +{ |
| 1944 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 1945 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 1946 | + defined(WOLFSSL_CERT_EXT) && !defined(NO_SHA) |
| 1947 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 1948 | + (void)jcl; |
| 1949 | + |
| 1950 | + if (jenv == NULL || x509 == NULL) { |
| 1951 | + return WOLFSSL_FAILURE; |
| 1952 | + } |
| 1953 | + |
| 1954 | + return wolfSSL_X509_set_subject_key_id_ex(x509); |
| 1955 | +#else |
| 1956 | + (void)jenv; |
| 1957 | + (void)jcl; |
| 1958 | + (void)x509Ptr; |
| 1959 | + return (jint)NOT_COMPILED_IN; |
| 1960 | +#endif |
| 1961 | +} |
| 1962 | + |
| 1963 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1set_1subject_1key_1id |
| 1964 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr, jbyteArray skidBytes) |
| 1965 | +{ |
| 1966 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 1967 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 1968 | + defined(WOLFSSL_CERT_EXT) |
| 1969 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 1970 | + byte* skid = NULL; |
| 1971 | + int skidSz = 0; |
| 1972 | + int ret; |
| 1973 | + (void)jcl; |
| 1974 | + |
| 1975 | + if (jenv == NULL || x509 == NULL || skidBytes == NULL) { |
| 1976 | + return WOLFSSL_FAILURE; |
| 1977 | + } |
| 1978 | + |
| 1979 | + skid = (byte*)(*jenv)->GetByteArrayElements(jenv, skidBytes, NULL); |
| 1980 | + skidSz = (*jenv)->GetArrayLength(jenv, skidBytes); |
| 1981 | + |
| 1982 | + if (skid == NULL || skidSz == 0) { |
| 1983 | + return WOLFSSL_FAILURE; |
| 1984 | + } |
| 1985 | + |
| 1986 | + ret = wolfSSL_X509_set_subject_key_id(x509, skid, skidSz); |
| 1987 | + |
| 1988 | + (*jenv)->ReleaseByteArrayElements(jenv, skidBytes, (jbyte*)skid, JNI_ABORT); |
| 1989 | + |
| 1990 | + return ret; |
| 1991 | +#else |
| 1992 | + (void)jenv; |
| 1993 | + (void)jcl; |
| 1994 | + (void)x509Ptr; |
| 1995 | + (void)skidBytes; |
| 1996 | + return (jint)NOT_COMPILED_IN; |
| 1997 | +#endif |
| 1998 | +} |
| 1999 | + |
| 2000 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1set_1auth_1key_1id_1from_1cert |
| 2001 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr, jbyteArray issuerDerBytes) |
| 2002 | +{ |
| 2003 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 2004 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 2005 | + defined(WOLFSSL_CERT_EXT) && !defined(NO_SHA) |
| 2006 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 2007 | + WOLFSSL_X509* issuerX509 = NULL; |
| 2008 | + byte* issuerDer = NULL; |
| 2009 | + int issuerDerSz = 0; |
| 2010 | + int ret = WOLFSSL_SUCCESS; |
| 2011 | + (void)jcl; |
| 2012 | + |
| 2013 | + if (jenv == NULL || x509 == NULL || issuerDerBytes == NULL) { |
| 2014 | + return WOLFSSL_FAILURE; |
| 2015 | + } |
| 2016 | + |
| 2017 | + issuerDer = (byte*)(*jenv)->GetByteArrayElements(jenv, issuerDerBytes, NULL); |
| 2018 | + issuerDerSz = (*jenv)->GetArrayLength(jenv, issuerDerBytes); |
| 2019 | + |
| 2020 | + if (issuerDer == NULL || issuerDerSz == 0) { |
| 2021 | + ret = WOLFSSL_FAILURE; |
| 2022 | + } |
| 2023 | + |
| 2024 | + /* Parse issuer certificate */ |
| 2025 | + if (ret == WOLFSSL_SUCCESS) { |
| 2026 | + issuerX509 = wolfSSL_X509_load_certificate_buffer(issuerDer, |
| 2027 | + issuerDerSz, SSL_FILETYPE_ASN1); |
| 2028 | + if (issuerX509 == NULL) { |
| 2029 | + ret = WOLFSSL_FAILURE; |
| 2030 | + } |
| 2031 | + } |
| 2032 | + |
| 2033 | + /* Use wolfSSL API to set AKID from issuer */ |
| 2034 | + if (ret == WOLFSSL_SUCCESS) { |
| 2035 | + ret = wolfSSL_X509_set_authority_key_id_ex(x509, issuerX509); |
| 2036 | + } |
| 2037 | + |
| 2038 | + if (issuerX509 != NULL) { |
| 2039 | + wolfSSL_X509_free(issuerX509); |
| 2040 | + } |
| 2041 | + |
| 2042 | + (*jenv)->ReleaseByteArrayElements(jenv, issuerDerBytes, |
| 2043 | + (jbyte*)issuerDer, JNI_ABORT); |
| 2044 | + |
| 2045 | + return ret; |
| 2046 | +#else |
| 2047 | + (void)jenv; |
| 2048 | + (void)jcl; |
| 2049 | + (void)x509Ptr; |
| 2050 | + (void)issuerDerBytes; |
| 2051 | + return (jint)NOT_COMPILED_IN; |
| 2052 | +#endif |
| 2053 | +} |
| 2054 | + |
| 2055 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1set_1auth_1key_1id |
| 2056 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr, jbyteArray akidBytes) |
| 2057 | +{ |
| 2058 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 2059 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 2060 | + defined(WOLFSSL_CERT_EXT) |
| 2061 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 2062 | + byte* akid = NULL; |
| 2063 | + int akidSz = 0; |
| 2064 | + int ret; |
| 2065 | + (void)jcl; |
| 2066 | + |
| 2067 | + if (jenv == NULL || x509 == NULL || akidBytes == NULL) { |
| 2068 | + return WOLFSSL_FAILURE; |
| 2069 | + } |
| 2070 | + |
| 2071 | + akid = (byte*)(*jenv)->GetByteArrayElements(jenv, akidBytes, NULL); |
| 2072 | + akidSz = (*jenv)->GetArrayLength(jenv, akidBytes); |
| 2073 | + |
| 2074 | + if (akid == NULL || akidSz == 0) { |
| 2075 | + return WOLFSSL_FAILURE; |
| 2076 | + } |
| 2077 | + |
| 2078 | + ret = wolfSSL_X509_set_authority_key_id(x509, akid, akidSz); |
| 2079 | + |
| 2080 | + (*jenv)->ReleaseByteArrayElements(jenv, akidBytes, (jbyte*)akid, JNI_ABORT); |
| 2081 | + |
| 2082 | + return ret; |
| 2083 | +#else |
| 2084 | + (void)jenv; |
| 2085 | + (void)jcl; |
| 2086 | + (void)x509Ptr; |
| 2087 | + (void)akidBytes; |
| 2088 | + return (jint)NOT_COMPILED_IN; |
| 2089 | +#endif |
| 2090 | +} |
| 2091 | + |
| 2092 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1set_1ns_1cert_1type |
| 2093 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr, jint nsCertType) |
| 2094 | +{ |
| 2095 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 2096 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 2097 | + !defined(IGNORE_NETSCAPE_CERT_TYPE) |
| 2098 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 2099 | + (void)jenv; |
| 2100 | + (void)jcl; |
| 2101 | + |
| 2102 | + if (x509 == NULL) { |
| 2103 | + return WOLFSSL_FAILURE; |
| 2104 | + } |
| 2105 | + |
| 2106 | + return wolfSSL_X509_set_ns_cert_type(x509, (int)nsCertType); |
| 2107 | +#else |
| 2108 | + (void)jenv; |
| 2109 | + (void)jcl; |
| 2110 | + (void)x509Ptr; |
| 2111 | + (void)nsCertType; |
| 2112 | + return (jint)NOT_COMPILED_IN; |
| 2113 | +#endif |
| 2114 | +} |
| 2115 | + |
| 2116 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1add_1crl_1dist_1point |
| 2117 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr, jstring uriStr, jboolean isCritical) |
| 2118 | +{ |
| 2119 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 2120 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 2121 | + defined(WOLFSSL_CERT_EXT) |
| 2122 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 2123 | + const char* uri = NULL; |
| 2124 | + int ret; |
| 2125 | + (void)jcl; |
| 2126 | + |
| 2127 | + if (jenv == NULL || x509 == NULL || uriStr == NULL) { |
| 2128 | + return WOLFSSL_FAILURE; |
| 2129 | + } |
| 2130 | + |
| 2131 | + uri = (*jenv)->GetStringUTFChars(jenv, uriStr, 0); |
| 2132 | + if (uri == NULL) { |
| 2133 | + return WOLFSSL_FAILURE; |
| 2134 | + } |
| 2135 | + |
| 2136 | + ret = wolfSSL_X509_CRL_add_dist_point(x509, uri, isCritical ? 1 : 0); |
| 2137 | + |
| 2138 | + (*jenv)->ReleaseStringUTFChars(jenv, uriStr, uri); |
| 2139 | + |
| 2140 | + return ret; |
| 2141 | +#else |
| 2142 | + (void)jenv; |
| 2143 | + (void)jcl; |
| 2144 | + (void)x509Ptr; |
| 2145 | + (void)uriStr; |
| 2146 | + (void)isCritical; |
| 2147 | + return (jint)NOT_COMPILED_IN; |
| 2148 | +#endif |
| 2149 | +} |
| 2150 | + |
| 2151 | +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1set_1crl_1info |
| 2152 | + (JNIEnv* jenv, jclass jcl, jlong x509Ptr, jbyteArray crlInfoDerBytes) |
| 2153 | +{ |
| 2154 | +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_CERTS) && \ |
| 2155 | + (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ |
| 2156 | + defined(WOLFSSL_CERT_EXT) |
| 2157 | + WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr; |
| 2158 | + byte* crlInfo = NULL; |
| 2159 | + int crlInfoSz = 0; |
| 2160 | + int ret; |
| 2161 | + (void)jcl; |
| 2162 | + |
| 2163 | + if (jenv == NULL || x509 == NULL || crlInfoDerBytes == NULL) { |
| 2164 | + return WOLFSSL_FAILURE; |
| 2165 | + } |
| 2166 | + |
| 2167 | + crlInfo = (byte*)(*jenv)->GetByteArrayElements(jenv, crlInfoDerBytes, NULL); |
| 2168 | + crlInfoSz = (*jenv)->GetArrayLength(jenv, crlInfoDerBytes); |
| 2169 | + |
| 2170 | + if (crlInfo == NULL || crlInfoSz == 0) { |
| 2171 | + return WOLFSSL_FAILURE; |
| 2172 | + } |
| 2173 | + |
| 2174 | + ret = wolfSSL_X509_CRL_set_dist_points(x509, crlInfo, crlInfoSz); |
| 2175 | + |
| 2176 | + (*jenv)->ReleaseByteArrayElements(jenv, crlInfoDerBytes, |
| 2177 | + (jbyte*)crlInfo, JNI_ABORT); |
| 2178 | + |
| 2179 | + return ret; |
| 2180 | +#else |
| 2181 | + (void)jenv; |
| 2182 | + (void)jcl; |
| 2183 | + (void)x509Ptr; |
| 2184 | + (void)crlInfoDerBytes; |
| 2185 | + return (jint)NOT_COMPILED_IN; |
| 2186 | +#endif |
| 2187 | +} |
| 2188 | + |
0 commit comments