JNI: get ASN algo enum values dynamically in static class block, more flexible if native enum values change

pull/111/head
Chris Conlon 2025-05-08 14:32:35 -06:00
parent be7df09642
commit 4fa8642264
4 changed files with 105 additions and 27 deletions

View File

@ -9,16 +9,46 @@ extern "C" {
#endif #endif
#undef com_wolfssl_wolfcrypt_Asn_MAX_ENCODED_SIG_SIZE #undef com_wolfssl_wolfcrypt_Asn_MAX_ENCODED_SIG_SIZE
#define com_wolfssl_wolfcrypt_Asn_MAX_ENCODED_SIG_SIZE 512L #define com_wolfssl_wolfcrypt_Asn_MAX_ENCODED_SIG_SIZE 512L
#undef com_wolfssl_wolfcrypt_Asn_DSAk /*
#define com_wolfssl_wolfcrypt_Asn_DSAk 515L * Class: com_wolfssl_wolfcrypt_Asn
#undef com_wolfssl_wolfcrypt_Asn_RSAk * Method: getDSAk
#define com_wolfssl_wolfcrypt_Asn_RSAk 645L * Signature: ()I
#undef com_wolfssl_wolfcrypt_Asn_RSAPSSk */
#define com_wolfssl_wolfcrypt_Asn_RSAPSSk 654L JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getDSAk
#undef com_wolfssl_wolfcrypt_Asn_RSAESOAEPk (JNIEnv *, jclass);
#define com_wolfssl_wolfcrypt_Asn_RSAESOAEPk 651L
#undef com_wolfssl_wolfcrypt_Asn_ECDSAk /*
#define com_wolfssl_wolfcrypt_Asn_ECDSAk 518L * Class: com_wolfssl_wolfcrypt_Asn
* Method: getRSAk
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getRSAk
(JNIEnv *, jclass);
/*
* Class: com_wolfssl_wolfcrypt_Asn
* Method: getRSAPSSk
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getRSAPSSk
(JNIEnv *, jclass);
/*
* Class: com_wolfssl_wolfcrypt_Asn
* Method: getRSAESOAEPk
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getRSAESOAEPk
(JNIEnv *, jclass);
/*
* Class: com_wolfssl_wolfcrypt_Asn
* Method: getECDSAk
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getECDSAk
(JNIEnv *, jclass);
/* /*
* Class: com_wolfssl_wolfcrypt_Asn * Class: com_wolfssl_wolfcrypt_Asn
* Method: encodeSignature * Method: encodeSignature

View File

@ -35,6 +35,36 @@
/* #define WOLFCRYPT_JNI_DEBUG_ON */ /* #define WOLFCRYPT_JNI_DEBUG_ON */
#include <wolfcrypt_jni_debug.h> #include <wolfcrypt_jni_debug.h>
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getDSAk
(JNIEnv* env, jclass class)
{
return DSAk;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getRSAk
(JNIEnv* env, jclass class)
{
return RSAk;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getRSAPSSk
(JNIEnv* env, jclass class)
{
return RSAPSSk;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getRSAESOAEPk
(JNIEnv* env, jclass class)
{
return RSAESOAEPk;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getECDSAk
(JNIEnv* env, jclass class)
{
return ECDSAk;
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature__Ljava_nio_ByteBuffer_2Ljava_nio_ByteBuffer_2JI( JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature__Ljava_nio_ByteBuffer_2Ljava_nio_ByteBuffer_2JI(
JNIEnv* env, jclass class, jobject encoded_object, jobject hash_object, JNIEnv* env, jclass class, jobject encoded_object, jobject hash_object,
jlong hashSize, jint hashOID) jlong hashSize, jint hashOID)

View File

@ -661,16 +661,14 @@ public class WolfSSLKeyStore extends KeyStoreSpi {
"unprotected key"); "unprotected key");
} }
switch (algoId) { if (algoId == Asn.RSAk) {
case Asn.RSAk: keyFact = KeyFactory.getInstance("RSA");
keyFact = KeyFactory.getInstance("RSA"); } else if (algoId == Asn.ECDSAk) {
break; keyFact = KeyFactory.getInstance("EC");
case Asn.ECDSAk: } else {
keyFact = KeyFactory.getInstance("EC"); throw new NoSuchAlgorithmException(
break; "Only RSA and EC private key encoding " +
default: "supported: " + algoId);
throw new NoSuchAlgorithmException(
"Only RSA and EC private key encoding supported");
} }
try { try {

View File

@ -36,18 +36,38 @@ public class Asn extends WolfObject {
/* Key Sum values, from asn.h Key_Sum enum */ /* Key Sum values, from asn.h Key_Sum enum */
/** DSA key value, from asn.h Key_Sum enum */ /** DSA key value, from asn.h Key_Sum enum */
public static final int DSAk = 515; public static final int DSAk;
/** RSA key value, from asn.h Key_Sum enum */ /** RSA key value, from asn.h Key_Sum enum */
public static final int RSAk = 645; public static final int RSAk;
/** RSA-PSS key value, from asn.h Key_Sum enum */ /** RSA-PSS key value, from asn.h Key_Sum enum */
public static final int RSAPSSk = 654; public static final int RSAPSSk;
/** RSA-OAEP key value, from asn.h Key_Sum enum */ /** RSA-OAEP key value, from asn.h Key_Sum enum */
public static final int RSAESOAEPk = 651; public static final int RSAESOAEPk;
/** ECDSA key value, from asn.h Key_Sum enum */ /** ECDSA key value, from asn.h Key_Sum enum */
public static final int ECDSAk = 518; public static final int ECDSAk;
/** Default Asn constructor */ static {
public Asn() { } DSAk = getDSAk();
RSAk = getRSAk();
RSAPSSk = getRSAPSSk();
RSAESOAEPk = getRSAESOAEPk();
ECDSAk = getECDSAk();
}
/** Return value of native DSAk enum */
private static native int getDSAk();
/** Return value of native RSAk enum */
private static native int getRSAk();
/** Return value of native RSAPSSk enum */
private static native int getRSAPSSk();
/** Return value of native RSAESOAEPk enum */
private static native int getRSAESOAEPk();
/** Return value of native ECDSAk enum */
private static native int getECDSAk();
/** ASN.1 encode message digest, before it is signed /** ASN.1 encode message digest, before it is signed
* *