00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00026 #ifndef FADE_POLICY_FOR_EPHEMERIZER_H
00027 #define FADE_POLICY_FOR_EPHEMERIZER_H
00028
00029 #include <openssl/rsa.h>
00030 #include <unistd.h>
00031 #include <string>
00032
00033 using namespace std;
00034
00038 class PolicyForEphemerizer
00039 {
00040 string policyName;
00041 RSA *rsa;
00042 BN_CTX *ctx;
00043 void generateKey();
00044 void readPEM();
00045 void writePEM() const;
00046 public:
00050 PolicyForEphemerizer(const string &policyName);
00051
00052 ~PolicyForEphemerizer()
00053 {
00054 RSA_free(rsa);
00055 BN_CTX_free(ctx);
00056 }
00057
00062 string getPolicyName() const
00063 {
00064 return policyName;
00065 }
00066
00071 int getRSASize() const
00072 {
00073 return RSA_size(rsa);
00074 }
00075
00080 BIGNUM *getN() const
00081 {
00082 return rsa->n;
00083 }
00084
00089 BIGNUM *getE() const
00090 {
00091 return rsa->e;
00092 }
00093
00101 int decrypt(int flen, const unsigned char *from, unsigned char *to) const;
00102
00108 static bool exist(const string &policyName)
00109 {
00110 return (access(("keys/" + policyName + ".pem").c_str(), F_OK) == 0);
00111 }
00112 };
00113
00114 #endif