summaryrefslogtreecommitdiff
path: root/libkeyring/keys.h
blob: fc57fd5c23a8659d8859ad0ad636f476e61ef195 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
typedef struct IPint IPint;
typedef struct SigAlg SigAlg;
typedef struct SigAlgVec SigAlgVec;
typedef struct SK SK;
typedef struct PK PK;
typedef struct Certificate Certificate;
typedef struct XDigestState XDigestState;
typedef struct XAESstate XAESstate;
typedef struct XDESstate XDESstate;
typedef struct XIDEAstate XIDEAstate;
typedef struct XRC4state XRC4state;

enum
{
	Maxbuf=	4096,
	MaxBigBytes = 1024
};

/* infininite precision integer */
struct IPint
{
	Keyring_IPint x;
	BigInt	b;
};

/* generic certificate */
struct Certificate
{
	Keyring_Certificate x;
	void		*signa;	/* actual signature */
};

/* generic public key */
struct PK
{
	Keyring_PK	x;
	void		*key;	/* key and system parameters */
};

/* digest state */
struct XDigestState
{
	Keyring_DigestState	x;
	DigestState	state;
};

/* AES state */
struct XAESstate
{
	Keyring_AESstate	x;
	AESstate	state;
};

/* DES state */
struct XDESstate
{
	Keyring_DESstate	x;
	DESstate	state;
};

/* IDEA state */
struct XIDEAstate
{
	Keyring_IDEAstate	x;
	IDEAstate	state;
};

/* RC4 state */
struct XRC4state
{
	Keyring_RC4state	x;
	RC4state	state;
};

/* generic secret key */
struct SK
{
	Keyring_SK	x;
	void		*key;	/* key and system parameters */
};

struct SigAlgVec {
	char	*name;

	char**	skattr;
	char**	pkattr;
	char**	sigattr;

	void*	(*str2sk)(char*, char**);
	void*	(*str2pk)(char*, char**);
	void*	(*str2sig)(char*, char**);

	int	(*sk2str)(void*, char*, int);
	int	(*pk2str)(void*, char*, int);
	int	(*sig2str)(void*, char*, int);

	void*	(*sk2pk)(void*);

	void*	(*gensk)(int);
	void*	(*genskfrompk)(void*);
	void*	(*sign)(BigInt, void*);
	int	(*verify)(BigInt, void*, void*);

	void	(*skfree)(void*);
	void	(*pkfree)(void*);
	void	(*sigfree)(void*);
};

struct SigAlg
{
	Keyring_SigAlg	x;
	SigAlgVec	*vec;
};

int	bigtobase64(BigInt b, char *buf, int blen);
BigInt	base64tobig(char *str, char **strp);
SigAlgVec*	findsigalg(char*);
Keyring_IPint*	newIPint(BigInt);