# SKF C语言接入方案

# 1 文档说明

# 1.1 使用对象

接入SKF 产品以 C语言接入的第三方应用相关人员

# 1.2 版本信息

版本信息 版本信息 修订人 修订内容
3.3 2023-03-26SIMKEY团队 创建

# 2 术语及缩略语定义

下列术语、定义和缩略语适用于本标准

名词 解释
API Application Programming Interface,应用程序编程接口
LTE 3GPP Long Term Evolution,3GPP长期演进技术
VPN Virtual Private Network,虚拟专用网络
OA Office Automation,办公自动化
OTA Over The Air
SDK SoftwareDevelopment Kit,软件开发工具包
OMA Open Mobile API
UICC Universal Integrated Circuit Card
CRM Customer Relationship Management

# 访问控制执行器(access control enforcer)

访问控制执行器,组成安全模块访问 API 的部分软件,它从安全模块上获取访问规则,并运用这些规则来控制设备应用,对于安全模块上各种应用程序的访问。

# 终端设备(mobile device)

本规范中特指任何包含安全模块的终端设备,如移动电话。

# 开放移动设备操作系统(open mobile OS)

允许加载第三方应用程序的移动设备操作系统

# 安全模块(secure element)

可用于移动设备的智能卡芯片。例如 UICC 卡/SIM 卡、嵌入式安全模块、高 安全 SD 卡等

# 安全模块应用(applet)

一个安装并运行在安全模块里面的应用。例如一个 Java 卡应用或一个 Native 卡应用。为与设备应用区别,本文档中统一称为“Applet”。

# 终端应用(dev ice a pplication)

一个安装并运行于移动设备上的应用程序,简称“应用”。本文中的手机终端 应用特指集成 CTPass SDK 包的手机应用程序。

# 会话(session)

设备(例如手机终端)应用和安全模块之间打开的一个连接。

# 通道(channel)

设备(例如手机终端)应用和 Applet 之间打开的一个连接。

# 3 Xcode 工程配置

# 3.1 在项目中集成SDK

# 3.1.1 拷贝文件

将 libSkfApiLib.a, include 拷贝到工程目录下

# 3.1.2 添加权限

Privacy - Bluetooth Always Usage Description
Privacy - Bluetooth Peripheral Usage Description
1
2

# 3.2 调用SKF SDK

先添加头文件

#import "SkfApiLib.h"
1

# 3.2.1 在 C 语言中的使用

修改ViewController.m文件为ViewController.mm

@interface ViewController ()
@end

@implementation ViewController
#pragma mark - 连接卡
- (void)useConnectSimKey{
    char *c_outSzNameList = (char *)malloc(1024);
    memset(c_outSzNameList, '\0', 1024);
    ULONG c_inoutPulSize = 1024;

    //枚举
    ULONG EnumDevResult = SKF_EnumDev(NO, c_outSzNameList, &c_inoutPulSize);
    if (EnumDevResult != 0){
        //枚举失败
    }

    //连接
    NSString *cardName = 卡片名称;
    LPSTR ss = (char*)[cardName UTF8String];
    ULONG ConnectDevResult = SKF_ConnectDev(ss, &outPhDev2);
    if (ConnectDevResult != 0){
        //连接失败
    }
    if (outPhDev2) {
        //连接成功
    } else {
        //连接失败
    }

    //枚举应用列表
    ULONG EnumApplicationResult = SKF_EnumApplication(outPhDev2, c_outSzAppName, &c_inoutPulSize);
    if (EnumApplicationResult != 0){
        //枚举应用列表失败
    }
    int dstIndex = 0;
    char *buf = c_outSzAppName;
    char *outSzAppName = (char *)malloc(c_inoutPulSize);
    while (*buf) {
        int nameLength = strlen(buf);
        memcpy((outSzAppName + dstIndex), buf, nameLength);
        buf += strlen(buf) + 1;
        dstIndex += nameLength;
        *(outSzAppName + dstIndex) = ',';
        dstIndex++;
    }
    
    NSData *uAppListData = [NSData dataWithBytes:outSzAppName length: c_inoutPulSize-2];
    NSString *uAppListString = [[NSString alloc] initWithData:uAppListData encoding:NSUTF8StringEncoding];;
    NSArray *uAppList = [uAppListString componentsSeparatedByString:@","];
    NSString *_strresult = @"";
    for (NSString *dic in uAppList) {
        _strresult = [NSString stringWithFormat:@"%@<font color = 'd2905a' size = 4>%@</font></br>",_strresult, dic];
    }
}
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55