00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef WINCAPICRYPTOKEYRSA_INCLUDE
00029 #define WINCAPICRYPTOKEYRSA_INCLUDE
00030
00031 #include <xsec/enc/XSECCryptoKeyRSA.hpp>
00032
00033 #if !defined(_WIN32_WINNT)
00034 # define _WIN32_WINNT 0x0400
00035 #endif
00036
00037 #include <wincrypt.h>
00038
00039 class WinCAPICryptoProvider;
00040
00052 class DSIG_EXPORT WinCAPICryptoKeyRSA : public XSECCryptoKeyRSA {
00053
00054 public :
00055
00058
00069 WinCAPICryptoKeyRSA(HCRYPTPROV prov);
00070
00083 WinCAPICryptoKeyRSA(HCRYPTPROV prov, HCRYPTKEY k);
00084
00096 WinCAPICryptoKeyRSA(HCRYPTPROV prov, DWORD keySpec, bool isPrivate);
00097
00098 virtual ~WinCAPICryptoKeyRSA();
00099
00101
00104
00112 virtual XSECCryptoKey::KeyType getKeyType();
00113
00118 virtual const XMLCh * getProviderName() {return DSIGConstants::s_unicodeStrPROVWinCAPI;}
00119
00124 virtual XSECCryptoKey * clone();
00125
00127
00133
00151 virtual void setOAEPparams(unsigned char * params, unsigned int paramsLen);
00152
00161 virtual unsigned int getOAEPparamsLen(void);
00162
00172 virtual const unsigned char * getOAEPparams(void);
00173
00187 virtual bool verifySHA1PKCS1Base64Signature(const unsigned char * hashBuf,
00188 unsigned int hashLen,
00189 const char * base64Signature,
00190 unsigned int sigLen);
00191
00208 virtual unsigned int signSHA1PKCS1Base64Signature(unsigned char * hashBuf,
00209 unsigned int hashLen,
00210 char * base64SignatureBuf,
00211 unsigned int base64SignatureBufLen);
00212
00228 virtual unsigned int privateDecrypt(const unsigned char * inBuf,
00229 unsigned char * plainBuf,
00230 unsigned int inLength,
00231 unsigned int maxOutLength,
00232 PaddingType padding,
00233 hashMethod hm);
00234
00250 virtual unsigned int publicEncrypt(const unsigned char * inBuf,
00251 unsigned char * cipherBuf,
00252 unsigned int inLength,
00253 unsigned int maxOutLength,
00254 PaddingType padding,
00255 hashMethod hm);
00256
00263 virtual unsigned int getLength(void);
00264
00266
00273
00283 virtual void loadPublicModulusBase64BigNums(const char * b64, unsigned int len);
00284
00294 virtual void loadPublicExponentBase64BigNums(const char * b64, unsigned int len);
00295
00297
00300
00301
00312 unsigned int getExponentBase64BigNums(char * b64, unsigned int len);
00313
00324 unsigned int getModulusBase64BigNums(char * b64, unsigned int len);
00325
00327
00328 private:
00329
00330 HCRYPTPROV m_p;
00331 HCRYPTKEY m_key;
00332 DWORD m_keySpec;
00333
00334 BYTE * mp_modulus;
00335 BYTE * mp_exponent;
00336
00337 unsigned int m_modulusLen;
00338 unsigned int m_exponentLen;
00339
00340
00341
00342 void importKey(void);
00343 void loadParamsFromKey(void);
00344
00345 };
00346
00347 #endif