00001 
00002 #ifndef __CRYPTO_RSA_H__
00003 #define __CRYPTO_RSA_H__
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #include <XrdSut/XrdSutBucket.hh>
00023 #include <XrdOuc/XrdOucString.hh>
00024 #include <XrdCrypto/XrdCryptoAux.hh>
00025 
00026 typedef void * XrdCryptoRSAdata;
00027 
00028 
00029 
00030 
00031 
00032 
00033 class XrdCryptoRSA
00034 {
00035 public:
00036    XrdCryptoRSA() { status = kInvalid; }
00037    virtual ~XrdCryptoRSA() {}
00038 
00039    
00040    enum ERSAStatus { kInvalid = 0, kPublic = 1, kComplete = 2};
00041    ERSAStatus  status;
00042    const char *Status(ERSAStatus t = kInvalid) const
00043                  { return ((t == kInvalid) ? cstatus[status] : cstatus[t]); }
00044 
00045    
00046    virtual XrdCryptoRSAdata Opaque();
00047 
00048    
00049    virtual void Dump();
00050 
00051    
00052    bool IsValid() { return (status != kInvalid); }
00053 
00054    
00055    virtual int GetOutlen(int lin);   
00056    virtual int GetPublen();          
00057    virtual int GetPrilen();          
00058 
00059    
00060    virtual int ImportPublic(const char *in, int lin);
00061    virtual int ExportPublic(char *out, int lout);
00062    int ExportPublic(XrdOucString &exp);
00063    virtual int ImportPrivate(const char *in, int lin);
00064    virtual int ExportPrivate(char *out, int lout);
00065    int ExportPrivate(XrdOucString &exp);
00066 
00067    
00068    virtual int EncryptPrivate(const char *in, int lin, char *out, int lout);
00069    virtual int DecryptPublic(const char *in, int lin, char *out, int lout);
00070    virtual int EncryptPublic(const char *in, int lin, char *out, int lout);
00071    virtual int DecryptPrivate(const char *in, int lin, char *out, int lout);
00072    int EncryptPrivate(XrdSutBucket &buck);
00073    int DecryptPublic (XrdSutBucket &buck);
00074    int EncryptPublic (XrdSutBucket &buck);
00075    int DecryptPrivate(XrdSutBucket &buck);
00076 
00077 private:
00078    static const char *cstatus[3];  
00079 };
00080 
00081 #endif