int main(int argc, char **argv) { unsigned char *argbuf; size_t argbuflen; gcry_mpi_t our_x, our_y, their_y; unsigned char *pubbuf; size_t publen; unsigned char sessionid[20], sendenc[16], rcvenc[16]; unsigned char sendmac[20], rcvmac[20]; int is_high; if (argc != 3) { usage(argv[0]); } argv_to_buf(&argbuf, &argbuflen, argv[1]); /* Private keys are only 320 bits long, so check for that to make * sure they didn't get the args the wrong way around */ if (!argbuf || argbuflen > 40) usage(argv[0]); gcry_mpi_scan(&our_x, GCRYMPI_FMT_USG, argbuf, argbuflen, NULL); free(argbuf); argv_to_buf(&argbuf, &argbuflen, argv[2]); if (!argbuf) usage(argv[0]); gcry_mpi_scan(&their_y, GCRYMPI_FMT_USG, argbuf, argbuflen, NULL); free(argbuf); sesskeys_gen(sessionid, sendenc, rcvenc, &is_high, &our_y, our_x, their_y); sesskeys_make_mac(sendmac, sendenc); sesskeys_make_mac(rcvmac, rcvenc); /* Print our public key into a buffer */ gcry_mpi_print(GCRYMPI_FMT_USG, NULL, 0, &publen, our_y); pubbuf = malloc(publen); if (!pubbuf) { fprintf(stderr, "Out of memory!\n"); exit(1); } gcry_mpi_print(GCRYMPI_FMT_USG, pubbuf, publen, NULL, our_y); puts(""); printf("We are the %s end of this key exchange.\n", is_high ? "high" : "low"); puts(""); dump_data(stdout, "Our public key", pubbuf, publen); puts(""); dump_data(stdout, "Session id", sessionid, 20); puts(""); dump_data(stdout, "Sending AES key", sendenc, 16); dump_data(stdout, "Sending MAC key", sendmac, 20); dump_data(stdout, "Receiving AES key", rcvenc, 16); dump_data(stdout, "Receiving MAC key", rcvmac, 20); puts(""); fflush(stdout); return 0; }
int main(int argc, char **argv) { unsigned char *argbuf; size_t argbuflen; unsigned char mackey[20]; if (argc != 2) { usage(argv[0]); } argv_to_buf(&argbuf, &argbuflen, argv[1]); /* AES keys are 128 bits long, so check for that */ if (!argbuf) { usage(argv[0]); } if (argbuflen != 16) { fprintf(stderr, "The AES key must be 32 hex chars long.\n"); usage(argv[0]); } sesskeys_make_mac(mackey, argbuf); dump_data(stdout, "AES key", argbuf, 16); dump_data(stdout, "MAC key", mackey, 20); free(argbuf); fflush(stdout); return 0; }