• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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