diff --git a/libcdoc.i b/libcdoc.i index c681964a..bb9d3db0 100644 --- a/libcdoc.i +++ b/libcdoc.i @@ -81,11 +81,7 @@ %ignore libcdoc::PKCS11Backend::getCertificate(std::vector& val, bool& rsa, int slot, const std::vector& pin, const std::vector& id, const std::string& label); %ignore libcdoc::PKCS11Backend::getPublicKey(std::vector& val, bool& rsa, int slot, const std::vector& pin, const std::vector& id, const std::string& label); -#ifdef SWIGJAVA -%include "arrays_java.i" -%include "enums.swg" -%javaconst(1); - +// Map C++ integer types for all language bindings %apply long long { libcdoc::result_t } %apply long long { int64_t } %apply long long { uint64_t } @@ -93,6 +89,143 @@ %apply int { int32_t } %apply int { unsigned int } +// +// CDocWriter +// + +%extend libcdoc::CDocWriter { + int64_t writeData(const uint8_t *src, size_t pos, size_t size) { + return $self->writeData(src + pos, size); + } +}; + +// +// CDocReader +// + +// Custom wrapper do away with const qualifiers +%extend libcdoc::CDocReader { + std::vector getLocks() { + const std::vector &locks = $self->getLocks(); + std::vector p(locks.cbegin(), locks.cend()); + return std::move(p); + } + std::vector getFMK(unsigned int lock_idx) { + std::vector fmk; + $self->getFMK(fmk, lock_idx); + return fmk; + } +}; +%ignore libcdoc::CDocReader::getLocks(); + +// +// DataBuffer +// + +%ignore libcdoc::DataBuffer::data; +%ignore libcdoc::DataBuffer::DataBuffer(std::vector *_data); +%ignore libcdoc::DataBuffer::reset(); + +// +// DataConsumer +// + +%ignore libcdoc::DataConsumer::write(const std::vector& src); + +// +// CertificateList +// + +%ignore libcdoc::CertificateList::data; +%ignore libcdoc::CertificateList::CertificateList(std::vector> *_data); +%ignore libcdoc::CertificateList::reset(); +%ignore libcdoc::CertificateList::setData(const std::vector>& _data); +%ignore libcdoc::CertificateList::getData(); + +// +// Recipient +// + +%ignore libcdoc::Recipient::rcpt_key; +%ignore libcdoc::Recipient::cert; +%ignore libcdoc::Recipient::getLabel; +%extend libcdoc::Recipient { + std::vector getRcptKey() { + return $self->rcpt_key; + } + void setRcptKey(const std::vector& key) { + $self->rcpt_key = key; + } + std::vector getCert() { + return $self->cert; + } + void setCert(const std::vector& value) { + $self->cert = value; + } +}; + +// +// Lock +// + +%ignore libcdoc::Lock::Lock; +%ignore libcdoc::Lock::type; +%ignore libcdoc::Lock::pk_type; +%ignore libcdoc::Lock::label; +%ignore libcdoc::Lock::encrypted_fmk; +%ignore libcdoc::Lock::setBytes; +%ignore libcdoc::Lock::setString; +%ignore libcdoc::Lock::setInt; +%ignore libcdoc::Lock::setCertificate; +%extend libcdoc::Lock { + Type getType() { + return $self->type; + } + PKType getPKType() { + return $self->pk_type; + } + std::string getLabel() { + return $self->label; + } + std::vector getEncryptedFMK() { + return $self->encrypted_fmk; + } +} + +// +// Configuration +// + +%ignore libcdoc::JSONConfiguration::JSONConfiguration(std::istream& ifs); +%ignore libcdoc::JSONConfiguration::parse(std::istream& ifs); + +// +// NetworkBackend +// + +%ignore libcdoc::NetworkBackend::ShareInfo::share; +%extend libcdoc::NetworkBackend::ShareInfo { + std::vector getShare() { + return $self->share; + } + void setShare(const std::vector& share) { + $self->share = share; + } +}; + +// Enable director support for classes with virtual methods +%feature("director") libcdoc::DataSource; +%feature("director") libcdoc::CryptoBackend; +%feature("director") libcdoc::PKCS11Backend; +%feature("director") libcdoc::NetworkBackend; +%feature("director") libcdoc::Configuration; +%feature("director") libcdoc::ILogger; + +#ifdef SWIGJAVA +%include "arrays_java.i" +%include "enums.swg" +%javaconst(1); + %typemap(javaout, throws="CDocException") libcdoc::result_t %{ { long result = $jnicall; @@ -373,38 +506,6 @@ static std::vector SWIG_JavaArrayToVectorUnsignedChar(JNIEnv *jen %typemap(javadirectorin) std::string_view "$jniinput" // No return of std::string_view so no javadirectorout -// -// CDocWriter -// - -%extend libcdoc::CDocWriter { - int64_t writeData(const uint8_t *src, size_t pos, size_t size) { - return $self->writeData(src + pos, size); - } -}; - -// -// CDocReader -// - -// Use LockVector object to encapsulate the vector of locks -%template(LockVector) std::vector; - -// Custom wrapper do away with const qualifiers -%extend libcdoc::CDocReader { - std::vector getLocks() { - const std::vector &locks = $self->getLocks(); - std::vector p(locks.cbegin(), locks.cend()); - return std::move(p); - } - std::vector getFMK(unsigned int lock_idx) { - std::vector fmk; - $self->getFMK(fmk, lock_idx); - return fmk; - } -}; -%ignore libcdoc::CDocReader::getLocks(); - %typemap(javacode) libcdoc::CDocReader %{ public void readFile(java.io.OutputStream ofs) throws CDocException, java.io.IOException { byte[] buf = new byte[1024]; @@ -416,87 +517,6 @@ static std::vector SWIG_JavaArrayToVectorUnsignedChar(JNIEnv *jen } %} -// -// DataBuffer -// - -%ignore libcdoc::DataBuffer::data; -%ignore libcdoc::DataBuffer::DataBuffer(std::vector *_data); -%ignore libcdoc::DataBuffer::reset(); - -// -// DataConsumer -// - -%ignore libcdoc::DataConsumer::write(const std::vector& src); - -// -// CertificateList -// - -%ignore libcdoc::CertificateList::data; -%ignore libcdoc::CertificateList::CertificateList(std::vector> *_data); -%ignore libcdoc::CertificateList::reset(); -%ignore libcdoc::CertificateList::setData(const std::vector>& _data); -%ignore libcdoc::CertificateList::getData(); - -// -// Recipient -// - -%ignore libcdoc::Recipient::rcpt_key; -%ignore libcdoc::Recipient::cert; -%ignore libcdoc::Recipient::getLabel; -%extend libcdoc::Recipient { - std::vector getRcptKey() { - return $self->rcpt_key; - } - void setRcptKey(const std::vector& key) { - $self->rcpt_key = key; - } - std::vector getCert() { - return $self->cert; - } - void setCert(const std::vector& value) { - $self->cert = value; - } -}; - -// -// Lock -// - -%ignore libcdoc::Lock::Lock; -%ignore libcdoc::Lock::type; -%ignore libcdoc::Lock::pk_type; -%ignore libcdoc::Lock::label; -%ignore libcdoc::Lock::encrypted_fmk; -%ignore libcdoc::Lock::setBytes; -%ignore libcdoc::Lock::setString; -%ignore libcdoc::Lock::setInt; -%ignore libcdoc::Lock::setCertificate; -%extend libcdoc::Lock { - Type getType() { - return $self->type; - } - PKType getPKType() { - return $self->pk_type; - } - std::string getLabel() { - return $self->label; - } - std::vector getEncryptedFMK() { - return $self->encrypted_fmk; - } -} - -// -// Configuration -// - -%ignore libcdoc::JSONConfiguration::JSONConfiguration(std::istream& ifs); -%ignore libcdoc::JSONConfiguration::parse(std::istream& ifs); - %typemap(javacode) libcdoc::Configuration %{ public static final String KEYSERVER_SEND_URL = "KEYSERVER_SEND_URL"; public static final String KEYSERVER_FETCH_URL = "KEYSERVER_FETCH_URL"; @@ -510,24 +530,6 @@ static std::vector SWIG_JavaArrayToVectorUnsignedChar(JNIEnv *jen public static final String PHONE_NUMBER = "PHONE_NUMBER"; %} -// -// CryptoBackend -// - -// -// NetworkBackend -// - -%ignore libcdoc::NetworkBackend::ShareInfo::share; -%extend libcdoc::NetworkBackend::ShareInfo { - std::vector getShare() { - return $self->share; - } - void setShare(const std::vector& share) { - $self->share = share; - } -}; - %typemap(javaimports) ArrayList %{ import java.util.ArrayList; %} @@ -538,13 +540,6 @@ static std::vector SWIG_JavaArrayToVectorUnsignedChar(JNIEnv *jen %typemap(javaimports) libcdoc::NetworkBackend %{ import java.util.ArrayList; %} - -%feature("director") libcdoc::DataSource; -%feature("director") libcdoc::CryptoBackend; -%feature("director") libcdoc::PKCS11Backend; -%feature("director") libcdoc::NetworkBackend; -%feature("director") libcdoc::Configuration; -%feature("director") libcdoc::ILogger; #endif // Swig does not like visibility/declspec attributes @@ -565,6 +560,10 @@ static std::vector SWIG_JavaArrayToVectorUnsignedChar(JNIEnv *jen %include "ILogger.h" %include "ConsoleLogger.h" +// LockVector template must come after Lock.h is included so that +// SWIG knows about the libcdoc::Lock class definition. +%template(LockVector) std::vector; + #ifdef SWIGJAVA %typemap(javaout, throws="CDocException") libcdoc::result_t %{ { @@ -577,6 +576,3 @@ static std::vector SWIG_JavaArrayToVectorUnsignedChar(JNIEnv *jen %include "CDocReader.h" %include "CDocWriter.h" - -#ifdef SWIGJAVA -#endif