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 GMSSL_SKF_H 12 #define GMSSL_SKF_H 13 14 15 #include <string.h> 16 #include <stdint.h> 17 #include <gmssl/sm2.h> 18 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 25 /* 26 SKF Public API 27 28 skf_load_library 29 skf_unload_library 30 skf_list_devices 31 skf_print_device_info 32 33 SKF_DEVICE 34 skf_open_device 35 skf_close_deivce 36 skf_set_label 37 skf_change_authkey 38 skf_list_apps 39 skf_create_app 40 skf_delete_app 41 skf_change_app_admin_pin 42 skf_change_app_user_pin 43 skf_unblock_user_pin 44 skf_list_objects 45 skf_import_object 46 skf_export_object 47 skf_delete_object 48 skf_list_containers 49 skf_create_container 50 skf_delete_container 51 skf_import_sign_cert 52 skf_export_sign_cert 53 skf_rand_bytes 54 skf_load_sign_key 55 56 SKF_KEY 57 skf_sign 58 skf_release_key 59 */ 60 61 typedef struct { 62 void *handle; 63 char manufacturer[65]; 64 char issuer[65]; 65 char label[33]; 66 char serial[33]; 67 uint8_t hardware_version[2]; 68 uint8_t firmware_version[2]; 69 } SKF_DEVICE; 70 71 typedef struct { 72 SM2_KEY public_key; 73 void *app_handle; 74 char app_name[65]; 75 void *container_handle; 76 char container_name[65]; 77 } SKF_KEY; 78 79 int skf_load_library(const char *so_path, const char *vendor); 80 void skf_unload_library(void); 81 82 int skf_list_devices(FILE *fp, int fmt, int ind, const char *label); 83 int skf_print_device_info(FILE *fp, int fmt, int ind, const char *devname); 84 int skf_open_device(SKF_DEVICE *dev, const char *devname, const uint8_t authkey[16]); 85 int skf_set_label(SKF_DEVICE *dev, const char *label); 86 int skf_change_authkey(SKF_DEVICE *dev, const uint8_t authkey[16]); 87 int skf_close_device(SKF_DEVICE *dev); 88 89 int skf_list_apps(SKF_DEVICE *dev, int fmt, int ind, const char *label, FILE *fp); 90 int skf_create_app(SKF_DEVICE *dev, const char *appname, const char *admin_pin, const char *user_pin); 91 int skf_delete_app(SKF_DEVICE *dev, const char *appname); 92 int skf_change_app_admin_pin(SKF_DEVICE *dev, const char *appname, const char *oid_pin, const char *new_pin); 93 int skf_change_app_user_pin(SKF_DEVICE *dev, const char *appname, const char *oid_pin, const char *new_pin); 94 int skf_unblock_user_pin(SKF_DEVICE *dev, const char *appname, const char *admin_pin, const char *new_user_pin); 95 96 int skf_list_objects(FILE *fp, int fmt, int ind, const char *label, SKF_DEVICE *dev, const char *appname, const char *pin); 97 int skf_import_object(SKF_DEVICE *dev, const char *appname, const char *pin, const char *objname, const uint8_t *data, size_t datalen); 98 int skf_export_object(SKF_DEVICE *dev, const char *appname, const char *pin, const char *objname, uint8_t *out, size_t *outlen); 99 int skf_delete_object(SKF_DEVICE *dev, const char *appname, const char *pin, const char *objname); 100 101 int skf_list_containers(FILE *fp, int fmt, int ind, const char *label, SKF_DEVICE *dev, const char *appname, const char *pin); 102 int skf_create_container(SKF_DEVICE *dev, const char *appname, const char *pin, const char *container_name); 103 int skf_delete_container(SKF_DEVICE *dev, const char *appname, const char *pin, const char *container_name); 104 int skf_import_sign_cert(SKF_DEVICE *dev, const char *appname, const char *pin, const char *container_name, const uint8_t *cert, size_t certlen); 105 int skf_export_sign_cert(SKF_DEVICE *dev, const char *appname, const char *pin, const char *container_name, uint8_t *cert, size_t *certlen); 106 107 int skf_rand_bytes(SKF_DEVICE *dev, uint8_t *buf, size_t len); 108 int skf_load_sign_key(SKF_DEVICE *dev, const char *appname, const char *pin, const char *container_name, SKF_KEY *key); 109 int skf_sign(SKF_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen); 110 int skf_release_key(SKF_KEY *key); 111 112 113 #ifdef __cplusplus 114 } 115 #endif 116 #endif 117