Commit 3221022fc9f10a3dd28a46e333485cfe3597c5c4

Authored by oltolm
Committed by Jay Berkenbilt
1 parent 32245ca3

fix WindowsCryptProvider fixes #432

libqpdf/SecureRandomDataProvider.cc
@@ -42,60 +42,15 @@ class WindowsCryptProvider @@ -42,60 +42,15 @@ class WindowsCryptProvider
42 public: 42 public:
43 WindowsCryptProvider() 43 WindowsCryptProvider()
44 { 44 {
45 - if (!CryptAcquireContext(&crypt_prov,  
46 - "Container", 45 + if (!CryptAcquireContextW(&crypt_prov,
  46 + NULL,
47 NULL, 47 NULL,
48 PROV_RSA_FULL, 48 PROV_RSA_FULL,
49 - CRYPT_MACHINE_KEYSET)) 49 + CRYPT_VERIFYCONTEXT))
50 { 50 {
51 -#if ((defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) || \  
52 - defined(__clang__))  
53 -# pragma GCC diagnostic push  
54 -# pragma GCC diagnostic ignored "-Wold-style-cast"  
55 -# pragma GCC diagnostic ignored "-Wsign-compare"  
56 -# pragma GCC diagnostic ignored "-Wsign-conversion"  
57 -#endif  
58 - if (GetLastError() == NTE_BAD_KEYSET)  
59 - {  
60 - if (! CryptAcquireContext(&crypt_prov,  
61 - "Container",  
62 - NULL,  
63 - PROV_RSA_FULL,  
64 - CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET))  
65 - {  
66 - throw std::runtime_error(  
67 - "unable to acquire crypt context with new keyset: " +  
68 - getErrorMessage());  
69 - }  
70 - }  
71 - else if (GetLastError() == NTE_EXISTS)  
72 - {  
73 - throw std::runtime_error(  
74 - "unable to acquire crypt context; the key container"  
75 - " already exists, but you are attempting to create it."  
76 - " If a previous attempt to open the key failed with"  
77 - " NTE_BAD_KEYSET, it implies that access to the key"  
78 - " container is denied. Error: " + getErrorMessage());  
79 - }  
80 - else if (GetLastError() == NTE_KEYSET_NOT_DEF)  
81 - {  
82 - throw std::runtime_error(  
83 - "unable to acquire crypt context; the Crypto Service"  
84 - " Provider (CSP) may not be set up correctly. Use of"  
85 - " Regsvr32.exe on CSP DLLs (Rsabase.dll or Rsaenh.dll)"  
86 - " may fix the problem, depending on the provider being"  
87 - " used. Error: " + getErrorMessage());  
88 - }  
89 - else  
90 - {  
91 throw std::runtime_error( 51 throw std::runtime_error(
92 "unable to acquire crypt context: " + 52 "unable to acquire crypt context: " +
93 getErrorMessage()); 53 getErrorMessage());
94 - }  
95 -#if ((defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) || \  
96 - defined(__clang__))  
97 -# pragma GCC diagnostic pop  
98 -#endif  
99 } 54 }
100 } 55 }
101 ~WindowsCryptProvider() 56 ~WindowsCryptProvider()