summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--configure.ac11
-rw-r--r--include/opkele/util.h5
-rw-r--r--lib/Makefile.am2
-rw-r--r--lib/consumer.cc16
-rw-r--r--lib/params.cc7
-rw-r--r--lib/secret.cc22
-rw-r--r--lib/server.cc6
-rw-r--r--lib/util.cc67
-rw-r--r--libopkele.pc.in2
9 files changed, 71 insertions, 67 deletions
diff --git a/configure.ac b/configure.ac
index af7a301..2ce5f71 100644
--- a/configure.ac
+++ b/configure.ac
@@ -42,15 +42,4 @@ if test "${WANT_KONFORKA}" = "yes" ; then
fi
-AC_LANG_PUSH([C++])
- AC_CHECK_LIB([mimetic],[main],[
- MIMETIC_LIBS=-lmimetic
- AC_SUBST([MIMETIC_CFLAGS])
- AC_SUBST([MIMETIC_LIBS])
- ],[
- AC_MSG_ERROR([no mimetic library found. get one from http://codesink.org/mimetic_mime_library.html])
- ]
- )
-AC_LANG_POP([C++])
-
WANT_DOXYGEN="yes"
AC_ARG_ENABLE([doxygen],
diff --git a/include/opkele/util.h b/include/opkele/util.h
index 5372498..80d8b03 100644
--- a/include/opkele/util.h
+++ b/include/opkele/util.h
@@ -4,4 +4,5 @@
#include <time.h>
#include <string>
+#include <vector>
#include <openssl/bn.h>
#include <openssl/dh.h>
@@ -9,4 +10,5 @@
namespace opkele {
using std::string;
+ using std::vector;
namespace util {
@@ -53,4 +55,7 @@ namespace opkele {
string long_to_string(long l);
long string_to_long(const string& s);
+
+ string encode_base64(const void *data,size_t length);
+ void decode_base64(const string& data,vector<unsigned char>& rv);
}
diff --git a/lib/Makefile.am b/lib/Makefile.am
index bdadd44..ec63c25 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -5,5 +5,4 @@ INCLUDES = \
${KONFORKA_CFLAGS} \
${OPENSSL_CFLAGS} \
- ${MIMETIC_CFLAGS} \
${LIBCURL_CPPFLAGS} \
${PCREPP_CFLAGS}
@@ -11,5 +10,4 @@ LDADD = \
${LIBCURL} \
${PCREPP_LIBS} \
- ${MIMETIC_LIBS} \
${OPENSSL_LIBS} \
${KONFORKA_LIBS}
diff --git a/lib/consumer.cc b/lib/consumer.cc
index b215aa8..331b1e9 100644
--- a/lib/consumer.cc
+++ b/lib/consumer.cc
@@ -1,3 +1,4 @@
#include <algorithm>
+#include <cassert>
#include <opkele/util.h>
#include <opkele/exception.h>
@@ -6,5 +7,4 @@
#include <openssl/sha.h>
#include <openssl/hmac.h>
-#include <mimetic/mimetic.h>
#include <curl/curl.h>
#include <pcre++.h>
@@ -12,13 +12,4 @@
#include <iostream>
-/* silly mimetic */
-#undef PACKAGE
-#undef PACKAGE_BUGREPORT
-#undef PACKAGE_NAME
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-#undef PACKAGE_VERSION
-#undef VERSION
-
#include "config.h"
@@ -167,9 +158,6 @@ namespace opkele {
assoc_t assoc = retrieve_assoc(server,pin.get_param("openid.assoc_handle"));
const string& sigenc = pin.get_param("openid.sig");
- mimetic::Base64::Decoder b;
vector<unsigned char> sig;
- mimetic::decode(
- sigenc.begin(),sigenc.end(), b,
- back_insert_iterator<vector<unsigned char> >(sig) );
+ util::decode_base64(sigenc,sig);
const string& slist = pin.get_param("openid.signed");
string kv;
diff --git a/lib/params.cc b/lib/params.cc
index 14f1a53..03867d5 100644
--- a/lib/params.cc
+++ b/lib/params.cc
@@ -4,5 +4,4 @@
#include <openssl/sha.h>
#include <openssl/hmac.h>
-#include <mimetic/mimetic.h>
namespace opkele {
@@ -61,9 +60,5 @@ namespace opkele {
(const unsigned char *)kv.data(),kv.length(),
0,&md_len);
- mimetic::Base64::Encoder b(0);
- sig.erase();
- mimetic::encode(
- md,md+md_len, b,
- back_insert_iterator<string>(sig) );
+ sig = util::encode_base64(md,md_len);
}
diff --git a/lib/secret.cc b/lib/secret.cc
index ae8a3c5..632a2ca 100644
--- a/lib/secret.cc
+++ b/lib/secret.cc
@@ -3,5 +3,5 @@
#include <opkele/types.h>
#include <opkele/exception.h>
-#include <mimetic/mimetic.h>
+#include <opkele/util.h>
namespace opkele {
@@ -24,16 +24,10 @@ namespace opkele {
back_insert_iterator<vector<unsigned char> >(tmp),
bitwise_xor<unsigned char,unsigned char,unsigned char>() );
- mimetic::Base64::Encoder b(0);
- mimetic::encode(
- tmp.begin(),tmp.end(), b,
- back_insert_iterator<string>(rv) );
+ rv = util::encode_base64(&(tmp.front()),tmp.size());
}
void secret_t::enxor_from_base64(const unsigned char *key_sha1,const string& b64) {
- mimetic::Base64::Decoder b;
clear();
- mimetic::decode(
- b64.begin(),b64.end(), b,
- back_insert_iterator<secret_t>(*this) );
+ util::decode_base64(b64,*this);
transform(
begin(), end(),
@@ -46,15 +40,9 @@ namespace opkele {
if(size()!=20)
throw bad_input(OPKELE_CP_ "wrong secret size");
- mimetic::Base64::Encoder b(0);
- mimetic::encode(
- begin(),end(), b,
- back_insert_iterator<string>(rv) );
+ rv = util::encode_base64(&(front()),size());
}
void secret_t::from_base64(const string& b64) {
- mimetic::Base64::Decoder b;
- mimetic::decode(
- b64.begin(),b64.end(), b,
- back_insert_iterator<secret_t>(*this) );
+ util::decode_base64(b64,*this);
}
diff --git a/lib/server.cc b/lib/server.cc
index 8c29abb..e81d4b6 100644
--- a/lib/server.cc
+++ b/lib/server.cc
@@ -2,5 +2,4 @@
#include <openssl/sha.h>
#include <openssl/hmac.h>
-#include <mimetic/mimetic.h>
#include <opkele/util.h>
#include <opkele/exception.h>
@@ -114,9 +113,6 @@ namespace opkele {
void server_t::check_authentication(const params_t& pin,params_t& pout) {
vector<unsigned char> sig;
- mimetic::Base64::Decoder b;
const string& sigenc = pin.get_param("openid.sig");
- mimetic::decode(
- sigenc.begin(),sigenc.end(), b,
- back_insert_iterator<vector<unsigned char> >(sig));
+ util::decode_base64(sigenc,sig);
assoc_t assoc;
try {
diff --git a/lib/util.cc b/lib/util.cc
index d78b5e0..d9abca7 100644
--- a/lib/util.cc
+++ b/lib/util.cc
@@ -3,5 +3,6 @@
#include <vector>
#include <string>
-#include <mimetic/mimetic.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
#include <curl/curl.h>
#include "opkele/util.h"
@@ -14,4 +15,56 @@ namespace opkele {
/*
+ * base64
+ */
+ string encode_base64(const void *data,size_t length) {
+ BIO *b64 = 0, *bmem = 0;
+ try {
+ b64 = BIO_new(BIO_f_base64());
+ if(!b64)
+ throw exception_openssl(OPKELE_CP_ "failed to BIO_new() base64 encoder");
+ BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
+ bmem = BIO_new(BIO_s_mem());
+ BIO_set_flags(b64,BIO_CLOSE);
+ if(!bmem)
+ throw exception_openssl(OPKELE_CP_ "failed to BIO_new() memory buffer");
+ BIO_push(b64,bmem);
+ if(BIO_write(b64,data,length)!=length)
+ throw exception_openssl(OPKELE_CP_ "failed to BIO_write()");
+ BIO_flush(b64);
+ char *rvd;
+ long rvl = BIO_get_mem_data(bmem,&rvd);
+ string rv(rvd,rvl);
+ BIO_free_all(b64);
+ return rv;
+ }catch(...) {
+ if(b64) BIO_free_all(b64);
+ throw;
+ }
+ }
+
+ void decode_base64(const string& data,vector<unsigned char>& rv) {
+ BIO *b64 = 0, *bmem = 0;
+ rv.clear();
+ try {
+ bmem = BIO_new_mem_buf((void*)data.data(),data.size());
+ if(!bmem)
+ throw exception_openssl(OPKELE_CP_ "failed to BIO_new_mem_buf()");
+ b64 = BIO_new(BIO_f_base64());
+ if(!b64)
+ throw exception_openssl(OPKELE_CP_ "failed to BIO_new() base64 decoder");
+ BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
+ BIO_push(b64,bmem);
+ unsigned char tmp[512];
+ size_t rb = 0;
+ while((rb=BIO_read(b64,tmp,sizeof(tmp)))>0)
+ rv.insert(rv.end(),tmp,&tmp[rb]);
+ BIO_free_all(b64);
+ }catch(...) {
+ if(b64) BIO_free_all(b64);
+ throw;
+ }
+ }
+
+ /*
* big numerics
*/
@@ -19,8 +72,5 @@ namespace opkele {
BIGNUM *base64_to_bignum(const string& b64) {
vector<unsigned char> bin;
- mimetic::Base64::Decoder b;
- mimetic::decode(
- b64.begin(),b64.end(), b,
- back_insert_iterator<vector<unsigned char> >(bin) );
+ decode_base64(b64,bin);
BIGNUM *rv = BN_bin2bn(&(bin.front()),bin.size(),0);
if(!rv)
@@ -39,10 +89,5 @@ namespace opkele {
vector<unsigned char> bin(BN_num_bytes(bn));
int l = BN_bn2bin(bn,&(bin.front()));
- string rv;
- mimetic::Base64::Encoder b(0);
- mimetic::encode(
- bin.begin(),bin.begin()+l, b,
- back_insert_iterator<string>(rv) );
- return rv;
+ return encode_base64(&(bin.front()),l);
}
diff --git a/libopkele.pc.in b/libopkele.pc.in
index 60bca34..286720e 100644
--- a/libopkele.pc.in
+++ b/libopkele.pc.in
@@ -9,3 +9,3 @@ Version: @VERSION@
Requires: openssl @KONFORKA_KONFORKA@
Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCREPP_CFLAGS@
-Libs: -L${libdir} -lopkele @LIBCURL@ @PCREPP_LIBS@ @MIMETIC_LIBS@
+Libs: -L${libdir} -lopkele @LIBCURL@ @PCREPP_LIBS@