Browse Source

der_decode_subject_public_key_info: fix compile error

also make it possible to define min/max RSA key sizes externally

This closes #59
Steffen Jaeckel 10 years ago
parent
commit
90e968a202

+ 24 - 0
src/headers/tomcrypt_custom.h

@@ -367,6 +367,30 @@
 
 
 #endif /* LTC_NO_PK */
 #endif /* LTC_NO_PK */
 
 
+/* define these PK sizes out of LTC_NO_PK
+ * to have them always defined
+ */
+#if defined(LTC_MRSA)
+/* Min and Max RSA key sizes (in bits) */
+#ifndef MIN_RSA_SIZE
+#define MIN_RSA_SIZE 1024
+#endif
+#ifndef MAX_RSA_SIZE
+#define MAX_RSA_SIZE 4096
+#endif
+#endif
+
+/* in cases where you want ASN.1/DER functionality, but no
+ * RSA, you can define this externally if 1024 is not enough
+ */
+#if defined(LTC_MRSA)
+#define LTC_DER_MAX_PUBKEY_SIZE MAX_RSA_SIZE
+#elif !defined(LTC_DER_MAX_PUBKEY_SIZE)
+/* this includes DSA */
+#define LTC_DER_MAX_PUBKEY_SIZE 1024
+#endif
+
+
 /* PKCS #1 (RSA) and #5 (Password Handling) stuff */
 /* PKCS #1 (RSA) and #5 (Password Handling) stuff */
 #ifndef LTC_NO_PKCS
 #ifndef LTC_NO_PKCS
 
 

+ 0 - 4
src/headers/tomcrypt_pk.h

@@ -28,10 +28,6 @@ int pk_get_oid(int pk, oid_st *st);
 /* ---- RSA ---- */
 /* ---- RSA ---- */
 #ifdef LTC_MRSA
 #ifdef LTC_MRSA
 
 
-/* Min and Max RSA key sizes (in bits) */
-#define MIN_RSA_SIZE 1024
-#define MAX_RSA_SIZE 4096
-
 /** RSA PKCS style key */
 /** RSA PKCS style key */
 typedef struct Rsa_key {
 typedef struct Rsa_key {
     /** Type of key, PK_PRIVATE or PK_PUBLIC */
     /** Type of key, PK_PRIVATE or PK_PUBLIC */

+ 2 - 2
src/pk/asn1/der/sequence/der_decode_subject_public_key_info.c

@@ -54,7 +54,7 @@ int der_decode_subject_public_key_info(const unsigned char *in, unsigned long in
    }
    }
 
 
    /* see if the OpenSSL DER format RSA public key will work */
    /* see if the OpenSSL DER format RSA public key will work */
-   tmpbuf = XCALLOC(1, MAX_RSA_SIZE*8);
+   tmpbuf = XCALLOC(1, LTC_DER_MAX_PUBKEY_SIZE*8);
    if (tmpbuf == NULL) {
    if (tmpbuf == NULL) {
        err = CRYPT_MEM;
        err = CRYPT_MEM;
        goto LBL_ERR;
        goto LBL_ERR;
@@ -68,7 +68,7 @@ int der_decode_subject_public_key_info(const unsigned char *in, unsigned long in
     * in a **BIT** string ... so we have to extract it then proceed to convert bit to octet
     * in a **BIT** string ... so we have to extract it then proceed to convert bit to octet
     */
     */
    LTC_SET_ASN1(subject_pubkey, 0, LTC_ASN1_SEQUENCE, alg_id, 2);
    LTC_SET_ASN1(subject_pubkey, 0, LTC_ASN1_SEQUENCE, alg_id, 2);
-   LTC_SET_ASN1(subject_pubkey, 1, LTC_ASN1_RAW_BIT_STRING, tmpbuf, MAX_RSA_SIZE*8);
+   LTC_SET_ASN1(subject_pubkey, 1, LTC_ASN1_RAW_BIT_STRING, tmpbuf, LTC_DER_MAX_PUBKEY_SIZE*8);
 
 
    err=der_decode_sequence(in, inlen, subject_pubkey, 2UL);
    err=der_decode_sequence(in, inlen, subject_pubkey, 2UL);
    if (err != CRYPT_OK) {
    if (err != CRYPT_OK) {