c: Implement the passgeny module.
This is the C implementation of the passgeny library.
This commit is contained in:
56
c/passgeny/inc/passgeny.h
Normal file
56
c/passgeny/inc/passgeny.h
Normal 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 */
|
||||
Reference in New Issue
Block a user