北科智慧鉴权激活调通
authorliangzhenying <867174124@qq.com>
Wed, 4 Sep 2024 02:01:34 +0000 (10:01 +0800)
committerliangzhenying <867174124@qq.com>
Wed, 4 Sep 2024 02:01:34 +0000 (10:01 +0800)
MouseSdk/AiMouseSdk/AiMouseSdk.xcodeproj/project.pbxproj
MouseSdk/AiMouseSdk/AiMouseSdk/AESCBCHelper.h [moved from MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.h with 100% similarity]
MouseSdk/AiMouseSdk/AiMouseSdk/AESCBCHelper.m [moved from MouseSdk/AiMouseSdk/AiMouseSdk/MSUtils.m with 100% similarity]
MouseSdk/AiMouseSdk/AiMouseSdk/AiBkzhAuthManager.m
MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.h
MouseSdk/AiMouseSdk/AiMouseSdk/AiMouseTools.m
MouseSdk/AiMouseSdk/Manager/AiDeviceAuthManager.m
MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.m
MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
MouseSdk/MouseSdk/ViewController.m

index 4191a45..3c23d96 100644 (file)
                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 */; };
+               188814C22C85C2BB009299A9 /* AESCBCHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 188814C02C85C2BA009299A9 /* AESCBCHelper.h */; };
+               188814C32C85C2BB009299A9 /* AESCBCHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 188814C02C85C2BA009299A9 /* AESCBCHelper.h */; };
+               188814C42C85C2BB009299A9 /* AESCBCHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 188814C12C85C2BA009299A9 /* AESCBCHelper.m */; };
+               188814C52C85C2BB009299A9 /* AESCBCHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 188814C12C85C2BA009299A9 /* AESCBCHelper.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 */; };
                1888148D2C85766B009299A9 /* AiDeviceAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiDeviceAuthManager.m; sourceTree = "<group>"; };
                188814BB2C85BB76009299A9 /* AiBkzhAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiBkzhAuthManager.h; sourceTree = "<group>"; };
                188814BC2C85BB76009299A9 /* AiBkzhAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiBkzhAuthManager.m; sourceTree = "<group>"; };
-               188814C02C85C2BA009299A9 /* MSUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSUtils.h; sourceTree = "<group>"; };
-               188814C12C85C2BA009299A9 /* MSUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSUtils.m; sourceTree = "<group>"; };
+               188814C02C85C2BA009299A9 /* AESCBCHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AESCBCHelper.h; sourceTree = "<group>"; };
+               188814C12C85C2BA009299A9 /* AESCBCHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AESCBCHelper.m; sourceTree = "<group>"; };
                18AD83232BFAE8B9009BDE3B /* AiDeviceInfoManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiDeviceInfoManager.h; sourceTree = "<group>"; };
                18AD83242BFAE8B9009BDE3B /* AiDeviceInfoManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiDeviceInfoManager.m; sourceTree = "<group>"; };
                18AD83272BFB22DE009BDE3B /* AiSender.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiSender.h; sourceTree = "<group>"; };
                                180E7B4A2BD7BD80008558E8 /* AiMouseTools.m */,
                                180E7B532BD7BD82008558E8 /* AiMouseTools2.h */,
                                180E7B4F2BD7BD81008558E8 /* AiMouseTools2.m */,
-                               188814C02C85C2BA009299A9 /* MSUtils.h */,
-                               188814C12C85C2BA009299A9 /* MSUtils.m */,
+                               188814C02C85C2BA009299A9 /* AESCBCHelper.h */,
+                               188814C12C85C2BA009299A9 /* AESCBCHelper.m */,
                                180E7AB82BD7BD7D008558E8 /* AiRecordManager.h */,
                                180E7B4E2BD7BD81008558E8 /* AiRecordManager.m */,
                        );
                                180E7CF22BD8FC4F008558E8 /* d3d11va.h in Headers */,
                                180E7CBC2BD8FC4E008558E8 /* eval.h in Headers */,
                                180E7CF72BD8FC4F008558E8 /* bsf.h in Headers */,
-                               188814C22C85C2BB009299A9 /* MSUtils.h in Headers */,
+                               188814C22C85C2BB009299A9 /* AESCBCHelper.h in Headers */,
                                180E7CD22BD8FC4E008558E8 /* ripemd.h in Headers */,
                                18862A2B2C8064E300D3564D /* HidManager.h in Headers */,
                                180E7CD52BD8FC4E008558E8 /* hwcontext_qsv.h in Headers */,
                                18862B212C806BD900D3564D /* version.h in Headers */,
                                18862B222C806BD900D3564D /* base64.h in Headers */,
                                18862B232C806BD900D3564D /* mastering_display_metadata.h in Headers */,
-                               188814C32C85C2BB009299A9 /* MSUtils.h in Headers */,
+                               188814C32C85C2BB009299A9 /* AESCBCHelper.h in Headers */,
                                18862B242C806BD900D3564D /* crc.h in Headers */,
                                18862B252C806BD900D3564D /* hwcontext_cuda.h in Headers */,
                                18862B262C806BD900D3564D /* hwcontext_vaapi.h in Headers */,
                                18EF7AFB2C7603E800AC5223 /* TlwTools.m in Sources */,
                                18EF7AFA2C7603E800AC5223 /* TlwMouseSdk.m in Sources */,
                                18862A282C8064E300D3564D /* BleManager.m in Sources */,
-                               188814C42C85C2BB009299A9 /* MSUtils.m in Sources */,
+                               188814C42C85C2BB009299A9 /* AESCBCHelper.m in Sources */,
                                180E7BDF2BD7BD84008558E8 /* AiMouseConfig.m in Sources */,
                                18EF7AFC2C7603E800AC5223 /* TlwConnectManager.m in Sources */,
                                181CE5C22C6EED9900EF8D07 /* AiAliAuthManager.m in Sources */,
                                18862BC32C806BD900D3564D /* TlwTools.m in Sources */,
                                18862BC42C806BD900D3564D /* TlwMouseSdk.m in Sources */,
                                18862BC52C806BD900D3564D /* BleManager.m in Sources */,
-                               188814C52C85C2BB009299A9 /* MSUtils.m in Sources */,
+                               188814C52C85C2BB009299A9 /* AESCBCHelper.m in Sources */,
                                18862BC62C806BD900D3564D /* AiMouseConfig.m in Sources */,
                                18862BC72C806BD900D3564D /* TlwConnectManager.m in Sources */,
                                18862BC82C806BD900D3564D /* AiAliAuthManager.m in Sources */,
index 530cf47..c801445 100644 (file)
 #import "AiSecretModel.h"
 
 
-#define kBaseUrl @"http://dmp.raisound.com/bz-api"
+#define kBaseUrl @"https://dmp.raisound.com/bz-api"
 
-#define kProductKey  @"LtKXtGcvk2tAe53uzMKT";
-#define kSecretKey  @"5QYRLYKfitcUaYYUTw4ZVxKPUUVaRyND";
+#define kProductId  @"LtKXtGcvk2tAe53uzMKT"
+#define kProductKey  @"5QYRLYKfitcUaYYUTw4ZVxKPUUVaRyND"
 
 //#define kProductKey  @"4EepovakpbqhZUnUDwH42KAADYGv4UUe";
 //#define kSecretKey  @"5QYRLYKfitcUaYYUTw4ZVxKPUUVaRyND";
     if (self.outputLog) self.outputLog([NSString stringWithFormat:@"[auth]%@",log]);
 }
 
+- (void)testAes{
+    // 密钥(16 字节,例如:"1234567890abcdef")
+            NSString *key = @"yourKey1234567890";
+            // 初始化向量(16 字节,例如:"iv1234567890abc")
+            NSString *iv = @"yourIV1234567890";
+
+            // 要加密的明文
+            NSString *plainText = @"Hello, AES-CBC!";
+
+            // 加密
+            NSData *encryptedData = [AiMouseTools aesCbcEncryptWithKey:key iv:iv plainText:plainText];
+            if (encryptedData) {
+                NSLog(@"Encrypted Data: %@", encryptedData);
+
+                // 解密
+                NSString *decryptedText = [AiMouseTools aesCbcDecryptWithKey:key iv:iv cipherText:encryptedData];
+                if (decryptedText) {
+                    NSLog(@"Decrypted Text: %@", decryptedText);
+                } else {
+                    NSLog(@"Decryption failed.");
+                }
+            } else {
+                NSLog(@"Encryption failed.");
+            }
+}
+
 - (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];
+    NSString *value =  [NSString stringWithFormat:@"%@%@%@", deviceId,kProductId,timeStamp];
+    NSString *signValue = [AiMouseTools stringToHmacSha1:kProductKey text:value];
     
     NSDictionary *params = @{
-        @"pid":productKey,
+        @"pid":kProductId,
         @"deviceId":deviceId,
         @"signMethod":@"HMACSHA1",
         @"sign":signValue,
     };
     
     [self showLog:[NSString stringWithFormat:@"value %@",value]];
-    [self showLog:[NSString stringWithFormat:@"productKey %@",productKey]];
+    [self showLog:[NSString stringWithFormat:@"kProductKey %@",kProductKey]];
     [self showLog:[NSString stringWithFormat:@"signValue %@",signValue]];
 
     NSString *url = [NSString stringWithFormat:@"%@/dev/auth/active",kBaseUrl];
         NSString *code = dict[@"code"];
         NSString *deviceSecret = [dict valueForKeyPath:@"data.password"];
         if(code.integerValue == 20000 && deviceSecret){
+            [self testAes];
             NSString *nonce = [dict valueForKeyPath:@"data.nonce"];
-            
-//            [self sendDeviceSecretCmd:deviceSecret];
+            NSData *pwsData = [[NSData alloc]initWithBase64EncodedString:deviceSecret options:0];
+            NSString *pwd = [AiMouseTools aesCbcDecryptWithKey:kProductKey iv:nonce cipherText:pwsData];
+            [self sendDeviceSecretCmd:pwd];
             [self showLog:@"激活成功"];
         }
         else{
     NSString *nonce = [AiMouseTools generateRandomString16];
     NSString *key = kProductKey;
     NSString *originPwd = [self.deviceInfo valueForKey:@"deviceSecret"];//注册返回的密码
-    NSString *pwd = originPwd;
+    NSString *pwd = [[AiMouseTools aesCbcEncryptWithKey:key iv:nonce plainText:originPwd] base64EncodedStringWithOptions:0];
     NSDictionary *params = @{
         @"deviceId":deviceId,
         @"password":pwd,
         NSString *code = dict[@"code"];
         NSString *token = [dict valueForKeyPath:@"data.token"];
         if(code.integerValue == 20001){
+            [self showLog:@"登录成功"];
             self.token = token;
             if(self.authCallBack)self.authCallBack(true);
             //[self tokenRequest];
index 813347e..1c54634 100644 (file)
@@ -41,6 +41,11 @@ NS_ASSUME_NONNULL_BEGIN
 +(NSString *)getCurrentTime;
 
 + (NSString *)generateRandomString16;
+
+
++ (NSData *)aesCbcEncryptWithKey:(NSString *)key iv:(NSString *)iv plainText:(NSString *)plainText;
+
++ (NSString *)aesCbcDecryptWithKey:(NSString *)key iv:(NSString *)iv cipherText:(NSData *)cipherText;
 @end
 
 NS_ASSUME_NONNULL_END
index 1b2482e..653ea10 100644 (file)
     }
     return randomString;
 }
+
+
+
+
+// AES-CBC 加密
++ (NSData *)aesCbcEncryptWithKey:(NSString *)key iv:(NSString *)iv plainText:(NSString *)plainText {
+    const char *keyPtr = [key UTF8String];
+    const char *ivPtr = [iv UTF8String];
+    const char *plainTextPtr = [plainText UTF8String];
+    size_t plainTextLength = strlen(plainTextPtr);
+
+    size_t bufferSize = plainTextLength + kCCBlockSizeAES128;
+    uint8_t buffer[bufferSize];
+
+    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
+                                          kCCAlgorithmAES128,
+                                          kCCOptionPKCS7Padding,
+                                          keyPtr,
+                                          kCCKeySizeAES128,
+                                          ivPtr,
+                                          plainTextPtr,
+                                          plainTextLength,
+                                          buffer,
+                                          bufferSize,
+                                          NULL);
+
+    if (cryptStatus == kCCSuccess) {
+        return [NSData dataWithBytes:buffer length:bufferSize];
+    } else {
+        return nil;
+    }
+}
+
+// AES-CBC 解密
++ (NSString *)aesCbcDecryptWithKey:(NSString *)key iv:(NSString *)iv cipherText:(NSData *)cipherText {
+    const char *keyPtr = [key UTF8String];
+    const char *ivPtr = [iv UTF8String];
+    size_t cipherTextLength = [cipherText length];
+    uint8_t *buffer = malloc(cipherTextLength);
+
+    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
+                                          kCCAlgorithmAES128,
+                                          kCCOptionPKCS7Padding,
+                                          keyPtr,
+                                          kCCKeySizeAES128,
+                                          ivPtr,
+                                          [cipherText bytes],
+                                          cipherTextLength,
+                                          buffer,
+                                          cipherTextLength,
+                                          NULL);
+
+    if (cryptStatus == kCCSuccess) {
+        NSString *decryptedString = [[NSString alloc] initWithBytes:buffer length:cipherTextLength encoding:NSUTF8StringEncoding];
+        free(buffer);
+        return decryptedString;
+    } else {
+        free(buffer);
+        return nil;
+    }
+}
 @end
 
index 13c0a31..b6cacd6 100644 (file)
 
 
 - (void)showHidAlert{
-        NSAlert *alert = [[NSAlert alloc] init];
-        [alert setMessageText:@"请前往设置-隐私与安全性-输入监控,将输入监控打开并重启app才能使用AI功能"];
-        [alert addButtonWithTitle:@"确定"];
-//        [alert addButtonWithTitle:@"取消"];
-        NSInteger result = [alert runModal];
-        if (result == NSAlertFirstButtonReturn) {
-            NSLog(@"用户点击了确定");
-            [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_ListenEvent"]];
-        } else if (result == NSAlertSecondButtonReturn) {
-            NSLog(@"用户点击了取消");
-        }
+    NSAlert *alert = [[NSAlert alloc] init];
+    [alert setMessageText:@"请前往设置-隐私与安全性-输入监控,将输入监控打开并重启app才能使用AI功能"];
+    [alert addButtonWithTitle:@"确定"];
+    //        [alert addButtonWithTitle:@"取消"];
+    NSInteger result = [alert runModal];
+    if (result == NSAlertFirstButtonReturn) {
+        NSLog(@"用户点击了确定");
+        [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_ListenEvent"]];
+    } else if (result == NSAlertSecondButtonReturn) {
+        NSLog(@"用户点击了取消");
+    }
+    [NSApp terminate:nil];
 }
 
 
 - (void)showMicrophoneAlert{
-        NSAlert *alert = [[NSAlert alloc] init];
-        [alert setMessageText:@"请前往设置-隐私与安全性-麦克风,将麦克风打开并重启app才能使用AI功能"];
-        [alert addButtonWithTitle:@"确定"];
-//        [alert addButtonWithTitle:@"取消"];
-        NSInteger result = [alert runModal];
-        if (result == NSAlertFirstButtonReturn) {
-            NSLog(@"用户点击了确定");
-            [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone"]];
-        } else if (result == NSAlertSecondButtonReturn) {
-            NSLog(@"用户点击了取消");
-        }
+    NSAlert *alert = [[NSAlert alloc] init];
+    [alert setMessageText:@"请前往设置-隐私与安全性-麦克风,将麦克风打开并重启app才能使用AI功能"];
+    [alert addButtonWithTitle:@"确定"];
+    //        [alert addButtonWithTitle:@"取消"];
+    NSInteger result = [alert runModal];
+    if (result == NSAlertFirstButtonReturn) {
+        NSLog(@"用户点击了确定");
+        [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone"]];
+    } else if (result == NSAlertSecondButtonReturn) {
+        NSLog(@"用户点击了取消");
+    }
+    [NSApp terminate:nil];
 }
 
 @end
index 4e2ee8c..a90a253 100644 (file)
 
 - (void)getFullDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))finished{
     self.getFullInfoCallBack = finished;
-    self.questTimes = 0;
-    [self checkFullInfoAction];
-}
-
-- (void)checkFullInfoAction{
-    self.questTimes++;
-    if (self.questTimes > 3) {
-        self.getFullInfoCallBack(nil,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]);
-        [self switchConnect:AiMouseConnectType_hid isConnected:false ];
-        return;
-    }
-    if (self.getFullInfoCallBack) {
-        [self reGetFullInfoAction];
-    }
-}
-- (void)reGetFullInfoAction{
-    if(self.getFullInfoCallBack == nil)return;;
     __weak typeof(self) ws = self;
     [self getDeviceInfo:^(TlwDeviceInfo *deviceInfo, NSError *error) {
         if(deviceInfo != nil){
                     info.mac = snInfo.mac;
                     [ws showLog:info.description];
                     if(ws.getFullInfoCallBack)ws.getFullInfoCallBack(info, nil);
-                    ws.getFullInfoCallBack = nil;
                 }
                 else{
                     if(ws.getFullInfoCallBack)ws.getFullInfoCallBack(nil,error);
-                    ws.getFullInfoCallBack = nil;
+                    [ws TlwConnectManager:nil connectStateDidChange:false];
                 }
             }];
         }
         else{
             if(ws.getFullInfoCallBack) ws.getFullInfoCallBack(nil,error);
-            ws.getFullInfoCallBack = nil;
+            [ws TlwConnectManager:nil connectStateDidChange:false];
         }
     }];
-    
-    [self performSelector:@selector(checkFullInfoAction) withObject:nil afterDelay:1];
 }
+
 #pragma mark - check dongle
 - (void)checkDongleState{
     self.dongleTimes = 0;
index 06271af..21542c9 100644 (file)
Binary files a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate and b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate differ
index 24cecc0..f7d2f14 100644 (file)
 }
 
 #pragma mark - action
-- (void)scanAction{
-//    [[HidManager shared] open];
-//    return;
-    ScanVC *vc = [[ScanVC alloc] initWithNibName:nil bundle:nil];
-    [self presentViewControllerAsModalWindow:vc];
-}
 - (void)setupDeviceManger{
 //    [AiHidManager shared];
     DeviceManger *manager = [DeviceManger shared];