src/jdk.crypto.mscapi/windows/native/libsunmscapi/security.cpp
changeset 54827 01fa7f06f806
parent 54639 2cac7d48db4c
equal deleted inserted replaced
54826:4ef4d55a129b 54827:01fa7f06f806
   647                                 BYTE buffer[32];
   647                                 BYTE buffer[32];
   648                                 DWORD len = 0;
   648                                 DWORD len = 0;
   649                                 if (::NCryptGetProperty(
   649                                 if (::NCryptGetProperty(
   650                                         hCryptProv, NCRYPT_ALGORITHM_PROPERTY,
   650                                         hCryptProv, NCRYPT_ALGORITHM_PROPERTY,
   651                                         (PBYTE)buffer, 32, &len, NCRYPT_SILENT_FLAG) == ERROR_SUCCESS) {
   651                                         (PBYTE)buffer, 32, &len, NCRYPT_SILENT_FLAG) == ERROR_SUCCESS) {
       
   652                                     jstring name = env->NewStringUTF(pszNameString);
       
   653                                     if (name == NULL) {
       
   654                                         __leave;
       
   655                                     }
   652                                     if (buffer[0] == 'E' && buffer[2] == 'C'
   656                                     if (buffer[0] == 'E' && buffer[2] == 'C'
   653                                             && (dwPublicKeyLength == 256
   657                                             && (dwPublicKeyLength == 256
   654                                                     || dwPublicKeyLength == 384
   658                                                     || dwPublicKeyLength == 384
   655                                                     || dwPublicKeyLength == 521)) {
   659                                                     || dwPublicKeyLength == 521)) {
   656                                         jstring name = env->NewStringUTF(pszNameString);
       
   657                                         if (name == NULL) {
       
   658                                             __leave;
       
   659                                         }
       
   660                                         env->CallVoidMethod(obj, mGenKeyAndCertChain,
   660                                         env->CallVoidMethod(obj, mGenKeyAndCertChain,
   661                                             0,
   661                                             0,
   662                                             name,
   662                                             name,
   663                                             (jlong) hCryptProv, 0,
   663                                             (jlong) hCryptProv, 0,
   664                                             dwPublicKeyLength, jArrayList);
   664                                             dwPublicKeyLength, jArrayList);
       
   665                                     } else if (buffer[0] == 'R' && buffer[2] == 'S'
       
   666                                             && buffer[4] == 'A') {
       
   667                                         env->CallVoidMethod(obj, mGenKeyAndCertChain,
       
   668                                             1,
       
   669                                             name,
       
   670                                             (jlong) hCryptProv, 0,
       
   671                                             dwPublicKeyLength, jArrayList);
       
   672                                     } else {
       
   673                                         dump("Unknown NCRYPT_ALGORITHM_PROPERTY", buffer, len);
   665                                     }
   674                                     }
   666                                 }
   675                                 }
   667                             }
   676                             }
   668                         }
   677                         }
   669                     }
   678                     }
   888             param = NULL;
   897             param = NULL;
   889             dwFlags = 0;
   898             dwFlags = 0;
   890             break;
   899             break;
   891         case 1:
   900         case 1:
   892             BCRYPT_PKCS1_PADDING_INFO pkcs1Info;
   901             BCRYPT_PKCS1_PADDING_INFO pkcs1Info;
   893             pkcs1Info.pszAlgId = MapHashIdentifier(env, jHashAlgorithm);
   902             if (jHashAlgorithm) {
   894             if (pkcs1Info.pszAlgId == NULL) {
   903                 pkcs1Info.pszAlgId = MapHashIdentifier(env, jHashAlgorithm);
   895                 ThrowExceptionWithMessage(env, SIGNATURE_EXCEPTION,
   904                 if (pkcs1Info.pszAlgId == NULL) {
   896                         "Unrecognised hash algorithm");
   905                     ThrowExceptionWithMessage(env, SIGNATURE_EXCEPTION,
   897                 __leave;
   906                             "Unrecognised hash algorithm");
       
   907                     __leave;
       
   908                 }
       
   909             } else {
       
   910                 pkcs1Info.pszAlgId = NULL;
   898             }
   911             }
   899             param = &pkcs1Info;
   912             param = &pkcs1Info;
   900             dwFlags = BCRYPT_PAD_PKCS1;
   913             dwFlags = BCRYPT_PAD_PKCS1;
   901             break;
   914             break;
   902         case 2:
   915         case 2:
  1119             param = NULL;
  1132             param = NULL;
  1120             dwFlags = 0;
  1133             dwFlags = 0;
  1121             break;
  1134             break;
  1122         case 1:
  1135         case 1:
  1123             BCRYPT_PKCS1_PADDING_INFO pkcs1Info;
  1136             BCRYPT_PKCS1_PADDING_INFO pkcs1Info;
  1124             pkcs1Info.pszAlgId = MapHashIdentifier(env, jHashAlgorithm);
  1137             if (jHashAlgorithm) {
  1125             if (pkcs1Info.pszAlgId == NULL) {
  1138                 pkcs1Info.pszAlgId = MapHashIdentifier(env, jHashAlgorithm);
  1126                 ThrowExceptionWithMessage(env, SIGNATURE_EXCEPTION,
  1139                 if (pkcs1Info.pszAlgId == NULL) {
  1127                         "Unrecognised hash algorithm");
  1140                     ThrowExceptionWithMessage(env, SIGNATURE_EXCEPTION,
  1128                 __leave;
  1141                             "Unrecognised hash algorithm");
       
  1142                     __leave;
       
  1143                 }
       
  1144             } else {
       
  1145                 pkcs1Info.pszAlgId = NULL;
  1129             }
  1146             }
  1130             param = &pkcs1Info;
  1147             param = &pkcs1Info;
  1131             dwFlags = NCRYPT_PAD_PKCS1_FLAG;
  1148             dwFlags = NCRYPT_PAD_PKCS1_FLAG;
  1132             break;
  1149             break;
  1133         case 2:
  1150         case 2: