예제 #1
0
파일: srlog2.c 프로젝트: bruceg/srlog2
static int receive_cid(struct key* csession_secret)
{
  struct key ssession_public;
  struct key tmpkey;
  if (!receive_packet(CID1,
		      8 + keyex->size + AUTH_LENGTH,
		      8 + keyex->size + AUTH_LENGTH))
    return 0;
  if (!pkt_validate(&rpacket, &cid_authenticator)) {
    debug1(DEBUG_PACKET, "Received CID failed validation");
    return 0;
  }
  pkt_get_key(&rpacket, 8, &ssession_public, keyex);
  key_exchange(&tmpkey, &ssession_public, csession_secret);
  auth_start(&msg_authenticator, &tmpkey);
  encr_init(&encryptor, &tmpkey);
  debug1(DEBUG_PACKET, "Received CID packet");
  seq_last = 0;
  return 1;
}
예제 #2
0
파일: t8.c 프로젝트: tca/up
int main(int argc, char **argv) {
  int mode, sock;
  size_t length;

  // Alice's public and secret keys
  unsigned char *a_pk;
  unsigned char *a_sk;

  // Bob's public key
  unsigned char *b_pk;

  if (argc != 1 + 6) {
    fprintf(stderr, usage);
    return EXIT_FAILURE;
  }

  // read all the keys off the disk
  if (read_from_file(argv[2], &a_pk, &length)) {
    fprintf(stderr, "Failed to read sender's public key\n");
    return EXIT_FAILURE;
  }
  if (length != crypto_box_PUBLICKEYBYTES) {
    fprintf(stderr, "Failed to read sender's public key: incorrect size\n");
    return EXIT_FAILURE;
  }

  if (read_from_file(argv[3], &a_sk, &length)) {
    fprintf(stderr, "Failed to read sender's private key\n");
    return EXIT_FAILURE;
  }
  if (length != crypto_box_SECRETKEYBYTES) {
    fprintf(stderr, "Failed to read sender's private key: incorrect size\n");
    return EXIT_FAILURE;
  }

  if (read_from_file(argv[4], &b_pk, &length)) {
    fprintf(stderr, "Failed to read recipient's public key\n");
    return EXIT_FAILURE;
  }
  if (length != crypto_box_PUBLICKEYBYTES) {
    fprintf(stderr, "Failed to read recipient's public key: incorrect size\n");
  }

  if        (!strcmp(argv[1], "client")) {
    mode = client_mode;
  } else if (!strcmp(argv[1], "server")) {
    mode = server_mode;
  } else {
    fprintf(stderr, usage);
    return EXIT_FAILURE;
  }

  // Connect
  if(start_networking(mode, argv[5], argv[6], &sock)) {
    puts("Could not network..");
    close(sock);
    return EXIT_FAILURE;
  }

  unsigned char key[crypto_secretbox_KEYBYTES + crypto_box_ZEROBYTES] = {0};
  key_exchange(a_sk, b_pk, key, mode, sock);
  
  write_to_file((mode ? "alice.asymm" : "bob.asymm"), key + crypto_box_ZEROBYTES, crypto_secretbox_KEYBYTES);
  
  return 0;
}