javacommons/security/src/midpauthenticationmoduleimpl.cpp
changeset 49 35baca0e7a2e
parent 21 2a9601315dfc
child 56 abc41079b313
equal deleted inserted replaced
35:85266cc22c7f 49:35baca0e7a2e
    20 #include "com_nokia_mj_impl_security_midp_authentication_AuthenticationModule.h"
    20 #include "com_nokia_mj_impl_security_midp_authentication_AuthenticationModule.h"
    21 #include "midpauthenticationmodule.h"
    21 #include "midpauthenticationmodule.h"
    22 #include "midpauthenticationmoduleimpl.h"
    22 #include "midpauthenticationmoduleimpl.h"
    23 #include "storagehandler.h"
    23 #include "storagehandler.h"
    24 #include "securityutils.h"
    24 #include "securityutils.h"
       
    25 #include "telutils.h"
    25 #include "javacertstorehandler.h"
    26 #include "javacertstorehandler.h"
    26 #include "securitycommsmessagedefs.h"
    27 #include "securitycommsmessagedefs.h"
    27 #include "javastorage.h"
    28 #include "javastorage.h"
    28 #include "javastoragenames.h"
    29 #include "javastoragenames.h"
    29 #include "logger.h"
    30 #include "logger.h"
    36 #include <openssl/x509_vfy.h>
    37 #include <openssl/x509_vfy.h>
    37 #include <openssl/asn1.h>
    38 #include <openssl/asn1.h>
    38 #include <openssl/err.h>
    39 #include <openssl/err.h>
    39 #include <openssl/rsa.h>
    40 #include <openssl/rsa.h>
    40 #include <openssl/sha.h>
    41 #include <openssl/sha.h>
    41 #include <sys/time.h>
       
    42 #include <string.h>
    42 #include <string.h>
       
    43 #include <errno.h>
    43 
    44 
    44 using namespace java::security;
    45 using namespace java::security;
    45 using namespace java::storage;
    46 using namespace java::storage;
    46 using namespace java::util;
    47 using namespace java::util;
    47 using namespace std;
    48 using namespace std;
   249     {
   250     {
   250         jstring hash = env->NewStringUTF(jar_hash_value);
   251         jstring hash = env->NewStringUTF(jar_hash_value);
   251         delete[] jar_hash_value;
   252         delete[] jar_hash_value;
   252         jar_hash_value = NULL;
   253         jar_hash_value = NULL;
   253         return hash;
   254         return hash;
       
   255     }
       
   256     else
       
   257     {
       
   258         if (errno == ENOENT)
       
   259         {
       
   260             SecurityUtils::throw_exception(env, "JAR_NOT_FOUND");
       
   261         }
   254     }
   262     }
   255     return NULL;
   263     return NULL;
   256 }
   264 }
   257 
   265 
   258 JNIEXPORT jobject JNICALL Java_com_nokia_mj_impl_security_midp_authentication_AuthenticationModule__1parseCertificate
   266 JNIEXPORT jobject JNICALL Java_com_nokia_mj_impl_security_midp_authentication_AuthenticationModule__1parseCertificate
   453         {
   461         {
   454             ret_code = getErrCode(ERR_get_error());
   462             ret_code = getErrCode(ERR_get_error());
   455             break;
   463             break;
   456         }
   464         }
   457 
   465 
   458         struct timeval tv;
   466         X509_STORE_CTX_set_time(x509_ctx, X509_V_FLAG_USE_CHECK_TIME, TelUtils::getSecureTime());
   459         int i = gettimeofday(&tv, NULL);
       
   460         X509_STORE_CTX_set_time(x509_ctx, X509_V_FLAG_USE_CHECK_TIME, tv.tv_sec);
       
   461         // set the callback for validation - needed for the critical extension
   467         // set the callback for validation - needed for the critical extension
   462         // used by developer certificates
   468         // used by developer certificates
   463         X509_STORE_CTX_set_verify_cb(x509_ctx, verify_callback);
   469         X509_STORE_CTX_set_verify_cb(x509_ctx, verify_callback);
   464 
   470 
   465         // verify certificate
   471         // verify certificate
   473         EXTENDED_KEY_USAGE *extKeyUsage;
   479         EXTENDED_KEY_USAGE *extKeyUsage;
   474         if ((extKeyUsage=(EXTENDED_KEY_USAGE*)X509_get_ext_d2i(end_entity_cert, NID_ext_key_usage, NULL, NULL)) != NULL)
   480         if ((extKeyUsage=(EXTENDED_KEY_USAGE*)X509_get_ext_d2i(end_entity_cert, NID_ext_key_usage, NULL, NULL)) != NULL)
   475         {
   481         {
   476             bool extKeyUsageKnown = false;
   482             bool extKeyUsageKnown = false;
   477             char EXT_KEY_USAGE_OID[80];
   483             char EXT_KEY_USAGE_OID[80];
   478             for (i = 0; i < sk_ASN1_OBJECT_num(extKeyUsage); i++)
   484             for (int i = 0; i < sk_ASN1_OBJECT_num(extKeyUsage); i++)
   479             {
   485             {
   480                 ASN1_OBJECT *usage = sk_ASN1_OBJECT_value(extKeyUsage,i);
   486                 ASN1_OBJECT *usage = sk_ASN1_OBJECT_value(extKeyUsage,i);
   481                 OBJ_obj2txt(EXT_KEY_USAGE_OID,
   487                 OBJ_obj2txt(EXT_KEY_USAGE_OID,
   482                             sizeof(EXT_KEY_USAGE_OID),
   488                             sizeof(EXT_KEY_USAGE_OID),
   483                             usage,
   489                             usage,