00001
00004 #ifndef _RSA_H
00005 #define _RSA_H
00006
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010
00011 #include "bignum.h"
00012
00013 #define ERR_RSA_BAD_INPUT_DATA 0x0300
00014 #define ERR_RSA_INVALID_PADDING 0x0310
00015 #define ERR_RSA_KEY_GEN_FAILED 0x0320
00016 #define ERR_RSA_KEY_CHK_FAILED 0x0330
00017 #define ERR_RSA_KEY_RD_FAILED 0x0340
00018 #define ERR_RSA_KEY_WR_FAILED 0x0350
00019 #define ERR_RSA_PUBLIC_FAILED 0x0360
00020 #define ERR_RSA_PRIVATE_FAILED 0x0370
00021 #define ERR_RSA_VERIFY_FAILED 0x0380
00022
00023
00024
00025
00026 #define RSA_RAW 0
00027 #define RSA_MD2 2
00028 #define RSA_MD4 3
00029 #define RSA_MD5 4
00030 #define RSA_SHA1 5
00031
00032 #define RSA_SIGN 0x01
00033 #define RSA_CRYPT 0x02
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #define ASN1_HASH_MDX \
00045 "\x30\x20\x30\x0C\x06\x08\x2A\x86\x48" \
00046 "\x86\xF7\x0D\x02\x00\x05\x00\x04\x10"
00047
00048 #define ASN1_HASH_SHA1 \
00049 "\x30\x21\x30\x09\x06\x05\x2B\x0E\x03" \
00050 "\x02\x1A\x05\x00\x04\x14"
00051
00052 typedef struct
00053 {
00054 int ver;
00055 int len;
00056 mpi N;
00057 mpi E;
00058 mpi D;
00060 mpi P;
00061 mpi Q;
00062 mpi DP;
00063 mpi DQ;
00064 mpi QP;
00066 mpi RN;
00067 mpi RP;
00068 mpi RQ;
00069 }
00070 rsa_context;
00071
00083 int rsa_gen_key( rsa_context *ctx, int nbits, int exponent,
00084 int (*rng_f)(void *), void *rng_d );
00085
00094 int rsa_read_public( rsa_context *ctx, FILE *f );
00095
00104 int rsa_read_private( rsa_context *ctx, FILE *f );
00105
00114 int rsa_write_public( rsa_context *ctx, FILE *f );
00115
00124 int rsa_write_private( rsa_context *ctx, FILE *f );
00125
00136 int rsa_public( rsa_context *ctx,
00137 unsigned char *input, int ilen,
00138 unsigned char *output, int olen );
00139
00150 int rsa_private( rsa_context *ctx,
00151 unsigned char *input, int ilen,
00152 unsigned char *output, int olen );
00153
00158 int rsa_check_pubkey( rsa_context *ctx );
00159
00164 int rsa_check_privkey( rsa_context *ctx );
00165
00179 int rsa_pkcs1_encrypt( rsa_context *ctx,
00180 unsigned char *input, int ilen,
00181 unsigned char *output, int olen );
00182
00195 int rsa_pkcs1_decrypt( rsa_context *ctx,
00196 unsigned char *input, int ilen,
00197 unsigned char *output, int *olen );
00198
00213 int rsa_pkcs1_sign( rsa_context *ctx, int alg_id,
00214 unsigned char *hash, int hashlen,
00215 unsigned char *sig, int siglen );
00216
00230 int rsa_pkcs1_verify( rsa_context *ctx, int alg_id,
00231 unsigned char *hash, int hashlen,
00232 unsigned char *sig, int siglen );
00233
00237 void rsa_free( rsa_context *ctx );
00238
00244 int rsa_self_test( int verbose );
00245
00246
00247
00248
00249 #define KEY_LEN 128
00250
00251 #define RSA_N "9292758453063D803DD603D5E777D788" \
00252 "8ED1D5BF35786190FA2F23EBC0848AEA" \
00253 "DDA92CA6C3D80B32C4D109BE0F36D6AE" \
00254 "7130B9CED7ACDF54CFC7555AC14EEBAB" \
00255 "93A89813FBF3C4F8066D2D800F7C38A8" \
00256 "1AE31942917403FF4946B0A83D3D3E05" \
00257 "EE57C6F5F5606FB5D4BC6CD34EE0801A" \
00258 "5E94BB77B07507233A0BC7BAC8F90F79"
00259
00260 #define RSA_E "10001"
00261
00262 #define RSA_D "24BF6185468786FDD303083D25E64EFC" \
00263 "66CA472BC44D253102F8B4A9D3BFA750" \
00264 "91386C0077937FE33FA3252D28855837" \
00265 "AE1B484A8A9A45F7EE8C0C634F99E8CD" \
00266 "DF79C5CE07EE72C7F123142198164234" \
00267 "CABB724CF78B8173B9F880FC86322407" \
00268 "AF1FEDFDDE2BEB674CA15F3E81A1521E" \
00269 "071513A1E85B5DFA031F21ECAE91A34D"
00270
00271 #define RSA_P "C36D0EB7FCD285223CFB5AABA5BDA3D8" \
00272 "2C01CAD19EA484A87EA4377637E75500" \
00273 "FCB2005C5C7DD6EC4AC023CDA285D796" \
00274 "C3D9E75E1EFC42488BB4F1D13AC30A57"
00275
00276 #define RSA_Q "C000DF51A7C77AE8D7C7370C1FF55B69" \
00277 "E211C2B9E5DB1ED0BF61D0D9899620F4" \
00278 "910E4168387E3C30AA1E00C339A79508" \
00279 "8452DD96A9A5EA5D9DCA68DA636032AF"
00280
00281 #define RSA_DP "C1ACF567564274FB07A0BBAD5D26E298" \
00282 "3C94D22288ACD763FD8E5600ED4A702D" \
00283 "F84198A5F06C2E72236AE490C93F07F8" \
00284 "3CC559CD27BC2D1CA488811730BB5725"
00285
00286 #define RSA_DQ "4959CBF6F8FEF750AEE6977C155579C7" \
00287 "D8AAEA56749EA28623272E4F7D0592AF" \
00288 "7C1F1313CAC9471B5C523BFE592F517B" \
00289 "407A1BD76C164B93DA2D32A383E58357"
00290
00291 #define RSA_QP "9AE7FBC99546432DF71896FC239EADAE" \
00292 "F38D18D2B2F0E2DD275AA977E2BF4411" \
00293 "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \
00294 "A74206CEC169D74BF5A8C50D6F48EA08"
00295
00296 #ifdef __cplusplus
00297 }
00298 #endif
00299
00300 #endif