/* * Get somebody's encrypted secret key from the database, using the given * passwd to decrypt it. */ int getsecretkey(char *netname, char *secretkey, char *passwd) { char lookup[3 * HEXKEYBYTES]; char *p; if (secretkey == NULL) return (0); if (!getpublicandprivatekey(netname, lookup)) return (0); p = strchr(lookup, ':'); if (p == NULL) { return (0); } p++; if (!xdecrypt(p, passwd)) { return (0); } if (memcmp(p, p + HEXKEYBYTES, KEYCHECKSUMSIZE) != 0) { secretkey[0] = '\0'; return (1); } p[HEXKEYBYTES] = '\0'; (void) strncpy(secretkey, p, HEXKEYBYTES); secretkey[HEXKEYBYTES] = '\0'; return (1); }
/* * Get somebody's public key */ static int __getpublickey_real(const char *netname, char *publickey) { char lookup[3 * HEXKEYBYTES]; char *p; if (publickey == NULL) return (0); if (!getpublicandprivatekey(netname, lookup)) return (0); p = strchr(lookup, ':'); if (p == NULL) { return (0); } *p = '\0'; strncpy(publickey, lookup, HEXKEYBYTES); publickey[HEXKEYBYTES] = '\0'; return (1); }