00001
00002
00003
00007 #ifndef _RSA_H
00008 #define _RSA_H
00009
00010 #ifdef __cplusplus
00011 extern "C" {
00012 #endif
00013
00014 #include "bignum.h"
00015
00016 #define ERR_RSA_BAD_INPUT_DATA 0x0300
00017 #define ERR_RSA_INVALID_PADDING 0x0310
00018 #define ERR_RSA_KEY_GEN_FAILED 0x0320
00019 #define ERR_RSA_KEY_CHK_FAILED 0x0330
00020 #define ERR_RSA_KEY_RD_FAILED 0x0340
00021 #define ERR_RSA_KEY_WR_FAILED 0x0350
00022 #define ERR_RSA_PUBLIC_FAILED 0x0360
00023 #define ERR_RSA_PRIVATE_FAILED 0x0370
00024 #define ERR_RSA_VERIFY_FAILED 0x0380
00025
00026
00027
00028
00029 #define RSA_RAW 0
00030 #define RSA_MD2 2
00031 #define RSA_MD4 3
00032 #define RSA_MD5 4
00033 #define RSA_SHA1 5
00034
00035 #define RSA_SIGN 0x01
00036 #define RSA_CRYPT 0x02
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #define ASN1_HASH_MDX \
00048 "\x30\x20\x30\x0C\x06\x08\x2A\x86\x48" \
00049 "\x86\xF7\x0D\x02\x00\x05\x00\x04\x10"
00050
00051 #define ASN1_HASH_SHA1 \
00052 "\x30\x21\x30\x09\x06\x05\x2B\x0E\x03" \
00053 "\x02\x1A\x05\x00\x04\x14"
00054
00055 typedef struct
00056 {
00057 int ver;
00058 int len;
00059 mpi N;
00060 mpi E;
00061 mpi D;
00063 mpi P;
00064 mpi Q;
00065 mpi DP;
00066 mpi DQ;
00067 mpi QP;
00069 mpi RN;
00070 mpi RP;
00071 mpi RQ;
00072 }
00073 rsa_context;
00074
00086 int rsa_gen_key( rsa_context *ctx, int nbits, int exponent,
00087 int (*rng_f)(void *), void *rng_d );
00088
00097 int rsa_read_public( rsa_context *ctx, FILE *f );
00098
00107 int rsa_read_private( rsa_context *ctx, FILE *f );
00108
00117 int rsa_write_public( rsa_context *ctx, FILE *f );
00118
00127 int rsa_write_private( rsa_context *ctx, FILE *f );
00128
00139 int rsa_public( rsa_context *ctx,
00140 unsigned char *input, int ilen,
00141 unsigned char *output, int olen );
00142
00153 int rsa_private( rsa_context *ctx,
00154 unsigned char *input, int ilen,
00155 unsigned char *output, int olen );
00156
00161 int rsa_check_pubkey( rsa_context *ctx );
00162
00167 int rsa_check_privkey( rsa_context *ctx );
00168
00182 int rsa_pkcs1_encrypt( rsa_context *ctx,
00183 unsigned char *input, int ilen,
00184 unsigned char *output, int olen );
00185
00198 int rsa_pkcs1_decrypt( rsa_context *ctx,
00199 unsigned char *input, int ilen,
00200 unsigned char *output, int *olen );
00201
00216 int rsa_pkcs1_sign( rsa_context *ctx, int alg_id,
00217 unsigned char *hash, int hashlen,
00218 unsigned char *sig, int siglen );
00219
00233 int rsa_pkcs1_verify( rsa_context *ctx, int alg_id,
00234 unsigned char *hash, int hashlen,
00235 unsigned char *sig, int siglen );
00236
00240 void rsa_free( rsa_context *ctx );
00241
00247 int rsa_self_test( int verbose );
00248
00249
00250
00251
00252 #define KEY_LEN 128
00253
00254 #define RSA_N "9292758453063D803DD603D5E777D788" \
00255 "8ED1D5BF35786190FA2F23EBC0848AEA" \
00256 "DDA92CA6C3D80B32C4D109BE0F36D6AE" \
00257 "7130B9CED7ACDF54CFC7555AC14EEBAB" \
00258 "93A89813FBF3C4F8066D2D800F7C38A8" \
00259 "1AE31942917403FF4946B0A83D3D3E05" \
00260 "EE57C6F5F5606FB5D4BC6CD34EE0801A" \
00261 "5E94BB77B07507233A0BC7BAC8F90F79"
00262
00263 #define RSA_E "10001"
00264
00265 #define RSA_D "24BF6185468786FDD303083D25E64EFC" \
00266 "66CA472BC44D253102F8B4A9D3BFA750" \
00267 "91386C0077937FE33FA3252D28855837" \
00268 "AE1B484A8A9A45F7EE8C0C634F99E8CD" \
00269 "DF79C5CE07EE72C7F123142198164234" \
00270 "CABB724CF78B8173B9F880FC86322407" \
00271 "AF1FEDFDDE2BEB674CA15F3E81A1521E" \
00272 "071513A1E85B5DFA031F21ECAE91A34D"
00273
00274 #define RSA_P "C36D0EB7FCD285223CFB5AABA5BDA3D8" \
00275 "2C01CAD19EA484A87EA4377637E75500" \
00276 "FCB2005C5C7DD6EC4AC023CDA285D796" \
00277 "C3D9E75E1EFC42488BB4F1D13AC30A57"
00278
00279 #define RSA_Q "C000DF51A7C77AE8D7C7370C1FF55B69" \
00280 "E211C2B9E5DB1ED0BF61D0D9899620F4" \
00281 "910E4168387E3C30AA1E00C339A79508" \
00282 "8452DD96A9A5EA5D9DCA68DA636032AF"
00283
00284 #define RSA_DP "C1ACF567564274FB07A0BBAD5D26E298" \
00285 "3C94D22288ACD763FD8E5600ED4A702D" \
00286 "F84198A5F06C2E72236AE490C93F07F8" \
00287 "3CC559CD27BC2D1CA488811730BB5725"
00288
00289 #define RSA_DQ "4959CBF6F8FEF750AEE6977C155579C7" \
00290 "D8AAEA56749EA28623272E4F7D0592AF" \
00291 "7C1F1313CAC9471B5C523BFE592F517B" \
00292 "407A1BD76C164B93DA2D32A383E58357"
00293
00294 #define RSA_QP "9AE7FBC99546432DF71896FC239EADAE" \
00295 "F38D18D2B2F0E2DD275AA977E2BF4411" \
00296 "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \
00297 "A74206CEC169D74BF5A8C50D6F48EA08"
00298
00299 #ifdef __cplusplus
00300 }
00301 #endif
00302
00303 #endif