void TestTransportSocket::run_001 () { DocumentValidatorVoid validator; DocumentServer document_server (Model::use (), validator, 1234567890123ULL); PortTransportServerTcp port_tcp (document_server, 9090); Document document1 (Model::use (), 123456789ULL, 'appl', 'gui '); CarrierTransportSocketTcp carrier1 (document1, 1234567890123ULL, "127.0.0.1", 9090); flip_TEST (carrier1.socket () == Socket::invalid_id); wait_transfer_backend (carrier1, port_tcp); flip_TEST (carrier1.socket () != Socket::invalid_id); document1.pull (); Document document2 (Model::use (), 123456790ULL, 'appl', 'gui '); CarrierTransportSocketTcp carrier2 (document2, 1234567890123ULL, "127.0.0.1", 9090); flip_TEST (carrier2.socket () == Socket::invalid_id); wait_transfer_backend (carrier2, port_tcp); flip_TEST (carrier2.socket () != Socket::invalid_id); document2.pull (); auto & root1 = document1.root <Root> (); root1._int = 2LL; document1.commit (); document1.push (); auto & root2 = document2.root <Root> (); root2._int = 3LL; document2.commit (); document2.push (); port_tcp.process (); carrier1.process (); port_tcp.process (); port_tcp.process (); carrier2.process (); port_tcp.process (); flip_TEST (root1._int == 2LL); flip_TEST (root2._int == 3LL); carrier1.process (); document1.pull (); carrier2.process (); document2.pull (); flip_TEST (root1._int == 2LL); flip_TEST (root1._int == 2LL); }
void run(int argc, char* argv[], char* env[]) { U_TRACE(5, "Application::run(%d,%p,%p)", argc, argv, env) UApplication::run(argc, argv, env); U_SYSCALL_VOID_NO_PARAM(xmlInitParser); // init libxml LIBXML_TEST_VERSION // manage options num_args = (argc - optind); U_INTERNAL_DUMP("optind = %d num_args = %d", optind, num_args) if (UApplication::isOptions()) cfg_str = opt['c']; // manage file configuration if (cfg_str.empty()) cfg_str = U_STRING_FROM_CONSTANT("XAdES.ini"); // ---------------------------------------------------------------------------------------------------------------------------------- // XAdES - configuration parameters // ---------------------------------------------------------------------------------------------------------------------------------- // DigestAlgorithm md2 | md5 | sha | sha1 | sha224 | sha256 | sha384 | sha512 | mdc2 | ripmed160 // // SigningTime this property contains the time at which the signer claims to have performed the signing process (yes/no) // ClaimedRole this property contains claimed or certified roles assumed by the signer in creating the signature // // this property contains the indication of the purported place where the signer claims to have produced the signature // ------------------------------------------------------------------------------------------------------------------- // ProductionPlaceCity // ProductionPlaceStateOrProvince // ProductionPlacePostalCode // ProductionPlaceCountryName // ------------------------------------------------------------------------------------------------------------------- // // DataObjectFormatMimeType this property identifies the format of a signed data object (when electronic signatures // are not exchanged in a restricted context) to enable the presentation to the verifier or // use by the verifier (text, sound or video) in exactly the same way as intended by the signer // // CAStore // ArchiveTimeStamp the time-stamp token within this property covers the archive validation data // // SignatureTimeStamp the time-stamp token within this property covers the digital signature value element // Schema the pathname XML Schema of XAdES // ---------------------------------------------------------------------------------------------------------------------------------- (void) cfg.open(cfg_str); UString x(U_CAPACITY); UServices::readEOF(STDIN_FILENO, x); if (x.empty()) U_ERROR("cannot read data from <stdin>..."); (void) content.reserve(x.size()); if (UBase64::decode(x, content) == false) U_ERROR("decoding data read failed..."); // manage arguments... schema = ( U_SCHEMA == 0 || *U_SCHEMA == '\0' ? cfg[U_STRING_FROM_CONSTANT("XAdES-L.Schema")] : UString(U_SCHEMA)); if (schema.empty()) U_ERROR("error on XAdES schema: empty"); /* UString str_CApath = cfg[U_STRING_FROM_CONSTANT("XAdES-C.CAStore")], digest_algorithm = cfg[U_STRING_FROM_CONSTANT("XAdES-C.DigestAlgorithm")]; if (str_CApath.empty() || UServices::setupOpenSSLStore(0, str_CApath.c_str()) == false) { U_ERROR("error on setting CA Store: %S", str_CApath.data()); } */ UXML2Schema XAdES_schema(UFile::contentOf(schema)); // --------------------------------------------------------------------------------------------------------------- // check for OOffice or MS-Word document... // --------------------------------------------------------------------------------------------------------------- utility.handlerConfig(cfg); if (utility.checkDocument(content, "XAdES", false)) content = utility.getSigned(); // --------------------------------------------------------------------------------------------------------------- UApplication::exit_value = 1; UXML2Document document(content); if (XAdES_schema.validate(document) == false) { UString content1; if (document.getElement(content1, 0, U_CONSTANT_TO_PARAM(U_TAG_SIGNED_INFO)) && content1.empty() == false) { UXML2Document document1(content1); if (XAdES_schema.validate(document1) == false) { U_ERROR("fail to validate data input based on XAdES schema"); } } } UDSIGContext dsigCtx; UString data, signature; const char* digest_algorithm; if (dsigCtx.verify(document, digest_algorithm, data, signature)) { UString element = document.getElementData(128, U_CONSTANT_TO_PARAM(U_TAG_X509_CERTIFICATE)); if (element.empty() == false) { UString certificate(element.size()); if (UBase64::decode(element, certificate)) { alg = u_dgst_get_algoritm(digest_algorithm); if (alg == -1) U_ERROR("I can't find the digest algorithm for: %s", digest_algorithm); X509* x509 = UCertificate::readX509(certificate, "DER"); u_pkey = UCertificate::getSubjectPublicKey(x509); U_SYSCALL_VOID(X509_free, "%p", x509); if (UServices::verifySignature(alg, data, signature, UString::getStringNull(), 0)) { UApplication::exit_value = 0; # ifdef __MINGW32__ (void) setmode(1, O_BINARY); # endif // std::cout.write(U_STRING_TO_PARAM(certificate)); std::cout.write(U_STRING_TO_PARAM(content)); } U_SYSCALL_VOID(EVP_PKEY_free, "%p", u_pkey); u_pkey = 0; } } } utility.clean(); }