Twitter with OAuth Example.\\ see also http://www.soramimi.jp/twicpp/index.html

Dependencies:   mbed HTTPClient NTPClient_NetServices EthernetNetIf

Committer:
soramimi
Date:
Wed Mar 23 19:53:42 2011 +0000
Revision:
0:7ddb56bfde0c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
soramimi 0:7ddb56bfde0c 1
soramimi 0:7ddb56bfde0c 2 #include "oauth.h" // base64 encode fn's.
soramimi 0:7ddb56bfde0c 3 #include "sha1.h"
soramimi 0:7ddb56bfde0c 4
soramimi 0:7ddb56bfde0c 5 #include <string.h>
soramimi 0:7ddb56bfde0c 6
soramimi 0:7ddb56bfde0c 7 void hmac_sha1(unsigned char const *key, size_t keylen, unsigned char const *in, size_t inlen, unsigned char *resbuf)
soramimi 0:7ddb56bfde0c 8 {
soramimi 0:7ddb56bfde0c 9 struct SHA1Context inner;
soramimi 0:7ddb56bfde0c 10 struct SHA1Context outer;
soramimi 0:7ddb56bfde0c 11 unsigned char tmpkey[20];
soramimi 0:7ddb56bfde0c 12 unsigned char digest[20];
soramimi 0:7ddb56bfde0c 13 unsigned char block[64];
soramimi 0:7ddb56bfde0c 14
soramimi 0:7ddb56bfde0c 15 const int IPAD = 0x36;
soramimi 0:7ddb56bfde0c 16 const int OPAD = 0x5c;
soramimi 0:7ddb56bfde0c 17
soramimi 0:7ddb56bfde0c 18 if (keylen > 64) {
soramimi 0:7ddb56bfde0c 19 struct SHA1Context keyhash;
soramimi 0:7ddb56bfde0c 20 SHA1Reset(&keyhash);
soramimi 0:7ddb56bfde0c 21 SHA1Input(&keyhash, key, keylen);
soramimi 0:7ddb56bfde0c 22 SHA1Result(&keyhash, tmpkey);
soramimi 0:7ddb56bfde0c 23 key = tmpkey;
soramimi 0:7ddb56bfde0c 24 keylen = 20;
soramimi 0:7ddb56bfde0c 25 }
soramimi 0:7ddb56bfde0c 26
soramimi 0:7ddb56bfde0c 27 for (size_t i = 0; i < sizeof(block); i++) {
soramimi 0:7ddb56bfde0c 28 block[i] = IPAD ^ (i < keylen ? key[i] : 0);
soramimi 0:7ddb56bfde0c 29 }
soramimi 0:7ddb56bfde0c 30 SHA1Reset(&inner);
soramimi 0:7ddb56bfde0c 31 SHA1Input(&inner, block, 64);
soramimi 0:7ddb56bfde0c 32 SHA1Input(&inner, in, inlen);
soramimi 0:7ddb56bfde0c 33 SHA1Result(&inner, digest);
soramimi 0:7ddb56bfde0c 34
soramimi 0:7ddb56bfde0c 35 for (size_t i = 0; i < sizeof(block); i++) {
soramimi 0:7ddb56bfde0c 36 block[i] = OPAD ^ (i < keylen ? key[i] : 0);
soramimi 0:7ddb56bfde0c 37 }
soramimi 0:7ddb56bfde0c 38 SHA1Reset(&outer);
soramimi 0:7ddb56bfde0c 39 SHA1Input(&outer, block, 64);
soramimi 0:7ddb56bfde0c 40 SHA1Input(&outer, digest, 20);
soramimi 0:7ddb56bfde0c 41 SHA1Result(&outer, resbuf);
soramimi 0:7ddb56bfde0c 42 }
soramimi 0:7ddb56bfde0c 43
soramimi 0:7ddb56bfde0c 44
soramimi 0:7ddb56bfde0c 45 std::string oauth_sign_hmac_sha1(const char *m, const char *k)
soramimi 0:7ddb56bfde0c 46 {
soramimi 0:7ddb56bfde0c 47 return oauth_sign_hmac_sha1_raw(m, strlen(m), k, strlen(k));
soramimi 0:7ddb56bfde0c 48 }
soramimi 0:7ddb56bfde0c 49
soramimi 0:7ddb56bfde0c 50 std::string oauth_sign_hmac_sha1_raw(const char *m, const size_t ml, const char *k, const size_t kl)
soramimi 0:7ddb56bfde0c 51 {
soramimi 0:7ddb56bfde0c 52 unsigned char result[20];
soramimi 0:7ddb56bfde0c 53 hmac_sha1((unsigned char const *)k, kl, (unsigned char const *)m, ml, result);
soramimi 0:7ddb56bfde0c 54 return oauth_encode_base64(result, 20);
soramimi 0:7ddb56bfde0c 55 }
soramimi 0:7ddb56bfde0c 56