My name is Constantinos Patsakis and currently I'm associate professor at the Department of Informatics, University of Piraeus and adjunct researcher at the Institute for the Management of Information Systems (IMIS) of Athena Research
+ and
+ Innovation Centre.
+ My first degree is in Mathematics from the University of Athens, Greece and then I continued with a M.Sc. in Information Security from Royal Holloway, University of London. I obtained my PhD in Security from the Department of
+ Informatics
+ of
+ University of Piraeus. My main areas of research include cryptography, security, privacy and data anonymization. In the past I worked as Researcher at the UNESCO Chair in Data Privacy at the Rovira i
+ Virgili University (URV) of Tarragona, Catalonia, Spain, as a Research Fellow at Trinity College, Dublin Ireland, and Senior Researcher at the Luxembourg Institute of Science and Technology (LIST).
+
+
+
+
+
In this academic year I will be teaching the following courses:
+
Undergraduates
+
+
Information & Code theory
+
Management of Security Systems
+
Introduction to Computer Science
+
Computational Number Theory
+
+
Postgraduates
+
+
Digital Forensics & Malware Analysis
+
Cryptographic protocols
+
Cryptography
+
Introduction to Computer Science
+
+
+ For more info about the courses, students may refer to our GUNet. Dissertation topics can be found here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Latest news
+
Some recent news regarding publications, projects, events, etc.
+
+
+
+
+
+
IPStorm Tracker
+
IPFS is currently plagued by IPStorm malware, a botnet which is exploits IPFS for communication of the nodes and sending commands to the infected devices. This webpage offers a daily
+ tracker of the botnet with data collected directly collected from IPFS.
+
+
+
+
+
+
+
Journal of Information Security and Applications
+
The following work has been accepted for publication:
+ Constantinos Patsakis and Fran Casino: "Exploiting Statistical and Structural Features for the Detection of Domain Generation Algorithms".
+
+
+
+
+
+
+
+
+
Computers and Security, Elsevier
+
The following work has been accepted for publication:
+ Theodoros Apostolopoulos, Vasilios Katos, Kim-Kwang Raymond Choo, Constantinos Patsakis: Resurrecting anti-virtualization and anti-debugging: Unhooking your hooks. Future Generation Computer Systems
+
+
+
+
+
+
+
+
+
Analysing the fall 2020 Emotet campaign
+
University of Piraeus, Athena Research Center, and Neurosoft through its cybersecurity solution Neutrify, released a white paper on the latest campaign of Emotet, which had a significant impact in several countries worldwide.
+ Follow
+ this link to read it. The corrsponding IoCs are also provided for documents and C2 servers.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
IEEE Transactions on Information Forensics and Security
+
The following work has been accepted for publication:
+ Darren Hurley-Smith, Constantinos Patsakis, and Julio Hernandez-Castro, "On the unbearable lightness of FIPS 140-2 randomness tests".
+
+
+
+
+
+
+
+
+
Computers and Security, Elsevier
+
Our joined work with Fran Casino and Vasilios Katos on DNS and covert communications is accepted for publication.
+
+
+
+
+
+
+
+
IEEE Access
+
"A Survey on Privacy Properties for Data Publishing of Relational Data" with A. Zigomitros, F. Casino, and A. Solanas has been accepted for publication.
+
+
+
+
+
+
+
+
+
IEEE ACCESS
+
Fran Casino, Eugenia A. Politou, Efthimios Alepis, Constantinos Patsakis: "Immutability and Decentralized Storage: An Analysis of Emerging Threats"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
R&D projects
+
A consolidated list of recent R&D projects I have been participating in the past few years.
Digital forensics: evidence analysis via intelligent systems and practices (DigForASP)
+
COST Action CA17124
+
+
+
+
+
+
YAKSHA
+
ICT-39-2016-2017
+
+
+
+
+
+
SAURON
+
CIP-01-2016-2017
+
+
+
+
+
+
PRACTICIES
+
SEC-06-FCT-2016
+
+
+
+
+
+
OPERANDO
+
DS-01-2014
+
+
+
+
+
+
MITIGATE
+
DS-6-2014
+
+
+
+
+
+
CRYPTACUS
+
COST Action
+
+
+
+
+
+
SIMPATIC
+
ICT RECERCAIXA'12
+
+
+
+
+
+
Inter-cultural Dimension for European Active Citizenship (IDEA-C)
+
Citizens Strand2
+
+
+
+
+
+
TACTICS
+
FP7
+
+
+
+
Datasets
+
A list of publicly available datasets from my research.
+
+
+
+
+
+
Social Live Streaming Service Grooming dataset
+
A large-scale dataset of the messages exchanged publicly by the streamers and viewers during the live broadcasts of users identified as adult content producers from the LiveMe platform, a major Social Live Streaming Service (SLSS). The
+ dataset comprises 39,382,838 chat messages exchanged by 1,428,284 users, in the context of 293,271 live broadcasts during a period of approximately two years, from July 2016 to June 2018. The analysis of this dataset can be found in our
+ paper "Large-scale analysis of grooming in modern social networks" (arXiv:2004.08205 [cs.SI]). Available here.
+
+
+
+
+
+
Dictionary-based DGAs dataset
+
This repository contains a dataset for the research of domain generation algorithms (DGAs) and machine learning. More precisely, it targets dictionary-based DGAs. The associated paper is the following:
+ Constantinos Patsakis, Fran Casino: "Exploiting Statistical and Structural Features for the Detection of Domain Generation Algorithms", Journal of Information Security and Applications, 2021.
+
+ Available here.
+
+
+
+
+
+
+
The HYDRA dataset
+
This repository contains a large dataset for the research of domain generation algorithms (DGAs) and machine learning. At the time of writing the dataset contains more than 90m of domains and more than 100 families. The associated paper is the following:
+ Fran Casino, Nikolaos Lykousas, Ivan Homoliak, Constantinos Patsakis, Julio Hernandez-Castro: "Intercepting Hail Hydra: Real-Time Detection of Algorithmically Generated Domains"
+ Available here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Recent publications
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @article{DBLP:journals/fgcs/ApostolopoulosK21,
+ author = {Theodoros Apostolopoulos and
+ Vasilios Katos and
+ Kim{-}Kwang Raymond Choo and
+ Constantinos Patsakis},
+ title = {Resurrecting anti-virtualization and anti-debugging: Unhooking your
+ hooks},
+ journal = {Future Gener. Comput. Syst.},
+ volume = {116},
+ pages = {393--405},
+ year = {2021},
+ url = {https://doi.org/10.1016/j.future.2020.11.004},
+ doi = {10.1016/j.future.2020.11.004},
+ timestamp = {Fri, 18 Dec 2020 10:25:24 +0100},
+ biburl = {https://dblp.org/rec/journals/fgcs/ApostolopoulosK21.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
+@article{DBLP:journals/access/CasinoPAP20,
+ author = {Fran Casino and
+ Eugenia A. Politou and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Immutability and Decentralized Storage: An Analysis of Emerging Threats},
+ journal = {{IEEE} Access},
+ volume = {8},
+ pages = {4737--4744},
+ year = {2020},
+ url = {https://doi.org/10.1109/ACCESS.2019.2962017},
+ doi = {10.1109/ACCESS.2019.2962017},
+ timestamp = {Thu, 06 Feb 2020 18:12:51 +0100},
+ biburl = {https://dblp.org/rec/journals/access/CasinoPAP20.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
+@article{DBLP:journals/fgcs/PolitouAPCA20,
+ author = {Eugenia A. Politou and
+ Efthimios Alepis and
+ Constantinos Patsakis and
+ Fran Casino and
+ Mamoun Alazab},
+ title = {Delegated content erasure in {IPFS}},
+ journal = {Future Gener. Comput. Syst.},
+ volume = {112},
+ pages = {956--964},
+ year = {2020},
+ url = {https://doi.org/10.1016/j.future.2020.06.037},
+ doi = {10.1016/j.future.2020.06.037},
+ timestamp = {Tue, 18 Aug 2020 16:09:34 +0200},
+ biburl = {https://dblp.org/rec/journals/fgcs/PolitouAPCA20.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
+ @article{DBLP:journals/access/CasinoPAP20,
+ author = {Fran Casino and
+ Eugenia A. Politou and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Immutability and Decentralized Storage: An Analysis of Emerging Threats},
+ journal = {{IEEE} Access},
+ volume = {8},
+ pages = {4737--4744},
+ year = {2020},
+ url = {https://doi.org/10.1109/ACCESS.2019.2962017},
+ doi = {10.1109/ACCESS.2019.2962017},
+ timestamp = {Thu, 06 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/access/CasinoPAP20.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/access/ZigomitrosCSP20,
+ author = {Athanasios Zigomitros and
+ Fran Casino and
+ Agusti Solanas and
+ Constantinos Patsakis},
+ title = {A Survey on Privacy Properties for Data Publishing of Relational Data},
+ journal = {{IEEE} Access},
+ volume = {8},
+ pages = {51071--51099},
+ year = {2020},
+ url = {https://doi.org/10.1109/ACCESS.2020.2980235},
+ doi = {10.1109/ACCESS.2020.2980235},
+ timestamp = {Thu, 09 Apr 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/access/ZigomitrosCSP20.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/compsec/PatsakisCK20,
+ author = {Constantinos Patsakis and
+ Fran Casino and
+ Vasilios Katos},
+ title = {Encrypted and covert {DNS} queries for botnets: Challenges and countermeasures},
+ journal = {Comput. Secur.},
+ volume = {88},
+ year = {2020},
+ url = {https://doi.org/10.1016/j.cose.2019.101614},
+ doi = {10.1016/j.cose.2019.101614},
+ timestamp = {Thu, 20 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/compsec/PatsakisCK20.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/ifip12/KostopoulosCPAG20,
+ author = {Alexandros Kostopoulos and
+ Ioannis P. Chochliouros and
+ Constantinos Patsakis and
+ Miltos Anastasiadis and
+ Alessandro Guarino},
+ editor = {Ilias Maglogiannis and
+ Lazaros Iliadis and
+ Elias Pimenidis},
+ title = {Protocol Deployment for Employing Honeypot-as-a-Service},
+ booktitle = {Artificial Intelligence Applications and Innovations. {AIAI} 2020
+ {IFIP} {WG} 12.5 International Workshops - {MHDW} 2020 and 5G-PINE
+ 2020, Neos Marmaras, Greece, June 5-7, 2020, Proceedings},
+ series = {{IFIP} Advances in Information and Communication Technology},
+ volume = {585},
+ pages = {105--115},
+ publisher = {Springer},
+ year = {2020},
+ url = {https://doi.org/10.1007/978-3-030-49190-1\_10},
+ doi = {10.1007/978-3-030-49190-1\_10},
+ timestamp = {Wed, 03 Jun 2020 14:38:40 +0200},
+ biburl = {https://dblp.org/rec/conf/ifip12/KostopoulosCPAG20.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-2004-08205,
+ author = {Nikolaos Lykousas and
+ Constantinos Patsakis},
+ title = {Large-scale analysis of grooming in modern social networks},
+ journal = {CoRR},
+ volume = {abs/2004.08205},
+ year = {2020},
+ url = {https://arxiv.org/abs/2004.08205},
+ archivePrefix = {arXiv},
+ eprint = {2004.08205},
+ timestamp = {Tue, 21 Apr 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-2004-08205.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-2005-11556,
+ author = {Thomas K. Dasaklis and
+ Fran Casino and
+ Constantinos Patsakis},
+ title = {A traceability and auditing framework for electronic equipment reverse
+ logistics based on blockchain: the case of mobile phones},
+ journal = {CoRR},
+ volume = {abs/2005.11556},
+ year = {2020},
+ url = {https://arxiv.org/abs/2005.11556},
+ archivePrefix = {arXiv},
+ eprint = {2005.11556},
+ timestamp = {Thu, 28 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-2005-11556.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-2005-12640,
+ author = {Thomas K. Dasaklis and
+ Fran Casino and
+ Constantinos Patsakis},
+ title = {SoK: Blockchain Solutions for Forensics},
+ journal = {CoRR},
+ volume = {abs/2005.12640},
+ year = {2020},
+ url = {https://arxiv.org/abs/2005.12640},
+ archivePrefix = {arXiv},
+ eprint = {2005.12640},
+ timestamp = {Thu, 28 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-2005-12640.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/access/DeirmentzoglouP19,
+ author = {Evangelos Deirmentzoglou and
+ Georgios Papakyriakopoulos and
+ Constantinos Patsakis},
+ title = {A Survey on Long-Range Attacks for Proof of Stake Protocols},
+ journal = {{IEEE} Access},
+ volume = {7},
+ pages = {28712--28725},
+ year = {2019},
+ url = {https://doi.org/10.1109/ACCESS.2019.2901858},
+ doi = {10.1109/ACCESS.2019.2901858},
+ timestamp = {Fri, 12 Apr 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/access/DeirmentzoglouP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/ecra/CasinoPS19,
+ author = {Fran Casino and
+ Constantinos Patsakis and
+ Agusti Solanas},
+ title = {Privacy-preserving collaborative filtering: {A} new approach based
+ on variable-group-size microaggregation},
+ journal = {Electron. Commer. Res. Appl.},
+ volume = {38},
+ year = {2019},
+ url = {https://doi.org/10.1016/j.elerap.2019.100895},
+ doi = {10.1016/j.elerap.2019.100895},
+ timestamp = {Sat, 22 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/ecra/CasinoPS19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/ijisec/PatsakisC19,
+ author = {Constantinos Patsakis and
+ Fran Casino},
+ title = {Hydras and {IPFS:} a decentralised playground for malware},
+ journal = {Int. J. Inf. Sec.},
+ volume = {18},
+ number = {6},
+ pages = {787--799},
+ year = {2019},
+ url = {https://doi.org/10.1007/s10207-019-00443-0},
+ doi = {10.1007/s10207-019-00443-0},
+ timestamp = {Wed, 25 Sep 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/ijisec/PatsakisC19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/jhss/AlepisP19,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Unravelling Security Issues of Runtime Permissions in Android},
+ journal = {J. Hardware and Systems Security},
+ volume = {3},
+ number = {1},
+ pages = {45--63},
+ year = {2019},
+ url = {https://doi.org/10.1007/s41635-018-0053-2},
+ doi = {10.1007/s41635-018-0053-2},
+ timestamp = {Mon, 16 Sep 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/jhss/AlepisP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/jhss/PatsakisDFCS19,
+ author = {Constantinos Patsakis and
+ Kleanthis Dellios and
+ Jos{\'{e}} Mar{\'{\i}}a de Fuentes and
+ Fran Casino and
+ Agusti Solanas},
+ title = {External Monitoring Changes in Vehicle Hardware Profiles: Enhancing
+ Automotive Cyber-Security},
+ journal = {J. Hardware and Systems Security},
+ volume = {3},
+ number = {3},
+ pages = {289--303},
+ year = {2019},
+ url = {https://doi.org/10.1007/s41635-019-00076-8},
+ doi = {10.1007/s41635-019-00076-8},
+ timestamp = {Sat, 19 Oct 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/jhss/PatsakisDFCS19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/tele/CasinoDP19,
+ author = {Fran Casino and
+ Thomas K. Dasaklis and
+ Constantinos Patsakis},
+ title = {A systematic literature review of blockchain-based applications: Current
+ status, classification and open issues},
+ journal = {Telematics Informatics},
+ volume = {36},
+ pages = {55--81},
+ year = {2019},
+ url = {https://doi.org/10.1016/j.tele.2018.11.006},
+ doi = {10.1016/j.tele.2018.11.006},
+ timestamp = {Mon, 24 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/tele/CasinoDP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/tifs/CasinoCP19,
+ author = {Fran Casino and
+ Kim{-}Kwang Raymond Choo and
+ Constantinos Patsakis},
+ title = {{HEDGE:} Efficient Traffic Classification of Encrypted and Compressed
+ Packets},
+ journal = {{IEEE} Trans. Information Forensics and Security},
+ volume = {14},
+ number = {11},
+ pages = {2916--2926},
+ year = {2019},
+ url = {https://doi.org/10.1109/TIFS.2019.2911156},
+ doi = {10.1109/TIFS.2019.2911156},
+ timestamp = {Thu, 08 Aug 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/tifs/CasinoCP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/bpm/DasaklisCPD19,
+ author = {Thomas K. Dasaklis and
+ Fran Casino and
+ Costas Patsakis and
+ Christos Douligeris},
+ editor = {Chiara Di Francescomarino and
+ Remco M. Dijkman and
+ Uwe Zdun},
+ title = {A Framework for Supply Chain Traceability Based on Blockchain Tokens},
+ booktitle = {Business Process Management Workshops - {BPM} 2019 International Workshops,
+ Vienna, Austria, September 1-6, 2019, Revised Selected Papers},
+ series = {Lecture Notes in Business Information Processing},
+ volume = {362},
+ pages = {704--716},
+ publisher = {Springer},
+ year = {2019},
+ url = {https://doi.org/10.1007/978-3-030-37453-2\_56},
+ doi = {10.1007/978-3-030-37453-2\_56},
+ timestamp = {Tue, 07 Jan 2020 14:41:26 +0100},
+ biburl = {https://dblp.org/rec/conf/bpm/DasaklisCPD19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/coins/DasaklisCP19,
+ author = {Thomas K. Dasaklis and
+ Fran Casino and
+ Constantinos Patsakis},
+ editor = {Farshad Firouzi and
+ Krishnendu Chakrabarty and
+ Bahar Farahani and
+ Fangming Ye and
+ Vasilis F. Pavlidis},
+ title = {Defining granularity levels for supply chain traceability based on
+ IoT and blockchain},
+ booktitle = {Proceedings of the International Conference on Omni-Layer Intelligent
+ Systems, {COINS} 2019, Crete, Greece, May 5-7, 2019},
+ pages = {184--190},
+ publisher = {{ACM}},
+ year = {2019},
+ url = {https://doi.org/10.1145/3312614.3312652},
+ doi = {10.1145/3312614.3312652},
+ timestamp = {Mon, 08 Apr 2019 08:25:51 +0200},
+ biburl = {https://dblp.org/rec/conf/coins/DasaklisCP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icissp/TorresSAP19,
+ author = {Jos{\'{e}} Torres and
+ Sergio de los Santos and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ editor = {Paolo Mori and
+ Steven Furnell and
+ Olivier Camp},
+ title = {Behavioral Biometric Authentication in Android Unlock Patterns through
+ Machine Learning},
+ booktitle = {Proceedings of the 5th International Conference on Information Systems
+ Security and Privacy, {ICISSP} 2019, Prague, Czech Republic, February
+ 23-25, 2019},
+ pages = {146--154},
+ publisher = {SciTePress},
+ year = {2019},
+ url = {https://doi.org/10.5220/0007394201460154},
+ doi = {10.5220/0007394201460154},
+ timestamp = {Wed, 05 Jun 2019 13:01:15 +0200},
+ biburl = {https://dblp.org/rec/conf/icissp/TorresSAP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icwsm/LykousasPKG19,
+ author = {Nikolaos Lykousas and
+ Constantinos Patsakis and
+ Andreas Kaltenbrunner and
+ Vicen{\c{c}} G{\'{o}}mez},
+ editor = {J{\"{u}}rgen Pfeffer and
+ Ceren Budak and
+ Yu{-}Ru Lin and
+ Fred Morstatter},
+ title = {Sharing Emotions at Scale: The Vent Dataset},
+ booktitle = {Proceedings of the Thirteenth International Conference on Web and
+ Social Media, {ICWSM} 2019, Munich, Germany, June 11-14, 2019},
+ pages = {611--619},
+ publisher = {{AAAI} Press},
+ year = {2019},
+ url = {https://aaai.org/ojs/index.php/ICWSM/article/view/3361},
+ timestamp = {Fri, 14 Jun 2019 11:27:33 +0200},
+ biburl = {https://dblp.org/rec/conf/icwsm/LykousasPKG19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/HoulisPA19,
+ author = {Charalampos Houlis and
+ Constantinos Patsakis and
+ Efthimios Alepis},
+ title = {Smart Android Application using Self-Destructive Identities against
+ Cyber Harassment},
+ booktitle = {10th International Conference on Information, Intelligence, Systems
+ and Applications, {IISA} 2019, Patras, Greece, July 15-17, 2019},
+ pages = {1--7},
+ publisher = {{IEEE}},
+ year = {2019},
+ url = {https://doi.org/10.1109/IISA.2019.8900667},
+ doi = {10.1109/IISA.2019.8900667},
+ timestamp = {Tue, 19 Nov 2019 19:24:41 +0100},
+ biburl = {https://dblp.org/rec/conf/iisa/HoulisPA19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iwsec/MantasP19,
+ author = {Evangelos Mantas and
+ Constantinos Patsakis},
+ editor = {Nuttapong Attrapadung and
+ Takeshi Yagi},
+ title = {{GRYPHON:} Drone Forensics in Dataflash and Telemetry Logs},
+ booktitle = {Advances in Information and Computer Security - 14th International
+ Workshop on Security, {IWSEC} 2019, Tokyo, Japan, August 28-30, 2019,
+ Proceedings},
+ series = {Lecture Notes in Computer Science},
+ volume = {11689},
+ pages = {377--390},
+ publisher = {Springer},
+ year = {2019},
+ url = {https://doi.org/10.1007/978-3-030-26834-3\_22},
+ doi = {10.1007/978-3-030-26834-3\_22},
+ timestamp = {Wed, 07 Aug 2019 14:48:42 +0200},
+ biburl = {https://dblp.org/rec/conf/iwsec/MantasP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/seeda/CasinoDP19,
+ author = {Fran Casino and
+ Thomas K. Dasaklis and
+ Constantinos Patsakis},
+ title = {Enhanced Vendor-managed Inventory through Blockchain},
+ booktitle = {4th South-East Europe Design Automation, Computer Engineering, Computer
+ Networks and Social Media Conference, {SEEDA-CECNSM} 2019, Piraeus,
+ Greece, September 20-22, 2019},
+ pages = {1--8},
+ publisher = {{IEEE}},
+ year = {2019},
+ url = {https://doi.org/10.1109/SEEDA-CECNSM.2019.8908481},
+ doi = {10.1109/SEEDA-CECNSM.2019.8908481},
+ timestamp = {Thu, 28 Nov 2019 14:43:34 +0100},
+ biburl = {https://dblp.org/rec/conf/seeda/CasinoDP19.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1901-04856,
+ author = {Nikolaos Lykousas and
+ Constantinos Patsakis and
+ Andreas Kaltenbrunner and
+ Vicen{\c{c}} G{\'{o}}mez},
+ title = {Sharing emotions at scale: The Vent dataset},
+ journal = {CoRR},
+ volume = {abs/1901.04856},
+ year = {2019},
+ url = {http://arxiv.org/abs/1901.04856},
+ archivePrefix = {arXiv},
+ eprint = {1901.04856},
+ timestamp = {Fri, 01 Feb 2019 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1901-04856.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1905-11873,
+ author = {Fran Casino and
+ Kim{-}Kwang Raymond Choo and
+ Constantinos Patsakis},
+ title = {{HEDGE:} Efficient Traffic Classification of Encrypted and Compressed
+ Packets},
+ journal = {CoRR},
+ volume = {abs/1905.11873},
+ year = {2019},
+ url = {http://arxiv.org/abs/1905.11873},
+ archivePrefix = {arXiv},
+ eprint = {1905.11873},
+ timestamp = {Mon, 03 Jun 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1905-11873.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1905-11880,
+ author = {Constantinos Patsakis and
+ Fran Casino},
+ title = {Hydras and {IPFS:} {A} Decentralised Playground for Malware},
+ journal = {CoRR},
+ volume = {abs/1905.11880},
+ year = {2019},
+ url = {http://arxiv.org/abs/1905.11880},
+ archivePrefix = {arXiv},
+ eprint = {1905.11880},
+ timestamp = {Mon, 03 Jun 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1905-11880.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1907-07099,
+ author = {Eugenia A. Politou and
+ Fran Casino and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Blockchain Mutability: Challenges and Proposed Solutions},
+ journal = {CoRR},
+ volume = {abs/1907.07099},
+ year = {2019},
+ url = {http://arxiv.org/abs/1907.07099},
+ archivePrefix = {arXiv},
+ eprint = {1907.07099},
+ timestamp = {Tue, 23 Jul 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1907-07099.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1909-07099,
+ author = {Constantinos Patsakis and
+ Fran Casino and
+ Vasilios Katos},
+ title = {Encrypted and Covert {DNS} Queries for Botnets: Challenges and Countermeasures},
+ journal = {CoRR},
+ volume = {abs/1909.07099},
+ year = {2019},
+ url = {http://arxiv.org/abs/1909.07099},
+ archivePrefix = {arXiv},
+ eprint = {1909.07099},
+ timestamp = {Mon, 23 Sep 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1909-07099.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1912-03552,
+ author = {Constantinos Patsakis and
+ Fran Casino and
+ Nikolaos Lykousas and
+ Vasilios Katos},
+ title = {Unravelling Ariadne's Thread: Exploring the Threats of Decentralised
+ {DNS}},
+ journal = {CoRR},
+ volume = {abs/1912.03552},
+ year = {2019},
+ url = {http://arxiv.org/abs/1912.03552},
+ archivePrefix = {arXiv},
+ eprint = {1912.03552},
+ timestamp = {Thu, 02 Jan 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1912-03552.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1912-05849,
+ author = {Constantinos Patsakis and
+ Fran Casino},
+ title = {Exploiting Statistical and Structural Features for the Detection of
+ Domain Generation Algorithms},
+ journal = {CoRR},
+ volume = {abs/1912.05849},
+ year = {2019},
+ url = {http://arxiv.org/abs/1912.05849},
+ archivePrefix = {arXiv},
+ eprint = {1912.05849},
+ timestamp = {Thu, 02 Jan 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1912-05849.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/access/PapageorgiouSPA18,
+ author = {Achilleas Papageorgiou and
+ Michael Strigkos and
+ Eugenia A. Politou and
+ Efthimios Alepis and
+ Agusti Solanas and
+ Constantinos Patsakis},
+ title = {Security and Privacy Analysis of Mobile Health Applications: The Alarming
+ State of Practice},
+ journal = {{IEEE} Access},
+ volume = {6},
+ pages = {9390--9403},
+ year = {2018},
+ url = {https://doi.org/10.1109/ACCESS.2018.2799522},
+ doi = {10.1109/ACCESS.2018.2799522},
+ timestamp = {Fri, 27 Mar 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/access/PapageorgiouSPA18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/compsec/PatsakisCPMP18,
+ author = {Constantinos Patsakis and
+ Athanasios Charemis and
+ Achilleas Papageorgiou and
+ Dimitrios Mermigas and
+ Sotirios Pirounias},
+ title = {The market's response toward privacy and mass surveillance: The Snowden
+ aftermath},
+ journal = {Comput. Secur.},
+ volume = {73},
+ pages = {194--206},
+ year = {2018},
+ url = {https://doi.org/10.1016/j.cose.2017.11.002},
+ doi = {10.1016/j.cose.2017.11.002},
+ timestamp = {Thu, 20 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/compsec/PatsakisCPMP18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/cybersecurity/PolitouAP18,
+ author = {Eugenia A. Politou and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Forgetting personal data and revoking consent under the {GDPR:} Challenges
+ and proposed solutions},
+ journal = {J. Cybersecur.},
+ volume = {4},
+ number = {1},
+ pages = {tyy001},
+ year = {2018},
+ url = {https://doi.org/10.1093/cybsec/tyy001},
+ doi = {10.1093/cybsec/tyy001},
+ timestamp = {Fri, 22 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/cybersecurity/PolitouAP18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/di/NikasAP18,
+ author = {Alexios Nikas and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {I know what you streamed last night: On the security and privacy of
+ streaming},
+ journal = {Digital Investigation},
+ volume = {25},
+ pages = {78--89},
+ year = {2018},
+ url = {https://doi.org/10.1016/j.diin.2018.03.004},
+ doi = {10.1016/j.diin.2018.03.004},
+ timestamp = {Thu, 28 Jun 2018 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/di/NikasAP18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/scn/AlepisP18,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Session Fingerprinting in Android via Web-to-App Intercommunication},
+ journal = {Security and Communication Networks},
+ volume = {2018},
+ pages = {7352030:1--7352030:13},
+ year = {2018},
+ url = {https://doi.org/10.1155/2018/7352030},
+ doi = {10.1155/2018/7352030},
+ timestamp = {Thu, 16 Aug 2018 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/scn/AlepisP18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/applepies/FalconePS18,
+ author = {Francisco Falcone and
+ Costas Patsakis and
+ Agusti Solanas},
+ editor = {Sergio Saponara and
+ Alessandro De Gloria},
+ title = {Context-Aware Environments in Passenger Train Transportation Systems:
+ Ideas, Feasibility and Risks},
+ booktitle = {Applications in Electronics Pervading Industry, Environment and Society,
+ {APPLEPIES} 2018},
+ pages = {279--285},
+ publisher = {Springer},
+ year = {2018},
+ url = {https://doi.org/10.1007/978-3-030-11973-7\_32},
+ doi = {10.1007/978-3-030-11973-7\_32},
+ timestamp = {Thu, 11 Jul 2019 17:59:25 +0200},
+ biburl = {https://dblp.org/rec/conf/applepies/FalconePS18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/asunam/LykousasPG18,
+ author = {Nikolaos Lykousas and
+ Constantinos Patsakis and
+ Vicen{\c{c}} G{\'{o}}mez},
+ editor = {Ulrik Brandes and
+ Chandan Reddy and
+ Andrea Tagarelli},
+ title = {Adult Content in Social Live Streaming Services: Characterizing Deviant
+ Users and Relationships},
+ booktitle = {{IEEE/ACM} 2018 International Conference on Advances in Social Networks
+ Analysis and Mining, {ASONAM} 2018, Barcelona, Spain, August 28-31,
+ 2018},
+ pages = {375--382},
+ publisher = {{IEEE} Computer Society},
+ year = {2018},
+ url = {https://doi.org/10.1109/ASONAM.2018.8508246},
+ doi = {10.1109/ASONAM.2018.8508246},
+ timestamp = {Wed, 16 Oct 2019 14:14:53 +0200},
+ biburl = {https://dblp.org/rec/conf/asunam/LykousasPG18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/dasc/TotosisP18,
+ author = {Nikolaos Totosis and
+ Constantinos Patsakis},
+ title = {Android Hooking Revisited},
+ booktitle = {2018 {IEEE} 16th Intl Conf on Dependable, Autonomic and Secure Computing,
+ 16th Intl Conf on Pervasive Intelligence and Computing, 4th Intl Conf
+ on Big Data Intelligence and Computing and Cyber Science and Technology
+ Congress, DASC/PiCom/DataCom/CyberSciTech 2018, Athens, Greece, August
+ 12-15, 2018},
+ pages = {552--559},
+ publisher = {{IEEE} Computer Society},
+ year = {2018},
+ url = {https://doi.org/10.1109/DASC/PiCom/DataCom/CyberSciTec.2018.00104},
+ doi = {10.1109/DASC/PiCom/DataCom/CyberSciTec.2018.00104},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/dasc/TotosisP18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icissp/PatsakisA18,
+ author = {Constantinos Patsakis and
+ Efthimios Alepis},
+ editor = {Paolo Mori and
+ Steven Furnell and
+ Olivier Camp},
+ title = {Knock-Knock: The Unbearable Lightness of Android Notifications},
+ booktitle = {Proceedings of the 4th International Conference on Information Systems
+ Security and Privacy, {ICISSP} 2018, Funchal, Madeira - Portugal,
+ January 22-24, 2018},
+ pages = {52--61},
+ publisher = {SciTePress},
+ year = {2018},
+ url = {https://doi.org/10.5220/0006603200520061},
+ doi = {10.5220/0006603200520061},
+ timestamp = {Wed, 11 Apr 2018 15:27:25 +0200},
+ biburl = {https://dblp.org/rec/conf/icissp/PatsakisA18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/ictai/FasoulisVTPA18,
+ author = {Angelos Fasoulis and
+ Maria Virvou and
+ George A. Tsihrintzis and
+ Constantinos Patsakis and
+ Efthimios Alepis},
+ editor = {Lefteri H. Tsoukalas and
+ {\'{E}}ric Gr{\'{e}}goire and
+ Miltiadis Alamaniotis},
+ title = {Sensus Vox: Sentiment Mapping Through Smartphone Multi-Sensory Crowdsourcing},
+ booktitle = {{IEEE} 30th International Conference on Tools with Artificial Intelligence,
+ {ICTAI} 2018, 5-7 November 2018, Volos, Greece},
+ pages = {438--444},
+ publisher = {{IEEE}},
+ year = {2018},
+ url = {https://doi.org/10.1109/ICTAI.2018.00074},
+ doi = {10.1109/ICTAI.2018.00074},
+ timestamp = {Wed, 16 Oct 2019 14:14:56 +0200},
+ biburl = {https://dblp.org/rec/conf/ictai/FasoulisVTPA18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/CasinoLAAFPS18,
+ author = {Fran Casino and
+ Peio L{\'{o}}pez{-}Iturri and
+ Leyre Azpilicueta and
+ Erik Aguirre and
+ Francisco Falcone and
+ Constantinos Patsakis and
+ Agusti Solanas},
+ title = {Efficient Wireless Channel Characterization in Medicalised Vehicles
+ for Smart Health},
+ booktitle = {9th International Conference on Information, Intelligence, Systems
+ and Applications, {IISA} 2018, Zakynthos, Greece, July 23-25, 2018},
+ pages = {1--6},
+ publisher = {{IEEE} Computer Society},
+ year = {2018},
+ url = {https://doi.org/10.1109/IISA.2018.8633611},
+ doi = {10.1109/IISA.2018.8633611},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/iisa/CasinoLAAFPS18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/DasaklisCP18,
+ author = {Thomas K. Dasaklis and
+ Fran Casino and
+ Constantinos Patsakis},
+ title = {Blockchain Meets Smart Health: Towards Next Generation Healthcare
+ Services},
+ booktitle = {9th International Conference on Information, Intelligence, Systems
+ and Applications, {IISA} 2018, Zakynthos, Greece, July 23-25, 2018},
+ pages = {1--8},
+ publisher = {{IEEE} Computer Society},
+ year = {2018},
+ url = {https://doi.org/10.1109/IISA.2018.8633601},
+ doi = {10.1109/IISA.2018.8633601},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/iisa/DasaklisCP18.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1801-08225,
+ author = {Constantinos Patsakis and
+ Efthimios Alepis},
+ title = {Knock-Knock: The unbearable lightness of Android Notifications},
+ journal = {CoRR},
+ volume = {abs/1801.08225},
+ year = {2018},
+ url = {http://arxiv.org/abs/1801.08225},
+ archivePrefix = {arXiv},
+ eprint = {1801.08225},
+ timestamp = {Mon, 13 Aug 2018 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1801-08225.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @techreport{DBLP:journals/corr/abs-1806-10577,
+ author = {Nikolaos Lykousas and
+ Vicen{\c{c}} G{\'{o}}mez and
+ Constantinos Patsakis},
+ title = {Adult content in Social Live Streaming Services: Characterizing deviant
+ users and relationships},
+ journal = {CoRR},
+ volume = {abs/1806.10577},
+ year = {2018},
+ url = {http://arxiv.org/abs/1806.10577},
+ archivePrefix = {arXiv},
+ eprint = {1806.10577},
+ timestamp = {Mon, 13 Aug 2018 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-1806-10577.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/access/AlepisP17,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {Monkey Says, Monkey Does: Security and Privacy on Voice Assistants},
+ journal = {{IEEE} Access},
+ volume = {5},
+ pages = {17841--17851},
+ year = {2017},
+ url = {https://doi.org/10.1109/ACCESS.2017.2747626},
+ doi = {10.1109/ACCESS.2017.2747626},
+ timestamp = {Fri, 02 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/access/AlepisP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/csr/PolitouAP17,
+ author = {Eugenia A. Politou and
+ Efthimios Alepis and
+ Constantinos Patsakis},
+ title = {A survey on mobile affective computing},
+ journal = {Comput. Sci. Rev.},
+ volume = {25},
+ pages = {79--100},
+ year = {2017},
+ url = {https://doi.org/10.1016/j.cosrev.2017.07.002},
+ doi = {10.1016/j.cosrev.2017.07.002},
+ timestamp = {Fri, 27 Mar 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/csr/PolitouAP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/monet/MorrisPBC17,
+ author = {Alistair Morris and
+ Constantinos Patsakis and
+ M{\'{e}}lanie Bouroche and
+ Vinny Cahill},
+ title = {Context Dissemination for Dynamic Urban-Scale Applications},
+ journal = {{MONET}},
+ volume = {22},
+ number = {2},
+ pages = {305--317},
+ year = {2017},
+ url = {https://doi.org/10.1007/s11036-017-0809-x},
+ doi = {10.1007/s11036-017-0809-x},
+ timestamp = {Fri, 30 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/monet/MorrisPBC17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/software/CasinoPBBM17,
+ author = {Fran Casino and
+ Constantinos Patsakis and
+ Edgar Batista and
+ Frederic Borras and
+ Antoni Mart{\'{\i}}nez{-}Ballest{\'{e}}},
+ title = {Healthy Routes in the Smart City: {A} Context-Aware Mobile Recommender},
+ journal = {{IEEE} Software},
+ volume = {34},
+ number = {6},
+ pages = {42--47},
+ year = {2017},
+ url = {https://doi.org/10.1109/MS.2017.4121209},
+ doi = {10.1109/MS.2017.4121209},
+ timestamp = {Wed, 22 Nov 2017 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/software/CasinoPBBM17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icissp/AlepisP17,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ editor = {Paolo Mori and
+ Steven Furnell and
+ Olivier Camp},
+ title = {There's Wally! Location Tracking in Android without Permissions},
+ booktitle = {Proceedings of the 3rd International Conference on Information Systems
+ Security and Privacy, {ICISSP} 2017, Porto, Portugal, February 19-21,
+ 2017},
+ pages = {278--284},
+ publisher = {SciTePress},
+ year = {2017},
+ url = {https://doi.org/10.5220/0006125502780284},
+ doi = {10.5220/0006125502780284},
+ timestamp = {Thu, 18 May 2017 14:22:34 +0200},
+ biburl = {https://dblp.org/rec/conf/icissp/AlepisP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/ictai/AlepisKP17,
+ author = {Efthimios Alepis and
+ Aristea Kontogianni and
+ Constantinos Patsakis},
+ title = {Mapping the Wireless Coverage Grid for Carrier and User Recommendations
+ through Crowdsourcing},
+ booktitle = {29th {IEEE} International Conference on Tools with Artificial Intelligence,
+ {ICTAI} 2017, Boston, MA, USA, November 6-8, 2017},
+ pages = {822--829},
+ publisher = {{IEEE} Computer Society},
+ year = {2017},
+ url = {https://doi.org/10.1109/ICTAI.2017.00129},
+ doi = {10.1109/ICTAI.2017.00129},
+ timestamp = {Wed, 16 Oct 2019 14:14:56 +0200},
+ biburl = {https://dblp.org/rec/conf/ictai/AlepisKP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/monami/AlepisP17,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ editor = {Jiankun Hu and
+ Ibrahim Khalil and
+ Zahir Tari and
+ Sheng Wen},
+ title = {Persistent vs Service IDs in Android: Session Fingerprinting from
+ Apps},
+ booktitle = {Mobile Networks and Management - 9th International Conference, {MONAMI}
+ 2017, Melbourne, Australia, December 13-15, 2017, Proceedings},
+ series = {Lecture Notes of the Institute for Computer Sciences, Social Informatics
+ and Telecommunications Engineering},
+ volume = {235},
+ pages = {14--29},
+ publisher = {Springer},
+ year = {2017},
+ url = {https://doi.org/10.1007/978-3-319-90775-8\_2},
+ doi = {10.1007/978-3-319-90775-8\_2},
+ timestamp = {Wed, 25 Sep 2019 18:06:18 +0200},
+ biburl = {https://dblp.org/rec/conf/monami/AlepisP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/raid/AlepisP17,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ editor = {Marc Dacier and
+ Michael Bailey and
+ Michalis Polychronakis and
+ Manos Antonakakis},
+ title = {Trapped by the {UI:} The Android Case},
+ booktitle = {Research in Attacks, Intrusions, and Defenses - 20th International
+ Symposium, {RAID} 2017, Atlanta, GA, USA, September 18-20, 2017, Proceedings},
+ series = {Lecture Notes in Computer Science},
+ volume = {10453},
+ pages = {334--354},
+ publisher = {Springer},
+ year = {2017},
+ url = {https://doi.org/10.1007/978-3-319-66332-6\_15},
+ doi = {10.1007/978-3-319-66332-6\_15},
+ timestamp = {Tue, 14 May 2019 10:00:53 +0200},
+ biburl = {https://dblp.org/rec/conf/raid/AlepisP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/spaccs/AlepisP17,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ editor = {Guojun Wang and
+ Mohammed Atiquzzaman and
+ Zheng Yan and
+ Kim{-}Kwang Raymond Choo},
+ title = {The All Seeing Eye: Web to App Intercommunication for Session Fingerprinting
+ in Android},
+ booktitle = {Security, Privacy, and Anonymity in Computation, Communication, and
+ Storage - 10th International Conference, SpaCCS 2017, Guangzhou, China,
+ December 12-15, 2017, Proceedings},
+ series = {Lecture Notes in Computer Science},
+ volume = {10656},
+ pages = {93--107},
+ publisher = {Springer},
+ year = {2017},
+ url = {https://doi.org/10.1007/978-3-319-72389-1\_9},
+ doi = {10.1007/978-3-319-72389-1\_9},
+ timestamp = {Tue, 03 Mar 2020 16:31:00 +0100},
+ biburl = {https://dblp.org/rec/conf/spaccs/AlepisP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/space/AlepisP17,
+ author = {Efthimios Alepis and
+ Constantinos Patsakis},
+ editor = {Sk Subidh Ali and
+ Jean{-}Luc Danger and
+ Thomas Eisenbarth},
+ title = {Hey Doc, Is This Normal?: Exploring Android Permissions in the Post
+ Marshmallow Era},
+ booktitle = {Security, Privacy, and Applied Cryptography Engineering - 7th International
+ Conference, {SPACE} 2017, Goa, India, December 13-17, 2017, Proceedings},
+ series = {Lecture Notes in Computer Science},
+ volume = {10662},
+ pages = {53--73},
+ publisher = {Springer},
+ year = {2017},
+ url = {https://doi.org/10.1007/978-3-319-71501-8\_4},
+ doi = {10.1007/978-3-319-71501-8\_4},
+ timestamp = {Tue, 14 May 2019 10:00:40 +0200},
+ biburl = {https://dblp.org/rec/conf/space/AlepisP17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/corr/CasinoPMBB17,
+ author = {Fran Casino and
+ Constantinos Patsakis and
+ Antoni Mart{\'{\i}}nez{-}Ballest{\'{e}} and
+ Frederic Borras and
+ Edgar Batista},
+ title = {Technical Report: Implementation and Validation of a Smart Health
+ Application},
+ journal = {CoRR},
+ volume = {abs/1706.04109},
+ year = {2017},
+ url = {http://arxiv.org/abs/1706.04109},
+ archivePrefix = {arXiv},
+ eprint = {1706.04109},
+ timestamp = {Mon, 13 Aug 2018 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/CasinoPMBB17.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/comcom/KotzanikolaouPM16,
+ author = {Panayiotis Kotzanikolaou and
+ Constantinos Patsakis and
+ Emmanouil Magkos and
+ Michalis Korakakis},
+ title = {Lightweight private proximity testing for geospatial social networks},
+ journal = {Comput. Commun.},
+ volume = {73},
+ pages = {263--270},
+ year = {2016},
+ url = {https://doi.org/10.1016/j.comcom.2015.07.017},
+ doi = {10.1016/j.comcom.2015.07.017},
+ timestamp = {Thu, 20 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/comcom/KotzanikolaouPM16.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/itpro/DelliosPP16,
+ author = {Kleanthis Dellios and
+ Constantinos Patsakis and
+ Despina Polemi},
+ title = {Automobile 2.0: Reformulating the Automotive Platform as an {IT} System},
+ journal = {{IT} Prof.},
+ volume = {18},
+ number = {5},
+ pages = {48--56},
+ year = {2016},
+ url = {https://doi.org/10.1109/MITP.2016.96},
+ doi = {10.1109/MITP.2016.96},
+ timestamp = {Thu, 12 Mar 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/itpro/DelliosPP16.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/ZigomitrosPP16,
+ author = {Athanasios Zigomitros and
+ Achilleas Papageorgiou and
+ Constantinos Patsakis},
+ editor = {Nikolaos G. Bourbakis and
+ George A. Tsihrintzis and
+ Maria Virvou and
+ Despina Kavraki},
+ title = {A practical k-anonymous recommender system},
+ booktitle = {7th International Conference on Information, Intelligence, Systems
+ {\&} Applications, {IISA} 2016, Chalkidiki, Greece, July 13-15, 2016},
+ pages = {1--4},
+ publisher = {{IEEE}},
+ year = {2016},
+ url = {https://doi.org/10.1109/IISA.2016.7785379},
+ doi = {10.1109/IISA.2016.7785379},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/iisa/ZigomitrosPP16.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/mspn/TsiakosP16,
+ author = {Vasilis Tsiakos and
+ Constantinos Patsakis},
+ editor = {Selma Boumerdassi and
+ {\'{E}}ric Renault and
+ Samia Bouzefrane},
+ title = {AndroPatchApp: Taming Rogue Ads in Android},
+ booktitle = {Mobile, Secure, and Programmable Networking - Second International
+ Conference, {MSPN} 2016, Paris, France, June 1-3, 2016, Revised Selected
+ Papers},
+ series = {Lecture Notes in Computer Science},
+ volume = {10026},
+ pages = {183--196},
+ publisher = {Springer},
+ year = {2016},
+ url = {https://doi.org/10.1007/978-3-319-50463-6\_15},
+ doi = {10.1007/978-3-319-50463-6\_15},
+ timestamp = {Tue, 14 May 2019 10:00:43 +0200},
+ biburl = {https://dblp.org/rec/conf/mspn/TsiakosP16.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/cj/PatsakisZPS15,
+ author = {Constantinos Patsakis and
+ Athanasios Zigomitros and
+ Achilleas Papageorgiou and
+ Agusti Solanas},
+ title = {Privacy and Security for Multimedia Content shared on OSNs: Issues
+ and Countermeasures},
+ journal = {Comput. J.},
+ volume = {58},
+ number = {4},
+ pages = {518--535},
+ year = {2015},
+ url = {https://doi.org/10.1093/comjnl/bxu066},
+ doi = {10.1093/comjnl/bxu066},
+ timestamp = {Fri, 30 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/cj/PatsakisZPS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/computer/PatsakisLCBS15,
+ author = {Constantinos Patsakis and
+ Paul Laird and
+ Michael Clear and
+ M{\'{e}}lanie Bouroche and
+ Agusti Solanas},
+ title = {Interoperable Privacy-Aware E-Participation within Smart Cities},
+ journal = {{IEEE} Computer},
+ volume = {48},
+ number = {1},
+ pages = {52--58},
+ year = {2015},
+ url = {https://doi.org/10.1109/MC.2015.16},
+ doi = {10.1109/MC.2015.16},
+ timestamp = {Fri, 02 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/computer/PatsakisLCBS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/jcss/CasinoDPPS15,
+ author = {Fran Casino and
+ Josep Domingo{-}Ferrer and
+ Constantinos Patsakis and
+ Domenec Puig and
+ Agusti Solanas},
+ title = {A k-anonymous approach to privacy preserving collaborative filtering},
+ journal = {J. Comput. Syst. Sci.},
+ volume = {81},
+ number = {6},
+ pages = {1000--1011},
+ year = {2015},
+ url = {https://doi.org/10.1016/j.jcss.2014.12.013},
+ doi = {10.1016/j.jcss.2014.12.013},
+ timestamp = {Fri, 30 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/jcss/CasinoDPPS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/cbms/PatsakisZS15,
+ author = {Constantinos Patsakis and
+ Athanasios Zigomitros and
+ Agusti Solanas},
+ editor = {Caetano Traina Jr. and
+ Pedro Pereira Rodrigues and
+ Bridget Kane and
+ Paulo Mazzoncini de Azevedo Marques and
+ Agma Juci Machado Traina},
+ title = {Privacy-Aware Genome Mining: Server-Assisted Protocols for Private
+ Set Intersection and Pattern Matching},
+ booktitle = {28th {IEEE} International Symposium on Computer-Based Medical Systems,
+ {CBMS} 2015, Sao Carlos, Brazil, June 22-25, 2015},
+ pages = {276--279},
+ publisher = {{IEEE} Computer Society},
+ year = {2015},
+ url = {https://doi.org/10.1109/CBMS.2015.70},
+ doi = {10.1109/CBMS.2015.70},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/cbms/PatsakisZS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/esorics/PatsakisRCB15,
+ author = {Constantinos Patsakis and
+ Jeroen van Rest and
+ Michal Choras and
+ M{\'{e}}lanie Bouroche},
+ editor = {Joaqu{\'{\i}}n Garc{\'{\i}}a{-}Alfaro and
+ Guillermo Navarro{-}Arribas and
+ Alessandro Aldini and
+ Fabio Martinelli and
+ Neeraj Suri},
+ title = {Privacy-Preserving Biometric Authentication and Matching via Lattice-Based
+ Encryption},
+ booktitle = {Data Privacy Management, and Security Assurance - 10th International
+ Workshop, {DPM} 2015, and 4th International Workshop, {QASA} 2015,
+ Vienna, Austria, September 21-22, 2015. Revised Selected Papers},
+ series = {Lecture Notes in Computer Science},
+ volume = {9481},
+ pages = {169--182},
+ publisher = {Springer},
+ year = {2015},
+ url = {https://doi.org/10.1007/978-3-319-29883-2\_11},
+ doi = {10.1007/978-3-319-29883-2\_11},
+ timestamp = {Mon, 16 Sep 2019 15:23:17 +0200},
+ biburl = {https://dblp.org/rec/conf/esorics/PatsakisRCB15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iccasa/MorrisPCB15,
+ author = {Alistair Morris and
+ Constantinos Patsakis and
+ Vinny Cahill and
+ M{\'{e}}lanie Bouroche},
+ editor = {Phan Cong Vinh and
+ Vangalur S. Alagar},
+ title = {Snapcab: Urban Scale Context-Aware Smart Transport Using Adaptive
+ Context Tries},
+ booktitle = {Context-Aware Systems and Applications - 4th International Conference,
+ {ICCASA} 2015, Vung Tau, Vietnam, November 26-27, 2015, Revised Selected
+ Papers},
+ series = {Lecture Notes of the Institute for Computer Sciences, Social Informatics
+ and Telecommunications Engineering},
+ volume = {165},
+ pages = {31--40},
+ publisher = {Springer},
+ year = {2015},
+ url = {https://doi.org/10.1007/978-3-319-29236-6\_4},
+ doi = {10.1007/978-3-319-29236-6\_4},
+ timestamp = {Fri, 02 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/conf/iccasa/MorrisPCB15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/PapageorgiouZP15,
+ author = {Achilleas Papageorgiou and
+ Athanasios Zigomitros and
+ Constantinos Patsakis},
+ editor = {Nikolaos G. Bourbakis and
+ George A. Tsihrintzis and
+ Maria Virvou},
+ title = {Personalising and crowdsourcing stress management in urban environments
+ via s-Health},
+ booktitle = {6th International Conference on Information, Intelligence, Systems
+ and Applications, {IISA} 2015, Corfu, Greece, July 6-8, 2015},
+ pages = {1--4},
+ publisher = {{IEEE}},
+ year = {2015},
+ url = {https://doi.org/10.1109/IISA.2015.7388027},
+ doi = {10.1109/IISA.2015.7388027},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/iisa/PapageorgiouZP15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/ijcci/LopezSP15,
+ author = {Edgar Galv{\'{a}}n L{\'{o}}pez and
+ Marc Schoenauer and
+ Constantinos Patsakis},
+ editor = {Agostinho C. Rosa and
+ Juan Juli{\'{a}}n Merelo Guerv{\'{o}}s and
+ Ant{\'{o}}nio Dourado and
+ Jos{\'{e}} Manuel Cadenas and
+ Kurosh Madani and
+ Ant{\'{o}}nio E. Ruano and
+ Joaquim Filipe},
+ title = {Design of an Autonomous Intelligent Demand-Side Management System
+ by using Electric Vehicles as Mobile Energy Storage Units by Means
+ of Evolutionary Algorithms},
+ booktitle = {Proceedings of the 7th International Joint Conference on Computational
+ Intelligence {(IJCCI} 2015) - Volume 1: ECTA, Lisbon, Portugal, November
+ 12-14, 2015},
+ pages = {106--115},
+ publisher = {SciTePress},
+ year = {2015},
+ url = {https://doi.org/10.5220/0005607401060115},
+ doi = {10.5220/0005607401060115},
+ timestamp = {Sat, 19 Oct 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/conf/ijcci/LopezSP15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/ijcci/LopezSPT15,
+ author = {Edgar Galv{\'{a}}n L{\'{o}}pez and
+ Marc Schoenauer and
+ Constantinos Patsakis and
+ Leonardo Trujillo},
+ editor = {Juan Juli{\'{a}}n Merelo Guerv{\'{o}}s and
+ Agostinho C. Rosa and
+ Jos{\'{e}} Manuel Cadenas and
+ Ant{\'{o}}nio Dourado Correia and
+ Kurosh Madani and
+ Ant{\'{o}}nio E. Ruano and
+ Joaquim Filipe},
+ title = {Demand-Side Management: Optimising Through Differential Evolution
+ Plug-in Electric Vehicles to Partially Fulfil Load Demand},
+ booktitle = {Computational Intelligence - International Joint Conference, {IJCCI}
+ 2015 Lisbon, Portugal, November 12-14, 2015, Revised Selected Papers},
+ series = {Studies in Computational Intelligence},
+ volume = {669},
+ pages = {155--174},
+ publisher = {Springer},
+ year = {2015},
+ url = {https://doi.org/10.1007/978-3-319-48506-5\_9},
+ doi = {10.1007/978-3-319-48506-5\_9},
+ timestamp = {Fri, 27 Dec 2019 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/conf/ijcci/LopezSPT15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/isc2/CasinoBPS15,
+ author = {Fran Casino and
+ Edgar Batista and
+ Constantinos Patsakis and
+ Agusti Solanas},
+ title = {Context-aware recommender for smart health},
+ booktitle = {{IEEE} First International Smart Cities Conference, {ISC2} 2015, Guadalajara,
+ Mexico, October 25-28, 2015},
+ pages = {1--2},
+ publisher = {{IEEE}},
+ year = {2015},
+ url = {https://doi.org/10.1109/ISC2.2015.7366176},
+ doi = {10.1109/ISC2.2015.7366176},
+ timestamp = {Wed, 16 Oct 2019 14:14:56 +0200},
+ biburl = {https://dblp.org/rec/conf/isc2/CasinoBPS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/memea/PatsakisPFS15,
+ author = {Constantinos Patsakis and
+ Achilleas Papageorgiou and
+ Francisco Falcone and
+ Agusti Solanas},
+ title = {s-health as a driver towards better emergency response systems in
+ urban environments},
+ booktitle = {2015 {IEEE} International Symposium on Medical Measurements and Applications,
+ MeMeA 2015, Torino, Italy, May 7-9, 2015},
+ pages = {214--218},
+ publisher = {{IEEE}},
+ year = {2015},
+ url = {https://doi.org/10.1109/MeMeA.2015.7145201},
+ doi = {10.1109/MeMeA.2015.7145201},
+ timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
+ biburl = {https://dblp.org/rec/conf/memea/PatsakisPFS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/mspn/PatsakisZS15,
+ author = {Constantinos Patsakis and
+ Athanasios Zigomitros and
+ Agusti Solanas},
+ editor = {Selma Boumerdassi and
+ Samia Bouzefrane and
+ {\'{E}}ric Renault},
+ title = {Analysis of Privacy and Security Exposure in Mobile Dating Applications},
+ booktitle = {Mobile, Secure, and Programmable Networking - First International
+ Conference, {MSPN} 2015, Paris, France, June 15-17, 2015, Selected
+ Papers},
+ series = {Lecture Notes in Computer Science},
+ volume = {9395},
+ pages = {151--162},
+ publisher = {Springer},
+ year = {2015},
+ url = {https://doi.org/10.1007/978-3-319-25744-0\_13},
+ doi = {10.1007/978-3-319-25744-0\_13},
+ timestamp = {Sun, 02 Jun 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/conf/mspn/PatsakisZS15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/ngmast/MorrisPDMCB15,
+ author = {Alistair Morris and
+ Constantinos Patsakis and
+ Mauro Dragone and
+ Atif Manzoor and
+ Vinny Cahill and
+ M{\'{e}}lanie Bouroche},
+ editor = {Khalid Al{-}Begain and
+ Nidal AlBeiruti},
+ title = {Urban Scale Context Dissemination in the Internet of Things: Challenge
+ Accepted},
+ booktitle = {9th International Conference on Next Generation Mobile Applications,
+ Services and Technologies, {NGMAST} 2015, Cambridge, United Kingdom,
+ September 9-11, 2015},
+ pages = {84--89},
+ publisher = {{IEEE}},
+ year = {2015},
+ url = {https://doi.org/10.1109/NGMAST.2015.62},
+ doi = {10.1109/NGMAST.2015.62},
+ timestamp = {Wed, 16 Oct 2019 14:14:50 +0200},
+ biburl = {https://dblp.org/rec/conf/ngmast/MorrisPDMCB15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/peccs/SolanasBBMP15,
+ author = {Agusti Solanas and
+ Edgar Batista and
+ Frederic Borras and
+ Antoni Mart{\'{\i}}nez{-}Ballest{\'{e}} and
+ Constantinos Patsakis},
+ editor = {C{\'{e}}sar Benavente{-}Peces and
+ Olivier Paillet and
+ Andreas Ahrens},
+ title = {Wandering Analysis with Mobile Phones - On the Relation Between Randomness
+ and Wandering},
+ booktitle = {{PECCS} 2015 - Proceedings of the 5th International Conference on
+ Pervasive and Embedded Computing and Communication Systems, ESEO,
+ Angers, Loire Valley, France, 11-13 February, 2015},
+ pages = {168--173},
+ publisher = {SciTePress},
+ year = {2015},
+ url = {https://doi.org/10.5220/0005329601680173},
+ doi = {10.5220/0005329601680173},
+ timestamp = {Wed, 16 Oct 2019 14:14:50 +0200},
+ biburl = {https://dblp.org/rec/conf/peccs/SolanasBBMP15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/stm/PatsakisKB15,
+ author = {Constantinos Patsakis and
+ Panayiotis Kotzanikolaou and
+ M{\'{e}}lanie Bouroche},
+ editor = {Sara Foresti},
+ title = {Private Proximity Testing on Steroids: An NTRU-based Protocol},
+ booktitle = {Security and Trust Management - 11th International Workshop, {STM}
+ 2015, Vienna, Austria, September 21-22, 2015, Proceedings},
+ series = {Lecture Notes in Computer Science},
+ volume = {9331},
+ pages = {172--184},
+ publisher = {Springer},
+ year = {2015},
+ url = {https://doi.org/10.1007/978-3-319-24858-5\_11},
+ doi = {10.1007/978-3-319-24858-5\_11},
+ timestamp = {Tue, 14 May 2019 10:00:46 +0200},
+ biburl = {https://dblp.org/rec/conf/stm/PatsakisKB15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/iacr/PatsakisKB15,
+ author = {Constantinos Patsakis and
+ Panayiotis Kotzanikolaou and
+ M{\'{e}}lanie Bouroche},
+ title = {Private Proximity Testing on Steroids: An NTRU-based Protocol},
+ journal = {{IACR} Cryptol. ePrint Arch.},
+ volume = {2015},
+ pages = {917},
+ year = {2015},
+ url = {http://eprint.iacr.org/2015/917},
+ timestamp = {Mon, 11 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/iacr/PatsakisKB15.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/cm/SolanasPCVRFPPPPM14,
+ author = {Agusti Solanas and
+ Constantinos Patsakis and
+ Mauro Conti and
+ Ioannis S. Vlachos and
+ Victoria Ramos and
+ Francisco Falcone and
+ Octavian Postolache and
+ Pablo A. P{\'{e}}rez{-}Mart{\'{\i}}nez and
+ Roberto Di Pietro and
+ Despina N. Perrea and
+ Antoni Mart{\'{\i}}nez{-}Ballest{\'{e}}},
+ title = {Smart health: {A} context-aware health paradigm within smart cities},
+ journal = {{IEEE} Communications Magazine},
+ volume = {52},
+ number = {8},
+ pages = {74--81},
+ year = {2014},
+ url = {https://doi.org/10.1109/MCOM.2014.6871673},
+ doi = {10.1109/MCOM.2014.6871673},
+ timestamp = {Sat, 19 Oct 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/cm/SolanasPCVRFPPPPM14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/cn/PatsakisZPL14,
+ author = {Constantinos Patsakis and
+ Athanasios Zigomitros and
+ Achilleas Papageorgiou and
+ Edgar Galv{\'{a}}n L{\'{o}}pez},
+ title = {Distributing privacy policies over multimedia content across multiple
+ online social networks},
+ journal = {Comput. Networks},
+ volume = {75},
+ pages = {531--543},
+ year = {2014},
+ url = {https://doi.org/10.1016/j.comnet.2014.08.023},
+ doi = {10.1016/j.comnet.2014.08.023},
+ timestamp = {Wed, 19 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/cn/PatsakisZPL14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/compsec/PatsakisDB14,
+ author = {Constantinos Patsakis and
+ Kleanthis Dellios and
+ M{\'{e}}lanie Bouroche},
+ title = {Towards a distributed secure in-vehicle communication architecture
+ for modern vehicles},
+ journal = {Comput. Secur.},
+ volume = {40},
+ pages = {60--74},
+ year = {2014},
+ url = {https://doi.org/10.1016/j.cose.2013.11.003},
+ doi = {10.1016/j.cose.2013.11.003},
+ timestamp = {Thu, 20 Feb 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/compsec/PatsakisDB14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/ett/ManzoorPMMMPCCB14,
+ author = {Atif Manzoor and
+ Constantinos Patsakis and
+ Alistair Morris and
+ Jessica McCarthy and
+ Gabriel Mullarkey and
+ Han Pham and
+ Siobh{\'{a}}n Clarke and
+ Vinny Cahill and
+ M{\'{e}}lanie Bouroche},
+ title = {CityWatch: exploiting sensor data to manage cities better},
+ journal = {Trans. Emerg. Telecommun. Technol.},
+ volume = {25},
+ number = {1},
+ pages = {64--80},
+ year = {2014},
+ url = {https://doi.org/10.1002/ett.2786},
+ doi = {10.1002/ett.2786},
+ timestamp = {Wed, 04 Mar 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/ett/ManzoorPMMMPCCB14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/istr/PirouniasMP14,
+ author = {Sotirios Pirounias and
+ Dimitrios Mermigas and
+ Constantinos Patsakis},
+ title = {The relation between information security events and firm market value,
+ empirical evidence on recent disclosures: An extension of the {GLZ}
+ study},
+ journal = {J. Inf. Secur. Appl.},
+ volume = {19},
+ number = {4-5},
+ pages = {257--271},
+ year = {2014},
+ url = {https://doi.org/10.1016/j.jisa.2014.07.001},
+ doi = {10.1016/j.jisa.2014.07.001},
+ timestamp = {Wed, 04 Mar 2020 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/journals/istr/PirouniasMP14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/cbms/PatsakisCLZB14,
+ author = {Constantinos Patsakis and
+ Michael Clear and
+ Paul Laird and
+ Athanasios Zigomitros and
+ M{\'{e}}lanie Bouroche},
+ title = {Privacy-Aware Large-Scale Virological and Epidemiological Data Monitoring},
+ booktitle = {2014 {IEEE} 27th International Symposium on Computer-Based Medical
+ Systems, New York, NY, USA, May 27-29, 2014},
+ pages = {78--81},
+ publisher = {{IEEE} Computer Society},
+ year = {2014},
+ url = {https://doi.org/10.1109/CBMS.2014.89},
+ doi = {10.1109/CBMS.2014.89},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/cbms/PatsakisCLZB14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/cbms/ZigomitrosSP14,
+ author = {Athanasios Zigomitros and
+ Agusti Solanas and
+ Constantinos Patsakis},
+ title = {The Role of Inference in the Anonymization of Medical Records},
+ booktitle = {2014 {IEEE} 27th International Symposium on Computer-Based Medical
+ Systems, New York, NY, USA, May 27-29, 2014},
+ pages = {88--93},
+ publisher = {{IEEE} Computer Society},
+ year = {2014},
+ url = {https://doi.org/10.1109/CBMS.2014.88},
+ doi = {10.1109/CBMS.2014.88},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/cbms/ZigomitrosSP14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/cisc/PatsakisCL14,
+ author = {Constantinos Patsakis and
+ Michael Clear and
+ Paul Laird},
+ editor = {Dongdai Lin and
+ Moti Yung and
+ Jianying Zhou},
+ title = {Private Aggregation with Custom Collusion Tolerance},
+ booktitle = {Information Security and Cryptology - 10th International Conference,
+ Inscrypt 2014, Beijing, China, December 13-15, 2014, Revised Selected
+ Papers},
+ series = {Lecture Notes in Computer Science},
+ volume = {8957},
+ pages = {72--89},
+ publisher = {Springer},
+ year = {2014},
+ url = {https://doi.org/10.1007/978-3-319-16745-9\_5},
+ doi = {10.1007/978-3-319-16745-9\_5},
+ timestamp = {Tue, 14 May 2019 10:00:52 +0200},
+ biburl = {https://dblp.org/rec/conf/cisc/PatsakisCL14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/LopezLPCC14,
+ author = {Edgar Galv{\'{a}}n L{\'{o}}pez and
+ Ruohua Li and
+ Constantinos Patsakis and
+ Siobh{\'{a}}n Clarke and
+ Vinny Cahill},
+ editor = {Nikolaos G. Bourbakis and
+ George A. Tsihrintzis and
+ Maria Virvou},
+ title = {Heuristic-Based Multi-Agent Monte Carlo Tree Search},
+ booktitle = {5th International Conference on Information, Intelligence, Systems
+ and Applications, {IISA} 2014, Chania, Crete, Greece, July 7-9, 2014},
+ pages = {177--182},
+ publisher = {{IEEE}},
+ year = {2014},
+ url = {https://doi.org/10.1109/IISA.2014.6878747},
+ doi = {10.1109/IISA.2014.6878747},
+ timestamp = {Sat, 19 Oct 2019 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/conf/iisa/LopezLPCC14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/memea/PatsakisVBSB14,
+ author = {Constantinos Patsakis and
+ Riccardo Venanzi and
+ Paolo Bellavista and
+ Agusti Solanas and
+ M{\'{e}}lanie Bouroche},
+ title = {Personalized medical services using smart cities' infrastructures},
+ booktitle = {2014 {IEEE} International Symposium on Medical Measurements and Applications,
+ MeMeA 2014, Lisboa, Portugal, June 11-12, 2014},
+ pages = {665--669},
+ publisher = {{IEEE}},
+ year = {2014},
+ url = {https://doi.org/10.1109/MeMeA.2014.6860145},
+ doi = {10.1109/MeMeA.2014.6860145},
+ timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
+ biburl = {https://dblp.org/rec/conf/memea/PatsakisVBSB14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/sec/QinPB14,
+ author = {Guojun Qin and
+ Constantinos Patsakis and
+ M{\'{e}}lanie Bouroche},
+ editor = {Nora Cuppens{-}Boulahia and
+ Fr{\'{e}}d{\'{e}}ric Cuppens and
+ Sushil Jajodia and
+ Anas Abou El Kalam and
+ Thierry Sans},
+ title = {Playing Hide and Seek with Mobile Dating Applications},
+ booktitle = {{ICT} Systems Security and Privacy Protection - 29th {IFIP} {TC} 11
+ International Conference, {SEC} 2014, Marrakech, Morocco, June 2-4,
+ 2014. Proceedings},
+ series = {{IFIP} Advances in Information and Communication Technology},
+ volume = {428},
+ pages = {185--196},
+ publisher = {Springer},
+ year = {2014},
+ url = {https://doi.org/10.1007/978-3-642-55415-5\_15},
+ doi = {10.1007/978-3-642-55415-5\_15},
+ timestamp = {Wed, 25 Sep 2019 18:08:09 +0200},
+ biburl = {https://dblp.org/rec/conf/sec/QinPB14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/corr/ClearPL14,
+ author = {Michael Clear and
+ Constantinos Patsakis and
+ Paul Laird},
+ title = {Lightweight Self-Bootstrapping Multiparty Computations of Time-Series
+ Data with Custom Collusion Tolerance},
+ journal = {CoRR},
+ volume = {abs/1402.7118},
+ year = {2014},
+ url = {http://arxiv.org/abs/1402.7118},
+ archivePrefix = {arXiv},
+ eprint = {1402.7118},
+ timestamp = {Mon, 13 Aug 2018 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/ClearPL14.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/cm/PatsakisS13,
+ author = {Constantinos Patsakis and
+ Agusti Solanas},
+ title = {Privacy-aware event data recorders: cryptography meets the automotive
+ industry again},
+ journal = {{IEEE} Communications Magazine},
+ volume = {51},
+ number = {12},
+ pages = {122--128},
+ year = {2013},
+ url = {https://doi.org/10.1109/MCOM.2013.6685767},
+ doi = {10.1109/MCOM.2013.6685767},
+ timestamp = {Mon, 05 Jun 2017 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/cm/PatsakisS13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/cbms/Patsakis13,
+ author = {Constantinos Patsakis},
+ editor = {Pedro Pereira Rodrigues and
+ Mykola Pechenizkiy and
+ Jo{\~{a}}o Gama and
+ Ricardo Cruz{-}Correia and
+ Jiming Liu and
+ Agma J. M. Traina and
+ Peter J. F. Lucas and
+ Paolo Soda},
+ title = {A cryptographic approach for monitoring patients with mild cognitive
+ impairment and dementia},
+ booktitle = {Proceedings of the 26th {IEEE} International Symposium on Computer-Based
+ Medical Systems, Porto, Portugal, June 20-22, 2013},
+ pages = {502--505},
+ publisher = {{IEEE} Computer Society},
+ year = {2013},
+ url = {https://doi.org/10.1109/CBMS.2013.6627851},
+ doi = {10.1109/CBMS.2013.6627851},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/cbms/Patsakis13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/csiirw/MermigasPP13,
+ author = {Dimitrios Mermigas and
+ Constantinos Patsakis and
+ Sotirios Pirounias},
+ editor = {Frederick T. Sheldon and
+ Annarita Giani and
+ Axel W. Krings and
+ Robert K. Abercrombie},
+ title = {Quantification of information systems security with stochastic calculus},
+ booktitle = {Cyber Security and Information Intelligence, {CSIIRW} '13, Oak Ridge,
+ TN, USA, January 8-10, 2013},
+ pages = {47},
+ publisher = {{ACM}},
+ year = {2013},
+ url = {https://doi.org/10.1145/2459976.2460030},
+ doi = {10.1145/2459976.2460030},
+ timestamp = {Tue, 06 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/conf/csiirw/MermigasPP13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icebe/CasinoPPS13,
+ author = {Fran Casino and
+ Constantinos Patsakis and
+ Domenec Puig and
+ Agusti Solanas},
+ title = {On Privacy Preserving Collaborative Filtering: Current Trends, Open
+ Problems, and New Issues},
+ booktitle = {{IEEE} 10th International Conference on e-Business Engineering, {ICEBE}
+ 2013, Coventry, United Kingdom, September 11-13, 2013},
+ pages = {244--249},
+ publisher = {{IEEE} Computer Society},
+ year = {2013},
+ url = {https://doi.org/10.1109/ICEBE.2013.37},
+ doi = {10.1109/ICEBE.2013.37},
+ timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
+ biburl = {https://dblp.org/rec/conf/icebe/CasinoPPS13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icebe/PatsakisS13,
+ author = {Constantinos Patsakis and
+ Agusti Solanas},
+ title = {Trading Privacy in the Cloud: {A} Fairer Way to Share Private Information},
+ booktitle = {{IEEE} 10th International Conference on e-Business Engineering, {ICEBE}
+ 2013, Coventry, United Kingdom, September 11-13, 2013},
+ pages = {413--418},
+ publisher = {{IEEE} Computer Society},
+ year = {2013},
+ url = {https://doi.org/10.1109/ICEBE.2013.63},
+ doi = {10.1109/ICEBE.2013.63},
+ timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
+ biburl = {https://dblp.org/rec/conf/icebe/PatsakisS13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icebe/CasinoDPPS13,
+ author = {Fran Casino and
+ Josep Domingo{-}Ferrer and
+ Constantinos Patsakis and
+ Domenec Puig and
+ Agusti Solanas},
+ title = {Privacy Preserving Collaborative Filtering with k-Anonymity through
+ Microaggregation},
+ booktitle = {{IEEE} 10th International Conference on e-Business Engineering, {ICEBE}
+ 2013, Coventry, United Kingdom, September 11-13, 2013},
+ pages = {490--497},
+ publisher = {{IEEE} Computer Society},
+ year = {2013},
+ url = {https://doi.org/10.1109/ICEBE.2013.77},
+ doi = {10.1109/ICEBE.2013.77},
+ timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
+ biburl = {https://dblp.org/rec/conf/icebe/CasinoDPPS13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iisa/PatsakisS13,
+ author = {Constantinos Patsakis and
+ Agusti Solanas},
+ editor = {Nikolaos G. Bourbakis and
+ George A. Tsihrintzis and
+ Maria Virvou},
+ title = {Privacy as a Product: {A} case study in the m-Health sector},
+ booktitle = {4th International Conference on Information, Intelligence, Systems
+ and Applications, {IISA} 2013, Piraeus, Greece, July 10-12, 2013},
+ pages = {1--6},
+ publisher = {{IEEE}},
+ year = {2013},
+ url = {https://doi.org/10.1109/IISA.2013.6623686},
+ doi = {10.1109/IISA.2013.6623686},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/iisa/PatsakisS13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/mobilware/ManzoorPMMCCB13,
+ author = {Atif Manzoor and
+ Constantinos Patsakis and
+ Jessica McCarthy and
+ Gabriel Mullarkey and
+ Siobh{\'{a}}n Clarke and
+ Vinny Cahill and
+ M{\'{e}}lanie Bouroche},
+ title = {Data Sensing and Dissemination Framework for Smart Cities},
+ booktitle = {2013 International Conference on MOBILe Wireless MiddleWARE, Operating
+ Systems, and Applications, Bologna, Italy, November 11-13, 2013},
+ pages = {156--165},
+ publisher = {{IEEE}},
+ year = {2013},
+ url = {https://doi.org/10.1109/Mobilware.2013.19},
+ doi = {10.1109/Mobilware.2013.19},
+ timestamp = {Wed, 16 Oct 2019 14:14:55 +0200},
+ biburl = {https://dblp.org/rec/conf/mobilware/ManzoorPMMCCB13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/mtsr/ZigomitrosP13,
+ author = {Athanasios Zigomitros and
+ Constantinos Patsakis},
+ editor = {Emmanouel Garoufallou and
+ Jane Greenberg},
+ title = {Storing Metadata as {QR} Codes in Multimedia Streams},
+ booktitle = {Metadata and Semantics Research - 7th Research Conference, {MTSR}
+ 2013, Thessaloniki, Greece, November 19-22, 2013. Proceedings},
+ series = {Communications in Computer and Information Science},
+ volume = {390},
+ pages = {152--162},
+ publisher = {Springer},
+ year = {2013},
+ url = {https://doi.org/10.1007/978-3-319-03437-9\_16},
+ doi = {10.1007/978-3-319-03437-9\_16},
+ timestamp = {Sat, 19 Oct 2019 20:01:02 +0200},
+ biburl = {https://dblp.org/rec/conf/mtsr/ZigomitrosP13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/secrypt/Patsakis13,
+ author = {Constantinos Patsakis},
+ editor = {Pierangela Samarati},
+ title = {Recovering {RSA} Private Keys on Implementations with Tampered LSBs},
+ booktitle = {{SECRYPT} 2013 - Proceedings of the 10th International Conference
+ on Security and Cryptography, Reykjav{\'{\i}}k, Iceland, 29-31 July,
+ 2013},
+ pages = {453--460},
+ publisher = {SciTePress},
+ year = {2013},
+ url = {http://ieeexplore.ieee.org/document/7223197/},
+ timestamp = {Sun, 30 Apr 2017 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/conf/secrypt/Patsakis13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/iacr/Patsakis13,
+ author = {Constantinos Patsakis},
+ title = {{RSA} private key reconstruction from random bits using {SAT} solvers},
+ journal = {{IACR} Cryptol. ePrint Arch.},
+ volume = {2013},
+ pages = {26},
+ year = {2013},
+ url = {http://eprint.iacr.org/2013/026},
+ timestamp = {Mon, 11 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/iacr/Patsakis13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/iacr/PatsakisS13,
+ author = {Constantinos Patsakis and
+ Agusti Solanas},
+ title = {An Efficient Scheme for Centralized Group Key Management in Collaborative
+ Environments},
+ journal = {{IACR} Cryptol. ePrint Arch.},
+ volume = {2013},
+ pages = {489},
+ year = {2013},
+ url = {http://eprint.iacr.org/2013/489},
+ timestamp = {Mon, 11 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/iacr/PatsakisS13.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/iacr/Patsakis13a,
+ author = {Constantinos Patsakis},
+ title = {Anonymous aggregation for lightweight multiparty computations},
+ journal = {{IACR} Cryptol. ePrint Arch.},
+ volume = {2013},
+ pages = {661},
+ year = {2013},
+ url = {http://eprint.iacr.org/2013/661},
+ timestamp = {Mon, 11 May 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/iacr/Patsakis13a.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iih-msp/Patsakis12,
+ author = {Constantinos Patsakis},
+ editor = {George A. Tsihrintzis and
+ Jeng{-}Shyang Pan and
+ Hsiang{-}Cheh Huang and
+ Maria Virvou and
+ Lakhmi C. Jain},
+ title = {Steganalysis of Statistical Restored Stegoimages with Compressive
+ Sensing},
+ booktitle = {Eighth International Conference on Intelligent Information Hiding
+ and Multimedia Signal Processing, {IIH-MSP} 2012, Piraeus-Athens,
+ Greece, July 18-20, 2012},
+ pages = {498--501},
+ publisher = {{IEEE}},
+ year = {2012},
+ url = {https://doi.org/10.1109/IIH-MSP.2012.126},
+ doi = {10.1109/IIH-MSP.2012.126},
+ timestamp = {Mon, 06 Apr 2020 19:01:12 +0200},
+ biburl = {https://dblp.org/rec/conf/iih-msp/Patsakis12.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/secrypt/PatsakisD12,
+ author = {Constantinos Patsakis and
+ Kleanthis Dellios},
+ editor = {Pierangela Samarati and
+ Wenjing Lou and
+ Jianying Zhou},
+ title = {Securing In-vehicle Communication and Redefining the Role of Automotive
+ Immobilizer},
+ booktitle = {{SECRYPT} 2012 - Proceedings of the International Conference on Security
+ and Cryptography, Rome, Italy, 24-27 July, 2012, {SECRYPT} is part
+ of {ICETE} - The International Joint Conference on e-Business and
+ Telecommunications},
+ pages = {221--226},
+ publisher = {SciTePress},
+ year = {2012},
+ timestamp = {Tue, 07 Nov 2017 12:02:58 +0100},
+ biburl = {https://dblp.org/rec/conf/secrypt/PatsakisD12.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/trustcom/ZigomitrosPP12,
+ author = {Athanasios Zigomitros and
+ Achilleas Papageorgiou and
+ Constantinos Patsakis},
+ editor = {Geyong Min and
+ Yulei Wu and
+ Lei (Chris) Liu and
+ Xiaolong Jin and
+ Stephen A. Jarvis and
+ Ahmed Yassin Al{-}Dubai},
+ title = {Social Network Content Management through Watermarking},
+ booktitle = {11th {IEEE} International Conference on Trust, Security and Privacy
+ in Computing and Communications, TrustCom 2012, Liverpool, United
+ Kingdom, June 25-27, 2012},
+ pages = {1381--1386},
+ publisher = {{IEEE} Computer Society},
+ year = {2012},
+ url = {https://doi.org/10.1109/TrustCom.2012.264},
+ doi = {10.1109/TrustCom.2012.264},
+ timestamp = {Wed, 16 Oct 2019 14:14:49 +0200},
+ biburl = {https://dblp.org/rec/conf/trustcom/ZigomitrosPP12.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iih-msp/PatsakisA11,
+ author = {Constantinos Patsakis and
+ Nikolaos Aroukatos},
+ editor = {Xiamu Niu and
+ Mingchu Li and
+ Y{\^{o}}iti Suzuki and
+ Jeng{-}Shyang Pan and
+ Lakhmi C. Jain},
+ title = {A {DCT} Steganographic Classifier Based on Compressive Sensing},
+ booktitle = {Seventh International Conference on Intelligent Information Hiding
+ and Multimedia Signal Processing, {IIH-MSP} 2011, Dalian, China, October
+ 14-16, 2011},
+ pages = {169--172},
+ publisher = {{IEEE} Computer Society},
+ year = {2011},
+ url = {https://doi.org/10.1109/IIHMSP.2011.102},
+ doi = {10.1109/IIHMSP.2011.102},
+ timestamp = {Mon, 06 Apr 2020 19:01:11 +0200},
+ biburl = {https://dblp.org/rec/conf/iih-msp/PatsakisA11.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @article{DBLP:journals/idt/PatsakisA10,
+ author = {Constantinos Patsakis and
+ Nikolaos Alexandris},
+ title = {Enhancing 2D GUIs with 3D input devices},
+ journal = {Intell. Decis. Technol.},
+ volume = {4},
+ number = {3},
+ pages = {211--216},
+ year = {2010},
+ url = {https://doi.org/10.3233/IDT-2010-0081},
+ doi = {10.3233/IDT-2010-0081},
+ timestamp = {Sat, 25 Apr 2020 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/journals/idt/PatsakisA10.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iih-msp/PatsakisA10,
+ author = {Constantinos Patsakis and
+ Nikolaos Alexandris},
+ editor = {Isao Echizen and
+ Jeng{-}Shyang Pan and
+ Dieter W. Fellner and
+ Alexander Nouak and
+ Arjan Kuijper and
+ Lakhmi C. Jain},
+ title = {A New {SETUP} for Factoring Based Algorithms},
+ booktitle = {Sixth International Conference on Intelligent Information Hiding and
+ Multimedia Signal Processing {(IIH-MSP} 2010), Darmstadt, Germany,
+ 15-17 October, 2010, Proceedings},
+ pages = {200--203},
+ publisher = {{IEEE} Computer Society},
+ year = {2010},
+ url = {https://doi.org/10.1109/IIHMSP.2010.57},
+ doi = {10.1109/IIHMSP.2010.57},
+ timestamp = {Mon, 06 Apr 2020 19:01:12 +0200},
+ biburl = {https://dblp.org/rec/conf/iih-msp/PatsakisA10.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/icn/PatsakisAC09,
+ author = {Constantinos Patsakis and
+ Alexandros Asthenidis and
+ Abraham Chatzidimitriou},
+ editor = {Robert Bestak and
+ Laurent George and
+ Vladimir S. Zaborovsky and
+ Cosmin Dini},
+ title = {Social Networks as an Attack Platform: Facebook Case Study},
+ booktitle = {The Eighth International Conference on Networks, {ICN} 2009, 1-6 March
+ 2009, Gosier, Guadeloupe, France},
+ pages = {245--247},
+ publisher = {{IEEE} Computer Society},
+ year = {2009},
+ url = {https://doi.org/10.1109/ICN.2009.77},
+ doi = {10.1109/ICN.2009.77},
+ timestamp = {Wed, 16 Oct 2019 14:14:53 +0200},
+ biburl = {https://dblp.org/rec/conf/icn/PatsakisAC09.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iih-msp/PatsakisF09,
+ author = {Constantinos Patsakis and
+ Evangellos Fountas},
+ editor = {Jeng{-}Shyang Pan and
+ Yen{-}Wei Chen and
+ Lakhmi C. Jain},
+ title = {Creating {RSA} Trapdoors Using Lagrange Four Square Theorem},
+ booktitle = {Fifth International Conference on Intelligent Information Hiding and
+ Multimedia Signal Processing {(IIH-MSP} 2009), Kyoto, Japan, 12-14
+ September, 2009, Proceedings},
+ pages = {779--782},
+ publisher = {{IEEE} Computer Society},
+ year = {2009},
+ url = {https://doi.org/10.1109/IIH-MSP.2009.235},
+ doi = {10.1109/IIH-MSP.2009.235},
+ timestamp = {Mon, 06 Apr 2020 19:01:12 +0200},
+ biburl = {https://dblp.org/rec/conf/iih-msp/PatsakisF09.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/iimss/PatsakisAF09,
+ author = {Constantinos Patsakis and
+ Nikolaos Alexandris and
+ Elina Flerianou},
+ editor = {Ernesto Damiani and
+ Jechang Jeong and
+ Robert J. Howlett and
+ Lakhmi C. Jain},
+ title = {Enhancing 2D environments with 3D data input},
+ booktitle = {New Directions in Intelligent Interactive Multimedia Systems and Services,
+ Proceedings of the 2nd International Symposium on Intelligent Interactive
+ Multimedia Systems and Services, {KES} {IIMSS} 2009, Mogliano Veneto,
+ Italy, July 16-17, 2009},
+ series = {Studies in Computational Intelligence},
+ volume = {226},
+ pages = {321--326},
+ publisher = {Springer},
+ year = {2009},
+ url = {https://doi.org/10.1007/978-3-642-02937-0\_29},
+ doi = {10.1007/978-3-642-02937-0\_29},
+ timestamp = {Fri, 02 Nov 2018 00:00:00 +0100},
+ biburl = {https://dblp.org/rec/conf/iimss/PatsakisAF09.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @inproceedings{DBLP:conf/jckbse/PatsakisA08,
+ author = {Constantinos Patsakis and
+ Nikolaos Alexandris},
+ editor = {Maria Virvou and
+ Taichi Nakamura},
+ title = {Torrent worms},
+ booktitle = {Knowledge-Based Software Engineering, Proceedings of the Eighth Joint
+ Conference on Knowledge-Based Software Engineering, {JCKBSE} 2008,
+ August 25-28, 2008, University of Piraeus, Piraeus, Greece},
+ series = {Frontiers in Artificial Intelligence and Applications},
+ volume = {180},
+ pages = {108--112},
+ publisher = {{IOS} Press},
+ year = {2008},
+ url = {https://doi.org/10.3233/978-1-58603-900-4-108},
+ doi = {10.3233/978-1-58603-900-4-108},
+ timestamp = {Sun, 04 Jun 2017 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/conf/jckbse/PatsakisA08.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+ @incollection{DBLP:series/sci/PatsakisA08,
+ author = {Constantinos Patsakis and
+ Nikolaos Alexandris},
+ editor = {George A. Tsihrintzis and
+ Maria Virvou and
+ Robert J. Howlett and
+ Lakhmi C. Jain},
+ title = {Histographic Steganographic System},
+ booktitle = {New Directions in Intelligent Interactive Multimedia},
+ series = {Studies in Computational Intelligence},
+ volume = {142},
+ pages = {67--73},
+ publisher = {Springer},
+ year = {2008},
+ url = {https://doi.org/10.1007/978-3-540-68127-4\_7},
+ doi = {10.1007/978-3-540-68127-4\_7},
+ timestamp = {Fri, 09 Jun 2017 01:00:00 +0200},
+ biburl = {https://dblp.org/rec/series/sci/PatsakisA08.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Contact details
+
+
+
+
+
+
+
+
+
+
Address:
+ Office 540, 5th floor
+ Department of Informatics University of Piraeus 80, Karaoli & Dimitriou str. Piraeus 18534, Greece.
+
+
+
Phone:
+ +30-210-414-2261
+
+
+
email:
+ kpatsak@unipi.gr
+
+
+
Hours:
Will be announced once the semister schedule is published by the university.
+
+
The InterPlanetary File System (IPFS) is an advanced distributed P2P system for retrieving and sharing content on the Internet. Contrary to the client-server that is used by the HTTP and the inherent
+ drawbacks that it impedes, IPFS introduces a novel P2P file sharing system to address them.
+
Despite its advanced features, as stated in our publication with Fran Casino [1]:
+
IPFS can provide anonymity, persistence of the content, fast delivery, and a robust network where content cannot be easily blocked, provides an ideal landscape for malware authors.
+
+
+
IPFS is currently being abused by IPStorm malware, a botnet that controls Windows, Android, Linux, and Mac devices. The malware was initially identified by Anomali in May 2019. It is written in Go and uses IPFS for communication of the nodes and sending
+ commands to the infected devices. A comprehensive analysis of the malware is provided by Bitdefender.
+
+
This webpage offers a daily tracker of the botnet with data collected directly collected from IPFS using the approach of crawler of Henningsen et al. To facilitate practitioners, we provide
+ a daily map by country of the IPs used by IPStorm and a CSV export with the corresponding IPs.
+
+
References
+
+
+
Patsakis, C., Casino, F. Hydras and IPFS: a decentralised playground for malware. Int. J. Inf. Secur. 18, 787–799 (2019). https://doi.org/10.1007/s10207-019-00443-0
+
S. Henningsen, M. Florian, S. Rust and B. Scheuermann, "Mapping the Interplanetary Filesystem," 2020 IFIP Networking Conference (Networking), Paris, France, 2020, pp. 289-297.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/old/ipstorm/js/pie.js b/old/ipstorm/js/pie.js
new file mode 100644
index 0000000..0428ef4
--- /dev/null
+++ b/old/ipstorm/js/pie.js
@@ -0,0 +1,27 @@
+// Create chart instance
+var chart = am4core.create("piediv", am4charts.PieChart);
+
+var title = chart.titles.create();
+title.text = "Ratio of IPStorm nodes";
+title.fontSize = 25;
+title.marginBottom = 30;
+
+// Add data
+chart.data = [{
+ "status": "Benign",
+ "perc": 14808
+}, {
+ "status": "Malicious",
+ "perc": 3224
+}];
+
+// Add and configure Series
+var pieSeries = chart.series.push(new am4charts.PieSeries());
+pieSeries.dataFields.value = "perc";
+pieSeries.dataFields.category = "status";
+
+var colorSet = new am4core.ColorSet();
+colorSet.list = ["#0288d1", "#e91e63"].map(function(color) {
+ return new am4core.color(color);
+});
+pieSeries.colors = colorSet;
diff --git a/old/ipstorm/js/world.js b/old/ipstorm/js/world.js
new file mode 100644
index 0000000..d83979e
--- /dev/null
+++ b/old/ipstorm/js/world.js
@@ -0,0 +1,44 @@
+// Create map instance
+var chart = am4core.create("worlddiv", am4maps.MapChart);
+
+var title = chart.titles.create();
+title.text = "Distribution of IPStorm nodes";
+title.fontSize = 25;
+title.marginBottom = 30;
+
+// Set map definition
+chart.geodata = am4geodata_worldLow;
+
+// Set projection
+chart.projection = new am4maps.projections.Miller();
+
+// Create map polygon series
+var polygonSeries = chart.series.push(new am4maps.MapPolygonSeries());
+
+// Make map load polygon (like country names) data from GeoJSON
+polygonSeries.useGeodata = true;
+
+// Configure series
+var polygonTemplate = polygonSeries.mapPolygons.template;
+polygonTemplate.tooltipText = "{name}";
+polygonTemplate.fill = am4core.color("#999");
+
+// Create hover state and set alternative fill color
+var hs = polygonTemplate.states.create("hover");
+hs.properties.fill = am4core.color("#0b0b0b");
+
+// Remove Antarctica
+polygonSeries.exclude = ["AQ"];
+
+// Add heat rule
+polygonSeries.heatRules.push({
+ "property": "fill",
+ "target": polygonSeries.mapPolygons.template,
+ "min": am4core.color("#999"),
+ "max": am4core.color("#e91e63")
+});
+
+// Add expectancy data
+//
+// chart.dataSource.url ="country_stats.json";
+polygonSeries.data = [{'id': 'HK', 'value': 735}, {'id': 'UA', 'value': 173}, {'id': 'PA', 'value': 80}, {'id': 'SG', 'value': 32}, {'id': 'KR', 'value': 420}, {'id': 'VN', 'value': 39}, {'id': 'US', 'value': 151}, {'id': 'BR', 'value': 149}, {'id': 'BE', 'value': 4}, {'id': 'GB', 'value': 6}, {'id': 'VE', 'value': 62}, {'id': 'UY', 'value': 28}, {'id': 'TW', 'value': 263}, {'id': 'MO', 'value': 14}, {'id': 'SE', 'value': 155}, {'id': 'CL', 'value': 93}, {'id': 'CN', 'value': 202}, {'id': 'CA', 'value': 85}, {'id': 'RU', 'value': 120}, {'id': 'FR', 'value': 43}, {'id': 'LC', 'value': 1}, {'id': 'RO', 'value': 4}, {'id': 'ES', 'value': 55}, {'id': 'AZ', 'value': 2}, {'id': 'BG', 'value': 14}, {'id': 'SI', 'value': 10}, {'id': 'EC', 'value': 8}, {'id': 'LT', 'value': 5}, {'id': 'PL', 'value': 6}, {'id': 'LV', 'value': 31}, {'id': 'DE', 'value': 20}, {'id': 'DK', 'value': 6}, {'id': 'KZ', 'value': 21}, {'id': 'MK', 'value': 1}, {'id': 'GU', 'value': 2}, {'id': 'BA', 'value': 1}, {'id': 'BY', 'value': 2}, {'id': 'PT', 'value': 9}, {'id': 'MY', 'value': 14}, {'id': 'ZA', 'value': 1}, {'id': 'CH', 'value': 2}, {'id': 'TR', 'value': 4}, {'id': 'IT', 'value': 18}, {'id': 'CY', 'value': 11}, {'id': 'GE', 'value': 4}, {'id': 'JP', 'value': 2}, {'id': 'NO', 'value': 31}, {'id': 'MD', 'value': 6}, {'id': 'IE', 'value': 3}, {'id': 'BS', 'value': 2}, {'id': 'DZ', 'value': 3}, {'id': 'AW', 'value': 1}, {'id': 'AE', 'value': 1}, {'id': 'NL', 'value': 1}, {'id': 'IL', 'value': 1}, {'id': 'HN', 'value': 1}, {'id': 'RS', 'value': 3}, {'id': 'CW', 'value': 2}, {'id': 'AR', 'value': 3}, {'id': 'TN', 'value': 1}, {'id': 'MX', 'value': 5}, {'id': 'MT', 'value': 1}, {'id': 'AU', 'value': 5}, {'id': 'CO', 'value': 1}, {'id': 'NG', 'value': 1}, {'id': 'IN', 'value': 2}, {'id': 'PR', 'value': 1}, {'id': 'PY', 'value': 3}, {'id': 'CZ', 'value': 1}, {'id': 'FI', 'value': 2}, {'id': 'AM', 'value': 1}, {'id': 'TH', 'value': 2}, {'id': 'UZ', 'value': 1}, {'id': 'PK', 'value': 2}, {'id': 'NA', 'value': 1}, {'id': 'BD', 'value': 1}, {'id': 'SN', 'value': 1}, {'id': 'JM', 'value': 1}];
diff --git a/old/js/academicons.eot b/old/js/academicons.eot
new file mode 100755
index 0000000..aeac709
Binary files /dev/null and b/old/js/academicons.eot differ
diff --git a/old/js/academicons.svg b/old/js/academicons.svg
new file mode 100755
index 0000000..2599b71
--- /dev/null
+++ b/old/js/academicons.svg
@@ -0,0 +1,107 @@
+
+
+
\ No newline at end of file
diff --git a/old/js/academicons.ttf b/old/js/academicons.ttf
new file mode 100755
index 0000000..4f42f95
Binary files /dev/null and b/old/js/academicons.ttf differ
diff --git a/old/js/academicons.woff b/old/js/academicons.woff
new file mode 100755
index 0000000..11bb0c8
Binary files /dev/null and b/old/js/academicons.woff differ
diff --git a/old/js/bib-list.js b/old/js/bib-list.js
new file mode 100644
index 0000000..0a8c3a8
--- /dev/null
+++ b/old/js/bib-list.js
@@ -0,0 +1,5027 @@
+/*!*
+ * Javascript BibTex Parser v0.1
+ * Copyright (c) 2008 Simon Fraser University
+ * @author Steve Hannah
+ *
+ *
+ * License:
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ *
+ * Credits:
+ *
+ * This library is a port of the PEAR Structures_BibTex parser written
+ * in PHP (http://pear.php.net/package/Structures_BibTex).
+ *
+ * In order to make porting the parser into javascript easier, I have made
+ * use of many phpjs functions, which are distributed here under the MIT License:
+ *
+ *
+ * More info at: http://kevin.vanzonneveld.net/techblog/category/php2js
+ *
+ * php.js is copyright 2008 Kevin van Zonneveld.
+ *
+ * Portions copyright Ates Goral (http://magnetiq.com), Legaev Andrey,
+ * _argos, Jonas Raoni Soares Silva (http://www.jsfromhell.com),
+ * Webtoolkit.info (http://www.webtoolkit.info/), Carlos R. L. Rodrigues, Ash
+ * Searle (http://hexmen.com/blog/), Tyler Akins (http://rumkin.com), mdsjack
+ * (http://www.mdsjack.bo.it), Alexander Ermolaev
+ * (http://snippets.dzone.com/user/AlexanderErmolaev), Andrea Giammarchi
+ * (http://webreflection.blogspot.com), Bayron Guevara, Cord, David, Karol
+ * Kowalski, Leslie Hoare, Lincoln Ramsay, Mick@el, Nick Callen, Peter-Paul
+ * Koch (http://www.quirksmode.org/js/beat.html), Philippe Baumann, Steve
+ * Clay, booeyOH
+ *
+ * Licensed under the MIT (MIT-LICENSE.txt) license.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *
+ * Synopsis:
+ * ----------
+ *
+ * This class provides the following functionality:
+ * 1. Parse BibTex into a logical data javascript data structure.
+ * 2. Output parsed BibTex entries as HTML, RTF, or BibTex.
+ *
+ *
+ * The following usage instructions have been copyed and adapted from the PHP instructions located
+ * at http://pear.php.net/manual/en/package.structures.structures-bibtex.intro.php
+ * Introduction
+ * --------------
+ * Overview
+ * ----------
+ * This package provides methods to access information stored in a BibTex
+ * file. During parsing it is possible to let the data be validated. In
+ * addition. the creation of BibTex Strings as well as RTF Strings is also
+ * supported. A few examples
+ *
+ * Example 1. Loading a BibTex File and printing the parsed array
+ *
+ *
+ *
+ *
+ * Options
+ * --------
+ * Options can be set either in the constructor or with the method
+ * setOption(). When setting in the constructor the options are given in an
+ * associative array. The options are:
+ *
+ * - stripDelimiter (default: true) Stripping the delimiter surrounding the entries.
+ * - validate (default: true) Validation while parsing.
+ * - unwrap (default: false) Unwrapping entries while parsing.
+ * - wordWrapWidth (default: false) If set to a number higher one
+ * that the entries are wrapped after that amount of characters.
+ * - wordWrapBreak (default: \n) String used to break the line (attached to the line).
+ * - wordWrapCut (default: 0) If set to zero the line will we
+ * wrapped at the next possible space, if set to one the line will be
+ * wrapped exactly after the given amount of characters.
+ * - removeCurlyBraces (default: false) If set to true Curly Braces will be removed.
+ *
+ * Example of setting options in the constructor:
+ *
+ * Example 2. Setting options in the constructor
+ * bibtex = new BibTex({'validate':false, 'unwrap':true});
+ *
+ *
+ * Example of setting options using the method setOption():
+ *
+ * Example 62-3. Setting options using setOption
+ * bibtex = new BibTex();
+ * bibtex.setOption('validate', false);
+ * bibtex.setOption('unwrap', true);
+ *
+ * Stored Data
+ * ------------
+ * The data is stored in the class variable data. This is a a list where
+ * each entry is a hash table representing one bibtex-entry. The keys of
+ * the hash table correspond to the keys used in bibtex and the values are
+ * the corresponding values. Some of these keys are:
+ *
+ * - cite - The key used in a LaTeX source to do the citing.
+ * - entryType - The type of the entry, like techreport, book and so on.
+ * - author - One or more authors of the entry. This entry is also a
+ * list with hash tables representing the authors as entries. The
+ * author has table is explained later.
+ * - title - Title of the entry.
+ *
+ * Author
+ * ------
+ * As described before the authors are stored in a list. Every entry
+ * representing one author as a has table. The hash table consits of four
+ * keys: first, von, last and jr. The keys are explained in the following
+ * list:
+ *
+ * - first - The first name of the author.
+ * - von - Some names have a 'von' part in their name. This is usually a sign of nobleness.
+ * - last - The last name of the author.
+ * - jr - Sometimes a author is the son of his father and has the
+ * same name, then the value would be jr. The same is true for the
+ * value sen but vice versa.
+ *
+ * Adding an entry
+ * ----------------
+ * To add an entry simply create a hash table with the needed keys and
+ * values and call the method addEntry().
+ * Example 4. Adding an entry
+ * bibtex = new BibTex();
+ * var addarray = {};
+ * addarray['entryType'] = 'Article';
+ * addarray['cite'] = 'art2';
+ * addarray['title'] = 'Titel of the Article';
+ * addarray['author'] = [];
+ * addarray['author'][0]['first'] = 'John';
+ * addarray['author'][0]['last'] = 'Doe';
+ * addarray['author'][1]['first'] = 'Jane';
+ * addarray['author'][1]['last'] = 'Doe';
+ * bibtex.addEntry(addarray);
+ */
+
+// ------------BEGIN PHP FUNCTIONS -------------------------------------------------------------- //
+
+// {{{ array
+function array() {
+ // #!#!#!#!# array::$descr1 does not contain valid 'array' at line 258
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_array/
+ // + version: 805.1716
+ // + original by: d3x
+ // * example 1: array('Kevin', 'van', 'Zonneveld');
+ // * returns 1: ['Kevin', 'van', 'Zonneveld'];
+
+ return Array.prototype.slice.call(arguments);
+} // }}}
+
+// {{{ array_key_exists
+function array_key_exists(key, search) {
+ // Checks if the given key or index exists in the array
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_array_key_exists/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: Felix Geisendoerfer (http://www.debuggable.com/felix)
+ // * example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'});
+ // * returns 1: true
+
+ // input sanitation
+ if (!search || (search.constructor !== Array && search.constructor !== Object)) {
+ return false;
+ }
+
+ return key in search;
+} // }}}// {{{ array_keys
+function array_keys(input, search_value, strict) {
+ // Return all the keys of an array
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_array_keys/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: array_keys( {firstname: 'Kevin', surname: 'van Zonneveld'} );
+ // * returns 1: {0: 'firstname', 1: 'surname'}
+
+ var tmp_arr = new Array(),
+ strict = !!strict,
+ include = true,
+ cnt = 0;
+
+ for (key in input) {
+ include = true;
+ if (search_value != undefined) {
+ if (strict && input[key] !== search_value) {
+ include = false;
+ } else if (input[key] != search_value) {
+ include = false;
+ }
+ }
+
+ if (include) {
+ tmp_arr[cnt] = key;
+ cnt++;
+ }
+ }
+
+ return tmp_arr;
+} // }}}
+
+// {{{ array_values
+function array_values(input) {
+ // From: http://phpjs.org/functions
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: Brett Zamir (http://brett-zamir.me)
+ // * example 1: array_values( {firstname: 'Kevin', surname: 'van Zonneveld'} );
+ // * returns 1: {0: 'Kevin', 1: 'van Zonneveld'}
+ var tmp_arr = [],
+ key = '';
+
+ if (input && typeof input === 'object' && input.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array
+ return input.values();
+ }
+
+ for (key in input) {
+ tmp_arr[tmp_arr.length] = input[key];
+ }
+
+ return tmp_arr;
+}
+// }}}
+
+// {{{ in_array
+function in_array(needle, haystack, strict) {
+ // Checks if a value exists in an array
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_in_array/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
+ // * returns 1: true
+
+ var found = false,
+ key, strict = !!strict;
+
+ for (key in haystack) {
+ if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
+ found = true;
+ break;
+ }
+ }
+
+ return found;
+} // }}}
+
+// {{{ sizeof
+function sizeof(mixed_var, mode) {
+ // Alias of count()
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_sizeof/
+ // + version: 804.1712
+ // + original by: Philip Peterson
+ // - depends on: count
+ // * example 1: sizeof([[0,0],[0,-4]], 'COUNT_RECURSIVE');
+ // * returns 1: 6
+ // * example 2: sizeof({'one' : [1,2,3,4,5]}, 'COUNT_RECURSIVE');
+ // * returns 2: 6
+
+ return count(mixed_var, mode);
+} // }}}
+
+// {{{ count
+function count(mixed_var, mode) {
+ // Count elements in an array, or properties in an object
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_count/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + input by: _argos
+ // * example 1: count([[0,0],[0,-4]], 'COUNT_RECURSIVE');
+ // * returns 1: 6
+ // * example 2: count({'one' : [1,2,3,4,5]}, 'COUNT_RECURSIVE');
+ // * returns 2: 6
+
+ var key, cnt = 0;
+
+ if (mode == 'COUNT_RECURSIVE') mode = 1;
+ if (mode != 1) mode = 0;
+
+ for (key in mixed_var) {
+ cnt++;
+ if (mode == 1 && mixed_var[key] && (mixed_var[key].constructor === Array || mixed_var[key].constructor === Object)) {
+ cnt += count(mixed_var[key], 1);
+ }
+ }
+
+ return cnt;
+} // }}}
+
+// {{{ explode
+function explode(delimiter, string, limit) {
+ // Split a string by string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_explode/
+ // + version: 805.1715
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: kenneth
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: d3x
+ // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: explode(' ', 'Kevin van Zonneveld');
+ // * returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
+ // * example 2: explode('=', 'a=bc=d', 2);
+ // * returns 2: ['a', 'bc=d']
+
+ var emptyArray = {
+ 0: ''
+ };
+
+ // third argument is not required
+ if (arguments.length < 2 ||
+ typeof arguments[0] == 'undefined' ||
+ typeof arguments[1] == 'undefined') {
+ return null;
+ }
+
+ if (delimiter === '' ||
+ delimiter === false ||
+ delimiter === null) {
+ return false;
+ }
+
+ if (typeof delimiter == 'function' ||
+ typeof delimiter == 'object' ||
+ typeof string == 'function' ||
+ typeof string == 'object') {
+ return emptyArray;
+ }
+
+ if (delimiter === true) {
+ delimiter = '1';
+ }
+
+ if (!limit) {
+ return string.toString().split(delimiter.toString());
+ } else {
+ // support for limit argument
+ var splitted = string.toString().split(delimiter.toString());
+ var partA = splitted.splice(0, limit - 1);
+ var partB = splitted.join(delimiter.toString());
+ partA.push(partB);
+ return partA;
+ }
+} // }}}
+
+// {{{ implode
+function implode(glue, pieces) {
+ // Join array elements with a string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_implode/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: _argos
+ // * example 1: implode(' ', ['Kevin', 'van', 'Zonneveld']);
+ // * returns 1: 'Kevin van Zonneveld'
+
+ return ((pieces instanceof Array) ? pieces.join(glue) : pieces);
+} // }}}
+
+// {{{ join
+function join(glue, pieces) {
+ // Alias of implode()
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_join/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // - depends on: implode
+ // * example 1: join(' ', ['Kevin', 'van', 'Zonneveld']);
+ // * returns 1: 'Kevin van Zonneveld'
+
+ return implode(glue, pieces);
+} // }}}
+
+// {{{ split
+function split(delimiter, string) {
+ // Split string into array by regular expression
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_split/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // - depends on: explode
+ // * example 1: split(' ', 'Kevin van Zonneveld');
+ // * returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
+
+ return explode(delimiter, string);
+} // }}}
+
+// {{{ str_replace
+function str_replace(search, replace, subject) {
+ // Replace all occurrences of the search string with the replacement string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_str_replace/
+ // + version: 805.3114
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: Gabriel Paderni
+ // + improved by: Philip Peterson
+ // + improved by: Simon Willison (http://simonwillison.net)
+ // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
+ // - depends on: is_array
+ // * example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
+ // * returns 1: 'Kevin.van.Zonneveld'
+ // * example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
+ // * returns 2: 'hemmo, mars'
+
+ var f = search,
+ r = replace,
+ s = subject;
+ var ra = is_array(r),
+ sa = is_array(s),
+ f = [].concat(f),
+ r = [].concat(r),
+ i = (s = [].concat(s)).length;
+
+ while (j = 0, i--) {
+ while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f) {};
+ };
+
+ return sa ? s : s[0];
+} // }}}
+
+// {{{ strlen
+function strlen(string) {
+ // Get string length
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strlen/
+ // + version: 805.1616
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: Sakimori
+ // * example 1: strlen('Kevin van Zonneveld');
+ // * returns 1: 19
+
+ return ("" + string).length;
+} // }}}
+
+// {{{ strpos
+function strpos(haystack, needle, offset) {
+ // Find position of first occurrence of a string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strpos/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: strpos('Kevin van Zonneveld', 'e', 5);
+ // * returns 1: 14
+
+ var i = haystack.indexOf(needle, offset); // returns -1
+ return i >= 0 ? i : false;
+} // }}}
+
+// {{{ strrpos
+function strrpos(haystack, needle, offset) {
+ // Find position of last occurrence of a char in a string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strrpos/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: strrpos('Kevin van Zonneveld', 'e');
+ // * returns 1: 16
+
+ var i = haystack.lastIndexOf(needle, offset); // returns -1
+ return i >= 0 ? i : false;
+} // }}}
+
+// {{{ strtolower
+function strtolower(str) {
+ // Make a string lowercase
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strtolower/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: strtolower('Kevin van Zonneveld');
+ // * returns 1: 'kevin van zonneveld'
+
+ return str.toLowerCase();
+} // }}}
+
+// {{{ strtoupper
+function strtoupper(str) {
+ // Make a string uppercase
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strtoupper/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: strtoupper('Kevin van Zonneveld');
+ // * returns 1: 'KEVIN VAN ZONNEVELD'
+
+ return str.toUpperCase();
+} // }}}
+
+// {{{ substr
+function substr(f_string, f_start, f_length) {
+ // Return part of a string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_substr/
+ // + version: 804.1712
+ // + original by: Martijn Wieringa
+ // * example 1: substr('abcdef', 0, -1);
+ // * returns 1: 'abcde'
+
+ if (f_start < 0) {
+ f_start += f_string.length;
+ }
+
+ if (f_length == undefined) {
+ f_length = f_string.length;
+ } else if (f_length < 0) {
+ f_length += f_string.length;
+ } else {
+ f_length += f_start;
+ }
+
+ if (f_length < f_start) {
+ f_length = f_start;
+ }
+
+ return f_string.substring(f_start, f_length);
+} // }}}
+
+// {{{ trim
+function trim(str, charlist) {
+ // Strip whitespace (or other characters) from the beginning and end of a string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_trim/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: mdsjack (http://www.mdsjack.bo.it)
+ // + improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
+ // + input by: Erkekjetter
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + input by: DxGx
+ // + improved by: Steven Levithan (http://blog.stevenlevithan.com)
+ // * example 1: trim(' Kevin van Zonneveld ');
+ // * returns 1: 'Kevin van Zonneveld'
+ // * example 2: trim('Hello World', 'Hdle');
+ // * returns 2: 'o Wor'
+ if (!str) {
+ return '';
+ }
+ var whitespace;
+
+ if (!charlist) {
+ whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
+ } else {
+ whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
+ }
+
+ for (var i = 0; i < str.length; i++) {
+ if (whitespace.indexOf(str.charAt(i)) === -1) {
+ str = str.substring(i);
+ break;
+ }
+ }
+ for (i = str.length - 1; i >= 0; i--) {
+ if (whitespace.indexOf(str.charAt(i)) === -1) {
+ str = str.substring(0, i + 1);
+ break;
+ }
+ }
+ return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
+} // }}}
+
+
+// {{{ wordwrap
+function wordwrap(str, int_width, str_break, cut) {
+ // Wraps a string to a given number of characters
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_wordwrap/
+ // + version: 804.1715
+ // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
+ // + improved by: Nick Callen
+ // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
+ // * example 1: wordwrap('Kevin van Zonneveld', 6, '|', true);
+ // * returns 1: 'Kevin |van |Zonnev|eld'
+
+ var m = int_width,
+ b = str_break,
+ c = cut;
+ var i, j, l, s, r;
+
+ if (m < 1) {
+ return str;
+ }
+ for (i = -1, l = (r = str.split("\n")).length; ++i < l; r[i] += s) {
+ for (s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : "")) {
+ j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
+ }
+ }
+
+ return r.join("\n");
+} // }}}
+
+// {{{ is_string
+function is_string(mixed_var) {
+ // Find whether the type of a variable is string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_is_string/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: is_string('23');
+ // * returns 1: true
+ // * example 2: is_string(23.5);
+ // * returns 2: false
+
+ return (typeof(mixed_var) == 'string');
+} // }}}
+
+
+// {{{ ord
+function ord(string) {
+ // Return ASCII value of character
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_ord/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: ord('K');
+ // * returns 1: 75
+
+ return string.charCodeAt(0);
+} // }}}
+
+// {{{ array_unique
+function array_unique(array) {
+ // Removes duplicate values from an array
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_array_unique/
+ // + version: 805.211
+ // + original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
+ // + input by: duncan
+ // + bufixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: array_unique(['Kevin','Kevin','van','Zonneveld']);
+ // * returns 1: ['Kevin','van','Zonneveld']
+
+ var p, i, j, tmp_arr = array;
+ for (i = tmp_arr.length; i;) {
+ for (p = --i; p > 0;) {
+ if (tmp_arr[i] === tmp_arr[--p]) {
+ for (j = p; --p && tmp_arr[i] === tmp_arr[p];);
+ i -= tmp_arr.splice(p + 1, j - p).length;
+ }
+ }
+ }
+
+ return tmp_arr;
+} // }}}
+
+// {{{ print_r
+function print_r(array, return_val) {
+ // Prints human-readable information about a variable
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_print_r/
+ // + version: 805.2023
+ // + original by: Michael White (http://crestidg.com)
+ // + improved by: Ben Bryan
+ // * example 1: print_r(1, true);
+ // * returns 1: 1
+
+ var output = "",
+ pad_char = " ",
+ pad_val = 4;
+
+ var formatArray = function(obj, cur_depth, pad_val, pad_char) {
+ if (cur_depth > 0) {
+ cur_depth++;
+ }
+
+ var base_pad = repeat_char(pad_val * cur_depth, pad_char);
+ var thick_pad = repeat_char(pad_val * (cur_depth + 1), pad_char);
+ var str = "";
+
+ if (obj instanceof Array || obj instanceof Object) {
+ str += "Array\n" + base_pad + "(\n";
+ for (var key in obj) {
+ if (obj[key] instanceof Array || obj[key] instanceof Object) {
+ str += thick_pad + "[" + key + "] => " + formatArray(obj[key], cur_depth + 1, pad_val, pad_char);
+ } else {
+ str += thick_pad + "[" + key + "] => " + obj[key] + "\n";
+ }
+ }
+ str += base_pad + ")\n";
+ } else {
+ str = obj.toString();
+ }
+
+ return str;
+ };
+
+ var repeat_char = function(len, pad_char) {
+ var str = "";
+ for (var i = 0; i < len; i++) {
+ str += pad_char;
+ };
+ return str;
+ };
+ output = formatArray(array, 0, pad_val, pad_char);
+
+ if (return_val !== true) {
+ document.write("
" + output + "
");
+ return true;
+ } else {
+ return output;
+ }
+} // }}}
+// {{{ is_array
+function is_array(mixed_var) {
+ // Finds whether a variable is an array
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_is_array/
+ // + version: 804.1712
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: Legaev Andrey
+ // + bugfixed by: Cord
+ // * example 1: is_array(['Kevin', 'van', 'Zonneveld']);
+ // * returns 1: true
+ // * example 2: is_array('Kevin van Zonneveld');
+ // * returns 2: false
+
+ return (mixed_var instanceof Array);
+} // }}}
+
+//------------END PHP FUNCTIONS -------------------------------------------------------------- //
+
+/**
+ * BibTex
+ *
+ * A class which provides common methods to access and
+ * create Strings in BibTex format+
+ * Example 1: Parsing a BibTex File and returning the number of entries
+ *
+ * bibtex = new BibTex();
+ * bibtex.content = '....';
+ *
+ * bibtex.parse();
+ * print "There are "+bibtex.amount()+" entries";
+ *
+ * Example 2: Parsing a BibTex File and getting all Titles
+ *
+ * bibtex = new BibTex();
+ * bibtex.content="...";
+ * bibtex.parse();
+ * for (var i in bibtex.data) {
+ * alert( bibtex.data[i]['title']+" ");
+ * }
+ *
+ * Example 3: Adding an entry and printing it in BibTex Format
+ *
+ * bibtex = new BibTex();
+ * addarray = {}
+ * addarray['entryType'] = 'Article';
+ * addarray['cite'] = 'art2';
+ * addarray['title'] = 'Titel2';
+ * addarray['author'] = [];
+ * addarray['author'][0]['first'] = 'John';
+ * addarray['author'][0]['last'] = 'Doe';
+ * addarray['author'][1]['first'] = 'Jane';
+ * addarray['author'][1]['last'] = 'Doe';
+ * bibtex.addEntry(addarray);
+ * alert( nl2br(bibtex.bibTex()));
+ *
+ *
+ * @category Structures
+ * @package BibTex
+ * @author Steve Hannah
+ * @adapted-from Structures_BibTex by Elmar Pitschke
+ * @copyright 2008 Simon Fraser University
+ * @license http://www.gnu.org/licenses/lgpl.html
+ * @version Release: 0.1
+ * @link http://webgroup.fas.sfu.ca/projects/JSBibTexParser
+ */
+function BibTex(options) {
+
+ if (typeof options == 'undefined') options = {};
+ /**
+ * Array with the BibTex Data
+ *
+ * @access public
+ * @var array
+ */
+ this.data;
+ /**
+ * String with the BibTex content
+ *
+ * @access public
+ * @var string
+ */
+ this.content;
+ /**
+ * Array with possible Delimiters for the entries
+ *
+ * @access private
+ * @var array
+ */
+ this._delimiters;
+ /**
+ * Array to store warnings
+ *
+ * @access public
+ * @var array
+ */
+ this.warnings;
+ /**
+ * Run-time configuration options
+ *
+ * @access private
+ * @var array
+ */
+ this._options;
+ /**
+ * RTF Format String
+ *
+ * @access public
+ * @var string
+ */
+ this.rtfstring;
+ /**
+ * HTML Format String
+ *
+ * @access public
+ * @var string
+ */
+ this.htmlstring;
+ /**
+ * Array with the "allowed" entry types
+ *
+ * @access public
+ * @var array
+ */
+ this.allowedEntryTypes;
+ /**
+ * Author Format Strings
+ *
+ * @access public
+ * @var string
+ */
+ this.authorstring;
+
+ this._delimiters = {
+ '"': '"',
+ '{': '}'
+ };
+ this.data = [];
+ this.content = '';
+ //this._stripDelimiter = stripDel;
+ //this._validate = val;
+ this.warnings = [];
+ this._options = {
+ 'stripDelimiter': true,
+ 'validate': true,
+ 'unwrap': false,
+ 'wordWrapWidth': false,
+ 'wordWrapBreak': "\n",
+ 'wordWrapCut': 0,
+ 'removeCurlyBraces': false,
+ 'extractAuthors': true
+ };
+ for (option in options) {
+ test = this.setOption(option, options[option]);
+ if (this.isError(test)) {
+ //Currently nothing is done here, but it could for example raise an warning
+ }
+ }
+ this.rtfstring = 'AUTHORS, "{\b TITLE}", {\i JOURNAL}, YEAR';
+ this.htmlstring = 'AUTHORS, "TITLE", JOURNAL, YEAR ';
+ this.allowedEntryTypes = array(
+ 'article',
+ 'book',
+ 'booklet',
+ 'confernce',
+ 'inbook',
+ 'incollection',
+ 'inproceedings',
+ 'manual',
+ 'masterthesis',
+ 'misc',
+ 'phdthesis',
+ 'proceedings',
+ 'techreport',
+ 'unpublished'
+ );
+ this.authorstring = 'VON LAST, JR, FIRST';
+
+}
+
+
+BibTex.prototype = {
+
+ /**
+ * Constructor
+ *
+ * @access public
+ * @return void
+ */
+
+
+ /**
+ * Sets run-time configuration options
+ *
+ * @access public
+ * @param string option option name
+ * @param mixed value value for the option
+ * @return mixed true on success PEAR_Error on failure
+ */
+ setOption: function(option, value) {
+ ret = true;
+ if (array_key_exists(option, this._options)) {
+ this._options[option] = value;
+ } else {
+ ret = this.raiseError('Unknown option ' + option);
+ }
+ return ret;
+ },
+
+ /**
+ * Reads a give BibTex File
+ *
+ * @access public
+ * @param string filename Name of the file
+ * @return mixed true on success PEAR_Error on failure
+ *
+ function loadFile(filename)
+ {
+ if (file_exists(filename)) {
+ if ((this.content = @file_get_contents(filename)) === false) {
+ return PEAR::raiseError('Could not open file '+filename);
+ } else {
+ this._pos = 0;
+ this._oldpos = 0;
+ return true;
+ }
+ } else {
+ return PEAR::raiseError('Could not find file '+filename);
+ }
+ }
+ */
+ /**
+ * Parses what is stored in content and clears the content if the parsing is successfull+
+ *
+ * @access public
+ * @return boolean true on success and PEAR_Error if there was a problem
+ */
+ parse: function() {
+ //alert("starting to parse");
+ //The amount of opening braces is compared to the amount of closing braces
+ //Braces inside comments are ignored
+ this.warnings = [];
+ this.data = [];
+ var valid = true;
+ var open = 0;
+ var entry = false;
+ var charv = '';
+ var lastchar = '';
+ var buffer = '';
+ for (var i = 0; i < strlen(this.content); i++) {
+ charv = substr(this.content, i, 1);
+ if ((0 != open) && ('@' == charv)) {
+ if (!this._checkAt(buffer)) {
+ this._generateWarning('WARNING_MISSING_END_BRACE', '', buffer);
+ //To correct the data we need to insert a closing brace
+ charv = '}';
+ i--;
+ }
+ }
+ if ((0 == open) && ('@' == charv)) { //The beginning of an entry
+ entry = true;
+ } else if (entry && ('{' == charv) && ('\\' != lastchar)) { //Inside an entry and non quoted brace is opening
+ open++;
+ } else if (entry && ('}' == charv) && ('\\' != lastchar)) { //Inside an entry and non quoted brace is closing
+ open--;
+ if (open < 0) { //More are closed than opened
+ valid = false;
+ }
+ if (0 == open) { //End of entry
+ entry = false;
+ var entrydata = this._parseEntry(buffer);
+ if (!entrydata) {
+ /**
+ * This is not yet used+
+ * We are here if the Entry is either not correct or not supported+
+ * But this should already generate a warning+
+ * Therefore it should not be necessary to do anything here
+ */
+ } else {
+ this.data[this.data.length] = entrydata;
+ }
+ buffer = '';
+ }
+ }
+ if (entry) { //Inside entry
+ buffer += charv;
+ }
+ lastchar = charv;
+ }
+ //If open is one it may be possible that the last ending brace is missing
+ if (1 == open) {
+ entrydata = this._parseEntry(buffer);
+ if (!entrydata) {
+ valid = false;
+ } else {
+ this.data[this.data.length] = entrydata;
+ buffer = '';
+ open = 0;
+ }
+ }
+ //At this point the open should be zero
+ if (0 != open) {
+ valid = false;
+ }
+ //Are there Multiple entries with the same cite?
+ if (this._options['validate']) {
+ cites = [];
+ for (var i = 0; i < this.data.length; i++) {
+ cites[cites.length] = this.data[i]['cite'];
+ }
+ unique = array_unique(cites);
+ if (cites.length != sizeof(unique)) { //Some values have not been unique!
+ notuniques = [];
+ for (var i = 0; i < cites.length; i++) {
+ if ('' == unique[i]) {
+ notuniques[notuniques.length] = cites[i];
+ }
+ }
+ this._generateWarning('WARNING_MULTIPLE_ENTRIES', implode(',', notuniques));
+ }
+ }
+ //alert("finished parsing");
+ if (valid) {
+ this.content = '';
+ return true;
+ } else {
+ return this.raiseError('Unbalanced parenthesis');
+ }
+ },
+
+ /**
+ * Extracting the data of one content
+ *
+ * The parse function splits the content into its entries+
+ * Then every entry is parsed by this function+
+ * It parses the entry backwards+
+ * First the last '=' is searched and the value extracted from that+
+ * A copy is made of the entry if warnings should be generated+ This takes quite
+ * some memory but it is needed to get good warnings+ If nor warnings are generated
+ * then you don have to worry about memory+
+ * Then the last ',' is searched and the field extracted from that+
+ * Again the entry is shortened+
+ * Finally after all field:value pairs the cite and type is extraced and the
+ * authors are splitted+
+ * If there is a problem false is returned+
+ *
+ * @access private
+ * @param string entry The entry
+ * @return array The representation of the entry or false if there is a problem
+ */
+ '_parseEntry': function(entry) {
+ var entrycopy = '';
+ if (this._options['validate']) {
+ entrycopy = entry; //We need a copy for printing the warnings
+ }
+ var ret = {};
+ if ('@string' == strtolower(substr(entry, 0, 7))) {
+ //String are not yet supported!
+ if (this._options['validate']) {
+ this._generateWarning('STRING_ENTRY_NOT_YET_SUPPORTED', '', entry + '}');
+ }
+ } else if ('@preamble' == strtolower(substr(entry, 0, 9))) {
+ //Preamble not yet supported!
+ if (this._options['validate']) {
+ this._generateWarning('PREAMBLE_ENTRY_NOT_YET_SUPPORTED', '', entry + '}');
+ }
+ } else {
+ //Parsing all fields
+ while (strrpos(entry, '=') !== false) {
+ position = strrpos(entry, '=');
+ //Checking that the equal sign is not quoted or is not inside a equation (For example in an abstract)
+ proceed = true;
+ if (substr(entry, position - 1, 1) == '\\') {
+ proceed = false;
+ }
+ if (proceed) {
+ proceed = this._checkEqualSign(entry, position);
+ }
+ while (!proceed) {
+ substring = substr(entry, 0, position);
+ position = strrpos(substring, '=');
+ proceed = true;
+ if (substr(entry, position - 1, 1) == '\\') {
+ proceed = false;
+ }
+ if (proceed) {
+ proceed = this._checkEqualSign(entry, position);
+ }
+ }
+
+ value = trim(substr(entry, position + 1));
+ entry = substr(entry, 0, position);
+
+ if (',' == substr(value, strlen(value) - 1, 1)) {
+ value = substr(value, 0, -1);
+ }
+ if (this._options['validate']) {
+ this._validateValue(value, entrycopy);
+ }
+ if (this._options['stripDelimiter']) {
+ value = this._stripDelimiter(value);
+ }
+ if (this._options['unwrap']) {
+ value = this._unwrap(value);
+ }
+ if (this._options['removeCurlyBraces']) {
+ value = this._removeCurlyBraces(value);
+ }
+ position = strrpos(entry, ',');
+ field = strtolower(trim(substr(entry, position + 1)));
+ ret[field] = value;
+ entry = substr(entry, 0, position);
+ }
+ //Parsing cite and entry type
+ var arr = entry.split('{');
+ ret['cite'] = trim(arr[1]);
+ ret['entryType'] = strtolower(trim(arr[0]));
+ //alert(array_keys(ret));
+ if ('@' == ret['entryType'].substring(0, 1)) {
+ ret['entryType'] = substr(ret['entryType'], 1);
+ }
+ if (this._options['validate']) {
+ if (!this._checkAllowedEntryType(ret['entryType'])) {
+ this._generateWarning('WARNING_NOT_ALLOWED_ENTRY_TYPE', ret['entryType'], entry + '}');
+ }
+ }
+ //Handling the authors
+ if (in_array('author', array_keys(ret)) && this._options['extractAuthors']) {
+ ret['author'] = this._extractAuthors(ret['author']);
+ }
+ //Handling the editors (added by vkaravir 2017)
+ if (in_array('editor', array_keys(ret)) && this._options['extractAuthors']) {
+ ret['editor'] = this._extractAuthors(ret['editor']);
+ }
+ }
+ return ret;
+ },
+
+ /**
+ * Checking whether the position of the '=' is correct
+ *
+ * Sometimes there is a problem if a '=' is used inside an entry (for example abstract)+
+ * This method checks if the '=' is outside braces then the '=' is correct and true is returned+
+ * If the '=' is inside braces it contains to a equation and therefore false is returned+
+ *
+ * @access private
+ * @param string entry The text of the whole remaining entry
+ * @param int the current used place of the '='
+ * @return bool true if the '=' is correct, false if it contains to an equation
+ */
+ '_checkEqualSign': function(entry, position) {
+ var ret = true;
+ //This is getting tricky
+ //We check the string backwards until the position and count the closing an opening braces
+ //If we reach the position the amount of opening and closing braces should be equal
+ var length = strlen(entry);
+ var open = 0;
+ for (var i = length - 1; i >= position; i--) {
+ precedingchar = substr(entry, i - 1, 1);
+ charv = substr(entry, i, 1);
+ if (('{' == charv) && ('\\' != precedingchar)) {
+ open++;
+ }
+ if (('}' == charv) && ('\\' != precedingchar)) {
+ open--;
+ }
+ }
+ if (0 != open) {
+ ret = false;
+ }
+ //There is still the posibility that the entry is delimited by double quotes+
+ //Then it is possible that the braces are equal even if the '=' is in an equation+
+ if (ret) {
+ entrycopy = trim(entry);
+ lastchar = substr(entrycopy, strlen(entrycopy) - 1, 1);
+ if (',' == lastchar) {
+ lastchar = substr(entrycopy, strlen(entrycopy) - 2, 1);
+ }
+ if ('"' == lastchar) {
+ //The return value is set to false
+ //If we find the closing " before the '=' it is set to true again+
+ //Remember we begin to search the entry backwards so the " has to show up twice - ending and beginning delimiter
+ ret = false;
+ found = 0;
+ for (var i = length; i >= position; i--) {
+ precedingchar = substr(entry, i - 1, 1);
+ charv = substr(entry, i, 1);
+ if (('"' == charv) && ('\\' != precedingchar)) {
+ found++;
+ }
+ if (2 == found) {
+ ret = true;
+ break;
+ }
+ }
+ }
+ }
+ return ret;
+ },
+
+ /**
+ * Checking if the entry type is allowed
+ *
+ * @access private
+ * @param string entry The entry to check
+ * @return bool true if allowed, false otherwise
+ */
+ '_checkAllowedEntryType': function(entry) {
+ return in_array(entry, this.allowedEntryTypes);
+ },
+
+ /**
+ * Checking whether an at is outside an entry
+ *
+ * Sometimes an entry misses an entry brace+ Then the at of the next entry seems to be
+ * inside an entry+ This is checked here+ When it is most likely that the at is an opening
+ * at of the next entry this method returns true+
+ *
+ * @access private
+ * @param string entry The text of the entry until the at
+ * @return bool true if the at is correct, false if the at is likely to begin the next entry+
+ */
+ '_checkAt': function(entry) {
+ var ret = false;
+ var opening = array_keys(this._delimiters);
+ var closing = array_values(this._delimiters);
+ //Getting the value (at is only allowd in values)
+ if (strrpos(entry, '=') !== false) {
+ position = strrpos(entry, '=');
+ proceed = true;
+ if (substr(entry, position - 1, 1) == '\\') {
+ proceed = false;
+ }
+ while (!proceed) {
+ substring = substr(entry, 0, position);
+ position = strrpos(substring, '=');
+ proceed = true;
+ if (substr(entry, position - 1, 1) == '\\') {
+ proceed = false;
+ }
+ }
+ value = trim(substr(entry, position + 1));
+ open = 0;
+ charv = '';
+ lastchar = '';
+ for (var i = 0; i < strlen(value); i++) {
+ charv = substr(this.content, i, 1);
+ if (in_array(charv, opening) && ('\\' != lastchar)) {
+ open++;
+ } else if (in_array(charv, closing) && ('\\' != lastchar)) {
+ open--;
+ }
+ lastchar = charv;
+ }
+ //if open is grater zero were are inside an entry
+ if (open > 0) {
+ ret = true;
+ }
+ }
+ return ret;
+ },
+
+ /**
+ * Stripping Delimiter
+ *
+ * @access private
+ * @param string entry The entry where the Delimiter should be stripped from
+ * @return string Stripped entry
+ */
+ '_stripDelimiter': function(entry) {
+ var beginningdels = array_keys(this._delimiters);
+ var ength = strlen(entry);
+ var firstchar = substr(entry, 0, 1);
+ var lastchar = substr(entry, -1, 1);
+ while (in_array(firstchar, beginningdels)) { //The first character is an opening delimiter
+ if (lastchar == this._delimiters[firstchar]) { //Matches to closing Delimiter
+ entry = substr(entry, 1, -1);
+ } else {
+ break;
+ }
+ firstchar = substr(entry, 0, 1);
+ lastchar = substr(entry, -1, 1);
+ }
+ return entry;
+ },
+
+ /**
+ * Unwrapping entry
+ *
+ * @access private
+ * @param string entry The entry to unwrap
+ * @return string unwrapped entry
+ */
+ '_unwrap': function(entry) {
+ entry = entry.replace(/\s+/, ' ');
+ return trim(entry);
+ },
+
+ /**
+ * Wordwrap an entry
+ *
+ * @access private
+ * @param string entry The entry to wrap
+ * @return string wrapped entry
+ */
+ '_wordwrap': function(entry) {
+ if (('' != entry) && (is_string(entry))) {
+ entry = wordwrap(entry, this._options['wordWrapWidth'], this._options['wordWrapBreak'], this._options['wordWrapCut']);
+ }
+ return entry;
+ },
+
+ /**
+ * Extracting the authors
+ *
+ * @access private
+ * @param string entry The entry with the authors
+ * @return array the extracted authors
+ */
+ '_extractAuthors': function(entry) {
+ entry = this._unwrap(entry);
+ var authorarray = entry.split(' and ');
+ for (var i = 0; i < authorarray.length; i++) {
+ var author = trim(authorarray[i]);
+ /*The first version of how an author could be written (First von Last)
+ has no commas in it*/
+ var first = '';
+ var von = '';
+ var last = '';
+ var jr = '';
+ if (strpos(author, ',') === false) {
+ var tmparray = author.split(' |~');
+ var size = tmparray.length;
+ if (1 == size) { //There is only a last
+ last = tmparray[0];
+ } else if (2 == size) { //There is a first and a last
+ first = tmparray[0];
+ last = tmparray[1];
+ } else {
+ var invon = false;
+ var inlast = false;
+ for (var j = 0; j < (size - 1); j++) {
+ if (inlast) {
+ last += ' ' + tmparray[j];
+ } else if (invon) {
+ casev = this._determineCase(tmparray[j]);
+ if (this.isError(casev)) {
+ // IGNORE?
+ } else if ((0 == casev) || (-1 == casev)) { //Change from von to last
+ //You only change when there is no more lower case there
+ islast = true;
+ for (var k = (j + 1); k < (size - 1); k++) {
+ futurecase = this._determineCase(tmparray[k]);
+ if (this.isError(casev)) {
+ // IGNORE?
+ } else if (0 == futurecase) {
+ islast = false;
+ }
+ }
+ if (islast) {
+ inlast = true;
+ if (-1 == casev) { //Caseless belongs to the last
+ last += ' ' + tmparray[j];
+ } else {
+ von += ' ' + tmparray[j];
+ }
+ } else {
+ von += ' ' + tmparray[j];
+ }
+ } else {
+ von += ' ' + tmparray[j];
+ }
+ } else {
+ var casev = this._determineCase(tmparray[j]);
+ if (this.isError(casev)) {
+ // IGNORE?
+ } else if (0 == casev) { //Change from first to von
+ invon = true;
+ von += ' ' + tmparray[j];
+ } else {
+ first += ' ' + tmparray[j];
+ }
+ }
+ }
+ //The last entry is always the last!
+ last += ' ' + tmparray[size - 1];
+ }
+ } else { //Version 2 and 3
+ var tmparray = [];
+ tmparray = explode(',', author);
+ //The first entry must contain von and last
+ vonlastarray = [];
+ vonlastarray = explode(' ', tmparray[0]);
+ size = sizeof(vonlastarray);
+ if (1 == size) { //Only one entry.got to be the last
+ last = vonlastarray[0];
+ } else {
+ inlast = false;
+ for (var j = 0; j < (size - 1); j++) {
+ if (inlast) {
+ last += ' ' + vonlastarray[j];
+ } else {
+ if (0 != (this._determineCase(vonlastarray[j]))) { //Change from von to last
+ islast = true;
+ for (var k = (j + 1); k < (size - 1); k++) {
+ this._determineCase(vonlastarray[k]);
+ casev = this._determineCase(vonlastarray[k]);
+ if (this.isError(casev)) {
+ // IGNORE?
+ } else if (0 == casev) {
+ islast = false;
+ }
+ }
+ if (islast) {
+ inlast = true;
+ last += ' ' + vonlastarray[j];
+ } else {
+ von += ' ' + vonlastarray[j];
+ }
+ } else {
+ von += ' ' + vonlastarray[j];
+ }
+ }
+ }
+ last += ' ' + vonlastarray[size - 1];
+ }
+ //Now we check if it is version three (three entries in the array (two commas)
+ if (3 == tmparray.length) {
+ jr = tmparray[1];
+ }
+ //Everything in the last entry is first
+ first = tmparray[tmparray.length - 1];
+ }
+ authorarray[i] = {
+ 'first': trim(first),
+ 'von': trim(von),
+ 'last': trim(last),
+ 'jr': trim(jr)
+ };
+ }
+ return authorarray;
+ },
+
+ /**
+ * Case Determination according to the needs of BibTex
+ *
+ * To parse the Author(s) correctly a determination is needed
+ * to get the Case of a word+ There are three possible values:
+ * - Upper Case (return value 1)
+ * - Lower Case (return value 0)
+ * - Caseless (return value -1)
+ *
+ * @access private
+ * @param string word
+ * @return int The Case or PEAR_Error if there was a problem
+ */
+ '_determineCase': function(word) {
+ var ret = -1;
+ var trimmedword = trim(word);
+ /*We need this variable+ Without the next of would not work
+ (trim changes the variable automatically to a string!)*/
+ if (is_string(word) && (strlen(trimmedword) > 0)) {
+ var i = 0;
+ var found = false;
+ var openbrace = 0;
+ while (!found && (i <= strlen(word))) {
+ var letter = substr(trimmedword, i, 1);
+ var ordv = ord(letter);
+ if (ordv == 123) { //Open brace
+ openbrace++;
+ }
+ if (ordv == 125) { //Closing brace
+ openbrace--;
+ }
+ if ((ordv >= 65) && (ordv <= 90) && (0 == openbrace)) { //The first character is uppercase
+ ret = 1;
+ found = true;
+ } else if ((ordv >= 97) && (ordv <= 122) && (0 == openbrace)) { //The first character is lowercase
+ ret = 0;
+ found = true;
+ } else { //Not yet found
+ i++;
+ }
+ }
+ } else {
+ ret = this.raiseError('Could not determine case on word: ' + word);
+ }
+ return ret;
+ },
+
+
+ 'isError': function(obj) {
+ return (typeof(obj) == 'Object' && obj.isError == 1);
+
+ },
+
+ /**
+ * Validation of a value
+ *
+ * There may be several problems with the value of a field+
+ * These problems exist but do not break the parsing+
+ * If a problem is detected a warning is appended to the array warnings+
+ *
+ * @access private
+ * @param string entry The entry aka one line which which should be validated
+ * @param string wholeentry The whole BibTex Entry which the one line is part of
+ * @return void
+ */
+ '_validateValue': function(entry, wholeentry) {
+ //There is no @ allowed if the entry is enclosed by braces
+ if (entry.match(/^{.*@.*}/)) {
+ this._generateWarning('WARNING_AT_IN_BRACES', entry, wholeentry);
+ }
+ //No escaped " allowed if the entry is enclosed by double quotes
+ if (entry.match(/^\".*\\".*\"/)) {
+ this._generateWarning('WARNING_ESCAPED_DOUBLE_QUOTE_INSIDE_DOUBLE_QUOTES', entry, wholeentry);
+ }
+ //Amount of Braces is not correct
+ var open = 0;
+ var lastchar = '';
+ var charv = '';
+ for (var i = 0; i < strlen(entry); i++) {
+ charv = substr(entry, i, 1);
+ if (('{' == charv) && ('\\' != lastchar)) {
+ open++;
+ }
+ if (('}' == charv) && ('\\' != lastchar)) {
+ open--;
+ }
+ lastchar = charv;
+ }
+ if (0 != open) {
+ this._generateWarning('WARNING_UNBALANCED_AMOUNT_OF_BRACES', entry, wholeentry);
+ }
+ },
+
+ /**
+ * Remove curly braces from entry
+ *
+ * @access private
+ * @param string value The value in which curly braces to be removed
+ * @param string Value with removed curly braces
+ */
+ '_removeCurlyBraces': function(value) {
+ //First we save the delimiters
+ var beginningdels = array_keys(this._delimiters);
+ var firstchar = substr(value, 0, 1);
+ var lastchar = substr(value, -1, 1);
+ var begin = '';
+ var end = '';
+ while (in_array(firstchar, beginningdels)) { //The first character is an opening delimiter
+ if (lastchar == this._delimiters[firstchar]) { //Matches to closing Delimiter
+ begin += firstchar;
+ end += lastchar;
+ value = substr(value, 1, -1);
+ } else {
+ break;
+ }
+ firstchar = substr(value, 0, 1);
+ lastchar = substr(value, -1, 1);
+ }
+ //Now we get rid of the curly braces
+ var pattern = '/([^\\\\])\{(+*?[^\\\\])\}/';
+ var replacement = '12';
+ value = value.replace(/([^\\\\])\{(.*?[^\\\\])\}/, replacement);
+ //Reattach delimiters
+ value = begin + value + end;
+ return value;
+ },
+
+ /**
+ * Generates a warning
+ *
+ * @access private
+ * @param string type The type of the warning
+ * @param string entry The line of the entry where the warning occurred
+ * @param string wholeentry OPTIONAL The whole entry where the warning occurred
+ */
+ '_generateWarning': function(type, entry, wholeentry) {
+ if (typeof wholeentry == 'undefined') wholeentry = '';
+ var warning = {};
+ warning['warning'] = type;
+ warning['entry'] = entry;
+ warning['wholeentry'] = wholeentry;
+ this.warnings[this.warnings.length] = warning;
+ },
+
+ /**
+ * Cleares all warnings
+ *
+ * @access public
+ */
+ 'clearWarnings': function() {
+ this.warnings = array();
+ },
+
+ /**
+ * Is there a warning?
+ *
+ * @access public
+ * @return true if there is, false otherwise
+ */
+ 'hasWarning': function() {
+ if (sizeof(this.warnings) > 0) return true;
+ else return false;
+ },
+
+ /**
+ * Returns the amount of available BibTex entries
+ *
+ * @access public
+ * @return int The amount of available BibTex entries
+ */
+ 'amount': function() {
+ return sizeof(this.data);
+ },
+ /**
+ * Returns the author formatted
+ *
+ * The Author is formatted as setted in the authorstring
+ *
+ * @access private
+ * @param array array Author array
+ * @return string the formatted author string
+ */
+ '_formatAuthor': function(array) {
+ if (!array_key_exists('von', array)) {
+ array['von'] = '';
+ } else {
+ array['von'] = trim(array['von']);
+ }
+ if (!array_key_exists('last', array)) {
+ array['last'] = '';
+ } else {
+ array['last'] = trim(array['last']);
+ }
+ if (!array_key_exists('jr', array)) {
+ array['jr'] = '';
+ } else {
+ array['jr'] = trim(array['jr']);
+ }
+ if (!array_key_exists('first', array)) {
+ array['first'] = '';
+ } else {
+ array['first'] = trim(array['first']);
+ }
+ ret = this.authorstring;
+ ret = str_replace("VON", array['von'], ret);
+ ret = str_replace("LAST", array['last'], ret);
+ ret = str_replace("JR", array['jr'], ret);
+ ret = str_replace("FIRST", array['first'], ret);
+ return trim(ret);
+ },
+
+ /**
+ * Converts the stored BibTex entries to a BibTex String
+ *
+ * In the field list, the author is the last field+
+ *
+ * @access public
+ * @return string The BibTex string
+ */
+ 'bibTex': function() {
+ var bibtex = '';
+ for (var i = 0; i < this.data.length; i++) {
+ var entry = this.data[i];
+ //Intro
+ bibtex += '@' + strtolower(entry['entryType']) + ' { ' + entry['cite'] + ",\n";
+ //Other fields except author
+ for (key in entry) {
+ var val = entry[key];
+ if (this._options['wordWrapWidth'] > 0) {
+ val = this._wordWrap(val);
+ }
+ if (!in_array(key, array('cite', 'entryType', 'author'))) {
+ bibtex += "\t" + key + ' = {' + val + "},\n";
+ }
+ }
+ //Author
+ if (array_key_exists('author', entry)) {
+ if (this._options['extractAuthors']) {
+ tmparray = []; //In this array the authors are saved and the joind with an and
+ for (j in entry['author']) {
+ var authorentry = entry['author'][j];
+ tmparray[tmparray.length] = this._formatAuthor(authorentry);
+ }
+ author = join(' and ', tmparray);
+ } else {
+ author = entry['author'];
+ }
+ } else {
+ author = '';
+ }
+ bibtex += "\tauthor = {" + author + "}\n";
+ bibtex += "}\n\n";
+ }
+ return bibtex;
+ },
+
+ /**
+ * Adds a new BibTex entry to the data
+ *
+ * @access public
+ * @param array newentry The new data to add
+ * @return void
+ */
+ 'addEntry': function(newentry) {
+ this.data[this.data.length] = newentry;
+ },
+
+ /**
+ * Returns statistic
+ *
+ * This functions returns a hash table+ The keys are the different
+ * entry types and the values are the amount of these entries+
+ *
+ * @access public
+ * @return array Hash Table with the data
+ */
+ 'getStatistic': function() {
+ var ret = array();
+ for (var i = 0; i < this.data.length; i++) {
+ var entry = this.data[i];
+ if (array_key_exists(entry['entryType'], ret)) {
+ ret[entry['entryType']]++;
+ } else {
+ ret[entry['entryType']] = 1;
+ }
+ }
+ return ret;
+ },
+
+ /**
+ * Returns the stored data in RTF format
+ *
+ * This method simply returns a RTF formatted string+ This is done very
+ * simple and is not intended for heavy using and fine formatting+ This
+ * should be done by BibTex! It is intended to give some kind of quick
+ * preview or to send someone a reference list as word/rtf format (even
+ * some people in the scientific field still use word)+ If you want to
+ * change the default format you have to override the class variable
+ * "rtfstring"+ This variable is used and the placeholders simply replaced+
+ * Lines with no data cause an warning!
+ *
+ * @return string the RTF Strings
+ */
+ 'rtf': function() {
+ var ret = "{\\rtf\n";
+ for (var i = 0; i < this.data.length; i++) {
+ var entry = this.data[i];
+ line = this.rtfstring;
+ title = '';
+ journal = '';
+ year = '';
+ authors = '';
+ if (array_key_exists('title', entry)) {
+ title = this._unwrap(entry['title']);
+ }
+ if (array_key_exists('journal', entry)) {
+ journal = this._unwrap(entry['journal']);
+ }
+ if (array_key_exists('year', entry)) {
+ year = this._unwrap(entry['year']);
+ }
+ if (array_key_exists('author', entry)) {
+ if (this._options['extractAuthors']) {
+ tmparray = []; //In this array the authors are saved and the joind with an and
+ for (var j in entry['author']) {
+ var authorentry = entry['author'][j];
+ tmparray[tmparray.length] = this._formatAuthor(authorentry);
+ }
+ authors = join(', ', tmparray);
+ } else {
+ authors = entry['author'];
+ }
+ }
+ if (('' != title) || ('' != journal) || ('' != year) || ('' != authors)) {
+ line = str_replace("TITLE", title, line);
+ line = str_replace("JOURNAL", journal, line);
+ line = str_replace("YEAR", year, line);
+ line = str_replace("AUTHORS", authors, line);
+ line += "\n\\par\n";
+ ret += line;
+ } else {
+ this._generateWarning('WARNING_LINE_WAS_NOT_CONVERTED', '', print_r(entry, 1));
+ }
+ }
+ ret += '}';
+ return ret;
+ },
+
+ /**
+ * Returns the stored data in HTML format
+ *
+ * This method simply returns a HTML formatted string+ This is done very
+ * simple and is not intended for heavy using and fine formatting+ This
+ * should be done by BibTex! It is intended to give some kind of quick
+ * preview+ If you want to change the default format you have to override
+ * the class variable "htmlstring"+ This variable is used and the placeholders
+ * simply replaced+
+ * Lines with no data cause an warning!
+ *
+ * @return string the HTML Strings
+ */
+ 'html': function(min, max) {
+ if (typeof min == 'undefined') min = 0;
+ if (typeof max == 'undefined') max = this.data.length;
+ var ret = "
\n";
+ for (var i = min; i < max; i++) {
+ var entry = this.data[i];
+ var line = this.htmlstring;
+ var title = '';
+ var journal = '';
+ var year = '';
+ var authors = '';
+ if (array_key_exists('title', entry)) {
+ title = this._unwrap(entry['title']);
+ }
+ if (array_key_exists('journal', entry)) {
+ journal = this._unwrap(entry['journal']);
+ }
+ if (array_key_exists('year', entry)) {
+ year = this._unwrap(entry['year']);
+ }
+ if (array_key_exists('author', entry)) {
+ if (this._options['extractAuthors']) {
+ tmparray = []; //In this array the authors are saved and the joind with an and
+ for (j in entry['author']) {
+ var authorentry = entry['author'][j];
+ tmparray[tmparray.length] = this._formatAuthor(authorentry);
+ }
+ authors = join(', ', tmparray);
+ } else {
+ authors = entry['author'];
+ }
+ }
+
+ if (('' != title) || ('' != journal) || ('' != year) || ('' != authors)) {
+ line = str_replace("TITLE", title, line);
+ line = str_replace("JOURNAL", journal, line);
+ line = str_replace("YEAR", year, line);
+ line = str_replace("AUTHORS", authors, line);
+ line += "\n";
+ ret += line;
+ } else {
+ this._generateWarning('WARNING_LINE_WAS_NOT_CONVERTED', '', print_r(entry, 1));
+ }
+ }
+ ret += "
';
+ for (var i = 0, l = legendTypes.length; i < l; i++) {
+ var legend = legendTypes[i];
+ legendHtml += '' + bib2html.labels[legend];
+ }
+ legendHtml += '
';
+ $(chartIdSelector).html(statsHtml).after(legendHtml);
+ };
+
+ // Creates a new publication list to the HTML element with ID
+ // bibElemId. The bibsrc can be
+ // - a jQuery selector, in which case html of the element is used
+ // as the bibtex data
+ // - a URL, which is loaded and used as data. Note, that same-origin
+ // policy restricts where you can load the data.
+ // Supported options:
+ // - visualization: A boolean to control addition of the visualization.
+ // Defaults to true.
+ // - tweet: Twitter username to add Tweet links to bib items with a url field.
+ // - sorting: Control the default sorting of the list. Defaults to [[0, "desc"],
+ // [1, "desc"]]. See http://datatables.net/api fnSort for details
+ // on formatting.
+ // - bib2html: Can be used to override any of the functions or properties of
+ // the bib2html object. See above, starting around line 40.
+ return function(bibsrc, bibElemId, opts) {
+ var options = $.extend({}, {
+ 'visualization': true,
+ 'sorting': [
+ [0, "desc"],
+ [1, "desc"]
+ ]
+ },
+ opts);
+ var $pubTable = $("#" + bibElemId).addClass("bibtable");
+ if ($("#shutter").length === 0) {
+ $pubTable.before('');
+ $("#shutter").click(EventHandlers.hidebib);
+ }
+ if (options.visualization) {
+ $pubTable.before('');
+ }
+ var $bibSrc;
+ if (bibsrc.indexOf('/') === -1) {
+ $bibSrc = $(bibsrc);
+ }
+ if ($bibSrc && $bibSrc.length) { // we found an element, use its HTML as bibtex
+ new Bib2HTML($bibSrc.html(), $pubTable, options);
+ $bibSrc.hide();
+ } else { // otherwise we assume it is a URL
+ var callbackHandler = function(data) {
+ new Bib2HTML(data, $pubTable, options);
+ };
+ $.get(bibsrc, callbackHandler, "text");
+ }
+ };
+})(jQuery);
diff --git a/js/bootstrap.js b/old/js/bootstrap.js
similarity index 100%
rename from js/bootstrap.js
rename to old/js/bootstrap.js
diff --git a/js/classie.js b/old/js/classie.js
similarity index 100%
rename from js/classie.js
rename to old/js/classie.js
diff --git a/js/html5element.js b/old/js/html5element.js
similarity index 100%
rename from js/html5element.js
rename to old/js/html5element.js
diff --git a/js/html5shiv.js b/old/js/html5shiv.js
similarity index 100%
rename from js/html5shiv.js
rename to old/js/html5shiv.js
diff --git a/js/isotope.pkgd.min.js b/old/js/isotope.pkgd.min.js
similarity index 100%
rename from js/isotope.pkgd.min.js
rename to old/js/isotope.pkgd.min.js
diff --git a/js/jquery-1.8.3.min.js b/old/js/jquery-1.8.3.min.js
similarity index 100%
rename from js/jquery-1.8.3.min.js
rename to old/js/jquery-1.8.3.min.js
diff --git a/js/jquery-scrolltofixed.js b/old/js/jquery-scrolltofixed.js
similarity index 100%
rename from js/jquery-scrolltofixed.js
rename to old/js/jquery-scrolltofixed.js
diff --git a/js/jquery.1.8.3.min.js b/old/js/jquery.1.8.3.min.js
similarity index 100%
rename from js/jquery.1.8.3.min.js
rename to old/js/jquery.1.8.3.min.js
diff --git a/js/jquery.easing.1.3.js b/old/js/jquery.easing.1.3.js
similarity index 100%
rename from js/jquery.easing.1.3.js
rename to old/js/jquery.easing.1.3.js
diff --git a/js/jquery.isotope.js b/old/js/jquery.isotope.js
similarity index 100%
rename from js/jquery.isotope.js
rename to old/js/jquery.isotope.js
diff --git a/js/respond-1.1.0.min.js b/old/js/respond-1.1.0.min.js
similarity index 100%
rename from js/respond-1.1.0.min.js
rename to old/js/respond-1.1.0.min.js
diff --git a/js/wow.js b/old/js/wow.js
similarity index 100%
rename from js/wow.js
rename to old/js/wow.js