/home/dko/projects/mobilec/trunk/src/security/xyssl-0.7/include/xyssl/rsa.h

Go to the documentation of this file.
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  * PKCS#1 stuff
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  * DigestInfo ::= SEQUENCE {
00037  *   digestAlgorithm DigestAlgorithmIdentifier,
00038  *   digest Digest }
00039  *
00040  * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
00041  *
00042  * Digest ::= OCTET STRING
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  * Example RSA-1024 keypair, for test purposes
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

Generated on Fri May 16 14:49:55 2008 for Mobile-C by  doxygen 1.5.4