|
|
1.1 root 1: /* RSAREF.H - header file for RSAREF cryptographic toolkit
2: */
3:
4: /* Copyright (C) 1991-2 RSA Laboratories, a division of RSA Data
5: Security, Inc. All rights reserved.
6: */
7:
8: /* Message-digest algorithms.
9: */
10: #define DA_MD2 3
11: #define DA_MD5 5
12:
13: /* RSA key lengths.
14: */
15: #define MIN_RSA_MODULUS_BITS 508
16: #define MAX_RSA_MODULUS_BITS 1024
17: #define MAX_RSA_MODULUS_LEN ((MAX_RSA_MODULUS_BITS + 7) / 8)
18: #define MAX_RSA_PRIME_BITS ((MAX_RSA_MODULUS_BITS + 1) / 2)
19: #define MAX_RSA_PRIME_LEN ((MAX_RSA_PRIME_BITS + 7) / 8)
20:
21: /* Maximum lengths of encoded and encrypted content, as a function of
22: content length len. Also, inverse functions.
23: */
24: #define ENCODED_CONTENT_LEN(len) (4*(len)/3 + 3)
25: #define ENCRYPTED_CONTENT_LEN(len) ENCODED_CONTENT_LEN ((len)+8)
26: #define DECODED_CONTENT_LEN(len) (3*(len)/4 + 1)
27: #define DECRYPTED_CONTENT_LEN(len) DECODED_CONTENT_LEN ((len)-1)
28:
29: /* Maximum lengths of signatures, encrypted keys, encrypted
30: signatures, and message digests.
31: */
32: #define MAX_SIGNATURE_LEN MAX_RSA_MODULUS_LEN
33: #define MAX_PEM_SIGNATURE_LEN ENCODED_CONTENT_LEN (MAX_SIGNATURE_LEN)
34: #define MAX_PEM_ENCRYPTED_KEY_LEN ENCODED_CONTENT_LEN (MAX_RSA_MODULUS_LEN)
35: #define MAX_PEM_ENCRYPTED_SIGNATURE_LEN \
36: ENCRYPTED_CONTENT_LEN (MAX_SIGNATURE_LEN)
37: #define MAX_DIGEST_LEN 16
38:
39: /* Error codes.
40: */
41: #define RE_CONTENT_ENCODING 0x0400
42: #define RE_DATA 0x0401
43: #define RE_DIGEST_ALGORITHM 0x0402
44: #define RE_ENCODING 0x0403
45: #define RE_KEY 0x0404
46: #define RE_KEY_ENCODING 0x0405
47: #define RE_LEN 0x0406
48: #define RE_MODULUS_LEN 0x0407
49: #define RE_NEED_RANDOM 0x0408
50: #define RE_PRIVATE_KEY 0x0409
51: #define RE_PUBLIC_KEY 0x040a
52: #define RE_SIGNATURE 0x040b
53: #define RE_SIGNATURE_ENCODING 0x040c
54:
55: /* Random structure.
56: */
57: typedef struct {
58: unsigned int bytesNeeded;
59: unsigned char state[16];
60: unsigned int outputAvailable;
61: unsigned char output[16];
62: } R_RANDOM_STRUCT;
63:
64: /* RSA public and private key.
65: */
66: typedef struct {
67: unsigned int bits; /* length in bits of modulus */
68: unsigned char modulus[MAX_RSA_MODULUS_LEN]; /* modulus */
69: unsigned char exponent[MAX_RSA_MODULUS_LEN]; /* public exponent */
70: } R_RSA_PUBLIC_KEY;
71:
72: typedef struct {
73: unsigned int bits; /* length in bits of modulus */
74: unsigned char modulus[MAX_RSA_MODULUS_LEN]; /* modulus */
75: unsigned char publicExponent[MAX_RSA_MODULUS_LEN]; /* public exponent */
76: unsigned char exponent[MAX_RSA_MODULUS_LEN]; /* private exponent */
77: unsigned char prime[2][MAX_RSA_PRIME_LEN]; /* prime factors */
78: unsigned char primeExponent[2][MAX_RSA_PRIME_LEN]; /* exponents for CRT */
79: unsigned char coefficient[MAX_RSA_PRIME_LEN]; /* CRT coefficient */
80: } R_RSA_PRIVATE_KEY;
81:
82: /* RSA prototype key.
83: */
84: typedef struct {
85: unsigned int bits; /* length in bits of modulus */
86: int useFermat4; /* public exponent (1 = F4, 0 = 3) */
87: } R_RSA_PROTO_KEY;
88:
89: /* Random structures.
90: */
91: int R_RandomInit PROTO_LIST ((R_RANDOM_STRUCT *));
92: int R_RandomUpdate PROTO_LIST
93: ((R_RANDOM_STRUCT *, unsigned char *, unsigned int));
94: int R_GetRandomBytesNeeded PROTO_LIST ((unsigned int *, R_RANDOM_STRUCT *));
95: void R_RandomFinal PROTO_LIST ((R_RANDOM_STRUCT *));
96:
97: /* Cryptographic enhancements.
98: */
99: int R_SignPEMBlock PROTO_LIST
100: ((unsigned char *, unsigned int *, unsigned char *, unsigned int *,
101: unsigned char *, unsigned int, int, int, R_RSA_PRIVATE_KEY *));
102: int R_VerifyPEMSignature PROTO_LIST
103: ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
104: unsigned char *, unsigned int, int, int, R_RSA_PUBLIC_KEY *));
105: int R_VerifyBlockSignature PROTO_LIST
106: ((unsigned char *, unsigned int, unsigned char *, unsigned int, int,
107: R_RSA_PUBLIC_KEY *));
108: int R_SealPEMBlock PROTO_LIST
109: ((unsigned char *, unsigned int *, unsigned char *, unsigned int *,
110: unsigned char *, unsigned int *, unsigned char [8], unsigned char *,
111: unsigned int, int, R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *,
112: R_RANDOM_STRUCT *));
113: int R_OpenPEMBlock PROTO_LIST
114: ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
115: unsigned char *, unsigned int, unsigned char *, unsigned int,
116: unsigned char [8], int, R_RSA_PRIVATE_KEY *, R_RSA_PUBLIC_KEY *));
117: int R_DigestBlock PROTO_LIST
118: ((unsigned char *, unsigned int *, unsigned char *, unsigned int, int));
119:
120: /* Key-pair generation.
121: */
122: int R_GeneratePEMKeys PROTO_LIST
123: ((R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *, R_RSA_PROTO_KEY *,
124: R_RANDOM_STRUCT *));
125:
126: /* Routines supplied by the implementor.
127: */
128: void R_memset PROTO_LIST ((POINTER, int, unsigned int));
129: void R_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
130: int R_memcmp PROTO_LIST ((POINTER, POINTER, unsigned int));
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.