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: |