initial commit

This commit is contained in:
Caleb
2026-03-01 15:59:27 +08:00
commit a9e97d56cb
1426 changed files with 172367 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
//
// TokenGenerator.m
// SellyCloudSDK_Example
//
// Created by Caleb on 20/11/25.
// Copyright © 2025 Caleb. All rights reserved.
//
#import "TokenGenerator.h"
#define KSecret @"CHANGE_ME"
#define CALL_APP_ID @"demo-app"
@implementation TokenGenerator
+ (NSString *)generateRTCCallTokenWithUserId:(NSString *)userId
callId:(NSString *)callId
{
//
long signTime = (long)[[NSDate date] timeIntervalSince1970];
long exprTime = signTime + 60; // 10
// payload
NSString *payload = [NSString stringWithFormat:@"%@%@%@%ld%ld",
CALL_APP_ID, userId, callId, signTime, exprTime];
// HMAC-SHA256
const char *cKey = [KSecret cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [payload cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
// hex
NSMutableString *sign = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[sign appendFormat:@"%02x", cHMAC[i]];
}
// Token
NSString *token = [NSString stringWithFormat:
@"appid=%@&userid=%@&callid=%@&signtime=%ld&exprtime=%ld&sign=%@",
CALL_APP_ID, userId, callId, signTime, exprTime, sign];
return token;
}
+ (NSString *)generateStreamSignatureWithVhost:(NSString *)vhost
appId:(NSString *)appId
channelId:(NSString *)channelId
type:(NSString *)type
key:(NSString *)key
{
//
long signTm = (long)[[NSDate date] timeIntervalSince1970];
long expireTm = signTm + 600; // 10
// : vhost|app_id|channel_id|sign_tm|expire_tm|type
NSString *payload = [NSString stringWithFormat:@"%@|%@|%@|%ld|%ld|%@",
vhost, appId, channelId, signTm, expireTm, type];
// 使 key
NSString *sign = [self generateSign:payload withKey:key];
// payload: vhost|app_id|channel_id|sign_tm|expire_tm|type|sign
NSString *fullPayload = [NSString stringWithFormat:@"%@|%@", payload, sign];
NSLog(@"###fullPayload == %@",fullPayload);
// Base64
NSData *data = [fullPayload dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [data base64EncodedStringWithOptions:0];
return base64String;
}
+ (NSString *)generateSign:(NSString *)payload withKey:(NSString *)key {
// HMAC-SHA256
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [payload cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
// hex
NSMutableString *sign = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[sign appendFormat:@"%02x", cHMAC[i]];
}
return sign;
}
@end