2024-09-16 14:11:01 +02:00
|
|
|
#ifndef KEY_H_
|
|
|
|
#define KEY_H_
|
|
|
|
|
|
|
|
#include <sodium.h>
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#define TIME_SIZE sizeof(time_t)
|
|
|
|
#define SIGN_SIZE crypto_sign_BYTES
|
2024-09-25 10:55:05 +02:00
|
|
|
#define PK_ED25519_SIZE crypto_sign_PUBLICKEYBYTES /* 32, size for signature keys */
|
|
|
|
#define SK_ED25519_SIZE crypto_sign_SECRETKEYBYTES /* 64 */
|
|
|
|
#define PK_X25519_SIZE crypto_kx_PUBLICKEYBYTES /* 32, size for key exchange keys */
|
|
|
|
#define SK_X25519_SIZE crypto_kx_PUBLICKEYBYTES /* same with public key */
|
|
|
|
#define PK_DATA_SIZE PK_ED25519_SIZE + MAX_NAME + TIME_SIZE
|
2024-09-24 14:52:19 +02:00
|
|
|
#define PK_SIZE PK_DATA_SIZE + SIGN_SIZE /* Size with signature */
|
2024-09-25 10:55:05 +02:00
|
|
|
#define SK_SIZE SK_ED25519_SIZE
|
2024-09-20 18:04:16 +02:00
|
|
|
#define SHARED_KEY_SIZE crypto_kx_SESSIONKEYBYTES
|
2024-09-16 14:11:01 +02:00
|
|
|
|
|
|
|
typedef struct public_key {
|
2024-09-25 10:55:05 +02:00
|
|
|
uint8_t raw[PK_ED25519_SIZE];
|
2024-09-16 14:11:01 +02:00
|
|
|
uint8_t username[MAX_NAME];
|
|
|
|
time_t creation;
|
|
|
|
uint8_t signature[SIGN_SIZE];
|
2024-09-20 18:04:16 +02:00
|
|
|
uint8_t full[PK_SIZE];
|
2024-09-16 14:11:01 +02:00
|
|
|
} public_key;
|
|
|
|
|
2024-09-20 18:04:16 +02:00
|
|
|
typedef struct keypair_t {
|
2024-09-16 14:11:01 +02:00
|
|
|
public_key pk;
|
2024-09-24 14:52:19 +02:00
|
|
|
uint8_t sk[SK_SIZE];
|
2024-09-20 18:04:16 +02:00
|
|
|
} keypair_t;
|
2024-09-16 14:11:01 +02:00
|
|
|
|
2024-09-20 18:04:16 +02:00
|
|
|
keypair_t *create_keypair(char *username);
|
|
|
|
keypair_t *get_keypair(char *username);
|
2024-09-25 04:53:00 +02:00
|
|
|
uint8_t *get_pk_from_ks(char *username);
|
2024-09-16 14:11:01 +02:00
|
|
|
|
|
|
|
#endif
|