AliyunOSSSDK/Signer/OSSServiceSignature.m (60 lines of code) (raw):
//
// OSSServiceSignature.m
// AliyunOSSSDK
//
// Created by ws on 2023/12/26.
// Copyright © 2023 aliyun. All rights reserved.
//
#import "OSSServiceSignature.h"
#import <CommonCrypto/CommonHMAC.h>
#import "OSSUtil.h"
#define Version @"1"
#define AlgorithmSHA1 @"HmacSHA1"
#define AlgorithmSHA256 @"HmacSHA256"
@interface HmacSHA1Signature()
@end
@implementation HmacSHA1Signature
- (NSString *)algorithm {
return AlgorithmSHA1;
}
- (NSString *)version {
return Version;
}
- (NSData *)computeHash:(NSData *)key
data:(NSData *)data {
return [self sign:key data:data];
}
- (NSString *)computeSignature:(NSString *)key
data:(NSString *)data {
NSData *secretData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *clearTextData = [data dataUsingEncoding:NSUTF8StringEncoding];
NSData *signData = [self sign:secretData data:clearTextData];
return [OSSUtil calBase64WithData:(UTF8Char*)signData.bytes];
}
- (NSData *)sign:(NSData *)key
data:(NSData *)data {
uint8_t input[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, [key bytes], [key length], [data bytes], [data length], input);
return [NSData dataWithBytes:input length:CC_SHA1_DIGEST_LENGTH];
}
@end
@interface HmacSHA256Signature()
@end
@implementation HmacSHA256Signature
//static NSString *Algorithm = @"HmacSHA256";
- (NSString *)algorithm {
return AlgorithmSHA256;
}
- (NSString *)version {
return Version;
}
- (NSData *)computeHash:(NSData *)key
data:(NSData *)data {
return [self sign:key data:data];
}
- (NSString *)computeSignature:(NSString *)key
data:(NSString *)data {
NSData *secretData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *clearTextData = [data dataUsingEncoding:NSUTF8StringEncoding];
NSData *signData = [self sign:secretData data:clearTextData];
return [OSSUtil calBase64WithData:(UTF8Char*)signData.bytes];
}
- (NSData *)sign:(NSData *)key
data:(NSData *)data {
uint8_t input[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, [key bytes], [key length], [data bytes], [data length], input);
return [NSData dataWithBytes:input length:CC_SHA256_DIGEST_LENGTH];
}
@end