Amazon Production Advertising APIとCocoa 第3回

2009年8月6日木曜日
署名を作成する前段階まできました。

5. 作成した文字列と秘密キーで、HMAC-SHA256形式の署名を作成する。

これはどうあがいても理解できそうになかったので、CCHMACを使うことに。
Google Codeにあったこことか、stackoverflowにあったこことかすごく参考になりました。

まず最初にファイルをインポート。



#import <CommonCrypto/CommonHMAC.h>



そして署名を作成します。



unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

const char *cKey = [S_ID cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [forSignString cStringUsingEncoding:NSASCIIStringEncoding];

CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);


解説はできません(笑)。AppleのDocumentによると、CCHmacは



void
CCHmac(CCHmacAlgorithm algorithm, const void *key, size_t keyLength, const void *data, size_t dataLength, void *macOut);



という定義がされているようです。CCHmacAlgorithm algorithmの部分を変更すれば、SHA1やMD5の署名も作れます。

6. 署名を付けたRESTリクエストを作成

署名(cHMAC)をNDDataに変換、再度Urlencodeして、urlStringの後に&Signature=[署名]の形式でくっつけ、その頭にhttp://ecs.amazonaws.jp/onca/xml?を付けてURLの形にします。



NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
length:sizeof(cHMAC)];

NSString *hash = [self urlencode:[HMAC stringEncodedWithBase64]];

NSString *url = [NSString stringWithFormat:@"http://ecs.amazonaws.jp/onca/xml?%@&Signature=%@", urlString, hash];



これでOK。生成されたurlにFirefoxなどでアクセスしてみると、XMLが返ってくると思います。XMLが返ってきたときはとっても嬉しかったです。

2 コメント:

  • tomokin

    参考にさせていただきました。
    大変わかりやすく無事動作の確認ができました。
    ありがとうございます。
    #自分もXMLの応答がきたときにとってもうれしかったです!

  • hiroe

    コメントありがとうございます。自分もAmazonのシステム変更時にとても苦労したので、誰かのお役に立てて嬉しいです。

  • コメントを投稿