Example #1
0
int
key_encryptsession_g(
	const char *remotename,
	keylen_t keylen,
	algtype_t algtype,
	des_block deskey[],
	keynum_t keynum
)
{
	cryptkeyarg3 arg;
	cryptkeyres3 res;

	if (CLASSIC_PK_DH(keylen, algtype))
		return (key_encryptsession(remotename, deskey));
	arg.remotename = (char *)remotename;
	arg.algtype = algtype;
	arg.keylen = keylen;
	arg.deskey.deskeyarray_len = keynum;
	arg.deskey.deskeyarray_val = deskey;
	arg.remotekey.keybuf3_len = 0;
	(void) memset(&res, 0, sizeof (res));
	res.cryptkeyres3_u.deskey.deskeyarray_val = deskey;
	if (!key_call((rpcproc_t)KEY_ENCRYPT_3, xdr_cryptkeyarg3, (char *)&arg,
			xdr_cryptkeyres3, (char *)&res))
		return (-1);
	if (res.status != KEY_SUCCESS) {
		debug("encrypt3 status is nonzero");
		return (-1);
	}
	if (res.cryptkeyres3_u.deskey.deskeyarray_len != keynum) {
		debug("encrypt3 didn't return same number of keys");
		return (-1);
	}
	return (0);
}
main (int argc, char **argv)
{
  char buf[MAXNETNAMELEN + 1];
  des_block block;
  uid_t uid;
  char *netname;

  if (argc < 3)
    die("supply uid and netname");

  sscanf(argv[1], "%d", &uid);
  netname = argv[2];
  memset(buf, 0, sizeof(buf));
  snprintf(buf, sizeof(buf), "ssh.%04X", uid);
  memcpy(block.c, buf, sizeof(block.c));
  if (key_encryptsession(netname, &block) != 0)
    die("key_encryptsession failed");
  printf("SUN-DES-1 magic phrase (uid %d, netname %s):\n  %08X%08X\n",
         uid,
         netname,
         ntohl(block.key.high),
         ntohl(block.key.low));
}