c: Implement the passgeny module.

This is the C implementation of the passgeny library.
This commit is contained in:
2021-11-14 09:16:34 +01:00
parent 67ec1180dd
commit f927eea9aa
5 changed files with 408 additions and 8 deletions

56
c/passgeny/inc/passgeny.h Normal file
View File

@ -0,0 +1,56 @@
#ifndef PASSGENY_H_INCLUDED
#define PASSGENY_H_INCLUDED
#include <stdint.h>
#include <stdbool.h>
typedef struct passgeny passgeny_t;
struct passgeny
{
uint8_t pg_master_hash[32]; /* SHA256 of the master password */
char *pg_pattern; /* Password pattern */
double pg_last_bits_total; /* Total bits that were available for generating the last password */
double pg_last_bits_used; /* Bits consumed when calculating the last password */
};
/*
* Initialize a new passgeny instance
*
* Note: The master password is hashed and remembered. The raw password is never
* stored in memory.
*/
bool passgeny_init(passgeny_t *passgeny, const char *master_password);
/*
* Destroy a passgeny instance
*/
void passgeny_fini(passgeny_t *passgeny);
/*
* Set the current pattern
*/
void passgeny_set_pattern(passgeny_t *passgeny, const char *pattern);
/*
* Generate a new passgeny password using `domain`, `username` and optional
* tokens.
*
* The password is stored in the `out` string, where `out_sz` represents the
* maximum size of the string including '\0'
*/
bool passgeny_generate(
passgeny_t *passgeny,
char *out,
size_t out_sz,
const char *domain,
const char *username,
const char * const toknes[],
int ntokens);
/*
* Dump some statistics
*/
void passgeny_dump_verbose(const passgeny_t *passgeny);
#endif /* PASSGENY_H_INCLUDED */