rsaref.h
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:6k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. /* RSAREF.H - header file for RSAREF cryptographic toolkit
  2.  */
  3. #ifndef _RSAREF_H_
  4. #define _RSAREF_H_ 1
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #ifndef PROTOTYPES
  9. #define PROTOTYPES 1
  10. #endif
  11. typedef unsigned char *POINTER;/* POINTER defines a generic pointer type */
  12. typedef unsigned short int UINT2;/* UINT2 defines a two byte word */
  13. typedef unsigned long int UINT4;/* UINT4 defines a four byte word */
  14. #ifndef NULL_PTR
  15. #define NULL_PTR ((POINTER)0)
  16. #endif
  17. #ifndef UNUSED_ARG
  18. #define UNUSED_ARG(x) x = *(&x);
  19. #endif
  20. #if PROTOTYPES
  21. #define PROTO_LIST(list) list
  22. #else
  23. #define PROTO_LIST(list) ()
  24. #endif
  25. #define NN_DIGIT UINT4
  26. #define NN_HALF_DIGIT UINT2
  27. /* RSA key lengths.
  28.  */
  29. #define MIN_RSA_MODULUS_BITS 508
  30. #define MAX_RSA_MODULUS_BITS 2048
  31. #define MAX_RSA_MODULUS_LEN ((MAX_RSA_MODULUS_BITS + 7) / 8)
  32. #define MAX_RSA_PRIME_BITS ((MAX_RSA_MODULUS_BITS + 1) / 2)
  33. #define MAX_RSA_PRIME_LEN ((MAX_RSA_PRIME_BITS + 7) / 8)
  34. /* Maximum length of Diffie-Hellman parameters.
  35.  */
  36. #define DH_PRIME_LEN(bits) (((bits) + 7) / 8)
  37. /* Random structure.
  38.  */
  39. typedef struct {
  40.   unsigned int bytesNeeded;
  41.   unsigned char state[16];
  42.   unsigned int outputAvailable;
  43.   unsigned char output[16];
  44. } R_RANDOM_STRUCT;
  45. /* RSA public and private key.
  46.  */
  47. typedef struct {
  48.   unsigned int  bits;                          /* length in bits of modulus */
  49.   unsigned char modulus[MAX_RSA_MODULUS_LEN];  /* modulus */
  50.   unsigned char exponent[MAX_RSA_MODULUS_LEN]; /* public exponent */
  51. } R_RSA_PUBLIC_KEY;
  52. typedef struct {
  53.   unsigned int  bits;                           /* length in bits of modulus */
  54.   unsigned char modulus[MAX_RSA_MODULUS_LEN];       /* modulus */
  55.   unsigned char publicExponent[MAX_RSA_MODULUS_LEN];/* public exponent */
  56.   unsigned char exponent[MAX_RSA_MODULUS_LEN];      /* private exponent */
  57.   unsigned char prime[2][MAX_RSA_PRIME_LEN];        /* prime factors */
  58.   unsigned char primeExponent[2][MAX_RSA_PRIME_LEN];/* exponents for CRT */
  59.   unsigned char coefficient[MAX_RSA_PRIME_LEN];      /* CRT coefficient */
  60. } R_RSA_PRIVATE_KEY;
  61. /* RSA prototype key.
  62.  */
  63. typedef struct {
  64.   unsigned int bits;     /* length in bits of modulus */
  65.   int useFermat4;        /* public exponent (1 = F4, 0 = 3) */
  66. } R_RSA_PROTO_KEY;
  67. /* Diffie-Hellman parameters.
  68.  */
  69. typedef struct {
  70.   unsigned char *prime;          /* prime */
  71.   unsigned int primeLen;         /* length of prime */
  72.   unsigned char *generator;      /* generator */
  73.   unsigned int generatorLen;     /* length of generator */
  74. } R_DH_PARAMS;
  75. /* LOCAL_MD5 context. */
  76. typedef struct {
  77.   UINT4 state[4];                                   /* state (ABCD) */
  78.   UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
  79.   unsigned char buffer[64];                         /* input buffer */
  80. } LOCAL_MD5_CTX;
  81. void LOCAL_MD5Init PROTO_LIST ((LOCAL_MD5_CTX *));
  82. void LOCAL_MD5Update PROTO_LIST ((LOCAL_MD5_CTX *, unsigned char *, unsigned int));
  83. void LOCAL_MD5Final PROTO_LIST ((unsigned char [16], LOCAL_MD5_CTX *));
  84. /* Random structures.
  85.  */
  86. int R_RandomInit PROTO_LIST ((R_RANDOM_STRUCT *));
  87. int R_RandomUpdate PROTO_LIST ((R_RANDOM_STRUCT *, unsigned char *, unsigned int));
  88. int R_GetRandomBytesNeeded PROTO_LIST ((unsigned int *, R_RANDOM_STRUCT *));
  89. void R_RandomFinal PROTO_LIST ((R_RANDOM_STRUCT *));
  90. /* Printable ASCII encoding and decoding.
  91.  */
  92. int R_EncodePEMBlock PROTO_LIST ((unsigned char *, unsigned int *, unsigned char *, unsigned int));
  93. int R_DecodePEMBlock PROTO_LIST ((unsigned char *, unsigned int *, unsigned char *, unsigned int));
  94.   
  95. /* Key-pair generation.
  96.  */
  97. int R_GeneratePEMKeys PROTO_LIST
  98.   ((R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *, R_RSA_PROTO_KEY *, R_RANDOM_STRUCT *));
  99. /*
  100.  *RSA function
  101.  */
  102. int RSAPublicEncrypt PROTO_LIST 
  103.   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,R_RSA_PUBLIC_KEY *, R_RANDOM_STRUCT *));
  104. int RSAPrivateEncrypt PROTO_LIST
  105.   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,R_RSA_PRIVATE_KEY *));
  106. int RSAPublicDecrypt PROTO_LIST 
  107.   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,R_RSA_PUBLIC_KEY *));
  108. int RSAPrivateDecrypt PROTO_LIST
  109.   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,R_RSA_PRIVATE_KEY *));
  110. /* Diffie-Hellman key agreement.
  111.  */
  112. int R_GenerateDHParams PROTO_LIST ((R_DH_PARAMS *, unsigned int, unsigned int, R_RANDOM_STRUCT *));
  113. int R_SetupDHAgreement PROTO_LIST
  114.   ((unsigned char *, unsigned char *, unsigned int, R_DH_PARAMS *, R_RANDOM_STRUCT *));
  115. int R_ComputeDHAgreedKey PROTO_LIST
  116.   ((unsigned char *, unsigned char *, unsigned char *, unsigned int, R_DH_PARAMS *));
  117. /*
  118.  *Random function
  119.  */
  120. int R_GenerateBytes PROTO_LIST ((unsigned char *, unsigned int, R_RANDOM_STRUCT *));
  121. /*
  122.  * Prime function
  123.  */
  124. int GeneratePrime PROTO_LIST
  125.   ((NN_DIGIT *, NN_DIGIT *, NN_DIGIT *, NN_DIGIT *, unsigned int, R_RANDOM_STRUCT *));
  126. /*
  127.  * Digit function
  128.  */
  129. void NN_DigitMult PROTO_LIST ((NN_DIGIT[2], NN_DIGIT, NN_DIGIT));
  130. void NN_DigitDiv PROTO_LIST ((NN_DIGIT *, NN_DIGIT[2], NN_DIGIT));
  131. /* Routines supplied by the implementor.
  132.  */
  133. void R_memset PROTO_LIST ((POINTER, int, unsigned int));
  134. void R_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
  135. int R_memcmp PROTO_LIST ((POINTER, POINTER, unsigned int));
  136. /* Error codes.
  137.  */
  138. #define RE_CONTENT_ENCODING 0x0400
  139. #define RE_DATA 0x0401
  140. #define RE_DIGEST_ALGORITHM 0x0402
  141. #define RE_ENCODING 0x0403
  142. #define RE_KEY 0x0404
  143. #define RE_KEY_ENCODING 0x0405
  144. #define RE_LEN 0x0406
  145. #define RE_MODULUS_LEN 0x0407
  146. #define RE_NEED_RANDOM 0x0408
  147. #define RE_PRIVATE_KEY 0x0409
  148. #define RE_PUBLIC_KEY 0x040a
  149. #define RE_SIGNATURE 0x040b
  150. #define RE_SIGNATURE_ENCODING 0x040c
  151. #define RE_ENCRYPTION_ALGORITHM 0x040d
  152. #ifdef __cplusplus
  153. }
  154. #endif
  155. #endif