]> andersk Git - moira.git/blob - util/rsaref/rsaref.h
Set creation time and creator information for new users.
[moira.git] / util / rsaref / rsaref.h
1 /* RSAREF.H - header file for RSAREF cryptographic toolkit
2  */
3
4 /* Copyright (C) RSA Laboratories, a division of RSA Data Security,
5      Inc., created 1991. All rights reserved.
6  */
7
8 #ifndef _RSAREF_H_
9 #define _RSAREF_H_ 1
10
11 #include "md2.h"
12 #include "md5.h"
13 #include "des.h"
14
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18
19 /* Message-digest algorithms.
20  */
21 #define DA_MD2 3
22 #define DA_MD5 5
23
24 /* Encryption algorithms to be ored with digest algorithm in Seal and Open.
25  */
26 #define EA_DES_CBC 1
27 #define EA_DES_EDE2_CBC 2
28 #define EA_DES_EDE3_CBC 3
29 #define EA_DESX_CBC 4
30
31 /* RSA key lengths.
32  */
33 #define MIN_RSA_MODULUS_BITS 508
34 #define MAX_RSA_MODULUS_BITS 1024
35 #define MAX_RSA_MODULUS_LEN ((MAX_RSA_MODULUS_BITS + 7) / 8)
36 #define MAX_RSA_PRIME_BITS ((MAX_RSA_MODULUS_BITS + 1) / 2)
37 #define MAX_RSA_PRIME_LEN ((MAX_RSA_PRIME_BITS + 7) / 8)
38
39 /* Maximum lengths of encoded and encrypted content, as a function of
40    content length len. Also, inverse functions.
41  */
42 #define ENCODED_CONTENT_LEN(len) (4*(len)/3 + 3)
43 #define ENCRYPTED_CONTENT_LEN(len) ENCODED_CONTENT_LEN ((len)+8)
44 #define DECODED_CONTENT_LEN(len) (3*(len)/4 + 1)
45 #define DECRYPTED_CONTENT_LEN(len) (DECODED_CONTENT_LEN (len) - 1)
46
47 /* Maximum lengths of signatures, encrypted keys, encrypted
48    signatures, and message digests.
49  */
50 #define MAX_SIGNATURE_LEN MAX_RSA_MODULUS_LEN
51 #define MAX_PEM_SIGNATURE_LEN ENCODED_CONTENT_LEN (MAX_SIGNATURE_LEN)
52 #define MAX_ENCRYPTED_KEY_LEN MAX_RSA_MODULUS_LEN
53 #define MAX_PEM_ENCRYPTED_KEY_LEN ENCODED_CONTENT_LEN (MAX_ENCRYPTED_KEY_LEN)
54 #define MAX_PEM_ENCRYPTED_SIGNATURE_LEN \
55   ENCRYPTED_CONTENT_LEN (MAX_SIGNATURE_LEN)
56 #define MAX_DIGEST_LEN 16
57
58 /* Maximum length of Diffie-Hellman parameters.
59  */
60 #define DH_PRIME_LEN(bits) (((bits) + 7) / 8)
61
62 /* Error codes.
63  */
64 #define RE_CONTENT_ENCODING 0x0400
65 #define RE_DATA 0x0401
66 #define RE_DIGEST_ALGORITHM 0x0402
67 #define RE_ENCODING 0x0403
68 #define RE_KEY 0x0404
69 #define RE_KEY_ENCODING 0x0405
70 #define RE_LEN 0x0406
71 #define RE_MODULUS_LEN 0x0407
72 #define RE_NEED_RANDOM 0x0408
73 #define RE_PRIVATE_KEY 0x0409
74 #define RE_PUBLIC_KEY 0x040a
75 #define RE_SIGNATURE 0x040b
76 #define RE_SIGNATURE_ENCODING 0x040c
77 #define RE_ENCRYPTION_ALGORITHM 0x040d
78
79 /* Random structure.
80  */
81 typedef struct {
82   unsigned int bytesNeeded;
83   unsigned char state[16];
84   unsigned int outputAvailable;
85   unsigned char output[16];
86 } R_RANDOM_STRUCT;
87
88 /* RSA public and private key.
89  */
90 typedef struct {
91   unsigned int bits;                           /* length in bits of modulus */
92   unsigned char modulus[MAX_RSA_MODULUS_LEN];                    /* modulus */
93   unsigned char exponent[MAX_RSA_MODULUS_LEN];           /* public exponent */
94 } R_RSA_PUBLIC_KEY;
95
96 typedef struct {
97   unsigned int bits;                           /* length in bits of modulus */
98   unsigned char modulus[MAX_RSA_MODULUS_LEN];                    /* modulus */
99   unsigned char publicExponent[MAX_RSA_MODULUS_LEN];     /* public exponent */
100   unsigned char exponent[MAX_RSA_MODULUS_LEN];          /* private exponent */
101   unsigned char prime[2][MAX_RSA_PRIME_LEN];               /* prime factors */
102   unsigned char primeExponent[2][MAX_RSA_PRIME_LEN];   /* exponents for CRT */
103   unsigned char coefficient[MAX_RSA_PRIME_LEN];          /* CRT coefficient */
104 } R_RSA_PRIVATE_KEY;
105
106 /* RSA prototype key.
107  */
108 typedef struct {
109   unsigned int bits;                           /* length in bits of modulus */
110   int useFermat4;                        /* public exponent (1 = F4, 0 = 3) */
111 } R_RSA_PROTO_KEY;
112
113 /* Diffie-Hellman parameters.
114  */
115 typedef struct {
116   unsigned char *prime;                                            /* prime */
117   unsigned int primeLen;                                 /* length of prime */
118   unsigned char *generator;                                    /* generator */
119   unsigned int generatorLen;                         /* length of generator */
120 } R_DH_PARAMS;
121
122 typedef struct {
123   int digestAlgorithm;
124   union {
125     MD2_CTX md2;
126     MD5_CTX md5;
127   } context;
128 } R_DIGEST_CTX;
129
130 typedef struct {
131   R_DIGEST_CTX digestContext;
132 } R_SIGNATURE_CTX;
133
134 typedef struct {
135   int encryptionAlgorithm;
136   union {
137     DES_CBC_CTX des;
138     DES3_CBC_CTX des3;
139     DESX_CBC_CTX desx;
140   } cipherContext;
141   
142   unsigned char buffer[8];
143   unsigned int bufferLen;
144 } R_ENVELOPE_CTX;
145
146 /* Random structures.
147  */
148 int R_RandomInit PROTO_LIST ((R_RANDOM_STRUCT *));
149 int R_RandomUpdate PROTO_LIST
150   ((R_RANDOM_STRUCT *, unsigned char *, unsigned int));
151 int R_GetRandomBytesNeeded PROTO_LIST ((unsigned int *, R_RANDOM_STRUCT *));
152 void R_RandomFinal PROTO_LIST ((R_RANDOM_STRUCT *));
153
154 /* Cryptographic procedures "by parts"
155  */
156 int R_DigestInit PROTO_LIST ((R_DIGEST_CTX *, int));
157 int R_DigestUpdate PROTO_LIST
158   ((R_DIGEST_CTX *, unsigned char *, unsigned int));
159 int R_DigestFinal PROTO_LIST
160   ((R_DIGEST_CTX *, unsigned char *, unsigned int *));
161
162 int R_SignInit PROTO_LIST ((R_SIGNATURE_CTX *, int));
163 int R_SignUpdate PROTO_LIST
164   ((R_SIGNATURE_CTX *, unsigned char *, unsigned int));
165 int R_SignFinal PROTO_LIST
166   ((R_SIGNATURE_CTX *, unsigned char *, unsigned int *, R_RSA_PRIVATE_KEY *));
167
168 int R_VerifyInit PROTO_LIST ((R_SIGNATURE_CTX *, int));
169 int R_VerifyUpdate PROTO_LIST
170   ((R_SIGNATURE_CTX *, unsigned char *, unsigned int));
171 int R_VerifyFinal PROTO_LIST
172   ((R_SIGNATURE_CTX *, unsigned char *, unsigned int, R_RSA_PUBLIC_KEY *));
173
174 int R_SealInit PROTO_LIST
175   ((R_ENVELOPE_CTX *, unsigned char **, unsigned int *, unsigned char [8],
176     unsigned int, R_RSA_PUBLIC_KEY **, int, R_RANDOM_STRUCT *));
177 int R_SealUpdate PROTO_LIST
178   ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *, unsigned char *,
179     unsigned int));
180 int R_SealFinal PROTO_LIST
181   ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *));
182
183 int R_OpenInit PROTO_LIST
184   ((R_ENVELOPE_CTX *, int, unsigned char *, unsigned int, unsigned char [8],
185     R_RSA_PRIVATE_KEY *));
186 int R_OpenUpdate PROTO_LIST
187   ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *, unsigned char *,
188     unsigned int));
189 int R_OpenFinal PROTO_LIST
190   ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *));
191
192 /* Cryptographic enhancements by block.
193  */
194 int R_SignPEMBlock PROTO_LIST
195   ((unsigned char *, unsigned int *, unsigned char *, unsigned int *,
196     unsigned char *, unsigned int, int, int, R_RSA_PRIVATE_KEY *));
197 int R_SignBlock PROTO_LIST 
198   ((unsigned char *, unsigned int *, unsigned char *, unsigned int, int,
199     R_RSA_PRIVATE_KEY *));
200 int R_VerifyPEMSignature PROTO_LIST
201   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
202     unsigned char *, unsigned int, int, int, R_RSA_PUBLIC_KEY *));
203 int R_VerifyBlockSignature PROTO_LIST
204   ((unsigned char *, unsigned int, unsigned char *, unsigned int, int,
205     R_RSA_PUBLIC_KEY *));
206 int R_SealPEMBlock PROTO_LIST
207   ((unsigned char *, unsigned int *, unsigned char *, unsigned int *,
208     unsigned char *, unsigned int *, unsigned char [8], unsigned char *,
209     unsigned int, int, R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *,
210     R_RANDOM_STRUCT *));
211 int R_OpenPEMBlock PROTO_LIST 
212   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
213     unsigned char *, unsigned int, unsigned char *, unsigned int,
214     unsigned char [8], int, R_RSA_PRIVATE_KEY *, R_RSA_PUBLIC_KEY *));
215 int R_DigestBlock PROTO_LIST 
216   ((unsigned char *, unsigned int *, unsigned char *, unsigned int, int));
217
218 /* Printable ASCII encoding and decoding.
219  */
220 int R_EncodePEMBlock PROTO_LIST
221   ((unsigned char *, unsigned int *, unsigned char *, unsigned int));
222 int R_DecodePEMBlock PROTO_LIST
223   ((unsigned char *, unsigned int *, unsigned char *, unsigned int));
224   
225 /* Key-pair generation.
226  */
227 int R_GeneratePEMKeys PROTO_LIST
228   ((R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *, R_RSA_PROTO_KEY *,
229     R_RANDOM_STRUCT *));
230
231 /* Diffie-Hellman key agreement.
232  */
233 int R_GenerateDHParams PROTO_LIST
234   ((R_DH_PARAMS *, unsigned int, unsigned int, R_RANDOM_STRUCT *));
235 int R_SetupDHAgreement PROTO_LIST
236   ((unsigned char *, unsigned char *, unsigned int, R_DH_PARAMS *,
237     R_RANDOM_STRUCT *));
238 int R_ComputeDHAgreedKey PROTO_LIST
239   ((unsigned char *, unsigned char *, unsigned char *, unsigned int,
240     R_DH_PARAMS *));
241
242 /* Routines supplied by the implementor.
243  */
244 void R_memset PROTO_LIST ((POINTER, int, unsigned int));
245 void R_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
246 int R_memcmp PROTO_LIST ((POINTER, POINTER, unsigned int));
247
248 #ifdef __cplusplus
249 }
250 #endif
251
252 #endif
This page took 0.057118 seconds and 5 git commands to generate.