1 /* 2 * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the License); you may 5 * not use this file except in compliance with the License. 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 */ 9 10 11 #ifndef SKFUTIL_SKF_INT_H 12 #define SKFUTIL_SKF_INT_H 13 14 #include "../sgd.h" 15 #include "skf.h" 16 17 18 typedef ULONG (DEVAPI *SKF_WaitForDevEvent_FuncPtr)( 19 LPSTR szDevName, 20 ULONG *pulDevNameLen, 21 ULONG *pulEvent); 22 23 typedef ULONG (DEVAPI *SKF_CancelWaitForDevEvent_FuncPtr)( 24 void); 25 26 typedef ULONG (DEVAPI *SKF_EnumDev_FuncPtr)( 27 BOOL bPresent, 28 LPSTR szNameList, 29 ULONG *pulSize); 30 31 typedef ULONG (DEVAPI *SKF_ConnectDev_FuncPtr)( 32 LPSTR szName, 33 DEVHANDLE *phDev); 34 35 typedef ULONG (DEVAPI *SKF_DisConnectDev_FuncPtr)( 36 DEVHANDLE hDev); 37 38 typedef ULONG (DEVAPI *SKF_GetDevState_FuncPtr)( 39 LPSTR szDevName, 40 ULONG *pulDevState); 41 42 typedef ULONG (DEVAPI *SKF_SetLabel_FuncPtr)( 43 DEVHANDLE hDev, 44 LPSTR szLabel); 45 46 typedef ULONG (DEVAPI *SKF_GetDevInfo_FuncPtr)( 47 DEVHANDLE hDev, 48 DEVINFO *pDevInfo); 49 50 typedef ULONG (DEVAPI *SKF_LockDev_FuncPtr)( 51 DEVHANDLE hDev, 52 ULONG ulTimeOut); 53 54 typedef ULONG (DEVAPI *SKF_UnlockDev_FuncPtr)( 55 DEVHANDLE hDev); 56 57 typedef ULONG (DEVAPI *SKF_Transmit_FuncPtr)( 58 DEVHANDLE hDev, 59 BYTE *pbCommand, 60 ULONG ulCommandLen, 61 BYTE *pbData, 62 ULONG *pulDataLen); 63 64 typedef ULONG (DEVAPI *SKF_ChangeDevAuthKey_FuncPtr)( 65 DEVHANDLE hDev, 66 BYTE *pbKeyValue, 67 ULONG ulKeyLen); 68 69 typedef ULONG (DEVAPI *SKF_DevAuth_FuncPtr)( 70 DEVHANDLE hDev, 71 BYTE *pbAuthData, 72 ULONG ulLen); 73 74 typedef ULONG (DEVAPI *SKF_ChangePIN_FuncPtr)( 75 HAPPLICATION hApplication, 76 ULONG ulPINType, 77 LPSTR szOldPin, 78 LPSTR szNewPin, 79 ULONG *pulRetryCount); 80 81 typedef LONG (DEVAPI *SKF_GetPINInfo_FuncPtr)( 82 HAPPLICATION hApplication, 83 ULONG ulPINType, 84 ULONG *pulMaxRetryCount, 85 ULONG *pulRemainRetryCount, 86 BOOL *pbDefaultPin); 87 88 typedef ULONG (DEVAPI *SKF_VerifyPIN_FuncPtr)( 89 HAPPLICATION hApplication, 90 ULONG ulPINType, 91 LPSTR szPIN, 92 ULONG *pulRetryCount); 93 94 typedef ULONG (DEVAPI *SKF_UnblockPIN_FuncPtr)( 95 HAPPLICATION hApplication, 96 LPSTR szAdminPIN, 97 LPSTR szNewUserPIN, 98 ULONG *pulRetryCount); 99 100 typedef ULONG (DEVAPI *SKF_ClearSecureState_FuncPtr)( 101 HAPPLICATION hApplication); 102 103 typedef ULONG (DEVAPI *SKF_CreateApplication_FuncPtr)( 104 DEVHANDLE hDev, 105 LPSTR szAppName, 106 LPSTR szAdminPin, 107 DWORD dwAdminPinRetryCount, 108 LPSTR szUserPin, 109 DWORD dwUserPinRetryCount, 110 DWORD dwCreateFileRights, 111 HAPPLICATION *phApplication); 112 113 typedef ULONG (DEVAPI *SKF_EnumApplication_FuncPtr)( 114 DEVHANDLE hDev, 115 LPSTR szAppName, 116 ULONG *pulSize); 117 118 typedef ULONG (DEVAPI *SKF_DeleteApplication_FuncPtr)( 119 DEVHANDLE hDev, 120 LPSTR szAppName); 121 122 typedef ULONG (DEVAPI *SKF_OpenApplication_FuncPtr)( 123 DEVHANDLE hDev, 124 LPSTR szAppName, 125 HAPPLICATION *phApplication); 126 127 typedef ULONG (DEVAPI *SKF_CloseApplication_FuncPtr)( 128 HAPPLICATION hApplication); 129 130 typedef ULONG (DEVAPI *SKF_CreateObject_FuncPtr)( 131 HAPPLICATION hApplication, 132 LPSTR szFileName, 133 ULONG ulFileSize, 134 ULONG ulReadRights, 135 ULONG ulWriteRights); 136 137 typedef ULONG (DEVAPI *SKF_DeleteObject_FuncPtr)( 138 HAPPLICATION hApplication, 139 LPSTR szFileName); 140 141 typedef ULONG (DEVAPI *SKF_EnumObjects_FuncPtr)( 142 HAPPLICATION hApplication, 143 LPSTR szFileList, 144 ULONG *pulSize); 145 146 typedef ULONG (DEVAPI *SKF_GetObjectInfo_FuncPtr)( 147 HAPPLICATION hApplication, 148 LPSTR szFileName, 149 FILEATTRIBUTE *pFileInfo); 150 151 typedef ULONG (DEVAPI *SKF_ReadObject_FuncPtr)( 152 HAPPLICATION hApplication, 153 LPSTR szFileName, 154 ULONG ulOffset, 155 ULONG ulSize, 156 BYTE *pbOutData, 157 ULONG *pulOutLen); 158 159 typedef ULONG (DEVAPI *SKF_WriteObject_FuncPtr)( 160 HAPPLICATION hApplication, 161 LPSTR szFileName, 162 ULONG ulOffset, 163 BYTE *pbData, 164 ULONG ulSize); 165 166 typedef ULONG (DEVAPI *SKF_CreateContainer_FuncPtr)( 167 HAPPLICATION hApplication, 168 LPSTR szContainerName, 169 HCONTAINER *phContainer); 170 171 typedef ULONG (DEVAPI *SKF_DeleteContainer_FuncPtr)( 172 HAPPLICATION hApplication, 173 LPSTR szContainerName); 174 175 typedef ULONG (DEVAPI *SKF_EnumContainer_FuncPtr)( 176 HAPPLICATION hApplication, 177 LPSTR szContainerName, 178 ULONG *pulSize); 179 180 typedef ULONG (DEVAPI *SKF_OpenContainer_FuncPtr)( 181 HAPPLICATION hApplication, 182 LPSTR szContainerName, 183 HCONTAINER *phContainer); 184 185 typedef ULONG (DEVAPI *SKF_CloseContainer_FuncPtr)( 186 HCONTAINER hContainer); 187 188 typedef ULONG (DEVAPI *SKF_GetContainerType_FuncPtr)( 189 HCONTAINER hContainer, 190 ULONG *pulContainerType); 191 192 typedef ULONG (DEVAPI *SKF_ImportCertificate_FuncPtr)( 193 HCONTAINER hContainer, 194 BOOL bExportSignKey, 195 BYTE *pbCert, 196 ULONG ulCertLen); 197 198 typedef ULONG (DEVAPI *SKF_ExportCertificate_FuncPtr)( 199 HCONTAINER hContainer, 200 BOOL bSignFlag, 201 BYTE *pbCert, 202 ULONG *pulCertLen); 203 204 typedef ULONG (DEVAPI *SKF_ExportPublicKey_FuncPtr)( 205 HCONTAINER hContainer, 206 BOOL bSignFlag, 207 BYTE *pbBlob, 208 ULONG *pulBlobLen); 209 210 typedef ULONG (DEVAPI *SKF_GenRandom_FuncPtr)( 211 DEVHANDLE hDev, 212 BYTE *pbRandom, 213 ULONG ulRandomLen); 214 215 typedef ULONG (DEVAPI *SKF_GenExtRSAKey_FuncPtr)( 216 DEVHANDLE hDev, 217 ULONG ulBitsLen, 218 RSAPRIVATEKEYBLOB *pBlob); 219 220 typedef ULONG (DEVAPI *SKF_GenRSAKeyPair_FuncPtr)( 221 HCONTAINER hContainer, 222 ULONG ulBitsLen, 223 RSAPUBLICKEYBLOB *pBlob); 224 225 typedef ULONG (DEVAPI *SKF_ImportRSAKeyPair_FuncPtr)( 226 HCONTAINER hContainer, 227 ULONG ulSymAlgId, 228 BYTE *pbWrappedKey, 229 ULONG ulWrappedKeyLen, 230 BYTE *pbEncryptedData, 231 ULONG ulEncryptedDataLen); 232 233 typedef ULONG (DEVAPI *SKF_RSASignData_FuncPtr)( 234 HCONTAINER hContainer, 235 BYTE *pbData, 236 ULONG ulDataLen, 237 BYTE *pbSignature, 238 ULONG *pulSignLen); 239 240 typedef ULONG (DEVAPI *SKF_RSAVerify_FuncPtr)( 241 DEVHANDLE hDev, 242 RSAPUBLICKEYBLOB *pRSAPubKeyBlob, 243 BYTE *pbData, 244 ULONG ulDataLen, 245 BYTE *pbSignature, 246 ULONG ulSignLen); 247 248 typedef ULONG (DEVAPI *SKF_RSAExportSessionKey_FuncPtr)( 249 HCONTAINER hContainer, 250 ULONG ulAlgId, 251 RSAPUBLICKEYBLOB *pPubKey, 252 BYTE *pbData, 253 ULONG *pulDataLen, 254 HANDLE *phSessionKey); 255 256 typedef ULONG (DEVAPI *SKF_ExtRSAPubKeyOperation_FuncPtr)( 257 DEVHANDLE hDev, 258 RSAPUBLICKEYBLOB *pRSAPubKeyBlob, 259 BYTE *pbInput, 260 ULONG ulInputLen, 261 BYTE *pbOutput, 262 ULONG *pulOutputLen); 263 264 typedef ULONG (DEVAPI *SKF_ExtRSAPriKeyOperation_FuncPtr)( 265 DEVHANDLE hDev, 266 RSAPRIVATEKEYBLOB *pRSAPriKeyBlob, 267 BYTE *pbInput, 268 ULONG ulInputLen, 269 BYTE *pbOutput, 270 ULONG *pulOutputLen); 271 272 typedef ULONG (DEVAPI *SKF_GenECCKeyPair_FuncPtr)( 273 HCONTAINER hContainer, 274 ULONG ulAlgId, 275 ECCPUBLICKEYBLOB *pBlob); 276 277 typedef ULONG (DEVAPI *SKF_ImportECCKeyPair_FuncPtr)( 278 HCONTAINER hContainer, 279 ENVELOPEDKEYBLOB *pEnvelopedKeyBlob); 280 281 typedef ULONG (DEVAPI *SKF_ECCSignData_FuncPtr)( 282 HCONTAINER hContainer, 283 BYTE *pbDigest, 284 ULONG ulDigestLen, 285 ECCSIGNATUREBLOB *pSignature); 286 287 typedef ULONG (DEVAPI *SKF_ECCVerify_FuncPtr)( 288 DEVHANDLE hDev, 289 ECCPUBLICKEYBLOB *pECCPubKeyBlob, 290 BYTE *pbData, 291 ULONG ulDataLen, 292 ECCSIGNATUREBLOB *pSignature); 293 294 typedef ULONG (DEVAPI *SKF_ECCExportSessionKey_FuncPtr)( 295 HCONTAINER hContainer, 296 ULONG ulAlgId, 297 ECCPUBLICKEYBLOB *pPubKey, 298 ECCCIPHERBLOB *pData, 299 HANDLE *phSessionKey); 300 301 typedef ULONG (DEVAPI *SKF_ExtECCEncrypt_FuncPtr)( 302 DEVHANDLE hDev, 303 ECCPUBLICKEYBLOB *pECCPubKeyBlob, 304 BYTE *pbPlainText, 305 ULONG ulPlainTextLen, 306 ECCCIPHERBLOB *pCipherText); 307 308 typedef ULONG (DEVAPI *SKF_ECCDecrypt_FuncPtr)( 309 HCONTAINER hContainer, 310 ECCCIPHERBLOB *pCipherText, 311 BYTE *pbPlainText, 312 ULONG *pulPlainTextLen); 313 314 typedef ULONG (DEVAPI *SKF_ExtECCDecrypt_FuncPtr)( 315 DEVHANDLE hDev, 316 ECCPRIVATEKEYBLOB *pECCPriKeyBlob, 317 ECCCIPHERBLOB *pCipherText, 318 BYTE *pbPlainText, 319 ULONG *pulPlainTextLen); 320 321 typedef ULONG (DEVAPI *SKF_ExtECCSign_FuncPtr)( 322 DEVHANDLE hDev, 323 ECCPRIVATEKEYBLOB *pECCPriKeyBlob, 324 BYTE *pbData, 325 ULONG ulDataLen, 326 ECCSIGNATUREBLOB *pSignature); 327 328 typedef ULONG (DEVAPI *SKF_ExtECCVerify_FuncPtr)( 329 DEVHANDLE hDev, 330 ECCPUBLICKEYBLOB *pECCPubKeyBlob, 331 BYTE *pbData, 332 ULONG ulDataLen, 333 ECCSIGNATUREBLOB *pSignature); 334 335 typedef ULONG (DEVAPI *SKF_GenerateAgreementDataWithECC_FuncPtr)( 336 HCONTAINER hContainer, 337 ULONG ulAlgId, 338 ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, 339 BYTE *pbID, 340 ULONG ulIDLen, 341 HANDLE *phAgreementHandle); 342 343 typedef ULONG (DEVAPI *SKF_GenerateAgreementDataAndKeyWithECC_FuncPtr)( 344 HANDLE hContainer, 345 ULONG ulAlgId, 346 ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob, 347 ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob, 348 ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, 349 BYTE *pbID, 350 ULONG ulIDLen, 351 BYTE *pbSponsorID, 352 ULONG ulSponsorIDLen, 353 HANDLE *phKeyHandle); 354 355 typedef ULONG (DEVAPI *SKF_GenerateKeyWithECC_FuncPtr)( 356 HANDLE hAgreementHandle, 357 ECCPUBLICKEYBLOB *pECCPubKeyBlob, 358 ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, 359 BYTE *pbID, 360 ULONG ulIDLen, 361 HANDLE *phKeyHandle); 362 363 typedef ULONG (DEVAPI *SKF_ImportSessionKey_FuncPtr)( 364 HCONTAINER hContainer, 365 ULONG ulAlgId, 366 BYTE *pbWrapedData, 367 ULONG ulWrapedLen, 368 HANDLE *phKey); 369 370 typedef ULONG (DEVAPI *SKF_SetSymmKey_FuncPtr)( 371 DEVHANDLE hDev, 372 BYTE *pbKey, 373 ULONG ulAlgID, 374 HANDLE *phKey); 375 376 typedef ULONG (DEVAPI *SKF_EncryptInit_FuncPtr)( 377 HANDLE hKey, 378 BLOCKCIPHERPARAM EncryptParam); 379 380 typedef ULONG (DEVAPI *SKF_Encrypt_FuncPtr)( 381 HANDLE hKey, 382 BYTE *pbData, 383 ULONG ulDataLen, 384 BYTE *pbEncryptedData, 385 ULONG *pulEncryptedLen); 386 387 typedef ULONG (DEVAPI *SKF_EncryptUpdate_FuncPtr)( 388 HANDLE hKey, 389 BYTE *pbData, 390 ULONG ulDataLen, 391 BYTE *pbEncryptedData, 392 ULONG *pulEncryptedLen); 393 394 typedef ULONG (DEVAPI *SKF_EncryptFinal_FuncPtr)( 395 HANDLE hKey, 396 BYTE *pbEncryptedData, 397 ULONG *pulEncryptedDataLen); 398 399 typedef ULONG (DEVAPI *SKF_DecryptInit_FuncPtr)( 400 HANDLE hKey, 401 BLOCKCIPHERPARAM DecryptParam); 402 403 typedef ULONG (DEVAPI *SKF_Decrypt_FuncPtr)( 404 HANDLE hKey, 405 BYTE *pbEncryptedData, 406 ULONG ulEncryptedLen, 407 BYTE *pbData, 408 ULONG *pulDataLen); 409 410 typedef ULONG (DEVAPI *SKF_DecryptUpdate_FuncPtr)( 411 HANDLE hKey, 412 BYTE *pbEncryptedData, 413 ULONG ulEncryptedLen, 414 BYTE *pbData, 415 ULONG *pulDataLen); 416 417 typedef ULONG (DEVAPI *SKF_DecryptFinal_FuncPtr)( 418 HANDLE hKey, 419 BYTE *pbDecryptedData, 420 ULONG *pulDecryptedDataLen); 421 422 typedef ULONG (DEVAPI *SKF_DigestInit_FuncPtr)( 423 DEVHANDLE hDev, 424 ULONG ulAlgID, 425 ECCPUBLICKEYBLOB *pPubKey, 426 BYTE *pbID, 427 ULONG ulIDLen, 428 HANDLE *phHash); 429 430 typedef ULONG (DEVAPI *SKF_Digest_FuncPtr)( 431 HANDLE hHash, 432 BYTE *pbData, 433 ULONG ulDataLen, 434 BYTE *pbHashData, 435 ULONG *pulHashLen); 436 437 typedef ULONG (DEVAPI *SKF_DigestUpdate_FuncPtr)( 438 HANDLE hHash, 439 BYTE *pbData, 440 ULONG ulDataLen); 441 442 typedef ULONG (DEVAPI *SKF_DigestFinal_FuncPtr)( 443 HANDLE hHash, 444 BYTE *pHashData, 445 ULONG *pulHashLen); 446 447 typedef ULONG (DEVAPI *SKF_MacInit_FuncPtr)( 448 HANDLE hKey, 449 BLOCKCIPHERPARAM *pMacParam, 450 HANDLE *phMac); 451 452 typedef ULONG (DEVAPI *SKF_Mac_FuncPtr)( 453 HANDLE hMac, 454 BYTE *pbData, 455 ULONG ulDataLen, 456 BYTE *pbMacData, 457 ULONG *pulMacLen); 458 459 typedef ULONG (DEVAPI *SKF_MacUpdate_FuncPtr)( 460 HANDLE hMac, 461 BYTE *pbData, 462 ULONG ulDataLen); 463 464 typedef ULONG (DEVAPI *SKF_MacFinal_FuncPtr)( 465 HANDLE hMac, 466 BYTE *pbMacData, 467 ULONG *pulMacDataLen); 468 469 typedef ULONG (DEVAPI *SKF_CloseHandle_FuncPtr)( 470 HANDLE hHandle); 471 472 473 typedef struct skf_method_st { 474 char *name; 475 void *dso; 476 SKF_WaitForDevEvent_FuncPtr WaitForDevEvent; 477 SKF_CancelWaitForDevEvent_FuncPtr CancelWaitForDevEvent; 478 SKF_EnumDev_FuncPtr EnumDev; 479 SKF_ConnectDev_FuncPtr ConnectDev; 480 SKF_DisConnectDev_FuncPtr DisConnectDev; 481 SKF_GetDevState_FuncPtr GetDevState; 482 SKF_SetLabel_FuncPtr SetLabel; 483 SKF_GetDevInfo_FuncPtr GetDevInfo; 484 SKF_LockDev_FuncPtr LockDev; 485 SKF_UnlockDev_FuncPtr UnlockDev; 486 SKF_Transmit_FuncPtr Transmit; 487 SKF_ChangeDevAuthKey_FuncPtr ChangeDevAuthKey; 488 SKF_DevAuth_FuncPtr DevAuth; 489 SKF_ChangePIN_FuncPtr ChangePIN; 490 SKF_GetPINInfo_FuncPtr GetPINInfo; 491 SKF_VerifyPIN_FuncPtr VerifyPIN; 492 SKF_UnblockPIN_FuncPtr UnblockPIN; 493 SKF_ClearSecureState_FuncPtr ClearSecureState; 494 SKF_CreateApplication_FuncPtr CreateApplication; 495 SKF_EnumApplication_FuncPtr EnumApplication; 496 SKF_DeleteApplication_FuncPtr DeleteApplication; 497 SKF_OpenApplication_FuncPtr OpenApplication; 498 SKF_CloseApplication_FuncPtr CloseApplication; 499 SKF_CreateObject_FuncPtr CreateObject; 500 SKF_DeleteObject_FuncPtr DeleteObject; 501 SKF_EnumObjects_FuncPtr EnumObjects; 502 SKF_GetObjectInfo_FuncPtr GetObjectInfo; 503 SKF_ReadObject_FuncPtr ReadObject; 504 SKF_WriteObject_FuncPtr WriteObject; 505 SKF_CreateContainer_FuncPtr CreateContainer; 506 SKF_DeleteContainer_FuncPtr DeleteContainer; 507 SKF_EnumContainer_FuncPtr EnumContainer; 508 SKF_OpenContainer_FuncPtr OpenContainer; 509 SKF_CloseContainer_FuncPtr CloseContainer; 510 SKF_GetContainerType_FuncPtr GetContainerType; 511 SKF_ImportCertificate_FuncPtr ImportCertificate; 512 SKF_ExportCertificate_FuncPtr ExportCertificate; 513 SKF_ExportPublicKey_FuncPtr ExportPublicKey; 514 SKF_GenRandom_FuncPtr GenRandom; 515 SKF_GenExtRSAKey_FuncPtr GenExtRSAKey; 516 SKF_GenRSAKeyPair_FuncPtr GenRSAKeyPair; 517 SKF_ImportRSAKeyPair_FuncPtr ImportRSAKeyPair; 518 SKF_RSASignData_FuncPtr RSASignData; 519 SKF_RSAVerify_FuncPtr RSAVerify; 520 SKF_RSAExportSessionKey_FuncPtr RSAExportSessionKey; 521 SKF_ExtRSAPubKeyOperation_FuncPtr ExtRSAPubKeyOperation; 522 SKF_ExtRSAPriKeyOperation_FuncPtr ExtRSAPriKeyOperation; 523 SKF_GenECCKeyPair_FuncPtr GenECCKeyPair; 524 SKF_ImportECCKeyPair_FuncPtr ImportECCKeyPair; 525 SKF_ECCSignData_FuncPtr ECCSignData; 526 SKF_ECCVerify_FuncPtr ECCVerify; 527 SKF_ECCExportSessionKey_FuncPtr ECCExportSessionKey; 528 SKF_ExtECCEncrypt_FuncPtr ExtECCEncrypt; 529 SKF_ExtECCDecrypt_FuncPtr ExtECCDecrypt; 530 SKF_ECCDecrypt_FuncPtr ECCDecrypt; 531 SKF_ExtECCSign_FuncPtr ExtECCSign; 532 SKF_ExtECCVerify_FuncPtr ExtECCVerify; 533 SKF_GenerateAgreementDataWithECC_FuncPtr GenerateAgreementDataWithECC; 534 SKF_GenerateAgreementDataAndKeyWithECC_FuncPtr GenerateAgreementDataAndKeyWithECC; 535 SKF_GenerateKeyWithECC_FuncPtr GenerateKeyWithECC; 536 SKF_ImportSessionKey_FuncPtr ImportSessionKey; 537 SKF_SetSymmKey_FuncPtr SetSymmKey; 538 SKF_EncryptInit_FuncPtr EncryptInit; 539 SKF_Encrypt_FuncPtr Encrypt; 540 SKF_EncryptUpdate_FuncPtr EncryptUpdate; 541 SKF_EncryptFinal_FuncPtr EncryptFinal; 542 SKF_DecryptInit_FuncPtr DecryptInit; 543 SKF_Decrypt_FuncPtr Decrypt; 544 SKF_DecryptUpdate_FuncPtr DecryptUpdate; 545 SKF_DecryptFinal_FuncPtr DecryptFinal; 546 SKF_DigestInit_FuncPtr DigestInit; 547 SKF_Digest_FuncPtr Digest; 548 SKF_DigestUpdate_FuncPtr DigestUpdate; 549 SKF_DigestFinal_FuncPtr DigestFinal; 550 SKF_MacInit_FuncPtr MacInit; 551 SKF_Mac_FuncPtr Mac; 552 SKF_MacUpdate_FuncPtr MacUpdate; 553 SKF_MacFinal_FuncPtr MacFinal; 554 SKF_CloseHandle_FuncPtr CloseHandle; 555 } SKF_METHOD; 556 557 SKF_METHOD *SKF_METHOD_load_library(const char *so_path); 558 void SKF_METHOD_free(SKF_METHOD *meth); 559 560 561 typedef struct skf_vendor_st { 562 char *name; 563 unsigned int authrand_length; 564 ULONG (*get_cipher_algor)(ULONG vendor_id); 565 ULONG (*get_cipher_cap)(ULONG vendor_cap); 566 ULONG (*get_digest_algor)(ULONG vendor_id); 567 ULONG (*get_digest_cap)(ULONG vendor_cap); 568 ULONG (*get_pkey_algor)(ULONG vendor_id); 569 ULONG (*get_pkey_cap)(ULONG vendor_cap); 570 unsigned long (*get_error_reason)(ULONG err); 571 } SKF_VENDOR; 572 573 typedef struct { 574 ULONG err; 575 unsigned long reason; 576 } SKF_ERR_REASON; 577 578 #endif 579