⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsaref.h

📁 RSA加密实现
💻 H
字号:
/* RSAREF.H - header file for RSAREF cryptographic toolkit *//* Copyright (C) RSA Laboratories, a division of RSA Data Security,     Inc., created 1991. All rights reserved. */#ifndef _RSAREF_H_#define _RSAREF_H_ 1#include "md2.h"#include "md5.h"#include "des.h"#ifdef __cplusplusextern "C" {#endif/* Message-digest algorithms. */#define DA_MD2 3#define DA_MD5 5/* Encryption algorithms to be ored with digest algorithm in Seal and Open. */#define EA_DES_CBC 1#define EA_DES_EDE2_CBC 2#define EA_DES_EDE3_CBC 3#define EA_DESX_CBC 4/* RSA key lengths. */#define MIN_RSA_MODULUS_BITS 508#define MAX_RSA_MODULUS_BITS 1024#define MAX_RSA_MODULUS_LEN ((MAX_RSA_MODULUS_BITS + 7) / 8)#define MAX_RSA_PRIME_BITS ((MAX_RSA_MODULUS_BITS + 1) / 2)#define MAX_RSA_PRIME_LEN ((MAX_RSA_PRIME_BITS + 7) / 8)/* Maximum lengths of encoded and encrypted content, as a function of   content length len. Also, inverse functions. */#define ENCODED_CONTENT_LEN(len) (4*(len)/3 + 3)#define ENCRYPTED_CONTENT_LEN(len) ENCODED_CONTENT_LEN ((len)+8)#define DECODED_CONTENT_LEN(len) (3*(len)/4 + 1)#define DECRYPTED_CONTENT_LEN(len) (DECODED_CONTENT_LEN (len) - 1)/* Maximum lengths of signatures, encrypted keys, encrypted   signatures, and message digests. */#define MAX_SIGNATURE_LEN MAX_RSA_MODULUS_LEN#define MAX_PEM_SIGNATURE_LEN ENCODED_CONTENT_LEN (MAX_SIGNATURE_LEN)#define MAX_ENCRYPTED_KEY_LEN MAX_RSA_MODULUS_LEN#define MAX_PEM_ENCRYPTED_KEY_LEN ENCODED_CONTENT_LEN (MAX_ENCRYPTED_KEY_LEN)#define MAX_PEM_ENCRYPTED_SIGNATURE_LEN \  ENCRYPTED_CONTENT_LEN (MAX_SIGNATURE_LEN)#define MAX_DIGEST_LEN 16/* Maximum length of Diffie-Hellman parameters. */#define DH_PRIME_LEN(bits) (((bits) + 7) / 8)/* Error codes. */#define RE_CONTENT_ENCODING 0x0400#define RE_DATA 0x0401#define RE_DIGEST_ALGORITHM 0x0402#define RE_ENCODING 0x0403#define RE_KEY 0x0404#define RE_KEY_ENCODING 0x0405#define RE_LEN 0x0406#define RE_MODULUS_LEN 0x0407#define RE_NEED_RANDOM 0x0408#define RE_PRIVATE_KEY 0x0409#define RE_PUBLIC_KEY 0x040a#define RE_SIGNATURE 0x040b#define RE_SIGNATURE_ENCODING 0x040c#define RE_ENCRYPTION_ALGORITHM 0x040d/* Random structure. */typedef struct {  unsigned int bytesNeeded;  unsigned char state[16];  unsigned int outputAvailable;  unsigned char output[16];} R_RANDOM_STRUCT;/* RSA public and private key. */typedef struct {  unsigned int bits;                           /* length in bits of modulus */  unsigned char modulus[MAX_RSA_MODULUS_LEN];                    /* modulus */  unsigned char exponent[MAX_RSA_MODULUS_LEN];           /* public exponent */} R_RSA_PUBLIC_KEY;typedef struct {  unsigned int bits;                           /* length in bits of modulus */  unsigned char modulus[MAX_RSA_MODULUS_LEN];                    /* modulus */  unsigned char publicExponent[MAX_RSA_MODULUS_LEN];     /* public exponent */  unsigned char exponent[MAX_RSA_MODULUS_LEN];          /* private exponent */  unsigned char prime[2][MAX_RSA_PRIME_LEN];               /* prime factors */  unsigned char primeExponent[2][MAX_RSA_PRIME_LEN];   /* exponents for CRT */  unsigned char coefficient[MAX_RSA_PRIME_LEN];          /* CRT coefficient */} R_RSA_PRIVATE_KEY;/* RSA prototype key. */typedef struct {  unsigned int bits;                           /* length in bits of modulus */  int useFermat4;                        /* public exponent (1 = F4, 0 = 3) */} R_RSA_PROTO_KEY;/* Diffie-Hellman parameters. */typedef struct {  unsigned char *prime;                                            /* prime */  unsigned int primeLen;                                 /* length of prime */  unsigned char *generator;                                    /* generator */  unsigned int generatorLen;                         /* length of generator */} R_DH_PARAMS;typedef struct {  int digestAlgorithm;  union {    MD2_CTX md2;    MD5_CTX md5;  } context;} R_DIGEST_CTX;typedef struct {  R_DIGEST_CTX digestContext;} R_SIGNATURE_CTX;typedef struct {  int encryptionAlgorithm;  union {    DES_CBC_CTX des;    DES3_CBC_CTX des3;    DESX_CBC_CTX desx;  } cipherContext;    unsigned char buffer[8];  unsigned int bufferLen;} R_ENVELOPE_CTX;/* Random structures. */int R_RandomInit PROTO_LIST ((R_RANDOM_STRUCT *));int R_RandomUpdate PROTO_LIST  ((R_RANDOM_STRUCT *, unsigned char *, unsigned int));int R_GetRandomBytesNeeded PROTO_LIST ((unsigned int *, R_RANDOM_STRUCT *));void R_RandomFinal PROTO_LIST ((R_RANDOM_STRUCT *));/* Cryptographic procedures "by parts" */int R_DigestInit PROTO_LIST ((R_DIGEST_CTX *, int));int R_DigestUpdate PROTO_LIST  ((R_DIGEST_CTX *, unsigned char *, unsigned int));int R_DigestFinal PROTO_LIST  ((R_DIGEST_CTX *, unsigned char *, unsigned int *));int R_SignInit PROTO_LIST ((R_SIGNATURE_CTX *, int));int R_SignUpdate PROTO_LIST  ((R_SIGNATURE_CTX *, unsigned char *, unsigned int));int R_SignFinal PROTO_LIST  ((R_SIGNATURE_CTX *, unsigned char *, unsigned int *, R_RSA_PRIVATE_KEY *));int R_VerifyInit PROTO_LIST ((R_SIGNATURE_CTX *, int));int R_VerifyUpdate PROTO_LIST  ((R_SIGNATURE_CTX *, unsigned char *, unsigned int));int R_VerifyFinal PROTO_LIST  ((R_SIGNATURE_CTX *, unsigned char *, unsigned int, R_RSA_PUBLIC_KEY *));int R_SealInit PROTO_LIST  ((R_ENVELOPE_CTX *, unsigned char **, unsigned int *, unsigned char [8],    unsigned int, R_RSA_PUBLIC_KEY **, int, R_RANDOM_STRUCT *));int R_SealUpdate PROTO_LIST  ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *, unsigned char *,    unsigned int));int R_SealFinal PROTO_LIST  ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *));int R_OpenInit PROTO_LIST  ((R_ENVELOPE_CTX *, int, unsigned char *, unsigned int, unsigned char [8],    R_RSA_PRIVATE_KEY *));int R_OpenUpdate PROTO_LIST  ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *, unsigned char *,    unsigned int));int R_OpenFinal PROTO_LIST  ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *));/* Cryptographic enhancements by block. */int R_SignPEMBlock PROTO_LIST  ((unsigned char *, unsigned int *, unsigned char *, unsigned int *,    unsigned char *, unsigned int, int, int, R_RSA_PRIVATE_KEY *));int R_SignBlock PROTO_LIST   ((unsigned char *, unsigned int *, unsigned char *, unsigned int, int,    R_RSA_PRIVATE_KEY *));int R_VerifyPEMSignature PROTO_LIST  ((unsigned char *, unsigned int *, unsigned char *, unsigned int,    unsigned char *, unsigned int, int, int, R_RSA_PUBLIC_KEY *));int R_VerifyBlockSignature PROTO_LIST  ((unsigned char *, unsigned int, unsigned char *, unsigned int, int,    R_RSA_PUBLIC_KEY *));int R_SealPEMBlock PROTO_LIST  ((unsigned char *, unsigned int *, unsigned char *, unsigned int *,    unsigned char *, unsigned int *, unsigned char [8], unsigned char *,    unsigned int, int, R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *,    R_RANDOM_STRUCT *));int R_OpenPEMBlock PROTO_LIST   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,    unsigned char *, unsigned int, unsigned char *, unsigned int,    unsigned char [8], int, R_RSA_PRIVATE_KEY *, R_RSA_PUBLIC_KEY *));int R_DigestBlock PROTO_LIST   ((unsigned char *, unsigned int *, unsigned char *, unsigned int, int));/* Printable ASCII encoding and decoding. */int R_EncodePEMBlock PROTO_LIST  ((unsigned char *, unsigned int *, unsigned char *, unsigned int));int R_DecodePEMBlock PROTO_LIST  ((unsigned char *, unsigned int *, unsigned char *, unsigned int));  /* Key-pair generation. */int R_GeneratePEMKeys PROTO_LIST  ((R_RSA_PUBLIC_KEY *, R_RSA_PRIVATE_KEY *, R_RSA_PROTO_KEY *,    R_RANDOM_STRUCT *));/* Diffie-Hellman key agreement. */int R_GenerateDHParams PROTO_LIST  ((R_DH_PARAMS *, unsigned int, unsigned int, R_RANDOM_STRUCT *));int R_SetupDHAgreement PROTO_LIST  ((unsigned char *, unsigned char *, unsigned int, R_DH_PARAMS *,    R_RANDOM_STRUCT *));int R_ComputeDHAgreedKey PROTO_LIST  ((unsigned char *, unsigned char *, unsigned char *, unsigned int,    R_DH_PARAMS *));/* Routines supplied by the implementor. */void R_memset PROTO_LIST ((POINTER, int, unsigned int));void R_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));int R_memcmp PROTO_LIST ((POINTER, POINTER, unsigned int));#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -