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)); }