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
|
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
};
/* 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)(mpint*, void*);
int (*verify)(mpint*, void*, void*);
void (*skfree)(void*);
void (*pkfree)(void*);
void (*sigfree)(void*);
};
struct SigAlg
{
Keyring_SigAlg x;
SigAlgVec *vec;
};
int bigtobase64(mpint* b, char *buf, int blen);
mpint* base64tobig(char *str, char **strp);
SigAlgVec* findsigalg(char*);
//Keyring_IPint* newIPint(mpint*);
void* newIPint(mpint*);
|