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_EXT_H 12 #define SKFUTIL_SKF_EXT_H 13 14 15 #include <stdio.h> 16 #include "skf.h" 17 18 19 #define SKF_NO_PADDING 0 20 #define SKF_PKCS5_PADDING 1 21 22 #define SKF_DEV_STATE_ABSENT 0x00000000 23 #define SKF_DEV_STATE_PRESENT 0x00000001 24 #define SKF_DEV_STATE_UNKNOW 0x00000010 25 26 #define SKF_CONTAINER_TYPE_UNDEF 0 27 #define SKF_CONTAINER_TYPE_RSA 1 28 #define SKF_CONTAINER_TYPE_ECC 2 29 30 #define SKF_ENVELOPEDKEYBLOB_VERSION 1 31 #define SKF_AUTHKEY_LENGTH 16 32 #define SKF_AUTHRAND_LENGTH 16 33 #define SKF_MAX_FILE_SIZE (256*1024) 34 #define SKF_MAX_CERTIFICATE_SIZE (8*1024) 35 36 37 #define SKF_DEFAULT_ADMIN_PIN_RETRY_COUNT 6 38 #define SKF_DEFAULT_USER_PIN_RETRY_COUNT 6 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 typedef struct { 45 union { 46 ECCPUBLICKEYBLOB ecc; 47 RSAPUBLICKEYBLOB rsa; 48 } u; 49 } SKF_PUBLICKEYBLOB; 50 #define SKF_MAX_PUBLICKEYBOLB_LENGTH sizeof(SKF_PUBLICKEYBLOB) 51 52 typedef struct { 53 char *name; 54 unsigned char *buf; 55 int offset; 56 int length; 57 } SKF_FILE_OP_PARAMS; 58 59 60 ULONG DEVAPI SKF_LoadLibrary(LPSTR so_path, LPSTR vendor); 61 ULONG DEVAPI SKF_UnloadLibrary(void); 62 ULONG DEVAPI SKF_OpenDevice(LPSTR devName, BYTE authKey[16], DEVINFO *devInfo, DEVHANDLE *phDev); 63 ULONG DEVAPI SKF_CloseDevice(DEVHANDLE hDev); 64 ULONG DEVAPI SKF_GetDevStateName(ULONG ulDevState, LPSTR *szName); 65 ULONG DEVAPI SKF_GetContainerTypeName(ULONG ulContainerType, LPSTR *szName); 66 ULONG DEVAPI SKF_GetAlgorName(ULONG ulAlgID, LPSTR *szName); 67 ULONG DEVAPI SKF_PrintDevInfo(FILE *fp, const DEVINFO *devInfo); 68 ULONG DEVAPI SKF_PrintRSAPublicKey(FILE *fp, const RSAPUBLICKEYBLOB *blob); 69 ULONG DEVAPI SKF_PrintRSAPrivateKey(FILE *fp, const RSAPRIVATEKEYBLOB *blob); 70 ULONG DEVAPI SKF_PrintECCPublicKey(FILE *fp, const ECCPUBLICKEYBLOB *blob); 71 ULONG DEVAPI SKF_PrintECCPrivateKey(FILE *fp, const ECCPRIVATEKEYBLOB *blob); 72 ULONG DEVAPI SKF_PrintECCCipher(FILE *fp, const ECCCIPHERBLOB *blob); 73 ULONG DEVAPI SKF_PrintECCSignature(FILE *fp, const ECCSIGNATUREBLOB *blob); 74 ULONG DEVAPI SKF_GetErrorString(ULONG ulError, LPSTR *szErrorStr); 75 ULONG DEVAPI SKF_NewECCCipher(ULONG ulCipherLen, ECCCIPHERBLOB **cipherBlob); 76 ULONG DEVAPI SKF_NewEnvelopedKey(ULONG ulCipherLen, ENVELOPEDKEYBLOB **envelopedKeyBlob); 77 78 /* 79 ULONG DEVAPI SKF_ImportECCPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, EC_KEY *ec_key, ULONG symmAlgId); 80 ULONG DEVAPI SKF_ImportRSAPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, RSA *rsa, ULONG symmAlgId); 81 ULONG DEVAPI SKF_ImportPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, EVP_PKEY *pkey, ULONG symmAlgId); 82 ULONG DEVAPI SKF_ExportECCPublicKey(HCONTAINER hContainer, BOOL bSign, EC_KEY **pp); 83 ULONG DEVAPI SKF_ExportRSAPublicKey(HCONTAINER hContainer, BOOL bSign, RSA **pp); 84 ULONG DEVAPI SKF_ExportEVPPublicKey(HCONTAINER hContainer, BOOL bSign, EVP_PKEY **pp); 85 ULONG DEVAPI SKF_ImportX509CertificateByKeyUsage(HCONTAINER hContainer, X509 *x509); 86 ULONG DEVAPI SKF_ImportX509Certificate(HCONTAINER hContainer, BOOL bSign, X509 *x509); 87 ULONG DEVAPI SKF_ExportX509Certificate(HCONTAINER hContainer, BOOL bSign, X509 **px509); 88 */ 89 90 91 #ifdef __cplusplus 92 } 93 #endif 94 #endif 95