/* API */ char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl) { sha1nfo s; sha1_initHmac(&s, (const uint8_t*) k, kl); sha1_write(&s, m, ml); unsigned char *digest = sha1_resultHmac(&s); return oauth_encode_base64(HASH_LENGTH, digest); }
int main (int argc, char **argv) { uint32_t a; sha1nfo s; printf("sizeof(sha1nfo)=%d\n\n", sizeof(sha1nfo)); // SHA tests printf("Test: FIPS 180-2 C.1 and RFC3174 7.3 TEST1\n"); printf("Expect:a9993e364706816aba3e25717850c26c9cd0d89d\n"); printf("Result:"); sha1_init(&s); sha1_write(&s, "abc", 3); printHash(sha1_result(&s)); printf("\n\n"); printf("Test: FIPS 180-2 C.2 and RFC3174 7.3 TEST2\n"); printf("Expect:84983e441c3bd26ebaae4aa1f95129e5e54670f1\n"); printf("Result:"); sha1_init(&s); sha1_write(&s, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56); printHash(sha1_result(&s)); printf("\n\n"); printf("Test: RFC3174 7.3 TEST4\n"); printf("Expect:dea356a2cddd90c7a7ecedc5ebb563934f460452\n"); printf("Result:"); sha1_init(&s); for (a=0; a<80; a++) sha1_write(&s, "01234567", 8); printHash(sha1_result(&s)); printf("\n\n"); // HMAC tests printf("Test: FIPS 198a A.1\n"); printf("Expect:4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a\n"); printf("Result:"); sha1_initHmac(&s, hmacKey1, 64); sha1_write(&s, "Sample #1",9); printHash(sha1_resultHmac(&s)); printf("\n\n"); printf("Test: FIPS 198a A.2\n"); printf("Expect:0922d3405faa3d194f82a45830737d5cc6c75d24\n"); printf("Result:"); sha1_initHmac(&s, hmacKey2, 20); sha1_write(&s, "Sample #2", 9); printHash(sha1_resultHmac(&s)); printf("\n\n"); printf("Test: FIPS 198a A.3\n"); printf("Expect:bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa\n"); printf("Result:"); sha1_initHmac(&s, hmacKey3,100); sha1_write(&s, "Sample #3", 9); printHash(sha1_resultHmac(&s)); printf("\n\n"); printf("Test: FIPS 198a A.4\n"); printf("Expect:9ea886efe268dbecce420c7524df32e0751a2a26\n"); printf("Result:"); sha1_initHmac(&s, hmacKey4,49); sha1_write(&s, "Sample #4", 9); printHash(sha1_resultHmac(&s)); printf("\n\n"); // Long tests printf("Test: FIPS 180-2 C.3 and RFC3174 7.3 TEST3\n"); printf("Expect:34aa973cd4c4daa4f61eeb2bdbad27316534016f\n"); printf("Result:"); sha1_init(&s); for (a=0; a<1000000; a++) sha1_writebyte(&s, 'a'); printHash(sha1_result(&s)); // liang: 65536 zeros printf("\n\n"); printf("Test: 65536 zeros\n"); printf("Expect:1adc95bebe9eea8c112d40cd04ab7a8d75c4f961\n"); printf("Result:"); sha1_init(&s); for (a=0; a<65536; a++) sha1_writebyte(&s, 0); printHash(sha1_result(&s)); // test liang_zhash printf("\n\n"); printf("Test: 65536 zeros\n"); printf("Expect:1adc95bebe9eea8c112d40cd04ab7a8d75c4f961\n"); printf("Result:"); uint8_t hash[20]; char buf[65536]; for(a=0; a<65536; a++) buf[a]=0; liang_zhash((const uint8_t *)buf, 65536, hash); printHash(hash); return 0; }