Есть ли библиотека для iPhone для работы с кодировкой HMAC-SHA-1

Для всех операций с услугами Amazon (S3, EC2, SimpleDB) Вам необходимо подписать все запросы с помощью HMAC-SHA-1 Signature (http://en.wikipedia.org/wiki/HMAC, http://docs.amazonwebservices.com/AWSFWS/latest/DeveloperGuide/index.html?SummaryOfAuthentication.html).

Я работаю под бэкэндом asp.net, и проблем нет. Проблема в приложении iPhone. Разработчик iPhone говорит, что нет возможности использовать кодировку HMAC-SHA-1, и у него нет никаких возможностей для реализации собственного алгоритма. Как программист, я не могу понять, почему может возникнуть проблема.

Так что я тоже хочу знать, правильно ли разработчик iPhone?

Я никогда не кодировал iPhone, поэтому я даже не знаю, где искать такую ​​информацию.

Ответы

Ответ 2

CommonCrypto делает трюк.

#import <CommonCrypto/CommonHMAC.h>

а затем

/*
  inputs:
  NSData *keyData;
  NSData *clearTextData
*/

uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};

CCHmacContext hmacContext;
CCHmacInit(&hmacContext, kCCHmacAlgSHA1, keyData.bytes, keyData.length);
CCHmacUpdate(&hmacContext, clearTextData.bytes, clearTextData.length);
CCHmacFinal(&hmacContext, digest);

NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];

Ответ 3

Эта статья демонстрирует небольшую функцию, которая будет генерировать хэш файл SHA-1, который будет соответствовать тому, что генерирует функция php sha1(), если вы даете ему тот же ввод:

#import <CommonCrypto/CommonDigest.h>

@implementation SHA1

+(NSString*) digest:(NSString*)input
{
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];

uint8_t digest[CC_SHA1_DIGEST_LENGTH];

CC_SHA1(data.bytes, data.length, digest);

NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];

return output;

}
@end

Ответ 4

Немного googling, и я нашел этот документ.

Экспорт SHA1 подлежит (Соединенные Штаты Америки) Федеральное правительство экспортный контроль и экспортеры посоветовал обратиться в Департамент Торговля, Бюро экспорта Администрирование для получения дополнительной информации.

Я также нашел this:

Китайская Народная Республика и бывший советский блок может импортировать SHA как поскольку он предназначен для гражданских приложений для конечных пользователей, а не для военной цели. Следующие странам запрещено импорт SHA: Куба, Иран, Ирак, Ливия, Северная Корея, Сербия, Сирия и Судан. Обратите внимание, что этот список страны-эмбарго со временем меняются.

(Не прямой ответ на ваш вопрос, но, безусловно, улокальный.)

Ответ 5

Не для iPhone в частности, но библиотека libs3 предоставляет API C для доступа к сервисам Amazon S3. Он, или компонент FUSE s3fs, может быть хорошим источником для извлечения процедур, необходимых для взаимодействия с Amazon Web Services. Поскольку Objective-C по-прежнему C в своей основе, эти подпрограммы должны отлично работать на iPhone.

Я знаю, по крайней мере, одного разработчика, который использует что-то подобное в своем приложении iPhone для связи с ведрами S3.

Ответ 6

Я думаю, что библиотека CommonCrypto будет делать то, что вы хотите. Посмотрите на этот файл:

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/usr/include/CommonCrypto/CommonHMAC.h

Ответ 7

Я не знаю, так ли это, но раньше были ограничения на алгоритмы шифрования, и ваше право распространять их в определенные страны было ограничено.

Если это так, Apple может не хотеть/не может ограничить загрузку определенных приложений в этих странах.