// generate public/private key pair for digital signatures void genkeys(void) { if (open_crypt()) { if (CryptGenKey(hProv, AT_SIGNATURE, keylen << 16 | CRYPT_EXPORTABLE, &hKey)) { // export as C array and binary export_key(PUBLICKEYBLOB, DSA_PUBLIC_H, DSA_C_ARRAY); export_key(PUBLICKEYBLOB, DSA_PUBLIC_BIN, DSA_BINARY); export_key(PRIVATEKEYBLOB, DSA_PRIVATE_H, DSA_C_ARRAY); export_key(PRIVATEKEYBLOB, DSA_PRIVATE_BIN, DSA_BINARY); close_key(); } else { xstrerror("CryptGenKey(%i)", keylen); } close_crypt(); } else { xstrerror("CryptAcquireContext()"); } }
int do_action_connect(struct client_settings *settings, GPG_CTX *gpg_ctx) { gpgme_data_t key; int ret; // get key ret = export_key(&key, settings->key, gpg_ctx); if (is_failure(ret)) return ret; // send to server ret = send_to_server(key, settings->host, settings->host_port, gpg_ctx); if (ret != ERROR_NO_ERROR) return ret; return ERROR_NO_ERROR; }