From: liangzhenying <867174124@qq.com> Date: Tue, 3 Sep 2024 06:13:40 +0000 (+0800) Subject: vmouse添加鉴权 X-Git-Tag: 千寻适配d9~17 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=187ed30b1a0f4d024c2e2dd2cfedfbeb49b90e51;p=mirrors%2FMouseSdk-MacOS.git vmouse添加鉴权 --- diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk.xcodeproj/project.pbxproj b/MouseSdk/AiMouseSdk/AiMouseSdk.xcodeproj/project.pbxproj index 08f8089..4191a45 100644 --- a/MouseSdk/AiMouseSdk/AiMouseSdk.xcodeproj/project.pbxproj +++ b/MouseSdk/AiMouseSdk/AiMouseSdk.xcodeproj/project.pbxproj @@ -391,6 +391,12 @@ 1888148F2C85766B009299A9 /* AiDeviceAuthManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1888148C2C85766B009299A9 /* AiDeviceAuthManager.h */; }; 188814902C85766B009299A9 /* AiDeviceAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1888148D2C85766B009299A9 /* AiDeviceAuthManager.m */; }; 188814912C85766B009299A9 /* AiDeviceAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1888148D2C85766B009299A9 /* AiDeviceAuthManager.m */; }; + 188814BD2C85BB76009299A9 /* AiBkzhAuthManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 188814BB2C85BB76009299A9 /* AiBkzhAuthManager.h */; }; + 188814BE2C85BB76009299A9 /* AiBkzhAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 188814BC2C85BB76009299A9 /* AiBkzhAuthManager.m */; }; + 188814C22C85C2BB009299A9 /* MSUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 188814C02C85C2BA009299A9 /* MSUtils.h */; }; + 188814C32C85C2BB009299A9 /* MSUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 188814C02C85C2BA009299A9 /* MSUtils.h */; }; + 188814C42C85C2BB009299A9 /* MSUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 188814C12C85C2BA009299A9 /* MSUtils.m */; }; + 188814C52C85C2BB009299A9 /* MSUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 188814C12C85C2BA009299A9 /* MSUtils.m */; }; 18AD83252BFAE8B9009BDE3B /* AiDeviceInfoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AD83232BFAE8B9009BDE3B /* AiDeviceInfoManager.h */; }; 18AD83262BFAE8B9009BDE3B /* AiDeviceInfoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AD83242BFAE8B9009BDE3B /* AiDeviceInfoManager.m */; }; 18AD83292BFB22DE009BDE3B /* AiSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AD83272BFB22DE009BDE3B /* AiSender.h */; }; @@ -596,6 +602,10 @@ 18862A212C8064E300D3564D /* HidManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HidManager.h; sourceTree = ""; }; 1888148C2C85766B009299A9 /* AiDeviceAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiDeviceAuthManager.h; sourceTree = ""; }; 1888148D2C85766B009299A9 /* AiDeviceAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiDeviceAuthManager.m; sourceTree = ""; }; + 188814BB2C85BB76009299A9 /* AiBkzhAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiBkzhAuthManager.h; sourceTree = ""; }; + 188814BC2C85BB76009299A9 /* AiBkzhAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiBkzhAuthManager.m; sourceTree = ""; }; + 188814C02C85C2BA009299A9 /* MSUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSUtils.h; sourceTree = ""; }; + 188814C12C85C2BA009299A9 /* MSUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSUtils.m; sourceTree = ""; }; 18AD83232BFAE8B9009BDE3B /* AiDeviceInfoManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiDeviceInfoManager.h; sourceTree = ""; }; 18AD83242BFAE8B9009BDE3B /* AiDeviceInfoManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiDeviceInfoManager.m; sourceTree = ""; }; 18AD83272BFB22DE009BDE3B /* AiSender.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiSender.h; sourceTree = ""; }; @@ -687,6 +697,8 @@ 180E7AAB2BD7BB12008558E8 /* AiMouseSdk.m */, 180E7B472BD7BD7F008558E8 /* AiAuthManager.h */, 180E7B522BD7BD82008558E8 /* AiAuthManager.m */, + 188814BB2C85BB76009299A9 /* AiBkzhAuthManager.h */, + 188814BC2C85BB76009299A9 /* AiBkzhAuthManager.m */, 181CE5BF2C6EED9900EF8D07 /* AiAliAuthManager.h */, 181CE5C02C6EED9900EF8D07 /* AiAliAuthManager.m */, 18FCA3952C7F2AD100C44A37 /* AiMouseAuth.h */, @@ -709,6 +721,8 @@ 180E7B4A2BD7BD80008558E8 /* AiMouseTools.m */, 180E7B532BD7BD82008558E8 /* AiMouseTools2.h */, 180E7B4F2BD7BD81008558E8 /* AiMouseTools2.m */, + 188814C02C85C2BA009299A9 /* MSUtils.h */, + 188814C12C85C2BA009299A9 /* MSUtils.m */, 180E7AB82BD7BD7D008558E8 /* AiRecordManager.h */, 180E7B4E2BD7BD81008558E8 /* AiRecordManager.m */, ); @@ -1052,6 +1066,7 @@ 18862A262C8064E300D3564D /* BleManager.h in Headers */, 180E7CC82BD8FC4E008558E8 /* lzo.h in Headers */, 180E7C9F2BD8FC4E008558E8 /* xtea.h in Headers */, + 188814BD2C85BB76009299A9 /* AiBkzhAuthManager.h in Headers */, 180E7C9C2BD8FC4E008558E8 /* lfg.h in Headers */, 180E7CAA2BD8FC4E008558E8 /* audio_fifo.h in Headers */, 180E7D002BD8FC4F008558E8 /* swresample.h in Headers */, @@ -1151,6 +1166,7 @@ 180E7CF22BD8FC4F008558E8 /* d3d11va.h in Headers */, 180E7CBC2BD8FC4E008558E8 /* eval.h in Headers */, 180E7CF72BD8FC4F008558E8 /* bsf.h in Headers */, + 188814C22C85C2BB009299A9 /* MSUtils.h in Headers */, 180E7CD22BD8FC4E008558E8 /* ripemd.h in Headers */, 18862A2B2C8064E300D3564D /* HidManager.h in Headers */, 180E7CD52BD8FC4E008558E8 /* hwcontext_qsv.h in Headers */, @@ -1189,6 +1205,7 @@ 18862B212C806BD900D3564D /* version.h in Headers */, 18862B222C806BD900D3564D /* base64.h in Headers */, 18862B232C806BD900D3564D /* mastering_display_metadata.h in Headers */, + 188814C32C85C2BB009299A9 /* MSUtils.h in Headers */, 18862B242C806BD900D3564D /* crc.h in Headers */, 18862B252C806BD900D3564D /* hwcontext_cuda.h in Headers */, 18862B262C806BD900D3564D /* hwcontext_vaapi.h in Headers */, @@ -1408,6 +1425,7 @@ 18AD832A2BFB22DE009BDE3B /* AiSender.m in Sources */, 184A71202BDD11C70025A332 /* AiTrippleModel.m in Sources */, 180E7AAC2BD7BB12008558E8 /* AiMouseSdk.m in Sources */, + 188814BE2C85BB76009299A9 /* AiBkzhAuthManager.m in Sources */, 188814902C85766B009299A9 /* AiDeviceAuthManager.m in Sources */, 184A71072BDA4C050025A332 /* AFHTTPSessionManager.m in Sources */, 180E7BE02BD7BD84008558E8 /* AiMouseTools.m in Sources */, @@ -1420,6 +1438,7 @@ 18EF7AFB2C7603E800AC5223 /* TlwTools.m in Sources */, 18EF7AFA2C7603E800AC5223 /* TlwMouseSdk.m in Sources */, 18862A282C8064E300D3564D /* BleManager.m in Sources */, + 188814C42C85C2BB009299A9 /* MSUtils.m in Sources */, 180E7BDF2BD7BD84008558E8 /* AiMouseConfig.m in Sources */, 18EF7AFC2C7603E800AC5223 /* TlwConnectManager.m in Sources */, 181CE5C22C6EED9900EF8D07 /* AiAliAuthManager.m in Sources */, @@ -1457,6 +1476,7 @@ 18862BC32C806BD900D3564D /* TlwTools.m in Sources */, 18862BC42C806BD900D3564D /* TlwMouseSdk.m in Sources */, 18862BC52C806BD900D3564D /* BleManager.m in Sources */, + 188814C52C85C2BB009299A9 /* MSUtils.m in Sources */, 18862BC62C806BD900D3564D /* AiMouseConfig.m in Sources */, 18862BC72C806BD900D3564D /* TlwConnectManager.m in Sources */, 18862BC82C806BD900D3564D /* AiAliAuthManager.m in Sources */, diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.h b/MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.h new file mode 100644 index 0000000..6a5ac80 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.h @@ -0,0 +1,24 @@ +// +// AiBkzhAuthManager.h +// AiMouseManager +// +// Created by incar on 2024/9/2. +// + + +#import +#import "AiMouseSdk.h" + + +NS_ASSUME_NONNULL_BEGIN +typedef void(^AiBkzhCmdFinishBlock)(BOOL isSuccess); + +@interface AiBkzhAuthManager : NSObject +@property (nonatomic,strong)void (^outputLog)(NSString *log); +@property (nonatomic,strong)void (^setDeviceSecret)(NSString *value,AiBkzhCmdFinishBlock finished); +@property (nonatomic,strong)void (^authCallBack)(BOOL isSuccess); + +- (void)loginWith:(AiMouseDeviceInfo *)info; +@end + +NS_ASSUME_NONNULL_END diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.m b/MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.m new file mode 100644 index 0000000..530cf47 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.m @@ -0,0 +1,178 @@ +// +// AiBkzhAuthManager.m +// AiMouseManager +// +// Created by incar on 2024/9/2. +// + +#import "AiBkzhAuthManager.h" +#import "AiMouseTools.h" +#import "AFNetworking.h" +#import "AiTrippleModel.h" +#import "AiSecretModel.h" + + +#define kBaseUrl @"http://dmp.raisound.com/bz-api" + +#define kProductKey @"LtKXtGcvk2tAe53uzMKT"; +#define kSecretKey @"5QYRLYKfitcUaYYUTw4ZVxKPUUVaRyND"; + +//#define kProductKey @"4EepovakpbqhZUnUDwH42KAADYGv4UUe"; +//#define kSecretKey @"5QYRLYKfitcUaYYUTw4ZVxKPUUVaRyND"; + +//#define kProductKey @"ccvUoJOLbXn"; +//#define kSecretKey @"nNRjkRpKTxvprGaW"; + + +@interface AiBkzhAuthManager () +@property (nonatomic,strong)AiMouseDeviceInfo *deviceInfo; +@property (nonatomic,strong)NSString *token; +@end +@implementation AiBkzhAuthManager +- (instancetype)init{ + self = [super init]; + if (self) { + + } + return self; +} + +#pragma mark - pub api +- (void)loginWith:(AiMouseDeviceInfo *)info{ + + self.deviceInfo = info; + if (![info valueForKey:@"productKey"] || ![info valueForKey:@"secretKey"] || !info.sn || !info.sn) { + [self showLog:@"获取设备信息错误,鉴权失败!"]; + return; + } + if([[info valueForKey:@"deviceSecret"] isKindOfClass:[NSString class]] && ([(NSString *)[info valueForKey:@"deviceSecret"] length] > 2)){ + //已注册过,直接登录 + [self loginRequest]; + } + else{ + //未注册 + [self registerReuest]; + } +} + +#pragma mark -others +///将设备密钥密钥写到硬件 +-(void)sendDeviceSecretCmd:(NSString *)deviceSecret{ + [self.deviceInfo setValue:deviceSecret forKey:@"deviceSecret"]; + if (self.setDeviceSecret) { + self.setDeviceSecret(deviceSecret, ^(BOOL isSuccess) { + [self loginRequest]; + }); + } +} +- (void)showLog:(NSString *)log { + if (self.outputLog) self.outputLog([NSString stringWithFormat:@"[auth]%@",log]); +} + +- (void)registerReuest{ + NSString *productKey = kProductKey; + NSString *deviceId = self.deviceInfo.mac; + NSString *timeStamp = [NSString stringWithFormat:@"%ld",(NSInteger)[NSDate date].timeIntervalSince1970*1000]; + NSString *value = [NSString stringWithFormat:@"%@%@%@", deviceId,productKey,timeStamp]; + NSString *signValue = [AiMouseTools stringToHmacSha1:productKey text:value]; + + NSDictionary *params = @{ + @"pid":productKey, + @"deviceId":deviceId, + @"signMethod":@"HMACSHA1", + @"sign":signValue, + @"timeStamp":timeStamp, + }; + + [self showLog:[NSString stringWithFormat:@"value %@",value]]; + [self showLog:[NSString stringWithFormat:@"productKey %@",productKey]]; + [self showLog:[NSString stringWithFormat:@"signValue %@",signValue]]; + + NSString *url = [NSString stringWithFormat:@"%@/dev/auth/active",kBaseUrl]; + [self showLog:[NSString stringWithFormat:@"%@ %@",url,params]]; + + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; + manager.responseSerializer =[AFHTTPResponseSerializer serializer]; + manager.requestSerializer = [AFJSONRequestSerializer serializer]; + + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + policy.allowInvalidCertificates = YES; + policy.validatesDomainName = NO; + manager.securityPolicy = policy; + + [manager PUT:url parameters:params headers:@{} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; + [self showLog:[NSString stringWithFormat:@" %@",str]]; + NSDictionary *dict = [AiMouseTools dataToDictionary:responseObject]; + NSString *code = dict[@"code"]; + NSString *deviceSecret = [dict valueForKeyPath:@"data.password"]; + if(code.integerValue == 20000 && deviceSecret){ + NSString *nonce = [dict valueForKeyPath:@"data.nonce"]; + +// [self sendDeviceSecretCmd:deviceSecret]; + [self showLog:@"激活成功"]; + } + else{ + [self showLog:dict[@"msg"]]; + if(self.authCallBack)self.authCallBack(false); + } + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [self showLog:[NSString stringWithFormat:@"error = %@",error]]; + if(self.authCallBack)self.authCallBack(false); + }]; +} +- (void)loginRequest{ +// let key = productKey +// guard let pwd = try? AESEncyptUtil.encrypt_AES_CBC(encryptText: password, key: key, ivs: nonce) else { +// completeHandler(nil,MSError.invalidRequest) +// return +// } + + NSString *deviceId = self.deviceInfo.mac; + NSString *nonce = [AiMouseTools generateRandomString16]; + NSString *key = kProductKey; + NSString *originPwd = [self.deviceInfo valueForKey:@"deviceSecret"];//注册返回的密码 + NSString *pwd = originPwd; + NSDictionary *params = @{ + @"deviceId":deviceId, + @"password":pwd, + @"nonce":nonce, +}; + + NSString *url = [NSString stringWithFormat:@"%@/dev/auth/sign_in",kBaseUrl]; + [self showLog:[NSString stringWithFormat:@"%@ %@",url,params]]; + + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; + manager.responseSerializer =[AFHTTPResponseSerializer serializer]; + manager.requestSerializer = [AFJSONRequestSerializer serializer]; + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + policy.allowInvalidCertificates = YES; + policy.validatesDomainName = NO; + manager.securityPolicy = policy; + + [manager POST:url parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; + [self showLog:[NSString stringWithFormat:@"%@",str]]; + NSDictionary *dict = [AiMouseTools dataToDictionary:responseObject]; + NSString *code = dict[@"code"]; + NSString *token = [dict valueForKeyPath:@"data.token"]; + if(code.integerValue == 20001){ + self.token = token; + if(self.authCallBack)self.authCallBack(true); + //[self tokenRequest]; + } + else if(code.integerValue == 50020 || code.integerValue == 50021){ + //设备未激活 + [self registerReuest]; + } + else{ + if(self.authCallBack)self.authCallBack(false); + } + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [self showLog:[NSString stringWithFormat:@"error = %@",error]]; + if(self.authCallBack)self.authCallBack(false); + }]; +} + + +@end diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseSdk.m b/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseSdk.m index 7a728d3..1f83a0e 100644 --- a/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseSdk.m +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseSdk.m @@ -6,9 +6,12 @@ // #import "AiMouseSdk.h" -#import "AiDeviceInfoManager.h" + #import "AiAuthManager.h" #import "AiAliAuthManager.h" +#import "AiBkzhAuthManager.h" + +#import "AiDeviceInfoManager.h" #import "AiAudioManager.h" #import "AiMouseTools.h" #import "AiMouseTools2.h" @@ -32,8 +35,11 @@ @interface AiMouse() @property (nonatomic, assign) AiMouseLogLevel logLevel; + @property (nonatomic, strong) AiAuthManager *authManager; @property (nonatomic, strong) AiAliAuthManager *aliAuthManager; +@property (nonatomic, strong) AiBkzhAuthManager *bkAuthManager; + @property (nonatomic, strong) AiAudioManager *audioManager; @property (nonatomic, strong) AiRecordManager *recordManager; @property (nonatomic, strong) void (^authBlock)(AiMouseAuthState state); @@ -123,6 +129,22 @@ } return _aliAuthManager; } +-(AiBkzhAuthManager *)bkAuthManager{ + if (!_bkAuthManager) { + _bkAuthManager = [[AiBkzhAuthManager alloc] init]; + __weak typeof(self) ws = self; + _bkAuthManager.outputLog = ^(NSString * _Nonnull log) { + [ws showLog:log]; + }; + _bkAuthManager.setDeviceSecret = ^(NSString * _Nonnull value, AiBkzhCmdFinishBlock _Nonnull finished) { + [ws setDeviceSecret:value completation:finished]; + }; + _bkAuthManager.authCallBack = ^(BOOL isSuccess) { + [ws authResult:isSuccess]; + }; + } + return _bkAuthManager; +} -(AiAudioManager *)audioManager{ if (!_audioManager) { @@ -197,7 +219,7 @@ [ws.aliAuthManager loginWith:deviceInfo]; } else if(type == AiMouseAuthType_BeiKeZhiHui){ - [ws.authManager loginWith:deviceInfo]; + [ws.bkAuthManager loginWith:deviceInfo]; } else{ [ws.authManager loginWith:deviceInfo]; @@ -417,7 +439,7 @@ } self.isAuthing = true; __weak typeof(self) ws = self; - [self startAuthentication:AiMouseAuthType_Ali finished:^(AiMouseAuthState state) { + [self startAuthentication:AiMouseAuthType_none finished:^(AiMouseAuthState state) { ws.isAuthing = false; [ws showLog:state == AiMouseAuthState_Success? @"鉴权成功":@"鉴权失败"]; if(ws.delegate) [ws.delegate aiMouseAuthenticationResult:state]; diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.h b/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.h index 1b2929d..813347e 100644 --- a/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.h +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.h @@ -39,6 +39,8 @@ NS_ASSUME_NONNULL_BEGIN +(NSString *)randomString:(NSInteger)length; +(NSString *)getCurrentTime; + ++ (NSString *)generateRandomString16; @end NS_ASSUME_NONNULL_END diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.m b/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.m index 1c6134a..1b2482e 100644 --- a/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.m +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.m @@ -151,6 +151,7 @@ return hash; } + + (NSString *)MD5ForUpper32:(NSString *)str { const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; @@ -223,5 +224,16 @@ return text2; } + ++ (NSString *)generateRandomString16 { + NSInteger length = 16; + NSString *letters = @"abcdef0123456789"; + NSMutableString *randomString = [[NSMutableString alloc] init]; + for (NSInteger i = 0; i < length; i++) { + NSInteger randomValue = arc4random_uniform((u_int32_t)letters.length); + [randomString appendString:[letters substringWithRange:NSMakeRange(randomValue, 1)]]; + } + return randomString; +} @end diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.h b/MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.h new file mode 100644 index 0000000..8455a2c --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.h @@ -0,0 +1,40 @@ +//// +//// AiMouseTools.h +//// AiMouse +//// +//// Created by incar on 2024/2/28. +//// +// +//#import +// +//NS_ASSUME_NONNULL_BEGIN +// +//@interface MSUtils : NSObject +//+ (NSArray *)stringToArray:(NSString *)jsonString; +//+ (NSString *)arrayToString:(NSArray *)arr; +// +//+ (NSDictionary *)stringToDictionary:(NSString *)jsonString; +//+ (NSString *)dictionaryToString:(NSDictionary *)dic; +// +//+ (NSDictionary *)dataToDictionary:(NSData *)jsonData; +//+ (NSData *)dictionaryToData:(NSDictionary *)dicJson; +// +// +//+ (NSString *)dataToHexString:(NSData *)data; +// +//+ (NSString *)dataToHexString_placeholder:(NSData *)data; +// +//+ (NSData *)hexStringToData:(NSString *)hexStr ; +// +//+ (NSString *)dataToUtf8String:(NSData *)data; +// +//+ (NSString *)stringTomd5:(NSString *)str; +// +//+ (NSString *)stringToHmacSha1:(NSString*)key text:(NSString*)text; +// +//+ (NSString *)MD5ForUpper32:(NSString *)str; +// +//+ (NSData *)dataWithHexString:(NSString *)hexStr; +//@end +// +//NS_ASSUME_NONNULL_END diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.m b/MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.m new file mode 100644 index 0000000..22fa5b9 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.m @@ -0,0 +1,190 @@ +//// +//// AiMouseTools.m +//// AiMouse +//// +//// Created by incar on 2024/2/28. +//// +// +//#import "MSUtils.h" +//#import +//#include +//#include +// +//@implementation MSUtils +//+ (NSArray *)stringToArray:(NSString *)jsonString{ +// NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; +// NSError *error; +// NSArray *arr = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; +// return arr; +//} +//+ (NSString *)arrayToString:(NSArray *)arr{ +// NSError *error; +// NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error]; +// NSString * string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; +// return string; +//} +//+ (NSDictionary *)stringToDictionary:(NSString *)jsonString{ +// NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; +// if (jsonData == nil) { +// return nil; +// } +// NSError *error; +// NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; +// return dict; +//} +//+ (NSString *)dictionaryToString:(NSDictionary *)dic{ +// if ([dic isKindOfClass:[NSDictionary class]]) { +// NSError *error; +// NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error]; +// NSString * string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; +// return string; +// } +// else{ +// return @""; +// } +//} +// +//+ (NSDictionary *)dataToDictionary:(NSData *)jsonData{ +// if (![jsonData isKindOfClass:[NSData class]] || jsonData.length < 1) { +// return nil; +// } +// id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil]; +// if (![jsonObj isKindOfClass:[NSDictionary class]]) { +// return nil; +// } +// return [NSDictionary dictionaryWithDictionary:(NSDictionary *)jsonObj]; +//} +// +// +//+ (NSData *)dictionaryToData:(NSDictionary *)dicJson{ +// if (![dicJson isKindOfClass:[NSDictionary class]]) { +// return nil; +// } +// NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicJson options:0 error:nil]; +// if (![jsonData isKindOfClass:[NSData class]]) { +// return nil; +// } +// return jsonData; +//} +// +//+ (NSString *)dataToHexString:(NSData *)data { +// NSUInteger length = data.length; +// NSMutableString *result = [NSMutableString stringWithCapacity:length * 2]; +// const unsigned char *byte = data.bytes; +// for (int i = 0; i < length; i++, byte++) { +// [result appendFormat:@"%02X", *byte]; +// } +// return result; +//} +// +//+ (NSString *)dataToHexString_placeholder:(NSData *)data { +// NSUInteger length = data.length; +// NSString *placeholder = @" "; +// NSMutableString *result = [NSMutableString stringWithCapacity:length * 2]; +// const unsigned char *byte = data.bytes; +// for (int i = 0; i < length; i++, byte++) { +// [result appendFormat:@"%02X%@", *byte, placeholder]; +// } +// return result; +//} +// +//+ (NSData *)hexStringToData:(NSString *)hexStr { +// hexStr = [hexStr stringByReplacingOccurrencesOfString:@" " withString:@""]; +// hexStr = [hexStr lowercaseString]; +// NSUInteger len = hexStr.length; +// if (!len) return nil; +// unichar *buf = malloc(sizeof(unichar) * len); +// if (!buf) return nil; +// [hexStr getCharacters:buf range:NSMakeRange(0, len)]; +// +// NSMutableData *result = [NSMutableData data]; +// unsigned char bytes; +// char str[3] = { '\0', '\0', '\0' }; +// int i; +// for (i = 0; i < len / 2; i++) { +// str[0] = buf[i * 2]; +// str[1] = buf[i * 2 + 1]; +// bytes = strtol(str, NULL, 16); +// [result appendBytes:&bytes length:1]; +// } +// free(buf); +// return result; +//} +// +//+ (NSString *)dataToUtf8String:(NSData *)data { +// if (data.length > 0) { +// return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; +// } +// return @""; +//} +// +// +//+ (NSString *)stringTomd5:(NSString *)str { +// if (str.length == 0) { +// return nil; +// } +// // 初始化C字符数组 +// const char* original_str = (const char *)[[str dataUsingEncoding:NSUTF8StringEncoding] bytes]; +// // 盛放数字校验的字符数组(长度为16bytes) +// unsigned char digist[CC_MD5_DIGEST_LENGTH]; //CC_MD5_DIGEST_LENGTH = 16 +// CC_MD5(original_str, (uint)strlen(original_str), digist); +// // NSMutableString* outPutStr = [NSMutableString stringWithCapacity:10]; +// NSMutableString* outPutStr = [NSMutableString new]; +// for(int i =0; i - - - - - - - - diff --git a/MouseSdk/MouseSdk/ViewController.m b/MouseSdk/MouseSdk/ViewController.m index 8824172..24cecc0 100644 --- a/MouseSdk/MouseSdk/ViewController.m +++ b/MouseSdk/MouseSdk/ViewController.m @@ -1,76 +1,3 @@ -// -// ViewController.m -// MouseSdk -// -// Created by incar on 2024/2/18. -// - -//#import "ViewController.h" -//#import "FrkVC.h" -//#import "TlwVC.h" -//#import "ScanVC.h" -//#import "TlwHidManager.h" -//#import "HidManager.h" -//@interface ViewController () -//@end -// -//@implementation ViewController -// -//- (void)viewDidLoad { -// [super viewDidLoad]; -// -// // Do any additional setup after loading the view. -// [self setupUI]; -//} -// -//- (void)setRepresentedObject:(id)representedObject { -// [super setRepresentedObject:representedObject]; -// -// // Update the view, if already loaded. -//} -// -//- (void)setupUI{ -// self.title = @"AI SDK"; -// { -// NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(50, self.view.bounds.size.height - 80, 100, 45)]; -// btn.bordered = true; -// btn.title = @"富瑞坤"; -// [btn setTarget:self]; -// [btn setAction:@selector(frkAction)]; -// btn.state = 1; -// [self.view addSubview:btn]; -// } -// { -// NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(50, self.view.bounds.size.height - 200, 100, 45)]; -// btn.bordered = true; -// btn.title = @"泰凌微"; -// [btn setTarget:self]; -// [btn setAction:@selector(tlwAction)]; -// btn.state = 1; -// [self.view addSubview:btn]; -// } -//} -// -//#pragma mark - action -//- (void)frkAction{ -// [HidManager shared]; -// FrkVC *vc = [[FrkVC alloc] initWithNibName:nil bundle:nil]; -// [self presentViewControllerAsModalWindow:vc]; -//} -//- (void)tlwAction{ -//// [TlwHidManager shared]; -//// return; -// TlwVC *vc = [[TlwVC alloc] initWithNibName:nil bundle:nil]; -// [self presentViewControllerAsModalWindow:vc]; -// -//} -//@end -// -// FrkVC.m -// MouseSdk -// -// Created by incar on 2024/8/21. -// #import "ViewController.h" #import "ScanVC.h" @@ -118,24 +45,6 @@ [self.view addSubview:backgroundView]; self.title = @"AI SDK"; -// { -// NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(50, self.view.bounds.size.height - 80, 100, 45)]; -// btn.bordered = true; -// btn.title = @"蓝牙扫描"; -// [btn setTarget:self]; -// [btn setAction:@selector(scanAction)]; -// btn.state = 1; -// [self.view addSubview:btn]; -// } -// { -// NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(50, self.view.bounds.size.height - 100, 100, 45)]; -// btn.bordered = true; -// btn.title = @"获取设备信息"; -// [btn setTarget:self]; -// [btn setAction:@selector(geviceInfoAction)]; -// btn.state = 1; -// [self.view addSubview:btn]; -// } { NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(50, self.view.bounds.size.height - 200, 100, 45)]; btn.bordered = true;