P_SHA-1 в Objective-C для WS-Trust - PullRequest
       9

P_SHA-1 в Objective-C для WS-Trust

1 голос
/ 21 октября 2011

Я пытаюсь вычислить ключ для подписи SOAP, используя P_SHA-1, определенный WS-Trust. В спецификации WS-Trust сказано, что

key = P_SHA1 (EntropyFromRequest, EntropyFromResponse)

и спецификация TLS гласит, что P_SHA-1 равен

P_SHA-1(secret, seed) =
    HMAC_SHA-1(secret, A(1) + seed) +
    HMAC_SHA-1(secret, A(2) + seed) +
    HMAC_SHA-1(secret, A(3) + seed) + ...
Where + indicates concatenation.

A() is defined as:
A(0) = seed
A(i) = HMAC_SHA-1(secret, A(i-1))

Мой алгоритм выглядит так:

- (NSData*) psha1WithSize:(int)bytes;
{
    int numberOfIterations = bytes/16;
    NSData *label;
    NSData *secret;
    NSMutableData *seed;

    NSData *reqEntropy = [NSData dataWithBase64EncodedString:requestEntropy];
    NSData *resEntropy = [NSData dataWithBase64EncodedString:responseEntropy];

    secret = reqEntropy;
    seed = resEntropy;

    NSData *aIMinusOne = seed;      
    NSData *aI = nil;
    NSMutableData *currentData = [[NSMutableData alloc] init];

    for( int i=1; i <= numberOfIterations; i++ )
    {
        aI = [self hmacSha1Data:aIMinusOne withKey:secret];
        NSMutableData *aIPlusSeed = [NSMutableData dataWithData:aI];
        [aIPlusSeed appendData:seed];
        [currentData appendData:[self hmacSha1Data:aIPlusSeed withKey:secret]];
        aIMinusOne = aI;
        aI = nil;
    }
    return currentData;
}

Мой HMAC выглядит следующим образом: Кодировка iPhone и HMAC-SHA-1

Кажется, это не работает, и я не могу понять, что не так с моим алгоритмом. У меня была мысль, что сервис реализован в .NET WCF, и чтобы он принял хешированный пароль, мне пришлось использовать NSUTF16LittleEndianStringEncoding, поэтому, возможно, энтропия ответа находится в той же кодировке (до кодировки base64)?

Любая помощь очень ценится, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...