| #include <stdio.h> |
| #include <string.h> |
| #include <openssl/ec.h> |
| #include <openssl/ecdsa.h> |
| #include <openssl/obj_mac.h> |
| #include <openssl/jpake.h> |
| #include <openssl/ecdh.h> |
| #include <polarssl/ctr_drbg.h> |
| |
| int entropy(void *closure, unsigned char *outentropy, size_t outsize) |
| { |
| unsigned char *entropy; |
| int rval, idx; |
| |
| printf("hey, somebody wants entropy: %p, %d\n", outentropy, outsize); |
| do |
| { |
| #ifdef gPlatformGetRandomNumber |
| rval = (int)gPlatformGetRandomNumber(); |
| #else |
| rval = rand(); |
| #endif |
| |
| entropy = (unsigned char *)&rval; |
| printf("got some sweet entropy: %08x\n", rval); |
| |
| for (idx = 0; (idx < sizeof(int)) && (outsize > 0); idx++, outsize--) |
| *outentropy++ = *entropy++; |
| } |
| while (outsize > 0); |
| |
| return 0; |
| } |
| |
| ctr_drbg_context *gCTRDRBG_ctx = NULL; |
| |
| int main(int argc, char ** argv) |
| { |
| int retval = 0; |
| int i; |
| |
| #ifdef gPlatformSetInputEntropy |
| gPlatformSetInputEntropy(seed); |
| #else |
| time_t tim; |
| |
| tim = time(NULL); |
| |
| srand(tim); |
| #endif |
| |
| // Force linker references to the necessary top-level functions. |
| |
| static void *functions[] = |
| { |
| (void *)ECDSA_do_sign, |
| (void *)ECDSA_do_verify, |
| |
| (void *)JPAKE_STEP1_init, |
| (void *)JPAKE_STEP1_generate, |
| (void *)JPAKE_STEP1_process, |
| (void *)JPAKE_STEP1_release, |
| (void *)JPAKE_STEP2_init, |
| (void *)JPAKE_STEP2_generate, |
| (void *)JPAKE_STEP2_process, |
| (void *)JPAKE_STEP2_release, |
| |
| (void *)ECDH_compute_key, |
| NULL |
| }; |
| |
| for (i = 0; functions[i] != NULL; i++) |
| printf("%p\n", functions[i]); |
| |
| ctr_drbg_context ctx; |
| |
| #ifdef DEBUG |
| ctr_drbg_self_test(1); |
| #endif |
| |
| retval = ctr_drbg_init(&ctx, entropy, NULL, NULL, 0); |
| |
| gCTRDRBG_ctx = &ctx; |
| |
| printf("returning: %d\n", retval); |
| |
| return retval; |
| } |
| |