improved build scripts

master
Marc Wäckerlin 7 years ago
parent b0df158333
commit 070ce378ff
  1. 10
      configure.ac
  2. 32
      src/suisseid.hxx

@ -23,11 +23,17 @@ AC_ARG_ENABLE(pkcs11-download,
[download pkcs11 header])],
[have_pedantic="$enableval"
if test "$enableval" = "yes"; then
mkdir -p usr/include
test -d usr/include || mkdir -p usr/include
cd usr/include
for f in $(wget -q -O- ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/ 2>&1 | html2 | sed -n 's,.*/a/@href=\(.*\.h\)$,\1,gp'); do
for f in $(wget -qO- ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/ 2>&1 | html2 | sed -n 's,.*/a/@href=\(.*\.h\)$,\1,gp'); do
wget --unlink $f
if ! test -f "${f##*/}"; then
AC_MSG_ERROR([download failed of PKCS#11 header file: ${f##*/}])
fi
done
if ! test -f cryptoki.h; then
AC_MSG_ERROR([download failed of PKCS#11 - have you installed xml2?])
fi
AM_CPPFLAGS+=" -I$(pwd)"
cd -
fi

@ -13,6 +13,7 @@
#include <pcsc.hxx>
#include <mrw/vector.hxx>
#include <mrw/checkcxx11.hxx>
#include <mrw/regexp.hxx>
#include <memory>
/*! @defgroup gsuisseid C++ library to access SuisseID smart cards
@ -149,19 +150,31 @@ namespace suisseid {
public:
Certificate(const std::string& v,
const std::string& l,
const std::string& s,
const std::string& si,
const cryptoki::Attribute& i):
std::string(v),
_label(l),
_subject(s),
_si(si),
_id(i) {
}
const std::string& label() {
return _label;
}
const std::string& subject() {
return _label;
}
const cryptoki::Attribute& id() {
return _id;
}
const std::string& subjectInfo() {
return _si;
}
private:
std::string _label;
std::string _subject;
std::string _si;
cryptoki::Attribute _id;
};
@ -269,6 +282,8 @@ namespace suisseid {
cert!=certs.end(); ++cert)
res.push_back(Certificate(cert->attribute(CKA_VALUE).value,
cert->attribute(CKA_LABEL).value,
cert->attribute(CKA_SUBJECT).value,
cert->attribute(CKA_SUBJECT_INFO).value,
cert->attribute(CKA_ID)));
return res;
}
@ -308,6 +323,7 @@ namespace suisseid {
for (cryptoki::ObjectList::iterator cert(certs.begin());
cert!=certs.end(); ++cert) // return first matching cert
return Certificate(cert->attribute(CKA_VALUE).value,
cert->attribute(CKA_SUBJECT).value,
cert->attribute(CKA_LABEL).value,
id);
# ifdef __APPLE__
@ -355,10 +371,16 @@ namespace suisseid {
public:
enum CardType {
SUISSE_ID,
UNKNOWN
};
/// @copydoc Card::Card
Post(std::shared_ptr<pcsc::Connection::Reader> reader,
const cryptoki::Library& cryptoki):
Card(reader, cryptoki), _minPinLen(0), _maxPinLen((unsigned int)-1) {
Card(reader, cryptoki),
_type(UNKNOWN), _minPinLen(0), _maxPinLen((unsigned int)-1) {
}
virtual unsigned int minimalPinLength() {
@ -379,7 +401,12 @@ namespace suisseid {
virtual CertStatus certStatus() {
try {
Certificate auth(authenticationCertificate());
Certificate sig(digitalSignatureCertificate());
//auth.subjectInfo(serialNumber);
// if (mrw::RegExp("^$[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}")
// (auth.subjectInfo(serialNumber))) {
// _type = SUISSE_ID;
Certificate sig(digitalSignatureCertificate());
// }
return VALID;
} catch (const no_auth& x) {
return MISSING;
@ -430,6 +457,7 @@ namespace suisseid {
private:
CardType _type;
std::string _version; // version is cached
unsigned int _minPinLen; // minimal PIN length is cached
unsigned int _maxPinLen; // maximal PIN length is cached

Loading…
Cancel
Save