ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
keys.h
Go to the documentation of this file.
1#pragma once
2
28
30#include <stdint.h>
31#include <stddef.h>
32#include <stdbool.h>
33#include "../common.h" // For asciichat_error_t
34#include "key_types.h" // Include the key type definitions
35
36// Include specialized key modules
37#include "ssh/ssh_keys.h"
38#include "gpg/gpg_keys.h"
39#include "https_keys.h"
40#include "keys_validation.h"
41
46
96asciichat_error_t parse_public_key(const char *input, public_key_t *key_out);
97
139asciichat_error_t parse_public_keys(const char *input, public_key_t *keys_out, size_t *num_keys, size_t max_keys);
140
142
147
175asciichat_error_t parse_private_key(const char *path, private_key_t *key_out);
176
178
183
208
232
234
239
268asciichat_error_t ed25519_sign_message(const private_key_t *key, const uint8_t *message, size_t message_len,
270
293 size_t message_len, const uint8_t signature[ED25519_SIGNATURE_SIZE],
294 const char *gpg_key_id);
295
297
305
335asciichat_error_t fetch_github_keys(const char *username, char ***keys_out, size_t *num_keys, bool use_gpg);
336
360asciichat_error_t fetch_gitlab_keys(const char *username, char ***keys_out, size_t *num_keys, bool use_gpg);
361
378asciichat_error_t fetch_github_gpg_keys(const char *username, char ***keys_out, size_t *num_keys);
379
396asciichat_error_t fetch_gitlab_gpg_keys(const char *username, char ***keys_out, size_t *num_keys);
397
399
404
421asciichat_error_t parse_gpg_key(const char *gpg_key_text, public_key_t *key_out);
422
459asciichat_error_t parse_keys_from_file(const char *path, public_key_t *keys, size_t *num_keys, size_t max_keys);
460
462
467
488void format_public_key(const public_key_t *key, char *output, size_t output_size);
489
511asciichat_error_t hex_decode(const char *hex, uint8_t *output, size_t output_len);
512
537asciichat_error_t validate_ssh_key_file(const char *key_path);
538
540
541// Forward declaration (full definition in handshake.h)
542// Note: This avoids circular includes (handshake.h includes keys.h)
⚙️ Common definitions, error codes, macros, and types shared throughout the application
unsigned char uint8_t
Definition common.h:60
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
asciichat_error_t public_key_to_x25519(const public_key_t *key, uint8_t x25519_pk[32])
Convert public key to X25519 for Diffie-Hellman key exchange.
asciichat_error_t ed25519_verify_signature(const uint8_t public_key[32], const uint8_t *message, size_t message_len, const uint8_t signature[64], const char *gpg_key_id)
Verify an Ed25519 signature.
asciichat_error_t parse_keys_from_file(const char *path, public_key_t *keys, size_t *num_keys, size_t max_keys)
Parse SSH keys from file (supports authorized_keys and known_hosts formats).
Definition keys.c:611
asciichat_error_t parse_private_key(const char *path, private_key_t *key_out)
Parse SSH private key from file.
Definition keys.c:219
asciichat_error_t fetch_gitlab_gpg_keys(const char *username, char ***keys_out, size_t *num_keys)
Fetch GPG keys from GitLab using BearSSL.
Definition https_keys.c:269
asciichat_error_t private_key_to_x25519(const private_key_t *key, uint8_t x25519_sk[32])
Convert private key to X25519 for Diffie-Hellman key exchange.
asciichat_error_t fetch_github_gpg_keys(const char *username, char ***keys_out, size_t *num_keys)
Fetch GPG keys from GitHub using BearSSL.
Definition https_keys.c:237
asciichat_error_t parse_public_keys(const char *input, public_key_t *keys_out, size_t *num_keys, size_t max_keys)
Parse all SSH/GPG public keys from any format (returns all keys).
Definition keys.c:411
asciichat_error_t parse_gpg_key(const char *gpg_key_id, public_key_t *key_out)
Parse Ed25519 public key from PGP armored format.
Definition gpg_keys.c:32
asciichat_error_t parse_public_key(const char *input, public_key_t *key_out)
Parse SSH/GPG public key from any format (returns first key only).
Definition keys.c:36
asciichat_error_t ed25519_sign_message(const private_key_t *key, const uint8_t *message, size_t message_len, uint8_t signature[64])
Sign a message with Ed25519 (uses SSH agent if available, otherwise in-memory key).
asciichat_error_t hex_decode(const char *hex, uint8_t *output, size_t output_len)
Decode hex string to binary (utility function for testing).
Definition keys.c:723
asciichat_error_t fetch_gitlab_keys(const char *username, char ***keys_out, size_t *num_keys, bool use_gpg)
Fetch SSH/GPG keys from GitLab using BearSSL.
Definition keys.c:595
void format_public_key(const public_key_t *key, char *output, size_t output_size)
Convert public key to display format (ssh-ed25519 or x25519 hex).
Definition keys.c:685
asciichat_error_t fetch_github_keys(const char *username, char ***keys_out, size_t *num_keys, bool use_gpg)
Fetch SSH/GPG keys from GitHub using BearSSL.
Definition keys.c:583
asciichat_error_t validate_ssh_key_file(const char *key_path)
Validate SSH key file before parsing.
Definition ssh_keys.c:1024
#define ED25519_SIGNATURE_SIZE
Ed25519 signature size in bytes.
Definition sizes.h:37
#define ED25519_PUBLIC_KEY_SIZE
Ed25519 public key size in bytes.
Definition sizes.h:33
#define X25519_KEY_SIZE
X25519 key size in bytes.
Definition sizes.h:31
Cryptographic handshake context structure.
Private identity-key material used for server authentication and signing.
Definition key_types.h:97
The normalized public identity used by ascii-chat's crypto and key-management code.
Definition key_types.h:72