diff --git a/Vagrant Files/.gitkeep b/Vagrant Files/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Vagrant Files/InstallationInstructions.txt b/Vagrant Files/InstallationInstructions.txt new file mode 100644 index 0000000000000000000000000000000000000000..0e203ffb6ce7d831e137ba57cf35874bcbcce08b --- /dev/null +++ b/Vagrant Files/InstallationInstructions.txt @@ -0,0 +1,17 @@ + +Please ensure that you have installed Vagrant and have a virtual machine hypervisor installed on your host machine. +Virtualbox is the reccomended hypervisor for this software + + +Scytherbox Installation instructions: + +1. Create a new folder on your host machine + +2. Copy and paste or extract the contents of this folder into the newly created folder + +3. Open Powershell or your text terminal of choice and navigate to the newly created folder. + +4. type 'vagrant up' inside the folder. + +5. Allow time for Vagrant to download the base box and apply the provisioners to the box, this may take several minutes. + diff --git a/Vagrant Files/files/guide.txt b/Vagrant Files/files/guide.txt new file mode 100644 index 0000000000000000000000000000000000000000..390795e502bcb316649a5df31b03beb3ddfa047c --- /dev/null +++ b/Vagrant Files/files/guide.txt @@ -0,0 +1,10 @@ + +To run Scyther, the scyther-gui.py file is recomeded, this can be launched through terminal by typing: + +./scyther/scyther-gui.py + +From here, protocols can be loaded using the file -> open menu or crtl+o. By going Desktop->SyncedFiles->GitLink +Any protocols in your configured git repo can be opened. + +More information on how to use Scyther is availible in the Scyther manual which can be accessed from the desktop + diff --git a/Vagrant Files/shared/scyther/scyther-manual.pdf b/Vagrant Files/files/scyther-manual.pdf similarity index 100% rename from Vagrant Files/shared/scyther/scyther-manual.pdf rename to Vagrant Files/files/scyther-manual.pdf diff --git a/Vagrant Files/files/test folder/guide.txt b/Vagrant Files/files/test folder/guide.txt deleted file mode 100644 index e740c7a6aeaab478abe0ee0f3d090ff1b43baa88..0000000000000000000000000000000000000000 --- a/Vagrant Files/files/test folder/guide.txt +++ /dev/null @@ -1 +0,0 @@ -These are where the scyther install instructions and user guide parts are going to go \ No newline at end of file diff --git a/Vagrant Files/shared/GitLink/sessionkey.sdpl.txt b/Vagrant Files/shared/GitLink/sessionkey.sdpl.txt new file mode 100644 index 0000000000000000000000000000000000000000..0df74a26f69d3efa43478480ccd6ac1cbe8c0b67 --- /dev/null +++ b/Vagrant Files/shared/GitLink/sessionkey.sdpl.txt @@ -0,0 +1,42 @@ +usertype SessionKey; +usertype Message; + +protocol EncrpytedExchange(Meter,Monitor) + + { + + role Meter { + + fresh M: Message; + fresh TokenA: SessionKey; + var TokenB; + + send_1(Meter,Monitor,{TokenA}k(k)); + recv_2(Monitor,Meter,{TokenB}k(k)); + claim(Meter,Running,Monitor,M); + send_3(Meter,Monitor,{M}k(k)); + + claim_Meter1(Meter, Secret, (k)); + claim_Meter2(Meter, Secret, M); + claim_Meter3(Meter,Niagree); + claim_Meter4(Meter,Nisynch); + + } + + role Monitor { + + var M; + var TokenA; + fresh TokenB: SessionKey; + + recv_1(Meter,Monitor,{TokenA}k(k)); + send_2(Monitor,Meter,{TokenB}k(k)); + recv_3(Meter,Monitor,{M}k(k)); + + claim_Monitor1(Monitor, Secret, (k)); + claim_Monitor2(Monitor, Secret, M); + claim_Meter3(Monitor,Niagree); + claim_Meter4(Monitor,Nisynch); + + } +} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/.gitignore b/Vagrant Files/shared/scyther/.gitignore deleted file mode 100644 index e62e34e713e6c72fd0faa6b6736afbdf158ea136..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.pyc -progressbar.py -Cache -Cache-OLD diff --git a/Vagrant Files/shared/scyther/Changelog.txt b/Vagrant Files/shared/scyther/Changelog.txt deleted file mode 100644 index b2af59b55e9f31e3961cde5412d36f29819754b6..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Changelog.txt +++ /dev/null @@ -1,159 +0,0 @@ -Scyther changelog -=============================== - -Scyther 1.1.2 -------------------------------- - -Minor: - - * Updated installation instructions. - * Updated 'ffgg' protocol generator for new conventions. - * Windows users recently had to manually set the Graphviz path. Added a - hack to avoid this inconvenience in most (but not all) cases. - * Minor manual update. - -Bug fixes: - - * [Bugfix] Reverted use of shlex. This breaks the "abort backend - thread" functionality again, but it was causing too much trouble on - Windows. - -Scyther 1.1.1 -------------------------------- - -This is mostly a bugfix release. - -New features: - - * [Language] Weakagree and Alive claims now also allow for an optional role - parameter, which can be useful for protocols with more than two roles. - * [Misc] Added Python script to dump attack outputs for large sets of files. - * [Gui] Canceling verification now also kills back-end thread. - -Regression fixes: - - * [Regression-fix] Reintroduced option for specifying alternative PKI. - -Bug fixes: - - * [Bugfix] Fixed rare bug in some cases where hashes were used as symmetric keys. - * [Bugfix] Invoking Scyther scripts from non-standard directories or using symlinks should work consistently now. - * [Bugfix] Improving compatibility with recent versions of Graphviz (>2.26) - -Scyther 1.1 -------------------------------- - -Major new features: - - * [Language] Added support for `macro Term1 = Term2;` definitions, which greatly - simplifies many specifications. - * [Language] Added support for `match(T1,T2);` events in roles, which - can be used for e.g. a straightforward modeling of delayed decryption. - * [Language] Added support for `not match(T1,T2);` events in roles. - This can be useful for, e.g., modeling protocol restrictions (such as - `A != B`). - * [Language] Added support for `option "COMMANDLINE_OPTIONS";` in - specifications. This provides full access to the command-line options - of the Scyther backend to the protocol specifications. An example of - its use is `option "--one-role-per-agent";`. - * [Mac OS X] Dropped support for PPC in Scyther distributions, only - supporting Intel for now. Note that installing from source may still - work fine with a minor tweak to the build script. - -Additional protocol models: - -See <http://www.cs.ox.ac.uk/people/cas.cremers/tools/protocols.html> for a -more high-level overview of selected protocol models. - - * IEEE 802.16e/WIMAX: PKMv2rsa and variants - * IKEv1 and IKEv2 protocol suites - -Other new features: - - * `SCYTHERCACHEDIR` environment variable can be set to override the - internal cache path. - * [Backend] The command-line tool now supports the option - `--one-role-per-agent`. This disallows agents from performing more than - one role in a single trace. This effectively partitions the agents into - role sets, i.e., each role can only be performed by agents from one of - these sets. - * [Documentation] Added the first incomplete version of the new manual. - -There are also various minor bugfixes and installation improvements. - -Scyther 1.0 -------------------------------- - -Major new features: - - * [Language] Support for weak agreement - * [Language] Support for non-injective data agreement through `Commit` - and `Running` signals. - -Bugfixes: - - * Python 2.5 has integrated (c)elementtree into the core. - Unfortunaly, this broke our previous import attempts. This has now - been fixed. - -Scyther 1.0-beta7.1 -------------------------------- - -Bugfixes: - - * Windows Vista fix broke Windows XP support. - -Scyther 1.0-beta7 -------------------------------- - -Bugfixes: - - * Windows Vista causes a number of problems. The biggest problem - is now fixed, which is the bad implementation of the tmpfile() C - function, causing no attack output, for which there is a - workaround now. - -Scyther 1.0-beta6 -------------------------------- - -Major new features: - - * [Gui] Added Mac support (added universal binary) - * [Gui] Switched to Scintilla editor component, providing undo - and line numbering, and highlighting of error lines. - -Other new features: - - * [Backend] Scyther now detects when a recv event cannot match - with a send event. This significantly helps in reducing errors - in the protocol descriptions. - * [Language] Added claim parameter for Reachable claim; - Reachable,R means that role R should be trusted (as well as the - actor), but not any other role. This can be useful for showing - stronger authentication properties of protocols with more than - two parties. - * [Backend] Added '--max-of-role=N' switch (to narrow scenarios) - * [Backend] Added '--scan-claims' switch (allows for retrieving - a list of claims) - * [Scripting] Added 'verifyOne' and 'scanClaims' methods to - Scyther object, to help with singular claim testing. - - Bugfixes: - - * [Scripting] Fixed bug in python interface backend (e.g. with mpa.py) - -Scyther 1.0-beta5 -------------------------------- - - * Change of switch semantics. '--max-attacks=N' now defines the - maximum number of attacks per claim. Previously this was a - global maximum for all claims combined. - * Improved attack graph output. - * added switch '--errors=FILE' to redirect standard error output - to a file. - * Rewrote parts of the gui code for improved stability. - -Scyther 1.0-beta4 -------------------------------- - - * (Changelog starts after the release of Scyther 1.0-beta4) diff --git a/Vagrant Files/shared/scyther/GNU-General-Public-License.txt b/Vagrant Files/shared/scyther/GNU-General-Public-License.txt deleted file mode 100644 index d511905c1647a1e311e8b20d5930a37a9c2531cd..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/GNU-General-Public-License.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - 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 2 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, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Vagrant Files/shared/scyther/Gui/About.py b/Vagrant Files/shared/scyther/Gui/About.py deleted file mode 100644 index b415c55de04ed388c08c39f3ec0b4a8ce1fe8397..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/About.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import wx.html -import os.path - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ - -import Scyther - -#--------------------------------------------------------------------------- - -""" Globals """ - -basedir = "" - -#--------------------------------------------------------------------------- - -def setBaseDir(mybasedir): - global basedir - - basedir = mybasedir - -#--------------------------------------------------------------------------- - -class AboutScyther(wx.Dialog): - def __init__(self,parent,mybasedir=None): - - from Version import SCYTHER_GUI_VERSION - global basedir - - self.text = ''' -<html> -<body bgcolor="#ffffff"> -<img src="$SPLASH"> -<h5 align="right">Scyther : $VERSION</h5> -<small> - <p> - <b>Scyther</b> is an automatic tool for the verification and - falsification of security protocols. - </p> - <p> - For news and updates visit the Scyther pages at - <a target="_blank" href="http://www.cs.ox.ac.uk/people/cas.cremers/scyther/index.html"> - http://www.cs.ox.ac.uk/people/cas.cremers/scyther/index.html</a> - </p> - <h5>License</h5> - <p> - Scyther : An automatic verifier for security protocols.<br> - Copyright (C) 2007-2013 Cas Cremers - </p> - <p> - 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 2 - of the License, or (at your option) any later version. - </p> - <p> - 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. - </p> - <p> - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - </p> - <h5>Backend version</h5> - <p> - $DETAILS - </p> - <h5>Credits</h5> - <p> - Cas Cremers (Scyther theory, backend, and main GUI - code), Gijs Hollestelle (Python parser for Scyther XML output). - </p> -</small> - ''' - - if mybasedir: - basedir = mybasedir - - # Debugging output of some parameters - - splashdir = os.path.join(basedir,"Images") - splashimage = os.path.join(splashdir,"scyther-splash.png") - details_html = "Base directory: %s<br>\n" % (basedir) - details_html += Scyther.Scyther.GetInfo(html=True) - - self.text = self.text.replace("$SPLASH",splashimage) - self.text = self.text.replace("$DETAILS",details_html) - - # version information - self.text = self.text.replace("$VERSION", SCYTHER_GUI_VERSION) - - wx.Dialog.__init__(self, parent, -1, 'About Scyther', - size=(660,620)) - html = wx.html.HtmlWindow(self) - #if "gtk2" in wx.PlatformInfo: - # html.SetStandardFonts() - html.SetBorders(10) - html.SetPage(self.text) - button = wx.Button(self, wx.ID_OK, "Close window") - - sizer = wx.BoxSizer(wx.VERTICAL) - sizer.Add(html, 1, wx.EXPAND|wx.ALL,0) - sizer.Add(button,0,wx.ALIGN_CENTER|wx.ALL,5) - - self.SetSizer(sizer) - self.Layout() - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Attackwindow.py b/Vagrant Files/shared/scyther/Gui/Attackwindow.py deleted file mode 100644 index 39b9f063fc5aa1c56184cb14888a77431846bfaf..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Attackwindow.py +++ /dev/null @@ -1,330 +0,0 @@ -#!/usr/bin/python -from __future__ import division # 2.2+-only -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import os -from Misc import * - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ -import Icon -import Preference -import Error - -#--------------------------------------------------------------------------- -try: - import Image -except ImportError: - pass - -#--------------------------------------------------------------------------- - -class AttackDisplay(wx.ScrolledWindow): - """ - Display an attack (inside a tab or not) - """ - def __init__(self, daddy, parent, attack): - - self.win = daddy - self.attack = attack - - wx.ScrolledWindow.__init__(self,parent,id=-1) - - self.Bind(wx.EVT_SIZE, self.OnSize) - self.Image = wx.StaticBitmap(self, -1, wx.EmptyBitmap(1,1)) - self.box = wx.BoxSizer(wx.VERTICAL) - self.box.Add(self.Image,1,wx.ALIGN_CENTER) - self.hbox = wx.BoxSizer(wx.HORIZONTAL) - self.hbox.Add(self.box,1,wx.ALIGN_CENTER) - self.SetSizer(self.hbox) - - self.original = None - - filename = attack.file - if attack.filetype == "png": - self.original = wx.Image(filename,wx.BITMAP_TYPE_PNG) - elif attack.filetype == "ps": - # depends on PIL lib - try: - self.original = Image.open(filename) - except: - Preference.doNotUsePIL() - raise Error.PILError - else: - print "Unknown file type %s." % (self.filetype) - - # TODO self.Bind(wxSizeEvent - self.update(True) - self.Fit() - - def OnSize(self,event): - self.update(False) - event.Skip() - - def update(self,force=True): - - if not force: - if not self.win.fit: - return - - # This is needed, don't ask me why. - self.SetScrollbars(0,0,0,0,0,0) - - (framewidth,frameheight) = self.GetClientSizeTuple() - (virtualwidth,virtualheight) = (framewidth,frameheight) - - def makefit(width,height): - if self.win.fit: - # determine scaling factors for fitting - wfactor = float(framewidth) / width - hfactor = float(frameheight) / height - - # select smallest factor (so it will fit) - if hfactor < wfactor: - factor = hfactor - else: - factor = wfactor - - # apply scaling factor - width = width * factor - height = height * factor - else: - factor = 1.0 - - return (factor, int(width), int(height)) - - if self.attack.filetype == "png": - bmp = self.original - if not bmp.Ok(): - bmp = wx.EmptyImage(1,1) - else: - (originalwidth,originalheight) = (bmp.GetWidth(), bmp.GetHeight()) - if self.win.fit: - (factor, virtualwidth, virtualheight) = makefit(originalwidth,originalheight) - bmp = self.original.Scale(virtualwidth,virtualheight) - self.Image.SetBitmap(wx.BitmapFromImage(bmp)) - - elif self.attack.filetype == "ps": - pil = self.original.copy() - (originalwidth,originalheight) = pil.size - (factor, virtualwidth, virtualheight) = makefit(originalwidth,originalheight) - # we really only want antialias when it's smaller - if factor < 1.0: - pil.thumbnail((virtualwidth,virtualheight),Image.ANTIALIAS) - else: - pil.thumbnail((virtualwidth,virtualheight)) - - image = wx.EmptyImage(pil.size[0],pil.size[1]) - image.SetData(pil.convert('RGB').tostring()) - self.Image.SetBitmap(image.ConvertToBitmap()) - - else: - print "Unknown file type %s." % (self.attack.filetype) - - self.SetVirtualSize((virtualwidth,virtualheight)) - - #self.box.SetItemMinSize(self.Image.GetContainingSizer()) - self.box.Layout() - - step = 20 - xn = int(virtualwidth // step) + 1 - yn = int(virtualheight // step) + 1 - self.SetScrollbars(step,step,xn,yn,0,0) - - """ - Pop up menu - """ - self.popupmenu = wx.Menu() - item = self.popupmenu.Append(-1,"Export image (.png)") - self.Bind(wx.EVT_MENU, self.OnExportPng, item) - item = self.popupmenu.Append(-1,"Export image (.ps)") - self.Bind(wx.EVT_MENU, self.OnExportPs, item) - item = self.popupmenu.Append(-1,"Export image (.pdf)") - self.Bind(wx.EVT_MENU, self.OnExportPdf, item) - item = self.popupmenu.Append(-1,"Export image (.svg)") - self.Bind(wx.EVT_MENU, self.OnExportSvg, item) - item = self.popupmenu.Append(-1,"Export image (.fig)") - self.Bind(wx.EVT_MENU, self.OnExportFig, item) - item = self.popupmenu.Append(-1,"Export graphviz data (.dot)") - self.Bind(wx.EVT_MENU, self.OnExportDot, item) - - self.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup) - - self.Refresh() - - def OnShowPopup(self, event): - pos = event.GetPosition() - pos = self.Image.ScreenToClient(pos) - self.PopupMenu(self.popupmenu, pos) - - def OnPopupItemSelected(self, event): - item = self.popupmenu.FindItemById(event.GetId()) - text = item.GetText() - wx.MessageBox("You selected item %s" % text) - - def askUserForFilename(self, **dialogOptions): - dialog = wx.FileDialog(self, **dialogOptions) - if dialog.ShowModal() == wx.ID_OK: - res = "%s/%s" % (dialog.GetDirectory(), dialog.GetFilename()) - else: - res = None - dialog.Destroy() - return res - - def saveFileName(self, ext): - (p,r,l) = self.win.claim.triplet() - prefix = "pattern-%s_%s_%s-%s" % (p,r,l,self.attack.id) - suggested = "%s.%s" % (prefix,ext) - res = self.askUserForFilename(style=wx.SAVE, wildcard="*.%s" % (ext), defaultFile = "%s" % (suggested)) - return res - - def exportImage(self, type,ext=None): - if ext == None: - ext = type - res = self.saveFileName(ext) - if res != None: - cmd = "dot -T%s" % (type) - cmdpushwrite(cmd,self.attack.scytherDot,res) - - def OnExportPng(self, event): - self.exportImage("png") - - def OnExportPs(self, event): - self.exportImage("ps") - - def OnExportPdf(self, event): - self.exportImage("pdf") - - def OnExportSvg(self, event): - self.exportImage("svg") - - def OnExportFig(self, event): - self.exportImage("fig") - - def OnExportDot(self, event): - res = self.saveFileName("dot") - if res != None: - fp = open(res,'w') - fp.write(self.attack.scytherDot) - fp.close() - - - - - -#--------------------------------------------------------------------------- - -class AttackWindow(wx.Frame): - def __init__(self,cl): - super(AttackWindow, self).__init__(None, size=(800,800)) - - self.claim = cl - - # TODO maybe fitting defaults should come from Preferences. - # Now, it is default no even if we have PIL, for performance - # reasons. - self.fit = False - - self.CreateInteriorWindowComponents() - - Icon.ScytherIcon(self) - self.SetTitle() - - def SetTitle(self): - - tstr = self.claim.stateName(len(self.claim.attacks),True) - tstr += " for claim %s" % self.claim.id - super(AttackWindow, self).SetTitle(tstr) - - def CreateInteriorWindowComponents(self): - ''' Create "interior" window components. In this case it is the - attack picture. ''' - - sizer = wx.BoxSizer(wx.VERTICAL) - - # Make zoom buttons - if Preference.usePIL(): - buttons = wx.BoxSizer(wx.HORIZONTAL) - bt = wx.ToggleButton(self,-1,"Fit to window") - bt.SetValue(self.fit) - buttons.Add(bt,0) - self.Bind(wx.EVT_TOGGLEBUTTON, self.OnFit, bt) - sizer.Add(buttons, 0, wx.ALIGN_LEFT) - - # Add attacks (possible with tabs) - self.displays=[] - attacks = self.claim.attacks - - n = len(attacks) - if n <= 1: - # Just a single window - dp = AttackDisplay(self, self, attacks[0]) - self.displays.append(dp) - else: - # Multiple tabs - dp = wx.Notebook(self,-1) - for i in range(0,n): - disp = AttackDisplay(self,dp,attacks[i]) - classname = "%s %i" % (self.claim.stateName(1,True),(i+1)) - dp.AddPage(disp, classname) - self.displays.append(disp) - - sizer.Add(dp, 1, wx.EXPAND,1) - - self.SetSizer(sizer) - - def update(self,force=False): - for t in self.displays: - t.update(force) - - def OnFit(self,event): - - if self.fit: - self.fit = False - else: - self.fit = True - self.update(True) - - def OnRealSize(self): - - self.fit = False - self.update(True) - - def OnSize(self): - self.Refresh() - - def OnZoom100(self,evt): - self.fit = False - self.update(True) - self.Refresh() - - def OnZoomFit(self,evt): - self.fit = True - self.update(True) - self.Refresh() - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Editor.py b/Vagrant Files/shared/scyther/Gui/Editor.py deleted file mode 100644 index b3e093fb5099b53dde685058d029fb739d43f4e5..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Editor.py +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import string - -# Use Scintilla editor? -useStc = True # It looks nicer! -#useStc = False # It is sometimes buggy, claims the internet - -# Test Scintilla and if it fails, get rid of it -if useStc: - try: - from wx.stc import * - except: - useStc = False - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ - -#--------------------------------------------------------------------------- - -""" Some constants """ - -#--------------------------------------------------------------------------- - -def justNumbers(txt): - for x in txt: - if not x in string.digits: - return False - return True - -def lineInError(txt): - # First option: square braces - x1 = txt.find("[") - if x1 >= 0: - x2 = txt.find("]") - if x2 > x1: - nrstring = txt[(x1+1):x2] - if justNumbers(nrstring): - return int(nrstring) - # Alternative: ...line x - pref = " line " - i = txt.find(pref) - if i >= 0: - i = i + len(pref) - j = i - while txt[j] in string.digits: - j = j+1 - if j > i: - return int(txt[i:j]) - - return None - -def selectEditor(parent): - """ - Pick an editor (Scintilla or default) and return the object. - """ - if useStc: - return EditorStc(parent) - else: - return EditorNormal(parent) - -#--------------------------------------------------------------------------- - -class Editor(object): - - def __init__(self, parent): - # Empty start - self.SetText("") - self.SetChanged(False) - - def SetText(self): - pass - - def SetErrors(self,errors): - pass - - def GetChanged(self): - """ - Return true if file was changed - """ - return self.savedtext != self.GetText() - - def SetChanged(self,nowchanged=False): - """ - Set changed status - """ - if nowchanged: - self.savedtext = "" - else: - self.SetSaved() - - def SetSaved(self): - self.savedtext = self.GetText() - - def SetOpened(self): - self.SetSaved() - -#--------------------------------------------------------------------------- - -class EditorNormal(Editor): - - def __init__(self, parent): - self.control = wx.TextCtrl(parent, style=wx.TE_MULTILINE) - - # Call parent - Editor.__init__(self,parent) - - def GetText(self): - return self.control.GetValue() - - def SetText(self, txt): - self.control.SetValue(txt) - -#--------------------------------------------------------------------------- - -class EditorStc(Editor): - - def __init__(self, parent): - # Scintilla layout with line numbers - self.control = StyledTextCtrl(parent) - self.control.SetMarginType(1, STC_MARGIN_NUMBER) - self.control.SetMarginWidth(1, 30) - - # Call parent - Editor.__init__(self,parent) - - # Set variable for error style - self.errorstyle = 5 - self.control.StyleSetSpec(self.errorstyle, "fore:#FFFF0000,back:#FF0000") - - def GetText(self): - return self.control.GetText() - - def SetText(self, txt): - self.control.SetText(txt) - - def GetLineCount(self): - """ Currently rather stupid, can probably be done more - efficiently through some Scintilla function. """ - txt = self.GetText().splitlines() - return len(txt) - - def SetErrorLine(self,line): - """ - Currently this is BROKEN for include commands, as no file names - are propagated. To minize the damage, we at least don't try to - highlight non-existing names. In the long run of course - propagation is the only way to handle this. - """ - if line <= self.GetLineCount(): - if line > 0: - line = line - 1 # Start at 0 in stc, but on screen count is 1 - pos = self.control.GetLineIndentPosition(line) - last = self.control.GetLineEndPosition(line) - self.control.StartStyling(pos,31) - self.control.SetStyling(last-pos,self.errorstyle) - - def ClearErrors(self): - self.control.ClearDocumentStyle() - - def SetErrors(self,errors): - if errors: - for el in errors: - nr = lineInError(el) - if nr: - self.SetErrorLine(nr) - else: - self.ClearErrors() - -#--------------------------------------------------------------------------- - diff --git a/Vagrant Files/shared/scyther/Gui/Error.py b/Vagrant Files/shared/scyther/Gui/Error.py deleted file mode 100644 index 6433cf21b2d6f8aac8a0a7205427bddb5bcf9955..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Error.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import sys - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ - -#--------------------------------------------------------------------------- - -class PILError (Exception): - pass - -class NoAttackError(Exception): - pass - -#--------------------------------------------------------------------------- - -def ShowAndReturn(text): - title = "Error" - dlg = wx.MessageDialog(None, text, title, wx.ID_OK | wx.ICON_ERROR) - result = dlg.ShowModal() - dlg.Destroy() - -def ShowAndExit(text): - ShowAndReturn(text) - sys.exit() - diff --git a/Vagrant Files/shared/scyther/Gui/Icon.py b/Vagrant Files/shared/scyther/Gui/Icon.py deleted file mode 100644 index 2f4f26fb6ef913c2ec500ef8edd1ef26623e80ed..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Icon.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import os.path -import sys - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ -import Misc - -#--------------------------------------------------------------------------- - -def ScytherIcon(window): - """ Set a nice Scyther icon """ - import os,inspect - - # Determine base directory (taking symbolic links into account) - cmd_file = os.path.realpath(os.path.abspath(inspect.getfile( inspect.currentframe() ))) - basedir = os.path.split(cmd_file)[0] - - path = os.path.join(basedir,"Images") - iconfile = Misc.mypath(os.path.join(path,"scyther-gui-32.ico")) - if os.path.isfile(iconfile): - icon = wx.Icon(iconfile,wx.BITMAP_TYPE_ICO) - window.SetIcon(icon) - - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Mainwindow.py b/Vagrant Files/shared/scyther/Gui/Mainwindow.py deleted file mode 100644 index 70ce11232361eea3ca4513710a3ff2d0d64fa651..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Mainwindow.py +++ /dev/null @@ -1,322 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import os.path - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ -import Settingswindow -import Scytherthread -import Icon -import About -import Editor -import Preference - -#--------------------------------------------------------------------------- - -""" Some constants """ -ID_VERIFY = 100 -ID_AUTOVERIFY = 101 -ID_CHARACTERIZE = 102 -ID_CHECK = 103 - -#--------------------------------------------------------------------------- - -def MainInitOnce(): - result = Preference.usePIL() # Makes sure PIL is tested. - -class MainWindow(wx.Frame): - - def __init__(self, opts, args): - super(MainWindow, self).__init__(None, size=(600,800)) - - self.opts = opts - self.args = args - - self.dirname = os.path.abspath('.') - - MainInitOnce() - - self.filename = 'noname.spdl' - self.filepath = "" - - self.load = False - - # test - if opts.test: - self.filename = 'scythergui-default.spdl' - self.load = True - - # if there is an argument (file), we load it - if len(args) > 0: - filename = args[0] - if filename != '' and os.path.isfile(filename): - (self.dirname,self.filename) = os.path.split(filename) - self.load = True - - Icon.ScytherIcon(self) - - self.CreateInteriorWindowComponents() - self.CreateExteriorWindowComponents() - - aTable = wx.AcceleratorTable([ - (wx.ACCEL_CTRL, ord('Q'), wx.ID_EXIT), - (wx.ACCEL_NORMAL, wx.WXK_F1, - ID_VERIFY), - (wx.ACCEL_NORMAL, wx.WXK_F2, - ID_CHARACTERIZE), - (wx.ACCEL_NORMAL, wx.WXK_F5, - ID_CHECK), - (wx.ACCEL_NORMAL, wx.WXK_F6, - ID_AUTOVERIFY), - ]) - self.SetAcceleratorTable(aTable) - - self.claimlist = [] - self.pnglist = [] - - #self.SetTitle(self.title) - - self.firstCommand() - - def CreateInteriorWindowComponents(self): - ''' Create "interior" window components. In this case it is just a - simple multiline text control. ''' - - ## Make zoom buttons - #sizer = wx.BoxSizer(wx.VERTICAL) - #buttons = wx.BoxSizer(wx.HORIZONTAL) - #bt = wx.Button(self,ID_VERIFY) - #buttons.Add(bt,0) - #self.Bind(wx.EVT_BUTTON, self.OnVerify, bt) - #bt = wx.Button(self,ID_CHARACTERIZE) - #buttons.Add(bt,0) - #self.Bind(wx.EVT_BUTTON, self.OnCharacterize, bt) - #sizer.Add(buttons, 0, wx.ALIGN_LEFT) - - # Top: input - self.top = wx.Notebook(self,-1) - # Editor there - self.editor = Editor.selectEditor(self.top) - - if self.load: - textfile = open(os.path.join(self.dirname, self.filename), 'r') - self.editor.SetText(textfile.read()) - if self.dirname != "": - os.chdir(self.dirname) - textfile.close() - self.editor.SetOpened() - - self.top.AddPage(self.editor.control,"Protocol description") - self.settings = Settingswindow.SettingsWindow(self.top,self) - self.top.AddPage(self.settings,"Settings") - - #sizer.Add(self.top,1,wx.EXPAND,1) - #self.SetSizer(sizer) - - def CreateExteriorWindowComponents(self): - ''' Create "exterior" window components, such as menu and status - bar. ''' - self.CreateMenus() - self.SetTitle() - - def CreateMenu(self, bar, name, list): - - fileMenu = wx.Menu() - for id, label, helpText, handler in list: - if id == None: - fileMenu.AppendSeparator() - else: - item = fileMenu.Append(id, label, helpText) - self.Bind(wx.EVT_MENU, handler, item) - bar.Append(fileMenu, name) # Add the fileMenu to the MenuBar - - - def CreateMenus(self): - menuBar = wx.MenuBar() - self.CreateMenu(menuBar, '&File', [ - (wx.ID_OPEN, '&Open', 'Open a new file', self.OnOpen), - (wx.ID_SAVE, '&Save', 'Save the current file', self.OnSave), - (wx.ID_SAVEAS, 'Save &As', 'Save the file under a different name', - self.OnSaveAs), - (None, None, None, None), - (wx.ID_EXIT, 'E&xit\tCTRL-Q', 'Terminate the program', - self.OnExit)]) - self.CreateMenu(menuBar, '&Verify', - [(ID_VERIFY, '&Verify protocol\tF1','Verify the protocol in the buffer using Scyther', - self.OnVerify) , - (ID_CHARACTERIZE, '&Characterize roles\tF2','TODO' , - self.OnCharacterize) , - (None, None, None, None), - ### Disabled for now (given that it is not reliable enough yet) - #(ID_CHECK, '&Check protocol\tF5','TODO', - # self.OnCheck) , - (ID_AUTOVERIFY, 'Verify &automatic claims\tF6','TODO', - self.OnAutoVerify) - ]) - self.CreateMenu(menuBar, '&Help', - [(wx.ID_ABOUT, '&About', 'Information about this program', - self.OnAbout) ]) - self.SetMenuBar(menuBar) # Add the menuBar to the Frame - - - def SetTitle(self): - # MainWindow.SetTitle overrides wx.Frame.SetTitle, so we have to - # call it using super: - super(MainWindow, self).SetTitle('Scyther: %s'%self.filename) - - # Helper methods: - - def defaultFileDialogOptions(self): - ''' Return a dictionary with file dialog options that can be - used in both the save file dialog as well as in the open - file dialog. ''' - return dict(message='Choose a file', defaultDir=self.dirname, - wildcard='*.spdl') - - def askUserForFilename(self, **dialogOptions): - dialog = wx.FileDialog(self, **dialogOptions) - if dialog.ShowModal() == wx.ID_OK: - userProvidedFilename = True - self.filepath = dialog.GetPath() - (p1,p2) = os.path.split(self.filepath) - self.dirname = p1 - self.filename = p2 - self.SetTitle() # Update the window title with the new filename - else: - userProvidedFilename = False - dialog.Destroy() - return userProvidedFilename - - # Are we dropping a changed file? - - def ConfirmLoss(self,text=None): - """ - Try to drop the current file. If it was changed, try to save - (as) - - Returns true after the user seems to be happy either way, false - if we need to cancel this. - """ - if self.editor.GetChanged(): - # File changed, we need to confirm this - title = "Unsaved changes" - if text: - title = "%s - " + title - txt = "The protocol file '%s' has been modified.\n\n" % (self.filename) - txt = txt + "Do you want to" - txt = txt + " save your changes (Yes)" - txt = txt + " or" - txt = txt + " discard them (No)" - txt = txt + "?" - dialog = wx.MessageDialog(self,txt,title,wx.YES_NO | wx.CANCEL | wx.ICON_EXCLAMATION) - result = dialog.ShowModal() - dialog.Destroy() - if result == wx.ID_NO: - # Drop changes - return True - elif result == wx.ID_YES: - # First save(as)! - if self.OnSaveAs(None): - # Succeeded, we can continue with the operation - return True - else: - # Save did not succeed - return False - else: - # Assume cancel (wx.ID_CANCEL) otherwise - return False - else: - # File was not changed, so we can just proceed - return True - - # Event handlers - - def OnAbout(self, event): - dlg = About.AboutScyther(self) - dlg.ShowModal() - dlg.Destroy() - - def OnExit(self, event): - if self.ConfirmLoss("Exit"): - self.Close() # Close the main window. - return True - return False - - def OnSave(self, event): - textfile = open(os.path.join(self.dirname, self.filename), 'w') - textfile.write(self.editor.GetText()) - textfile.close() - self.editor.SetSaved() - return True - - def OnOpen(self, event): - if self.ConfirmLoss("Open"): - if self.askUserForFilename(style=wx.OPEN, - **self.defaultFileDialogOptions()): - textfile = open(os.path.join(self.dirname, self.filename), 'r') - self.editor.SetText(textfile.read()) - textfile.close() - self.editor.SetOpened() - return True - return False - - def OnSaveAs(self, event): - if self.askUserForFilename(defaultFile=self.filename, style=wx.SAVE, - **self.defaultFileDialogOptions()): - self.OnSave(event) - os.chdir(self.dirname) - return True - return False - - def RunScyther(self, mode): - # Clear errors before verification - self.editor.SetErrors(None) - # Verify spdl - spdl = self.editor.GetText() - s = Scytherthread.ScytherRun(self,mode,spdl,self.editor.SetErrors) - - def OnVerify(self, event): - self.RunScyther("verify") - - def OnAutoVerify(self, event): - self.RunScyther("autoverify") - - def OnCharacterize(self, event): - self.RunScyther("characterize") - - def OnCheck(self, event): - self.RunScyther("check") - - def firstCommand(self): - if self.opts.command: - # Trigger a command automatically - self.Show(True) - self.RunScyther(self.opts.command) - - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Makeimage.py b/Vagrant Files/shared/scyther/Gui/Makeimage.py deleted file mode 100644 index 220996f53dcfdf06300afe2c41a103b4cd9ee33d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Makeimage.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import os -import sys -from subprocess import Popen, PIPE - -#--------------------------------------------------------------------------- - -""" Import scyther components """ -from Scyther import Misc as MiscScyther -from Scyther import FindDot - -""" Import scyther-gui components """ -import Temporary -import Preference - -#--------------------------------------------------------------------------- -try: - import Image -except ImportError: - pass -#--------------------------------------------------------------------------- - - -def writeGraph(attackthread,txt,fp): - - EDGE = 0 - NODE = 1 - DEFAULT = 2 - ALL = 3 - - def graphLine(txt): - fp.write("\t%s;\n" % (txt)) - - def setAttr(atxt,EdgeNodeDefAll=ALL): - if EdgeNodeDefAll == ALL: - setAttr(atxt,EDGE) - setAttr(atxt,NODE) - setAttr(atxt,DEFAULT) - else: - if EdgeNodeDefAll == EDGE: - edge = "edge" - elif EdgeNodeDefAll == NODE: - edge = "node" - else: - graphLine("%s" % atxt) - return - graphLine("%s [%s]" % (edge,atxt)) - - if sys.platform.startswith("darwin"): - attackthread.fontname = "Helvetica" - elif sys.platform.startswith("win"): - attackthread.fontname = "Courier" - else: - #font = wx.Font(9,wx.SWISS,wx.NORMAL,wx.NORMAL) - #attackthread.fontname = font.GetFaceName() - attackthread.fontname = "\"Helvetica\"" - - # write all graph lines but add layout modifiers - for l in txt.splitlines(): - fp.write(l) - if l.startswith("digraph"): - # Write additional stuff for this graph - # - # [CC][x] This dpi setting messed up quite a bit - #graphLine("dpi=96") - graphLine("rankdir=TB") - #graphLine("nodesep=0.1") - #graphLine("ranksep=0.001") - #graphLine("mindist=0.1") - - # Set fontname - if attackthread.fontname: - fontstring = "fontname=%s" % (attackthread.fontname) - setAttr(fontstring) - - # Stupid Mac <> Graphviz bug fix - if (sys.platform.startswith("mac")) or (sys.platform.startswith("darwin")): - # Note that dot on Mac cannot find the fonts by default, - # and we have to set them accordingly. - os.environ["DOTFONTPATH"]="~/Library/Fonts:/Library/Fonts:/System/Library/Fonts" - - # Select font size - if attackthread.parent and attackthread.parent.mainwin: - fontsize = attackthread.parent.mainwin.settings.fontsize - setAttr("fontsize=%s" % fontsize) - #setAttr("height=\"0.1\"",NODE) - #setAttr("width=\"1.0\"",NODE) - #setAttr("margin=\"0.3,0.03\"",NODE) - - -def makeImageDot(dotdata,attackthread=None): - """ create image for this particular dot data """ - - if Preference.usePIL(): - # If we have the PIL library, we can do postscript! great - # stuff. - type = "ps" - ext = ".ps" - else: - # Ye olde pnge file - type = "png" - ext = ".png" - - # Retrieve dot command path - dotcommand = FindDot.findDot() - - # command to write to temporary file - (fd2,fpname2) = Temporary.tempcleaned(ext) - f = os.fdopen(fd2,'w') - - # Set up command - cmd = "%s -T%s" % (dotcommand,type) - - # execute command - p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE) - - - if attackthread: - writeGraph(attackthread,dotdata,p.stdin) - else: - p.stdin.write(dotdata) - - p.stdin.close() - - for l in p.stdout.read(): - f.write(l) - - p.stdout.close() - f.flush() - f.close() - - return (fpname2, type) - - -def makeImage(attack,attackthread=None): - """ create image for this particular attack """ - - """ This should clearly be a method of 'attack' """ - - (name,type) = makeImageDot(attack.scytherDot,attackthread) - # if this is done, store and report - attack.file = name - attack.filetype = type - - -def testImage(): - """ - We generate a postscript file from a dot file, and see what happens. - """ - - dotdata = "digraph X {\nA->B;\n}\n" - (filename,filetype) = makeImageDot(dotdata) - testimage = Image.open(filename) - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Misc.py b/Vagrant Files/shared/scyther/Gui/Misc.py deleted file mode 100644 index f255124b901660b5cef3c81de99fd6931092982a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Misc.py +++ /dev/null @@ -1,90 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Misc.py -# Various helper functions - -#--------------------------------------------------------------------------- - -""" Import externals """ -import os.path -from subprocess import Popen,PIPE - -#--------------------------------------------------------------------------- - -def confirm(question): - answer = '' - while answer not in ('y','n'): - print question, - answer = raw_input().lower() - return answer == 'y' - -def exists(func,list): - return len(filter(func,list)) > 0 - -def forall(func,list): - return len(filter(func,list)) == len(list) - -def uniq(li): - result = [] - for elem in li: - if (not elem in result): - result.append(elem) - return result - -# Return a sorted copy of a list -def sorted(li): - result = li[:] - result.sort() - return result - - -# path -def mypath(file): - """ Construct a file path relative to the scyther-gui main directory - """ - import os, inspect - - # Determine base directory (taking symbolic links into account) - cmd_file = os.path.realpath(os.path.abspath(inspect.getfile( inspect.currentframe() ))) - basedir = os.path.split(cmd_file)[0] - return os.path.join(basedir,file) - -# commands: push data in, get fp.write out -def cmdpushwrite(cmd,data,fname): - """ - Feed stdin data to cmd, write the output to a freshly created file - 'fname'. The file is flushed and closed at the end. - """ - fp = open(fname,'w') - # execute command - p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE) - (cin,cout) = (p.stdin, p.stdout) - - cin.write(data) - cin.close() - for l in cout.read(): - fp.write(l) - cout.close() - fp.flush() - fp.close() - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Preference.py b/Vagrant Files/shared/scyther/Gui/Preference.py deleted file mode 100644 index 90db53190cdd49151202d90e6dd9b73ef9e200db..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Preference.py +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -""" - Preferences window and logic for saving and loading such things. - Thus, some default things can be set here. - - init loads stuff - save save the settings after some changes - set(k,v) - get(k) - - Currently used: - - match - maxruns - scytheroptions - bindir where the scyther executables reside - splashscreen 0/1 -""" - -#--------------------------------------------------------------------------- - -""" Import externals """ - -import wx -import os.path -import sys -from time import localtime,strftime - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ -import Makeimage - -#--------------------------------------------------------------------------- - -""" Globals """ -# Do we have the Python Imaging library? -havePIL = True -testPILOkay = None -try: - import Image -except ImportError: - havePIL = False - -""" Locations of preferences. The last one is supposedly writable. """ -prefname = "scythergui-config" -preflocs = [] - -#--------------------------------------------------------------------------- - -def usePIL(): - """ - Determine whether or not we should use the PIL library - """ - global havePIL, testPILOkay - - if not havePIL: - return False - - # Only if we have it, and it is windows. - if not sys.platform.startswith("lin"): - return False - - # Seems fine. But did we already test it? - if testPILOkay != None: - return testPILOkay - - # Test the usage - testPILOkay = True - testPILOkay = testPIL() - return testPILOkay - -def doNotUsePIL(): - """ - Disable - """ - global havePIL - - havePIL = False - - -def testPIL(): - """ - Test whether PIL works as we want it. - - We generate a postscript file from a dot file, and see what happens. - """ - - # depends on PIL lib - okay = True - try: - Makeimage.testImage() - # PIL seems fine - except: - # PIL broke - doNotUsePIL() - okay = False - - return okay - - -#--------------------------------------------------------------------------- - -class Preferences(dict): - - def setDict(self,d): - """ - Copy dict into self. - """ - for x in d.keys(): - self[x] = d[x] - - def parse(self,line): - line = line.strip() - - """ Skip comments """ - if not line.startswith("#"): - split = line.find("=") - if split != -1: - key = line[:split].strip() - data = line[(split+1):] - self[key] = data.decode("string_escape") - #print "Read %s=%s" % (key,self[key]) - - def load(self,file=""): - if file == None: - self["test1"] = "Dit is met een ' en een \", en dan\nde eerste dinges" - self["test2"] = "En dit de tweede" - elif file == "": - """ - Test default locations - """ - for f in preflocs: - self.load(os.path.join(f,prefname)) - - else: - """ - Read this file - """ - if os.path.isfile(file): - fp = open(file,"r") - for l in fp.readlines(): - self.parse(l) - fp.close() - - def show(self): - print "Preferences:" - for k in self.keys(): - print "%s=%s" % (k, self[k]) - - def save(self): - - print "Saving preferences" - prefpath = preflocs[-1] - if not os.access(prefpath,os.W_OK): - os.makedirs(prefpath) - savename = os.path.join(prefpath,prefname) - fp = open(savename,"w") - - fp.write("# Scyther-gui configuration file.\n#\n") - date = strftime("%c",localtime()) - fp.write("# Last written on %s\n" % (date)) - fp.write("# Do not edit - any changes will be overwritten by Scyther-gui\n\n") - - l = list(self.keys()) - l.sort() - for k in l: - fp.write("%s=%s\n" % (k, self[k].encode("string_escape"))) - - fp.close() - -def init(): - """ - Load the preferences from a file, if possible - """ - global prefs,preflocs - - sp = wx.StandardPaths.Get() - confdir = sp.GetConfigDir() - confdir += "/scyther" - #print confdir - userconfdir = sp.GetUserConfigDir() - userconfdir += "/" - if sys.platform.startswith("lin"): - userconfdir += "." - userconfdir += "scyther" - #print userconfdir - - preflocs = [confdir,userconfdir] - - prefs = Preferences() - prefs.load("") - - -def get(key,alt=None): - global prefs - - if key in prefs.keys(): - return prefs[key] - else: - return alt - -def getkeys(): - global prefs - - return prefs.keys() - -def set(key,value): - global prefs - - prefs[key]=value - return - -def save(): - global prefs - - prefs.save() - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Scytherthread.py b/Vagrant Files/shared/scyther/Gui/Scytherthread.py deleted file mode 100644 index 2cd5d1aaa51cbce8fbf1f55e8149363e2dde61a0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Scytherthread.py +++ /dev/null @@ -1,543 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import threading - -#--------------------------------------------------------------------------- - -""" Import scyther components """ -import Scyther.Scyther -import Scyther.Error -from Scyther.Misc import * - -""" Import scyther-gui components """ -import Preference -import Attackwindow -import Icon -import Error -import Makeimage - -#--------------------------------------------------------------------------- -if Preference.havePIL: - import Image -#--------------------------------------------------------------------------- - -class ScytherThread(threading.Thread): - """ - Apply Scyther algorithm to input and retrieve results - """ - - # Override Thread's __init__ method to accept the parameters needed: - def __init__ ( self, spdl, options="", callback=None, mode=None ): - - self.spdl = spdl - self.options = options - self.callback = callback - self.mode = mode - self.popenList = [] - threading.Thread.__init__ ( self ) - - def storePopen(self,p): - self.popenList.append(p) - - def cleanExit(self): - # Cleanup of spawned processes - for index,p in enumerate(self.popenList): - try: - p.kill() - except: - pass - self.popenList = [] - - def run(self): - - (scyther, claims, summary) = self.claimResults() - - # Results are done (claimstatus can be reported) - if self.callback: - wx.CallAfter(self.callback, scyther, claims, summary) - - def claimFixViewOne(self,claims): - """ - This is a stupid hack as long as switches.useAttackBuffer in - Scyther C code is false. It is currently false because Windows - VISTA screwed up the standard C function tmpfile() (It's in a - directory to which normal users cannot write...) - """ - # TODO Notice the stupid default setting too ('2') which is - # needed here. This really needs cleanup. - if int(Preference.get('prune','2')) != 0: - if claims: - for cl in claims: - if len(cl.attacks) > 1: - # Fix it such that by default, only the best attack is - # shown, unless we are in characterize or check mode - # TODO [X] [CC] make switch-dependant. - if not self.mode in ["characterize","check"]: - cl.attacks = [cl.attacks[-1]] - """ Cutting invalidates exactness of attack/behaviour counts """ - cl.complete = False - - return claims - - def claimResults(self): - """ Convert spdl to result (using Scyther) - """ - - scyther = Scyther.Scyther.Scyther() - - scyther.options = self.options - scyther.setInput(self.spdl) - - # verification start - try: - claims = scyther.verify(storePopen=self.storePopen) - except Scyther.Error.ScytherError, el: - claims = None - pass - - summary = str(scyther) - - claims = self.claimFixViewOne(claims) - - return (scyther, claims, summary) - -#--------------------------------------------------------------------------- - -class AttackThread(threading.Thread): - - """ This is a thread because it computes images from stuff in the - background """ - - # Override Thread's __init__ method to accept the parameters needed: - def __init__ ( self, parent, resultwin, callbackclaim=None,callbackattack=None,callbackdone=None ): - - self.parent = parent - self.resultwin = resultwin - self.callbackclaim = callbackclaim - self.callbackattack = callbackattack - self.callbackdone = callbackdone - self.totalattacks = 0 - for cl in self.parent.claims: - for attack in cl.attacks: - self.totalattacks += 1 - - threading.Thread.__init__ ( self ) - - def run(self): - - # create the images in the background - # when the images of a claim are done, callback is called with - # the claim - self.makeImages() - - def makeImages(self): - """ create images """ - - done = 0 - for cl in self.parent.claims: - for attack in cl.attacks: - Makeimage.makeImage(attack,self) - done += 1 - if self.callbackattack: - wx.CallAfter(self.callbackattack,attack,self.totalattacks,done) - if self.callbackclaim: - wx.CallAfter(self.callbackclaim,cl) - if self.callbackdone: - wx.CallAfter(self.callbackdone) - - -#--------------------------------------------------------------------------- - -class VerificationWindow(wx.Dialog): - def __init__( - self, parent, title, pos=wx.DefaultPosition, size=wx.DefaultSize, - style=wx.DEFAULT_DIALOG_STYLE - ): - - wx.Dialog.__init__(self,parent,-1,title,pos,size,style) - - sizer = wx.BoxSizer(wx.VERTICAL) - - label = wx.StaticText(self, -1, "Verifying protocol description") - sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5) - - line = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL) - sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5) - - btnsizer = wx.StdDialogButtonSizer() - - btn = wx.Button(self, wx.ID_CANCEL) - btnsizer.AddButton(btn) - btnsizer.Realize() - - sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.ALIGN_CENTER, 5) - - self.SetSizer(sizer) - sizer.Fit(self) - - self.Center() - self.Show(True) - -#--------------------------------------------------------------------------- - -class ErrorWindow(wx.Dialog): - def __init__( - self, parent, title, pos=wx.DefaultPosition, size=wx.DefaultSize, - style=wx.DEFAULT_DIALOG_STYLE,errors=[] - ): - - wx.Dialog.__init__(self,parent,-1,title,pos,size,style) - - sizer = wx.BoxSizer(wx.VERTICAL) - - label = wx.StaticText(self, -1, "Errors") - sizer.Add(label, 0, wx.ALIGN_LEFT|wx.ALL, 5) - - line = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL) - sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5) - - etxt = "" - prefix = "error: " - for er in errors: - if er.startswith(prefix): - er = er[len(prefix):] - etxt = etxt + "%s\n" % (er) - - label = wx.StaticText(self, -1, etxt) - sizer.Add(label, 0, wx.ALIGN_LEFT|wx.ALL, 5) - - line = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL) - sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5) - - btnsizer = wx.StdDialogButtonSizer() - - btn = wx.Button(self, wx.ID_OK) - btnsizer.AddButton(btn) - btnsizer.Realize() - - sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.ALIGN_CENTER, 5) - - self.SetSizer(sizer) - sizer.Fit(self) - -#--------------------------------------------------------------------------- - -class ResultWindow(wx.Frame): - - """ - Displays the claims status and contains buttons to show the actual - attack graphs - """ - - def __init__( - self, parent, parentwindow, title, pos=wx.DefaultPosition, size=wx.DefaultSize, - style=wx.DEFAULT_DIALOG_STYLE - ): - - wx.Frame.__init__(self,parentwindow,-1,title,pos,size,style) - - Icon.ScytherIcon(self) - - self.parent = parent - self.thread = None - self.Bind(wx.EVT_CLOSE, self.onCloseWindow) - - self.CreateStatusBar() - self.BuildTable() - - def onViewButton(self,evt): - btn = evt.GetEventObject() - try: - w = Attackwindow.AttackWindow(btn.claim) - w.Show(True) - except Error.PILError: - Error.ShowAndReturn("Problem with PIL imaging library: disabled zooming. Please retry to verify the protocol again.") - self.onCloseWindow(None) - - def onCloseWindow(self,evt): - """ TODO we should kill self.thread """ - - # Clean up - self.parent.claims = None - - self.Destroy() - - def BuildTable(self): - # Now continue with the normal construction of the dialog - # contents - - # For these claims... - claims = self.parent.claims - - # set up grid - self.grid = grid = wx.GridBagSizer(0,0) - #self.grid = grid = wx.GridBagSizer(7,1+len(claims)) - - def titlebar(x,title,width=1): - txt = wx.StaticText(self,-1,title) - font = wx.Font(14,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD) - txt.SetFont(font) - grid.Add(txt,(0,x),(1,width),wx.ALL,10) - - titlebar(0,"Claim",4) - titlebar(4,"Status",2) - titlebar(6,"Comments",1) - - self.lastprot = None - self.lastrole = None - views = 0 - for index in range(0,len(claims)): - views += self.BuildClaim(grid,claims[index],index+1) - - if views > 0: - titlebar(7,"Patterns",1) - - self.SetSizer(grid) - self.Fit() - - def BuildClaim(self,grid,cl,ypos): - # a support function - def addtxt(txt,column): - txt = txt.replace("-","_") # Strange fix for wx.StaticText as it cuts off the display. - grid.Add(wx.StaticText(self,-1,txt),(ypos,column),(1,1),wx.ALIGN_CENTER_VERTICAL|wx.ALL,10) - - n = len(cl.attacks) - xpos = 0 - - # protocol, role, label - prot = str(cl.protocol) - showP = False - showR = False - if prot != self.lastprot: - self.lastprot = prot - showP = True - showR = True - role = str(cl.role) - if role != self.lastrole: - self.lastrole = role - showR = True - if showP: - addtxt(prot,xpos) - if showR: - addtxt(role,xpos+1) - xpos += 2 - - # claim id - addtxt(str(cl.id),xpos) - xpos += 1 - - # claim parameters - claimdetails = str(cl.claimtype) - if cl.parameter: - claimdetails += " %s" % (cl.parameter) - # Cut off if very very long - if len(claimdetails) > 50: - claimdetails = claimdetails[:50] + "..." - addtxt(claimdetails + " ",xpos) - xpos += 1 - - # button for ok/fail - if None: - # old style buttons (but they looked ugly on windows) - tsize = (16,16) - if cl.okay: - bmp = wx.ArtProvider_GetBitmap(wx.ART_TICK_MARK,wx.ART_CMN_DIALOG,tsize) - else: - bmp = wx.ArtProvider_GetBitmap(wx.ART_CROSS_MARK,wx.ART_CMN_DIALOG,tsize) - if not bmp.Ok(): - bmp = wx.EmptyBitmap(tsize) - bmpfield = wx.StaticBitmap(self,-1,bmp) - grid.Add(bmpfield,(ypos,xpos),(1,1),wx.ALIGN_CENTER_VERTICAL|wx.ALL,10) - else: - # new style text control Ok/Fail - rankc = cl.getColour() - rankt = cl.getOkay() - txt = wx.StaticText(self,-1,rankt) - font = wx.Font(11,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD) - txt.SetFont(font) - txt.SetForegroundColour(rankc) - grid.Add(txt,(ypos,xpos),(1,1),wx.ALL,10) - xpos += 1 - - # verified? - vt = cl.getVerified() - if vt: - addtxt(vt,xpos) - xpos += 1 - - # remark something - addtxt(cl.getComment(),xpos) - xpos += 1 - - # add view button (enabled later if needed) - if n > 0: - cl.button = wx.Button(self,-1,"%i %s" % (n,cl.stateName(n))) - cl.button.claim = cl - grid.Add(cl.button,(ypos,xpos),(1,1),wx.ALIGN_CENTER_VERTICAL|wx.ALL,5) - cl.button.Disable() - if n > 0: - # Aha, something to show - self.Bind(wx.EVT_BUTTON, self.onViewButton,cl.button) - else: - cl.button = None - xpos += 1 - - # Return 1 if there is a view possible - if n > 0: - return 1 - else: - return 0 - - -#--------------------------------------------------------------------------- - -class ScytherRun(object): - - def __init__(self,mainwin,mode,spdl,errorcallback=None): - - self.mainwin = mainwin - self.mode = mode - self.spdl = spdl - self.verified = False - self.options = mainwin.settings.ScytherArguments(mode) - self.errorcallback=errorcallback - self.SThread = None - - self.main() - - def closer(self,ev): - # Triggered when the window is closed/verification cancelled - t = self.SThread - if t != None: - self.SThread = None - t.cleanExit() - try: - self.verifywin.Destroy() - except: - pass - self.verifywin = None - ev.Skip() - - def main(self): - """ - Start process - """ - - title = "Running Scyther %s process" % self.mode - # start the window and show until something happens - # if it terminates, this is a cancel, and should also kill the thread. (what happens to a spawned Scyther in that case?) - # if the thread terminames, it should close the window normally, and we end up here as well. - #val = self.verifywin.ShowModal() - self.verifywin = VerificationWindow(self.mainwin,title) - - # Check sanity of Scyther thing here (as opposed to the thread) - # which makes error reporting somewhat easier - try: - Scyther.Scyther.Check() - except Scyther.Error.BinaryError, e: - # e.file is the supposed location of the binary - text = "Could not find Scyther binary at\n%s" % (e.file) - Error.ShowAndExit(text) - - # start the thread - self.verifywin.SetCursor(wx.StockCursor(wx.CURSOR_WAIT)) - self.verifywin.Bind(wx.EVT_CLOSE, self.closer) - self.verifywin.Bind(wx.EVT_WINDOW_DESTROY, self.closer) - self.verifywin.Bind(wx.EVT_BUTTON, self.closer, id=wx.ID_CANCEL) - - self.SThread = ScytherThread(self.spdl, self.options, self.verificationDone, self.mode) - self.SThread.start() - - # after verification, we proceed to the callback below... - - def verificationDone(self, scyther, claims, summary): - """ - This is where we end up after a callback from the thread, stating that verification succeeded. - """ - - if self.verifywin == None: - return - - self.scyther = scyther - self.claims = claims - self.summary = summary - - self.verified = True - self.verifywin.Close() - - # Process the claims - if self.scyther.errorcount == 0: - self.verificationOkay() - else: - self.verificationErrors() - - def verificationOkay(self): - - # Great, we verified stuff, progress to the claim report - title = "Scyther results : %s" % self.mode - self.resultwin = resultwin = ResultWindow(self,self.mainwin,title) - - def attackDone(attack,total,done): - if resultwin: - txt = "Generating attack graphs (%i of %i done)." % (done,total) - resultwin.SetStatusText(txt) - #resultwin.Refresh() - - def claimDone(claim): - if resultwin: - if claim.button and len(claim.attacks) > 0: - claim.button.Enable() - - def allDone(): - if resultwin: - resultwin.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) - resultwin.SetStatusText("Done.") - - resultwin.Center() - resultwin.Show(True) - resultwin.SetCursor(wx.StockCursor(wx.CURSOR_ARROWWAIT)) - - wx.Yield() - - t = AttackThread(self,resultwin,claimDone,attackDone,allDone) - t.start() - - resultwin.thread = t - - def verificationErrors(self): - """ - Verification process generated errors. Show them. - """ - - if self.errorcallback: - self.errorcallback(self.scyther.errors) - title = "Scyther errors : %s" % self.mode - errorwin = ErrorWindow(self.mainwin,title,errors=self.scyther.errors) - errorwin.Center() - val = errorwin.ShowModal() - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Settingswindow.py b/Vagrant Files/shared/scyther/Gui/Settingswindow.py deleted file mode 100644 index 5bc5fa96a1f28ae189b80eef982cbb02d9194277..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Settingswindow.py +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import wx -import sys - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ -import Preference -import Scyther.Claim as Claim - -#--------------------------------------------------------------------------- - -class MyGrid(wx.GridBagSizer): - - def __init__(self,parent): - wx.GridBagSizer.__init__(self,hgap=5, vgap=5) - self.ypos = 0 - self.parent = parent - - def stepAdd(self,ctrl,txt): - self.Add(txt,(self.ypos,0),flag=wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL) - self.Add(ctrl,(self.ypos,1),flag=wx.ALIGN_LEFT) - self.ypos += 1 - - def lineAdd(self): - return - line = wx.StaticLine(self.parent,-1) - # Currently it is not expanded, and thus invisible. - self.Add(line,pos=(self.ypos,0),span=(1,2),flag=wx.TOP|wx.BOTTOM) - self.ypos += 1 - - def titleAdd(self,title,firstLine=True): - if firstLine: - self.lineAdd() - self.ypos += 1 - txt = wx.StaticText(self.parent,-1,title) - font = wx.Font(12,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD) - txt.SetFont(font) - self.Add(txt,pos=(self.ypos,0),span=(1,2),flag=wx.ALIGN_LEFT) - self.ypos += 1 - self.lineAdd() - -#--------------------------------------------------------------------------- - -class SettingsWindow(wx.Panel): - - def __init__(self,parent,daddy): - wx.Panel.__init__(self,parent,-1) - self.win = daddy - - # layout the stuff - grid = MyGrid(self) - - ### Parameters - grid.titleAdd("Verification parameters",False) - - # Bound on the number of runs - self.maxruns = int(Preference.get('maxruns','5')) - txt = wx.StaticText(self,-1,"Maximum number of runs\n(0 disables bound)") - ctrl = wx.SpinCtrl(self, -1, "",style=wx.RIGHT) - ctrl.SetRange(0,100) - ctrl.SetValue(self.maxruns) - self.Bind(wx.EVT_SPINCTRL,self.EvtRuns,ctrl) - grid.stepAdd(ctrl,txt) - - # Matchin options - self.match = int(Preference.get('match','0')) - claimoptions = ['typed matching','find basic type flaws','find all type flaws'] - r2 = wx.StaticText(self,-1,"Matching type") - l2 = self.ch = wx.Choice(self,-1,choices=claimoptions) - l2.SetSelection(self.match) - self.Bind(wx.EVT_CHOICE,self.EvtMatch,l2) - grid.stepAdd(l2,r2) - - ### MISC expert stuff - grid.titleAdd("Advanced parameters") - - # Continue after finding the first attack - self.prune = int(Preference.get('prune','2')) - claimoptions = ['Find all attacks','Find first attack','Find best attack'] - r8 = wx.StaticText(self,-1,"Search pruning") - l8 = self.ch = wx.Choice(self,-1,choices=claimoptions) - l8.SetSelection(self.prune) - self.Bind(wx.EVT_CHOICE,self.EvtPrune,l8) - grid.stepAdd(l8,r8) - - # Bound on the number of patterns - self.maxattacks = int(Preference.get('maxattacks','10')) - r9 = wx.StaticText(self,-1,"Maximum number of patterns\nper claim") - l9 = wx.SpinCtrl(self, -1, "",style=wx.RIGHT) - l9.SetRange(0,100) - l9.SetValue(self.maxattacks) - self.Bind(wx.EVT_SPINCTRL,self.EvtMaxAttacks,l9) - grid.stepAdd(l9,r9) - - self.misc = Preference.get('scytheroptions','') - r10 = wx.StaticText(self,-1,"Additional backend parameters") - l10 = wx.TextCtrl(self,-1,self.misc,size=(200,-1)) - self.Bind(wx.EVT_TEXT,self.EvtMisc,l10) - grid.stepAdd(l10,r10) - - ### Graph output stuff - grid.titleAdd("Graph output parameters") - - # Bound on the number of classes/attacks - if sys.platform.startswith("lin"): - defsize = 14 - else: - defsize = 11 - self.fontsize = int(Preference.get('fontsize',defsize)) - txt = wx.StaticText(self,-1,"Attack graph font size\n(in points)") - ctrl = wx.SpinCtrl(self, -1, "",style=wx.RIGHT) - ctrl.SetRange(6,32) - ctrl.SetValue(self.fontsize) - self.Bind(wx.EVT_SPINCTRL,self.EvtFontsize,ctrl) - grid.stepAdd(ctrl,txt) - - ### Combine - grid.lineAdd() - self.SetSizer(grid) - self.SetAutoLayout(True) - - def EvtMatch(self,evt): - self.match = evt.GetInt() - - def EvtRuns(self,evt): - self.maxruns = evt.GetInt() - - def EvtFontsize(self,evt): - self.fontsize = evt.GetInt() - - def EvtPrune(self,evt): - self.prune = evt.GetInt() - Preference.set('prune',self.prune) - - def EvtMaxAttacks(self,evt): - self.maxattacks = evt.GetInt() - - def EvtMisc(self,evt): - self.misc = evt.GetString() - - def ScytherArguments(self,mode): - """ Note: constructed strings should have a space at the end to - correctly separate the options. - """ - - tstr = "" - - # Number of runs - tstr += "--max-runs=%s " % (str(self.maxruns)) - # Matching type - tstr += "--match=%s " % (str(self.match)) - # Prune (has to go BEFORE max attacks) - tstr += "--prune=%s" % (str(self.prune)) - # Max attacks/classes - if self.maxattacks != 0: - tstr += "--max-attacks=%s " % (str(self.maxattacks)) - - # Verification type - if mode == "check": - tstr += "--check " - elif mode == "autoverify": - tstr += "--auto-claims " - elif mode == "characterize": - tstr += "--state-space " - - # Anything else? - if self.misc != "": - tstr += " " + self.misc + " " - - return str(tstr) # turn it into a str (might have been unicode weirdness) - -#--------------------------------------------------------------------------- diff --git a/Vagrant Files/shared/scyther/Gui/Temporary.py b/Vagrant Files/shared/scyther/Gui/Temporary.py deleted file mode 100644 index 61c24660cccd0e102bbfe8c6e5ab6e99bf2aaf4c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Temporary.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- - -""" Import externals """ -import os -import tempfile -import atexit - -#--------------------------------------------------------------------------- - -""" Local thing (can be done in numerous nicer ways) """ -tempfiles = [] - -#--------------------------------------------------------------------------- - -def tempremove(tuple): - (fd,fpname) = tuple - #os.close(fd) - os.remove(fpname) - -def cleanupshop(): - global tempfiles - - for tuple in tempfiles: - tempremove(tuple) - -def tempcleaned(post=""): - global tempfiles - - tuple = tempfile.mkstemp(post,"scyther_") - tempfiles.append(tuple) - return tuple - -def tempcleanearly(tuple): - global tempfiles - - tempfiles.remove(tuple) - tempremove(tuple) - -atexit.register(cleanupshop) - - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Gui/Version.py b/Vagrant Files/shared/scyther/Gui/Version.py deleted file mode 100644 index d941e4bc6250f0640392ebe13657efc84b5db58d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/Version.py +++ /dev/null @@ -1 +0,0 @@ -SCYTHER_GUI_VERSION = "v1.1.3" diff --git a/Vagrant Files/shared/scyther/Gui/__init__.py b/Vagrant Files/shared/scyther/Gui/__init__.py deleted file mode 100644 index 6995b4393abbd705c22e0f8c76b114dc90728994..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Gui/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - diff --git a/Vagrant Files/shared/scyther/INSTALL.md b/Vagrant Files/shared/scyther/INSTALL.md deleted file mode 100644 index 67f772cc18c8631a32d9a8249a7e018fa842d713..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/INSTALL.md +++ /dev/null @@ -1,96 +0,0 @@ -Installation and usage of the Scyther tool -========================================== - -Download --------- - -Downloads of binary archives of Scyther for all main platforms can be -found at http://users.ox.ac.uk/~coml0529/scyther/index.html - -Requirements ------------- - -To be able to use all of Scyther's features, the following three -dependencies are needed. If you only require the back-end tool (used -from the command line) then you need only the first. - -1. ### The GraphViz library ### - - This library is used by the Scyther tool to draw graphs. It can be - freely downloaded from: - - http://www.graphviz.org/ - - Download the latest stable release and install it. - - -2. ### Python ### - - Stable releases of the Python interpreter are available from: - - http://www.python.org/download/ - - Scyther does not support Python 3. You are therefore recommended to - choose the latest production release of Python 2, e.g., Python 2.7. - - * **Mac OS X** - - If the package yields an error when you try to install it, - please use the following, in the directory where you downloaded - it: - - ``` - $ sudo installer -pkg graphviz-2.34.0.pkg -target / - ``` - - -3. ### wxPython libraries ### - - The GUI user interface uses the wxPython libraries. - - http://www.wxpython.org/download.php - - There are many different wxPython packages. You should choose a 32-bit - package that matches your Python version (e.g., 2.7). It is - recommended to select the unicode version from the stable releases. - - As of writing (May 2013) the following links lead to the appropriate - wxPython packages for Python 2.7: - - * **Windows** - - http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-2.8.12.1-py27.exe - - * **Mac OS X** - - http://downloads.sourceforge.net/wxpython/wxPython2.8-osx-unicode-2.8.12.1-universal-py2.7.dmg - - Note that this package is in an old format and you will probably - get a warning "Package is damaged". This can be resolved by: - - ``` - $ sudo installer -pkg /Volume/.../wxPython2.8-osx-unicode-universal-py2.7.pkg/ -target / - ``` - - * **Ubuntu/Debian Linux** - - http://wiki.wxpython.org/InstallingOnUbuntuOrDebian - - -Running Scyther ---------------- - -Extract the Scyther archive and navigate to the extracted directory. - -Start Scyther by executing the file - - scyther-gui.py - -in the main directory of the extracted archive. - - * **Mac OS X** - - Right-click the file 'scyther-gui.py' and select "Open with" and - then "Python Launcher". - - diff --git a/Vagrant Files/shared/scyther/INSTALL.txt b/Vagrant Files/shared/scyther/INSTALL.txt deleted file mode 100644 index 3662306cdd1be833d6a4401f1e226339766156b1..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/INSTALL.txt +++ /dev/null @@ -1,85 +0,0 @@ -Installation and usage of the Scyther tool -========================================== - -Requirements ------------- - -To be able to use Scyther, you need the following three things: - - -1. The GraphViz library. - - This library is used by the Scyther tool to draw graphs. It can be - freely downloaded from: - - http://www.graphviz.org/ - - Download the latest stable release and install it. - - - -The graphical user interface of Scyther is written in the Python -language. Therefore, the GUI requires the following two items: - - -2. Python - - Stable releases of the Python interpreter are available from: - - <a href="http://www.python.org/download/"> - - Scyther does not support Python 3. You are therefore recommended to - choose the latest production release of Python 2, e.g., Python 2.7. - - Mac OS X: - If the package yields an error when you try to install it, - please use the following, in the directory where you downloaded - it: - - $ sudo installer -pkg graphviz-2.34.0.pkg -target / - - -3. wxPython libraries. - - The GUI user interface uses the wxPython libraries. - - <a href="http://www.wxpython.org/download.php"> - - There are many different wxPython packages. You should choose a 32-bit - package that matches your Python version (e.g., 2.7). It is - recommended to select the unicode version from the stable releases. - - As of writing (May 2013) the following links lead to the appropriate - wxPython packages for Python 2.7: - - Windows: - <a href="http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-2.8.12.1-py27.exe"> - - Mac OS X: - <a href="http://downloads.sourceforge.net/wxpython/wxPython2.8-osx-unicode-2.8.12.1-universal-py2.7.dmg"> - - Note that this package is in an old format and you will probably - get a warning "Package is damaged". This can be resolved by: - - $ sudo installer -pkg /Volume/.../wxPython2.8-osx-unicode-universal-py2.7.pkg/ -target / - - Ubuntu/Debian Linux: - <a href="http://wiki.wxpython.org/InstallingOnUbuntuOrDebian"> - - -Running Scyther ---------------- - - -Start Scyther by executing the file - - scyther-gui.py - -in the directory where you found this file. - - Mac OS X: - - Right-click the file 'scyther-gui.py' and select "Open with" and - then "Python Launcher". - - diff --git a/Vagrant Files/shared/scyther/Images/scyther-gui-16.ico b/Vagrant Files/shared/scyther/Images/scyther-gui-16.ico deleted file mode 100644 index a92d8228d89417af4cfb8dfc4081c8df0e3a8e73..0000000000000000000000000000000000000000 Binary files a/Vagrant Files/shared/scyther/Images/scyther-gui-16.ico and /dev/null differ diff --git a/Vagrant Files/shared/scyther/Images/scyther-gui-32.ico b/Vagrant Files/shared/scyther/Images/scyther-gui-32.ico deleted file mode 100644 index b87d7f95499453981808d80573fadbe935c143f7..0000000000000000000000000000000000000000 Binary files a/Vagrant Files/shared/scyther/Images/scyther-gui-32.ico and /dev/null differ diff --git a/Vagrant Files/shared/scyther/Images/scyther-gui-64.ico b/Vagrant Files/shared/scyther/Images/scyther-gui-64.ico deleted file mode 100644 index 2fb682f62d1421d03c3963a78039c7c9519fb730..0000000000000000000000000000000000000000 Binary files a/Vagrant Files/shared/scyther/Images/scyther-gui-64.ico and /dev/null differ diff --git a/Vagrant Files/shared/scyther/Images/scyther-icon.svg b/Vagrant Files/shared/scyther/Images/scyther-icon.svg deleted file mode 100644 index 7586c82e5089e1a42a79a569fc4256f77b0f034c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Images/scyther-icon.svg +++ /dev/null @@ -1,222 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://web.resource.org/cc/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="841.88977pt" - height="595.27557pt" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/cas/bzr/scyther-gui/images" - sodipodi:docname="scyther-icon.svg" - inkscape:export-filename="/home/cas/svn/scyther/Design download page Scyther/scyther-icon16.png" - inkscape:export-xdpi="1.6494846" - inkscape:export-ydpi="1.6494846"> - <defs - id="defs4"> - <linearGradient - id="linearGradient11078"> - <stop - id="stop11080" - offset="0" - style="stop-color:#000000;stop-opacity:0.57731956;" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="0.209216" - id="stop11084" /> - <stop - id="stop11086" - offset="0.65205503" - style="stop-color:#000000;stop-opacity:0.2371134;" /> - <stop - id="stop11082" - offset="1" - style="stop-color:#000000;stop-opacity:0.67010307;" /> - </linearGradient> - <linearGradient - id="linearGradient11052"> - <stop - id="stop11054" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - style="stop-color:#276816;stop-opacity:1;" - offset="0.25145975" - id="stop11060" /> - <stop - id="stop11066" - offset="0.57149941" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop11062" - offset="0.57149941" - style="stop-color:#010400;stop-opacity:1;" /> - <stop - style="stop-color:#002583;stop-opacity:1;" - offset="0.8028897" - id="stop11064" /> - <stop - id="stop11056" - offset="1" - style="stop-color:#000000;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient11044"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop11046" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop11048" /> - </linearGradient> - <linearGradient - id="linearGradient7532"> - <stop - id="stop7534" - offset="0" - style="stop-color:#9e9e9e;stop-opacity:1;" /> - <stop - id="stop7536" - offset="1" - style="stop-color:#9e9e9e;stop-opacity:0;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient11052" - id="linearGradient5737" - x1="521.7384" - y1="589.8822" - x2="521.7384" - y2="174.88217" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient11044" - id="linearGradient8364" - gradientUnits="userSpaceOnUse" - x1="323.7384" - y1="278.88214" - x2="477.7384" - y2="322.88214" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="1" - inkscape:cx="526.18109" - inkscape:cy="372.04724" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showguides="true" - inkscape:guide-bbox="true" - inkscape:window-width="1280" - inkscape:window-height="953" - inkscape:window-x="0" - inkscape:window-y="0"> - <sodipodi:guide - orientation="horizontal" - position="296.88141" - id="guide1366" /> - <sodipodi:guide - orientation="horizontal" - position="571.88122" - id="guide8421" /> - <sodipodi:guide - orientation="vertical" - position="206.87725" - id="guide8423" /> - </sodipodi:namedview> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Black base" - inkscape:groupmode="layer" - id="layer1" - style="display:inline" - sodipodi:insensitive="true"> - <rect - style="opacity:1;fill:url(#linearGradient5737);fill-opacity:1;stroke:#000000;stroke-width:6.73799992;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect7546" - width="323.44028" - height="320.51846" - x="194.92915" - y="162.62292" /> - </g> - <g - inkscape:groupmode="layer" - id="layer9" - inkscape:label="inner fade" - sodipodi:insensitive="true" - style="display:inline"> - <rect - style="opacity:1;fill:url(#linearGradient8364);fill-opacity:1;stroke:#000000;stroke-width:6.73799992;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect7489" - width="323.44028" - height="320.51846" - x="194.92915" - y="162.62292" /> - </g> - <g - inkscape:groupmode="layer" - id="layer7" - inkscape:label="blacker fades" - style="display:inline" - sodipodi:insensitive="true" /> - <g - inkscape:groupmode="layer" - id="layer4" - inkscape:label="white inner" - style="display:inline"> - <path - style="font-size:48px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:15.39999962;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8.60000038;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Luxi Serif" - d="M 439.625,186.5625 L 228.875,186.96875 L 229,447.625 L 298.46875,447.0625 C 330.87282,446.92031 358.52897,437.28122 380.09375,420.40625 C 401.65809,403.53126 412.43728,382.80494 412.4375,358.21875 C 412.43728,345.47874 408.75517,334.539 401.375,325.375 C 394.57101,316.65817 381.16868,305.92772 361.21875,293.1875 L 346,283.46875 C 335.8349,277.00229 328.44922,270.61422 323.78125,264.34375 C 307.04223,258.53812 294.42062,259.0563 268.875,259.90625 C 278.05518,239.8488 296.11407,242.38722 300.21875,237.3125 C 304.95019,231.46292 305.43096,234.13065 309.84375,229.25 C 321.81701,216.0073 334.34348,209.33336 346.96875,206.0625 C 353.47544,203.07236 360.58299,201.56871 368.3125,201.65625 C 397.62337,201.98826 427.75001,225.34375 427.75,225.34375 L 439.625,186.5625 z " - id="path7544" - sodipodi:nodetypes="ccccsscccccsscscc" /> - </g> - <g - inkscape:groupmode="layer" - id="layer8" - inkscape:label="upper white" - style="display:inline"> - <path - style="font-size:48px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:8.89999962;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8.60000038;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Luxi Serif" - d="M 439.625,186.5625 L 228.875,186.96875 L 229,447.625 L 298.46875,447.0625 C 330.87282,446.92031 358.52897,437.28122 380.09375,420.40625 C 401.65809,403.53126 412.43728,382.80494 412.4375,358.21875 C 412.43728,345.47874 408.75517,334.539 401.375,325.375 C 394.57101,316.65817 381.16868,305.92772 361.21875,293.1875 L 346,283.46875 C 335.8349,277.00229 328.44922,270.61422 323.78125,264.34375 C 307.04223,258.53812 294.42062,259.0563 268.875,259.90625 C 278.05518,239.8488 296.11407,242.38722 300.21875,237.3125 C 304.95019,231.46292 305.43096,234.13065 309.84375,229.25 C 321.81701,216.0073 334.34348,209.33336 346.96875,206.0625 C 353.47544,203.07236 360.58299,201.56871 368.3125,201.65625 C 397.62337,201.98826 427.75001,225.34375 427.75,225.34375 L 439.625,186.5625 z " - id="path6613" - sodipodi:nodetypes="ccccsscccccsscscc" /> - </g> - <g - inkscape:groupmode="layer" - id="layer5" - inkscape:label="beak" - style="display:inline" - sodipodi:insensitive="true" /> - <g - inkscape:groupmode="layer" - id="layer3" - inkscape:label="cyther" - style="display:inline" - sodipodi:insensitive="true" /> -</svg> diff --git a/Vagrant Files/shared/scyther/Images/scyther-splash.png b/Vagrant Files/shared/scyther/Images/scyther-splash.png deleted file mode 100644 index 818997cab57b178f6dd05bd9cf694486ab5f7ada..0000000000000000000000000000000000000000 Binary files a/Vagrant Files/shared/scyther/Images/scyther-splash.png and /dev/null differ diff --git a/Vagrant Files/shared/scyther/Protocols/Demo/ns3.spdl b/Vagrant Files/shared/scyther/Protocols/Demo/ns3.spdl deleted file mode 100644 index c9235c512a0507ff53b2f98e2215d90166b12a92..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/Demo/ns3.spdl +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Needham-Schroeder protocol - */ - -// The protocol description - -protocol ns3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {I,ni}pk(R) ); - recv_2(R,I, {ni,nr}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {I,ni}pk(R) ); - send_2(R,I, {ni,nr}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - - - diff --git a/Vagrant Files/shared/scyther/Protocols/Demo/nsl3-broken.spdl b/Vagrant Files/shared/scyther/Protocols/Demo/nsl3-broken.spdl deleted file mode 100644 index c635f916f595e1499e7acc617dd26559297b7115..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/Demo/nsl3-broken.spdl +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol, - * broken version (wrong role name in first message) - */ - -// The protocol description - -protocol nsl3-broken(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {R,ni}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {R,ni}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/Demo/nsl3-updated-both.spdl b/Vagrant Files/shared/scyther/Protocols/Demo/nsl3-updated-both.spdl deleted file mode 100644 index 076166e9ca08f5a37ac872f78777e49f730c4424..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/Demo/nsl3-updated-both.spdl +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol, - * broken version (wrong role name in first message) - */ - -// The protocol description - -protocol nsl3-broken(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {R,ni}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {R,ni}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - -/* - * Needham-Schroeder-Lowe protocol - */ - -// The protocol description - -protocol nsl3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {I,ni}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {I,ni}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/Demo/nsl3.spdl b/Vagrant Files/shared/scyther/Protocols/Demo/nsl3.spdl deleted file mode 100644 index ebf9031157eca52d3a5bbc72af6f330b30df088d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/Demo/nsl3.spdl +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol - */ - -// The protocol description - -protocol nsl3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {I,ni}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {I,ni}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2rsa.spdl b/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2rsa.spdl deleted file mode 100644 index 73133a7f00fdf1377861d1a55bdf3bf87b27dd0f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2rsa.spdl +++ /dev/null @@ -1,46 +0,0 @@ -/* - * PKMv2-RSA - * - * Initial model by: Sjouke Mauw, Sasa Radomirovic (2007) - * Model changes: Cas Cremers (Nov 2012) - * - * Analysed in: "A framework for compositional verification of security protocols" - * With S. Andova, K. Gjosteen, S. Mauw, S. Mjolsnes, and S. Radomirovic. - * Information and Computation, Special issue on Computer Security: - * Foundations and Automated Reasoning, Volume 206, Issues 2-4, pp. 425-459, - * Elsevier, 2008. - */ - -// The protocol description - -protocol pkmv2rsa(MS,BS) -{ - role MS - { - fresh msrand, said: Nonce; - var prepak, bsrand: Nonce; - - send_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - recv_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - send_rsa3(MS,BS, {bsrand}sk(MS) ); - - claim_rsai3(MS,Niagree); - claim_rsai4(MS,Nisynch); - claim_rsai5(MS,SKR,prepak); - } - - role BS - { - var msrand, said: Nonce; - fresh prepak, bsrand: Nonce; - - recv_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - send_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - recv_rsa3(MS,BS, {bsrand}sk(MS) ); - - claim_rsar3(BS,Niagree); - claim_rsar4(BS,Nisynch); - claim_rsar5(BS,SKR,prepak); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2rsacorrected.spdl b/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2rsacorrected.spdl deleted file mode 100644 index 4bd52056efc8fd08202eaa37d4b81401054dcf33..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2rsacorrected.spdl +++ /dev/null @@ -1,46 +0,0 @@ -/* - * PKMv2-RSA - * - * Initial model by: Sjouke Mauw, Sasa Radomirovic (2007) - * Model changes: Cas Cremers (Nov 2012) - * - * Analysed in: "A framework for compositional verification of security protocols" - * With S. Andova, K. Gjosteen, S. Mauw, S. Mjolsnes, and S. Radomirovic. - * Information and Computation, Special issue on Computer Security: - * Foundations and Automated Reasoning, Volume 206, Issues 2-4, pp. 425-459, - * Elsevier, 2008. - */ - -// The protocol description - -protocol pkmv2rsa(MS,BS) -{ - role MS - { - fresh msrand, said: Nonce; - var prepak, bsrand: Nonce; - - send_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - recv_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - send_rsa3(MS,BS, {bsrand,BS}sk(MS) ); - - claim_rsai3(MS,Niagree); - claim_rsai4(MS,Nisynch); - claim_rsai5(MS,SKR,prepak); - } - - role BS - { - var msrand, said: Nonce; - fresh prepak, bsrand: Nonce; - - recv_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - send_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - recv_rsa3(MS,BS, {bsrand,BS}sk(MS) ); - - claim_rsar3(BS,Niagree); - claim_rsar4(BS,Nisynch); - claim_rsar5(BS,SKR,prepak); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2satek.spdl b/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2satek.spdl deleted file mode 100644 index b166a1b85195d4237b273a468307fdd766da5734..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pkmv2satek.spdl +++ /dev/null @@ -1,63 +0,0 @@ -/* - * PKMv2-SA-TEK - * - * Initial model by: Sjouke Mauw, Sasa Radomirovic (2007) - * Model changes: Cas Cremers (Nov 2012) - * - * Analysed in: "A framework for compositional verification of security protocols" - * With S. Andova, K. Gjosteen, S. Mauw, S. Mjolsnes, and S. Radomirovic. - * Information and Computation, Special issue on Computer Security: - * Foundations and Automated Reasoning, Volume 206, Issues 2-4, pp. 425-459, - * Elsevier, 2008. - */ - -// Setup - -hashfunction hash; -hashfunction prepak; -const akid; -const u,d; - -// The protocol description - -protocol pkmv2satek(MS,BS) -{ - role MS - { - fresh msrand': Nonce; - var bsrand', tek0, tek1: Nonce; - - recv_satek1(BS,MS, bsrand',akid, - hash(d,prepak(MS,BS),BS,MS,bsrand',akid) ); - send_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak(MS,BS),BS,MS,msrand',bsrand',akid) ); - recv_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak(MS,BS)), - hash(d,prepak(MS,BS),msrand',bsrand',akid,{tek0,tek1}hash(prepak(MS,BS)))); - - claim_rsai3(MS,Niagree); - claim_rsai4(MS,Nisynch); - claim_rsai6(MS,SKR,tek0); - claim_rsai7(MS,SKR,tek1); - } - - role BS - { - var msrand': Nonce; - fresh bsrand', tek0, tek1: Nonce; - - send_satek1(BS,MS, bsrand',akid, - hash(d,prepak(MS,BS),BS,MS,bsrand',akid) ); - recv_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak(MS,BS),BS,MS,msrand',bsrand',akid) ); - send_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak(MS,BS)), - hash(d,prepak(MS,BS),msrand',bsrand',akid,{tek0,tek1}hash(prepak(MS,BS)))); - - claim_rsar3(BS,Niagree); - claim_rsar4(BS,Nisynch); - claim_rsar6(BS,SKR,tek0); - claim_rsar7(BS,SKR,tek1); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pqr.spdl b/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pqr.spdl deleted file mode 100644 index 731d369bd5a9ae45badb52418c887904246b3d91..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/pqr.spdl +++ /dev/null @@ -1,84 +0,0 @@ -/* - * PKMv2-RSA - * - * Initial model by: Sjouke Mauw, Sasa Radomirovic (2007) - * Model changes: Cas Cremers (Nov 2012) - * - * Analysed in: "A framework for compositional verification of security protocols" - * With S. Andova, K. Gjosteen, S. Mauw, S. Mjolsnes, and S. Radomirovic. - * Information and Computation, Special issue on Computer Security: - * Foundations and Automated Reasoning, Volume 206, Issues 2-4, pp. 425-459, - * Elsevier, 2008. - */ - -// Setup - -hashfunction hash; -hashfunction prepak; -const akid; -const u,d; - -// The protocol description - -protocol rsaplussatek(MS,BS) - -{ - role MS - { - fresh msrand, msrand', said, c: Nonce; - var prepak, bsrand, bsrand', tek0, tek1, tek2, tek3: Nonce; - - send_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - recv_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - send_rsa3(MS,BS, {bsrand, BS}sk(MS) ); - - recv_satek1(BS,MS, bsrand',akid, - hash(d,prepak,BS,MS,bsrand',akid) ); - send_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak,BS,MS,msrand',bsrand',akid) ); - recv_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak), - hash(d,prepak,msrand',bsrand',akid,{tek0,tek1}hash(prepak))); - - send_tekup1(MS,BS,{c}hash(prepak)); - recv_tekup2(BS,MS,{c,tek2,tek3}hash(prepak)); - - claim_rsai3(MS,Niagree); - claim_rsai4(MS,Nisynch); - claim_rsai5(MS,SKR,prepak); - claim_rsai6(MS,SKR,tek0); - claim_rsai7(MS,SKR,tek1); - claim_rsar8(MS,SKR,tek2); - claim_rsar9(MS,SKR,tek3); - } - - role BS - { - var msrand, msrand', said, c: Nonce; - fresh prepak, bsrand, bsrand', tek0, tek1, tek2, tek3: Nonce; - - recv_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - send_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - recv_rsa3(MS,BS, {bsrand, BS}sk(MS) ); - - send_satek1(BS,MS, bsrand',akid, - hash(d,prepak,BS,MS,bsrand',akid) ); - recv_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak,BS,MS,msrand',bsrand',akid) ); - send_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak), - hash(d,prepak,msrand',bsrand',akid,{tek0,tek1}hash(prepak))); - - recv_tekup1(MS,BS,{c}hash(prepak)); - send_tekup2(BS,MS,{c,tek2,tek3}hash(prepak)); - - claim_rsar3(BS,Niagree); - claim_rsar4(BS,Nisynch); - claim_rsar5(BS,SKR,prepak); - claim_rsar6(BS,SKR,tek0); - claim_rsar7(BS,SKR,tek1); - claim_rsar8(BS,SKR,tek2); - claim_rsar9(BS,SKR,tek3); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/rsaplussatek.spdl b/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/rsaplussatek.spdl deleted file mode 100644 index eb15dde02dd57add4aa6c3fcb54fb80422335fe6..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/rsaplussatek.spdl +++ /dev/null @@ -1,74 +0,0 @@ -/* - * PKMv2-RSA - * - * Initial model by: Sjouke Mauw, Sasa Radomirovic (2007) - * Model changes: Cas Cremers (Nov 2012) - * - * Analysed in: "A framework for compositional verification of security protocols" - * With S. Andova, K. Gjosteen, S. Mauw, S. Mjolsnes, and S. Radomirovic. - * Information and Computation, Special issue on Computer Security: - * Foundations and Automated Reasoning, Volume 206, Issues 2-4, pp. 425-459, - * Elsevier, 2008. - */ - -// Setup - -hashfunction hash; -hashfunction prepak; -const akid; -const u,d; - -// The protocol description - -protocol rsaplussatek(MS,BS) - -{ - role MS - { - fresh msrand, msrand', said: Nonce; - var prepak, bsrand, bsrand', tek0, tek1: Nonce; - - send_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - recv_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - send_rsa3(MS,BS, {bsrand}sk(MS) ); - - recv_satek1(BS,MS, bsrand',akid, - hash(d,prepak,BS,MS,bsrand',akid) ); - send_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak,BS,MS,msrand',bsrand',akid) ); - recv_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak), - hash(d,prepak,msrand',bsrand',akid,{tek0,tek1}hash(prepak))); - - claim_rsai3(MS,Niagree); - claim_rsai4(MS,Nisynch); -// claim_rsai5(MS,SKR,prepak); -// claim_rsai6(MS,SKR,tek0); -// claim_rsai7(MS,SKR,tek1); - } - - role BS - { - var msrand, msrand', said: Nonce; - fresh prepak, bsrand, bsrand', tek0, tek1: Nonce; - - recv_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - send_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - recv_rsa3(MS,BS, {bsrand}sk(MS) ); - - send_satek1(BS,MS, bsrand',akid, - hash(d,prepak,BS,MS,bsrand',akid) ); - recv_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak,BS,MS,msrand',bsrand',akid) ); - send_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak), - hash(d,prepak,msrand',bsrand',akid,{tek0,tek1}hash(prepak))); - - claim_rsar3(BS,Niagree); - claim_rsar4(BS,Nisynch); -// claim_rsar5(BS,SKR,prepak); -// claim_rsar6(BS,SKR,tek0); -// claim_rsar7(BS,SKR,tek1); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/rsaplussatekcorrected.spdl b/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/rsaplussatekcorrected.spdl deleted file mode 100644 index b8051d8983450f45879db0663114907d9fb52203..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IEEE-WIMAX/rsaplussatekcorrected.spdl +++ /dev/null @@ -1,73 +0,0 @@ -/* - * PKMv2-RSA - * - * Initial model by: Sjouke Mauw, Sasa Radomirovic (2007) - * Model changes: Cas Cremers (Nov 2012) - * - * Analysed in: "A framework for compositional verification of security protocols" - * With S. Andova, K. Gjosteen, S. Mauw, S. Mjolsnes, and S. Radomirovic. - * Information and Computation, Special issue on Computer Security: - * Foundations and Automated Reasoning, Volume 206, Issues 2-4, pp. 425-459, - * Elsevier, 2008. - */ - -// Setup - -hashfunction hash; -hashfunction prepak; -const akid; -const u,d; - -// The protocol description - -protocol rsaplussatek(MS,BS) - -{ - role MS - { - fresh msrand, msrand', said: Nonce; - var prepak, bsrand, bsrand', tek0, tek1: Nonce; - - send_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - recv_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - send_rsa3(MS,BS, {bsrand, BS}sk(MS) ); - - recv_satek1(BS,MS, bsrand',akid, - hash(d,prepak,BS,MS,bsrand',akid) ); - send_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak,BS,MS,msrand',bsrand',akid) ); - recv_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak), - hash(d,prepak,msrand',bsrand',akid,{tek0,tek1}hash(prepak))); - - claim_rsai3(MS,Niagree); - claim_rsai4(MS,Nisynch); - claim_rsai5(MS,SKR,prepak); - claim_rsai6(MS,SKR,tek0); - claim_rsai7(MS,SKR,tek1); - } - - role BS - { - var msrand, msrand', said: Nonce; - fresh prepak, bsrand, bsrand', tek0, tek1: Nonce; - - recv_rsa1(MS,BS, {msrand, said, MS}sk(MS) ); - send_rsa2(BS,MS, {msrand, bsrand,{prepak,MS}pk(MS),BS}sk(BS) ); - recv_rsa3(MS,BS, {bsrand, BS}sk(MS) ); - - send_satek1(BS,MS, bsrand',akid, - hash(d,prepak,BS,MS,bsrand',akid) ); - recv_satek2(MS,BS, msrand',bsrand',akid, - hash(u,prepak,BS,MS,msrand',bsrand',akid) ); - send_satek3(BS,MS, - msrand',bsrand',akid,{tek0,tek1}hash(prepak), - hash(d,prepak,msrand',bsrand',akid,{tek0,tek1}hash(prepak))); - - claim_rsar3(BS,Niagree); - claim_rsar4(BS,Nisynch); - claim_rsar5(BS,SKR,prepak); - claim_rsar6(BS,SKR,tek0); - claim_rsar7(BS,SKR,tek1); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/Makefile b/Vagrant Files/shared/scyther/Protocols/IKE/Makefile deleted file mode 100644 index 7234a64ebf087e7efae859d31b2147dae1a81926..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -CPPSRC= $(wildcard *.cpp) -DEST= $(CPPSRC:.cpp=.spdl) - -default: $(DEST) - -%.spdl: %.cpp - cpp $< >$@ - -mpa: $(DEST) make-mpa.py - ./make-mpa.py - diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/common.h b/Vagrant Files/shared/scyther/Protocols/IKE/common.h deleted file mode 100644 index 6dcb5d2d108bd084a527b9ebf79bc77bd5cdcb28..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/common.h +++ /dev/null @@ -1,157 +0,0 @@ -/**************************************************************************** - * THIS FILE CONTAINS DEFINITIONS OF COMMON MACROS AND TYPES * - ****************************************************************************/ - - hashfunction prf, KDF; - -/********************************** - * DIFFIE-HELLMAN ABSTRACTIONS * - * Zi = Gr^i = g^(ri) - * Zr = Gi^r = g^(ir) - **********************************/ -const g, h: Function; -#define Zi h(Gr,i) -#define Zr h(Gi,r) - -/********************************** - * PROTOCOL DEPENDENT DEFINITIONS * - **********************************/ -#ifdef __IKEV1__ -hashfunction H; -#define SKi KDF(Ni, Nr, Zi, Ci, Cr) -#define SKr KDF(Ni, Nr, Zr, Ci, Cr) -#endif - -#ifdef __IKEV1_PSK__ -#define SKi prf(k(I,R), Ni, Nr, Zi, Ci, Cr) -#define SKr prf(k(R,I), Ni, Nr, Zr, Ci, Cr) -#endif - -#ifdef __IKEV1_QUICK__ -/* k(.,.) equals Kd from the spec */ -#define SKi KDF(k(I,R),Zi,Ni,Nr) -#define SKr KDF(k(R,I),Zr,Ni,Nr) -#endif - -#ifdef __IKEV1_QUICK_NOPFS__ -/* k(.,.) equals Kd from the spec */ -#define SKi KDF(k(I,R),Ni,Nr) -#define SKr KDF(k(R,I),Ni,Nr) -#endif - -#ifdef __IKEV2__ -hashfunction MAC; -#define HDR (SPIi,SPIr) -#define SKi KDF(Ni,Nr,Zi,SPIi,SPIr) -#define SKr KDF(Ni,Nr,Zr,SPIi,SPIr) -#endif - -#ifdef __IKEV2_CHILD__ -#define SKi KDF(k(I,R),Zi,Ni,Nr) -#define SKr KDF(k(R,I),Zr,Ni,Nr) -#endif - -#ifdef __IKEV2_CHILD_NOPFS__ -#define SKi KDF(k(I,R),Ni,Nr) -#define SKr KDF(k(R,I),Ni,Nr) -#endif - -#ifdef __JFK_CORE__ -hashfunction H; -#define SKi KDF(Zi, Ni, Nr) -#define SKr KDF(Zr, Ni, Nr) -#endif - -#ifdef __JFK__ -hashfunction H; -#define SKi KDF(Zi, H(Ni), Nr) -#define SKr KDF(Zr, H(Ni), Nr) -#endif - -#ifdef __OAKLEY__ -#define SKi KDF(Ni, Nr, Zi, Ci, Cr) -#define SKr KDF(Ni, Nr, Zr, Ci, Cr) -#endif - -#ifdef __OAKLEY_CONSERVATIVE__ -#define SKi KDF(Ni, Nr, Zi, Ci, Cr) -#define SKr KDF(Ni, Nr, Zr, Ci, Cr) -#endif - -#ifdef __SKEME__ -#define SKi KDF(Zi) -#define SKr KDF(Zr) -#endif - -#ifdef __SKEME_REKEY__ -#define SKi KDF(k(I,R),prf(k(I,R), Ni, Nr, R, I)) -#define SKr KDF(k(R,I),prf(k(R,I), Ni, Nr, R, I)) -#endif - -#ifdef __STS__ -#define SKi KDF(Zi) -#define SKr KDF(Zr) -hashfunction MAC; -#endif - -protocol @oracle (DH, SWAP) { -#define Gi g(i) -#define Gr g(r) - - /* Diffie-Hellman oracle: If the adversary is in possession of g^xy, he - * can obtain g^yx. - * @obsolete The adversary does not need DH as long as SWAP exists - */ - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, Zi ); - send_!DH2( DH, DH, Zr ); - } - - /* Session key swap oracle: If the adversary is in possession of eg the - * initiators session key, he can obtain the responders session key. - */ - role SWAP { - var i, r, Ni, Nr: Nonce; - -#ifdef __IKEV1__ - var Ci, Cr: Nonce; -#endif -#ifdef __IKEV1_PSK__ - var Ci, Cr: Nonce; - var I, R: Agent; -#endif -#ifdef __IKEV1_QUICK__ - var I, R: Agent; -#endif -#ifdef __IKEV1_QUICK_NOPFS__ - var I, R: Agent; -#endif -#ifdef __IKEV2__ - var SPIi, SPIr: Nonce; -#endif -#ifdef __IKEV2_CHILD__ - var I, R: Agent; -#endif -#ifdef __IKEV2_CHILD_NOPFS__ - var I, R: Agent; -#endif -#ifdef __OAKLEY__ - var Ci, Cr: Nonce; -#endif -#ifdef __OAKLEY_CONSERVATIVE__ - var Ci, Cr: Nonce; -#endif -#ifdef __SKEME_REKEY__ - var I, R: Agent; -#endif - - recv_!SWAP1( SWAP, SWAP, SKi ); - send_!SWAP2( SWAP, SWAP, SKr ); - - } -#undef Gi -#undef Gr -} -#define __ORACLE__ \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a1.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a1.cpp deleted file mode 100644 index 86947a875396938da6959163a6a605981618e06e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a1.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Public key authentication (aggressive mode), - * last message not encrypted - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define HASH1 H(CERT(R)) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, HASH_Ii ); - send_!O4( O, O, HASH_Ir ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-pk-a1(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I}pk(R), {Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R}pk(I), {Nr}pk(I), HASH_Ri ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, HASH_Ii ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I}pk(R), {Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R}pk(I), {Nr}pk(I), HASH_Rr ); - recv_!3( I, R, Ci, Cr, HASH_Ir ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a1.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a1.spdl deleted file mode 100644 index b9b8f00eef120f460ed71c5a4c02c4ccbd14925c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a1.spdl +++ /dev/null @@ -1,129 +0,0 @@ -# 1 "ikev1-pk-a1.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk-a1.cpp" -# 17 "ikev1-pk-a1.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-pk-a1.cpp" 2 -# 27 "ikev1-pk-a1.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I) ); - send_!O4( O, O, prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I) ); - - } - - -} - - -protocol ikev1-pk-a1(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I}pk(R), {Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R}pk(I), {Nr}pk(I), prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I}pk(R), {Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R}pk(I), {Nr}pk(I), prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a12.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a12.cpp deleted file mode 100644 index 435479a7eedd24ec5e2881e207f4f835614f5b2b..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a12.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Public key authentication (aggressive mode), - * last message encrypted - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define HASH1 H(CERT(R)) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, {HASH_Ii}SKi ); - send_!O4( O, O, {HASH_Ir}SKr ); - - } -#undef Gi -#undef Gr -} - -protocol ikev1-pk-a12(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I}pk(R), {Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R}pk(I), {Nr}pk(I), HASH_Ri ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, {HASH_Ii}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I}pk(R), {Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R}pk(I), {Nr}pk(I), HASH_Rr ); - recv_!3( I, R, Ci, Cr, {HASH_Ir}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a12.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a12.spdl deleted file mode 100644 index 473ffc76bb89606aba874cf52d1200ded3a89e48..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a12.spdl +++ /dev/null @@ -1,128 +0,0 @@ -# 1 "ikev1-pk-a12.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk-a12.cpp" -# 17 "ikev1-pk-a12.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-pk-a12.cpp" 2 -# 27 "ikev1-pk-a12.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} - -protocol ikev1-pk-a12(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I}pk(R), {Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R}pk(I), {Nr}pk(I), prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I}pk(R), {Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R}pk(I), {Nr}pk(I), prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a2.cpp deleted file mode 100644 index b149cfe78c02db2ed8758b0f710e0dc4f2a9f251..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a2.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Public key authentication (aggressive mode), - * last message not encrypted, nonce and id encrypted - * together - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define HASH1 H(CERT(R)) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, HASH_Ii ); - send_!O4( O, O, HASH_Ir ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-pk-a2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I,Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R,Nr}pk(I), HASH_Ri ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, HASH_Ii ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I,Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R,Nr}pk(I), HASH_Rr ); - recv_!3( I, R, Ci, Cr, HASH_Ir ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a2.spdl deleted file mode 100644 index 60b9fb4b7b547392fcee38ba0c7aa004eb3fb029..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a2.spdl +++ /dev/null @@ -1,129 +0,0 @@ -# 1 "ikev1-pk-a2.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk-a2.cpp" -# 18 "ikev1-pk-a2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 19 "ikev1-pk-a2.cpp" 2 -# 28 "ikev1-pk-a2.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I) ); - send_!O4( O, O, prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I) ); - - } - - -} - - -protocol ikev1-pk-a2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I,Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R,Nr}pk(I), prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I,Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R,Nr}pk(I), prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a22.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a22.cpp deleted file mode 100644 index a71e20a29f6002012ad1148b760548c1885fc9dd..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a22.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Public key authentication (aggressive mode), - * last message encrypted, nonce and id encrypted together - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define HASH1 H(CERT(R)) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, {HASH_Ii}SKi ); - send_!O4( O, O, {HASH_Ir}SKr ); - - } -#undef Gi -#undef Gr -} - -protocol ikev1-pk-a22(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I,Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R,Nr}pk(I), HASH_Ri ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, {HASH_Ii}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I,Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R,Nr}pk(I), HASH_Rr ); - recv_!3( I, R, Ci, Cr, {HASH_Ir}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a22.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a22.spdl deleted file mode 100644 index 1c59323ef5a66c5b23c353d579459aa5f3013823..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-a22.spdl +++ /dev/null @@ -1,128 +0,0 @@ -# 1 "ikev1-pk-a22.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk-a22.cpp" -# 17 "ikev1-pk-a22.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-pk-a22.cpp" 2 -# 27 "ikev1-pk-a22.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} - -protocol ikev1-pk-a22(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), {I,Ni}pk(R) ); - recv_!2( R, I, Ci, Cr, algo, Gr, {R,Nr}pk(I), prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, {I,Ni}pk(R) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, g(r), {R,Nr}pk(I), prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m.cpp deleted file mode 100644 index 1b27c5ff0422fe7b348d242342b771ae7e072909..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Public key authentication (main mode) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define HASH1 H({R, pk(R)}sk(s)) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {HASH_Ii}SKi ); - send_!O2( O, O, {HASH_Ir}SKr ); - - // msg 6 - recv_!O3( O, O, {HASH_Rr}SKr ); - send_!O4( O, O, {HASH_Ri}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-pk-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), {I}pk(R), {Ni}pk(R) ); - recv_4( R, I, Ci, Cr, Gr, {R}pk(I), {Nr}pk(I) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {HASH_Ii}SKi ); - recv_!6( R, I, Ci, Cr, {HASH_Ri}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, {I}pk(R), {Ni}pk(R) ); - send_4( R, I, Ci, Cr, g(r), {R}pk(I), {Nr}pk(I) ); - recv_!5( I, R, Ci, Cr, {HASH_Ir}SKr ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {HASH_Rr}SKr ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m.spdl deleted file mode 100644 index 843613370c9b6bbbe84e63a52207f051d0027e04..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m.spdl +++ /dev/null @@ -1,136 +0,0 @@ -# 1 "ikev1-pk-m.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk-m.cpp" -# 16 "ikev1-pk-m.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 17 "ikev1-pk-m.cpp" 2 -# 27 "ikev1-pk-m.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O2( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - - } - - -} - - -protocol ikev1-pk-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), {I}pk(R), {Ni}pk(R) ); - recv_4( R, I, Ci, Cr, Gr, {R}pk(I), {Nr}pk(I) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - recv_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, {I}pk(R), {Ni}pk(R) ); - send_4( R, I, Ci, Cr, g(r), {R}pk(I), {Nr}pk(I) ); - recv_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m2.cpp deleted file mode 100644 index fc08ea0e18493bf955f52faa68b77956533dd283..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m2.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Public key authentication (main mode), - * Nonce and id encrypted together - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {HASH_Ii}SKi ); - send_!O2( O, O, {HASH_Ir}SKr ); - - // msg 6 - recv_!O3( O, O, {HASH_Rr}SKr ); - send_!O4( O, O, {HASH_Ri}SKi ); - - } -#undef Gi -#undef Gr -} - -protocol ikev1-pk-m2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), {I,Ni}pk(R) ); - recv_4( R, I, Ci, Cr, Gr, {R,Nr}pk(I) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {HASH_Ii}SKi ); - recv_!6( R, I, Ci, Cr, {HASH_Ri}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, {I,Ni}pk(R) ); - send_4( R, I, Ci, Cr, g(r), {R,Nr}pk(I) ); - recv_!5( I, R, Ci, Cr, {HASH_Ir}SKr ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {HASH_Rr}SKr ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m2.spdl deleted file mode 100644 index b625de59f3e42d90ead5b0cf8a83fba0a7cd80f6..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk-m2.spdl +++ /dev/null @@ -1,135 +0,0 @@ -# 1 "ikev1-pk-m2.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk-m2.cpp" -# 17 "ikev1-pk-m2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-pk-m2.cpp" 2 -# 27 "ikev1-pk-m2.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O2( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - - } - - -} - -protocol ikev1-pk-m2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), {I,Ni}pk(R) ); - recv_4( R, I, Ci, Cr, Gr, {R,Nr}pk(I) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - recv_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, {I,Ni}pk(R) ); - send_4( R, I, Ci, Cr, g(r), {R,Nr}pk(I) ); - recv_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a.cpp deleted file mode 100644 index 9549e44a977c46e509e6e578669ca8f6a783b7ea..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Revised public key authentication (aggressive mode) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define Nei prf(Ni, Ci) -#define Ner prf(Nr, Cr) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, HASH_Ir ); - send_!O4( O, O, HASH_Ii ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-pk2-a(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, {Ni}pk(R), {g(i)}Nei, {I}Nei ); - recv_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {Gr}Ner, {R}Ner, HASH_Ri ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, HASH_Ii ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, {Ni}pk(R), {Gi}Nei, {I}Nei ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {g(r)}Ner, {R}Ner, HASH_Rr ); - recv_!3( I, R, Ci, Cr, HASH_Ir ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a.spdl deleted file mode 100644 index 971122ae220e4e956b74969726930104d5271986..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a.spdl +++ /dev/null @@ -1,129 +0,0 @@ -# 1 "ikev1-pk2-a.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk2-a.cpp" -# 16 "ikev1-pk2-a.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 17 "ikev1-pk2-a.cpp" 2 -# 28 "ikev1-pk2-a.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I) ); - send_!O4( O, O, prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I) ); - - } - - -} - - -protocol ikev1-pk2-a(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, {Ni}pk(R), {g(i)}prf(Ni, Ci), {I}prf(Ni, Ci) ); - recv_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {Gr}prf(Nr, Cr), {R}prf(Nr, Cr), prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, {Ni}pk(R), {Gi}prf(Ni, Ci), {I}prf(Ni, Ci) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {g(r)}prf(Nr, Cr), {R}prf(Nr, Cr), prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a2.cpp deleted file mode 100644 index a8536fbe952f2f8d5c7b86ac6208bb626aa0f437..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a2.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Revised public key authentication (aggressive mode), - * Diffie-Hellman token encrypted together with identity - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define Nei prf(Ni, Ci) -#define Ner prf(Nr, Cr) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, HASH_Ir ); - send_!O4( O, O, HASH_Ii ); - - } -#undef Gi -#undef Gr -} - -protocol ikev1-pk2-a2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, {Ni}pk(R), {g(i),I}Nei ); - recv_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {Gr,R}Ner, HASH_Ri ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, HASH_Ii ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, {Ni}pk(R), {Gi,I}Nei ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {g(r),R}Ner, HASH_Rr ); - recv_!3( I, R, Ci, Cr, HASH_Ir ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a2.spdl deleted file mode 100644 index 51e0d179122a74b46efd8935524f77fa96fb250a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-a2.spdl +++ /dev/null @@ -1,128 +0,0 @@ -# 1 "ikev1-pk2-a2.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk2-a2.cpp" -# 17 "ikev1-pk2-a2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-pk2-a2.cpp" 2 -# 29 "ikev1-pk2-a2.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I) ); - send_!O4( O, O, prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I) ); - - } - - -} - -protocol ikev1-pk2-a2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, {Ni}pk(R), {g(i),I}prf(Ni, Ci) ); - recv_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {Gr,R}prf(Nr, Cr), prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, {Ni}pk(R), {Gi,I}prf(Ni, Ci) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!2( R, I, Ci, Cr, algo, {Nr}pk(I), {g(r),R}prf(Nr, Cr), prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m.cpp deleted file mode 100644 index 42f2d9d86fa179e530952980202c5f259c09d866..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Revised public key authentication (main mode) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define Nei prf(Ni, Ci) -#define Ner prf(Nr, Cr) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {HASH_Ii}SKi ); - send_!O2( O, O, {HASH_Ir}SKr ); - - // msg 6 - recv_!O3( O, O, {HASH_Rr}SKr ); - send_!O4( O, O, {HASH_Ri}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-pk2-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, {Ni}pk(R), {g(i)}Nei, {I}Nei ); - recv_4( R, I, Ci, Cr, {Nr}pk(I), {Gr}Ner, {R}Ner ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {HASH_Ii}SKi ); - recv_!6( R, I, Ci, Cr, {HASH_Ri}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, {Ni}pk(R), {Gi}Nei, {I}Nei ); - send_4( R, I, Ci, Cr, {Nr}pk(I), {g(r)}Ner, {R}Ner ); - recv_!5( I, R, Ci, Cr, {HASH_Ir}SKr ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {HASH_Rr}SKr ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m.spdl deleted file mode 100644 index e32dd5b1f6d43fa88d628e068616818bafadc0ea..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m.spdl +++ /dev/null @@ -1,136 +0,0 @@ -# 1 "ikev1-pk2-m.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk2-m.cpp" -# 16 "ikev1-pk2-m.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 17 "ikev1-pk2-m.cpp" 2 -# 28 "ikev1-pk2-m.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O2( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - - } - - -} - - -protocol ikev1-pk2-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, {Ni}pk(R), {g(i)}prf(Ni, Ci), {I}prf(Ni, Ci) ); - recv_4( R, I, Ci, Cr, {Nr}pk(I), {Gr}prf(Nr, Cr), {R}prf(Nr, Cr) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - recv_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, {Ni}pk(R), {Gi}prf(Ni, Ci), {I}prf(Ni, Ci) ); - send_4( R, I, Ci, Cr, {Nr}pk(I), {g(r)}prf(Nr, Cr), {R}prf(Nr, Cr) ); - recv_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m2.cpp deleted file mode 100644 index 653a83936b281e50d86c098ad742e660b47dfe23..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m2.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Revised public key authentication (aggressive mode), - * Diffie-Hellman token encrypted together with identity - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(H(Ni,Nr),Ci,Cr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) -#define HASH1 H({R, pk(R)}sk(s)) -#define Nei prf(Ni, Ci) -#define Ner prf(Nr, Cr) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {HASH_Ii}SKi ); - send_!O2( O, O, {HASH_Ir}SKr ); - - // msg 6 - recv_!O3( O, O, {HASH_Rr}SKr ); - send_!O4( O, O, {HASH_Ri}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-pk2-m2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, {Ni}pk(R), {g(i),I}Nei ); - recv_4( R, I, Ci, Cr, {Nr}pk(I), {Gr,R}Ner ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {HASH_Ii}SKi ); - recv_!6( R, I, Ci, Cr, {HASH_Ri}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, {Ni}pk(R), {Gi,I}Nei ); - send_4( R, I, Ci, Cr, {Nr}pk(I), {g(r),R}Ner ); - recv_!5( I, R, Ci, Cr, {HASH_Ir}SKr ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {HASH_Rr}SKr ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m2.spdl deleted file mode 100644 index 62e5b7452f7494bc90b41cd224e987a702019d67..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-pk2-m2.spdl +++ /dev/null @@ -1,136 +0,0 @@ -# 1 "ikev1-pk2-m2.cpp" -# 1 "<command-line>" -# 1 "ikev1-pk2-m2.cpp" -# 17 "ikev1-pk2-m2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-pk2-m2.cpp" 2 -# 30 "ikev1-pk2-m2.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O2( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - - } - - -} - - -protocol ikev1-pk2-m2(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, {Ni}pk(R), {g(i),I}prf(Ni, Ci) ); - recv_4( R, I, Ci, Cr, {Nr}pk(I), {Gr,R}prf(Nr, Cr) ); - claim( I, Running, R, g(i),Gr,Ci,Cr,Ni,Nr ); - send_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - recv_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, g(i),Gr,Ci,Cr,Ni,Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, {Ni}pk(R), {Gi,I}prf(Ni, Ci) ); - send_4( R, I, Ci, Cr, {Nr}pk(I), {g(r),R}prf(Nr, Cr) ); - recv_!5( I, R, Ci, Cr, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Running, I, Gi,g(r),Ci,Cr,Ni,Nr ); - send_!6( R, I, Ci, Cr, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Gi,g(r),Ci,Cr,Ni,Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-a.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-a.cpp deleted file mode 100644 index bdd5b4cf8ee3ce77c3dc29f6dbd804245e1c8479..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-a.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Pre-shared key authentication (aggressive mode) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1_PSK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HASH_Ii prf(k(I,R), Ni, Nr, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(k(R,I), Ni, Nr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(k(I,R), Ni, Nr, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(k(R,I), Ni, Nr, g(r), Gi, Cr, Ci, list, R) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, HASH_Rr ); - send_!O2( O, O, HASH_Ri ); - - // msg 3 - recv_!O3( O, O, HASH_Ii ); - send_!O4( O, O, HASH_Ir ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-psk-a(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni, I ); - recv_!2( R, I, Ci, Cr, algo, Gr, Nr, R, HASH_Ri ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, Ci, Cr, HASH_Ii ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni, I ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, Ci, Cr, algo, g(r), Nr, R, HASH_Rr ); - recv_!3( I, R, Ci, Cr, HASH_Ir ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-a.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-a.spdl deleted file mode 100644 index 788dde03cab4461f9cc471f67597bbd13a087529..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-a.spdl +++ /dev/null @@ -1,125 +0,0 @@ -# 1 "ikev1-psk-a.cpp" -# 1 "<command-line>" -# 1 "ikev1-psk-a.cpp" -# 16 "ikev1-psk-a.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - - - - var Ci, Cr: Nonce; - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, prf(k(I,R), Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, prf(k(R,I), Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 17 "ikev1-psk-a.cpp" 2 -# 25 "ikev1-psk-a.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(k(R,I), Ni, Nr, g(r), g(i), Cr, Ci, list, R) ); - send_!O2( O, O, prf(k(I,R), Ni, Nr, g(r), g(i), Cr, Ci, list, R) ); - - - recv_!O3( O, O, prf(k(I,R), Ni, Nr, g(i), g(r), Ci, Cr, list, I) ); - send_!O4( O, O, prf(k(R,I), Ni, Nr, g(i), g(r), Ci, Cr, list, I) ); - - } - - -} - - -protocol ikev1-psk-a(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni, I ); - recv_!2( R, I, Ci, Cr, algo, Gr, Nr, R, prf(k(I,R), Ni, Nr, Gr, g(i), Cr, Ci, list, R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, Ci, Cr, prf(k(I,R), Ni, Nr, g(i), Gr, Ci, Cr, list, I) ); - - - claim( I, SKR, prf(k(I,R), Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni, I ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, Ci, Cr, algo, g(r), Nr, R, prf(k(R,I), Ni, Nr, g(r), Gi, Cr, Ci, list, R) ); - recv_!3( I, R, Ci, Cr, prf(k(R,I), Ni, Nr, Gi, g(r), Ci, Cr, list, I) ); - - - claim( R, SKR, prf(k(R,I), Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m-perlman.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m-perlman.cpp deleted file mode 100644 index 01640add7624ed88ea12b9abb3825214feaa639a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m-perlman.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Pre-shared key authentication (main mode) incorporating - * a fix by Perlman et. al. - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1_PSK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HASH_Ii prf(k(I,R), Ni, Nr, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(k(R,I), Ni, Nr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(k(I,R), Ni, Nr, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(k(R,I), Ni, Nr, g(r), Gi, Cr, Ci, list, R) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {I, HASH_Ii}Zi ); - send_!O2( O, O, {I, HASH_Ir}Zr ); - - // msg 6 - recv_!O3( O, O, {R, HASH_Rr}Zr ); - send_!O4( O, O, {R, HASH_Ri}Zi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-psk-m-perlman(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), Ni ); - recv_4( R, I, Ci, Cr, Gr, Nr ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, Ci, Cr, {I, HASH_Ii}Zi ); - recv_!6( R, I, Ci, Cr, {R, HASH_Ri}Zi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, Ni ); - send_4( R, I, Ci, Cr, g(r), Nr ); - recv_!5( I, R, Ci, Cr, {I, HASH_Ir}Zr ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!6( R, I, Ci, Cr, {R, HASH_Rr}Zr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m-perlman.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m-perlman.spdl deleted file mode 100644 index fa9436a2db4fd51aefddef8f1b82985ff070ee02..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m-perlman.spdl +++ /dev/null @@ -1,131 +0,0 @@ -# 1 "ikev1-psk-m-perlman.cpp" -# 1 "<command-line>" -# 1 "ikev1-psk-m-perlman.cpp" -# 17 "ikev1-psk-m-perlman.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - - - - var Ci, Cr: Nonce; - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, prf(k(I,R), Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, prf(k(R,I), Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-psk-m-perlman.cpp" 2 -# 26 "ikev1-psk-m-perlman.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {I, prf(k(I,R), Ni, Nr, g(i), g(r), Ci, Cr, list, I)}h(g(r),i) ); - send_!O2( O, O, {I, prf(k(R,I), Ni, Nr, g(i), g(r), Ci, Cr, list, I)}h(g(i),r) ); - - - recv_!O3( O, O, {R, prf(k(R,I), Ni, Nr, g(r), g(i), Cr, Ci, list, R)}h(g(i),r) ); - send_!O4( O, O, {R, prf(k(I,R), Ni, Nr, g(r), g(i), Cr, Ci, list, R)}h(g(r),i) ); - - } - - -} - - -protocol ikev1-psk-m-perlman(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), Ni ); - recv_4( R, I, Ci, Cr, Gr, Nr ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, Ci, Cr, {I, prf(k(I,R), Ni, Nr, g(i), Gr, Ci, Cr, list, I)}h(Gr,i) ); - recv_!6( R, I, Ci, Cr, {R, prf(k(I,R), Ni, Nr, Gr, g(i), Cr, Ci, list, R)}h(Gr,i) ); - - - claim( I, SKR, prf(k(I,R), Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, Ni ); - send_4( R, I, Ci, Cr, g(r), Nr ); - recv_!5( I, R, Ci, Cr, {I, prf(k(R,I), Ni, Nr, Gi, g(r), Ci, Cr, list, I)}h(Gi,r) ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!6( R, I, Ci, Cr, {R, prf(k(R,I), Ni, Nr, g(r), Gi, Cr, Ci, list, R)}h(Gi,r) ); - - - claim( R, SKR, prf(k(R,I), Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m.cpp deleted file mode 100644 index f2030186b00dcbe7278d030ad2f7a2b7e6977078..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Pre-shared key authentication (main mode) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1_PSK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYID prf(k(I,R),Ni,Nr) -#define HASH_Ii prf(k(I,R), Ni, Nr, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(k(R,I), Ni, Nr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(k(I,R), Ni, Nr, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(k(R,I), Ni, Nr, g(r), Gi, Cr, Ci, list, R) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {I, HASH_Ii}SKi ); - send_!O2( O, O, {I, HASH_Ir}SKr ); - - // msg 6 - recv_!O3( O, O, {R, HASH_Rr}SKr ); - send_!O4( O, O, {R, HASH_Ri}SKi ); - - } -#undef Gi -#undef Gr -} - -protocol ikev1-psk-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), Ni ); - recv_4( R, I, Ci, Cr, Gr, Nr ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, Ci, Cr, {I, HASH_Ii}SKi ); - recv_!6( R, I, Ci, Cr, {R, HASH_Ri}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, Ni ); - send_4( R, I, Ci, Cr, g(r), Nr ); - recv_!5( I, R, Ci, Cr, {I, HASH_Ir}SKr ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!6( R, I, Ci, Cr, {R, HASH_Rr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m.spdl deleted file mode 100644 index ca7a6888664db131ae5db199e9b56aab363e4711..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-psk-m.spdl +++ /dev/null @@ -1,130 +0,0 @@ -# 1 "ikev1-psk-m.cpp" -# 1 "<command-line>" -# 1 "ikev1-psk-m.cpp" -# 16 "ikev1-psk-m.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - - - - var Ci, Cr: Nonce; - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, prf(k(I,R), Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, prf(k(R,I), Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 17 "ikev1-psk-m.cpp" 2 -# 26 "ikev1-psk-m.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {I, prf(k(I,R), Ni, Nr, g(i), g(r), Ci, Cr, list, I)}prf(k(I,R), Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O2( O, O, {I, prf(k(R,I), Ni, Nr, g(i), g(r), Ci, Cr, list, I)}prf(k(R,I), Ni, Nr, h(g(i),r), Ci, Cr) ); - - - recv_!O3( O, O, {R, prf(k(R,I), Ni, Nr, g(r), g(i), Cr, Ci, list, R)}prf(k(R,I), Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O4( O, O, {R, prf(k(I,R), Ni, Nr, g(r), g(i), Cr, Ci, list, R)}prf(k(I,R), Ni, Nr, h(g(r),i), Ci, Cr) ); - - } - - -} - -protocol ikev1-psk-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), Ni ); - recv_4( R, I, Ci, Cr, Gr, Nr ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, Ci, Cr, {I, prf(k(I,R), Ni, Nr, g(i), Gr, Ci, Cr, list, I)}prf(k(I,R), Ni, Nr, h(Gr,i), Ci, Cr) ); - recv_!6( R, I, Ci, Cr, {R, prf(k(I,R), Ni, Nr, Gr, g(i), Cr, Ci, list, R)}prf(k(I,R), Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, prf(k(I,R), Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, Ni ); - send_4( R, I, Ci, Cr, g(r), Nr ); - recv_!5( I, R, Ci, Cr, {I, prf(k(R,I), Ni, Nr, Gi, g(r), Ci, Cr, list, I)}prf(k(R,I), Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!6( R, I, Ci, Cr, {R, prf(k(R,I), Ni, Nr, g(r), Gi, Cr, Ci, list, R)}prf(k(R,I), Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, prf(k(R,I), Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-noid.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-noid.cpp deleted file mode 100644 index f6f57127d1a372a3463cc3c8ada9419e919e40c0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-noid.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Quick mode (pfs), without optional identities - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1_QUICK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/* k(I,R)=k(R,I) equal Ka from the spec */ -#define HASH1i prf(k(I,R), mid, list, Ni, g(i)) -#define HASH1r prf(k(R,I), mid, list, Ni, Gi) -#define HASH2i prf(k(I,R), mid, Ni, algo, Nr, Gr) -#define HASH2r prf(k(R,I), mid, Ni, algo, Nr, g(r)) -#define HASH3i prf(k(I,R), mid, Ni, Nr) -#define HASH3r prf(k(R,I), mid, Ni, Nr) - -usertype String; -const list, algo: String; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling k(I,R) = k(R,I). - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var mid, i, r, Ni, Nr: Nonce; - var I, R: Agent; - - // msg 1 - recv_!O1( O, O, {HASH1i, list, Ni, g(i)}k(I,R) ); - send_!O2( O, O, {HASH1r, list, Ni, Gi}k(R,I) ); - - // msg 2 - recv_!O3( O, O, {HASH2r, algo, Nr, g(r)}k(R,I) ); - send_!O4( O, O, {HASH2i, algo, Nr, Gr}k(I,R) ); - - // msg 3 - recv_!O5( O, O, {HASH3i}k(I,R) ); - send_!O6( O, O, {HASH3r}k(R,I) ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-quick-noid(I, R) -{ - role I { - fresh i, Ni, Ci, mid: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_!1( I, R, mid, {HASH1i, list, Ni, g(i)}k(I,R) ); - recv_!2( R, I, mid, {HASH2i, algo, Nr, Gr}k(I,R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr ); - send_!3( I, R, mid, {HASH3i}k(I,R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci, mid: Nonce; - var Gi: Ticket; - - recv_!1( I, R, mid, {HASH1r, list, Ni, Gi}k(R,I) ); - claim( R, Running, I, Ni, Nr, Gi, g(r) ); - send_!2( R, I, mid, {HASH2r, algo, Nr, g(r)}k(R,I) ); - recv_!3( I, R, mid, {HASH3r}k(R,I) ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r) ); - - } -} -// TODO: Incorporate into various phase 1 protocols (see spec for adaptions) -// NOTE: If incorporated in phase 1, make sure to model with and without optional identities in msg 2 & 3 diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-noid.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-noid.spdl deleted file mode 100644 index 03e9c05c647160e0e160a560d7c1ffe63ce30d96..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-noid.spdl +++ /dev/null @@ -1,124 +0,0 @@ -# 1 "ikev1-quick-noid.cpp" -# 1 "<command-line>" -# 1 "ikev1-quick-noid.cpp" -# 16 "ikev1-quick-noid.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 126 "common.h" - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(k(I,R),h(g(r),i),Ni,Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(k(R,I),h(g(i),r),Ni,Nr) ); - - } - - -} -# 17 "ikev1-quick-noid.cpp" 2 -# 27 "ikev1-quick-noid.cpp" -usertype String; -const list, algo: String; - - - - - - -protocol @executability(O) { - - - role O { - var mid, i, r, Ni, Nr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(k(I,R), mid, list, Ni, g(i)), list, Ni, g(i)}k(I,R) ); - send_!O2( O, O, {prf(k(R,I), mid, list, Ni, g(i)), list, Ni, g(i)}k(R,I) ); - - - recv_!O3( O, O, {prf(k(R,I), mid, Ni, algo, Nr, g(r)), algo, Nr, g(r)}k(R,I) ); - send_!O4( O, O, {prf(k(I,R), mid, Ni, algo, Nr, g(r)), algo, Nr, g(r)}k(I,R) ); - - - recv_!O5( O, O, {prf(k(I,R), mid, Ni, Nr)}k(I,R) ); - send_!O6( O, O, {prf(k(R,I), mid, Ni, Nr)}k(R,I) ); - - } - - -} - - -protocol ikev1-quick-noid(I, R) -{ - role I { - fresh i, Ni, Ci, mid: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_!1( I, R, mid, {prf(k(I,R), mid, list, Ni, g(i)), list, Ni, g(i)}k(I,R) ); - recv_!2( R, I, mid, {prf(k(I,R), mid, Ni, algo, Nr, Gr), algo, Nr, Gr}k(I,R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr ); - send_!3( I, R, mid, {prf(k(I,R), mid, Ni, Nr)}k(I,R) ); - - - claim( I, SKR, KDF(k(I,R),h(Gr,i),Ni,Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci, mid: Nonce; - var Gi: Ticket; - - recv_!1( I, R, mid, {prf(k(R,I), mid, list, Ni, Gi), list, Ni, Gi}k(R,I) ); - claim( R, Running, I, Ni, Nr, Gi, g(r) ); - send_!2( R, I, mid, {prf(k(R,I), mid, Ni, algo, Nr, g(r)), algo, Nr, g(r)}k(R,I) ); - recv_!3( I, R, mid, {prf(k(R,I), mid, Ni, Nr)}k(R,I) ); - - - - claim( R, SKR, KDF(k(R,I),h(Gi,r),Ni,Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r) ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-nopfs.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-nopfs.cpp deleted file mode 100644 index 38a1fc4691595f88f193458b73ff5b5ea5c98103..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-nopfs.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Quick mode (no pfs), without optional identities - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1_QUICK_NOPFS__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/* k(I,R)=k(R,I) equal Ka from the spec */ -#define HASH1i prf(k(I,R), mid, list, Ni) -#define HASH1r prf(k(R,I), mid, list, Ni) -#define HASH2i prf(k(I,R), mid, Ni, algo, Nr) -#define HASH2r prf(k(R,I), mid, Ni, algo, Nr) -#define HASH3i prf(k(I,R), mid, Ni, Nr) -#define HASH3r prf(k(R,I), mid, Ni, Nr) - -usertype String; -const list, algo: String; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling k(I,R) = k(R,I). - */ -protocol @executability(O) { - role O { - var mid, Ni, Nr: Nonce; - var I, R: Agent; - - // msg 1 - recv_!O1( O, O, {HASH1i, list, Ni}k(I,R) ); - send_!O2( O, O, {HASH1r, list, Ni}k(R,I) ); - - // msg 2 - recv_!O3( O, O, {HASH2r, algo, Nr}k(R,I) ); - send_!O4( O, O, {HASH2i, algo, Nr}k(I,R) ); - - // msg 3 - recv_!O5( O, O, {HASH3i}k(I,R) ); - send_!O6( O, O, {HASH3r}k(R,I) ); - - } -} - - -protocol ikev1-quick-nopfs(I, R) -{ - role I { - fresh i, Ni, Ci, mid: Nonce; - var Nr, Cr: Nonce; - - send_!1( I, R, mid, {HASH1i, list, Ni}k(I,R) ); - recv_!2( R, I, mid, {HASH2i, algo, Nr}k(I,R) ); - claim( I, Running, R, Ni, Nr ); - send_!3( I, R, mid, {HASH3i}k(I,R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci, mid: Nonce; - - recv_!1( I, R, mid, {HASH1r, list, Ni}k(R,I) ); - claim( R, Running, I, Ni, Nr ); - send_!2( R, I, mid, {HASH2r, algo, Nr}k(R,I) ); - recv_!3( I, R, mid, {HASH3r}k(R,I) ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr ); - - } -} -// TODO: Incorporate into various phase 1 protocols (see spec for adaptions) -// NOTE: If incorporated in phase 1, make sure to model with and without optional identities in msg 2 & 3 diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-nopfs.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-nopfs.spdl deleted file mode 100644 index c7d2f992cecb058650ba0261bac3a574c8b5f4af..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick-nopfs.spdl +++ /dev/null @@ -1,118 +0,0 @@ -# 1 "ikev1-quick-nopfs.cpp" -# 1 "<command-line>" -# 1 "ikev1-quick-nopfs.cpp" -# 16 "ikev1-quick-nopfs.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 129 "common.h" - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(k(I,R),Ni,Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(k(R,I),Ni,Nr) ); - - } - - -} -# 17 "ikev1-quick-nopfs.cpp" 2 -# 27 "ikev1-quick-nopfs.cpp" -usertype String; -const list, algo: String; - - - - - - -protocol @executability(O) { - role O { - var mid, Ni, Nr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(k(I,R), mid, list, Ni), list, Ni}k(I,R) ); - send_!O2( O, O, {prf(k(R,I), mid, list, Ni), list, Ni}k(R,I) ); - - - recv_!O3( O, O, {prf(k(R,I), mid, Ni, algo, Nr), algo, Nr}k(R,I) ); - send_!O4( O, O, {prf(k(I,R), mid, Ni, algo, Nr), algo, Nr}k(I,R) ); - - - recv_!O5( O, O, {prf(k(I,R), mid, Ni, Nr)}k(I,R) ); - send_!O6( O, O, {prf(k(R,I), mid, Ni, Nr)}k(R,I) ); - - } -} - - -protocol ikev1-quick-nopfs(I, R) -{ - role I { - fresh i, Ni, Ci, mid: Nonce; - var Nr, Cr: Nonce; - - send_!1( I, R, mid, {prf(k(I,R), mid, list, Ni), list, Ni}k(I,R) ); - recv_!2( R, I, mid, {prf(k(I,R), mid, Ni, algo, Nr), algo, Nr}k(I,R) ); - claim( I, Running, R, Ni, Nr ); - send_!3( I, R, mid, {prf(k(I,R), mid, Ni, Nr)}k(I,R) ); - - - claim( I, SKR, KDF(k(I,R),Ni,Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci, mid: Nonce; - - recv_!1( I, R, mid, {prf(k(R,I), mid, list, Ni), list, Ni}k(R,I) ); - claim( R, Running, I, Ni, Nr ); - send_!2( R, I, mid, {prf(k(R,I), mid, Ni, algo, Nr), algo, Nr}k(R,I) ); - recv_!3( I, R, mid, {prf(k(R,I), mid, Ni, Nr)}k(R,I) ); - - - - claim( R, SKR, KDF(k(R,I),Ni,Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick.cpp deleted file mode 100644 index 60e9fccfe7f3e7253b99c148912152914aec196e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Quick mode (pfs), optional identities included - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1_QUICK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/* k(I,R) equals Ka from the spec */ -#define HASH1i prf(k(I,R), mid, list, Ni, g(i), I, R) -#define HASH1r prf(k(R,I), mid, list, Ni, Gi, I, R) -#define HASH2i prf(k(I,R), mid, Ni, algo, Nr, Gr, I, R) -#define HASH2r prf(k(R,I), mid, Ni, algo, Nr, g(r), I, R) -#define HASH3i prf(k(I,R), mid, Ni, Nr) -#define HASH3r prf(k(R,I), mid, Ni, Nr) - - -protocol ikev1-quick(I, R) -{ - role I { - fresh i, Ni, Ci, mid, list: Nonce; - var Nr, Cr, algo: Nonce; - var Gr: Ticket; - - send_!1( I, R, mid, {HASH1i, list, Ni, g(i), I, R}k(I,R) ); - recv_!2( R, I, mid, {HASH2i, algo, Nr, Gr, I, R}k(I,R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr ); - send_!3( I, R, mid, {HASH3i}k(I,R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr ); - - } - - role R { - fresh r, Nr, Cr, algo: Nonce; - var Ni, Ci, mid, list: Nonce; - var Gi: Ticket; - - recv_!1( I, R, mid, {HASH1r, list, Ni, Gi, I, R}k(I,R) ); - claim( R, Running, I, Ni, Nr, Gi, g(r) ); - send_!2( R, I, mid, {HASH2r, algo, Nr, g(r), I, R}k(I,R) ); - recv_!3( I, R, mid, {HASH3r}k(I,R) ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r) ); - - } -} -// TODO: Incorporate into various phase 1 protocols (see spec for adaptions) -// NOTE: If incorporated in phase 1, make sure to model with and without optional identities in msg 2 & 3 diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick.spdl deleted file mode 100644 index 6a723c72a8d708953cfc64987229a06b38c800bb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-quick.spdl +++ /dev/null @@ -1,91 +0,0 @@ -# 1 "ikev1-quick.cpp" -# 1 "<command-line>" -# 1 "ikev1-quick.cpp" -# 16 "ikev1-quick.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 126 "common.h" - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(k(I,R),h(g(r),i),Ni,Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(k(R,I),h(g(i),r),Ni,Nr) ); - - } - - -} -# 17 "ikev1-quick.cpp" 2 -# 28 "ikev1-quick.cpp" -protocol ikev1-quick(I, R) -{ - role I { - fresh i, Ni, Ci, mid, list: Nonce; - var Nr, Cr, algo: Nonce; - var Gr: Ticket; - - send_!1( I, R, mid, {prf(k(I,R), mid, list, Ni, g(i), I, R), list, Ni, g(i), I, R}k(I,R) ); - recv_!2( R, I, mid, {prf(k(I,R), mid, Ni, algo, Nr, Gr, I, R), algo, Nr, Gr, I, R}k(I,R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr ); - send_!3( I, R, mid, {prf(k(I,R), mid, Ni, Nr)}k(I,R) ); - - - claim( I, SKR, KDF(k(I,R),h(Gr,i),Ni,Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr ); - - } - - role R { - fresh r, Nr, Cr, algo: Nonce; - var Ni, Ci, mid, list: Nonce; - var Gi: Ticket; - - recv_!1( I, R, mid, {prf(k(R,I), mid, list, Ni, Gi, I, R), list, Ni, Gi, I, R}k(I,R) ); - claim( R, Running, I, Ni, Nr, Gi, g(r) ); - send_!2( R, I, mid, {prf(k(R,I), mid, Ni, algo, Nr, g(r), I, R), algo, Nr, g(r), I, R}k(I,R) ); - recv_!3( I, R, mid, {prf(k(R,I), mid, Ni, Nr)}k(I,R) ); - - - - claim( R, SKR, KDF(k(R,I),h(Gi,r),Ni,Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r) ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman1.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman1.cpp deleted file mode 100644 index ddebfcbbfce70721b1d9d40768cf03a63f246e68..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman1.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/*********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Digital signature authentication (aggressive mode) with - * a modification suggested by Perlman et al. (last msg not - * encrypted) - ***********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HDR (Ci,Cr) -#define SKEYIDi prf(Ni,Nr,Zi) -#define SKEYIDr prf(Ni,Nr,Zr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, {R}SKr, {HASH_Rr}sk(R) ); - send_!O2( O, O, {R}SKi, {HASH_Ri}sk(R) ); - - // msg 3 - recv_!O3( O, O, {I}SKi, {HASH_Ii}sk(I) ); - send_!O4( O, O, {I}SKr, {HASH_Ir}sk(I) ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-sig-a-perlman1(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni ); - recv_!2( R, I, HDR, algo, Gr, Nr, {R}SKi, {HASH_Ri}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, HDR, {I}SKi, {HASH_Ii}sk(I) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, HDR, algo, g(r), Nr, R, {R}SKr, {HASH_Rr}sk(R) ); - recv_!3( I, R, HDR, {I}SKr, {HASH_Ir}sk(I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman1.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman1.spdl deleted file mode 100644 index f758a99fc3757563feedbddba9d8c3e21e4aa864..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman1.spdl +++ /dev/null @@ -1,130 +0,0 @@ -# 1 "ikev1-sig-a-perlman1.cpp" -# 1 "<command-line>" -# 1 "ikev1-sig-a-perlman1.cpp" -# 18 "ikev1-sig-a-perlman1.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 19 "ikev1-sig-a-perlman1.cpp" 2 -# 29 "ikev1-sig-a-perlman1.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {R}KDF(Ni, Nr, h(g(i),r), Ci, Cr), {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - send_!O2( O, O, {R}KDF(Ni, Nr, h(g(r),i), Ci, Cr), {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - - - recv_!O3( O, O, {I}KDF(Ni, Nr, h(g(r),i), Ci, Cr), {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}sk(I) ); - send_!O4( O, O, {I}KDF(Ni, Nr, h(g(i),r), Ci, Cr), {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}sk(I) ); - - } - - -} - - -protocol ikev1-sig-a-perlman1(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni ); - recv_!2( R, I, (Ci,Cr), algo, Gr, Nr, {R}KDF(Ni, Nr, h(Gr,i), Ci, Cr), {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, (Ci,Cr), {I}KDF(Ni, Nr, h(Gr,i), Ci, Cr), {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}sk(I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, (Ci,Cr), algo, g(r), Nr, R, {R}KDF(Ni, Nr, h(Gi,r), Ci, Cr), {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}sk(R) ); - recv_!3( I, R, (Ci,Cr), {I}KDF(Ni, Nr, h(Gi,r), Ci, Cr), {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}sk(I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman2.cpp deleted file mode 100644 index e39a7b90f03a25100a35ee722708bf45b10ab1ae..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman2.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Digital signature authentication (aggressive mode) with - * a modification suggested by Perlman et al. (last msg - * encrypted) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HDR (Ci,Cr) -#define SKEYIDi prf(Ni,Nr,Zi) -#define SKEYIDr prf(Ni,Nr,Zr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, {R}SKr, {HASH_Rr}sk(R) ); - send_!O2( O, O, {R}SKi, {HASH_Ri}sk(R) ); - - // msg 3 - recv_!O3( O, O, {I, {HASH_Ii}sk(I)}SKi ); - send_!O4( O, O, {I, {HASH_Ir}sk(I)}SKr ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-sig-a-perlman2(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni ); - recv_!2( R, I, HDR, algo, Gr, Nr, {R}SKi, {HASH_Ri}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, HDR, {I, {HASH_Ii}sk(I)}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, HDR, algo, g(r), Nr, R, {R}SKr, {HASH_Rr}sk(R) ); - recv_!3( I, R, HDR, {I, {HASH_Ir}sk(I)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman2.spdl deleted file mode 100644 index c2edf7d670b607ae011aaea618b2cad7346d49db..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a-perlman2.spdl +++ /dev/null @@ -1,130 +0,0 @@ -# 1 "ikev1-sig-a-perlman2.cpp" -# 1 "<command-line>" -# 1 "ikev1-sig-a-perlman2.cpp" -# 18 "ikev1-sig-a-perlman2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 19 "ikev1-sig-a-perlman2.cpp" 2 -# 29 "ikev1-sig-a-perlman2.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {R}KDF(Ni, Nr, h(g(i),r), Ci, Cr), {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - send_!O2( O, O, {R}KDF(Ni, Nr, h(g(r),i), Ci, Cr), {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - - - recv_!O3( O, O, {I, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O4( O, O, {I, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} - - -protocol ikev1-sig-a-perlman2(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni ); - recv_!2( R, I, (Ci,Cr), algo, Gr, Nr, {R}KDF(Ni, Nr, h(Gr,i), Ci, Cr), {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, (Ci,Cr), {I, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, (Ci,Cr), algo, g(r), Nr, R, {R}KDF(Ni, Nr, h(Gi,r), Ci, Cr), {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}sk(R) ); - recv_!3( I, R, (Ci,Cr), {I, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a1.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a1.cpp deleted file mode 100644 index 418492e69ea13476cf63d52bad95dea2b469560d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a1.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Digital signature authentication (aggressive mode) - * where the last message is not encrypted - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HDR (Ci,Cr) -#define SKEYIDi prf(Ni,Nr,Zi) -#define SKEYIDr prf(Ni,Nr,Zr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, {HASH_Rr}sk(R) ); - send_!O2( O, O, {HASH_Ri}sk(R) ); - - // msg 3 - recv_!O3( O, O, {HASH_Ii}sk(I) ); - send_!O4( O, O, {HASH_Ir}sk(I) ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-sig-a1(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni, I ); - recv_!2( R, I, HDR, algo, Gr, Nr, R, {HASH_Ri}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, HDR, {HASH_Ii}sk(I) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni, I ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, HDR, algo, g(r), Nr, R, {HASH_Rr}sk(R) ); - recv_!3( I, R, HDR, {HASH_Ir}sk(I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a1.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a1.spdl deleted file mode 100644 index 327c4fe6b183204d86e2a6bdd43a4f8f081d7fb3..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a1.spdl +++ /dev/null @@ -1,130 +0,0 @@ -# 1 "ikev1-sig-a1.cpp" -# 1 "<command-line>" -# 1 "ikev1-sig-a1.cpp" -# 17 "ikev1-sig-a1.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-sig-a1.cpp" 2 -# 28 "ikev1-sig-a1.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - send_!O2( O, O, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - - - recv_!O3( O, O, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}sk(I) ); - send_!O4( O, O, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}sk(I) ); - - } - - -} - - -protocol ikev1-sig-a1(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni, I ); - recv_!2( R, I, (Ci,Cr), algo, Gr, Nr, R, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, (Ci,Cr), {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}sk(I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni, I ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, (Ci,Cr), algo, g(r), Nr, R, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}sk(R) ); - recv_!3( I, R, (Ci,Cr), {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}sk(I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a2.cpp deleted file mode 100644 index 1c81dab28f63a04bd0c5fe2c12704b9249575c8e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a2.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Digital signature authentication (aggressive mode) - * where thelast message is encrypted with the session key - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HDR (Ci,Cr) -#define SKEYIDi prf(Ni,Nr,Zi) -#define SKEYIDr prf(Ni,Nr,Zr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, {HASH_Rr}sk(R) ); - send_!O2( O, O, {HASH_Ri}sk(R) ); - - // msg 3 - recv_!O3( O, O, {{HASH_Ii}sk(I)}SKi ); - send_!O4( O, O, {{HASH_Ir}sk(I)}SKr ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-sig-a2(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni, I ); - recv_!2( R, I, HDR, algo, Gr, Nr, R, {HASH_Ri}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, HDR, {{HASH_Ii}sk(I)}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni, I ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, HDR, algo, g(r), Nr, R, {HASH_Rr}sk(R) ); - recv_!3( I, R, HDR, {{HASH_Ir}sk(I)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a2.spdl deleted file mode 100644 index b0e6e07cb50087e2ec19c11cb2c15b763931cf38..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-a2.spdl +++ /dev/null @@ -1,130 +0,0 @@ -# 1 "ikev1-sig-a2.cpp" -# 1 "<command-line>" -# 1 "ikev1-sig-a2.cpp" -# 17 "ikev1-sig-a2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-sig-a2.cpp" 2 -# 29 "ikev1-sig-a2.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - send_!O2( O, O, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}sk(R) ); - - - recv_!O3( O, O, {{prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O4( O, O, {{prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} - - -protocol ikev1-sig-a2(I, R) -{ - - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list, g(i), Ni, I ); - recv_!2( R, I, (Ci,Cr), algo, Gr, Nr, R, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}sk(R) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!3( I, R, (Ci,Cr), {{prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list, Gi, Ni, I ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!2( R, I, (Ci,Cr), algo, g(r), Nr, R, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}sk(R) ); - recv_!3( I, R, (Ci,Cr), {{prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m-perlman.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m-perlman.cpp deleted file mode 100644 index 4129ae25b1cbc4703b74bf4f164b6a87929f2d8c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m-perlman.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Digital signature authentication (aggressive mode) with - * a modification suggested by Perlman et al. - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define SKEYIDi prf(Ni,Nr,Zi) -#define SKEYIDr prf(Ni,Nr,Zr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 4 - recv_!O1( O, O, {R, {HASH_Rr}sk(R)}SKr ); - send_!O2( O, O, {R, {HASH_Ri}sk(R)}SKi ); - - // msg 5 - recv_!O3( O, O, {I, {HASH_Ii}sk(I)}SKi ); - send_!O4( O, O, {I, {HASH_Ir}sk(I)}SKr ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev1-sig-m-perlman(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), Ni ); - recv_!4( R, I, Ci, Cr, Gr, Nr, {R, {HASH_Ri}sk(R)}SKi ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, Ci, Cr, {I, {HASH_Ii}sk(I)}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, Ni ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!4( R, I, Ci, Cr, g(r), Nr, {R, {HASH_Rr}sk(R)}SKr ); - recv_!5( I, R, Ci, Cr, {I, {HASH_Ir}sk(I)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m-perlman.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m-perlman.spdl deleted file mode 100644 index 321fc1b2c8b331587c33d5d7de6205b6293e6045..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m-perlman.spdl +++ /dev/null @@ -1,133 +0,0 @@ -# 1 "ikev1-sig-m-perlman.cpp" -# 1 "<command-line>" -# 1 "ikev1-sig-m-perlman.cpp" -# 17 "ikev1-sig-m-perlman.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 18 "ikev1-sig-m-perlman.cpp" 2 -# 27 "ikev1-sig-m-perlman.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {R, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O2( O, O, {R, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - - - recv_!O3( O, O, {I, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O4( O, O, {I, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} - - -protocol ikev1-sig-m-perlman(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, Ci, Cr, algo ); - send_3( I, R, Ci, Cr, g(i), Ni ); - recv_!4( R, I, Ci, Cr, Gr, Nr, {R, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, Ci, Cr, {I, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, Ci, Cr, algo ); - recv_3( I, R, Ci, Cr, Gi, Ni ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!4( R, I, Ci, Cr, g(r), Nr, {R, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - recv_!5( I, R, Ci, Cr, {I, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m.cpp deleted file mode 100644 index f24b78f9c291e0ea1bbeadb96094819d542cab2e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv1) - * @reference RFC 2409, - * Boyd C. and Mathuria A., Protocols for Authentication - * and Key Agreement - * @variant Digital signature authentication (aggressive mode) - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV1__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define HDR (Ci,Cr) -#define SKEYIDi prf(Ni,Nr,Zi) -#define SKEYIDr prf(Ni,Nr,Zr) -#define HASH_Ii prf(Ni, Nr, Zi, g(i), Gr, Ci, Cr, list, I) -#define HASH_Ir prf(Ni, Nr, Zr, Gi, g(r), Ci, Cr, list, I) -#define HASH_Ri prf(Ni, Nr, Zi, Gr, g(i), Cr, Ci, list, R) -#define HASH_Rr prf(Ni, Nr, Zr, g(r), Gi, Cr, Ci, list, R) - - -usertype String; -const list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {I, {HASH_Ii}sk(I)}SKi ); - send_!O2( O, O, {I, {HASH_Ir}sk(I)}SKr ); - - // msg 6 - recv_!O3( O, O, {R, {HASH_Rr}sk(R)}SKr ); - send_!O4( O, O, {R, {HASH_Ri}sk(R)}SKi ); - - } -#undef Gi -#undef Gr -} - -protocol ikev1-sig-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, HDR, algo ); - send_3( I, R, HDR, g(i), Ni ); - recv_4( R, I, HDR, Gr, Nr ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, HDR, {I, {HASH_Ii}sk(I)}SKi ); - recv_!6( R, I, HDR, {R, {HASH_Ri}sk(R)}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, HDR, algo ); - recv_3( I, R, HDR, Gi, Ni ); - send_4( R, I, HDR, g(r), Nr ); - recv_!5( I, R, HDR, {I, {HASH_Ir}sk(I)}SKr ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!6( R, I, HDR, {R, {HASH_Rr}sk(R)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m.spdl deleted file mode 100644 index 28150b0db685a0a77f8cd3a1e32ee0e886dd7fde..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev1-sig-m.spdl +++ /dev/null @@ -1,134 +0,0 @@ -# 1 "ikev1-sig-m.cpp" -# 1 "<command-line>" -# 1 "ikev1-sig-m.cpp" -# 16 "ikev1-sig-m.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; - - - - - - - -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; - - - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 17 "ikev1-sig-m.cpp" 2 -# 28 "ikev1-sig-m.cpp" -usertype String; -const list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {I, {prf(Ni, Nr, h(g(r),i), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!O2( O, O, {I, {prf(Ni, Nr, h(g(i),r), g(i), g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - - recv_!O3( O, O, {R, {prf(Ni, Nr, h(g(i),r), g(r), g(i), Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - send_!O4( O, O, {R, {prf(Ni, Nr, h(g(r),i), g(r), g(i), Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - - } - - -} - -protocol ikev1-sig-m(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, list ); - recv_2( R, I, (Ci,Cr), algo ); - send_3( I, R, (Ci,Cr), g(i), Ni ); - recv_4( R, I, (Ci,Cr), Gr, Nr ); - claim( I, Running, R, Ni, Nr, g(i), Gr, Ci, Cr ); - send_!5( I, R, (Ci,Cr), {I, {prf(Ni, Nr, h(Gr,i), g(i), Gr, Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - recv_!6( R, I, (Ci,Cr), {R, {prf(Ni, Nr, h(Gr,i), Gr, g(i), Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni, Nr, g(i), Gr, Ci, Cr ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, list ); - send_2( R, I, (Ci,Cr), algo ); - recv_3( I, R, (Ci,Cr), Gi, Ni ); - send_4( R, I, (Ci,Cr), g(r), Nr ); - recv_!5( I, R, (Ci,Cr), {I, {prf(Ni, Nr, h(Gi,r), Gi, g(r), Ci, Cr, list, I)}sk(I)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Running, I, Ni, Nr, Gi, g(r), Ci, Cr ); - send_!6( R, I, (Ci,Cr), {R, {prf(Ni, Nr, h(Gi,r), g(r), Gi, Cr, Ci, list, R)}sk(R)}KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni, Nr, Gi, g(r), Ci, Cr ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child-nopfs.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child-nopfs.cpp deleted file mode 100644 index 96073084c43e68002f5af4e5da4697c6fa22a647..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child-nopfs.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol IKE Create Child SA - * @reference RFC 4306 - * @variant No perfect forward secrecy support - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2_CHILD_NOPFS__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -const SA3: Nonce; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling k(I,R) = k(R,I). - */ -protocol @executability(O) { - role O { - var Ni, Nr: Nonce; - var I, R: Agent; - - // msg 1 - recv_!O1( O, O, {SA3, Ni}k(I,R) ); - send_!O2( O, O, {SA3, Ni}k(R,I) ); - - // msg 2 - recv_!O3( O, O, {SA3, Nr}k(R,I) ); - send_!O4( O, O, {SA3, Nr}k(I,R) ); - - } -} - - -protocol ikev2-child-nopfs(I, R) -{ - - role I { - fresh Ni: Nonce; - var Nr: Nonce; - - /* IKE_SA_INIT */ - claim( I, Running, R,Ni ); - send_!1( I, R, {SA3, Ni}k(I,R) ); - recv_!2( R, I, {SA3, Nr}k(I,R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,Nr ); - - } - - role R { - fresh Nr: Nonce; - var Ni: Nonce; - - recv_!1( I, R, {SA3, Ni}k(R,I) ); - claim( R, Running, I,Ni,Nr ); - send_!2( R, I, {SA3, Nr}k(R,I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Ni ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child-nopfs.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child-nopfs.spdl deleted file mode 100644 index d163151b06607972db52326f4018ec9c1a93f11a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child-nopfs.spdl +++ /dev/null @@ -1,112 +0,0 @@ -# 1 "ikev2-child-nopfs.cpp" -# 1 "<command-line>" -# 1 "ikev2-child-nopfs.cpp" -# 15 "ikev2-child-nopfs.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 138 "common.h" - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(k(I,R),Ni,Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(k(R,I),Ni,Nr) ); - - } - - -} -# 16 "ikev2-child-nopfs.cpp" 2 - - -const SA3: Nonce; - - - - - - -protocol @executability(O) { - role O { - var Ni, Nr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {SA3, Ni}k(I,R) ); - send_!O2( O, O, {SA3, Ni}k(R,I) ); - - - recv_!O3( O, O, {SA3, Nr}k(R,I) ); - send_!O4( O, O, {SA3, Nr}k(I,R) ); - - } -} - - -protocol ikev2-child-nopfs(I, R) -{ - - role I { - fresh Ni: Nonce; - var Nr: Nonce; - - - claim( I, Running, R,Ni ); - send_!1( I, R, {SA3, Ni}k(I,R) ); - recv_!2( R, I, {SA3, Nr}k(I,R) ); - - - claim( I, SKR, KDF(k(I,R),Ni,Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,Nr ); - - } - - role R { - fresh Nr: Nonce; - var Ni: Nonce; - - recv_!1( I, R, {SA3, Ni}k(R,I) ); - claim( R, Running, I,Ni,Nr ); - send_!2( R, I, {SA3, Nr}k(R,I) ); - - - claim( R, SKR, KDF(k(R,I),Ni,Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Ni ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child.cpp deleted file mode 100644 index 2378231e53b6adad28fc5bf1a6977360f8196e81..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol IKE Create Child SA - * @reference RFC 4306 - * @variant Supports perfect forward secrecy - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2_CHILD__ -#ifndef __ORACLE__ -#include "common.h" -#endif - - -usertype SecurityAssociation; -const SA1 ,SA2, SA3: SecurityAssociation; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling k(I,R) = k(R,I). - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr: Nonce; - var I, R: Agent; - - // msg 1 - recv_!O1( O, O, {SA3, Ni, g(i)}k(I,R) ); - send_!O2( O, O, {SA3, Ni, g(i)}k(R,I) ); - - // msg 2 - recv_!O3( O, O, {SA3, Nr, Gr}k(R,I) ); - send_!O4( O, O, {SA3, Nr, Gr}k(I,R) ); - - } -#undef Gi -#undef Gr -} - -// Note: SPIs not modeled as they would lead to trivial attacks where the adversary -// tampers with the SPIs (they are not subsequently authenticated) -protocol ikev2-child(I, R) -{ - - role I { - fresh i, Ni: Nonce; - var Nr: Nonce; - var Gr: Ticket; - - /* IKE_SA_INIT */ - claim( I, Running, R,Ni,g(i) ); - send_!1( I, R, {SA3, Ni, g(i)}k(I,R) ); - recv_!2( R, I, {SA3, Nr, Gr}k(I,R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni: Nonce; - var Gi: Ticket; - - recv_!1( I, R, {SA3, Ni, Gi}k(R,I) ); - claim( R, Running, I,Ni,Gi,Nr,g(r) ); - send_!2( R, I, {SA3, Nr, g(r)}k(R,I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Ni,Gi ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child.spdl deleted file mode 100644 index 7c58959c1425b052bd51c14051ecd976c1fde63f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-child.spdl +++ /dev/null @@ -1,121 +0,0 @@ -# 1 "ikev2-child.cpp" -# 1 "<command-line>" -# 1 "ikev2-child.cpp" -# 15 "ikev2-child.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 135 "common.h" - var I, R: Agent; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(k(I,R),h(g(r),i),Ni,Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(k(R,I),h(g(i),r),Ni,Nr) ); - - } - - -} -# 16 "ikev2-child.cpp" 2 - - - -usertype SecurityAssociation; -const SA1 ,SA2, SA3: SecurityAssociation; - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {SA3, Ni, g(i)}k(I,R) ); - send_!O2( O, O, {SA3, Ni, g(i)}k(R,I) ); - - - recv_!O3( O, O, {SA3, Nr, g(r)}k(R,I) ); - send_!O4( O, O, {SA3, Nr, g(r)}k(I,R) ); - - } - - -} - - - -protocol ikev2-child(I, R) -{ - - role I { - fresh i, Ni: Nonce; - var Nr: Nonce; - var Gr: Ticket; - - - claim( I, Running, R,Ni,g(i) ); - send_!1( I, R, {SA3, Ni, g(i)}k(I,R) ); - recv_!2( R, I, {SA3, Nr, Gr}k(I,R) ); - - - claim( I, SKR, KDF(k(I,R),h(Gr,i),Ni,Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni: Nonce; - var Gi: Ticket; - - recv_!1( I, R, {SA3, Ni, Gi}k(R,I) ); - claim( R, Running, I,Ni,Gi,Nr,g(r) ); - send_!2( R, I, {SA3, Nr, g(r)}k(R,I) ); - - - claim( R, SKR, KDF(k(R,I),h(Gi,r),Ni,Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Ni,Gi ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap.cpp deleted file mode 100644 index 7d8310bf74f404db0d727772c116f6cf571d0845..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol IKE EAP - * @reference RFC 4306 - * @variant Includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr, EAP, EAPOK: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, EAP}SKr ); - send_!E4( E, E, {R, AUTHri, EAP}SKi ); - - // msg 5 - recv_!E5( E, E, {EAP}SKi ); - send_!E6( E, E, {EAP}SKr ); - - // msg 6 - recv_!E7( E, E, {EAPOK}SKr ); - send_!E8( E, E, {EAPOK}SKi ); - - // msg 7 - recv_!E9( E, E, {AUTHii}SKi ); - send_!EA( E, E, {AUTHir}SKr ); - - // msg 8 - send_!EB( E, E, {AUTHrr, SA2, TSi, TSr}SKr ); - send_!EC( E, E, {AUTHri, SA2, TSi, TSr}SKi ); - } -#undef Gi -#undef Gr -} - - -protocol ikev2-eap(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var EAP, EAPOK: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - send_!3( I, R, HDR, {I, R, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, EAP}SKi ); - send_!5( I, R, HDR, {EAP}SKi ); - recv_!6( R, I, HDR, {EAPOK}SKi ); - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - send_!7( I, R, HDR, {AUTHii}SKi ); - recv_!8( R, I, HDR, {AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - - } - - role R { - fresh EAP, EAPOK: Nonce; - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, R, SA2, TSi, TSr}SKr ); - send_!4( R, I, HDR, {R, AUTHrr, EAP}SKr ); - recv_!5( I, R, HDR, {EAP}SKr ); - send_!6( R, I, HDR, {EAPOK}SKr ); - recv_!7( I, R, HDR, {AUTHir}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - send_!8( R, I, HDR, {AUTHrr, SA2, TSi, TSr}SKr ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap.spdl deleted file mode 100644 index 43ec49a27f8500a71f77d6e490bf378bed249aec..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap.spdl +++ /dev/null @@ -1,160 +0,0 @@ -# 1 "ikev2-eap.cpp" -# 1 "<command-line>" -# 1 "ikev2-eap.cpp" -# 15 "ikev2-eap.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-eap.cpp" 2 -# 24 "ikev2-eap.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr, EAP, EAPOK: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E5( E, E, {EAP}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E6( E, E, {EAP}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E7( E, E, {EAPOK}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E8( E, E, {EAPOK}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E9( E, E, {{SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!EA( E, E, {{SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - send_!EB( E, E, {{SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!EC( E, E, {{SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - } - - -} - - -protocol ikev2-eap(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var EAP, EAPOK: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - send_!3( I, R, (SPIi,SPIr), {I, R, SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - send_!5( I, R, (SPIi,SPIr), {EAP}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!6( R, I, (SPIi,SPIr), {EAPOK}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - send_!7( I, R, (SPIi,SPIr), {{SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!8( R, I, (SPIi,SPIr), {{SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - - } - - role R { - fresh EAP, EAPOK: Nonce; - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, R, SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - recv_!5( I, R, (SPIi,SPIr), {EAP}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!6( R, I, (SPIi,SPIr), {EAPOK}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - recv_!7( I, R, (SPIi,SPIr), {{SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - send_!8( R, I, (SPIi,SPIr), {{SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap2.cpp deleted file mode 100644 index c56855a4e197ba66d40e714afda209dbf878224c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap2.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol IKE EAP - * @reference RFC 4306 - * @variant Excludes optional payloads - **********************************************************************/ - -/** - * Modeling notes: - * - It's not clear what to put in the EAP payloads; we now model them - * as nonces, but maybe it is better to view them as a function of the - * actor. - */ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr, EAP, EAPOK: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, EAP}SKr ); - send_!E4( E, E, {R, AUTHri, EAP}SKi ); - - // msg 5 - recv_!E5( E, E, {EAP}SKi ); - send_!E6( E, E, {EAP}SKr ); - - // msg 6 - recv_!E7( E, E, {EAPOK}SKr ); - send_!E8( E, E, {EAPOK}SKi ); - - // msg 7 - recv_!E9( E, E, {AUTHii}SKi ); - send_!EA( E, E, {AUTHir}SKr ); - - // msg 8 - send_!EB( E, E, {AUTHrr, SA2, TSi, TSr}SKr ); - send_!EC( E, E, {AUTHri, SA2, TSi, TSr}SKi ); - } -#undef Gi -#undef Gr -} - - -protocol ikev2-eap2(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var EAP, EAPOK: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - send_!3( I, R, HDR, {I, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, EAP}SKi ); - send_!5( I, R, HDR, {EAP}SKi ); - recv_!6( R, I, HDR, {EAPOK}SKi ); - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - send_!7( I, R, HDR, {AUTHii}SKi ); - recv_!8( R, I, HDR, {AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - - } - - role R { - fresh EAP, EAPOK: Nonce; - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, SA2, TSi, TSr}SKr ); - send_!4( R, I, HDR, {R, AUTHrr, EAP}SKr ); - recv_!5( I, R, HDR, {EAP}SKr ); - send_!6( R, I, HDR, {EAPOK}SKr ); - recv_!7( I, R, HDR, {AUTHir}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - send_!8( R, I, HDR, {AUTHrr, SA2, TSi, TSr}SKr ); - - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap2.spdl deleted file mode 100644 index 1fbb5800641b974ad89d3e1aa896760a20bbb15f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-eap2.spdl +++ /dev/null @@ -1,160 +0,0 @@ -# 1 "ikev2-eap2.cpp" -# 1 "<command-line>" -# 1 "ikev2-eap2.cpp" -# 22 "ikev2-eap2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 23 "ikev2-eap2.cpp" 2 -# 31 "ikev2-eap2.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr, EAP, EAPOK: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E5( E, E, {EAP}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E6( E, E, {EAP}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E7( E, E, {EAPOK}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E8( E, E, {EAPOK}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E9( E, E, {{SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!EA( E, E, {{SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - send_!EB( E, E, {{SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!EC( E, E, {{SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - } - - -} - - -protocol ikev2-eap2(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var EAP, EAPOK: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - send_!3( I, R, (SPIi,SPIr), {I, SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - send_!5( I, R, (SPIi,SPIr), {EAP}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!6( R, I, (SPIi,SPIr), {EAPOK}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - send_!7( I, R, (SPIi,SPIr), {{SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!8( R, I, (SPIi,SPIr), {{SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr,EAP,EAPOK ); - - } - - role R { - fresh EAP, EAPOK: Nonce; - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), EAP}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - recv_!5( I, R, (SPIi,SPIr), {EAP}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!6( R, I, (SPIi,SPIr), {EAPOK}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - recv_!7( I, R, (SPIi,SPIr), {{SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I)}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - send_!8( R, I, (SPIi,SPIr), {{SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr,EAP,EAPOK ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac.cpp deleted file mode 100644 index 832afae1516326bdef16593494d0d0a799bb468d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol MAC authenticated IKEv2 - * @reference RFC 4306 - * @variant Includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)) -#define AUTHir MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)) -#define AUTHri MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)) -#define AUTHrr MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-mac(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr); - send_!3( I, R, HDR, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac.spdl deleted file mode 100644 index 608d314c011ed38718804a5a2a29e315e6b11a3e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac.spdl +++ /dev/null @@ -1,133 +0,0 @@ -# 1 "ikev2-mac.cpp" -# 1 "<command-line>" -# 1 "ikev2-mac.cpp" -# 15 "ikev2-mac.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-mac.cpp" 2 -# 24 "ikev2-mac.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, MAC(k(R,I), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, MAC(k(I,R), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-mac(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr); - send_!3( I, R, (SPIi,SPIr), {I, R, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, R, MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr); - send_!4( R, I, (SPIi,SPIr), {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac2.cpp deleted file mode 100644 index cb09faad76d1abcfec4e63f81075b4e0d55e548a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac2.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol MAC authenticated IKEv2 - * @reference RFC 4306 - * @variant Excludes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)) -#define AUTHir MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)) -#define AUTHri MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)) -#define AUTHrr MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-mac2(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, HDR, {I, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac2.spdl deleted file mode 100644 index f6d3385b228389cb2dac98d4f1f95de0f002c780..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mac2.spdl +++ /dev/null @@ -1,133 +0,0 @@ -# 1 "ikev2-mac2.cpp" -# 1 "<command-line>" -# 1 "ikev2-mac2.cpp" -# 15 "ikev2-mac2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-mac2.cpp" 2 -# 24 "ikev2-mac2.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, MAC(k(R,I), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, MAC(k(I,R), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-mac2(I, R) -{ - - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - claim( I, Running, R, Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, (SPIi,SPIr), {I, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R, Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, (SPIi,SPIr), {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig.cpp deleted file mode 100644 index 519f93af4f7799e66a29484f6bf0d05b15b72ba8..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Initiator authenticates itself using message - * authentication codes while responder uses digital - * signatures. Includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)) -#define AUTHir MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-mactosig(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R,Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, SPIi, SPIr, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, SPIi, SPIr, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, SPIi, SPIr, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, SPIi, SPIr, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig.spdl deleted file mode 100644 index 388562e5a361d24c8943a92574f1c8ab7f010876..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig.spdl +++ /dev/null @@ -1,132 +0,0 @@ -# 1 "ikev2-mactosig.cpp" -# 1 "<command-line>" -# 1 "ikev2-mactosig.cpp" -# 16 "ikev2-mactosig.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 17 "ikev2-mactosig.cpp" 2 -# 25 "ikev2-mactosig.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, MAC(k(R,I), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-mactosig(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - - claim( I, Running, R,Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, SPIi, SPIr, {I, R, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, SPIi, SPIr, {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - - recv_!3( I, R, SPIi, SPIr, {I, R, MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, SPIi, SPIr, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig2.cpp deleted file mode 100644 index 73b20f55efe250dedf89d3427976c3722add6015..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig2.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Initiator authenticates itself using message - * authentication codes while responder uses digital - * signatures. Excludes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)) -#define AUTHir MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - -protocol ikev2-mactosig2(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R,Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, SPIi, SPIr, {I, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, SPIi, SPIr, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, SPIi, SPIr, {I, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, SPIi, SPIr, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig2.spdl deleted file mode 100644 index 92864abae98bfb18daa2c85ea74e4d33a94cd11a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-mactosig2.spdl +++ /dev/null @@ -1,131 +0,0 @@ -# 1 "ikev2-mactosig2.cpp" -# 1 "<command-line>" -# 1 "ikev2-mactosig2.cpp" -# 16 "ikev2-mactosig2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 17 "ikev2-mactosig2.cpp" 2 -# 25 "ikev2-mactosig2.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, MAC(k(R,I), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - -protocol ikev2-mactosig2(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - - claim( I, Running, R,Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, SPIi, SPIr, {I, MAC(k(I,R), SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, SPIi, SPIr, {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - - recv_!3( I, R, SPIi, SPIr, {I, MAC(k(R,I), SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, SPIi, SPIr, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child-composed.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child-composed.cpp deleted file mode 100644 index 62ddf6f166fb42d270e5cf78063aa845da1323fa..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child-composed.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Combination of signature authenticated IKEv2 and - * CREATE_CHILD_SA, includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) -#define KEYMATi KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) -#define KEYMATr KDF(Ni, Nr, Zr, h(Gi,t), Mi, Mr) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - // msg 5 - recv_!E5( E, E, {SA3, Mi, g(j), TSi, TSr}SKi ); - send_!E6( E, E, {SA3, Mi, g(j), TSi, TSr}SKr ); - - // msg 6 - recv_!E7( E, E, {SA3, Mr, g(t), TSi, TSr}SKr ); - send_!E8( E, E, {SA3, Mr, g(t), TSi, TSr}SKr ); - } -#undef Gi -#undef Gr -} -protocol @ora(S) { -#define Gi g(i) -#define Gj g(j) -#define Gr g(r) -#define Gt g(t) - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, Zr, h(Gj,t), Mi, Mr) ); - } -#undef Gi -#undef Gj -#undef Gr -#undef Gt -} - - -protocol ikev2-sig-child(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - send_!3( I, R, HDR, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* CREATE_CHILD_SA */ - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, HDR, {SA3, Mi, g(j), TSi, TSr}SKi ); - recv_!6( R, I, HDR, {SA3, Mr, Gt, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - claim( I, SKR, KEYMATi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* CREATE_CHILD_SA */ - recv_!5( I, R, HDR, {SA3, Mi, Gj, TSi, TSr}SKr ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, HDR, {SA3, Mr, g(t), TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - claim( R, SKR, KEYMATr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child-composed.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child-composed.spdl deleted file mode 100644 index 392c99510d70cbfd6134f552ca0a3d9f04ea0aa4..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child-composed.spdl +++ /dev/null @@ -1,165 +0,0 @@ -# 1 "ikev2-sig-child-composed.cpp" -# 1 "<command-line>" -# 1 "ikev2-sig-child-composed.cpp" -# 15 "ikev2-sig-child-composed.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-sig-child-composed.cpp" 2 -# 26 "ikev2-sig-child-composed.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E5( E, E, {SA3, Mi, g(j), TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E6( E, E, {SA3, Mi, g(j), TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E7( E, E, {SA3, Mr, g(t), TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E8( E, E, {SA3, Mr, g(t), TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - } - - -} -protocol @ora(S) { - - - - - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, h(g(r),i), h(g(t),j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, h(g(i),r), h(g(j),t), Mi, Mr) ); - } - - - - -} - - -protocol ikev2-sig-child(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - send_!3( I, R, (SPIi,SPIr), {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, (SPIi,SPIr), {SA3, Mi, g(j), TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!6( R, I, (SPIi,SPIr), {SA3, Mr, Gt, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), h(Gt,j), Mi, Mr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, R, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - recv_!5( I, R, (SPIi,SPIr), {SA3, Mi, Gj, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, (SPIi,SPIr), {SA3, Mr, g(t), TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), h(Gi,t), Mi, Mr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child.cpp deleted file mode 100644 index 62ddf6f166fb42d270e5cf78063aa845da1323fa..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Combination of signature authenticated IKEv2 and - * CREATE_CHILD_SA, includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) -#define KEYMATi KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) -#define KEYMATr KDF(Ni, Nr, Zr, h(Gi,t), Mi, Mr) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - // msg 5 - recv_!E5( E, E, {SA3, Mi, g(j), TSi, TSr}SKi ); - send_!E6( E, E, {SA3, Mi, g(j), TSi, TSr}SKr ); - - // msg 6 - recv_!E7( E, E, {SA3, Mr, g(t), TSi, TSr}SKr ); - send_!E8( E, E, {SA3, Mr, g(t), TSi, TSr}SKr ); - } -#undef Gi -#undef Gr -} -protocol @ora(S) { -#define Gi g(i) -#define Gj g(j) -#define Gr g(r) -#define Gt g(t) - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, Zr, h(Gj,t), Mi, Mr) ); - } -#undef Gi -#undef Gj -#undef Gr -#undef Gt -} - - -protocol ikev2-sig-child(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - send_!3( I, R, HDR, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* CREATE_CHILD_SA */ - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, HDR, {SA3, Mi, g(j), TSi, TSr}SKi ); - recv_!6( R, I, HDR, {SA3, Mr, Gt, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - claim( I, SKR, KEYMATi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* CREATE_CHILD_SA */ - recv_!5( I, R, HDR, {SA3, Mi, Gj, TSi, TSr}SKr ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, HDR, {SA3, Mr, g(t), TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - claim( R, SKR, KEYMATr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child.spdl deleted file mode 100644 index f9db4cfa7738103d925a7c80c79c320bc72eb0c0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child.spdl +++ /dev/null @@ -1,165 +0,0 @@ -# 1 "ikev2-sig-child.cpp" -# 1 "<command-line>" -# 1 "ikev2-sig-child.cpp" -# 15 "ikev2-sig-child.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-sig-child.cpp" 2 -# 26 "ikev2-sig-child.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E5( E, E, {SA3, Mi, g(j), TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E6( E, E, {SA3, Mi, g(j), TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E7( E, E, {SA3, Mr, g(t), TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E8( E, E, {SA3, Mr, g(t), TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - } - - -} -protocol @ora(S) { - - - - - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, h(g(r),i), h(g(t),j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, h(g(i),r), h(g(j),t), Mi, Mr) ); - } - - - - -} - - -protocol ikev2-sig-child(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - send_!3( I, R, (SPIi,SPIr), {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, (SPIi,SPIr), {SA3, Mi, g(j), TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!6( R, I, (SPIi,SPIr), {SA3, Mr, Gt, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), h(Gt,j), Mi, Mr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, R, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - recv_!5( I, R, (SPIi,SPIr), {SA3, Mi, Gj, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, (SPIi,SPIr), {SA3, Mr, g(t), TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), h(Gi,t), Mi, Mr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2-composed.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2-composed.cpp deleted file mode 100644 index 621e7f65d90b83cdecc0d196a2fab0913d06d313..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2-composed.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Combination of signature authenticated IKEv2 and - * CREATE_CHILD_SA, excludes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) -#define KEYMATi KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) -#define KEYMATr KDF(Ni, Nr, Zr, h(Gi,t), Mi, Mr) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - // msg 5 - recv_!E5( E, E, {SA3, Mi, g(j)}SKi ); - send_!E6( E, E, {SA3, Mi, g(j)}SKr ); - - // msg 6 - recv_!E7( E, E, {SA3, Mr, g(t)}SKr ); - send_!E8( E, E, {SA3, Mr, g(t)}SKr ); - } -#undef Gi -#undef Gr -} -protocol @ora(S) { -#define Gi g(i) -#define Gj g(j) -#define Gr g(r) -#define Gt g(t) - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, Zr, h(Gj,t), Mi, Mr) ); - } -#undef Gi -#undef Gj -#undef Gr -#undef Gt -} - - -protocol ikev2-sig-child2(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - send_!3( I, R, HDR, {I, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* CREATE_CHILD_SA */ - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, HDR, {SA3, Mi, g(j)}SKi ); - recv_!6( R, I, HDR, {SA3, Mr, Gt}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - claim( I, SKR, KEYMATi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, AUTHir, SA2, TSi, TSr}SKr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* CREATE_CHILD_SA */ - recv_!5( I, R, HDR, {SA3, Mi, Gj}SKr ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, HDR, {SA3, Mr, g(t)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - claim( R, SKR, KEYMATr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2-composed.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2-composed.spdl deleted file mode 100644 index 49df999d4bd0cd84ac59e9298926b7297124296f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2-composed.spdl +++ /dev/null @@ -1,165 +0,0 @@ -# 1 "ikev2-sig-child2-composed.cpp" -# 1 "<command-line>" -# 1 "ikev2-sig-child2-composed.cpp" -# 15 "ikev2-sig-child2-composed.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-sig-child2-composed.cpp" 2 -# 26 "ikev2-sig-child2-composed.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E5( E, E, {SA3, Mi, g(j)}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E6( E, E, {SA3, Mi, g(j)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E7( E, E, {SA3, Mr, g(t)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E8( E, E, {SA3, Mr, g(t)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - } - - -} -protocol @ora(S) { - - - - - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, h(g(r),i), h(g(t),j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, h(g(i),r), h(g(j),t), Mi, Mr) ); - } - - - - -} - - -protocol ikev2-sig-child2(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - send_!3( I, R, (SPIi,SPIr), {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, (SPIi,SPIr), {SA3, Mi, g(j)}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!6( R, I, (SPIi,SPIr), {SA3, Mr, Gt}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), h(Gt,j), Mi, Mr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - recv_!5( I, R, (SPIi,SPIr), {SA3, Mi, Gj}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, (SPIi,SPIr), {SA3, Mr, g(t)}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), h(Gi,t), Mi, Mr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2.cpp deleted file mode 100644 index 621e7f65d90b83cdecc0d196a2fab0913d06d313..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Combination of signature authenticated IKEv2 and - * CREATE_CHILD_SA, excludes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) -#define KEYMATi KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) -#define KEYMATr KDF(Ni, Nr, Zr, h(Gi,t), Mi, Mr) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - // msg 5 - recv_!E5( E, E, {SA3, Mi, g(j)}SKi ); - send_!E6( E, E, {SA3, Mi, g(j)}SKr ); - - // msg 6 - recv_!E7( E, E, {SA3, Mr, g(t)}SKr ); - send_!E8( E, E, {SA3, Mr, g(t)}SKr ); - } -#undef Gi -#undef Gr -} -protocol @ora(S) { -#define Gi g(i) -#define Gj g(j) -#define Gr g(r) -#define Gt g(t) - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, Zi, h(Gt,j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, Zr, h(Gj,t), Mi, Mr) ); - } -#undef Gi -#undef Gj -#undef Gr -#undef Gt -} - - -protocol ikev2-sig-child2(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - send_!3( I, R, HDR, {I, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* CREATE_CHILD_SA */ - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, HDR, {SA3, Mi, g(j)}SKi ); - recv_!6( R, I, HDR, {SA3, Mr, Gt}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - claim( I, SKR, KEYMATi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, AUTHir, SA2, TSi, TSr}SKr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* CREATE_CHILD_SA */ - recv_!5( I, R, HDR, {SA3, Mi, Gj}SKr ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, HDR, {SA3, Mr, g(t)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - claim( R, SKR, KEYMATr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2.spdl deleted file mode 100644 index aa8642fcb2a8b72781bed2aafbf1e2a4ef88e23f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig-child2.spdl +++ /dev/null @@ -1,165 +0,0 @@ -# 1 "ikev2-sig-child2.cpp" -# 1 "<command-line>" -# 1 "ikev2-sig-child2.cpp" -# 15 "ikev2-sig-child2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-sig-child2.cpp" 2 -# 26 "ikev2-sig-child2.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - - recv_!E5( E, E, {SA3, Mi, g(j)}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E6( E, E, {SA3, Mi, g(j)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E7( E, E, {SA3, Mr, g(t)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E8( E, E, {SA3, Mr, g(t)}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - } - - -} -protocol @ora(S) { - - - - - role S { - var i, j, r, t, Mi, Ni, Mr, Nr, SPIi, SPIr: Nonce; - - recv_!S1( S, S, KDF(Ni, Nr, h(g(r),i), h(g(t),j), Mi, Mr) ); - send_!S2( S, S, KDF(Ni, Nr, h(g(i),r), h(g(j),t), Mi, Mr) ); - } - - - - -} - - -protocol ikev2-sig-child2(I, R) -{ - role I { - fresh i, j, Ni, Mi, SPIi: Nonce; - var Nr, Mr, SPIr: Nonce; - var Gr, Gt: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - send_!3( I, R, (SPIi,SPIr), {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, Running, R,g(i),g(j),Gr ); - send_!5( I, R, (SPIi,SPIr), {SA3, Mi, g(j)}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!6( R, I, (SPIi,SPIr), {SA3, Mr, Gt}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), h(Gt,j), Mi, Mr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),g(j),Gr,Gt ); - - } - - role R { - fresh r, t, Nr, Mr, SPIr: Nonce; - var Ni, Mi, SPIi: Nonce; - var Gi, Gj: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - recv_!5( I, R, (SPIi,SPIr), {SA3, Mi, Gj}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,Gj,g(r),g(t) ); - send_!6( R, I, (SPIi,SPIr), {SA3, Mr, g(t)}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), h(Gi,t), Mi, Mr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,Gj,g(r) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig.cpp deleted file mode 100644 index 68e7326d3a9a47b64e4d14259ffacc0262500e1a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol Signature authenticated IKEv2 - * @reference RFC 4306 - * @variant Includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-sig(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R,g(i),Gr,Ni,Nr ); - send_!3( I, R, HDR, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),Gr,Ni,Nr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I,Gi,g(r),Ni,Nr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,g(r),Ni,Nr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig.spdl deleted file mode 100644 index baaba1ab6720760867fca5bb2d345a4547ab5cca..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig.spdl +++ /dev/null @@ -1,132 +0,0 @@ -# 1 "ikev2-sig.cpp" -# 1 "<command-line>" -# 1 "ikev2-sig.cpp" -# 15 "ikev2-sig.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-sig.cpp" 2 -# 24 "ikev2-sig.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-sig(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - claim( I, Running, R,g(i),Gr,Ni,Nr ); - send_!3( I, R, (SPIi,SPIr), {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),Gr,Ni,Nr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, R, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,g(r),Ni,Nr ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,g(r),Ni,Nr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig2.cpp deleted file mode 100644 index e2e02b71a4ae47ca381e88e9dc02647a0173aaa7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig2.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @subprotocol Signature authenticated IKEv2 - * @reference RFC 4306 - * @variant Excludes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)}sk(R) -#define AUTHrr {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)}sk(R) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-sig2(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, HDR, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R,Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, HDR, {I, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, HDR, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, HDR, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, HDR, {I, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, HDR, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig2.spdl deleted file mode 100644 index 0825976eb9adcfbb0fab40784e940c795d572a50..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sig2.spdl +++ /dev/null @@ -1,132 +0,0 @@ -# 1 "ikev2-sig2.cpp" -# 1 "<command-line>" -# 1 "ikev2-sig2.cpp" -# 15 "ikev2-sig2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 16 "ikev2-sig2.cpp" 2 -# 24 "ikev2-sig2.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-sig2(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, (SPIi,SPIr), SA1, Gr, Nr ); - - - claim( I, Running, R,Ni,g(i),Nr,Gr,TSi,TSr ); - send_!3( I, R, (SPIi,SPIr), {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,Ni,g(i),Nr,Gr,TSi,TSr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, (SPIi,SPIr), SA1, g(r), Nr ); - - - recv_!3( I, R, (SPIi,SPIr), {I, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I, Ni,Gi,Nr,g(r),TSi,TSr ); - send_!4( R, I, (SPIi,SPIr), {R, {SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)}sk(R), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I, Ni,Gi,Nr,g(r),TSi,TSr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac.cpp deleted file mode 100644 index dc7a0596fa614ced60de68f0716515b46ff534b2..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Initiator authenticates itself using digital signatures - * while responder uses message authentication codes. - * Includes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)) -#define AUTHrr MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-sigtomac(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R,g(i),Gr,Ni,Nr ); - send_!3( I, R, SPIi, SPIr, {I, R, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, SPIi, SPIr, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),Gr,Ni,Nr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, SPIi, SPIr, {I, R, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I,Gi,g(r),Ni,Nr ); - send_!4( R, I, SPIi, SPIr, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,g(r),Ni,Nr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac.spdl deleted file mode 100644 index 9d40a3aa671881fe22f6129fc8a113c0356db322..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac.spdl +++ /dev/null @@ -1,132 +0,0 @@ -# 1 "ikev2-sigtomac.cpp" -# 1 "<command-line>" -# 1 "ikev2-sigtomac.cpp" -# 16 "ikev2-sigtomac.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 17 "ikev2-sigtomac.cpp" 2 -# 25 "ikev2-sigtomac.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, MAC(k(I,R), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-sigtomac(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - - claim( I, Running, R,g(i),Gr,Ni,Nr ); - send_!3( I, R, SPIi, SPIr, {I, R, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, SPIi, SPIr, {R, MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),Gr,Ni,Nr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - - recv_!3( I, R, SPIi, SPIr, {I, R, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,g(r),Ni,Nr ); - send_!4( R, I, SPIi, SPIr, {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,g(r),Ni,Nr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac2.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac2.cpp deleted file mode 100644 index bccbab30ec606cf5e01de1091177bebcbd3e5d27..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac2.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * @protocol Internet Key Exchange Protocol (IKEv2) - * @reference RFC 4306 - * @variant Initiator authenticates itself using digital signatures - * while responder uses message authentication codes. - * Excludes optional payloads - **********************************************************************/ - -/** - * MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - */ - -#define __IKEV2__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define AUTHii {SPIi, O, SA1, g(i), Ni, Nr, prf(SKi, I)}sk(I) -#define AUTHir {SPIi, O, SA1, Gi, Ni, Nr, prf(SKr, I)}sk(I) -#define AUTHri MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(SKi, R)) -#define AUTHrr MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(SKr, R)) - - -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(E) { -#define Gi g(i) -#define Gr g(r) - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!E1( E, E, {I, AUTHii, SA2, TSi, TSr}SKi ); - send_!E2( E, E, {I, AUTHir, SA2, TSi, TSr}SKr ); - - // msg 4 - recv_!E3( E, E, {R, AUTHrr, SA2, TSi, TSr}SKr ); - send_!E4( E, E, {R, AUTHri, SA2, TSi, TSr}SKi ); - - } -#undef Gi -#undef Gr -} - - -protocol ikev2-sigtomac2(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - /* IKE_SA_INIT */ - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - /* IKE_AUTH */ - claim( I, Running, R,g(i),Gr,Ni,Nr ); - send_!3( I, R, SPIi, SPIr, {I, AUTHii, SA2, TSi, TSr}SKi ); - recv_!4( R, I, SPIi, SPIr, {R, AUTHri, SA2, TSi, TSr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),Gr,Ni,Nr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - /* IKE_SA_INIT */ - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - /* IKE_AUTH */ - recv_!3( I, R, SPIi, SPIr, {I, AUTHir, SA2, TSi, TSr}SKr ); - claim( R, Running, I,Gi,g(r),Ni,Nr ); - send_!4( R, I, SPIi, SPIr, {R, AUTHrr, SA2, TSi, TSr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,g(r),Ni,Nr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac2.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac2.spdl deleted file mode 100644 index 99ad18caf94b8ef51dad27d68845233c3e32bf83..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/ikev2-sigtomac2.spdl +++ /dev/null @@ -1,132 +0,0 @@ -# 1 "ikev2-sigtomac2.cpp" -# 1 "<command-line>" -# 1 "ikev2-sigtomac2.cpp" -# 16 "ikev2-sigtomac2.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 43 "common.h" -hashfunction MAC; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 132 "common.h" - var SPIi, SPIr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - } - - -} -# 17 "ikev2-sigtomac2.cpp" 2 -# 25 "ikev2-sigtomac2.cpp" -usertype Number, SecurityAssociation, TrafficSelector; -const O: Number; -const SA1 ,SA2, SA3: SecurityAssociation; -const TSi, TSr: TrafficSelector; - - - - - - -protocol @executability(E) { - - - role E { - var i, r, Ni, Nr, SPIi, SPIr: Nonce; - var I, R: Agent; - - - recv_!E1( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - send_!E2( E, E, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - - - recv_!E3( E, E, {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(i),r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(i),r),SPIi,SPIr) ); - send_!E4( E, E, {R, MAC(k(I,R), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(g(r),i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(g(r),i),SPIi,SPIr) ); - - } - - -} - - -protocol ikev2-sigtomac2(I, R) -{ - role I { - fresh i, Ni, SPIi: Nonce; - var Nr, SPIr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, SPIi, O, SA1, g(i), Ni ); - recv_2( R, I, SPIi, SPIr, SA1, Gr, Nr ); - - - claim( I, Running, R,g(i),Gr,Ni,Nr ); - send_!3( I, R, SPIi, SPIr, {I, {SPIi, O, SA1, g(i), Ni, Nr, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - recv_!4( R, I, SPIi, SPIr, {R, MAC(k(I,R), SPIi, SPIr, SA1, Gr, Nr, Ni, prf(KDF(Ni,Nr,h(Gr,i),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - - claim( I, SKR, KDF(Ni,Nr,h(Gr,i),SPIi,SPIr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - claim( I, Commit, R,g(i),Gr,Ni,Nr ); - - } - - role R { - fresh r, Nr, SPIr: Nonce; - var Ni, SPIi: Nonce; - var Gi: Ticket; - - - - recv_1( I, R, SPIi, O, SA1, Gi, Ni ); - send_2( R, I, SPIi, SPIr, SA1, g(r), Nr ); - - - recv_!3( I, R, SPIi, SPIr, {I, {SPIi, O, SA1, Gi, Ni, Nr, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), I)}sk(I), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - claim( R, Running, I,Gi,g(r),Ni,Nr ); - send_!4( R, I, SPIi, SPIr, {R, MAC(k(R,I), SPIi, SPIr, SA1, g(r), Nr, Ni, prf(KDF(Ni,Nr,h(Gi,r),SPIi,SPIr), R)), SA2, TSi, TSr}KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - - claim( R, SKR, KDF(Ni,Nr,h(Gi,r),SPIi,SPIr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - claim( R, Commit, I,Gi,g(r),Ni,Nr ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfki-core.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/jfki-core.cpp deleted file mode 100644 index d6c2abf2848839157b157f5be77311331971a034..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfki-core.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/** HEADDOC - * @protocol Just Fast Keying - * @reference Aiello et al., Just Fast Keying: Key Agreement In A Hostile - * Internet - * @description - * @variant Core cryptographic protocol of JFKi -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __JFK_CORE__ -#ifndef __ORACLE__ -#include "common.h" -#endif - - -protocol jfki-core(I, R) -{ - role I { - fresh i, Ni: Nonce; - var Nr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ni, I, g(i) ); - recv_2( R, I, Nr, Ni, R, Gr, {Nr, Ni, Gr, g(i), I}sk(R) ); - send_3( I, R, Nr, Ni, {Nr, Ni, Gr, g(i), R}sk(I) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ni, I, Gi ); - send_2( R, I, Nr, Ni, R, g(r), {Nr, Ni, g(r), Gi, I}sk(R) ); - recv_3( I, R, Nr, Ni, {Nr, Ni, g(r), Gi, R}sk(I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfki-core.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/jfki-core.spdl deleted file mode 100644 index 2517cbff0410ab9a91c8d82870593cdfaddaa5a8..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfki-core.spdl +++ /dev/null @@ -1,88 +0,0 @@ -# 1 "jfki-core.cpp" -# 1 "<command-line>" -# 1 "jfki-core.cpp" -# 15 "jfki-core.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 60 "common.h" -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i), Ni, Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r), Ni, Nr) ); - - } - - -} -# 16 "jfki-core.cpp" 2 - - - -protocol jfki-core(I, R) -{ - role I { - fresh i, Ni: Nonce; - var Nr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ni, I, g(i) ); - recv_2( R, I, Nr, Ni, R, Gr, {Nr, Ni, Gr, g(i), I}sk(R) ); - send_3( I, R, Nr, Ni, {Nr, Ni, Gr, g(i), R}sk(I) ); - - - claim( I, SKR, KDF(h(Gr,i), Ni, Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ni, I, Gi ); - send_2( R, I, Nr, Ni, R, g(r), {Nr, Ni, g(r), Gi, I}sk(R) ); - recv_3( I, R, Nr, Ni, {Nr, Ni, g(r), Gi, R}sk(I) ); - - - claim( R, SKR, KDF(h(Gi,r), Ni, Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfki.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/jfki.cpp deleted file mode 100644 index 5b000f9331eaae3cf887df53bac515a404e62842..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfki.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/** HEADDOC - * @protocol Just Fast Keying - * @reference Aiello et al., Just Fast Keying: Key Agreement In A Hostile - * Internet - * @description - * @variant Initiatior is identity protected -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __JFK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, SAi, SAr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!O1( O, O, {I, SAi, {H(Ni), Nr, g(i), Gr, R, SAi}sk(I)}SKi ); - send_!O2( O, O, {I, SAi, {H(Ni), Nr, g(i), Gr, R, SAi}sk(I)}SKr ); - - // msg 4 - recv_!O3( O, O, {{H(Ni), Nr, g(i), Gr, I, SAi, SAr}sk(R), SAr}SKr ); - send_!O4( O, O, {{H(Ni), Nr, g(i), Gr, I, SAi, SAr}sk(R), SAr}SKi ); - - } -#undef Gi -#undef Gr -} - - -// Abstractions: no grpinfo, no MAC(ENC(M)), no ID_R', no IPi -protocol jfki(I, R) -{ - role I { - fresh i, Ni, SAi: Nonce; - var Nr, SAr: Nonce; - var Gr, TH: Ticket; - - send_1( I, R, H(Ni), g(i) ); - recv_2( R, I, H(Ni), Nr, Gr, R, {Gr}sk(R), TH ); - send_!3( I, R, Ni, Nr, g(i), Gr, TH, {I, SAi, {H(Ni), Nr, g(i), Gr, R, SAi}sk(I)}SKi ); - recv_!4( R, I, {{H(Ni), Nr, g(i), Gr, I, SAi, SAr}sk(R), SAr}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, SAr, HKr: Nonce; - var Ni, SAi: Nonce; - var Gi, HNi: Ticket; - - recv_1( I, R, HNi, Gi ); - send_2( R, I, HNi, Nr, g(r), R, {g(r)}sk(R), H(HKr, g(r), Nr, HNi) ); - // Note: if R can receive H(HKr, g(r), Nr, H(Ni)) then HNi=H(Ni) - recv_!3( I, R, Ni, Nr, Gi, g(r), H(HKr, g(r), Nr, H(Ni)), {I, SAi, {H(Ni), Nr, Gi, g(r), R, SAi}sk(I)}SKr ); - send_!4( R, I, {{H(Ni), Nr, Gi, g(r), I, SAi, SAr}sk(R), SAr}SKr ); - - /* SECURITY CLAIMS */ - claim( R, Secret, HKr ); - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfki.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/jfki.spdl deleted file mode 100644 index d3855434638b2bc7acc8b485affea9888d3c3203..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfki.spdl +++ /dev/null @@ -1,118 +0,0 @@ -# 1 "jfki.cpp" -# 1 "<command-line>" -# 1 "jfki.cpp" -# 15 "jfki.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 66 "common.h" -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i), H(Ni), Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r), H(Ni), Nr) ); - - } - - -} -# 16 "jfki.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, SAi, SAr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {I, SAi, {H(Ni), Nr, g(i), g(r), R, SAi}sk(I)}KDF(h(g(r),i), H(Ni), Nr) ); - send_!O2( O, O, {I, SAi, {H(Ni), Nr, g(i), g(r), R, SAi}sk(I)}KDF(h(g(i),r), H(Ni), Nr) ); - - - recv_!O3( O, O, {{H(Ni), Nr, g(i), g(r), I, SAi, SAr}sk(R), SAr}KDF(h(g(i),r), H(Ni), Nr) ); - send_!O4( O, O, {{H(Ni), Nr, g(i), g(r), I, SAi, SAr}sk(R), SAr}KDF(h(g(r),i), H(Ni), Nr) ); - - } - - -} - - - -protocol jfki(I, R) -{ - role I { - fresh i, Ni, SAi: Nonce; - var Nr, SAr: Nonce; - var Gr, TH: Ticket; - - send_1( I, R, H(Ni), g(i) ); - recv_2( R, I, H(Ni), Nr, Gr, R, {Gr}sk(R), TH ); - send_!3( I, R, Ni, Nr, g(i), Gr, TH, {I, SAi, {H(Ni), Nr, g(i), Gr, R, SAi}sk(I)}KDF(h(Gr,i), H(Ni), Nr) ); - recv_!4( R, I, {{H(Ni), Nr, g(i), Gr, I, SAi, SAr}sk(R), SAr}KDF(h(Gr,i), H(Ni), Nr) ); - - - claim( I, SKR, KDF(h(Gr,i), H(Ni), Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, SAr, HKr: Nonce; - var Ni, SAi: Nonce; - var Gi, HNi: Ticket; - - recv_1( I, R, HNi, Gi ); - send_2( R, I, HNi, Nr, g(r), R, {g(r)}sk(R), H(HKr, g(r), Nr, HNi) ); - - recv_!3( I, R, Ni, Nr, Gi, g(r), H(HKr, g(r), Nr, H(Ni)), {I, SAi, {H(Ni), Nr, Gi, g(r), R, SAi}sk(I)}KDF(h(Gi,r), H(Ni), Nr) ); - send_!4( R, I, {{H(Ni), Nr, Gi, g(r), I, SAi, SAr}sk(R), SAr}KDF(h(Gi,r), H(Ni), Nr) ); - - - claim( R, Secret, HKr ); - claim( R, SKR, KDF(h(Gi,r), H(Ni), Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr-core.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/jfkr-core.cpp deleted file mode 100644 index 500a8bbec675ea6e3fc40c9b254342b1613b3564..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr-core.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/** HEADDOC - * @protocol Just Fast Keying - * @reference Aiello et al., Just Fast Keying: Key Agreement In A Hostile - * Internet - * @description - * @variant Core cryptographic protocol of JFKr -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __JFK_CORE__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!O1( O, O, H(SKr, Nr, Ni, R) ); - send_!O2( O, O, H(SKi, Nr, Ni, R) ); - - // msg 4 - recv_!O3( O, O, H(SKi, Nr, Ni, I) ); - send_!O4( O, O, H(SKr, Nr, Ni, I) ); - - } -#undef Gi -#undef Gr -} - - -// Abstractions: same key for ENC, MAC -protocol jfkr-core(I, R) -{ - role I { - fresh i, Ni: Nonce; - var Nr, Gr: Ticket; - - send_1( I, R, Ni, g(i) ); - recv_!2( R, I, Nr, Ni, R, Gr, {Nr, Ni, Gr, g(i)}sk(R), H(SKi, Nr, Ni, R) ); - send_!3( I, R, Nr, Ni, I, {Nr, Ni, Gr, g(i)}sk(I), H(SKi, Nr, Ni, I) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni, Gi: Ticket; - - recv_1( I, R, Ni, Gi ); - send_!2( R, I, Nr, Ni, R, g(r), {Nr, Ni, g(r), Gi}sk(R), H(SKr, Nr, Ni, R) ); - recv_!3( I, R, Nr, Ni, I, {Nr, Ni, g(r), Gi}sk(I), H(SKr, Nr, Ni, I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr-core.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/jfkr-core.spdl deleted file mode 100644 index adce573c412e0095b6793a4cd6de30fb4308fa3f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr-core.spdl +++ /dev/null @@ -1,112 +0,0 @@ -# 1 "jfkr-core.cpp" -# 1 "<command-line>" -# 1 "jfkr-core.cpp" -# 15 "jfkr-core.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 60 "common.h" -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i), Ni, Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r), Ni, Nr) ); - - } - - -} -# 16 "jfkr-core.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, H(KDF(h(g(i),r), Ni, Nr), Nr, Ni, R) ); - send_!O2( O, O, H(KDF(h(g(r),i), Ni, Nr), Nr, Ni, R) ); - - - recv_!O3( O, O, H(KDF(h(g(r),i), Ni, Nr), Nr, Ni, I) ); - send_!O4( O, O, H(KDF(h(g(i),r), Ni, Nr), Nr, Ni, I) ); - - } - - -} - - - -protocol jfkr-core(I, R) -{ - role I { - fresh i, Ni: Nonce; - var Nr, Gr: Ticket; - - send_1( I, R, Ni, g(i) ); - recv_!2( R, I, Nr, Ni, R, Gr, {Nr, Ni, Gr, g(i)}sk(R), H(KDF(h(Gr,i), Ni, Nr), Nr, Ni, R) ); - send_!3( I, R, Nr, Ni, I, {Nr, Ni, Gr, g(i)}sk(I), H(KDF(h(Gr,i), Ni, Nr), Nr, Ni, I) ); - - - claim( I, SKR, KDF(h(Gr,i), Ni, Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni, Gi: Ticket; - - recv_1( I, R, Ni, Gi ); - send_!2( R, I, Nr, Ni, R, g(r), {Nr, Ni, g(r), Gi}sk(R), H(KDF(h(Gi,r), Ni, Nr), Nr, Ni, R) ); - recv_!3( I, R, Nr, Ni, I, {Nr, Ni, g(r), Gi}sk(I), H(KDF(h(Gi,r), Ni, Nr), Nr, Ni, I) ); - - - claim( R, SKR, KDF(h(Gi,r), Ni, Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/jfkr.cpp deleted file mode 100644 index fbe85d312d5d36db80842e7b4e732778cf7dd901..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/** HEADDOC - * @protocol Just Fast Keying - * @reference Aiello et al., Just Fast Keying: Key Agreement In A Hostile - * Internet - * @description - * @variant Responder is identity protected -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __JFK__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, SAi, SAr: Nonce; - var I, R: Agent; - - // msg 3 - recv_!O1( O, O, {I, SAi, {H(Ni), Nr, g(i), Gr}sk(I)}SKi ); - send_!O2( O, O, {I, SAi, {H(Ni), Nr, g(i), Gr}sk(I)}SKr ); - - // msg 4 - recv_!O3( O, O, {R, SAr, {Gr, Nr, g(i), H(Ni)}sk(R)}SKr ); - send_!O4( O, O, {R, SAr, {Gr, Nr, g(i), H(Ni)}sk(R)}SKi ); - - } -#undef Gi -#undef Gr -} - - -// Abstractions: no grpinfo, no MAC(ENC(M)), no ID_R', no IPi -protocol jfkr(I, R) -{ - role I { - fresh i, Ni, SAi: Nonce; - var Nr, SAr: Nonce; - var Gr, TH: Ticket; - - send_1( I, R, H(Ni), g(i) ); - recv_2( R, I, H(Ni), Nr, Gr, TH ); - send_!3( I, R, Ni, Nr, g(i), Gr, TH, {I, SAi, {H(Ni), Nr, g(i), Gr}sk(I)}SKi ); - recv_!4( R, I, {R, SAr, {Gr, Nr, g(i), H(Ni)}sk(R)}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, SAr, HKr: Nonce; - var Ni, SAi: Nonce; - var Gi, HNi: Ticket; - - recv_1( I, R, HNi, Gi ); - send_2( R, I, HNi, Nr, g(r), H(HKr, g(r), Nr, HNi) ); - recv_!3( I, R, Ni, Nr, Gi, g(r), H(HKr, g(r), Nr, H(Ni)), {I, SAi, {H(Ni), Nr, Gi, g(r)}sk(I)}SKr ); - send_!4( R, I, {R, SAr, {g(r), Nr, Gi, H(Ni)}sk(R)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, Secret, HKr ); - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/jfkr.spdl deleted file mode 100644 index 6e5e3e22e6324fa0411884a9faee45a9841627a9..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/jfkr.spdl +++ /dev/null @@ -1,117 +0,0 @@ -# 1 "jfkr.cpp" -# 1 "<command-line>" -# 1 "jfkr.cpp" -# 15 "jfkr.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 66 "common.h" -hashfunction H; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i), H(Ni), Nr) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r), H(Ni), Nr) ); - - } - - -} -# 16 "jfkr.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, SAi, SAr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {I, SAi, {H(Ni), Nr, g(i), g(r)}sk(I)}KDF(h(g(r),i), H(Ni), Nr) ); - send_!O2( O, O, {I, SAi, {H(Ni), Nr, g(i), g(r)}sk(I)}KDF(h(g(i),r), H(Ni), Nr) ); - - - recv_!O3( O, O, {R, SAr, {g(r), Nr, g(i), H(Ni)}sk(R)}KDF(h(g(i),r), H(Ni), Nr) ); - send_!O4( O, O, {R, SAr, {g(r), Nr, g(i), H(Ni)}sk(R)}KDF(h(g(r),i), H(Ni), Nr) ); - - } - - -} - - - -protocol jfkr(I, R) -{ - role I { - fresh i, Ni, SAi: Nonce; - var Nr, SAr: Nonce; - var Gr, TH: Ticket; - - send_1( I, R, H(Ni), g(i) ); - recv_2( R, I, H(Ni), Nr, Gr, TH ); - send_!3( I, R, Ni, Nr, g(i), Gr, TH, {I, SAi, {H(Ni), Nr, g(i), Gr}sk(I)}KDF(h(Gr,i), H(Ni), Nr) ); - recv_!4( R, I, {R, SAr, {Gr, Nr, g(i), H(Ni)}sk(R)}KDF(h(Gr,i), H(Ni), Nr) ); - - - claim( I, SKR, KDF(h(Gr,i), H(Ni), Nr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, SAr, HKr: Nonce; - var Ni, SAi: Nonce; - var Gi, HNi: Ticket; - - recv_1( I, R, HNi, Gi ); - send_2( R, I, HNi, Nr, g(r), H(HKr, g(r), Nr, HNi) ); - recv_!3( I, R, Ni, Nr, Gi, g(r), H(HKr, g(r), Nr, H(Ni)), {I, SAi, {H(Ni), Nr, Gi, g(r)}sk(I)}KDF(h(Gi,r), H(Ni), Nr) ); - send_!4( R, I, {R, SAr, {g(r), Nr, Gi, H(Ni)}sk(R)}KDF(h(Gi,r), H(Ni), Nr) ); - - - claim( R, Secret, HKr ); - claim( R, SKR, KDF(h(Gi,r), H(Ni), Nr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/make-mpa.py b/Vagrant Files/shared/scyther/Protocols/IKE/make-mpa.py deleted file mode 100644 index c75984d96c89017da2fca1df4e10f9e4e5dfc900..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/make-mpa.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -import os - -def getProtocolFiles(path=".",extension=""): - allfiles = os.listdir(path) - spfl = [] - for fn in allfiles: - if fn.endswith(extension): - spfl.append(fn) - return spfl - -def scanThis(fn,f,rewritelist,cnt): - - s = "" - mapping = [] - for lhs in rewritelist: - rhs = "%s%i" % (lhs,cnt) - mapping.append((lhs,rhs)) - - fp = open(fn,"r") - for rl in fp.xreadlines(): - l = rl - if f != None: - l = f(l) - for (lhs,rhs) in mapping: - l = l.replace(lhs,rhs) - s = s + l - fp.close() - return s - -def convertEm(f=None,path=".",rewritelist=[],newdir=".",oldext="",newext=None): - fl = getProtocolFiles(path=path,extension=oldext) - cnt = 1 - for fn in fl: - ffn = os.path.join(path,fn) - print "Processing",ffn - s = scanThis(ffn,f,rewritelist,cnt) - if newext == None: - fn2 = fn - else: - fn2 = fn.replace(oldext,newext) - ffn2 = os.path.join(newdir,fn2) - fp = open(ffn2,"w") - fp.write(s) - fp.close() - print "Produced",ffn2 - cnt = cnt+1 - -def preprocess(s): - s = s.replace("@oracle","@OracleA") - s = s.replace("@ora ", "@OracleB ") - s = s.replace("@ora(", "@OracleB(") - return s - -def main(): - convertEm(f=preprocess,rewritelist=["@OracleA","@executability","@OracleB"],path=".",newdir="mpa",oldext=".spdl") - print "Done." - -if __name__ == '__main__': - main() - - diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/mpa/README.txt b/Vagrant Files/shared/scyther/Protocols/IKE/mpa/README.txt deleted file mode 100644 index 91e5266485a63f369eee8f773e8345da14f015cf..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/mpa/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -This directory is filled by the script - -`../make-mpa.py` - -It takes the `.spdl` files from the `..` directory and prepares them for -multi-protocol analysis. diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-a.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/oakley-a.cpp deleted file mode 100644 index 84db6b085796d3e12515c397d02fbc36edc1a7af..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-a.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @protocol OAKLEY - * @reference RFC 2412, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description OAKLEY is related to STS and allows for shared key - * determination via authenticated Diffie-Hellman exchanges and - * provides perfect forward secrecy for the shared key. - * @variant Aggressive mode -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __OAKLEY__ -#ifndef __ORACLE__ -#include "common.h" -#endif - - -usertype String; -const list, algo: String; - -protocol oakley-a(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, g(i), list, I, R, Ni, {I, R, Ni, g(i), list}sk(I) ); - recv_2( R, I, Cr, Ci, Gr, algo, R, I, Nr, Ni, {R, I, Nr, Ni, g(i), Gr, algo}sk(R) ); - send_3( I, R, Ci, Cr, g(i), algo, I, R, Ni, Nr, {I, R, Ni, Nr, g(i), Gr, algo}sk(I) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, Gi, list, I, R, Ni, {I, R, Ni, Gi, list}sk(I) ); - send_2( R, I, Cr, Ci, g(r), algo, R, I, Nr, Ni, {R, I, Nr, Ni, Gi, g(r), algo}sk(R) ); - recv_3( I, R, Ci, Cr, Gi, algo, I, R, Ni, Nr, {I, R, Ni, Nr, Gi, g(r), algo}sk(I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-a.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/oakley-a.spdl deleted file mode 100644 index aa04c2ed9168bdeee7331aacd873121741ae143c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-a.spdl +++ /dev/null @@ -1,91 +0,0 @@ -# 1 "oakley-a.cpp" -# 1 "<command-line>" -# 1 "oakley-a.cpp" -# 18 "oakley-a.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 141 "common.h" - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 19 "oakley-a.cpp" 2 - - - -usertype String; -const list, algo: String; - -protocol oakley-a(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, Ci, g(i), list, I, R, Ni, {I, R, Ni, g(i), list}sk(I) ); - recv_2( R, I, Cr, Ci, Gr, algo, R, I, Nr, Ni, {R, I, Nr, Ni, g(i), Gr, algo}sk(R) ); - send_3( I, R, Ci, Cr, g(i), algo, I, R, Ni, Nr, {I, R, Ni, Nr, g(i), Gr, algo}sk(I) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, Gi, list, I, R, Ni, {I, R, Ni, Gi, list}sk(I) ); - send_2( R, I, Cr, Ci, g(r), algo, R, I, Nr, Ni, {R, I, Nr, Ni, Gi, g(r), algo}sk(R) ); - recv_3( I, R, Ci, Cr, Gi, algo, I, R, Ni, Nr, {I, R, Ni, Nr, Gi, g(r), algo}sk(I) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-alt.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/oakley-alt.cpp deleted file mode 100644 index 5c4654f613b536bf0ac86c393e6fca115d207a89..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-alt.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/** HEADDOC - * @protocol OAKLEY - * @reference RFC 2412, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description OAKLEY is related to STS and allows for shared key - * determination via authenticated Diffie-Hellman exchanges and - * provides perfect forward secrecy for the shared key. - * @variant Alternative variant to prevent user identity disclosure -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __OAKLEY__ -#ifndef __ORACLE__ -#include "common.h" -#endif -#define AK prf(Ni,Nr) - - -usertype String; -const list, algo: String; - -protocol oakley-alt(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - // NOTE: pk(R) is sent in plain so that the recipient knows which decryption key to use - // In the specification, there is a distinction between the R in pk(R) and the encrypted R - send_1( I, R, Ci, g(i), list, pk(R), {I, R, Ni}pk(R) ); - recv_2( R, I, Cr, Ci, Gr, algo, {R, I, Nr}pk(I), prf(AK, R, I, Gr, g(i), algo) ); - send_3( I, R, Ci, Cr, prf(AK, I, R, g(i), Gr, algo) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, Gi, list, pk(R), {I, R, Ni}pk(R) ); - send_2( R, I, Cr, Ci, g(r), algo, {R, I, Nr}pk(I), prf(AK, R, I, g(r), Gi, algo) ); - recv_3( I, R, Ci, Cr, prf(AK, I, R, Gi, g(r), algo) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-alt.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/oakley-alt.spdl deleted file mode 100644 index f94b355da298c0b085d520e555c12a7275d28372..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-alt.spdl +++ /dev/null @@ -1,94 +0,0 @@ -# 1 "oakley-alt.cpp" -# 1 "<command-line>" -# 1 "oakley-alt.cpp" -# 18 "oakley-alt.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 141 "common.h" - var Ci, Cr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 19 "oakley-alt.cpp" 2 - - - - -usertype String; -const list, algo: String; - -protocol oakley-alt(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - - - send_1( I, R, Ci, g(i), list, pk(R), {I, R, Ni}pk(R) ); - recv_2( R, I, Cr, Ci, Gr, algo, {R, I, Nr}pk(I), prf(prf(Ni,Nr), R, I, Gr, g(i), algo) ); - send_3( I, R, Ci, Cr, prf(prf(Ni,Nr), I, R, g(i), Gr, algo) ); - - - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, Ci, Gi, list, pk(R), {I, R, Ni}pk(R) ); - send_2( R, I, Cr, Ci, g(r), algo, {R, I, Nr}pk(I), prf(prf(Ni,Nr), R, I, g(r), Gi, algo) ); - recv_3( I, R, Ci, Cr, prf(prf(Ni,Nr), I, R, Gi, g(r), algo) ); - - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-c.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/oakley-c.cpp deleted file mode 100644 index 32e6a80ecfcd5317875583e636c4aa2bdf865c1a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-c.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/** HEADDOC - * @protocol OAKLEY - * @reference RFC 2412, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description OAKLEY is related to STS and allows for shared key - * determination via authenticated Diffie-Hellman exchanges and - * provides perfect forward secrecy for the shared key. - * @variant Conservative mode with identity hiding -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __OAKLEY_CONSERVATIVE__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -#define Kpi prf(Zi) -#define Kpr prf(Zr) -#define Kir prf(Ni,Nr) - - -usertype String; -const OK, list, algo: String; - - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - // msg 5 - recv_!O1( O, O, {I, R, {Ni}pk(R)}Kpi ); - send_!O2( O, O, {I, R, {Ni}pk(R)}Kpr ); - - // msg 6 - recv_!O3( O, O, {{Nr, Ni}pk(I), R, I, prf(Kir, R, I, Gr, g(i), algo)}Kpr ); - send_!O4( O, O, {{Nr, Ni}pk(I), R, I, prf(Kir, R, I, Gr, g(i), algo)}Kpi ); - - // msg 7 - recv_!O5( O, O, {prf(Kir, I, R, g(i), Gr, algo)}Kpi ); - send_!O6( O, O, {prf(Kir, I, R, g(i), Gr, algo)}Kpr ); - - } -#undef Gi -#undef Gr -} - - -protocol oakley-c(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, OK ); - recv_2( R, I, Cr ); - send_3( I, R, Ci, Cr, g(i), list ); - recv_4( R, I, Cr, Ci, Gr, algo ); - send_!5( I, R, Ci, Cr, g(i), {I, R, {Ni}pk(R)}Kpi ); - recv_!6( R, I, Cr, Ci, {{Nr, Ni}pk(I), R, I, prf(Kir, R, I, Gr, g(i), algo)}Kpi ); - send_!7( I, R, Ci, Cr, {prf(Kir, I, R, g(i), Gr, algo)}Kpi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, Kpi ); - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, OK ); - send_2( R, I, Cr ); - recv_3( I, R, Ci, Cr, Gi, list ); - send_4( R, I, Cr, Ci, g(r), algo ); - recv_!5( I, R, Ci, Cr, Gi, {I, R, {Ni}pk(R)}Kpr ); - send_!6( R, I, Cr, Ci, {{Nr, Ni}pk(I), R, I, prf(Kir, R, I, g(r), Gi, algo)}Kpr ); - recv_!7( I, R, Ci, Cr, {prf(Kir, I, R, Gi, g(r), algo)}Kpr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, Kpr ); - - claim( R, SKR, SKr ); - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-c.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/oakley-c.spdl deleted file mode 100644 index 2585ef9d1c5435a051dd8405f49b24635e222cb5..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/oakley-c.spdl +++ /dev/null @@ -1,140 +0,0 @@ -# 1 "oakley-c.cpp" -# 1 "<command-line>" -# 1 "oakley-c.cpp" -# 18 "oakley-c.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 144 "common.h" - var Ci, Cr: Nonce; - - - - - - recv_!SWAP1( SWAP, SWAP, KDF(Ni, Nr, h(g(r),i), Ci, Cr) ); - send_!SWAP2( SWAP, SWAP, KDF(Ni, Nr, h(g(i),r), Ci, Cr) ); - - } - - -} -# 19 "oakley-c.cpp" 2 - - - - - - - -usertype String; -const OK, list, algo: String; - - - - - - - -protocol @executability(O) { - - - role O { - var i, r, Ni, Nr, Ci, Cr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {I, R, {Ni}pk(R)}prf(h(g(r),i)) ); - send_!O2( O, O, {I, R, {Ni}pk(R)}prf(h(g(i),r)) ); - - - recv_!O3( O, O, {{Nr, Ni}pk(I), R, I, prf(prf(Ni,Nr), R, I, g(r), g(i), algo)}prf(h(g(i),r)) ); - send_!O4( O, O, {{Nr, Ni}pk(I), R, I, prf(prf(Ni,Nr), R, I, g(r), g(i), algo)}prf(h(g(r),i)) ); - - - recv_!O5( O, O, {prf(prf(Ni,Nr), I, R, g(i), g(r), algo)}prf(h(g(r),i)) ); - send_!O6( O, O, {prf(prf(Ni,Nr), I, R, g(i), g(r), algo)}prf(h(g(i),r)) ); - - } - - -} - - -protocol oakley-c(I, R) -{ - role I { - fresh i, Ni, Ci: Nonce; - var Nr, Cr: Nonce; - var Gr: Ticket; - - send_1( I, R, OK ); - recv_2( R, I, Cr ); - send_3( I, R, Ci, Cr, g(i), list ); - recv_4( R, I, Cr, Ci, Gr, algo ); - send_!5( I, R, Ci, Cr, g(i), {I, R, {Ni}pk(R)}prf(h(Gr,i)) ); - recv_!6( R, I, Cr, Ci, {{Nr, Ni}pk(I), R, I, prf(prf(Ni,Nr), R, I, Gr, g(i), algo)}prf(h(Gr,i)) ); - send_!7( I, R, Ci, Cr, {prf(prf(Ni,Nr), I, R, g(i), Gr, algo)}prf(h(Gr,i)) ); - - - claim( I, SKR, prf(h(Gr,i)) ); - claim( I, SKR, KDF(Ni, Nr, h(Gr,i), Ci, Cr) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr, Cr: Nonce; - var Ni, Ci: Nonce; - var Gi: Ticket; - - recv_1( I, R, OK ); - send_2( R, I, Cr ); - recv_3( I, R, Ci, Cr, Gi, list ); - send_4( R, I, Cr, Ci, g(r), algo ); - recv_!5( I, R, Ci, Cr, Gi, {I, R, {Ni}pk(R)}prf(h(Gi,r)) ); - send_!6( R, I, Cr, Ci, {{Nr, Ni}pk(I), R, I, prf(prf(Ni,Nr), R, I, g(r), Gi, algo)}prf(h(Gi,r)) ); - recv_!7( I, R, Ci, Cr, {prf(prf(Ni,Nr), I, R, Gi, g(r), algo)}prf(h(Gi,r)) ); - - - claim( R, SKR, prf(h(Gi,r)) ); - - claim( R, SKR, KDF(Ni, Nr, h(Gi,r), Ci, Cr) ); - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/pp.sh b/Vagrant Files/shared/scyther/Protocols/IKE/pp.sh deleted file mode 100644 index 1ee7b6eae1437f05197b192106b1b3a992f11e89..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/pp.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -FILES="$*" -EXT="pp" -#OUT=. -OUT=pp-results - -if [ -n "$FILES" ]; then - for file in $FILES; - do - if [ "$file" = "*.$EXT.*" ]; then - echo "skipping $file" - else - echo "preprocessing $file" - cpp $file | sed -e '/^(\#.*)*$/d' > $OUT/${file%%.*}.$EXT.spdl - fi - done -else - printf "Usage: %s: file...\n" $(basename $0) >&2 - exit 1 -fi diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/scanner.py b/Vagrant Files/shared/scyther/Protocols/IKE/scanner.py deleted file mode 100644 index bc529ac01ce8fea85901e48330f83158805df45a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/scanner.py +++ /dev/null @@ -1,800 +0,0 @@ -#!/usr/bin/env python - -import sys - -ALLPROTS = set() -ALLCLAIMS = set() # prot x role x claim -PREFIX = None # Required prefix -FFUNC = (lambda p: True) # Filter function - -def reset(): - - global ALLPROTS - global ALLCLAIMS - global PREFIX - global FFUNC - - ALLPROTS = set() - ALLCLAIMS = set() - PREFIX = None - FFUNC = (lambda p: True) - -def skipLine(l): - if len(l) == 0: - return True - - skippable = ["%","\\begin","\\end","Protocol"] - for skstr in skippable: - if l.startswith(skstr): - return True - - return False - -def stripRowEnd(l): - # Assume ends with \\, split by dtl - endstr = "\\\\" - if not l.endswith(endstr): - print "Error: some line does not end with \\\\" - print ">>%s<<" % (l) - sys.exit(-1) - - return l[:-len(endstr)] - -def splitStrip(l,sp): - - dtl = l.split(sp) - for i in range(0,len(dtl)): - dtl[i] = dtl[i].strip() - return dtl - -def roleClaim(dtl): - rcdt = dtl.split() - assert(rcdt[0].endswith(":")) - role = rcdt[0][:-1] - claim = rcdt[1] - return (role,claim[:20]) - -def scanAttackFile(fn): - - global ALLPROTS - - fp = open("gen-%s-mpaattacks.tex" % (fn),"r") - attackmap = {} - prot = None - role = None - claim = None - for rawline in fp.xreadlines(): - - l = rawline.strip() - - if skipLine(l): - continue - - l = stripRowEnd(l) - - dtl = splitStrip(l,"&") - - # New protocol - if len(dtl[0]) > 0: - prot = dtl[0] - - # New role - if len(dtl[1]) > 0: - (role,claim) = roleClaim(dtl[1]) - - # Claims list - # Assume starts with '[' and ends with ']' - assert(dtl[2].startswith("[")) - assert(dtl[2].endswith("]")) - attl = ((dtl[2])[1:-1]).split(",") - for i in range(0,len(attl)): - x = attl[i].strip() - assert(x.startswith("'")) - assert(x.endswith("'")) - attl[i] = x[1:-1] - - ak = (prot,role,claim) - if ak not in attackmap.keys(): - attackmap[ak] = set() - attackmap[ak].add(tuple(attl)) - - # Add to allprots set - ALLPROTS.add(prot) - for p in attl: - ALLPROTS.add(prot) - - fp.close() - - return attackmap - - -def shorten(prot): - """ - Shorten protocol name - """ - cutting = ["isoiec-","9798-"] - for ct in cutting: - if prot.startswith(ct): - prot = prot[len(ct):] - return prot.replace("-udkey","-ud") - - -def prettyclaim(cl): - """ - Rewrite if needed - """ - return cl.replace("Commit","Agreement") - - -def mpaTable(attackmap): - """ - construct table for MPA attacks - """ - counter = 1 - s = "" - - s += "\\begin{longtable}{|l|lll|l|}\n" - s += "\\hline\n" - for kk in sorted(ALLCLAIMS): - if kk not in attackmap.keys(): - continue - (prot,role,claim) = kk - - ats = str(attackmap[kk]) - sl = "%i & %s & %s & %s & %s \\\\ \n" % (counter,prot,role,claim,ats) - - s += sl - counter = counter + 1 - - s += "\\hline\n" - s += "\\end{longtable}\n" - - return s - - -def rotated(headl): - """ - Add rotated headers - """ - for i in range(0,len(headl)): - headl[i] = "\\begin{sideways} %s \\end{sideways}\n" % (headl[i]) - return " & ".join(headl) - - -def baseprot(prot): - return shorten(prot)[:5] - - -def mpaTable2(attackmap,tabtype="tabular",options=""): - """ - construct table for MPA attacks - - Second attempt - """ - - # To find the number of columns, we first need to find all protocols involved in two-protocol attacks - involved = set() - for kk in attackmap.keys(): - for atl in attackmap[kk]: - # convert tuple back to list - att = list(atl) - if len(att) == 1: - # This attack involves one *additional* protocol, so is a two-protocol attack - involved.add(att[0]) - colheads = sorted(involved) - attcols = "" - last = None - for hd in colheads: - prm = baseprot(hd) - if last == prm: - attcols += "@{\hspace{2mm}}c" - else: - last = prm - attcols += "|c" - - - #attcols = "c" * len(involved) - - counter = 1 - s = "" - - #s += "\\clearpage \n" - - s += "\\begin{%s}%s{|l|ll|%s|}\n" % (tabtype,options,attcols) - s += "\\hline\n" - s += rotated(["No","Prot","Claim"]) - for hd in colheads: - s += "& \\begin{sideways}%s\\end{sideways} " % (shorten(hd)) - s += "\\\\ \n" - - s += "\\hline\n" - last = None - for kk in sorted(ALLCLAIMS): - if kk not in attackmap.keys(): - continue - (prot,role,claim) = kk - - prm = baseprot(prot) - if last != prm: - last = prm - s += "\\hline\n" - - sl = "" - sl += "%i & %s & %s %s " % (counter,shorten(prot),role,claim) - for ch in colheads: - se = tuple([ch]) - if se in attackmap[kk]: - sl += "& $\\bullet$ " - else: - sl += "& $\\circ$ " - - sl += "\\\\ \n" - - s += sl - counter = counter + 1 - - s += "\\hline\n" - s += "\\end{%s}\n" % (tabtype) - - return s - - -def mpaTable3(attackmaps,tabtype="tabular",options=""): - """ - construct table for MPA attacks - - attmaps = sequence of (attackmap, symbol) - - Symbol of the first matching is displayed - - Second attempt - """ - - global FFUNC - # To find the number of columns, we first need to find all protocols involved in two-protocol attacks - # Also populate "allkeys" - involved = set() - allkeys = set() - for (attackmap,symbs) in attackmaps: - for kk in attackmap.keys(): - allkeys.add(kk) - for atl in attackmap[kk]: - # convert tuple back to list - att = list(atl) - if len(att) == 1: - # This attack involves one *additional* protocol, so is a two-protocol attack - if FFUNC: - if not FFUNC(att[0]): - continue - - involved.add(att[0]) - - colheads = sorted(involved) - attcols = "" - last = None - for hd in colheads: - prm = baseprot(hd) - if last == prm: - attcols += "@{\hspace{2mm}}c" - else: - last = prm - attcols += "|c" - - - #attcols = "c" * len(involved) - - counter = 1 - s = "" - - #s += "\\clearpage \n" - - s += "\\begin{%s}%s{|l|ll|%s|}\n" % (tabtype,options,attcols) - s += "\\hline\n" - s += rotated(["No","Prot","Claim"]) - for hd in colheads: - s += "& \\begin{sideways}%s\\end{sideways} " % (shorten(hd)) - s += "\\\\ \n" - - s += "\\hline\n" - last = None - for kk in sorted(ALLCLAIMS): - if kk not in attackmap.keys(): - continue - (prot,role,claim) = kk - - prm = baseprot(prot) - if last != prm: - last = prm - s += "\\hline\n" - - sl = "" - sl += "%i & %s & %s %s " % (counter,shorten(prot),role,prettyclaim(claim)) - for ch in colheads: - se = tuple([ch]) - sl += "& " - for (attackmap,symb) in attackmaps: - if kk in attackmap.keys(): - if se in attackmap[kk]: - sl += symb - break - - sl += "\\\\ \n" - - s += sl - counter = counter + 1 - - s += "\\hline\n" - s += "\\end{%s}\n" % (tabtype) - - return s - - -def scanClaimList(fn): - """ - Simply gather claims - """ - - global ALLPROTS - global ALLCLAIMS - global FFUNC - - fp = open("gen-%s-claims.txt" % (fn),"r") - - claimmap = {} - for rawline in fp.xreadlines(): - - l = rawline.strip() - - if skipLine(l): - continue - - dtl = splitStrip(l,"; ") - - filename = dtl[0] - prot = dtl[1] - if FFUNC: - if not FFUNC(prot): - continue - - label = dtl[2] - (role,claim) = roleClaim(dtl[3]) - - ALLCLAIMS.add((prot,role,claim)) - ALLPROTS.add(prot) - - fp.close() - - return claimmap - -def scanClaimFile(fn): - """ - Construct claimmap - - prot -> roles -> claims - """ - - global ALLPROTS - global ALLCLAIMS - global FFUNC - - fp = open("gen-%s-correctclaims.tex" % (fn),"r") - - claimmap = {} - for rawline in fp.xreadlines(): - - l = rawline.strip() - - if skipLine(l): - continue - - l = stripRowEnd(l) - - dtl = splitStrip(l,"&") - - prot = dtl[0] - if FFUNC: - if not FFUNC(prot): - continue - - if prot not in claimmap.keys(): - claimmap[prot] = {} - - cll = splitStrip(dtl[1],";") - - for dt in cll: - (role,claim) = roleClaim(dt) - - if role not in claimmap[prot].keys(): - claimmap[prot][role] = set() - - claimmap[prot][role].add(claim) - - ALLCLAIMS.add((prot,role,claim)) - - ALLPROTS.add(prot) - - fp.close() - - return claimmap - -def getRoleClaims(rcmap): - - rc = set() - for role in rcmap.keys(): - for claim in rcmap[role]: - rc.add((role,claim)) - - return rc - -def typeScanMatrix(cml,onlyChanged = False): - - global ALLPROTS - - """ - Scan for the influence of typing. - - Input: - - [(txt1,cm1),(txt2,cm2),...] - - """ - s = "" - - s += "\\begin{longtable}{|l|lll|%s|}\n" % ("c" * len(cml)) - s += "\\hline\n" - - s += "No & Prot & Role & Claim " - for (txt,cm) in cml: - s += "& %s " % (txt) - s += "\\\\\n" - s += "\\hline\n" - - goodverdict = "$\\circ$" - badverdict = "$\\bullet$" - - counter = 1 - for (prot,role,claim) in sorted(ALLCLAIMS): - # Header - sl = "%i & %s & %s & %s " % (counter,prot,role,claim) - alltrue = True - for (txt,cm) in cml: - verdict = badverdict - if prot in cm.keys(): - if role in cm[prot].keys(): - if claim in cm[prot][role]: - verdict = goodverdict - if verdict == badverdict: - alltrue = False - - sl += "& %s " % (verdict) - sl += "\\\\\n" - - if alltrue == True: - if onlyChanged == True: - continue - - s += sl - counter = counter + 1 - - s += "\\hline\n" - s += "\\end{longtable}\n" - return s - -def typeScanMatrix2(cml,onlyChanged = False,additive = False): - - global ALLPROTS - - """ - Scan for the influence of typing. - - Input: - - [(txt1,cm1),(txt2,cm2),...] - - """ - s = "" - - s += "\\begin{longtable}{|l|lll||c|}\n" - s += "\\hline\n" - - s += "No & Prot & Claim & Attacks" - s += "\\\\\n" - s += "\\hline\n" - s += "\\hline\n" - - goodverdict = "$\\circ$" - badverdict = "$\\bullet$" - - last = None - counter = 1 - for (prot,role,claim) in sorted(ALLCLAIMS): - if baseprot(prot) != last: - last = baseprot(prot) - s += "\\hline\n" - - # Header - sl = "%i & %s & %s %s " % (counter,prot,role,prettyclaim(claim)) - alltrue = True - res = "" - for (txt,cm) in cml: - verdict = badverdict - if prot in cm.keys(): - if role in cm[prot].keys(): - if claim in cm[prot][role]: - verdict = goodverdict - if verdict == badverdict: - alltrue = False - if additive: - res += txt - else: - res = txt - - sl += "& %s " % (res) - sl += "\\\\\n" - - if alltrue == True: - if onlyChanged == True: - continue - - s += sl - counter = counter + 1 - - s += "\\hline\n" - s += "\\end{longtable}\n" - return s - -def typeScanMatrix3(hd1,hd2,cml,f,onlyChanged = False,tabletype="longtable"): - - global ALLPROTS - - """ - Scan for the influence of typing. - - Input: - - f is given as input a sequence of Bool (attack = False) of length len(cml), should return string. - - """ - s = "" - - s += "\\begin{%s}{|l|ll||%s|}\n" % (tabletype,hd1) - s += "\\hline\n" - - s += rotated(["No","Protocol","Claim"]) + " & " + rotated(hd2) - s += "\\\\\n" - s += "\\hline\n" - s += "\\hline\n" - - goodverdict = "$\\circ$" - badverdict = "$\\bullet$" - - last = None - counter = 1 - for (prot,role,claim) in sorted(ALLCLAIMS): - if baseprot(prot) != last: - last = baseprot(prot) - s += "\\hline\n" - - # Header - sl = "%i & %s & %s %s " % (counter,prot,role,prettyclaim(claim)) - alltrue = True - res = "" - resl = [] - for cm in cml: - verdict = badverdict - if prot in cm.keys(): - if role in cm[prot].keys(): - if claim in cm[prot][role]: - verdict = goodverdict - if verdict == badverdict: - alltrue = False - resl.append(False) - else: - resl.append(True) - - sl += "& %s " % (f(resl)) - sl += "\\\\\n" - - if alltrue == True: - if onlyChanged == True: - continue - - s += sl - counter = counter + 1 - - s += "\\hline\n" - s += "\\end{%s}\n" % (tabletype) - return s - -def docWrapper(s,title=None,author=None): - - pref = "" - pref += "\\documentclass{article}\n" - pref += "\\usepackage{a4}\n" - pref += "\\usepackage{geometry}\n" - pref += "\\usepackage{longtable}\n" - pref += "\\usepackage{rotating}\n" - pref += "\\begin{document}\n" - if title or author: - if title: - pref += "\\title{%s}\n" % (title) - if author: - pref += "\\author{%s}\n" % (author) - pref += "\\maketitle\n" - post = "" - post += "\\end{document}\n" - - return pref + s + post - -def secWrapper(s,title,level=0): - """ - level : - - 0 section - 1 subsection - 2 subsub... - """ - pref = "\\" + "sub" * level + "section{" + title + "}\n\n" - post = "\n" - return pref + s + post - - -def sizeWrapper(s, width="!", height="!"): - - if (width != "!") or (height != "!"): - s = "\\resizebox{%s}{%s}{ \n%s}\n" % (width,height,s) - return s - - -def fileWrite(fn,s): - - fp = open("%s.tex" % (fn), "w") - fp.write(s) - fp.close() - - -def docWrite(fn,tex,author=None,title=None): - - fileWrite(fn, docWrapper(tex,author=author,title=title)) - - -def docMake(fn,tex,author=None,title=None): - - import commands - - docWrite(fn,tex,author,title) - cmd = "pdflatex %s" % (fn) - commands.getoutput(cmd) - -def f1(resl): - txtl = [] - for t in resl: - if t == True: - txtl.append(" ") - else: - txtl.append("$\\bullet$") - return " & ".join(txtl) - -def pb(tl,width): - nl = [] - for t in tl: - nl.append("\\parbox{%s}{%s}" % (width,t)) - return nl - -def makeReport(fn,includefiles=False): - scanClaimList(fn + "-aa-t") - - cISOaat = scanClaimFile(fn + "-aa-t") - cISOaab = scanClaimFile(fn + "-aa-b") - cISOaau = scanClaimFile(fn + "-aa-u") - cISOiut = scanClaimFile(fn + "-iu-t") - cISOiub = scanClaimFile(fn + "-iu-b") - cISOiuu = scanClaimFile(fn + "-iu-u") - cISOext = scanClaimFile(fn + "-ex-t") - cISOexb = scanClaimFile(fn + "-ex-b") - cISOexu = scanClaimFile(fn + "-ex-u") - - tex = "" - #tex += secWrapper(typeScanMatrix([("typed",cISOaat),("basic",cISOaab),("untyped",cISOaau)],onlyChanged = False),title="Normal mode (Alice-Alice communication allowed)") - #tex += secWrapper(typeScanMatrix([("typed",cISOiut),("basic",cISOiub),("untyped",cISOiuu)],onlyChanged = True),title="Disallow Alice-Alice initiators") - #tex += secWrapper(typeScanMatrix([("typed",cISOext),("basic",cISOexb),("untyped",cISOexu)],onlyChanged = True),title="Disallow Alice-Alice communications") - - orders = [cISOaab, - cISOaat, - cISOiub, - cISOiut] - - sectex = typeScanMatrix3("c|c|c|c",pb(["No type checks\\\\Alice-talks-to-Alice initators","Type checks\\\\Alice-talks-to-Alice initators","No type checks\\\\No Alice-talks-to-Alice initators","Type checks\\\\No Alice-talks-to-Alice initators"],"49mm"), orders,f1,onlyChanged = True) - - mpatex = sizeWrapper(mpaTable3([ - (scanAttackFile(fn + "-ex-t"),"$\\bullet$"), - (scanAttackFile(fn + "-aa-b"),"$\\circ$") - ]),width="\\textwidth") - - if includefiles == True: - fileWrite("../gen-att-" + fn,sectex) - fileWrite("../gen-mpa-" + fn,mpatex) - - tex += secWrapper(sectex,title="Attacks found") - tex += secWrapper(mpatex,title="MPA attacks") - docMake(fn,tex,author="Cas Cremers",title="test report %s" % (fn)) - - -def filterPrefix(prot): - """ - Returns true iff the protocol name is okay to be considered - """ - if PREFIX: - if not prot.startswith(PREFIX): - return False - return True - -def filterPrefixBD(prot): - """ - Returns true iff the protocol name is okay to be considered - """ - if PREFIX: - if not prot.startswith(PREFIX): - return False - if prot.endswith("-ud"): - return False - if prot.endswith("-udkey"): - return False - return True - - -def filterCombo(prot): - """ - Returns true iff the protocol name is okay to be considered - """ - if prot.find("-sig-child") >= 0: - return False - - return True - - -def filterISOsymmBD(prot): - """ - Returns true iff the protocol name is okay to be considered - """ - if prot.endswith("-ud"): - return False - if prot.endswith("-udkey"): - return False - - if prot.startswith("isoiec-9798-2"): - return True - if prot.startswith("isoiec-9798-4"): - return True - - return False - - - -if __name__ == "__main__": - - #reset() - #PREFIX = "isoiec-9798-2" - #makeReport(PREFIX) - - includefiles = True - - reset() - FFUNC = filterCombo - PREFIX = "ike1" - makeReport(PREFIX,includefiles=includefiles) - - reset() - FFUNC = filterCombo - PREFIX = "ike2" - makeReport(PREFIX,includefiles=includefiles) - - reset() - FFUNC = filterCombo - PREFIX = "ike0" - makeReport(PREFIX,includefiles=includefiles) - - - - - diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-basic.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/skeme-basic.cpp deleted file mode 100644 index d9f58abac9bd56efe3cd9ff646b292c32c228fbd..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-basic.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/** HEADDOC - * @protocol SKEME - * @reference Krawczyk, H., SKEME: A Versatile Secure Key Exchange Mechanism - * for Internet, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description SKEME is a set of protocols suitable for negotiation of - * services in a general networked environment. The main - * characteristics are forward secrecy, privacy and anonymity, - * and DoS protection. - * @variant Basic mode -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther - * Note: May use the same oracles as sts -**/ -#define __SKEME__ -#ifndef __ORACLE__ -#include "common.h" -#endif -#define Kir prf(Ni,Nr) - - -protocol skeme-basic(I, R) -{ - role I { - fresh i, Ni: Nonce; - var Nr: Nonce; - var Gr: Ticket; - - send_1( I, R, {I, Ni}pk(R), g(i) ); - recv_2( R, I, {Nr}pk(I), Gr, prf(Kir, g(i), Gr, R, I) ); - send_3( I, R, prf(Kir, Gr, g(i), I, R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni: Nonce; - var Gi: Ticket; - - recv_1( I, R, {I, Ni}pk(R), Gi ); - send_2( R, I, {Nr}pk(I), g(r), prf(Kir, Gi, g(r), R, I) ); - recv_3( I, R, prf(Kir, g(r), Gi, I, R) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-basic.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/skeme-basic.spdl deleted file mode 100644 index 8c53debe3080c80a8a0afccd60484535f60a0b5e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-basic.spdl +++ /dev/null @@ -1,87 +0,0 @@ -# 1 "skeme-basic.cpp" -# 1 "<command-line>" -# 1 "skeme-basic.cpp" -# 21 "skeme-basic.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i)) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r)) ); - - } - - -} -# 22 "skeme-basic.cpp" 2 - - - - -protocol skeme-basic(I, R) -{ - role I { - fresh i, Ni: Nonce; - var Nr: Nonce; - var Gr: Ticket; - - send_1( I, R, {I, Ni}pk(R), g(i) ); - recv_2( R, I, {Nr}pk(I), Gr, prf(prf(Ni,Nr), g(i), Gr, R, I) ); - send_3( I, R, prf(prf(Ni,Nr), Gr, g(i), I, R) ); - - - claim( I, SKR, KDF(h(Gr,i)) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r, Nr: Nonce; - var Ni: Nonce; - var Gi: Ticket; - - recv_1( I, R, {I, Ni}pk(R), Gi ); - send_2( R, I, {Nr}pk(I), g(r), prf(prf(Ni,Nr), Gi, g(r), R, I) ); - recv_3( I, R, prf(prf(Ni,Nr), g(r), Gi, I, R) ); - - - claim( R, SKR, KDF(h(Gi,r)) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-psk.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/skeme-psk.cpp deleted file mode 100644 index 355edc2a0a1ee77831c3494e1cd43aaa35c4a825..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-psk.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/** HEADDOC - * @protocol SKEME - * @reference Krawczyk, H., SKEME: A Versatile Secure Key Exchange Mechanism - * for Internet, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description SKEME is a set of protocols suitable for negotiation of - * services in a general networked environment. The main - * characteristics are forward secrecy, privacy and anonymity, - * and DoS protection. - * @variant Basic mode with pre-shared keys and correct application of DH -**/ - - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __SKEME__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling k(I,R) = k(R,I). - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, prf(k(R,I), Gi, g(r), R, I) ); - send_!O2( O, O, prf(k(I,R), Gi, g(r), R, I) ); - - // msg 3 - recv_!O3( O, O, prf(k(I,R), Gr, g(i), I, R) ); - send_!O4( O, O, prf(k(R,I), Gr, g(i), I, R) ); - - } -#undef Gi -#undef Gr -} - - -protocol skeme-psk(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_!2( R, I, Gr, prf(k(I,R), g(i), Gr, R, I) ); - send_!3( I, R, prf(k(I,R), Gr, g(i), I, R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_!2( R, I, g(r), prf(k(R,I), Gi, g(r), R, I) ); - recv_!3( I, R, prf(k(R,I), g(r), Gi, I, R) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-psk.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/skeme-psk.spdl deleted file mode 100644 index e3e8796cdff93ed5d9df1a5299618ee9d4cd4bee..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-psk.spdl +++ /dev/null @@ -1,109 +0,0 @@ -# 1 "skeme-psk.cpp" -# 1 "<command-line>" -# 1 "skeme-psk.cpp" -# 20 "skeme-psk.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i)) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r)) ); - - } - - -} -# 21 "skeme-psk.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var i, r: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(k(R,I), g(i), g(r), R, I) ); - send_!O2( O, O, prf(k(I,R), g(i), g(r), R, I) ); - - - recv_!O3( O, O, prf(k(I,R), g(r), g(i), I, R) ); - send_!O4( O, O, prf(k(R,I), g(r), g(i), I, R) ); - - } - - -} - - -protocol skeme-psk(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_!2( R, I, Gr, prf(k(I,R), g(i), Gr, R, I) ); - send_!3( I, R, prf(k(I,R), Gr, g(i), I, R) ); - - - claim( I, SKR, KDF(h(Gr,i)) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_!2( R, I, g(r), prf(k(R,I), Gi, g(r), R, I) ); - recv_!3( I, R, prf(k(R,I), g(r), Gi, I, R) ); - - - claim( R, SKR, KDF(h(Gi,r)) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-rekey.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/skeme-rekey.cpp deleted file mode 100644 index a1915a263d78bb76b9ee59e9b94b882f069d0104..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-rekey.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/** HEADDOC - * @protocol SKEME - * @reference Krawczyk, H., SKEME: A Versatile Secure Key Exchange Mechanism - * for Internet, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description SKEME is a set of protocols suitable for negotiation of - * services in a general networked environment. The main - * characteristics are forward secrecy, privacy and anonymity, - * and DoS protection. - * @variant Fast rekeying protocol -**/ - -/** MACRO DEFINITIONS - * Needs preprocessing by cpp before fed to scyther -**/ -#define __SKEME_REKEY__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling k(I,R) = k(R,I). - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var Ni, Nr: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, prf(k(R,I), Ni, Nr, R, I) ); - send_!O2( O, O, prf(k(I,R), Ni, Nr, R, I) ); - - // msg 3 - recv_!O3( O, O, prf(k(I,R), Nr, Ni, I, R) ); - send_!O4( O, O, prf(k(R,I), Nr, Ni, I, R) ); - - } -#undef Gi -#undef Gr -} - -protocol skeme-rekey(I, R) -{ - role I { - fresh Ni: Nonce; - var Nr: Nonce; - - send_1( I, R, Ni ); - recv_!2( R, I, Nr, prf(k(I,R), Ni, Nr, R, I) ); - send_!3( I, R, prf(k(I,R), Nr, Ni, I, R) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh Nr: Nonce; - var Ni: Nonce; - - recv_1( I, R, Ni ); - send_!2( R, I, Nr, prf(k(I,R), Ni, Nr, R, I) ); - recv_!3( I, R, prf(k(I,R), Nr, Ni, I, R) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-rekey.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/skeme-rekey.spdl deleted file mode 100644 index acd0c509c4f46026ed5ae0199bef7bdccfa03bb4..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/skeme-rekey.spdl +++ /dev/null @@ -1,111 +0,0 @@ -# 1 "skeme-rekey.cpp" -# 1 "<command-line>" -# 1 "skeme-rekey.cpp" -# 19 "skeme-rekey.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 97 "common.h" -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 147 "common.h" - var I, R: Agent; - - - recv_!SWAP1( SWAP, SWAP, KDF(k(I,R),prf(k(I,R), Ni, Nr, R, I)) ); - send_!SWAP2( SWAP, SWAP, KDF(k(R,I),prf(k(R,I), Ni, Nr, R, I)) ); - - } - - -} -# 20 "skeme-rekey.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var Ni, Nr: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, prf(k(R,I), Ni, Nr, R, I) ); - send_!O2( O, O, prf(k(I,R), Ni, Nr, R, I) ); - - - recv_!O3( O, O, prf(k(I,R), Nr, Ni, I, R) ); - send_!O4( O, O, prf(k(R,I), Nr, Ni, I, R) ); - - } - - -} - -protocol skeme-rekey(I, R) -{ - role I { - fresh Ni: Nonce; - var Nr: Nonce; - - send_1( I, R, Ni ); - recv_!2( R, I, Nr, prf(k(I,R), Ni, Nr, R, I) ); - send_!3( I, R, prf(k(I,R), Nr, Ni, I, R) ); - - - claim( I, SKR, KDF(k(I,R),prf(k(I,R), Ni, Nr, R, I)) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh Nr: Nonce; - var Ni: Nonce; - - recv_1( I, R, Ni ); - send_!2( R, I, Nr, prf(k(I,R), Ni, Nr, R, I) ); - recv_!3( I, R, prf(k(I,R), Nr, Ni, I, R) ); - - - claim( R, SKR, KDF(k(R,I),prf(k(R,I), Ni, Nr, R, I)) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/sts-mac.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/sts-mac.cpp deleted file mode 100644 index 9faaf4f7959c1692fca248d8db8a180eb348647f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/sts-mac.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/** HEADDOC - * @protocol Station-to-Station Protocol (STS) - * @reference Diffie W., van Oorschot P. C., and Wiener M. J., - * Authentication and authenticated key exchange, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description STS adds a diGital signaure to the exchanged messages to - * provide authentication for the Diffie-Hellman protocol. In - * addition, the shared secret is used to provide further - * assurances. - * @variant Variant using MACs -**/ - -#define __STS__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r: Nonce; - - // msg 2 - recv_!O1( O, O, MAC(Zr, g(r), Gi) ); - send_!O2( O, O, MAC(Zi, g(r), Gi) ); - - // msg 3 - recv_!O3( O, O, MAC(Zi, Gi, g(r)) ); - send_!O4( O, O, MAC(Zr, Gi, g(r)) ); - - } -#undef Gi -#undef Gr -} - -// It is not specified how the session key is derived from the ephemeral DH -// secret Z; we use KDF(Z). -protocol sts-mac(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_!2( R, I, Gr, {Gr, g(i)}sk(R), MAC(Zi, Gr, g(i)) ); - send_!3( I, R, {g(i), Gr}sk(I), MAC(Zi, g(i), Gr) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_!2( R, I, Gi, {g(r), Gi}sk(R), MAC(Zr, g(r), Gi) ); - recv_!3( I, R, {Gi, g(r)}sk(I), MAC(Zr, Gi, g(r)) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/sts-mac.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/sts-mac.spdl deleted file mode 100644 index 09c583b7bd3fa51dfb2a73564ea95416dc2b70ac..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/sts-mac.spdl +++ /dev/null @@ -1,112 +0,0 @@ -# 1 "sts-mac.cpp" -# 1 "<command-line>" -# 1 "sts-mac.cpp" -# 16 "sts-mac.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 94 "common.h" -hashfunction MAC; - - -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i)) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r)) ); - - } - - -} -# 17 "sts-mac.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var i, r: Nonce; - - - recv_!O1( O, O, MAC(h(g(i),r), g(r), g(i)) ); - send_!O2( O, O, MAC(h(g(r),i), g(r), g(i)) ); - - - recv_!O3( O, O, MAC(h(g(r),i), g(i), g(r)) ); - send_!O4( O, O, MAC(h(g(i),r), g(i), g(r)) ); - - } - - -} - - - -protocol sts-mac(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_!2( R, I, Gr, {Gr, g(i)}sk(R), MAC(h(Gr,i), Gr, g(i)) ); - send_!3( I, R, {g(i), Gr}sk(I), MAC(h(Gr,i), g(i), Gr) ); - - - claim( I, SKR, KDF(h(Gr,i)) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_!2( R, I, Gi, {g(r), Gi}sk(R), MAC(h(Gi,r), g(r), Gi) ); - recv_!3( I, R, {Gi, g(r)}sk(I), MAC(h(Gi,r), Gi, g(r)) ); - - - claim( R, SKR, KDF(h(Gi,r)) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/sts-main.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/sts-main.cpp deleted file mode 100644 index b95d30660c5dd6ea65619e864d559cf615d6dfcd..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/sts-main.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/** HEADDOC - * @protocol Station-to-Station Protocol (STS) - * @reference Diffie W., van Oorschot P. C., and Wiener M. J., - * Authentication and authenticated key exchange, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description STS adds a digital signaure to the exchanged messages to - * provide authentication for the Diffie-Hellman protocol. In - * addition, the shared secret is used to provide further - * assurances. -**/ - -#define __STS__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -/** - * This role serves as an "oracle" to ensure the executability of the - * protocol by taking care of the problems that arise from our way of - * modelling Diffie-Hellman keys. - */ -protocol @executability(O) { -#define Gi g(i) -#define Gr g(r) - role O { - var i, r: Nonce; - var I, R: Agent; - - // msg 2 - recv_!O1( O, O, {{g(r), Gi}sk(R)}SKr ); - send_!O2( O, O, {{g(r), Gi}sk(R)}SKi ); - - // msg 3 - recv_!O3( O, O, {{g(i), Gr}sk(I)}SKi ); - send_!O4( O, O, {{g(i), Gr}sk(I)}SKr ); - - } -#undef Gi -#undef Gr -} - - -// It is not specified how the session key is derived from the ephemeral DH -// secret Z; we use KDF(Z). -protocol sts-main(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_!2( R, I, Gr, {{Gr, g(i)}sk(R)}SKi ); - send_!3( I, R, {{g(i), Gr}sk(I)}SKi ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_!2( R, I, g(r), {{g(r), Gi}sk(R)}SKr ); - recv_!3( I, R, {{Gi, g(r)}sk(I)}SKr ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/sts-main.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/sts-main.spdl deleted file mode 100644 index 4cfb76ca7e2aa619433953010d6a7827ce67c46b..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/sts-main.spdl +++ /dev/null @@ -1,114 +0,0 @@ -# 1 "sts-main.cpp" -# 1 "<command-line>" -# 1 "sts-main.cpp" -# 15 "sts-main.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 94 "common.h" -hashfunction MAC; - - -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i)) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r)) ); - - } - - -} -# 16 "sts-main.cpp" 2 - - - - - - - -protocol @executability(O) { - - - role O { - var i, r: Nonce; - var I, R: Agent; - - - recv_!O1( O, O, {{g(r), g(i)}sk(R)}KDF(h(g(i),r)) ); - send_!O2( O, O, {{g(r), g(i)}sk(R)}KDF(h(g(r),i)) ); - - - recv_!O3( O, O, {{g(i), g(r)}sk(I)}KDF(h(g(r),i)) ); - send_!O4( O, O, {{g(i), g(r)}sk(I)}KDF(h(g(i),r)) ); - - } - - -} - - - - -protocol sts-main(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_!2( R, I, Gr, {{Gr, g(i)}sk(R)}KDF(h(Gr,i)) ); - send_!3( I, R, {{g(i), Gr}sk(I)}KDF(h(Gr,i)) ); - - - claim( I, SKR, KDF(h(Gr,i)) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_!2( R, I, g(r), {{g(r), Gi}sk(R)}KDF(h(Gi,r)) ); - recv_!3( I, R, {{Gi, g(r)}sk(I)}KDF(h(Gi,r)) ); - - - claim( R, SKR, KDF(h(Gi,r)) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/sts-modified.cpp b/Vagrant Files/shared/scyther/Protocols/IKE/sts-modified.cpp deleted file mode 100644 index 458a042a58b69b03edd3f3b62b04b833dbc5c433..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/sts-modified.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/** HEADDOC - * @protocol Station-to-Station Protocol (STS) - * @reference Diffie W., van Oorschot P. C., and Wiener M. J., - * Authentication and authenticated key exchange, - * Boyd C. and Mathuria A., Protocols for Authentication and - * Key Agreement - * @description STS adds a diGital signaure to the exchanged messages to - * provide authentication for the Diffie-Hellman protocol. In - * addition, the shared secret is used to provide further - * assurances. - * @variant Variant proposed by Boyd et al to prevent unknown key-share - * attacks. -**/ - -#define __STS__ -#ifndef __ORACLE__ -#include "common.h" -#endif - -// It is not specified how the session key is derived from the ephemeral DH -// secret Z; we use KDF(Z). -protocol sts-modified(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_2( R, I, Gr, {Gr, g(i), I}sk(R) ); - send_3( I, R, {g(i), Gr, R}sk(I) ); - - /* SECURITY CLAIMS */ - claim( I, SKR, SKi ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_2( R, I, g(r), {g(r), Gi, I}sk(R) ); - recv_3( I, R, {Gi, g(r), R}sk(I) ); - - /* SECURITY CLAIMS */ - claim( R, SKR, SKr ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} \ No newline at end of file diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/sts-modified.spdl b/Vagrant Files/shared/scyther/Protocols/IKE/sts-modified.spdl deleted file mode 100644 index 660d068d8beeba783ff26fdb0633a773901ff2e0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/sts-modified.spdl +++ /dev/null @@ -1,88 +0,0 @@ -# 1 "sts-modified.cpp" -# 1 "<command-line>" -# 1 "sts-modified.cpp" -# 17 "sts-modified.cpp" -# 1 "common.h" 1 - - - - - hashfunction prf, KDF; - - - - - - -hashfunction g, h; -# 94 "common.h" -hashfunction MAC; - - -protocol @oracle (DH, SWAP) { - - - - - - - - role DH { - var i, r: Nonce; - - recv_!DH1( DH, DH, h(g(r),i) ); - send_!DH2( DH, DH, h(g(i),r) ); - } - - - - - role SWAP { - var i, r, Ni, Nr: Nonce; -# 150 "common.h" - recv_!SWAP1( SWAP, SWAP, KDF(h(g(r),i)) ); - send_!SWAP2( SWAP, SWAP, KDF(h(g(i),r)) ); - - } - - -} -# 18 "sts-modified.cpp" 2 - - - - -protocol sts-modified(I, R) -{ - role I { - fresh i: Nonce; - var Gr: Ticket; - - send_1( I, R, g(i) ); - recv_2( R, I, Gr, {Gr, g(i), I}sk(R) ); - send_3( I, R, {g(i), Gr, R}sk(I) ); - - - claim( I, SKR, KDF(h(Gr,i)) ); - - claim( I, Alive ); - claim( I, Weakagree ); - - } - - role R { - fresh r: Nonce; - var Gi: Ticket; - - recv_1( I, R, Gi ); - send_2( R, I, g(r), {g(r), Gi, I}sk(R) ); - recv_3( I, R, {Gi, g(r), R}sk(I) ); - - - claim( R, SKR, KDF(h(Gi,r)) ); - - claim( R, Alive ); - claim( R, Weakagree ); - - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/verify.sh b/Vagrant Files/shared/scyther/Protocols/IKE/verify.sh deleted file mode 100644 index 44f2b619b55d044267edded5535bebc576e72f22..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/verify.sh +++ /dev/null @@ -1,149 +0,0 @@ -############################################################################# -# -# NAME -# verify - batch protocol verifier script for scyther -# -# SYNOPSIS -# ./verify.sh [option]... [file]... -# -# DESCRIPTION -# Verify protocol specifications using scyther. -# -# OPTIONS -# -# -d Debug mode [false] -# -e Execution environment [cluster] -# -h Help -# -i Skip attack patterns of the form Alice talking to Alice -# -l lower bound of claims to check [1] -# -m Adversary-compromise model [ext] -# -o Output directory (attack graphs) [./graphs/] -# -r number of runs [6] -# -t timeout in s -# -u upper bound of claims to check [1] -# -# EXAMPLE -# ./verify.sh -m br -o . *.spdl -# -############################################################################# - - -#!/bin/bash - -# Default values -CLAIM[0]=1 -CLAIM[1]=1 -DEBUG=false -ENV='cluster' -FILES="*.spdl" -INITUNIQUE= -MODEL='ext' -OUTDIR='./graphs' -RUNS='-r 6' -SCYTHER='../scyther/Scyther/scyther-linux' -TIMEOUT= - -# Adversary-compromise models -# EXT -MODELS[0]= -# INT -MODELS[1]='--LKRothers 1' -# CA -MODELS[2]='--LKRactor 1' -# AF -MODELS[3]='--LKRafter 1' -# AFC -MODELS[4]='--LKRaftercorrect 1' -# BR -MODELS[5]='--LKRothers 1 --SKR 1 --SKRinfer' # (inferred session keys) -MODELS[6]='--LKRothers 1 --SKR 1' -# CKw -MODELS[7]='--LKRothers 1 --LKRactor 1 --LKRaftercorrect 1 --SKR 1 --SKRinfer --SSR 1' -MODELS[8]='--LKRothers 1 --LKRactor 1 --LKRaftercorrect 1 --SKR 1 --SSR 1' -# CK -MODELS[9]='--LKRothers 1 --LKRafter 1 --LKRaftercorrect 1 --SKR 1 --SKRinfer --SSR 1' -MODELS[10]='--LKRothers 1 --LKRafter 1 --LKRaftercorrect 1 --SKR 1 --SSR 1' -# eCK-1 -MODELS[11]='--LKRothers 1 --SKR 1 --SKRinfer --RNR 1' -MODELS[12]='--LKRothers 1 --SKR 1 --RNR 1' -# eCK-2 -MODELS[13]='--LKRothers 1 --LKRactor 1 --LKRaftercorrect 1 --SKR 1 --SKRinfer' -MODELS[14]='--LKRothers 1 --LKRactor 1 --LKRaftercorrect 1 --SKR 1' - - -# Parse command line arguments -while getopts “de:hil:m:o:r:t:u:” FLAG; -do - case $FLAG in - d) DEBUG=true;; - e) ENV=$OPTARG;; - i) INITUNIQUE='--init-unique';; - l) CLAIM[0]=$OPTARG;; - m) MODEL=$OPTARG;; - o) OUTDIR=$OPTARG;; - r) RUNS="-r $OPTARG";; - t) TIMEOUT="-T $OPTARG";; - u) CLAIM[1]=$OPTARG;; - h|?) - printf "Usage: %s: [-l num][-u num][-d][-e [cluster|remote|local]][-h][-m model][-o value][-r num][-t sec]file[...]\n" $(basename $0) >&2 - exit 1;; - esac -done -shift $(($OPTIND - 1)) - -# Remaining arguments treated as specification files -if [ -n "$*" ]; then - FILES="$*" - # mkdir -p "$OUTDIR$TSTAMP" -fi - - -# Parse model identifiers -mflags= -case $MODEL in - int) mflags=${MODELS[1]};; - ca) mflags=${MODELS[2]};; - af) mflags=${MODELS[3]};; - afc) mflags=${MODELS[4]};; - bri) mflags=${MODELS[5]};; - br) mflags=${MODELS[6]};; - ckwi) mflags=${MODELS[7]};; - ckw) mflags=${MODELS[8]};; - cki) mflags=${MODELS[9]};; - ck) mflags=${MODELS[10]};; - eck1i) mflags=${MODELS[11]};; - eck1) mflags=${MODELS[12]};; - eck2i) mflags=${MODELS[13]};; - eck2) mflags=${MODELS[14]};; -esac - - -# Verify -for file in $FILES; -do - EXT=`echo "$file" | sed 's/^.*\.//'` - if [ "$EXT" == 'spdl' ]; then - # Extract protocol name - tmp=`basename $file .spdl` - p=`basename $tmp .pp` - - # Execute scyther for selected models and claim - for (( c=${CLAIM[0]}; c<=${CLAIM[1]}; c++ )); - do - init="$SCYTHER $TIMEOUT --force-regular $INITUNIQUE $RUNS $mflags $file -d -o $OUTDIR/${p}_adv-${MODEL}_I$c.dot --filter=$p,I$c" - resp="$SCYTHER $TIMEOUT --force-regular $INITUNIQUE $RUNS $mflags $file -d -o $OUTDIR/${p}_adv-${MODEL}_R$c.dot --filter=$p,R$c" - if $DEBUG; then - echo $init - echo $resp - elif [ $ENV = "cluster" ]; then - bsub -W 08:00 -R "rusage[mem=4096]" $init - bsub -W 08:00 -R "rusage[mem=4096]" $resp - else # $ENV = local - time $init - time $resp - fi - done - else - printf "WARNING: %s could not be processed." $file - fi -done diff --git a/Vagrant Files/shared/scyther/Protocols/IKE/verify_all.sh b/Vagrant Files/shared/scyther/Protocols/IKE/verify_all.sh deleted file mode 100644 index 0cad2f655dcce8da95e9242b56b4c8304eb0c3b7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/IKE/verify_all.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -if [ -n "$*" ]; then - FILES="$*" - ./verify.sh -i -r 4 -l 1 -u 3 -e remote $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m int $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m ca $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m afc $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m af $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m br $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m bri $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m ckw $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m ckwi $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m ck $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m cki $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m eck1 $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m eck1i $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m eck2 $FILES - ./verify.sh -i -r 4 -l 1 -u 3 -e remote -m eck2i $FILES -fi diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/Makefile b/Vagrant Files/shared/scyther/Protocols/ISO-9798/Makefile deleted file mode 100644 index e0a1179337a6a2cad3c23ca6b5cad28b02ef8c2a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/Makefile +++ /dev/null @@ -1,16 +0,0 @@ - -outputs= isoiec-9798-3-6-1.spdl isoiec-9798-3-6-2.spdl \ - isoiec-9798-3-7-1.spdl isoiec-9798-3-7-2.spdl - -all: $(outputs) - -isoiec-9798-3-6-%.spdl: isoiec-9798-3-6-%.cpp isoiec-9798-3-6.template - cpp -C -P $< >$@ - -isoiec-9798-3-7-%.spdl: isoiec-9798-3-7-%.cpp isoiec-9798-3-7.template - cpp -C -P $< >$@ - -clean: - \rm -f $(outputs) - - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/iso25-tag.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/iso25-tag.spdl deleted file mode 100644 index a97164b55fb7d6aff4c72839cd56bd59777ad6bc..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/iso25-tag.spdl +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * ttp - * four-pass - * mutual - * - * Modeling notes: - * - The use of TNb in message 4, as specified by the ISO standard, is - * different from other models, in which it was TNa. - */ -usertype SessionKey; -usertype Tag; - -const t1,t2a,t2b,t3,t4,t5: Tag; - -protocol isoiec-9798-2-5(A,B,P) -{ - role A - { - fresh TVPa: Nonce; - var T: Ticket; - fresh TNa: Nonce; - var TNb: Nonce; - var Kab: SessionKey; - fresh Text1,Text5,Text6: Ticket; - var Text3,Text4,Text7,Text8: Ticket; - - send_1(A,P, TVPa, B, Text1); - recv_2(P,A, Text4, { t2a, TVPa, Kab, B, Text3 }k(A,P), T ); - claim(A,Running,B,Kab,Text5); - send_3(A,B, Text6, T, { t3, TNa, B, Text5 }Kab ); - recv_4(B,A, Text8, { t4, TNb, A, Text7 }Kab ); - - claim(A,Commit,B,Kab,Text5,Text7); - claim(A,Secret,Kab); - claim(A,Secret,Text5); - claim(A,Secret,Text7); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNp: Nonce; - var TNa: Nonce; - fresh TNb: Nonce; - var Kab: SessionKey; - fresh Text7,Text8: Ticket; - var Text2,Text5,Text6: Ticket; - - recv_3(A,B, Text6, { t2b, TNp, Kab, A, Text2 }k(B,P), { - t3, TNa, B, Text5 }Kab ); - claim(B,Running,A,Kab,Text5,Text7); - send_4(B,A, Text8, { t4, TNb, A, Text7 }Kab ); - - claim(B,Commit,A,Kab,Text5); - claim(B,Secret,Kab); - claim(B,Secret,Text5); - claim(B,Secret,Text7); - claim(B,Alive); - claim(B,Weakagree); - } - role P - { - var TVPa: Nonce; - fresh TNp: Nonce; - fresh Kab: SessionKey; - fresh Text2,Text3,Text4: Ticket; - var Text1: Ticket; - - recv_1(A,P, TVPa, B, Text1); - send_2(P,A, Text4, { t2a, TVPa, Kab, B, Text3 }k(A,P), - { t2b, TNp, Kab, A, Text2 }k(B,P) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/iso26-tag.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/iso26-tag.spdl deleted file mode 100644 index ced5d0259ee01c6e84f3b38eec40bfc35aaf7806..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/iso26-tag.spdl +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * ttp - * five-pass - * mutual - * - * MPA Attack reported by Mathuria: - * - Type flaw MPA when in parallel with Abadi-Needham protocol. - * - */ -usertype Tag; - -const t1,t2,t3,t4,t5: Tag; - -protocol isoiec-9798-2-6-tag(A,B,P) -{ - role A - { - var Rb: Nonce; - fresh Ra,Rpa: Nonce; - var Kab: SessionKey; - var T: Ticket; - fresh Text2,Text6,Text7: Ticket; - var Text1,Text4,Text5,Text8,Text9: Ticket; - - recv_1(B,A, Rb, Text1); - send_2(A,P, Ra, Rb, B, Text2); - recv_3(P,A, Text5, {t1, Ra,Kab,B,Text4}k(A,P), T ); - claim(A,Running,B,Kab,Text6); - send_4(A,B, Text7, T, {t3,Rpa,Rb,Text6}Kab ); - recv_5(B,A, Text9, {t4,Rb,Rpa,Text8}Kab ); - - claim(A,Commit,B,Kab,Text6,Text8); - claim(A,Secret,Kab); - claim(A,Secret,Text6); - claim(A,Secret,Text8); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - fresh Rb: Nonce; - var Rpa: Nonce; - var Kab: SessionKey; - fresh Text1,Text8,Text9: Ticket; - var Text3,Text6,Text7: Ticket; - - send_1(B,A, Rb, Text1); - recv_4(A,B, Text7, {t2,Rb,Kab,A,Text3}k(B,P), {t3,Rpa,Rb,Text6}Kab ); - claim(B,Running,A,Kab,Text6,Text8); - send_5(B,A, Text9, {t4,Rb,Rpa,Text8}Kab ); - - claim(B,Commit,A,Kab,Text6); - claim(B,Secret,Kab); - claim(B,Secret,Text6); - claim(B,Secret,Text8); - claim(B,Alive); - claim(B,Weakagree); - } - role P - { - var Ra, Rb: Nonce; - fresh Kab: SessionKey; - fresh Text3,Text4,Text5: Ticket; - var Text2: Ticket; - - recv_2(A,P, Ra, Rb, B, Text2); - send_3(P,A, Text5, {t1,Ra,Kab,B,Text4}k(A,P), - {t2,Rb,Kab,A,Text3}k(B,P) ); - } -} - -protocol @keysymm26(A,B,P) -{ - role A - { - var TVPN: Nonce; - var Kab: SessionKey; - var Text: Ticket; - var Tag: Ticket; - - recv_!1(B,A, { Tag,TVPN, Kab, B, Text }k(P,A) ); - send_!2(A,B, { Tag,TVPN, Kab, B, Text }k(A,P) ); - } - role B - { - } - role P - { - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-1-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-1-udkey.spdl deleted file mode 100644 index e1f8be609a90fde6cc1c531a344932d598b1086f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-1-udkey.spdl +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * one-pass - * unilateral - * - * Note: the identity B may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - */ -protocol isoiec-9798-2-1-udkey(A,B) -{ - role A - { - fresh TNA: Nonce; - fresh Text1,Text2: Ticket; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, Text2, { TNA, Text1 }k(A,B) ); - } - role B - { - var TNA: Nonce; - var Text1,Text2: Ticket; - - recv_1(A,B, Text2, { TNA, Text1 }k(A,B) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-1.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-1.spdl deleted file mode 100644 index 0d47be3137db77fd9bc6a89bcfd1c3cdb6ea932c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-1.spdl +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * one-pass - * unilateral - * - * Note: the identity B may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - */ -protocol @keysymm-21(A,B) -{ - role A - { - var T: Nonce; - var Text: Ticket; - - recv_!1(B,A, { T, A, Text }k(A,B) ); - send_!2(A,B, { T, A, Text }k(B,A) ); - } - role B - { - var T: Nonce; - var Text: Ticket; - - recv_!3(A,B, { T, B, Text }k(A,B) ); - send_!4(B,A, { T, B, Text }k(B,A) ); - } -} - -protocol isoiec-9798-2-1(A,B) -{ - role A - { - fresh TNA: Nonce; - fresh Text1,Text2: Ticket; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, Text2, { TNA, B, Text1 }k(A,B) ); - } - role B - { - var TNA: Nonce; - var Text1,Text2: Ticket; - - recv_1(A,B, Text2, { TNA, B, Text1 }k(A,B) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-2-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-2-udkey.spdl deleted file mode 100644 index 314aa8e820366bd1d122fdac1b5bd1d572d36840..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-2-udkey.spdl +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * two-pass - * unilateral - * - * Note: the identity A may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - * - */ -protocol isoiec-9798-2-2-udkey(A,B) -{ - role A - { - var RB: Nonce; - var Text1: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, RB,Text1 ); - claim(A,Running,B,RB,Text2); - send_2(A,B, Text3, { RB, Text2 }k(B,A) ); - } - role B - { - fresh RB: Nonce; - fresh Text1: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, RB,Text1 ); - recv_2(A,B, Text3, { RB, Text2 }k(B,A) ); - - claim(B,Commit,A,RB,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-2.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-2.spdl deleted file mode 100644 index fc1ae687bac0b7618131dfcd76bcd226cd88ecf0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-2.spdl +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * two-pass - * unilateral - * - * Note: the identity A may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - */ -protocol @keysymm-22(A,B) -{ - role A - { - var T: Nonce; - var Text: Ticket; - - recv_!1(B,A, { T, A, Text }k(A,B) ); - send_!2(A,B, { T, A, Text }k(B,A) ); - } - role B - { - var T: Nonce; - var Text: Ticket; - - recv_!3(A,B, { T, B, Text }k(A,B) ); - send_!4(B,A, { T, B, Text }k(B,A) ); - } -} - -protocol isoiec-9798-2-2(A,B) -{ - role A - { - var RB: Nonce; - var Text1: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, RB,Text1 ); - claim(A,Running,B,RB,Text2); - send_2(A,B, Text3, { RB, B, Text2 }k(B,A) ); - } - role B - { - fresh RB: Nonce; - fresh Text1: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, RB,Text1 ); - recv_2(A,B, Text3, { RB, B, Text2 }k(B,A) ); - - claim(B,Commit,A,RB,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-3-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-3-udkey.spdl deleted file mode 100644 index 9fddf6915a561d4ba8ff6c7831755e96dc2fe01d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-3-udkey.spdl +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * two-pass - * mutual - * - * Note: the identity inside the encryption may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - * - * In case (b), modeled here, the second key is reversed. - * - */ -protocol isoiec-9798-2-3-udkey(A,B) -{ - role A - { - fresh TNA: Nonce; - var TNB: Nonce; - fresh Text1,Text2: Ticket; - var Text3,Text4: Ticket; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, Text2, { TNA, Text1 }k(A,B) ); - recv_2(B,A, Text4, { TNB, Text3 }k(B,A) ); - - claim(A,Commit,B,TNB,Text3); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNA: Nonce; - fresh TNB: Nonce; - var Text1,Text2: Ticket; - fresh Text3,Text4: Ticket; - - recv_1(A,B, Text2, { TNA, Text1 }k(A,B) ); - claim(B,Running,A,TNB,Text3); - send_2(B,A, Text4, { TNB, Text3 }k(B,A) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-3.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-3.spdl deleted file mode 100644 index 6f2f86ba77ac32907fd3f35a682dbdc5e92a59df..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-3.spdl +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * two-pass - * mutual - * - * Note: the identity inside the encryption may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - * - */ -protocol @keysymm-23(A,B) -{ - role A - { - var T: Nonce; - var Text: Ticket; - - recv_!1(B,A, { T, A, Text }k(A,B) ); - send_!2(A,B, { T, A, Text }k(B,A) ); - } - role B - { - var T: Nonce; - var Text: Ticket; - - recv_!3(A,B, { T, B, Text }k(A,B) ); - send_!4(B,A, { T, B, Text }k(B,A) ); - } -} - -protocol isoiec-9798-2-3(A,B) -{ - role A - { - fresh TNA: Nonce; - var TNB: Nonce; - fresh Text1,Text2: Ticket; - var Text3,Text4: Ticket; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, Text2, { TNA, B, Text1 }k(A,B) ); - recv_2(B,A, Text4, { TNB, A, Text3 }k(A,B) ); - - claim(A,Commit,B,TNB,Text3); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNA: Nonce; - fresh TNB: Nonce; - var Text1,Text2: Ticket; - fresh Text3,Text4: Ticket; - - recv_1(A,B, Text2, { TNA, B, Text1 }k(A,B) ); - claim(B,Running,A,TNB,Text3); - send_2(B,A, Text4, { TNB, A, Text3 }k(A,B) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-4-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-4-udkey.spdl deleted file mode 100644 index 28694defb93c3fd31861f1594363bfe4915b0243..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-4-udkey.spdl +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * three-pass - * mutual - * - * Note: the identity inside the encryption may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - * - * In case (b), modeled here, the second key is reversed. - */ -protocol isoiec-9798-2-4-udkey(A,B) -{ - role A - { - var RB: Nonce; - fresh RA: Nonce; - var Text1,Text4,Text5: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, RB,Text1 ); - claim(A,Running,B,RA,RB,Text2); - send_2(A,B, Text3, { RA, RB, Text2 }k(A,B) ); - recv_3(B,A, Text5, { RB, RA, Text4 }k(B,A) ); - - claim(A,Commit,B,RA,RB,Text2,Text4); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - fresh RB: Nonce; - var RA: Nonce; - fresh Text1,Text4,Text5: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, RB,Text1 ); - recv_2(A,B, Text3, { RA, RB, Text2 }k(A,B) ); - claim(B,Running,A,RA,RB,Text2,Text4); - send_3(B,A, Text5, { RB, RA, Text4 }k(B,A) ); - - claim(B,Commit,A,RA,RB,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-4.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-4.spdl deleted file mode 100644 index 5d709c061df7f53209dc15892d37b5b35465ac8e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-4.spdl +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * three-pass - * mutual - * - * Note: the identity inside the encryption may be ommitted, if - * (a) the environment disallows such attacks, or - * (b) a unidirectional key is used - */ -protocol @keysymm-24a(A,B) -{ - role A - { - var T1,T2: Nonce; - var Text: Ticket; - - recv_!1(B,A, { T1, T2, A, Text }k(A,B) ); - send_!2(A,B, { T1, T2, A, Text }k(B,A) ); - } - role B - { - var T1,T2: Nonce; - var Text: Ticket; - - recv_!3(A,B, { T1, T2, B, Text }k(A,B) ); - send_!4(B,A, { T1, T2, B, Text }k(B,A) ); - } -} - -protocol @keysymm-24b(A,B) -{ - role A - { - var T1,T2: Nonce; - var Text: Ticket; - - recv_!1(B,A, { T1, T2, Text }k(A,B) ); - send_!2(A,B, { T1, T2, Text }k(B,A) ); - } - role B - { - var T1,T2: Nonce; - var Text: Ticket; - - recv_!3(A,B, { T1, T2, Text }k(A,B) ); - send_!4(B,A, { T1, T2, Text }k(B,A) ); - } -} - -protocol isoiec-9798-2-4(A,B) -{ - role A - { - var RB: Nonce; - fresh RA: Nonce; - var Text1,Text4,Text5: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, RB,Text1 ); - claim(A,Running,B,RA,RB,Text2); - send_2(A,B, Text3, { RA, RB, B, Text2 }k(A,B) ); - recv_3(B,A, Text5, { RB, RA, Text4 }k(A,B) ); - - claim(A,Commit,B,RA,RB,Text2,Text4); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - fresh RB: Nonce; - var RA: Nonce; - fresh Text1,Text4,Text5: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, RB,Text1 ); - recv_2(A,B, Text3, { RA, RB, B, Text2 }k(A,B) ); - claim(B,Running,A,RA,RB,Text2,Text4); - send_3(B,A, Text5, { RB, RA, Text4 }k(A,B) ); - - claim(B,Commit,A,RA,RB,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-5.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-5.spdl deleted file mode 100644 index 7a98c0de840abd28d69c3c584107b0b41a3ffd07..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-5.spdl +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * ttp - * four-pass - * mutual - * - * Modeling notes: - * - The use of TNb in message 4, as specified by the ISO standard, is - * different from other models, in which it was TNa. - */ -usertype SessionKey; - -protocol isoiec-9798-2-5(A,B,P) -{ - role A - { - fresh TVPa: Nonce; - var T: Ticket; - fresh TNa: Nonce; - var TNb: Nonce; - var Kab: SessionKey; - fresh Text1,Text5,Text6: Ticket; - var Text3,Text4,Text7,Text8: Ticket; - - send_1(A,P, TVPa, B, Text1); - recv_2(P,A, Text4, { TVPa, Kab, B, Text3 }k(A,P), T ); - claim(A,Running,B,Kab,Text5); - send_3(A,B, Text6, T, { TNa, B, Text5 }Kab ); - recv_4(B,A, Text8, { TNb, A, Text7 }Kab ); - - claim(A,Commit,B,Kab,Text5,Text7); - claim(A,Secret,Kab); - claim(A,Secret,Text5); - claim(A,Secret,Text7); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNp: Nonce; - var TNa: Nonce; - fresh TNb: Nonce; - var Kab: SessionKey; - fresh Text7,Text8: Ticket; - var Text2,Text5,Text6: Ticket; - - recv_3(A,B, Text6, { TNp, Kab, A, Text2 }k(B,P), { TNa, B, Text5 }Kab ); - claim(B,Running,A,Kab,Text5,Text7); - send_4(B,A, Text8, { TNb, A, Text7 }Kab ); - - claim(B,Commit,A,Kab,Text5); - claim(B,Secret,Kab); - claim(B,Secret,Text5); - claim(B,Secret,Text7); - claim(B,Alive); - claim(B,Weakagree); - } - role P - { - var TVPa: Nonce; - fresh TNp: Nonce; - fresh Kab: SessionKey; - fresh Text2,Text3,Text4: Ticket; - var Text1: Ticket; - - recv_1(A,P, TVPa, B, Text1); - send_2(P,A, Text4, { TVPa, Kab, B, Text3 }k(A,P), - { TNp, Kab, A, Text2 }k(B,P) ); - } -} - -protocol @keysymm25(A,B,P) -{ - role A - { - var TVPN: Nonce; - var Kab: SessionKey; - var Text: Ticket; - - recv_!1(B,A, { TVPN, Kab, B, Text }k(P,A) ); - send_!2(A,B, { TVPN, Kab, B, Text }k(A,P) ); - } - role B - { - } - role P - { - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-6.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-6.spdl deleted file mode 100644 index 703885b8a4968e96bfb53f35945f4300a83a7686..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-2-6.spdl +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * symmetric - * ttp - * five-pass - * mutual - * - * MPA Attack reported by Mathuria: - * - Type flaw MPA when in parallel with Abadi-Needham protocol. - * - */ -protocol isoiec-9798-2-6(A,B,P) -{ - role A - { - var Rb: Nonce; - fresh Ra,Rpa: Nonce; - var Kab: SessionKey; - var T: Ticket; - fresh Text2,Text6,Text7: Ticket; - var Text1,Text4,Text5,Text8,Text9: Ticket; - - recv_1(B,A, Rb, Text1); - send_2(A,P, Ra, Rb, B, Text2); - recv_3(P,A, Text5, {Ra,Kab,B,Text4}k(A,P), T ); - claim(A,Running,B,Kab,Text6); - send_4(A,B, Text7, T, {Rpa,Rb,Text6}Kab ); - recv_5(B,A, Text9, {Rb,Rpa,Text8}Kab ); - - claim(A,Commit,B,Kab,Text6,Text8); - claim(A,Secret,Kab); - claim(A,Secret,Text6); - claim(A,Secret,Text8); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - fresh Rb: Nonce; - var Rpa: Nonce; - var Kab: SessionKey; - fresh Text1,Text8,Text9: Ticket; - var Text3,Text6,Text7: Ticket; - - send_1(B,A, Rb, Text1); - recv_4(A,B, Text7, {Rb,Kab,A,Text3}k(B,P), {Rpa,Rb,Text6}Kab ); - claim(B,Running,A,Kab,Text6,Text8); - send_5(B,A, Text9, {Rb,Rpa,Text8}Kab ); - - claim(B,Commit,A,Kab,Text6); - claim(B,Secret,Kab); - claim(B,Secret,Text6); - claim(B,Secret,Text8); - claim(B,Alive); - claim(B,Weakagree); - } - role P - { - var Ra, Rb: Nonce; - fresh Kab: SessionKey; - fresh Text3,Text4,Text5: Ticket; - var Text2: Ticket; - - recv_2(A,P, Ra, Rb, B, Text2); - send_3(P,A, Text5, {Ra,Kab,B,Text4}k(A,P), - {Rb,Kab,A,Text3}k(B,P) ); - } -} - -protocol @keysymm26(A,B,P) -{ - role A - { - var TVPN: Nonce; - var Kab: SessionKey; - var Text: Ticket; - - recv_!1(B,A, { TVPN, Kab, B, Text }k(P,A) ); - send_!2(A,B, { TVPN, Kab, B, Text }k(A,P) ); - } - role B - { - } - role P - { - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-1.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-1.spdl deleted file mode 100644 index 42b5667f3b18e9856a9f5be80ff7757794202deb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-1.spdl +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * signature - * one-pass - * unilateral - */ -const Cert: Function; - -protocol isoiec-9798-3-1(A,B) -{ - role A - { - fresh TNA: Nonce; - fresh Text1,Text2: Ticket; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, Cert(A),TNA,B,Text2, { TNA, B, Text1 }sk(A) ); - } - role B - { - var TNA: Nonce; - var Text1,Text2: Ticket; - - recv_1(A,B, Cert(A),TNA,B,Text2, { TNA, B, Text1 }sk(A) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-2.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-2.spdl deleted file mode 100644 index 97f5c681b0c17c18e7bee5aa6db61799b0a2cb57..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-2.spdl +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * signature - * two-pass - * unilateral - */ -const Cert: Function; - -protocol isoiec-9798-3-2(A,B) -{ - role A - { - var Rb: Nonce; - fresh Ra: Nonce; - var Text1: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, Rb,Text1 ); - claim(A,Running,B,Ra,Rb,Text2); - send_2(A,B, Cert(A),Ra,Rb,B,Text3, { Ra, Rb, B, Text2 }sk(A) ); - } - role B - { - fresh Rb: Nonce; - var Ra: Nonce; - fresh Text1: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, Rb,Text1 ); - recv_2(A,B, Cert(A),Ra,Rb,B,Text3, { Ra, Rb, B, Text2 }sk(A) ); - - claim(B,Commit,A,Ra,Rb,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-3.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-3.spdl deleted file mode 100644 index ca1d944b376fa3c23e2bc98495fb8d7aa30d1add..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-3.spdl +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * signature - * two-pass - * mutual - */ -const Cert: Function; - -protocol isoiec-9798-3-3(A,B) -{ - role A - { - fresh TNA: Nonce; - var TNB: Nonce; - fresh Text1,Text2: Ticket; - var Text3,Text4: Ticket; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, Cert(A), TNA, B,Text2, { TNA, B, Text1 }sk(A) ); - recv_2(B,A, Cert(B), TNB, A,Text4, { TNB, A, Text3 }sk(B) ); - - claim(A,Commit,B,TNB,Text3); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNA: Nonce; - fresh TNB: Nonce; - var Text1,Text2: Ticket; - fresh Text3,Text4: Ticket; - - recv_1(A,B, Cert(A), TNA, B,Text2, { TNA, B, Text1 }sk(A) ); - claim(B,Running,A,TNB,Text3); - send_2(B,A, Cert(B), TNB, A,Text4, { TNB, A, Text3 }sk(B) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-4.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-4.spdl deleted file mode 100644 index f8bfbbcac3a3e930dd00265356ceb4b845d0b183..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-4.spdl +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * signature - * three-pass - * mutual - */ -const Cert: Function; - -protocol isoiec-9798-3-4(A,B) -{ - role A - { - var RB: Nonce; - fresh RA: Nonce; - var Text1,Text4,Text5: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, RB,Text1 ); - claim(A,Running,B,RA,RB,Text2); - send_2(A,B, Cert(B), RA,RB,B,Text3, { RA, RB, B, Text2 }sk(A) ); - recv_3(B,A, Cert(A), RB,RA,A,Text5, { RB, RA, A, Text4 }sk(B) ); - - claim(A,Commit,B,RA,RB,Text2,Text4); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - fresh RB: Nonce; - var RA: Nonce; - fresh Text1,Text4,Text5: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, RB,Text1 ); - recv_2(A,B, Cert(B), RA,RB,B,Text3, { RA, RB, B, Text2 }sk(A) ); - claim(B,Running,A,RA,RB,Text2,Text4); - send_3(B,A, Cert(A), RB,RA,A,Text5, { RB, RA, A, Text4 }sk(B) ); - - claim(B,Commit,A,RA,RB,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-5.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-5.spdl deleted file mode 100644 index 237e56f920e146e3c9775b3056a50bc2049ab138..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-5.spdl +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * signature - * two-pass - * mutual - * parallel - */ -const Cert: Function; - -protocol isoiec-9798-3-5(A,B) -{ - role A - { - fresh RA: Nonce; - var RB: Nonce; - fresh Text1,Text3,Text4: Ticket; - var Text2,Text5,Text6: Ticket; - - send_1(A,B, Cert(A), RA,Text1 ); - recv_2(B,A, Cert(B), RB,Text2 ); - recv_3(B,A, RB,RA,A,Text6, { RB, RA, A, Text5 }sk(B) ); - claim(A,Running,B,RA,RB,Text3,Text5); - send_4(A,B, RA,RB,B,Text4, { RA, RB, B, Text3 }sk(A) ); - - claim(A,Commit,B,RA,RB,Text5); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var RA: Nonce; - fresh RB: Nonce; - var Text1,Text3,Text4: Ticket; - fresh Text2,Text5,Text6: Ticket; - - recv_1(A,B, Cert(A), RA,Text1 ); - send_2(B,A, Cert(B), RB,Text2 ); - claim(B,Running,A,RA,RB,Text5); - send_3(B,A, RB,RA,A,Text6, { RB, RA, A, Text5 }sk(B) ); - recv_4(A,B, RA,RB,B,Text4, { RA, RB, B, Text3 }sk(A) ); - - claim(B,Commit,A,RA,RB,Text3,Text5); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-1.cpp b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-1.cpp deleted file mode 100644 index fb5b93be4200025a326d7c3f20db867266287e8f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-1.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#define NAME isoiec-9798-3-6-1 -#define IA A -#define IB B -#define ResA A,pk(A) -#define ResB B,pk(B) -#define TokenAB Text9,ResA,{Rb,ResA,Text5}sk(T),{Rb,Ra,B,A,Text8}sk(A) -#define TokenBA Ra,Rb,Text3,{B,Ra,Rb,A,Text2}sk(B) -#define TokenTA ResA,ResB,{Rpa,ResB,Text6}sk(T),{Rb,ResA,Text5}sk(T) - -#include "isoiec-9798-3-6.template" - - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-1.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-1.spdl deleted file mode 100644 index 51545a6a2d82871366e77c3f4aa53321c8f76978..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-1.spdl +++ /dev/null @@ -1,69 +0,0 @@ - - -/* - * Modeled from ISO standard - * - * signature - * ttp - * five-pass - * mutual - * - * A initiates and also communicates with T - * - * parameters: - * - * NAME - * IA - * IB - * ResA - * ResB - * TokenAB - * TokenBA (although identical in both cases) - * TokenTA - * - */ -protocol isoiec-9798-3-6-1(A,B,T) -{ - role A - { - fresh Ra,Rpa: Nonce; - fresh Text1,Text4,Text8,Text9: Ticket; - var Rb: Nonce; - var Text2,Text3; - var Text5,Text6,Text7: Ticket; - - send_1(A,B, Ra,A,Text1); - recv_2(B,A, B,Ra,Rb,Text3,{B,Ra,Rb,A,Text2}sk(B)); - send_3(A,T, Rpa,Rb,A,B,Text4); - recv_4(T,A, Text7,A,pk(A),B,pk(B),{Rpa,B,pk(B),Text6}sk(T),{Rb,A,pk(A),Text5}sk(T)); - claim(A,Running,B,Ra,Rb,Text8); - send_5(A,B, Text9,A,pk(A),{Rb,A,pk(A),Text5}sk(T),{Rb,Ra,B,A,Text8}sk(A)); - - claim(A,Commit,B,Ra,Rb,Text2); - claim(A,Alive); - } - role B - { - var Ra,Rpa: Nonce; - var Text1,Text5,Text8,Text9: Ticket; - fresh Text2,Text3,Text4: Ticket; - fresh Rb: Nonce; - - recv_1(A,B, Ra,A,Text1); - claim(B,Running,A,Ra,Rb,Text2); - send_2(B,A, B,Ra,Rb,Text3,{B,Ra,Rb,A,Text2}sk(B)); - recv_5(A,B, Text9,A,pk(A),{Rb,A,pk(A),Text5}sk(T),{Rb,Ra,B,A,Text8}sk(A)); - - claim(B,Commit,A,Ra,Rb,Text8); - claim(B,Alive); - } - role T - { - var Rpa, Rb: Nonce; - var Text4: Ticket; - fresh Text5,Text6,Text7: Ticket; - - recv_3(A,T, Rpa,Rb,A,B,Text4); - send_4(T,A, Text7,A,pk(A),B,pk(B),{Rpa,B,pk(B),Text6}sk(T),{Rb,A,pk(A),Text5}sk(T)); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-2.cpp b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-2.cpp deleted file mode 100644 index d40ca51980370235268f78398760d83860d1f6f1..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-2.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#define NAME isoiec-9798-3-6-2 -#define IA A -#define IB B -#define ResA A,pk(A) -#define ResB B,pk(B) -#define TokenAB Rpa,Text9,TokenTA,{Rb,Ra,B,A,Text8}sk(A) -#define TokenBA Ra,Rb,Text3,{B,Ra,Rb,A,Text2}sk(B) -#define TokenTA ResA,ResB,{Rpa,Rb,ResA,ResB,Text5}sk(T) - -#include "isoiec-9798-3-6.template" - - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-2.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-2.spdl deleted file mode 100644 index 3debbc7fd17759030d1d8b979db998f2a6edbc53..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6-2.spdl +++ /dev/null @@ -1,69 +0,0 @@ - - -/* - * Modeled from ISO standard - * - * signature - * ttp - * five-pass - * mutual - * - * A initiates and also communicates with T - * - * parameters: - * - * NAME - * IA - * IB - * ResA - * ResB - * TokenAB - * TokenBA (although identical in both cases) - * TokenTA - * - */ -protocol isoiec-9798-3-6-2(A,B,T) -{ - role A - { - fresh Ra,Rpa: Nonce; - fresh Text1,Text4,Text8,Text9: Ticket; - var Rb: Nonce; - var Text2,Text3; - var Text5,Text6,Text7: Ticket; - - send_1(A,B, Ra,A,Text1); - recv_2(B,A, B,Ra,Rb,Text3,{B,Ra,Rb,A,Text2}sk(B)); - send_3(A,T, Rpa,Rb,A,B,Text4); - recv_4(T,A, Text7,A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text5}sk(T)); - claim(A,Running,B,Ra,Rb,Text8); - send_5(A,B, Rpa,Text9,A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text5}sk(T),{Rb,Ra,B,A,Text8}sk(A)); - - claim(A,Commit,B,Ra,Rb,Text2); - claim(A,Alive); - } - role B - { - var Ra,Rpa: Nonce; - var Text1,Text5,Text8,Text9: Ticket; - fresh Text2,Text3,Text4: Ticket; - fresh Rb: Nonce; - - recv_1(A,B, Ra,A,Text1); - claim(B,Running,A,Ra,Rb,Text2); - send_2(B,A, B,Ra,Rb,Text3,{B,Ra,Rb,A,Text2}sk(B)); - recv_5(A,B, Rpa,Text9,A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text5}sk(T),{Rb,Ra,B,A,Text8}sk(A)); - - claim(B,Commit,A,Ra,Rb,Text8); - claim(B,Alive); - } - role T - { - var Rpa, Rb: Nonce; - var Text4: Ticket; - fresh Text5,Text6,Text7: Ticket; - - recv_3(A,T, Rpa,Rb,A,B,Text4); - send_4(T,A, Text7,A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text5}sk(T)); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6.template b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6.template deleted file mode 100644 index e8b6a804b727dec57ecaf6ea614586c2d69bf471..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-6.template +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Modeled from ISO standard - * - * signature - * ttp - * five-pass - * mutual - * - * A initiates and also communicates with T - * - * parameters: - * - * NAME - * IA - * IB - * ResA - * ResB - * TokenAB - * TokenBA (although identical in both cases) - * TokenTA - * - */ -protocol NAME(A,B,T) -{ - role A - { - fresh Ra,Rpa: Nonce; - fresh Text1,Text4,Text8,Text9: Ticket; - var Rb: Nonce; - var Text2,Text3; - var Text5,Text6,Text7: Ticket; - - send_1(A,B, Ra,IA,Text1); - recv_2(B,A, IB,TokenBA); - send_3(A,T, Rpa,Rb,IA,IB,Text4); - recv_4(T,A, Text7,TokenTA); - claim(A,Running,B,Ra,Rb,Text8); - send_5(A,B, TokenAB); - - claim(A,Commit,B,Ra,Rb,Text2); - claim(A,Alive); - } - role B - { - var Ra,Rpa: Nonce; - var Text1,Text5,Text8,Text9: Ticket; - fresh Text2,Text3,Text4: Ticket; - fresh Rb: Nonce; - - recv_1(A,B, Ra,IA,Text1); - claim(B,Running,A,Ra,Rb,Text2); - send_2(B,A, IB,TokenBA); - recv_5(A,B, TokenAB); - - claim(B,Commit,A,Ra,Rb,Text8); - claim(B,Alive); - } - role T - { - var Rpa, Rb: Nonce; - var Text4: Ticket; - fresh Text5,Text6,Text7: Ticket; - - recv_3(A,T, Rpa,Rb,IA,IB,Text4); - send_4(T,A, Text7,TokenTA); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-1.cpp b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-1.cpp deleted file mode 100644 index fd972110f8218f012f6cd23fb5e2828d80a4298e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-1.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#define NAME isoiec-9798-3-7-1 -#define IA A -#define IB B -#define ResA A,pk(A) -#define ResB B,pk(B) -#define TokenAB Text7,Ra,ResA,{Rb,ResA,Text3}sk(T),{Rb,Ra,B,A,Text6}sk(A) -#define TokenBA Ra,Rb,Text9,{A,Ra,Rb,B,Text8}sk(B) -#define TokenTA ResA,ResB,{Rpa,ResB,Text4}sk(T),{Rb,ResA,Text3}sk(T) - -#include "isoiec-9798-3-7.template" - - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-1.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-1.spdl deleted file mode 100644 index 516ceb00e1ef7ad22b45be7c8f9f460e07abc074..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-1.spdl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Modeled from ISO standard - * - * signature - * ttp - * five-pass - * mutual - * - * B initiates and A communicates with T - * - * parameters: - * - * NAME - * IA - * IB - * ResA - * ResB - * TokenAB - * TokenBA (although identical in both cases) - * TokenTA - * - */ -protocol isoiec-9798-3-7-1(A,B,T) -{ - role A - { - fresh Ra,Rpa: Nonce; - var Rb: Nonce; - var Text1,Text3,Text4,Text5,Text8,Text9: Ticket; - fresh Text2,Text6,Text7: Ticket; - - recv_1(B,A, Rb,B,Text1 ); - send_2(A,T, Rpa,Rb,A,Text2 ); - recv_3(T,A, Text5, A,pk(A),B,pk(B),{Rpa,B,pk(B),Text4}sk(T),{Rb,A,pk(A),Text3}sk(T) ); - claim(A,Running,B,Ra,Rb,Text6); - send_4(A,B, A, Text7,Ra,A,pk(A),{Rb,A,pk(A),Text3}sk(T),{Rb,Ra,B,A,Text6}sk(A) ); - recv_5(B,A, Ra,Rb,Text9,{A,Ra,Rb,B,Text8}sk(B) ); - - claim(A,Commit,B,Ra,Rb,Text8); - claim(A,Alive); - } - role B - { - fresh Text1,Text8,Text9: Ticket; - fresh Rb: Nonce; - var Text3,Text4,Text6,Text7: Ticket; - var Ra,Rpa: Nonce; - - send_1(B,A, Rb,B,Text1 ); - recv_4(A,B, A, Text7,Ra,A,pk(A),{Rb,A,pk(A),Text3}sk(T),{Rb,Ra,B,A,Text6}sk(A) ); - claim(B,Running,A,Ra,Rb,Text8); - send_5(B,A, Ra,Rb,Text9,{A,Ra,Rb,B,Text8}sk(B) ); - - claim(B,Commit,A,Ra,Rb,Text6); - claim(B,Alive); - } - role T - { - var Rpa,Rb: Nonce; - var Text2: Ticket; - fresh Text3,Text4,Text5: Ticket; - - recv_2(A,T, Rpa,Rb,A,Text2 ); - send_3(T,A, Text5, A,pk(A),B,pk(B),{Rpa,B,pk(B),Text4}sk(T),{Rb,A,pk(A),Text3}sk(T) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-2.cpp b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-2.cpp deleted file mode 100644 index 6ca070bdaa11d7185470697aef4c5a6cbc9a2f26..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-2.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#define NAME isoiec-9798-3-7-2 -#define IA A -#define IB B -#define ResA A,pk(A) -#define ResB B,pk(B) -#define TokenAB Rpa,Text7,TokenTA,{Rb,Ra,B,A,Text6}sk(A) -#define TokenBA Ra,Rb,Text9,{Ra,Rb,A,B,Text8}sk(B) -#define TokenTA ResA,ResB,{Rpa,Rb,ResA,ResB,Text3}sk(T) - -#include "isoiec-9798-3-7.template" - - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-2.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-2.spdl deleted file mode 100644 index 98ce4247bb5c01287a5db9c7b7bf153bb7483552..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7-2.spdl +++ /dev/null @@ -1,68 +0,0 @@ - - -/* - * Modeled from ISO standard - * - * signature - * ttp - * five-pass - * mutual - * - * B initiates and A communicates with T - * - * parameters: - * - * NAME - * IA - * IB - * ResA - * ResB - * TokenAB - * TokenBA (although identical in both cases) - * TokenTA - * - */ -protocol isoiec-9798-3-7-2(A,B,T) -{ - role A - { - fresh Ra,Rpa: Nonce; - var Rb: Nonce; - var Text1,Text3,Text4,Text5,Text8,Text9: Ticket; - fresh Text2,Text6,Text7: Ticket; - - recv_1(B,A, Rb,B,Text1 ); - send_2(A,T, Rpa,Rb,A,Text2 ); - recv_3(T,A, Text5, A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text3}sk(T) ); - claim(A,Running,B,Ra,Rb,Text6); - send_4(A,B, A, Rpa,Text7,A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text3}sk(T),{Rb,Ra,B,A,Text6}sk(A) ); - recv_5(B,A, Ra,Rb,Text9,{Ra,Rb,A,B,Text8}sk(B) ); - - claim(A,Commit,B,Ra,Rb,Text8); - claim(A,Alive); - } - role B - { - fresh Text1,Text8,Text9: Ticket; - fresh Rb: Nonce; - var Text3,Text4,Text6,Text7: Ticket; - var Ra,Rpa: Nonce; - - send_1(B,A, Rb,B,Text1 ); - recv_4(A,B, A, Rpa,Text7,A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text3}sk(T),{Rb,Ra,B,A,Text6}sk(A) ); - claim(B,Running,A,Ra,Rb,Text8); - send_5(B,A, Ra,Rb,Text9,{Ra,Rb,A,B,Text8}sk(B) ); - - claim(B,Commit,A,Ra,Rb,Text6); - claim(B,Alive); - } - role T - { - var Rpa,Rb: Nonce; - var Text2: Ticket; - fresh Text3,Text4,Text5: Ticket; - - recv_2(A,T, Rpa,Rb,A,Text2 ); - send_3(T,A, Text5, A,pk(A),B,pk(B),{Rpa,Rb,A,pk(A),B,pk(B),Text3}sk(T) ); - } -} diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7.template b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7.template deleted file mode 100644 index 8d9491a381ec0922f6d3529623f344c73a931648..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-3-7.template +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Modeled from ISO standard - * - * signature - * ttp - * five-pass - * mutual - * - * B initiates and A communicates with T - * - * parameters: - * - * NAME - * IA - * IB - * ResA - * ResB - * TokenAB - * TokenBA (although identical in both cases) - * TokenTA - * - */ -protocol NAME(A,B,T) -{ - role A - { - fresh Ra,Rpa: Nonce; - var Rb: Nonce; - var Text1,Text3,Text4,Text5,Text8,Text9: Ticket; - fresh Text2,Text6,Text7: Ticket; - - recv_1(B,A, Rb,IB,Text1 ); - send_2(A,T, Rpa,Rb,IA,Text2 ); - recv_3(T,A, Text5, TokenTA ); - claim(A,Running,B,Ra,Rb,Text6); - send_4(A,B, IA, TokenAB ); - recv_5(B,A, TokenBA ); - - claim(A,Commit,B,Ra,Rb,Text8); - claim(A,Alive); - } - role B - { - fresh Text1,Text8,Text9: Ticket; - fresh Rb: Nonce; - var Text3,Text4,Text6,Text7: Ticket; - var Ra,Rpa: Nonce; - - send_1(B,A, Rb,IB,Text1 ); - recv_4(A,B, IA, TokenAB ); - claim(B,Running,A,Ra,Rb,Text8); - send_5(B,A, TokenBA ); - - claim(B,Commit,A,Ra,Rb,Text6); - claim(B,Alive); - } - role T - { - var Rpa,Rb: Nonce; - var Text2: Ticket; - fresh Text3,Text4,Text5: Ticket; - - recv_2(A,T, Rpa,Rb,IA,Text2 ); - send_3(T,A, Text5, TokenTA ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-1-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-1-udkey.spdl deleted file mode 100644 index 6a955d0d55fb3ca924c900b62931b9b71b2cda33..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-1-udkey.spdl +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * ccf - * one-pass - * unilateral - * - * Unidirectional key version. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol isoiec-9798-4-1-udkey(A,B) -{ - role A - { - fresh Text1,Text2: Ticket; - fresh TNA: Nonce; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, TNA, Text2, f( TNA, Text1 ,k(A,B) ) ); - } - role B - { - var TNA: Nonce; - var Text1,Text2: Ticket; - - recv_1(A,B, TNA, Text2, f( TNA, Text1 ,k(A,B) ) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-1.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-1.spdl deleted file mode 100644 index f3a5b95b3e27334c1d4ffaf166d30bd56247ede0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-1.spdl +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010, Feb. 2011. - * - * History: - * - * - v2.0, Feb. 2011: - * Added key symmetry emulation protocol. - * - * ccf - * one-pass - * unilateral - * - * The identifier B is optional and may be omitted if the key is unidirectional. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol @keysymm-41(A,B) -{ - role A - { - var X,Y,Z: Ticket; - - recv_!1(B,A, f(X,Y,Z, k(A,B) ) ); - send_!2(A,B, f(X,Y,Z, k(B,A) ) ); - } - role B - { - } -} - -protocol isoiec-9798-4-1(A,B) -{ - role A - { - fresh Text1,Text2: Ticket; - fresh TNA: Nonce; - - claim(A,Running,B,TNA,Text1); - send_1(A,B, TNA, Text2, f( TNA, B, Text1 ,k(A,B) ) ); - } - role B - { - var TNA: Nonce; - var Text1,Text2: Ticket; - - recv_1(A,B, TNA, Text2, f( TNA, B, Text1 ,k(A,B) ) ); - - claim(B,Commit,A,TNA,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-2-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-2-udkey.spdl deleted file mode 100644 index c1e292f6eff5c704029199aba97a41f578b8fdfb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-2-udkey.spdl +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * ccf - * unilateral - * two-pass - * - * Unidirectional key version. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol isoiec-9798-4-2-udkey(A,B) -{ - role A - { - var Rb: Nonce; - var Text1: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, Rb,Text1 ); - claim(A,Running,B,Rb,Text2); - send_2(A,B, Text3, f( Rb, Text2, k(A,B)) ); - } - role B - { - fresh Rb: Nonce; - fresh Text1: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, Rb,Text1 ); - recv_2(A,B, Text3, f( Rb, Text2, k(A,B)) ); - - claim(B,Commit,A,Rb,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-2.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-2.spdl deleted file mode 100644 index d2bd4a93c494e5ac4d36f93348563cefa17adf2e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-2.spdl +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010, Feb. 2011. - * - * History: - * - * - v2.0, Feb. 2011: - * Added key symmetry emulation protocol. - * - * ccf - * unilateral - * two-pass - * - * The identifier B is optional and may be omitted if the key is unidirectional. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol @keysymm-42(A,B) -{ - role A - { - var X,Y,Z: Ticket; - - recv_!1(B,A, f(X,Y,Z, k(A,B) ) ); - send_!2(A,B, f(X,Y,Z, k(B,A) ) ); - } - role B - { - } -} - -protocol isoiec-9798-4-2(A,B) -{ - role A - { - var Rb: Nonce; - var Text1: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, Rb,Text1 ); - claim(A,Running,B,Rb,Text2); - send_2(A,B, Text3, f( Rb, B, Text2, k(A,B)) ); - } - role B - { - fresh Rb: Nonce; - fresh Text1: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, Rb,Text1 ); - recv_2(A,B, Text3, f( Rb, B, Text2, k(A,B)) ); - - claim(B,Commit,A,Rb,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-3-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-3-udkey.spdl deleted file mode 100644 index 4371591eefddf4852ce453e3f3d229728744baa9..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-3-udkey.spdl +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * ccf - * two-pass - * mutual - * - * Unidirectional key version. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol isoiec-9798-4-3-udkey(A,B) -{ - role A - { - fresh Text1,Text2: Ticket; - var Text3,Text4: Ticket; - fresh TNa: Nonce; - var TNb: Nonce; - - claim(A,Running,B,TNa,Text1); - send_1(A,B, TNa, Text2, f(TNa,Text1, k(A,B) ) ); - recv_2(B,A, TNb, Text4, f(TNb,Text3, k(B,A) ) ); - - claim(A,Commit,B,TNb,Text3); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNa: Nonce; - fresh TNb: Nonce; - var Text1,Text2: Ticket; - fresh Text3,Text4: Ticket; - - recv_1(A,B, TNa, Text2, f(TNa,Text1, k(A,B) ) ); - claim(B,Running,A,TNb,Text3); - send_2(B,A, TNb, Text4, f(TNb,Text3, k(B,A) ) ); - - claim(B,Commit,A,TNa,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-3.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-3.spdl deleted file mode 100644 index a5902e2a24b9f34bb18dcd5e316986d3bada1846..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-3.spdl +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010, Feb. 2011. - * - * History: - * - * - v2.0, Feb. 2011: - * Added key symmetry emulation protocol. - * - * ccf - * two-pass - * mutual - * - * The identifiers B,A are optional and may be (independently) be omitted if the key is unidirectional. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol @keysymm-43(A,B) -{ - role A - { - var X,Y,Z: Ticket; - - recv_!1(B,A, f(X,Y,Z, k(A,B) ) ); - send_!2(A,B, f(X,Y,Z, k(B,A) ) ); - } - role B - { - } -} - -protocol isoiec-9798-4-3(A,B) -{ - role A - { - fresh Text1,Text2: Ticket; - var Text3,Text4: Ticket; - fresh TNa: Nonce; - var TNb: Nonce; - - claim(A,Running,B,TNa,Text1); - send_1(A,B, TNa, Text2, f(TNa,B,Text1, k(A,B) ) ); - recv_2(B,A, TNb, Text4, f(TNb,A,Text3, k(A,B) ) ); - - claim(A,Commit,B,TNb,Text3); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var TNa: Nonce; - fresh TNb: Nonce; - var Text1,Text2: Ticket; - fresh Text3,Text4: Ticket; - - recv_1(A,B, TNa, Text2, f(TNa,B,Text1, k(A,B) ) ); - claim(B,Running,A,TNb,Text3); - send_2(B,A, TNb, Text4, f(TNb,A,Text3, k(A,B) ) ); - - claim(B,Commit,A,TNa,Text1); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-4-udkey.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-4-udkey.spdl deleted file mode 100644 index 27e546651f7b519ecb60f7f0fdf514cc14a5071e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-4-udkey.spdl +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010 - * - * ccf - * mutual - * three-pass - * - * Unidirectional key version. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol isoiec-9798-4-4-udkey(A,B) -{ - role A - { - fresh Ra: Nonce; - var Rb: Nonce; - var Text1,Text4,Text5: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, Rb, Text1 ); - claim(A,Running,B,Ra,Rb,Text2); - send_2(A,B, Ra, Text3, f(Ra,Rb,Text2, k(A,B) ) ); - recv_3(B,A, Text5, f(Rb,Ra,Text4, k(B,A) ) ); - - claim(A,Commit,B,Ra,Rb,Text2,Text4); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var Ra: Nonce; - fresh Rb: Nonce; - fresh Text1,Text4,Text5: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, Rb, Text1 ); - recv_2(A,B, Ra, Text3, f(Ra,Rb,Text2, k(A,B) ) ); - claim(B,Running,A,Ra,Rb,Text2,Text4); - send_3(B,A, Text5, f(Rb,Ra,Text4, k(B,A) ) ); - - claim(B,Commit,A,Ra,Rb,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-4.spdl b/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-4.spdl deleted file mode 100644 index f7963694798d8aef65d93b19ef92bdcb668231fe..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ISO-9798/isoiec-9798-4-4.spdl +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Modeled from ISO/IEC 9798 - * Modeler: Cas Cremers, Dec. 2010, Feb. 2011. - * - * History: - * - * - v2.0, Feb. 2011: - * Added key symmetry emulation protocol. - * - * ccf - * mutual - * three-pass - * - * The identifier B is optional and may be omitted if the key is unidirectional. - * - * Modeling notes: - * - * - The keyed CCF (f_kab(x)) is modeled as f(x,kab) - */ -hashfunction f; - -protocol @keysymm-44(A,B) -{ - role A - { - var X,Y,Z: Ticket; - - recv_!1(B,A, f(X,Y,Z, k(A,B) ) ); - send_!2(A,B, f(X,Y,Z, k(B,A) ) ); - } - role B - { - var X,Y,Z,ZZ: Ticket; - - recv_!3(A,B, f(X,Y,Z,ZZ, k(A,B) ) ); - send_!4(B,A, f(X,Y,Z,ZZ, k(B,A) ) ); - } -} - -protocol isoiec-9798-4-4(A,B) -{ - role A - { - fresh Ra: Nonce; - var Rb: Nonce; - var Text1,Text4,Text5: Ticket; - fresh Text2,Text3: Ticket; - - recv_1(B,A, Rb, Text1 ); - claim(A,Running,B,Ra,Rb,Text2); - send_2(A,B, Ra, Text3, f(Ra,Rb,B,Text2, k(A,B) ) ); - recv_3(B,A, Text5, f(Rb,Ra,Text4, k(A,B) ) ); - - claim(A,Commit,B,Ra,Rb,Text2,Text4); - claim(A,Alive); - claim(A,Weakagree); - } - role B - { - var Ra: Nonce; - fresh Rb: Nonce; - fresh Text1,Text4,Text5: Ticket; - var Text2,Text3: Ticket; - - send_1(B,A, Rb, Text1 ); - recv_2(A,B, Ra, Text3, f(Ra,Rb,B,Text2, k(A,B) ) ); - claim(B,Running,A,Ra,Rb,Text2,Text4); - send_3(B,A, Text5, f(Rb,Ra,Text4, k(A,B) ) ); - - claim(B,Commit,A,Ra,Rb,Text2); - claim(B,Alive); - claim(B,Weakagree); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/BKE.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/BKE.spdl deleted file mode 100644 index 8342bd6c709b316e2599862cea3b32925c7e7306..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/BKE.spdl +++ /dev/null @@ -1,40 +0,0 @@ -/* - Bilateral Key Exchange with Public Key protocol (BKEPK) -*/ - -usertype SessionKey; - -hashfunction hash; - -protocol bke(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1 (I,R, { ni,I }pk(R) ); - recv_2 (R,I, { hash(ni),nr,R,kir }pk(I) ); - send_3 (I,R, { hash(nr) }kir ); - claim_4 (I, Secret, kir ); - //claim_5 (I, Niagree ); - //claim_6 (I, Nisynch ); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kir: SessionKey; - - recv_1 (I,R, { ni,I }pk(R) ); - send_2 (R,I, { hash(ni),nr,R,kir }pk(I) ); - recv_3 (I,R, { hash(nr) }kir ); - claim_7 (R, Secret, kir ); - //claim_8 (R, Niagree ); - //claim_9 (R, Nisynch ); - } -} - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-ban-concrete.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-ban-concrete.spdl deleted file mode 100644 index 48f52d8f450814a116b7291bdfea1475800f311f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-ban-concrete.spdl +++ /dev/null @@ -1,67 +0,0 @@ -# BAN concrete Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrewBAN2.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# In order to overcome this a 'dummy' role X has been hadded that recrypts -# a given term crypted with k(I,R) with k(R,I) -# -# Note: -# Recv 4 by the Initatior has been placed after the synchronisation claim -# as it allows trivial synchronisation attacks otherwise (the message is -# completely fresh and can therefore always be replaced by an arbitrary value -# created by the intruder) which are not considered in SPORE -# - -usertype SessionKey; -const Fresh: Function; - -protocol @swapkey(X) -{ - # Protocol added to work around the symmetry problems where k(I,R) != k(R,I) - role X - { - var I,R: Agent; - var T:Ticket; - recv_!X1(X,X,I,R,{T}k(I,R)); - send_!X2(X,X,{T}k(R,I)); - } -} - -protocol andrew-Concrete(I,R) -{ - - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1(I,R, I,ni ); - recv_2(R,I, {ni,kir}k(I,R) ); - send_3(I,R, {ni}kir); - claim_I1(I,Secret,kir); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,kir)); - recv_6(R,I, nr); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,ni ); - send_2(R,I, {ni,kir}k(I,R) ); - recv_3(I,R, {ni}kir); - send_6(R,I, nr); - claim_R1(R,Secret,kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-ban.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-ban.spdl deleted file mode 100644 index 5118604cdc06f34dd2d5f3b8b4ba1035c792ce53..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-ban.spdl +++ /dev/null @@ -1,52 +0,0 @@ -# BAN modified Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrewBAN.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# So it is possile that certain attacks that use this property are not found -# -# Note: -# According to SPORE there are no known attacks on this protocol -# -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol andrew-Ban(I,R) -{ - role I - { - fresh ni: Nonce; - var nr,nr2: Nonce; - var kir: SessionKey; - - send_1(I,R, I,{ni}k(I,R) ); - recv_2(R,I, {ni,nr}k(I,R) ); - send_3(I,R, {nr}k(I,R) ); - recv_4(R,I, {kir,nr2,ni}k(I,R) ); - claim_I1(I,Nisynch); - claim_I2(I,Niagree); - claim_I3(I,Secret, kir); - claim_I5(I,Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr,nr2: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,{ni}k(I,R) ); - send_2(R,I, {ni,nr}k(I,R) ); - recv_3(I,R, {nr}k(I,R) ); - send_4(R,I, {kir,nr2,ni}k(I,R) ); - claim_R1(R,Nisynch); - claim_R2(R,Niagree); - claim_R3(R,Secret, kir); - claim_R5(R,Empty, (Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-lowe-ban.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-lowe-ban.spdl deleted file mode 100644 index 04e15f27a67bbe57cd026848e0b715e9602e407b..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/andrew-lowe-ban.spdl +++ /dev/null @@ -1,57 +0,0 @@ -# Lowe modified BAN concrete Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrewLowe.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# So it is possile that certain attacks that use this property are not found -# -# Note: -# Recv 4 by the Initatior has been placed after the synchronisation claim -# as it allows trivial synchronisation attacks otherwise (the message is -# completely fresh and can therefore always be replaced by an arbitrary value -# created by the intruder) which are not considered in SPORE -# -# Note: -# According to SPORE there are no known attacks on this protocol -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol andrew-LoweBan(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1(I,R, I,ni ); - recv_2(R,I, {ni,kir,R}k(I,R) ); - send_3(I,R, {ni}kir ); - claim_I1(I,Nisynch); - claim_I2(I,Secret, kir); - claim_I3(I,Empty, (Fresh,kir)); - recv_4(R,I, nr ); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,ni ); - send_2(R,I, {ni,kir,R}k(I,R) ); - recv_3(I,R, {ni}kir ); - send_4(R,I, nr ); - claim_R1(R,Nisynch); - claim_R2(R,Secret, kir); - claim_R3(R,Empty, (Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/boyd.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/boyd.spdl deleted file mode 100644 index 0a9c755296ba85d44bbe48f5ca5ee393e16e72fb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/boyd.spdl +++ /dev/null @@ -1,56 +0,0 @@ -usertype Sessionkey; -usertype Macseed; -const m: Function; -secret unm: Function; -const f: Function; - -inversekeys (m, unm); - -/* - * Boyd key agreement - * - * Boyd & Mathuria: Protocols for authentication and key establishment - * (2003) p. 101 - * - * Note that MAC_ks(x) has been interpreted as MAC(x,ks); this - * assumption causes some possible false attacks. - */ - -protocol boyd(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var ks: Macseed; - - send_1 (I,S, I,R, ni ); - recv_3 (R,I, { I,R, ks }k(I,S), m(ni, m(ks,ni,nr)), nr ); - send_4 (I,R, m(nr, m(ks,ni,nr)) ); - - claim_6 (I, Secret, m(ks,ni,nr) ); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var ks: Macseed; - - recv_2 (S,R, { I,R, ks }k(I,S), { I,R, ks }k(R,S), ni ); - send_3 (R,I, { I,R, ks }k(I,S), m(ni, m(ks,ni,nr)), nr ); - recv_4 (I,R, m(nr, m(ks,ni,nr)) ); - - claim_10 (R, Secret, m(ks,ni,nr)); - } - - role S - { - var ni,nr: Nonce; - fresh ks: Macseed; - - recv_1 (I,S, I,R, ni ); - send_2 (S,R, { I,R, ks }k(I,S), { I,R, ks }k(R,S), ni ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ccitt509-ban3.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ccitt509-ban3.spdl deleted file mode 100644 index bdf146dd74c09e6b53acff463737d53a19ec83bb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ccitt509-ban3.spdl +++ /dev/null @@ -1,39 +0,0 @@ -# BAN modified version of CCITT X.509 (3) -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ccittx509_3BAN.html -# -# Note: -# The protocol description also states that Xa and Ya should be fresh -# this can not be verified using scyther -# -# Note: -# According to SPORE there are no known attacks on this protocol -# - -protocol ccitt509-ban3(I,R) -{ - role I - { - fresh Na,Xa,Ya: Nonce; - var Xb,Nb,Yb: Nonce; - - send_1(I,R, I,{Na, R, Xa,{Ya}pk(R)}sk(I)); - recv_2(R,I, R,{Nb, I, Na, Xb,{Yb}pk(I)}sk(R)); - send_3(I,R, I,{R, Nb}sk(I)); - claim_4(I,Nisynch); - } - - role R - { - var Na,Xa,Ya: Nonce; - fresh Xb,Yb,Nb: Nonce; - - recv_1(I,R, I,{Na, R, Xa,{Ya}pk(R)}sk(I)); - send_2(R,I, R,{Nb, I, Na, Xb,{Yb}pk(I)}sk(R)); - recv_3(I,R, I,{R, Nb}sk(I)); - claim_5(R,Nisynch); - # There should also be Fresh Xa and Fresh Ya claims here - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/denning-sacco-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/denning-sacco-lowe.spdl deleted file mode 100644 index d5c3182c14dddd44b359464b37d52e51719dafb0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/denning-sacco-lowe.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# Lowe modified Denning-Sacco shared key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/denningSaccoLowe.html -# -# Note: -# According to SPORE there are no attacks on this protocol, scyther -# finds one however. This has to be investigated further. - -usertype Key; -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; -usertype PseudoFunction; -const dec: PseudoFunction; -const Fresh: Function; -const Compromised: Function; - -protocol denningSacco-Lowe(I,R,S) -{ - role I - { - var W: Ticket; - var Kir: SessionKey; - var T: TimeStamp; - var Nr: Nonce; - - send_1(I,S, I,R ); - recv_2(S,I, {R, Kir, T, W}k(I,S) ); - send_3(I,R, W); - recv_4(R,I, {Nr}Kir); - send_5(I,R, {{Nr}dec}Kir); - claim_I1(I,Niagree); - claim_I2(I,Nisynch); - claim_I3(I,Secret,Kir); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - var Kir: SessionKey; - var T: TimeStamp; - fresh Nr: Nonce; - - recv_3(I,R, {Kir,I,T}k(R,S)); - send_4(R,I, {Nr}Kir); - recv_5(I,R, {{Nr}dec}Kir); - claim_R1(R,Niagree); - claim_R2(R,Nisynch); - claim_R3(R,Secret,Kir); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var W: Ticket; - fresh Kir: SessionKey; - fresh T: TimeStamp; - - recv_1(I,S, I,R ); - send_2(S,I, {R, Kir, T, {Kir, I,T}k(R,S)}k(I,S)); - claim_x(S, Secret, Kir); - } -} - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/denning-sacco.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/denning-sacco.spdl deleted file mode 100644 index 00167e975c65cc94323c1fed8e2efeba3227bf69..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/denning-sacco.spdl +++ /dev/null @@ -1,55 +0,0 @@ -# Denning-Sacco shared key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/denningSacco.html -# - -usertype Key; -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; -const Fresh: Function; -const Compromised: Function; - -protocol denningSacco(I,R,S) -{ - role I - { - var W: Ticket; - var Kir: SessionKey; - var T: TimeStamp; - - send_1(I,S, I,R ); - recv_2(S,I, {R, Kir, T, W}k(I,S) ); - send_3(I,R, W); - claim_I1(I,Niagree); - claim_I2(I,Nisynch); - claim_I3(I,Secret,Kir); - claim_I4(I,Empty, (Fresh,Kir)); - } - - role R - { - var Kir: SessionKey; - var T: TimeStamp; - - recv_3(I,R, {Kir,I,T}k(R,S)); - claim_R1(R,Niagree); - claim_R2(R,Nisynch); - claim_R3(R,Secret,Kir); - claim_R4(R,Empty, (Fresh,Kir)); - } - - role S - { - var W: Ticket; - fresh Kir: SessionKey; - fresh T: TimeStamp; - - recv_1(I,S, I,R ); - send_2(S,I, {R, Kir, T, {Kir, I,T}k(R,S)}k(I,S)); - } -} - - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/gong-nonce-b.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/gong-nonce-b.spdl deleted file mode 100644 index 09bde6d80fc530c90b1ce4ebb4c624bd2fd25024..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/gong-nonce-b.spdl +++ /dev/null @@ -1,60 +0,0 @@ -usertype Sessionkey; -usertype Keypart; -hashfunction f; - -/* - * Gong nonce based alternative - * - * Boyd & Mathuria: Protocols for authentication and key establishment - * (2003) p. 101 - */ - -protocol gongnonceb(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - fresh ki: Keypart; - var kr: Keypart; - - send_1 (I,S, I,R, { I,S,I, ki, R }k(I,S), ni ); - recv_4 (S,I, { S,I,R,kr,I }k(I,S), { R,I,ni }f(ki,kr), nr ); - send_5 (I,R, { I,R,nr }f(ki,kr) ); - - claim_6 (I, Secret, ki); - claim_7 (I, Secret, kr); - claim_8 (I, Nisynch); - claim_9 (I, Niagree); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kr: Keypart; - var ki: Keypart; - - recv_2 (S,R, I,R, { S,R,I, ki, R }k(R,S), ni ); - send_3 (R,S, { R,S,R,kr,I }k(R,S), { R,I, ni }f(ki,kr), nr ); - recv_5 (I,R, { I,R,nr }f(ki,kr) ); - - claim_10 (R, Secret, ki); - claim_11 (R, Secret, kr); - claim_12 (R, Nisynch); - claim_13 (R, Niagree); - } - - role S - { - var ni,nr: Nonce; - var ki,kr: Keypart; - var T; - - recv_1 (I,S, I,R, { I,S,I, ki, R }k(I,S), ni ); - send_2 (S,R, I,R, { S,R,I, ki, R }k(R,S), ni ); - recv_3 (R,S, { R,S,R,kr,I }k(R,S), T, nr ); - send_4 (S,I, { S,I,R,kr,I }k(I,S), T, nr ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/gong-nonce.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/gong-nonce.spdl deleted file mode 100644 index 594e1b9753998059d509dfecc53af0e9b04ed579..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/gong-nonce.spdl +++ /dev/null @@ -1,57 +0,0 @@ -/* - * From Boyd Mathuria - * - * To check: 3.38 or other? - * - */ -usertype Sessionkey; -usertype Keypart; - -protocol gongnonce(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - fresh ki: Keypart; - var kr: Keypart; - - send_1 (I,R, I,R,ni ); - recv_3 (S,I, { S,I,R, kr, I, ni }k(I,S), nr); - send_4 (I,S, { I,S,I, ki, R, nr }k(I,S) ); - - claim_6 (I, Secret, ki); - claim_7 (I, Secret, kr); - claim_8 (I, Nisynch); - claim_9 (I, Niagree); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kr: Keypart; - var ki: Keypart; - - recv_1 (I,R, I,R,ni ); - send_2 (R,S, I,R, nr, { R,S,R, kr, I,ni }k(R,S)); - recv_5 (S,R, { S,R,I, ki, R, nr }k(R,S) ); - - claim_10 (R, Secret, ki); - claim_11 (R, Secret, kr); - claim_12 (R, Nisynch); - claim_13 (R, Niagree); - } - - role S - { - var ni,nr: Nonce; - var ki,kr: Keypart; - - recv_2 (R,S, I,R, nr, { R,S,R, kr, I,ni }k(R,S)); - send_3 (S,I, { S,I,R, kr, I, ni }k(I,S), nr); - recv_4 (I,S, { I,S,I, ki, R, nr }k(I,S) ); - send_5 (S,R, { S,R,I, ki, R, nr }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/isoiec11770-2-13.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/isoiec11770-2-13.spdl deleted file mode 100644 index 5db1533dbcd541c27156d917511c73d5933eae5d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/isoiec11770-2-13.spdl +++ /dev/null @@ -1,42 +0,0 @@ -usertype Sessionkey; -usertype Ticket; - -protocol isoiec11770213(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: Sessionkey; - - send_1 (I,R, ni); - recv_4 (R,I, { ni,kir,R }k(I,S) ); - - claim_5 (I, Secret, kir); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kir: Sessionkey; - var T; - - recv_1 (I,R, ni); - send_2 (R,S, { nr,ni,I,kir }k(R,S) ); - recv_3 (S,R, { nr, I }k(R,S), T ); - send_4 (R,I, T ); - - claim_6 (R, Secret, kir); - } - - role S - { - var ni,nr: Nonce; - var kir: Sessionkey; - - recv_2 (R,S, { nr,ni,I,kir }k(R,S) ); - send_3 (S,R, { nr, I }k(R,S), { ni,kir,R }k(I,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow-v2.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow-v2.spdl deleted file mode 100644 index 638a54b7cdd3722fbac37a1b9241b855246d4ea7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow-v2.spdl +++ /dev/null @@ -1,55 +0,0 @@ -# Kao Chow Authentication v.2 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kaoChow2.html -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol kaochow-2(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir,kt: SessionKey; - - send_1 (I,S, I,R,ni); - recv_3 (R,I, R, {I,R,ni,kir,kt}k(I,S), {ni, kir}kt, nr ); - send_4 (I,R, {nr,kir}kt ); - - claim_I1 (I, Nisynch); - claim_I2 (I, Niagree); - claim_I3 (I, Secret, kir); - claim_I4 (I, Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var kir,kt: SessionKey; - var T: Ticket; - - recv_2 (S,R, T, { I,R,ni,kir,kt }k(R,S) ); - send_3 (R,I, R, T, {ni, kir}kt, nr ); - recv_4 (I,R, {nr,kir}kt ); - - claim_R1 (R, Nisynch); - claim_R2 (R, Niagree); - claim_R3 (R, Secret, kir); - claim_R4 (R, Empty, (Fresh,kir)); - } - - role S - { - var ni: Nonce; - fresh kir, kt: SessionKey; - - recv_1 (I,S, I,R,ni); - send_2 (S,R, {I,R,ni,kir,kt}k(I,S), { I,R,ni,kir,kt }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow-v3.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow-v3.spdl deleted file mode 100644 index 88cef24fd8e955769d166e75f879caed7f30f7fe..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow-v3.spdl +++ /dev/null @@ -1,59 +0,0 @@ -# Kao Chow Authentication v.3 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kaoChow3.html -# - -usertype SessionKey; -usertype ExpiredTimeStamp; -usertype TimeStamp; -const Fresh: Function; -const Compromised: Function; - -protocol kaochow-3(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir,kt: SessionKey; - var T2: Ticket; - - send_1 (I,S, I,R,ni); - recv_3 (R,I, {I,R,ni,kir,kt}k(I,S), {ni, kir}kt, nr, T2 ); - send_4 (I,R, {nr,kir}kt, T2 ); - - claim_I1 (I, Nisynch); - claim_I2 (I, Niagree); - claim_I3 (I, Secret, kir); - claim_I4 (I, Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var kir,kt: SessionKey; - var T: Ticket; - fresh tr: TimeStamp; - - recv_2 (S,R, T, { I,R,ni,kir,kt }k(R,S) ); - send_3 (R,I, T, {ni, kir}kt, nr, {I,R,tr,kir}k(R,S) ); - recv_4 (I,R, {nr,kir}kt, {I,R,tr,kir}k(R,S) ); - - claim_R1 (R, Nisynch); - claim_R2 (R, Niagree); - claim_R3 (R, Secret, kir); - claim_R4 (R, Empty, (Fresh,kir)); - } - - role S - { - var ni: Nonce; - fresh kir, kt: SessionKey; - - recv_1 (I,S, I,R,ni); - send_2 (S,R, {I,R,ni,kir,kt}k(I,S), { I,R,ni,kir,kt }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow.spdl deleted file mode 100644 index 1c6c827982ce289073ffc12103fe5accd1b95462..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/kaochow.spdl +++ /dev/null @@ -1,55 +0,0 @@ -# Kao Chow Authentication v.1 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kaoChow1.html -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol kaochow(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1 (I,S, I,R,ni); - recv_3 (R,I, {I,R,ni,kir}k(I,S), {ni}kir, nr ); - send_4 (I,R, {nr}kir ); - - claim_I1 (I, Nisynch); - claim_I2 (I, Niagree); - claim_I3 (I, Secret, kir); - claim_I4 (I, Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var kir: SessionKey; - var T; - - recv_2 (S,R, T, { I,R,ni,kir }k(R,S) ); - send_3 (R,I, T, {ni}kir, nr ); - recv_4 (I,R, {nr}kir ); - - claim_R1 (R, Nisynch); - claim_R2 (R, Niagree); - claim_R3 (R, Secret, kir); - claim_R4 (R, Empty, (Fresh,kir)); - } - - role S - { - var ni: Nonce; - fresh kir: SessionKey; - - recv_1 (I,S, I,R,ni); - send_2 (S,R, {I,R,ni,kir}k(I,S), { I,R,ni,kir }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ksl.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ksl.spdl deleted file mode 100644 index 3595cf2750bab2ba69cf5cd4c55e3349b2b78ca7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ksl.spdl +++ /dev/null @@ -1,75 +0,0 @@ -# KSL -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ksl.html -# -# - - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - - - -protocol ksl(I,R,S) -{ - role I - { - fresh Ni, Mi: Nonce; - var Nc, Mr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, Ni, I); - recv_4(R,I, { Ni,R,Kir }k(I,S), T, Nc, {Ni}Kir ); - send_5(I,R, { Nc }Kir ); - - send_6(I,R, Mi,T ); - recv_7(R,I, Mr,{Mi}Kir ); - send_8(I,R, {Mr}Kir ); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty, (Fresh, Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Nc,Mr: Nonce; - var Kir: SessionKey; - fresh Kbb: TicketKey; - fresh Tr: TimeStamp; - var T: Ticket; - - recv_1(I,R, Ni, I); - send_2(R,S, Ni, I, Nr, R ); - recv_3(S,R, { Nr, I, Kir }k(R,S), T ); - send_4(R,I, T, { Tr, I, Kir }Kbb, Nc, {Ni}Kir ); - recv_5(I,R, { Nc }Kir ); - - recv_6(I,R, Mi,{ Tr, I, Kir }Kbb ); - send_7(R,I, Mr,{Mi}Kir ); - recv_8(I,R, {Mr}Kir ); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - - recv_2(R,S, Ni, I, Nr, R ); - send_3(S,R, { Nr, I, Kir }k(R,S), { Ni,R,Kir }k(I,S) ); - } -} - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/needham-schroeder-sk-amend.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/needham-schroeder-sk-amend.spdl deleted file mode 100644 index 189093d107295d32d8bc177f455d9246d0059bf0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/needham-schroeder-sk-amend.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# Amended Needham Schroeder Symmetric Key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/nssk_amended.html -# -# -# Note: -# According to SPORE there are no attacks on this protocol, scyther -# finds one however. This has to be investigated further. - - - -# Model dec that is invertible by inc -const dec,inc: Function; -inversekeys(dec,inc); -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol needhamschroedersk-amend(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var Kir: SessionKey; - var T,T2: Ticket; - - send_1(I,R,I); - recv_2(R,I,T); - send_3(I,S,(I,R,Ni,T)); - recv_4(S,I, {Ni,R,Kir,T2}k(I,S)); - send_5(I,R,T2); - recv_6(R,I,{Nr}Kir); - send_7(I,R,{{Nr}dec}Kir); - - claim_I2(I,Secret,Kir); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Kir: SessionKey; - - recv_1(I,R,I); - send_2(R,I,{I,Nr}k(R,S)); - recv_5(I,R,{Kir,Nr,I}k(R,S)); - send_6(R,I,{Nr}Kir); - recv_7(I,R,{{Nr}dec}Kir); - claim_R1(R,Secret,Nr); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni,Nr: Nonce; - fresh Kir: SessionKey; - recv_3(I,S,(I,R,Ni,{I,Nr}k(R,S))); - send_4(S,I,{Ni,R,Kir,{Kir,Nr,I}k(R,S)}k(I,S)); - } - -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/needham-schroeder-sk.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/needham-schroeder-sk.spdl deleted file mode 100644 index 71a7e6c3ca031a129edced11e2ed78a1e78ceb37..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/needham-schroeder-sk.spdl +++ /dev/null @@ -1,56 +0,0 @@ -# Needham Schroeder Symmetric Key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/nssk.html -# -# - - -# Model dec that is invertible by inc -const dec,inc: Function; -inversekeys(dec,inc); -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol needhamschroedersk(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var Kir: SessionKey; - var T: Ticket; - - send_1(I,S,(I,R,Ni)); - recv_2(S,I, {Ni,R,Kir,T}k(I,S)); - send_3(I,R,T); - recv_4(R,I,{Nr}Kir); - send_5(I,R,{{Nr}dec}Kir); - claim_I2(I,Secret,Kir); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Kir: SessionKey; - - recv_3(I,R,{Kir,I}k(R,S)); - send_4(R,I,{Nr}Kir); - recv_5(I,R,{{Nr}dec}Kir); - claim_R1(R,Secret,Kir); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni: Nonce; - fresh Kir: SessionKey; - recv_1(I,S,(I,R,Ni)); - send_2(S,I,{Ni,R,Kir,{Kir,I}k(R,S)}k(I,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/new.txt b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/new.txt deleted file mode 100644 index dbba1982d9d5f1ac0b3570a6e1f32d6c93138f09..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/new.txt +++ /dev/null @@ -1,5 +0,0 @@ -denning-sacco-lowe.spdl -wmf.spdl -wmf-lowe.spdl -andrew-ban-concrete.spdl -yahalom-ban-paulson.spdl diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ns3.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ns3.spdl deleted file mode 100644 index b83afa7f8f1668784cf4d216744a71dcb2a89bfe..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/ns3.spdl +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Needham-Schroeder protocol - */ - -// The protocol description - -protocol ns3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,I}pk(R) ); - recv_2(R,I, {ni,nr}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - //claim_i3(I,Alive); - claim_i4(I,Niagree); - claim_i5(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,I}pk(R) ); - send_2(R,I, {ni,nr}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - //claim_r3(R,Alive); - claim_r4(R,Niagree); - claim_r5(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/nsl3.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/nsl3.spdl deleted file mode 100644 index a4bfef59ba5460e46a4adf941a03c3375291305d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/nsl3.spdl +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol - */ - -// The protocol description - -protocol nsl3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,I}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,I}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/otwayrees.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/otwayrees.spdl deleted file mode 100644 index bed12addbb962630e674c20705162c706183767c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/otwayrees.spdl +++ /dev/null @@ -1,56 +0,0 @@ -# Otway Rees -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/otwayRees.html -# - - -const Fresh: Function; -const Compromised: Function; - -usertype String,SessionKey; - -protocol otwayrees(I,R,S) -{ - role I - { - fresh Ni : Nonce; - fresh M : String; - var Kir : SessionKey; - - send_1(I,R, M,I,R,{Ni,M,I,R}k(I,S) ); - recv_4(R,I, M,{Ni,Kir}k(I,S) ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - claim_I3(I, Empty, (Fresh,Kir)); - } - - role R - { - var M : String; - fresh Nr : Nonce; - var Kir : SessionKey; - var T1,T2: Ticket; - - recv_1(I,R, M,I,R, T1 ); - send_2(R,S, M,I,R, T1, { Nr,M,I,R }k(R,S) ); - recv_3(S,R, M, T2, { Nr,Kir }k(R,S) ); - send_4(R,I, M, T2 ); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - claim_R3(R, Empty, (Fresh,Kir)); - } - - role S - { - var Ni,Nr : Nonce; - var M : String; - fresh Kir : SessionKey; - - recv_2(R,S, M,I,R, { Ni,M,I,R}k(I,S), { Nr,M,I,R }k(R,S) ); - send_3(S,R, M, { Ni,Kir }k(I,S) , { Nr,Kir }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/soph.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/soph.spdl deleted file mode 100644 index 3b108514f40d9182acbfbe3746f4a5ec76947b16..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/soph.spdl +++ /dev/null @@ -1,21 +0,0 @@ - -protocol soph(I,R) -{ - role I - { - fresh ni: Nonce; - - send_1(I,R, {I,ni}pk(R) ); - recv_2(R,I, ni ); - claim_3(I,Niagree); - } - - role R - { - var ni: Nonce; - - recv_1(I,R, {I,ni}pk(R) ); - send_2(R,I, ni ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as-cj.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as-cj.spdl deleted file mode 100644 index b393294a0e2524970c0bd0be27db7a38404ce592..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as-cj.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# Clark and Jacob modified Hwang and Chen modified SPLICE/AS -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/spliceas3.html -# -# Note: -# The assumptions made here do not comply with those in SPORE -# SPORE assumes that the agents do not know the pk function, but only -# their own public key values. -# This can currently not be modelled. - - -usertype TimeStamp, LifeTime; - -const inc,dec: Function; -inversekeys (inc,dec); - -protocol spliceAS-CJ(I,R,S) -{ - role I - { - fresh N1,N2: Nonce; - fresh T: TimeStamp; - fresh L: LifeTime; - - send_1(I,S, I, R, N1 ); - recv_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - send_3(I,R, I, R, {T, L, {I, N2}pk(R)}sk(I) ); - recv_6(R,I, R, I, {{N2}inc}pk(I) ); - - claim_7(I, Secret, N2); - claim_9(I, Niagree); - claim_10(I, Nisynch); - } - - role S - { - var N1,N3: Nonce; - - recv_1(I,S, I, R, N1 ); - send_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - recv_4(R,S, R, I, N3 ); - send_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - } - - role R - { - fresh N3: Nonce; - var N2: Nonce; - var T: TimeStamp; - var L: LifeTime; - - var ni: Nonce; - fresh nr: Nonce; - - recv_3(I,R, I, R, {T, L, {I, N2}pk(R)}sk(I) ); - send_4(R,S, R, I, N3 ); - recv_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - send_6(R,I, R, I, {{N2}inc}pk(I) ); - - claim_8(R, Secret, N2); - claim_11(R, Niagree); - claim_12(R, Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as-hc.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as-hc.spdl deleted file mode 100644 index 2f975ad29dad1faaa6150ad4e56dfc83b9c20fb5..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as-hc.spdl +++ /dev/null @@ -1,61 +0,0 @@ -# Hwang and Chen Modified SPLICE/AS -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/spliceas2.html -# - - -usertype TimeStamp, LifeTime; - -const inc,dec: Function; -inversekeys (inc,dec); - -protocol spliceAS-HC(I,R,S) -{ - role I - { - fresh N1,N2: Nonce; - fresh T: TimeStamp; - fresh L: LifeTime; - - send_1(I,S, I, R, N1 ); - recv_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - send_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - recv_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_7(I, Secret, N2); - claim_9(I, Niagree); - claim_10(I, Nisynch); - } - - role S - { - var N1,N3: Nonce; - - recv_1(I,S, I, R, N1 ); - send_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - recv_4(R,S, R, I, N3 ); - send_5(S,R, S, {S, R, N3, I, pk(I)}sk(S) ); - } - - role R - { - fresh N3: Nonce; - var N2: Nonce; - var T: TimeStamp; - var L: LifeTime; - - var ni: Nonce; - fresh nr: Nonce; - - recv_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - send_4(R,S, R, I, N3 ); - recv_5(S,R, S, {S, R, N3, I, pk(I)}sk(S) ); - send_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_8(R, Secret, N2); - claim_11(R, Niagree); - claim_12(R, Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as.spdl deleted file mode 100644 index b1d8e181dee03a611e57770eae47e84b0d9238f3..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/splice-as.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# SPLICE/AS -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/spliceas.html -# -# Note: -# The assumptions made here do not comply with those in SPORE -# SPORE assumes that the agents do not know the pk function, but only -# their own public key values. -# This can currently not be modelled. - - -usertype TimeStamp, LifeTime; - -const inc,dec: Function; -inversekeys (inc,dec); - -protocol spliceAS(I,R,S) -{ - role I - { - fresh N1,N2: Nonce; - fresh T: TimeStamp; - fresh L: LifeTime; - - send_1(I,S, I, R, N1 ); - recv_2(S,I, S, {S, I, N1, pk(R)}sk(S) ); - send_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - recv_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_7(I, Secret, N2); - claim_9(I, Niagree); - claim_10(I, Nisynch); - } - - role S - { - var N1,N3: Nonce; - - recv_1(I,S, I, R, N1 ); - send_2(S,I, S, {S, I, N1, pk(R)}sk(S) ); - recv_4(R,S, R, I, N3 ); - send_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - } - - role R - { - fresh N3: Nonce; - var N2: Nonce; - var T: TimeStamp; - var L: LifeTime; - - var ni: Nonce; - fresh nr: Nonce; - - recv_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - send_4(R,S, R, I, N3 ); - recv_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - send_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_8(R, Secret, N2); - claim_11(R, Niagree); - claim_12(R, Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/tmn.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/tmn.spdl deleted file mode 100644 index c6fb55fecbe88e8ce642f86260ee5bceca08b443..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/tmn.spdl +++ /dev/null @@ -1,51 +0,0 @@ -# TMN -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/tmn.html -# -# Note: -# According to Boyd and Mathuria Kb is the session key this is not clear -# from the description in SPORE -usertype SessionKey; - -const Fresh: Function; -const Compromised: Function; - -protocol tmn(I,R,S) -{ - role I - { - fresh Ki: SessionKey; - var Kr: SessionKey; - - send_1(I,S, R,{Ki}pk(S) ); - recv_4(S,I, R,{Kr}Ki ); - - claim_I1(I,Secret,Kr); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,Kr)); - } - - role R - { - fresh Kr: SessionKey; - - recv_2(S,R, I ); - send_3(R,S, I, { Kr }pk(S) ); - - claim_R1(R,Secret,Kr); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kr)); - } - - role S - { - var Ki,Kr: SessionKey; - - recv_1(I,S, R,{Ki}pk(S) ); - send_2(S,R, I ); - recv_3(R,S, I, { Kr }pk(S) ); - send_4(S,I, R,{Kr}Ki ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf-brutus.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf-brutus.spdl deleted file mode 100644 index c22bdcc233cb9ebd3b702a54e42905c1ad862e5e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf-brutus.spdl +++ /dev/null @@ -1,32 +0,0 @@ -usertype SesKey, Server; - -/* Version from the Brutus reports -*/ - -protocol wmfbrutus(A,B,S) -{ - role A - { - fresh kab : SesKey; - - send_1(A,S, A, { B,kab }k(A,S) ); - } - - role B - { - var kab : SesKey; - - recv_2(S,B, { A, kab }k(B,S) ); - - claim_3(B, Secret,kab); - } - - role S - { - var kab : SesKey; - - recv_1(A,S, A, { B,kab }k(A,S) ); - send_2(S,B, { A, kab }k(B,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf-lowe.spdl deleted file mode 100644 index 0e0de87f2d852889cf5eb101c7c9a0074e26c60c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf-lowe.spdl +++ /dev/null @@ -1,63 +0,0 @@ -# Lowe modified Wide Mouthed Frog -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wideMouthedFrogLowe.html -# -# Note: -# According to SPORE there are no known attacks on this protocol, scyther -# finds one however this has to do with the unusual assumption that every -# agent can recognise and will reject to recv messages that it has created -# itself. - -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; -const succ,pred: Function; -inversekeys (succ,pred); -const Fresh: Function; -const Compromised: Function; - -protocol wmf-Lowe(I,R,S) -{ - role I - { - fresh Kir: SessionKey; - fresh Ti: TimeStamp; - var Kr: SessionKey; - var Nr: Nonce; - - send_1(I,S, I, {Ti, R, Kir}k(I,S)); - recv_3(R,I,{Nr}Kir); - send_4(I,R,{{Nr}succ}Kir); - - claim_I1(I,Secret,Kir); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ts: TimeStamp; - var Kir: SessionKey; - fresh Nr: Nonce; - - recv_2(S,R, {Ts, I, Kir}k(R,S) ); - send_3(R,I, {Nr}Kir); - recv_4(I,R, {{Nr}succ}Kir); - - claim_R1(R,Secret,Kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kir)); - } - - role S - { - var Kir: SessionKey; - fresh Ts: TimeStamp; - var Ti: TimeStamp; - - recv_1(I,S, I,{Ti, R, Kir}k(I,S) ); - send_2(S,R, {Ts, I, Kir}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf.spdl deleted file mode 100644 index 758843ad8db42af3b4250060d47b14d88444938f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/wmf.spdl +++ /dev/null @@ -1,54 +0,0 @@ -# Wide Mouthed Frog -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wideMouthedFrog.html -# -# Note -# The name of the party that has generated a message was added in order -# to model the property described in SPORE that an agent can identify -# its own messages and will reject them. - -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol wmf(I,R,S) -{ - role I - { - fresh Kir: SessionKey; - fresh Ti: TimeStamp; - var Kr: SessionKey; - - send_1(I,S, I, {I, Ti, R, Kir}k(I,S)); - - claim_I1(I,Secret,Kir); - claim_I2(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ts: TimeStamp; - var Kir: SessionKey; - - recv_2(S,R, {S, Ts, I, Kir}k(R,S) ); - - claim_R1(R,Secret,Kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kir)); - } - - role S - { - var Kir: SessionKey; - fresh Ts: TimeStamp; - var Ti: TimeStamp; - - recv_1(I,S, I,{I, Ti, R, Kir}k(I,S) ); - send_2(S,R, {S, Ts, I, Kir}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-1.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-1.spdl deleted file mode 100644 index 7e4e09dc56a0317935e27247354bacd062a41d78..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-1.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi 1 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi1.html -# - -protocol woolamPi-1(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {I,R,Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I,R, T}k(R,S)); - recv_5(S,R, {I,R, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I,R, {I,R,Nr}k(I,S)}k(R,S)); - send_5(S,R, {I,R,Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-2.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-2.spdl deleted file mode 100644 index 5d767d614d01b5755e0b81f4d2eade5f6cb3e776..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-2.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi 2 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi2.html -# - -protocol woolamPi-2(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {I,Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, T}k(R,S)); - recv_5(S,R, {I, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I, {I,Nr}k(I,S)}k(R,S)); - send_5(S,R, {I,Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-3.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-3.spdl deleted file mode 100644 index 1db544e1b58b303e4c51014525bef6096465416a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-3.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi 2 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi3.html -# - -protocol woolamPi-3(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, T}k(R,S)); - recv_5(S,R, {I, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I, {Nr}k(I,S)}k(R,S)); - send_5(S,R, {I,Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-f.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-f.spdl deleted file mode 100644 index 22f028c0e8edc3654b2f162471de803271f53228..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam-pi-f.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi f -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPif.html -# - -protocol woolamPi-f(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {I,R,Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, R, Nr, T}k(R,S)); - recv_5(S,R, {I, R, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I, R, Nr,{I,R,Nr}k(I,S)}k(R,S)); - send_5(S,R, {I, R, Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam.spdl deleted file mode 100644 index 7e28057801d960a6e5dee165249df7a1b2320362..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/woo-lam.spdl +++ /dev/null @@ -1,64 +0,0 @@ -# Woo and Lam Mutual Authentication -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamMutual.html -# - - -usertype SessionKey; - -const Fresh: Function; -const Compromised: Function; - -protocol woolam(I,R,S) -{ - role I - { - fresh N1: Nonce; - var Kir: SessionKey; - var N2: Nonce; - - send_1(I,R, I, N1); - recv_2(R,I, R, N2); - send_3(I,R, {I, R, N1, N2}k(I,S)); - recv_6(R,I, {R, N1, N2, Kir}k(I,S), {N1,N2}Kir); - send_7(I,R, {N2}Kir); - - - claim_I1(I,Secret,Kir); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh N2: Nonce; - var N1: Nonce; - var Kir: SessionKey; - var T1,T2: Ticket; - - recv_1(I,R, I, N1); - send_2(R,I, R, N2); - recv_3(I,R, T1); - send_4(R,S, T1, {I, R, N1, N2}k(R,S)); - recv_5(S,R, T2, {I, N1, N2, Kir}k(R,S)); - send_6(R,I, T2, {N1,N2}Kir); - recv_7(I,R, {N2}Kir); - - claim_R1(R,Secret,Kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kir)); - } - - role S - { - fresh Kir: SessionKey; - var N1,N2: Nonce; - - recv_4(R,S, {I, R, N1, N2}k(I,S), {I, R, N1, N2}k(R,S)); - send_5(S,R, {R, N1, N2, Kir}k(I,S), {I, N1, N2, Kir}k(R,S)); - } -} - - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban-paulson-modified.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban-paulson-modified.spdl deleted file mode 100644 index 13d62a6240e0c03d85dbda88565864d510f405bd..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban-paulson-modified.spdl +++ /dev/null @@ -1,49 +0,0 @@ -// BAN modified version of the yahalom protocol -// -// Modeled as version in Paulson's paper: -// "Relations Between Secrets: Two Formal Analyses of the Yahalom -// Protocol" -// -// Modified (improved) version from page 16. - -usertype Server; -usertype SessionKey; - -protocol yahalom-BAN-Paulson-modified(A,B,S) -{ - role A - { - fresh na: Nonce; - var nb: Nonce; - var ticket: Ticket; - var kab: SessionKey; - - send_1(A,B, A,na); - recv_3(S,A, nb, {B,kab,na}k(A,S), ticket ); - send_4(A,B, ticket, {nb}kab ); - claim_5(A, Secret,kab); - } - - role B - { - fresh nb: Nonce; - var na: Nonce; - var ticket: Ticket; - var kab: SessionKey; - - recv_1(A,B, A,na); - send_2(B,S, B, nb, {A,na}k(B,S) ); - recv_4(A,B, {A,B,kab,nb}k(B,S) , {nb}kab ); - claim_6(B, Secret,kab); - } - - role S - { - fresh kab: SessionKey; - var na,nb: Nonce; - - recv_2(B,S, B, nb, {A,na}k(B,S) ); - send_3(S,A, nb, {B,kab,na}k(A,S), {A,B,kab,nb}k(B,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban-paulson.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban-paulson.spdl deleted file mode 100644 index 7d312ec5019ab680f1e6e1be5462f6b61ec29186..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban-paulson.spdl +++ /dev/null @@ -1,47 +0,0 @@ -// BAN modified version of the yahalom protocol -// -// Modeled as version in Paulson's paper: -// "Relations Between Secrets: Two Formal Analyses of the Yahalom -// Protocol" - -usertype Server; -usertype SessionKey; - -protocol yahalom-BAN-Paulson(A,B,S) -{ - role A - { - fresh na: Nonce; - var nb: Nonce; - var ticket: Ticket; - var kab: SessionKey; - - send_1(A,B, A,na); - recv_3(S,A, {B,kab,na,nb}k(A,S), ticket ); - send_4(A,B, ticket, {nb}kab ); - claim_5(A, Secret,kab); - } - - role B - { - fresh nb: Nonce; - var na: Nonce; - var ticket: Ticket; - var kab: SessionKey; - - recv_1(A,B, A,na); - send_2(B,S, B, {A,na,nb}k(B,S) ); - recv_4(A,B, {A,kab}k(B,S) , {nb}kab ); - claim_6(B, Secret,kab); - } - - role S - { - fresh kab: SessionKey; - var na,nb: Nonce; - - recv_2(B,S, B, {A,na,nb}k(B,S) ); - send_3(S,A, {B,kab,na,nb}k(A,S), {A,kab}k(B,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban.spdl deleted file mode 100644 index 3fa5f84aa0e6160fc0ceddaa175d54ab7f77336f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-ban.spdl +++ /dev/null @@ -1,55 +0,0 @@ -# BAN simplified version of Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalomBAN.html -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol yahalom-BAN(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, Nr, {R,Kir,Ni}k(I,S), T ); - send_4(I,R, T, {Nr}Kir ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - claim_I3(I, Empty, (Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var T: Ticket; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, R, Nr, {I,Ni}k(R,S) ); - recv_4(I,R, {I,Kir,Nr}k(R,S) , {Nr}Kir ); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - claim_R3(R, Empty, (Fresh,Kir)); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, R, Nr, {I,Ni}k(R,S) ); - send_3(S,I, Nr, {R,Kir,Ni}k(I,S), {I,Kir,Nr}k(R,S) ); - } -} - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-lowe.spdl deleted file mode 100644 index 651389d35695a15963733db796cf9ab3445e97ab..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom-lowe.spdl +++ /dev/null @@ -1,53 +0,0 @@ -# Lowe's modified version of Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalomLowe.html -# -# - -usertype SessionKey; - - -protocol yahalom-Lowe(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, {R,Kir,Ni,Nr}k(I,S) ); - send_5(I,R, {I, R, S, Nr}Kir ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, {I,Ni,Nr}k(R,S) ); - recv_4(S,R, {I,Kir}k(R,S)); - recv_5(I,R, {I, R, S, Nr}Kir); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, {I,Ni,Nr}k(R,S) ); - send_3(S,I, {R,Kir,Ni,Nr}k(I,S)); - send_4(S,R, {I,Kir}k(R,S)); - } -} - - diff --git a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom.spdl b/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom.spdl deleted file mode 100644 index 063817fd13578148dc149004508f58ff1208364d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/MultiProtocolAttacks/yahalom.spdl +++ /dev/null @@ -1,52 +0,0 @@ -# Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalom.html -# -# - -usertype SessionKey; - -protocol yahalom(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, {R,Kir,Ni,Nr}k(I,S), T ); - send_4(I,R, T, {Nr}Kir ); - - claim_I1(I, Secret,Kir); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var T: Ticket; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, R, {I,Ni,Nr}k(R,S) ); - recv_4(I,R, {I,Kir}k(R,S) , {Nr}Kir ); - - claim_R1(R, Secret,Kir); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, R, {I,Ni,Nr}k(R,S) ); - send_3(S,I, {R,Kir,Ni,Nr}k(I,S), {I,Kir}k(R,S) ); - - claim(S, Secret, Ni); - claim(S, Secret, Nr); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/NotModelled.txt b/Vagrant Files/shared/scyther/Protocols/NotModelled.txt deleted file mode 100644 index 120e55f9df7edbaa6885fe8a2cc0082a10372df7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/NotModelled.txt +++ /dev/null @@ -1,23 +0,0 @@ -The following protocols have not been modelled for use in Scyther: - -- CAM http://www.lsv.ens-cachan.fr/spore/cam.html -This protocol only consists of one message and corresponding database actions. -The description given in SPORE is unsuitable for formalisation. - -- Diffie Helman http://www.lsv.ens-cachan.fr/spore/diffieHelman.html -This protocol relies on algebraic properties that can not be modelled in -scyther. - -- GJM http://www.lsv.ens-cachan.fr/spore/gjm.html -This protocol contains complicated if-then-else constructions that can -not be modelled in scyther. - -- Gong http://www.lsv.ens-cachan.fr/spore/gong.html -This protocol relies on algebraic properties that can not be modelled in -scyther. - -- SK3 -This protocol relies on algebraic properties that can not be modelled in -scyther. It also has the notion of channels that can not be attacked, -which can not be modelled in scyther either. - diff --git a/Vagrant Files/shared/scyther/Protocols/andrew-ban-concrete.spdl b/Vagrant Files/shared/scyther/Protocols/andrew-ban-concrete.spdl deleted file mode 100644 index 48f52d8f450814a116b7291bdfea1475800f311f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/andrew-ban-concrete.spdl +++ /dev/null @@ -1,67 +0,0 @@ -# BAN concrete Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrewBAN2.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# In order to overcome this a 'dummy' role X has been hadded that recrypts -# a given term crypted with k(I,R) with k(R,I) -# -# Note: -# Recv 4 by the Initatior has been placed after the synchronisation claim -# as it allows trivial synchronisation attacks otherwise (the message is -# completely fresh and can therefore always be replaced by an arbitrary value -# created by the intruder) which are not considered in SPORE -# - -usertype SessionKey; -const Fresh: Function; - -protocol @swapkey(X) -{ - # Protocol added to work around the symmetry problems where k(I,R) != k(R,I) - role X - { - var I,R: Agent; - var T:Ticket; - recv_!X1(X,X,I,R,{T}k(I,R)); - send_!X2(X,X,{T}k(R,I)); - } -} - -protocol andrew-Concrete(I,R) -{ - - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1(I,R, I,ni ); - recv_2(R,I, {ni,kir}k(I,R) ); - send_3(I,R, {ni}kir); - claim_I1(I,Secret,kir); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,kir)); - recv_6(R,I, nr); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,ni ); - send_2(R,I, {ni,kir}k(I,R) ); - recv_3(I,R, {ni}kir); - send_6(R,I, nr); - claim_R1(R,Secret,kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/andrew-ban.spdl b/Vagrant Files/shared/scyther/Protocols/andrew-ban.spdl deleted file mode 100644 index 9ebd566ef451da3ab554d9d1369707272197ff14..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/andrew-ban.spdl +++ /dev/null @@ -1,54 +0,0 @@ -# BAN modified Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrewBAN.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# So it is possile that certain attacks that use this property are not found -# -# Note: -# According to SPORE there are no known attacks on this protocol -# -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol andrew-Ban(I,R) -{ - role I - { - fresh ni: Nonce; - var nr,nr2: Nonce; - var kir: SessionKey; - - send_1(I,R, I,{ni}k(I,R) ); - recv_2(R,I, {ni,nr}k(I,R) ); - send_3(I,R, {nr}k(I,R) ); - recv_4(R,I, {kir,nr2,ni}k(I,R) ); - claim_I1(I,Nisynch); - claim_I2(I,Niagree); - claim_I3(I,Secret, kir); - claim_I4(I,Secret, k(I,R)); - claim_I5(I,Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr,nr2: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,{ni}k(I,R) ); - send_2(R,I, {ni,nr}k(I,R) ); - recv_3(I,R, {nr}k(I,R) ); - send_4(R,I, {kir,nr2,ni}k(I,R) ); - claim_R1(R,Nisynch); - claim_R2(R,Niagree); - claim_R3(R,Secret, kir); - claim_R4(R,Secret, k(I,R)); - claim_R5(R,Empty, (Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/andrew-lowe-ban.spdl b/Vagrant Files/shared/scyther/Protocols/andrew-lowe-ban.spdl deleted file mode 100644 index 04e15f27a67bbe57cd026848e0b715e9602e407b..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/andrew-lowe-ban.spdl +++ /dev/null @@ -1,57 +0,0 @@ -# Lowe modified BAN concrete Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrewLowe.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# So it is possile that certain attacks that use this property are not found -# -# Note: -# Recv 4 by the Initatior has been placed after the synchronisation claim -# as it allows trivial synchronisation attacks otherwise (the message is -# completely fresh and can therefore always be replaced by an arbitrary value -# created by the intruder) which are not considered in SPORE -# -# Note: -# According to SPORE there are no known attacks on this protocol -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol andrew-LoweBan(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1(I,R, I,ni ); - recv_2(R,I, {ni,kir,R}k(I,R) ); - send_3(I,R, {ni}kir ); - claim_I1(I,Nisynch); - claim_I2(I,Secret, kir); - claim_I3(I,Empty, (Fresh,kir)); - recv_4(R,I, nr ); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,ni ); - send_2(R,I, {ni,kir,R}k(I,R) ); - recv_3(I,R, {ni}kir ); - send_4(R,I, nr ); - claim_R1(R,Nisynch); - claim_R2(R,Secret, kir); - claim_R3(R,Empty, (Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/andrew.spdl b/Vagrant Files/shared/scyther/Protocols/andrew.spdl deleted file mode 100644 index b2e663c9ed696af76879b5b0a7c8d474d35e8e96..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/andrew.spdl +++ /dev/null @@ -1,50 +0,0 @@ -# Andrew Secure RPC -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/andrew.html -# -# Note: -# The shared key between I and R is modelled as k(I,R) currently -# there is no way to express that this key is equal to k(R,I) -# So it is possile that certain attacks that use this property are not found -# - -usertype SessionKey; -const succ: Function; -const Fresh: Function; - -protocol andrew(I,R) -{ - role I - { - fresh ni: Nonce; - var nr,nr2: Nonce; - var kir: SessionKey; - - send_1(I,R, I,{ni}k(I,R) ); - recv_2(R,I, {succ(ni),nr}k(I,R) ); - send_3(I,R, {succ(nr)}k(I,R) ); - recv_4(R,I, {kir,nr2}k(I,R) ); - claim_I1(I,Secret,kir); - claim_I2(I,Nisynch); - claim_I3(I,Niagree); - claim_I4(I,Empty,(Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr,nr2: Nonce; - fresh kir: SessionKey; - - recv_1(I,R, I,{ni}k(I,R) ); - send_2(R,I, {succ(ni),nr}k(I,R) ); - recv_3(I,R, {succ(nr)}k(I,R) ); - send_4(R,I, {kir,nr2}k(I,R) ); - claim_R1(R,Secret,kir); - claim_R2(R,Nisynch); - claim_R3(R,Niagree); - claim_R4(R,Empty,(Fresh,kir)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ccitt509-1.spdl b/Vagrant Files/shared/scyther/Protocols/ccitt509-1.spdl deleted file mode 100644 index 29c665ad94b915cc64744e658de3554e987842b8..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ccitt509-1.spdl +++ /dev/null @@ -1,35 +0,0 @@ -# CCITT X.509 (1) -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ccittx509_1.html -# -# Note: -# The attack in SPORE is not found as this is not an attack against -# synchronisation, but an attack against the freshness of Xa and Ya -# which can currently not be modelled in scyther -# - -usertype Timestamp; - -protocol ccitt509-1(I,R) -{ - role I - { - fresh Ta: Timestamp; - fresh Na,Xa,Ya: Nonce; - send_1(I,R, I,{Ta, Na, R, Xa,{Ya}pk(R)}sk(I)); - # claim_2(I,Nisynch); - # This claim is useless as there are no preceding recv events - } - - role R - { - var Ta: Timestamp; - var Na,Xa,Ya: Nonce; - - recv_1(I,R, I,{Ta, Na, R, Xa,{Ya}pk(R)}sk(I)); - claim_3(R,Nisynch); - # There should also be Fresh Xa and Fresh Ya claims here - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ccitt509-1c.spdl b/Vagrant Files/shared/scyther/Protocols/ccitt509-1c.spdl deleted file mode 100644 index b75e069dfdf0989720f0e0cb52139cd0d78a3e71..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ccitt509-1c.spdl +++ /dev/null @@ -1,34 +0,0 @@ -# CCITT X.509 (1c) -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ccittx509_1c.html -# -# Note: -# According to SPORE there are no known attacks on this protocol -# - -hashfunction hash; -usertype Timestamp; - -protocol ccitt509-1c(I,R) -{ - role I - { - fresh Ta: Timestamp; - fresh Na,Xa,Ya: Nonce; - send_1(I,R, I,{Ta, Na, R, Xa,{Ya,{hash(Ya)}sk(I)}pk(R)}sk(I)); - # claim_2(I,Nisynch); - # This claim is useless as there are no preceding receive events - } - - role R - { - var Ta: Timestamp; - var Na,Xa,Ya: Nonce; - - recv_1(I,R, I,{Ta, Na, R, Xa,{Ya,{hash(Ya)}sk(I)}pk(R)}sk(I)); - claim_3(R,Nisynch); - # There should also be Fresh Xa and Fresh Ya claims here - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ccitt509-3.spdl b/Vagrant Files/shared/scyther/Protocols/ccitt509-3.spdl deleted file mode 100644 index 9ad1d3f4361e9f657b1ed06e2b6a252f569fc78f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ccitt509-3.spdl +++ /dev/null @@ -1,45 +0,0 @@ -# CCITT X.509 (3) -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ccittx509_3.html -# -# Note: -# The protocol description also states that Xa and Ya should be fresh -# this can not be verified using scyther -# - -usertype Timestamp; - -protocol ccitt509-3(I,R) -{ - role I - { - fresh Ta: Timestamp; - var Tb: Timestamp; - fresh Na,Xa,Ya: Nonce; - var Xb,Nb,Yb: Nonce; - send_1(I,R, I,{Ta, Na, R, Xa,{Ya}pk(R)}sk(I)); - recv_2(R,I, R,{Tb, Nb, I, Na, Xb,{Yb}pk(I)}sk(R)); - send_3(I,R, I, {Nb}sk(I)); - claim_I1(I,Nisynch); - claim_I2(I,Secret,Ya); - claim_I3(I,Secret,Yb); - } - - role R - { - var Ta: Timestamp; - fresh Tb: Timestamp; - var Na,Xa,Ya: Nonce; - fresh Xb,Yb,Nb: Nonce; - - recv_1(I,R, I,{Ta, Na, R, Xa,{Ya}pk(R)}sk(I)); - send_2(R,I, R,{Tb, Nb, I, Na, Xb,{Yb}pk(I)}sk(R)); - recv_3(I,R, I, {Nb}sk(I)); - claim_R1(R,Nisynch); - claim_R2(R,Secret,Ya); - claim_R3(R,Secret,Yb); - # There should also be Fresh Xa and Fresh Ya claims here - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ccitt509-ban3.spdl b/Vagrant Files/shared/scyther/Protocols/ccitt509-ban3.spdl deleted file mode 100644 index bdf146dd74c09e6b53acff463737d53a19ec83bb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ccitt509-ban3.spdl +++ /dev/null @@ -1,39 +0,0 @@ -# BAN modified version of CCITT X.509 (3) -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ccittx509_3BAN.html -# -# Note: -# The protocol description also states that Xa and Ya should be fresh -# this can not be verified using scyther -# -# Note: -# According to SPORE there are no known attacks on this protocol -# - -protocol ccitt509-ban3(I,R) -{ - role I - { - fresh Na,Xa,Ya: Nonce; - var Xb,Nb,Yb: Nonce; - - send_1(I,R, I,{Na, R, Xa,{Ya}pk(R)}sk(I)); - recv_2(R,I, R,{Nb, I, Na, Xb,{Yb}pk(I)}sk(R)); - send_3(I,R, I,{R, Nb}sk(I)); - claim_4(I,Nisynch); - } - - role R - { - var Na,Xa,Ya: Nonce; - fresh Xb,Yb,Nb: Nonce; - - recv_1(I,R, I,{Na, R, Xa,{Ya}pk(R)}sk(I)); - send_2(R,I, R,{Nb, I, Na, Xb,{Yb}pk(I)}sk(R)); - recv_3(I,R, I,{R, Nb}sk(I)); - claim_5(R,Nisynch); - # There should also be Fresh Xa and Fresh Ya claims here - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/denning-sacco-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/denning-sacco-lowe.spdl deleted file mode 100644 index 761c22be95b6521645e97635df3c95bab5ba150a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/denning-sacco-lowe.spdl +++ /dev/null @@ -1,67 +0,0 @@ -# Lowe modified Denning-Sacco shared key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/denningSaccoLowe.html -# -# Note: -# According to SPORE there are no attacks on this protocol. Scyther -# finds a straightforward pre-play attack on the first message, which -# violates synchronisation. However, this does not seem to be a -# practical attack unless consistency is required, e.g., for logging or -# auditing. - -usertype Key; -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; -usertype PseudoFunction; -const dec: PseudoFunction; -const Fresh: Function; -const Compromised: Function; - -protocol denningSacco-Lowe(I,R,S) -{ - role I - { - var W: Ticket; - var Kir: SessionKey; - var T: TimeStamp; - var Nr: Nonce; - - send_1(I,S, I,R ); - recv_2(S,I, {R, Kir, T, W}k(I,S) ); - send_3(I,R, W); - recv_4(R,I, {Nr}Kir); - send_5(I,R, {{Nr}dec}Kir); - claim_I1(I,Niagree); - claim_I2(I,Nisynch); - claim_I3(I,SKR,Kir); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - var Kir: SessionKey; - var T: TimeStamp; - fresh Nr: Nonce; - - recv_3(I,R, {Kir,I,T}k(R,S)); - send_4(R,I, {Nr}Kir); - recv_5(I,R, {{Nr}dec}Kir); - claim_R1(R,Niagree); - claim_R2(R,Nisynch); - claim_R3(R,Secret,Kir); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var W: Ticket; - fresh Kir: SessionKey; - fresh T: TimeStamp; - - recv_1(I,S, I,R ); - send_2(S,I, {R, Kir, T, {Kir, I,T}k(R,S)}k(I,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/denning-sacco.spdl b/Vagrant Files/shared/scyther/Protocols/denning-sacco.spdl deleted file mode 100644 index d77402f93a5f42e016850cd0d73876effacc7286..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/denning-sacco.spdl +++ /dev/null @@ -1,53 +0,0 @@ -# Denning-Sacco shared key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/denningSacco.html -# - -usertype Key; -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; -const Fresh: Function; -const Compromised: Function; - -protocol denningSacco(I,R,S) -{ - role I - { - var W: Ticket; - var Kir: SessionKey; - var T: TimeStamp; - - send_1(I,S, I,R ); - recv_2(S,I, {R, Kir, T, W}k(I,S) ); - send_3(I,R, W); - claim_I1(I,Niagree); - claim_I2(I,Nisynch); - claim_I3(I,Secret,Kir); - claim_I4(I,Empty, (Fresh,Kir)); - } - - role R - { - var Kir: SessionKey; - var T: TimeStamp; - - recv_3(I,R, {Kir,I,T}k(R,S)); - claim_R1(R,Niagree); - claim_R2(R,Nisynch); - claim_R3(R,Secret,Kir); - claim_R4(R,Empty, (Fresh,Kir)); - } - - role S - { - var W: Ticket; - fresh Kir: SessionKey; - fresh T: TimeStamp; - - recv_1(I,S, I,R ); - send_2(S,I, {R, Kir, T, {Kir, I,T}k(R,S)}k(I,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/kaochow-v2.spdl b/Vagrant Files/shared/scyther/Protocols/kaochow-v2.spdl deleted file mode 100644 index 638a54b7cdd3722fbac37a1b9241b855246d4ea7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/kaochow-v2.spdl +++ /dev/null @@ -1,55 +0,0 @@ -# Kao Chow Authentication v.2 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kaoChow2.html -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol kaochow-2(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir,kt: SessionKey; - - send_1 (I,S, I,R,ni); - recv_3 (R,I, R, {I,R,ni,kir,kt}k(I,S), {ni, kir}kt, nr ); - send_4 (I,R, {nr,kir}kt ); - - claim_I1 (I, Nisynch); - claim_I2 (I, Niagree); - claim_I3 (I, Secret, kir); - claim_I4 (I, Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var kir,kt: SessionKey; - var T: Ticket; - - recv_2 (S,R, T, { I,R,ni,kir,kt }k(R,S) ); - send_3 (R,I, R, T, {ni, kir}kt, nr ); - recv_4 (I,R, {nr,kir}kt ); - - claim_R1 (R, Nisynch); - claim_R2 (R, Niagree); - claim_R3 (R, Secret, kir); - claim_R4 (R, Empty, (Fresh,kir)); - } - - role S - { - var ni: Nonce; - fresh kir, kt: SessionKey; - - recv_1 (I,S, I,R,ni); - send_2 (S,R, {I,R,ni,kir,kt}k(I,S), { I,R,ni,kir,kt }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/kaochow-v3.spdl b/Vagrant Files/shared/scyther/Protocols/kaochow-v3.spdl deleted file mode 100644 index 88cef24fd8e955769d166e75f879caed7f30f7fe..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/kaochow-v3.spdl +++ /dev/null @@ -1,59 +0,0 @@ -# Kao Chow Authentication v.3 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kaoChow3.html -# - -usertype SessionKey; -usertype ExpiredTimeStamp; -usertype TimeStamp; -const Fresh: Function; -const Compromised: Function; - -protocol kaochow-3(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir,kt: SessionKey; - var T2: Ticket; - - send_1 (I,S, I,R,ni); - recv_3 (R,I, {I,R,ni,kir,kt}k(I,S), {ni, kir}kt, nr, T2 ); - send_4 (I,R, {nr,kir}kt, T2 ); - - claim_I1 (I, Nisynch); - claim_I2 (I, Niagree); - claim_I3 (I, Secret, kir); - claim_I4 (I, Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var kir,kt: SessionKey; - var T: Ticket; - fresh tr: TimeStamp; - - recv_2 (S,R, T, { I,R,ni,kir,kt }k(R,S) ); - send_3 (R,I, T, {ni, kir}kt, nr, {I,R,tr,kir}k(R,S) ); - recv_4 (I,R, {nr,kir}kt, {I,R,tr,kir}k(R,S) ); - - claim_R1 (R, Nisynch); - claim_R2 (R, Niagree); - claim_R3 (R, Secret, kir); - claim_R4 (R, Empty, (Fresh,kir)); - } - - role S - { - var ni: Nonce; - fresh kir, kt: SessionKey; - - recv_1 (I,S, I,R,ni); - send_2 (S,R, {I,R,ni,kir,kt}k(I,S), { I,R,ni,kir,kt }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/kaochow.spdl b/Vagrant Files/shared/scyther/Protocols/kaochow.spdl deleted file mode 100644 index 1c6c827982ce289073ffc12103fe5accd1b95462..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/kaochow.spdl +++ /dev/null @@ -1,55 +0,0 @@ -# Kao Chow Authentication v.1 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kaoChow1.html -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol kaochow(I,R,S) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - var kir: SessionKey; - - send_1 (I,S, I,R,ni); - recv_3 (R,I, {I,R,ni,kir}k(I,S), {ni}kir, nr ); - send_4 (I,R, {nr}kir ); - - claim_I1 (I, Nisynch); - claim_I2 (I, Niagree); - claim_I3 (I, Secret, kir); - claim_I4 (I, Empty, (Fresh,kir)); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - var kir: SessionKey; - var T; - - recv_2 (S,R, T, { I,R,ni,kir }k(R,S) ); - send_3 (R,I, T, {ni}kir, nr ); - recv_4 (I,R, {nr}kir ); - - claim_R1 (R, Nisynch); - claim_R2 (R, Niagree); - claim_R3 (R, Secret, kir); - claim_R4 (R, Empty, (Fresh,kir)); - } - - role S - { - var ni: Nonce; - fresh kir: SessionKey; - - recv_1 (I,S, I,R,ni); - send_2 (S,R, {I,R,ni,kir}k(I,S), { I,R,ni,kir }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ksl-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/ksl-lowe.spdl deleted file mode 100644 index 29996d84cf4ef0760dcd4b3fd43d76ad09014867..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ksl-lowe.spdl +++ /dev/null @@ -1,73 +0,0 @@ -# Lowe modified KSL -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/kslLowe.html -# -# Note: -# According to SPORE there are no attacks on this protocol, scyther -# finds one however. This has to be investigated further. - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol ksl-Lowe(I,R,S) -{ - role I - { - fresh Ni, Mi: Nonce; - var Nc, Mr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, Ni, I); - recv_4(R,I, { Ni,R,Kir }k(I,S), T, Nc, {R,Ni}Kir ); - send_5(I,R, { Nc }Kir ); - - send_6(I,R, Mi,T ); - recv_7(R,I, Mr,{Mi, R}Kir ); - send_8(I,R, {I,Mr}Kir ); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty, (Fresh,Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Nc,Mr: Nonce; - var Kir: SessionKey; - fresh Kbb: TicketKey; - fresh Tr: TimeStamp; - var T: Ticket; - - recv_1(I,R, Ni, I); - send_2(R,S, Ni, I, Nr, R ); - recv_3(S,R, { I, Nr, Kir }k(R,S), T ); - send_4(R,I, T, { Tr, I, Kir }Kbb, Nc, {R, Ni}Kir ); - recv_5(I,R, { Nc }Kir ); - - recv_6(I,R, Mi,{ Tr, I, Kir }Kbb ); - send_7(R,I, Mr,{Mi,R}Kir ); - recv_8(I,R, {I,Mr}Kir ); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty, (Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - - recv_2(R,S, Ni, I, Nr, R ); - send_3(S,R, { I, Nr, Kir }k(R,S), { Ni,R,Kir }k(I,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/ksl.spdl b/Vagrant Files/shared/scyther/Protocols/ksl.spdl deleted file mode 100644 index 7cfca44d4280a938a3d1be97003088bfdf924796..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/ksl.spdl +++ /dev/null @@ -1,72 +0,0 @@ -# KSL -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/ksl.html -# -# - - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol ksl(I,R,S) -{ - role I - { - fresh Ni, Mi: Nonce; - var Nc, Mr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, Ni, I); - recv_4(R,I, { Ni,R,Kir }k(I,S), T, Nc, {Ni}Kir ); - send_5(I,R, { Nc }Kir ); - - send_6(I,R, Mi,T ); - recv_7(R,I, Mr,{Mi}Kir ); - send_8(I,R, {Mr}Kir ); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty, (Fresh, Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Nc,Mr: Nonce; - var Kir: SessionKey; - fresh Kbb: TicketKey; - fresh Tr: TimeStamp; - var T: Ticket; - - recv_1(I,R, Ni, I); - send_2(R,S, Ni, I, Nr, R ); - recv_3(S,R, { Nr, I, Kir }k(R,S), T ); - send_4(R,I, T, { Tr, I, Kir }Kbb, Nc, {Ni}Kir ); - recv_5(I,R, { Nc }Kir ); - - recv_6(I,R, Mi,{ Tr, I, Kir }Kbb ); - send_7(R,I, Mr,{Mi}Kir ); - recv_8(I,R, {Mr}Kir ); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - - recv_2(R,S, Ni, I, Nr, R ); - send_3(S,R, { Nr, I, Kir }k(R,S), { Ni,R,Kir }k(I,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/multi-NSL/heuristics-results.txt b/Vagrant Files/shared/scyther/Protocols/multi-NSL/heuristics-results.txt deleted file mode 100644 index cc55c31afa6b5e067be78a61d642e5dd623b1a3a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/multi-NSL/heuristics-results.txt +++ /dev/null @@ -1,776 +0,0 @@ -Slave1:multiparty% ./test-heuristics.py -Starting with [11, 15] -Testing using P 3 and 5 runs. -Testing protocol 11. -Heuristic 0: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=0 --timer=20 -states 7488 -attack NoClaim -time 2.007e+01 -st/sec 3.731e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 1: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=1 --timer=20 -states 3869 -attack NoClaim -time 2.004e+01 -st/sec 1.931e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 2: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=2 --timer=20 -states 6543 -attack NoClaim -time 2.006e+01 -st/sec 3.262e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 3: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=3 --timer=20 -states 9003 -attack NoClaim -time 2.005e+01 -st/sec 4.490e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 1 correct: bounded_proof -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 4: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=4 --timer=20 -states 6375 -attack NoClaim -time 2.008e+01 -st/sec 3.175e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 5: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=5 --timer=20 -states 4282 -attack NoClaim -time 2.007e+01 -st/sec 2.134e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 4 correct: bounded_proof time=20 -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 6: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=6 --timer=20 -states 6791 -attack NoClaim -time 2.002e+01 -st/sec 3.392e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 7: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=7 --timer=20 -states 8115 -attack NoClaim -time 2.004e+01 -st/sec 4.049e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 14 correct: bounded_proof time=20 -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 8: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=8 --timer=20 -states 9649 -attack NoClaim -time 2.003e+01 -st/sec 4.817e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 9: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=9 --timer=20 -states 3873 -attack NoClaim -time 2.005e+01 -st/sec 1.932e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 10: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=10 --timer=20 -states 11954 -attack NoClaim -time 2.007e+01 -st/sec 5.956e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 11: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=11 --timer=20 -states 7367 -attack NoClaim -time 2.003e+01 -st/sec 3.678e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 12: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=12 --timer=20 -states 6271 -attack NoClaim -time 2.005e+01 -st/sec 3.128e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 13: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=13 --timer=20 -states 4729 -attack NoClaim -time 2.006e+01 -st/sec 2.357e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 14: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=14 --timer=20 -states 7566 -attack NoClaim -time 2.002e+01 -st/sec 3.779e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 15: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=15 --timer=20 -states 8496 -attack NoClaim -time 2.005e+01 -st/sec 4.237e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 16: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=16 --timer=20 -states 7453 -attack NoClaim -time 2.003e+01 -st/sec 3.721e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 17: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=17 --timer=20 -states 3888 -attack NoClaim -time 2.004e+01 -st/sec 1.940e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 18: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=18 --timer=20 -states 6582 -attack NoClaim -time 2.003e+01 -st/sec 3.286e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 19: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=19 --timer=20 -states 9022 -attack NoClaim -time 2.001e+01 -st/sec 4.509e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 1 correct: bounded_proof -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 20: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=20 --timer=20 -states 6393 -attack NoClaim -time 2.003e+01 -st/sec 3.192e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 21: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=21 --timer=20 -states 4284 -attack NoClaim -time 2.002e+01 -st/sec 2.140e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 4 correct: bounded_proof time=20 -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 22: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=22 --timer=20 -states 6769 -attack NoClaim -time 2.001e+01 -st/sec 3.383e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 23: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=23 --timer=20 -states 8175 -attack NoClaim -time 2.002e+01 -st/sec 4.083e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 14 correct: bounded_proof time=20 -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 24: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=24 --timer=20 -states 9625 -attack NoClaim -time 2.003e+01 -st/sec 4.805e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 25: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=25 --timer=20 -states 3883 -attack NoClaim -time 2.002e+01 -st/sec 1.940e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 26: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=26 --timer=20 -states 11992 -attack NoClaim -time 2.004e+01 -st/sec 5.984e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 27: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=27 --timer=20 -states 7361 -attack NoClaim -time 2.004e+01 -st/sec 3.673e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 28: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=28 --timer=20 -states 6277 -attack NoClaim -time 2.004e+01 -st/sec 3.132e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 29: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=29 --timer=20 -states 4728 -attack NoClaim -time 2.005e+01 -st/sec 2.358e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 30: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=30 --timer=20 -states 7610 -attack NoClaim -time 2.004e+01 -st/sec 3.797e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 31: -./multinsl-generator.py 3 11 | scyther -a -r5 -m2 --summary --goal-select=31 --timer=20 -states 8506 -attack NoClaim -time 2.003e+01 -st/sec 4.247e+02 -claim mnsl3v11 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v11 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v11 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v11 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v11 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Testing protocol 15. -Heuristic 0: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=0 --timer=20 -states 7499 -attack NoClaim -time 2.003e+01 -st/sec 3.744e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 1: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=1 --timer=20 -states 3866 -attack NoClaim -time 2.004e+01 -st/sec 1.929e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 2: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=2 --timer=20 -states 6558 -attack NoClaim -time 2.003e+01 -st/sec 3.274e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 3: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=3 --timer=20 -states 8933 -attack NoClaim -time 2.002e+01 -st/sec 4.462e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 1 correct: bounded_proof -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 4: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=4 --timer=20 -states 6354 -attack NoClaim -time 2.002e+01 -st/sec 3.174e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 5: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=5 --timer=20 -states 4278 -attack NoClaim -time 2.004e+01 -st/sec 2.135e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 4 correct: bounded_proof time=20 -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 6: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=6 --timer=20 -states 6749 -attack NoClaim -time 2.002e+01 -st/sec 3.371e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 7: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=7 --timer=20 -states 8166 -attack NoClaim -time 2.003e+01 -st/sec 4.077e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 14 correct: bounded_proof time=20 -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 8: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=8 --timer=20 -states 9805 -attack NoClaim -time 2.006e+01 -st/sec 4.888e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 9: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=9 --timer=20 -states 3873 -attack NoClaim -time 2.004e+01 -st/sec 1.933e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 10: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=10 --timer=20 -states 10729 -attack NoClaim -time 2.006e+01 -st/sec 5.348e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 11: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=11 --timer=20 -states 6679 -attack NoClaim -time 2.005e+01 -st/sec 3.331e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 12: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=12 --timer=20 -states 6119 -attack NoClaim -time 2.005e+01 -st/sec 3.052e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 13: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=13 --timer=20 -states 3513 -attack NoClaim -time 2.009e+01 -st/sec 1.749e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 14: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=14 --timer=20 -states 7548 -attack NoClaim -time 2.004e+01 -st/sec 3.766e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 15: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=15 --timer=20 -states 8461 -attack NoClaim -time 2.002e+01 -st/sec 4.226e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 16: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=16 --timer=20 -states 7503 -attack NoClaim -time 2.003e+01 -st/sec 3.746e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 17: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=17 --timer=20 -states 3837 -attack NoClaim -time 2.003e+01 -st/sec 1.916e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 18: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=18 --timer=20 -states 6537 -attack NoClaim -time 2.005e+01 -st/sec 3.260e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 19: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=19 --timer=20 -states 8893 -attack NoClaim -time 2.004e+01 -st/sec 4.438e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 1 correct: bounded_proof -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 20: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=20 --timer=20 -states 6325 -attack NoClaim -time 2.003e+01 -st/sec 3.158e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 21: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=21 --timer=20 -states 4253 -attack NoClaim -time 2.005e+01 -st/sec 2.121e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 4 correct: bounded_proof time=20 -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 22: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=22 --timer=20 -states 6756 -attack NoClaim -time 2.004e+01 -st/sec 3.371e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 23: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=23 --timer=20 -states 8149 -attack NoClaim -time 2.003e+01 -st/sec 4.068e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 14 correct: bounded_proof time=20 -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 24: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=24 --timer=20 -states 9785 -attack NoClaim -time 2.004e+01 -st/sec 4.883e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 25: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=25 --timer=20 -states 3832 -attack NoClaim -time 2.006e+01 -st/sec 1.910e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 26: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=26 --timer=20 -states 10699 -attack NoClaim -time 2.009e+01 -st/sec 5.326e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 27: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=27 --timer=20 -states 6672 -attack NoClaim -time 2.006e+01 -st/sec 3.326e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 28: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=28 --timer=20 -states 6136 -attack NoClaim -time 2.010e+01 -st/sec 3.053e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 29: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=29 --timer=20 -states 3521 -attack NoClaim -time 2.009e+01 -st/sec 1.753e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 30: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=30 --timer=20 -states 7584 -attack NoClaim -time 2.006e+01 -st/sec 3.781e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 -Heuristic 31: -./multinsl-generator.py 3 15 | scyther -a -r5 -m2 --summary --goal-select=31 --timer=20 -states 8369 -attack NoClaim -time 2.004e+01 -st/sec 4.176e+02 -claim mnsl3v15 R2V Nisynch_R2b found: 0 correct: does_not_occur -claim mnsl3v15 R2V Secret_R2a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R1V Nisynch_R1b found: 0 correct: does_not_occur -claim mnsl3v15 R1V Secret_R1a found: 1 correct: bounded_proof time=20 -claim mnsl3v15 R0V Nisynch_R0b found: 0 correct: does_not_occur -claim mnsl3v15 R0V Secret_R0a found: 1 correct: bounded_proof time=20 - - -13,25 work well. diff --git a/Vagrant Files/shared/scyther/Protocols/multi-NSL/mnsl-results.txt b/Vagrant Files/shared/scyther/Protocols/multi-NSL/mnsl-results.txt deleted file mode 100644 index a04a56f8cf33f9caafa445e7b4f55613f19ac337..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/multi-NSL/mnsl-results.txt +++ /dev/null @@ -1,33 +0,0 @@ -Report: -------- - -Using P 3 and 2 runs, we find attacks on [1, 5, 9, 13, 18, 22, 26, 30] -Using P 3 and 3 runs, we find attacks on [0, 3, 4, 7, 16, 19, 20, 23] -Using P 3 and 4 runs, we find attacks on [2, 6, 10, 14, 17, 21, 27, 31] -Using P 3 and 5 runs, we find attacks on [25, 29] -Using P 4 and 3 runs, we find attacks on [8, 24] -Using P 4 and 5 runs, we find attacks on [12, 28] - -Log: ----- -Slave1:multiparty% ./test-variants.py -Testing using P 3 and 2 runs. -Using P 3 and 2 runs, we find attacks on [1, 5, 9, 13, 18, 22, 26, 30] -Therefore, we are left with 24 candidates: [0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 27, 28, 29, 31] -Testing using P 3 and 3 runs. -Using P 3 and 3 runs, we find attacks on [0, 3, 4, 7, 16, 19, 20, 23] -Therefore, we are left with 16 candidates: [2, 6, 8, 10, 11, 12, 14, 15, 17, 21, 24, 25, 27, 28, 29, 31] -Testing using P 3 and 4 runs. -Using P 3 and 4 runs, we find attacks on [2, 6, 10, 14, 17, 21, 27, 31] -Therefore, we are left with 8 candidates: [8, 11, 12, 15, 24, 25, 28, 29] -Testing using P 3 and 5 runs. -Using P 3 and 5 runs, we find attacks on [25, 29] -Therefore, we are left with 6 candidates: [8, 11, 12, 15, 24, 28] -Testing using P 4 and 3 runs. -Using P 4 and 3 runs, we find attacks on [8, 24] -Therefore, we are left with 4 candidates: [11, 12, 15, 28] -Testing using P 4 and 4 runs. -Testing using P 4 and 5 runs. -Using P 4 and 5 runs, we find attacks on [12, 28] -Therefore, we are left with 2 candidates: [11, 15] -Testing using P 4 and 6 runs. diff --git a/Vagrant Files/shared/scyther/Protocols/multi-NSL/multinsl-generator.py b/Vagrant Files/shared/scyther/Protocols/multi-NSL/multinsl-generator.py deleted file mode 100644 index ad44870559288c663b6e450cd3beeba9dc2b401d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/multi-NSL/multinsl-generator.py +++ /dev/null @@ -1,345 +0,0 @@ -#!/usr/bin/python -# -# Generate Multi-party NSL protocol description for n parties -# -# Input: P variant -# -# variant uses some bits: -# bit mask meaning if set to '1' -# (message type 1) -# 0 1 nonces in reverse -# 1 2 nonces after agents -# 2 4 agents in reverse -# 3 8 interleaved variant -# (message type 2) -# 4 16 nonces in reverse in message 2 -# -# Convention similar to e.g. Prolog: capitals indicate open variables; -# in particular, they can be bound by _any_ value during the run, -# assuming full type flaws. -# -import sys -from optparse import OptionParser - -def parseArgs(): - usage = "usage: %s [opts] Parties Variant" % sys.argv[0] - parser = OptionParser(usage=usage) - parser.add_option('-p','--protocol', dest='protocol', - help='Generate another protocol [nsl,bke]', default="nsl", - action='store') - (opts, args) = parser.parse_args() - if len(args) != 2: - parser.print_help() - sys.exit(0) - if opts.protocol not in ["nsl","bke","nsl-priv-noprop","nsl-pub-nap","bke-nap"]: - print "I don't know the %s protocol." % (opts.protocol) - sys.exit(0) - return (opts,args) - - -def variablerole (r, inrole): - if r == inrole or inrole == 0: - return False - else: - return True - -def role (r,inrole): - global P - - return "r%i" % (r % P) - -def zeroconst (): - - """ This is 0 or some other stupid constant """ - - return "zeroconst" - -def nonce (r,inrole): - global P - - if r == inrole: - # nonce of our own - return "n%i" % (r % P) - else: - # a variable: we want to see this in the notation - return "N%i" % (r % P) - -def extend (s1, s2): - if s1 == "": - return s2 - else: - return s1 + "," + s2 - -def weavel (l1,l2,reverse1,swap,reverse2,interleave): - """ l1 is typically a list of nonces, l2 might be empty (names) """ - global variant - - if reverse1: - l1.reverse() - if l2 == []: - return l1 - else: - if reverse2: - l2.reverse() - if swap: - # swap - l3 = l1 - l1 = l2 - l2 = l3 - if interleave: - rl = [] - largest = max(len(l1),len(l2)) - for i in range (0,largest): - if i < len(l1): - rl.append(l1[i]) - if i < len(l2): - rl.append(l2[i]) - return rl - else: - return l1 + l2 - -def message1 (label,inrole): - global P,variant,opts - - if opts.protocol in ['bke','nsl']: - noncelist = [] - for i in range(0,label+1): - noncelist.append(nonce(i,inrole)) - rolelist = [] - for i in range(0,P): - if i != (label+1) % P: - rolelist.append(role(i,inrole)) - - return ",".join(weavel(noncelist,rolelist, - (variant & 1 != 0), - (variant & 2 != 0), - (variant & 4 != 0), - (variant & 8 != 0) - )) - elif opts.protocol == 'nsl-priv-noprop': - - list = [] - for i in range(0,P): - list.append(role(i,inrole)) - list.append(nonce(0,inrole)) - msg = ",".join(list) - - for i in range(1,label+1): - msg = "{ %s,%s }sk(%s)" % (msg,nonce(i,inrole),role(i,inrole)) - - return msg - - elif opts.protocol == 'nsl-pub-nap': - - list = [] - for i in range(0,P): - list.append(role(i,inrole)) - list.append(nonce(0,inrole)) - msg = ",".join(list) - - for i in range(1,label+1): - msg = "{ %s }sk(%s), %s" % (msg,role(i,inrole),nonce(i,inrole)) - - msg = "{ %s }pk(%s)" % (msg,role(label+1,inrole)) - - return msg - elif opts.protocol == 'bke-nap': - - list = [] - for i in range(0,P): - list.append(role(i,inrole)) - list.append(nonce(0,inrole)) - msg = ",".join(list) - - for i in range(1,label+1): - msg = "{ %s }sk(%s), %s" % (msg,role(i,inrole),nonce(i,inrole)) - - msg = "{ %s }pk(%s)" % (msg,role(label+1,inrole)) - - return msg - else: - print "Hmm, I don't know how to create the first message for protocol %s" % (opts.protocol) - -def message2 (label,inrole): - global P,variant,opts - - if opts.protocol == "nsl": - noncelist = [] - for i in range (((label + 1) % P),P): - noncelist.append(nonce(i,inrole)) - - return ",".join(weavel(noncelist,[], - (variant & 16 != 0), - False, - False, - False - )) - elif opts.protocol == "bke": - noncelist = [] - for i in range (((label + 1) % P) + 1,P): - noncelist.append(nonce(i,inrole)) - if len(noncelist) == 0: - noncelist.append(zeroconst()) - - return ",".join(weavel(noncelist,[], - (variant & 16 != 0), - False, - False, - False - )) - elif opts.protocol in ['nsl-priv-noprop','nsl-pub-nap']: - msg = message1(P-1,inrole) - for i in range(0,label-P+1): - msg = "{ %s }sk(%s)" % (msg,role(i,inrole)) - - if opts.protocol == 'nsl-pub-nap': - msg = "{ %s }pk(%s)" % (msg,role(label+1,inrole)) - - return msg - elif opts.protocol == 'bke-nap': - msg = message1(P-1,inrole) - for i in range(0,label-P+1): - msg = "{ %s }sk(%s)" % (msg,role(i,inrole)) - - msg = "{ %s }%s" % (msg,nonce((label+1) % P,inrole)) - - return msg - else: - print "Hmm, I don't know how to create the final message for protocol %s" % (opts.protocol) - -def message (label,inrole): - global P,opts - - if opts.protocol in ['bke','nsl']: - s = "{ " - if label < P: - s = s + message1 (label,inrole) - else: - s = s + message2 (label,inrole) - - if opts.protocol == "bke" and not (label < P): - s = s + " }" + nonce((label+1) % P, inrole) - else: - s = s + " }pk(%s)" % role(label+1,inrole) - return s - else: - if label < P: - return message1 (label,inrole) - else: - return message2 (label,inrole) - - -def action (event,label,inrole): - s = "\t\t%s_%i(%s,%s, " % (event,label, role(label,inrole), - role(label+1,inrole)) - s += message (label,inrole) - s += " );\n" - return s - -def recv (label,inrole): - return action ("recv", label,inrole) - - -def send (label,inrole): - return action ("send", label,inrole) - -def roledef (r): - global P,opts - - s = "" - s += "\trole " + role(r,r) + "\n\t{\n" - - # constants for this role - - s += "\t\tconst " + nonce (r,r) + ": Nonce;\n" - - # variables - - s += "\t\tvar " - nr = 0 - for i in range (0,P): - if r != i: - if nr > 0: - s += "," - s += nonce(i,r) - nr += 1 - - s += ": Nonce;\n" - - # implicit role variables - - rolevars = [] - for i in range (0,P): - if variablerole(i,r): - rolevars.append(role(i,r)) - - if rolevars != []: - s += "\t\t// Implicit role variables: " - s += ",".join(rolevars) - s += ": Role;\n" - - # actions - - s += "\n" - if r > 0: - # Initial recv - s += recv(r-1,r) - s += send(r,r) - s += recv(P+r-1,r) - if r < (P-1): - # Final send - s += send(P+r,r) - - # claims - - if opts.protocol in ['bke','nsl','nsl-pub-nap','bke-nap']: - s += "\t\tclaim_%sa( %s, Secret, %s );\n" % (role(r,r), role(r,r), - nonce(r,r)) - s += "\t\tclaim_%sb( %s, Nisynch );\n" % (role(r,r), role(r,r)) - - # close - s += "\t}\n\n" - return s - - -def protocol (args): - global P,variant,opts - - P = int(args[0]) - variant = int(args[1]) - - s = "" - s += "// Generalized %s protocol for %i parties\n\n" % (opts.protocol,P) - s += "// " + str(opts) + "\n\n" - s += "// Variant %i\n" % variant - - if opts.protocol == "bke": - s += "usertype Globalconstant;\n" - s += "const %s: Globalconstant;\n" % (zeroconst()) - - s += "\n" - - s += "protocol mnsl%iv%i(" % (P,variant) - for i in range (0,P): - if i > 0: - s += "," - s += role(i,i) - s += ")\n{\n" - - for i in range (0,P): - s += roledef(i) - - s += "}\n\n" - - s += "\n" - return s - -def main(): - global opts - - (opts,args) = parseArgs() - print protocol(args) - -# Only if main stuff -if __name__ == '__main__': - main() diff --git a/Vagrant Files/shared/scyther/Protocols/multi-NSL/test-heuristics.py b/Vagrant Files/shared/scyther/Protocols/multi-NSL/test-heuristics.py deleted file mode 100644 index 34c03fc5abe89998e790981f56c3fc78ba7233bf..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/multi-NSL/test-heuristics.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/python -# -# -# Idea: -# -# We test all options for the heuristics [0..31] to compare, -# and sincerely hope on gives a complete proof. -# we slowly refine the tests. -# -import commands - -def startset(): - mainlist = [11, 15] - print "Starting with", mainlist - return mainlist - -def tuplingchoice(heur,variant,P,runs,latupling): - # variant is in range [0..64>, - # where we use the highest bid to signify the - # associativity of the tupling. - - extraflags = "" - if latupling: - extraflags += " --la-tupling" - - # Choose heuristics - extraflags += " --goal-select=%i" % (heur) - - # Time limit - extraflags += " --timer=20" - - s = "./multinsl-generator.py" - s += " %i %i" % (P,variant) - s += " | scyther -a -r%i -m2 --summary %s" % (runs, extraflags) - - ## Old stuff - #s += " | scyther -a -r%i --summary" % runs - - # Show what we're doing - print s - - #s += " | grep \"complete\"" - out = commands.getoutput(s) - if out == "": - #print "Okay" - return False - else: - print out - return True - -def testvariant(h,v,p,r): - if tuplingchoice (h,v,p,r, False): - return True - else: - return tuplingchoice (h,v,p,r, True) - -def scan(testlist, P, runs): - print "Testing using P %i and %i runs." % (P,runs) - for i in testlist: - print "Testing protocol %i." % (i) - for h in range (0,32): - print "Heuristic %i:" % (h) - testvariant (h,i,P,runs) - -def main(): - candidates = startset() - scan(candidates,3,5) - -main() diff --git a/Vagrant Files/shared/scyther/Protocols/multi-NSL/test-variants.py b/Vagrant Files/shared/scyther/Protocols/multi-NSL/test-variants.py deleted file mode 100644 index ae00ce71877c9fc71c11fc4fa5ed89756082e99f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/multi-NSL/test-variants.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/python -# -# -# Idea: -# -# We test all variants [0..31] until we are sure they work. Thus, -# we slowly refine the tests. -# -import commands - -def startset(): - return range(0,32) - - mainlist = [11, 15] - print "Starting with", mainlist - return mainlist - -def tuplingchoice(variant,P,runs,latupling): - # variant is in range [0..64>, - # where we use the highest bid to signify the - # associativity of the tupling. - - extraflags = "" - if latupling: - extraflags += " --la-tupling" - - s = "./multinsl-generator.py" - s += " %i %s" % (P,variant) - s += " | scyther -r%i --untyped %s" % (runs, extraflags) - #s += " | scyther -a -r%i --summary" % runs - #print s - s += " | grep \"Fail\"" - out = commands.getoutput(s) - if out == "": - #print "Okay" - return True - else: - #print out - # Thus, MultiNSL P variant has the first attack for n runs - return False - -def testvariant(v,p,r): - if not tuplingchoice (v,p,r, False): - return False - else: - return tuplingchoice (v,p,r, True) - -def removeattacks (testlist, P, runs): - okaylist = [] - for v in testlist: - if testvariant (v, P, runs): - okaylist.append(v) - return okaylist - -def scan(testlist, P, runs): - print "Testing using P %i and %i runs." % (P,runs) - results = removeattacks (testlist, P, runs) - if len(results) < len(testlist): - attacked = [] - for i in range(0,len(testlist)): - if testlist[i] not in results: - attacked.append(testlist[i]) - print "Using P %i and %i runs, we find attacks on %s" % (P,runs, str(attacked)) - print "Therefore, we are left with %i candidates: " % (len(results)), results - - return results - -def main(): - candidates = startset() - for P in range(3,7): - for rundiff in range(0,5): - candidates = scan(candidates,P,P+rundiff) - - print - print "Good variants:" - print candidates - - -main() diff --git a/Vagrant Files/shared/scyther/Protocols/needham-schroeder-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/needham-schroeder-lowe.spdl deleted file mode 100644 index fabb522b2a82b61d38acbaba18caef4df68494b2..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/needham-schroeder-lowe.spdl +++ /dev/null @@ -1,53 +0,0 @@ -# Lowe's fixed version of Needham Schroeder Public Key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/nspkLowe.html -# -# -# Note: -# The modelling in SPORE includes a server to distribute the public keys -# of the agents, this is not necessary and it allows for attacks against -# synchronisation and agreement, because the keys that the server sends -# out can be replayed. - -protocol needhamschroederpk-Lowe(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - - send_1(I,S, (I,R)); - recv_2(S,I, {pk(R), R}sk(S)); - send_3(I,R,{Ni,I}pk(R)); - recv_6(R,I, {Ni,Nr,R}pk(I)); - send_7(I,R, {Nr}pk(R)); - claim_I1(I,Secret,Ni); - claim_I2(I,Secret,Nr); - claim_I3(I,Nisynch); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - - recv_3(I,R,{Ni,I}pk(R)); - send_4(R,S,(R,I)); - recv_5(S,R,{pk(I),I}sk(S)); - send_6(R,I,{Ni,Nr,R}pk(I)); - recv_7(I,R,{Nr}pk(R)); - claim_R1(R,Secret,Nr); - claim_R2(R,Secret,Ni); - claim_R3(R,Nisynch); - } - - role S - { - recv_1(I,S,(I,R)); - send_2(S,I,{pk(R),R}sk(S)); - recv_4(R,S,(R,I)); - send_5(S,R,{pk(I),I}sk(S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/needham-schroeder-sk-amend.spdl b/Vagrant Files/shared/scyther/Protocols/needham-schroeder-sk-amend.spdl deleted file mode 100644 index 189093d107295d32d8bc177f455d9246d0059bf0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/needham-schroeder-sk-amend.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# Amended Needham Schroeder Symmetric Key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/nssk_amended.html -# -# -# Note: -# According to SPORE there are no attacks on this protocol, scyther -# finds one however. This has to be investigated further. - - - -# Model dec that is invertible by inc -const dec,inc: Function; -inversekeys(dec,inc); -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol needhamschroedersk-amend(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var Kir: SessionKey; - var T,T2: Ticket; - - send_1(I,R,I); - recv_2(R,I,T); - send_3(I,S,(I,R,Ni,T)); - recv_4(S,I, {Ni,R,Kir,T2}k(I,S)); - send_5(I,R,T2); - recv_6(R,I,{Nr}Kir); - send_7(I,R,{{Nr}dec}Kir); - - claim_I2(I,Secret,Kir); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Kir: SessionKey; - - recv_1(I,R,I); - send_2(R,I,{I,Nr}k(R,S)); - recv_5(I,R,{Kir,Nr,I}k(R,S)); - send_6(R,I,{Nr}Kir); - recv_7(I,R,{{Nr}dec}Kir); - claim_R1(R,Secret,Nr); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni,Nr: Nonce; - fresh Kir: SessionKey; - recv_3(I,S,(I,R,Ni,{I,Nr}k(R,S))); - send_4(S,I,{Ni,R,Kir,{Kir,Nr,I}k(R,S)}k(I,S)); - } - -} - diff --git a/Vagrant Files/shared/scyther/Protocols/needham-schroeder-sk.spdl b/Vagrant Files/shared/scyther/Protocols/needham-schroeder-sk.spdl deleted file mode 100644 index 71a7e6c3ca031a129edced11e2ed78a1e78ceb37..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/needham-schroeder-sk.spdl +++ /dev/null @@ -1,56 +0,0 @@ -# Needham Schroeder Symmetric Key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/nssk.html -# -# - - -# Model dec that is invertible by inc -const dec,inc: Function; -inversekeys(dec,inc); -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol needhamschroedersk(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var Kir: SessionKey; - var T: Ticket; - - send_1(I,S,(I,R,Ni)); - recv_2(S,I, {Ni,R,Kir,T}k(I,S)); - send_3(I,R,T); - recv_4(R,I,{Nr}Kir); - send_5(I,R,{{Nr}dec}Kir); - claim_I2(I,Secret,Kir); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Kir: SessionKey; - - recv_3(I,R,{Kir,I}k(R,S)); - send_4(R,I,{Nr}Kir); - recv_5(I,R,{{Nr}dec}Kir); - claim_R1(R,Secret,Kir); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni: Nonce; - fresh Kir: SessionKey; - recv_1(I,S,(I,R,Ni)); - send_2(S,I,{Ni,R,Kir,{Kir,I}k(R,S)}k(I,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/needham-schroeder.spdl b/Vagrant Files/shared/scyther/Protocols/needham-schroeder.spdl deleted file mode 100644 index ea148542a688157e282405a8266e42226da8bf95..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/needham-schroeder.spdl +++ /dev/null @@ -1,53 +0,0 @@ -# Needham Schroeder Public Key -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/nspk.html -# -# -# Note: -# The modelling in SPORE includes a server to distribute the public keys -# of the agents, this is not necessary and it allows for attacks against -# synchronisation and agreement, because the keys that the server sends -# out can be replayed. - -protocol needhamschroederpk(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - - send_1(I,S,(I,R)); - recv_2(S,I, {pk(R), R}sk(S)); - send_3(I,R,{Ni,I}pk(R)); - recv_6(R,I, {Ni, Nr}pk(I)); - send_7(I,R, {Nr}pk(R)); - claim_I1(I,Secret,Ni); - claim_I2(I,Secret,Nr); - claim_I3(I,Nisynch); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - - recv_3(I,R,{Ni,I}pk(R)); - send_4(R,S,(R,I)); - recv_5(S,R,{pk(I),I}sk(S)); - send_6(R,I,{Ni,Nr}pk(I)); - recv_7(I,R,{Nr}pk(R)); - claim_R1(R,Secret,Nr); - claim_R2(R,Secret,Ni); - claim_R3(R,Nisynch); - } - - role S - { - recv_1(I,S,(I,R)); - send_2(S,I,{pk(R),R}sk(S)); - recv_4(R,S,(R,I)); - send_5(S,R,{pk(I),I}sk(S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/neumannstub-guttman-hwang.spdl b/Vagrant Files/shared/scyther/Protocols/neumannstub-guttman-hwang.spdl deleted file mode 100644 index bcb48d286b9dd3b8b78a05fb886ab55fdb58e822..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/neumannstub-guttman-hwang.spdl +++ /dev/null @@ -1,105 +0,0 @@ -# Neumann Stubblebine -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/neumannStubblebine.html -# -# Note: -# In SPORE this protocol is not described correctly, there are in fact 2 -# different protocols (the key establishment protocol and the repeated -# authentication protocol) - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol neustub-GuttmanHwang^Repeat(I,R,S) -{ - fresh Kir: SessionKey; - - role I - { - fresh Mi: Nonce; - var Mr: Nonce; - fresh Kir: SessionKey; - fresh Tr: TimeStamp; - - send_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - recv_6(R,I,{Mi,Mr}Kir); - send_7(I,R,{I,Mr}Kir); - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Mr: Nonce; - var Tr: TimeStamp; - var Kir: SessionKey; - var Mi: Nonce; - - recv_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - send_6(R,I,{Mi,Mr}Kir); - recv_7(I,R,{I,Mr}Kir); - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - } -} -protocol neustub-GuttmanHwang(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Tb: TimeStamp; - var Kir: SessionKey; - - send_1(I,R, I, Ni); - recv_!3(S,I, { R,Ni,Kir,Tb}k(I,S), T, Nr); - send_!4(I,R,T,{Nr}Kir); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Mr: Nonce; - var Kir: SessionKey; - fresh Tb: TimeStamp; - var T: Ticket; - - recv_1(I,R, I, Ni); - send_!2(R,S, R, {I, Ni, Tb ,Nr}k(R,S)); - recv_!4(I,R,{I,Kir,Tb}k(R,S),{Nr}Kir); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - var Tb: TimeStamp; - - recv_!2(R,S, R, {I,Ni,Tb,Nr}k(R,S)); - send_!3(S,I, { R, Ni, Kir, Tb}k(I,S), { I,Kir,Tb}k(R,S),Nr ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/neumannstub-guttman.spdl b/Vagrant Files/shared/scyther/Protocols/neumannstub-guttman.spdl deleted file mode 100644 index 09e7f6ee57f096735383dfb9247b210d68cb444c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/neumannstub-guttman.spdl +++ /dev/null @@ -1,105 +0,0 @@ -# Neumann Stubblebine -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/neumannStubblebine.html -# -# Note: -# In SPORE this protocol is not described correctly, there are in fact 2 -# different protocols (the key establishment protocol and the repeated -# authentication protocol) - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol neustub^Repeat(I,R,S) -{ - fresh Kir: SessionKey; - - role I - { - fresh Mi: Nonce; - var Mr: Nonce; - fresh Kir: SessionKey; - fresh Tr: TimeStamp; - - send_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - recv_6(R,I,{Mi,Mr}Kir); - send_7(I,R,{I,Mr}Kir); - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Mr: Nonce; - var Tr: TimeStamp; - var Kir: SessionKey; - var Mi: Nonce; - - recv_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - send_6(R,I,{Mi,Mr}Kir); - recv_7(I,R,{I,Mr}Kir); - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - } -} -protocol neustub(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Tb: TimeStamp; - var Kir: SessionKey; - - send_1(I,R, I, Ni); - recv_!3(S,I, { R,Ni,Kir,Tb}k(I,S), T, Nr); - send_4(I,R,T,{Nr}Kir); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Mr: Nonce; - var Kir: SessionKey; - fresh Tb: TimeStamp; - var T: Ticket; - - recv_1(I,R, I, Ni); - send_!2(R,S, R, {I, Ni, Tb}k(R,S),Nr); - recv_4(I,R,{I,Kir,Tb}k(R,S),{Nr}Kir); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - var Tb: TimeStamp; - - recv_!2(R,S, R, {I,Ni,Tb}k(R,S), Nr); - send_!3(S,I, { R, Ni, Kir, Tb}k(I,S), { I,Kir,Tb}k(R,S),Nr ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/neumannstub-hwang.spdl b/Vagrant Files/shared/scyther/Protocols/neumannstub-hwang.spdl deleted file mode 100644 index 1546b405b39ecc2a147cdca5563c9eb30faeb945..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/neumannstub-hwang.spdl +++ /dev/null @@ -1,71 +0,0 @@ -# Hwang modified Neumann Stubblebine -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/neumannStubblebineHwang.html -# -# Note: -# According to SPORE there are no attacks on this protocol, scyther -# finds one however. This has to be investigated further. - - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol neustub-Hwang(I,R,S) -{ - role I - { - fresh Ni,Mi: Nonce; - var Nr,Mr: Nonce; - var T: Ticket; - var Tb: TimeStamp; - var Kir: SessionKey; - - send_1(I,R, I, Ni); - recv_!3(S,I, { R,Ni,Kir,Tb}k(I,S), T, Nr); - send_4(I,R,T,{Nr}Kir); - send_5(I,R,Mi,T); - recv_6(R,I,Mr,{Mi}Kir); - send_7(I,R,{Mr}Kir); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Mr: Nonce; - var Kir: SessionKey; - fresh Tb: TimeStamp; - var T: Ticket; - - recv_1(I,R, I, Ni); - send_!2(R,S, R, {I, Ni, Tb, Nr}k(R,S)); - recv_4(I,R,{I,Kir,Tb}k(R,S),{Nr}Kir); - recv_5(I,R,Mi,T); - send_6(R,I,Mr,{Mi}Kir); - recv_7(I,R,{Mr}Kir); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - var Tb: TimeStamp; - - recv_!2(R,S, R, {I,Ni,Tb,Nr}k(R,S)); - send_!3(S,I, { R, Ni, Kir, Tb}k(I,S), { I,Kir,Tb}k(R,S),Nr ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/neumannstub-keycompromise.spdl b/Vagrant Files/shared/scyther/Protocols/neumannstub-keycompromise.spdl deleted file mode 100644 index d8031504dcd56311f1dd9e10ecce824fd0a3b41f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/neumannstub-keycompromise.spdl +++ /dev/null @@ -1,105 +0,0 @@ -# Neumann Stubblebine -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/neumannStubblebine.html -# -# Note: -# In SPORE this protocol is not described correctly, there are in fact 2 -# different protocols (the key establishment protocol and the repeated -# authentication protocol) - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol neustub^Repeat(I,R,S) -{ - fresh Kir: SessionKey; - - role I - { - fresh Mi: Nonce; - var Mr: Nonce; - fresh Kir: SessionKey; - fresh Tr: TimeStamp; - - send_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - recv_6(R,I,Mr,{Mi}Kir); - send_7(I,R,{Mr}Kir); - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh Mr: Nonce; - var Tr: TimeStamp; - var Kir: SessionKey; - var Mi: Nonce; - - recv_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - send_6(R,I,Mr,{Mi}Kir); - recv_7(I,R,{Mr}Kir); - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - } -} -protocol neustub(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Tb: TimeStamp; - var Kir: SessionKey; - - send_1(I,R, I, Ni); - recv_3(S,I, { R,Ni,Kir,Tb}k(I,S), T, Nr); - send_4(I,R,T,{Nr}Kir); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - claim_I4(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Mr: Nonce; - var Kir: SessionKey; - fresh Tb: TimeStamp; - var T: Ticket; - - recv_1(I,R, I, Ni); - send_2(R,S, R, {I, Ni, Tb}k(R,S),Nr); - recv_4(I,R,{I,Kir,Tb}k(R,S),{Nr}Kir); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - claim_R4(R,Empty,(Fresh,Kir)); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - var Tb: TimeStamp; - - recv_2(R,S, R, {I,Ni,Tb}k(R,S), Nr); - send_3(S,I, { R, Ni, Kir, Tb}k(I,S), { I,Kir,Tb}k(R,S),Nr ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/neumannstub.spdl b/Vagrant Files/shared/scyther/Protocols/neumannstub.spdl deleted file mode 100644 index d1d0ee1fd2b52cf8a9ff91365aa54ea747b8d98e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/neumannstub.spdl +++ /dev/null @@ -1,98 +0,0 @@ -# Neumann Stubblebine -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/neumannStubblebine.html -# -# Note: -# In SPORE this protocol is not described correctly, there are in fact 2 -# different protocols (the key establishment protocol and the repeated -# authentication protocol) - -usertype Server, SessionKey, TimeStamp, TicketKey; -usertype ExpiredTimeStamp; - -protocol neustub^Repeat(I,R,S) -{ - fresh Kir: SessionKey; - - role I - { - fresh Mi: Nonce; - var Mr: Nonce; - fresh Kir: SessionKey; - fresh Tr: TimeStamp; - - send_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - recv_6(R,I,Mr,{Mi}Kir); - send_7(I,R,{Mr}Kir); - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - } - - role R - { - fresh Mr: Nonce; - var Tr: TimeStamp; - var Kir: SessionKey; - var Mi: Nonce; - - recv_5(I,R,Mi,{I,Kir,Tr}k(R,S)); - send_6(R,I,Mr,{Mi}Kir); - recv_7(I,R,{Mr}Kir); - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - } - - role S - { - } -} -protocol neustub(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Tb: TimeStamp; - var Kir: SessionKey; - - send_1(I,R, I, Ni); - recv_!3(S,I, { R,Ni,Kir,Tb}k(I,S), T, Nr); - send_4(I,R,T,{Nr}Kir); - - claim_I1(I,Secret, Kir); - claim_I2(I,Niagree); - claim_I3(I,Nisynch); - } - - role R - { - var Ni,Mi: Nonce; - fresh Nr,Mr: Nonce; - var Kir: SessionKey; - fresh Tb: TimeStamp; - var T: Ticket; - - recv_1(I,R, I, Ni); - send_!2(R,S, R, {I, Ni, Tb}k(R,S),Nr); - recv_4(I,R,{I,Kir,Tb}k(R,S),{Nr}Kir); - - claim_R1(R,Secret, Kir); - claim_R2(R,Niagree); - claim_R3(R,Nisynch); - } - - role S - { - var Ni, Nr: Nonce; - fresh Kir: SessionKey; - var Tb: TimeStamp; - - recv_!2(R,S, R, {I,Ni,Tb}k(R,S), Nr); - send_!3(S,I, { R, Ni, Kir, Tb}k(I,S), { I,Kir,Tb}k(R,S),Nr ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/otwayrees.spdl b/Vagrant Files/shared/scyther/Protocols/otwayrees.spdl deleted file mode 100644 index bed12addbb962630e674c20705162c706183767c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/otwayrees.spdl +++ /dev/null @@ -1,56 +0,0 @@ -# Otway Rees -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/otwayRees.html -# - - -const Fresh: Function; -const Compromised: Function; - -usertype String,SessionKey; - -protocol otwayrees(I,R,S) -{ - role I - { - fresh Ni : Nonce; - fresh M : String; - var Kir : SessionKey; - - send_1(I,R, M,I,R,{Ni,M,I,R}k(I,S) ); - recv_4(R,I, M,{Ni,Kir}k(I,S) ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - claim_I3(I, Empty, (Fresh,Kir)); - } - - role R - { - var M : String; - fresh Nr : Nonce; - var Kir : SessionKey; - var T1,T2: Ticket; - - recv_1(I,R, M,I,R, T1 ); - send_2(R,S, M,I,R, T1, { Nr,M,I,R }k(R,S) ); - recv_3(S,R, M, T2, { Nr,Kir }k(R,S) ); - send_4(R,I, M, T2 ); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - claim_R3(R, Empty, (Fresh,Kir)); - } - - role S - { - var Ni,Nr : Nonce; - var M : String; - fresh Kir : SessionKey; - - recv_2(R,S, M,I,R, { Ni,M,I,R}k(I,S), { Nr,M,I,R }k(R,S) ); - send_3(S,R, M, { Ni,Kir }k(I,S) , { Nr,Kir }k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/smartright.spdl b/Vagrant Files/shared/scyther/Protocols/smartright.spdl deleted file mode 100644 index e3a97192f22f84e745ec1f9c3106e47f591a3244..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/smartright.spdl +++ /dev/null @@ -1,46 +0,0 @@ -# SmartRight view-only -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/smartright_viewonly.html -# -# Note: -# According to SPORE there are no known attacks on this protocol -# -# Note: -# Scyther finds an attack because the value of VoR in te last message can -# be replaced with an arbitrary value - -hashfunction hash; -usertype SessionKey; -usertype XorKey; -const Vor: XorKey; - -protocol smartright(I,R) -{ - role I - { - fresh VoKey: SessionKey; - fresh VoR: XorKey; - fresh CW; - var VoRi: Nonce; - - send_1(I,R, {VoKey,{CW}VoR}k(I,R)); - recv_2(R,I, VoRi); - send_3(I,R, VoR, {{VoRi}hash}VoKey); - } - - role R - { - var T: Ticket; - var VoR: XorKey; - var VoKey: SessionKey; - fresh VoRi: Nonce; - - recv_1(I,R, {VoKey,T}k(I,R)); - send_2(R,I, VoRi); - recv_3(I,R, VoR,{{VoRi}hash}VoKey); - - claim_R1(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/splice-as-cj.spdl b/Vagrant Files/shared/scyther/Protocols/splice-as-cj.spdl deleted file mode 100644 index b393294a0e2524970c0bd0be27db7a38404ce592..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/splice-as-cj.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# Clark and Jacob modified Hwang and Chen modified SPLICE/AS -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/spliceas3.html -# -# Note: -# The assumptions made here do not comply with those in SPORE -# SPORE assumes that the agents do not know the pk function, but only -# their own public key values. -# This can currently not be modelled. - - -usertype TimeStamp, LifeTime; - -const inc,dec: Function; -inversekeys (inc,dec); - -protocol spliceAS-CJ(I,R,S) -{ - role I - { - fresh N1,N2: Nonce; - fresh T: TimeStamp; - fresh L: LifeTime; - - send_1(I,S, I, R, N1 ); - recv_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - send_3(I,R, I, R, {T, L, {I, N2}pk(R)}sk(I) ); - recv_6(R,I, R, I, {{N2}inc}pk(I) ); - - claim_7(I, Secret, N2); - claim_9(I, Niagree); - claim_10(I, Nisynch); - } - - role S - { - var N1,N3: Nonce; - - recv_1(I,S, I, R, N1 ); - send_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - recv_4(R,S, R, I, N3 ); - send_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - } - - role R - { - fresh N3: Nonce; - var N2: Nonce; - var T: TimeStamp; - var L: LifeTime; - - var ni: Nonce; - fresh nr: Nonce; - - recv_3(I,R, I, R, {T, L, {I, N2}pk(R)}sk(I) ); - send_4(R,S, R, I, N3 ); - recv_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - send_6(R,I, R, I, {{N2}inc}pk(I) ); - - claim_8(R, Secret, N2); - claim_11(R, Niagree); - claim_12(R, Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/splice-as-hc.spdl b/Vagrant Files/shared/scyther/Protocols/splice-as-hc.spdl deleted file mode 100644 index 2f975ad29dad1faaa6150ad4e56dfc83b9c20fb5..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/splice-as-hc.spdl +++ /dev/null @@ -1,61 +0,0 @@ -# Hwang and Chen Modified SPLICE/AS -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/spliceas2.html -# - - -usertype TimeStamp, LifeTime; - -const inc,dec: Function; -inversekeys (inc,dec); - -protocol spliceAS-HC(I,R,S) -{ - role I - { - fresh N1,N2: Nonce; - fresh T: TimeStamp; - fresh L: LifeTime; - - send_1(I,S, I, R, N1 ); - recv_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - send_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - recv_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_7(I, Secret, N2); - claim_9(I, Niagree); - claim_10(I, Nisynch); - } - - role S - { - var N1,N3: Nonce; - - recv_1(I,S, I, R, N1 ); - send_2(S,I, S, {S, I, N1, R, pk(R)}sk(S) ); - recv_4(R,S, R, I, N3 ); - send_5(S,R, S, {S, R, N3, I, pk(I)}sk(S) ); - } - - role R - { - fresh N3: Nonce; - var N2: Nonce; - var T: TimeStamp; - var L: LifeTime; - - var ni: Nonce; - fresh nr: Nonce; - - recv_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - send_4(R,S, R, I, N3 ); - recv_5(S,R, S, {S, R, N3, I, pk(I)}sk(S) ); - send_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_8(R, Secret, N2); - claim_11(R, Niagree); - claim_12(R, Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/splice-as.spdl b/Vagrant Files/shared/scyther/Protocols/splice-as.spdl deleted file mode 100644 index b1d8e181dee03a611e57770eae47e84b0d9238f3..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/splice-as.spdl +++ /dev/null @@ -1,66 +0,0 @@ -# SPLICE/AS -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/spliceas.html -# -# Note: -# The assumptions made here do not comply with those in SPORE -# SPORE assumes that the agents do not know the pk function, but only -# their own public key values. -# This can currently not be modelled. - - -usertype TimeStamp, LifeTime; - -const inc,dec: Function; -inversekeys (inc,dec); - -protocol spliceAS(I,R,S) -{ - role I - { - fresh N1,N2: Nonce; - fresh T: TimeStamp; - fresh L: LifeTime; - - send_1(I,S, I, R, N1 ); - recv_2(S,I, S, {S, I, N1, pk(R)}sk(S) ); - send_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - recv_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_7(I, Secret, N2); - claim_9(I, Niagree); - claim_10(I, Nisynch); - } - - role S - { - var N1,N3: Nonce; - - recv_1(I,S, I, R, N1 ); - send_2(S,I, S, {S, I, N1, pk(R)}sk(S) ); - recv_4(R,S, R, I, N3 ); - send_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - } - - role R - { - fresh N3: Nonce; - var N2: Nonce; - var T: TimeStamp; - var L: LifeTime; - - var ni: Nonce; - fresh nr: Nonce; - - recv_3(I,R, I, R, {I, T, L, {N2}pk(R)}sk(I) ); - send_4(R,S, R, I, N3 ); - recv_5(S,R, S, {S, R, N3, pk(I)}sk(S) ); - send_6(R,I, R, I, {R, {N2}inc}pk(I) ); - - claim_8(R, Secret, N2); - claim_11(R, Niagree); - claim_12(R, Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/tmn.spdl b/Vagrant Files/shared/scyther/Protocols/tmn.spdl deleted file mode 100644 index c6fb55fecbe88e8ce642f86260ee5bceca08b443..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/tmn.spdl +++ /dev/null @@ -1,51 +0,0 @@ -# TMN -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/tmn.html -# -# Note: -# According to Boyd and Mathuria Kb is the session key this is not clear -# from the description in SPORE -usertype SessionKey; - -const Fresh: Function; -const Compromised: Function; - -protocol tmn(I,R,S) -{ - role I - { - fresh Ki: SessionKey; - var Kr: SessionKey; - - send_1(I,S, R,{Ki}pk(S) ); - recv_4(S,I, R,{Kr}Ki ); - - claim_I1(I,Secret,Kr); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,Kr)); - } - - role R - { - fresh Kr: SessionKey; - - recv_2(S,R, I ); - send_3(R,S, I, { Kr }pk(S) ); - - claim_R1(R,Secret,Kr); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kr)); - } - - role S - { - var Ki,Kr: SessionKey; - - recv_1(I,S, R,{Ki}pk(S) ); - send_2(S,R, I ); - recv_3(R,S, I, { Kr }pk(S) ); - send_4(S,I, R,{Kr}Ki ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/wmf-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/wmf-lowe.spdl deleted file mode 100644 index 86b34e314d8042531df77a01926f8a38f3739d31..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/wmf-lowe.spdl +++ /dev/null @@ -1,63 +0,0 @@ -# Lowe modified Wide Mouthed Frog -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wideMouthedFrogLowe.html -# -# Note: -# According to SPORE there are no known attacks on this protocol, scyther -# finds one however this has to do with the unusual assumption that every -# agent can recognise and will reject to messages that it has created -# itself. - -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; -const succ,pred: Function; -inversekeys (succ,pred); -const Fresh: Function; -const Compromised: Function; - -protocol wmf-Lowe(I,R,S) -{ - role I - { - fresh Kir: SessionKey; - fresh Ti: TimeStamp; - var Kr: SessionKey; - var Nr: Nonce; - - send_1(I,S, I, {Ti, R, Kir}k(I,S)); - recv_3(R,I,{Nr}Kir); - send_4(I,R,{{Nr}succ}Kir); - - claim_I1(I,Secret,Kir); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ts: TimeStamp; - var Kir: SessionKey; - fresh Nr: Nonce; - - recv_2(S,R, {Ts, I, Kir}k(R,S) ); - send_3(R,I, {Nr}Kir); - recv_4(I,R, {{Nr}succ}Kir); - - claim_R1(R,Secret,Kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kir)); - } - - role S - { - var Kir: SessionKey; - fresh Ts: TimeStamp; - var Ti: TimeStamp; - - recv_1(I,S, I,{Ti, R, Kir}k(I,S) ); - send_2(S,R, {Ts, I, Kir}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/wmf.spdl b/Vagrant Files/shared/scyther/Protocols/wmf.spdl deleted file mode 100644 index 758843ad8db42af3b4250060d47b14d88444938f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/wmf.spdl +++ /dev/null @@ -1,54 +0,0 @@ -# Wide Mouthed Frog -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wideMouthedFrog.html -# -# Note -# The name of the party that has generated a message was added in order -# to model the property described in SPORE that an agent can identify -# its own messages and will reject them. - -usertype SessionKey; -usertype TimeStamp; -usertype ExpiredTimeStamp; - -const Fresh: Function; -const Compromised: Function; - -protocol wmf(I,R,S) -{ - role I - { - fresh Kir: SessionKey; - fresh Ti: TimeStamp; - var Kr: SessionKey; - - send_1(I,S, I, {I, Ti, R, Kir}k(I,S)); - - claim_I1(I,Secret,Kir); - claim_I2(I,Empty,(Fresh,Kir)); - } - - role R - { - var Ts: TimeStamp; - var Kir: SessionKey; - - recv_2(S,R, {S, Ts, I, Kir}k(R,S) ); - - claim_R1(R,Secret,Kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kir)); - } - - role S - { - var Kir: SessionKey; - fresh Ts: TimeStamp; - var Ti: TimeStamp; - - recv_1(I,S, I,{I, Ti, R, Kir}k(I,S) ); - send_2(S,R, {S, Ts, I, Kir}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-1.spdl b/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-1.spdl deleted file mode 100644 index 7e4e09dc56a0317935e27247354bacd062a41d78..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-1.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi 1 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi1.html -# - -protocol woolamPi-1(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {I,R,Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I,R, T}k(R,S)); - recv_5(S,R, {I,R, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I,R, {I,R,Nr}k(I,S)}k(R,S)); - send_5(S,R, {I,R,Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-2.spdl b/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-2.spdl deleted file mode 100644 index 5d767d614d01b5755e0b81f4d2eade5f6cb3e776..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-2.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi 2 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi2.html -# - -protocol woolamPi-2(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {I,Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, T}k(R,S)); - recv_5(S,R, {I, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I, {I,Nr}k(I,S)}k(R,S)); - send_5(S,R, {I,Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-3.spdl b/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-3.spdl deleted file mode 100644 index 1db544e1b58b303e4c51014525bef6096465416a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-3.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi 2 -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi3.html -# - -protocol woolamPi-3(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, T}k(R,S)); - recv_5(S,R, {I, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I, {Nr}k(I,S)}k(R,S)); - send_5(S,R, {I,Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-f.spdl b/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-f.spdl deleted file mode 100644 index 22f028c0e8edc3654b2f162471de803271f53228..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi-f.spdl +++ /dev/null @@ -1,41 +0,0 @@ -# Woo and Lam Pi f -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPif.html -# - -protocol woolamPi-f(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {I,R,Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, R, Nr, T}k(R,S)); - recv_5(S,R, {I, R, Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I, R, Nr,{I,R,Nr}k(I,S)}k(R,S)); - send_5(S,R, {I, R, Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi.spdl b/Vagrant Files/shared/scyther/Protocols/woo-lam-pi.spdl deleted file mode 100644 index 0c01c27968bc9d7d61f7ba99f48893a2e136b640..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/woo-lam-pi.spdl +++ /dev/null @@ -1,45 +0,0 @@ -# Woo and Lam Pi -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamPi.html -# -# Note: -# Scyther finds an attack that appears to be legit, but is not present in -# SPORE. -# - -protocol woolamPi(I,R,S) -{ - role I - { - var Nr: Nonce; - - send_1(I,R, I); - recv_2(R,I, Nr); - send_3(I,R, {Nr}k(I,S)); - - } - - role R - { - fresh Nr: Nonce; - var T: Ticket; - - recv_1(I,R, I); - send_2(R,I, Nr); - recv_3(I,R, T); - send_4(R,S, {I, T}k(R,S)); - recv_5(S,R, {Nr}k(R,S)); - - claim_R1(R,Nisynch); - } - - role S - { - var Nr: Nonce; - - recv_4(R,S, {I,{Nr}k(I,S)}k(R,S)); - send_5(S,R, {Nr}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/woo-lam.spdl b/Vagrant Files/shared/scyther/Protocols/woo-lam.spdl deleted file mode 100644 index 7e28057801d960a6e5dee165249df7a1b2320362..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/woo-lam.spdl +++ /dev/null @@ -1,64 +0,0 @@ -# Woo and Lam Mutual Authentication -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/wooLamMutual.html -# - - -usertype SessionKey; - -const Fresh: Function; -const Compromised: Function; - -protocol woolam(I,R,S) -{ - role I - { - fresh N1: Nonce; - var Kir: SessionKey; - var N2: Nonce; - - send_1(I,R, I, N1); - recv_2(R,I, R, N2); - send_3(I,R, {I, R, N1, N2}k(I,S)); - recv_6(R,I, {R, N1, N2, Kir}k(I,S), {N1,N2}Kir); - send_7(I,R, {N2}Kir); - - - claim_I1(I,Secret,Kir); - claim_I2(I,Nisynch); - claim_I3(I,Empty,(Fresh,Kir)); - } - - role R - { - fresh N2: Nonce; - var N1: Nonce; - var Kir: SessionKey; - var T1,T2: Ticket; - - recv_1(I,R, I, N1); - send_2(R,I, R, N2); - recv_3(I,R, T1); - send_4(R,S, T1, {I, R, N1, N2}k(R,S)); - recv_5(S,R, T2, {I, N1, N2, Kir}k(R,S)); - send_6(R,I, T2, {N1,N2}Kir); - recv_7(I,R, {N2}Kir); - - claim_R1(R,Secret,Kir); - claim_R2(R,Nisynch); - claim_R3(R,Empty,(Fresh,Kir)); - } - - role S - { - fresh Kir: SessionKey; - var N1,N2: Nonce; - - recv_4(R,S, {I, R, N1, N2}k(I,S), {I, R, N1, N2}k(R,S)); - send_5(S,R, {R, N1, N2, Kir}k(I,S), {I, N1, N2, Kir}k(R,S)); - } -} - - - diff --git a/Vagrant Files/shared/scyther/Protocols/yahalom-ban.spdl b/Vagrant Files/shared/scyther/Protocols/yahalom-ban.spdl deleted file mode 100644 index b865362c98d2a908d1f05e32a228bbb81daf7069..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/yahalom-ban.spdl +++ /dev/null @@ -1,54 +0,0 @@ -# BAN simplified version of Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalomBAN.html -# - -usertype SessionKey; -const Fresh: Function; -const Compromised: Function; - -protocol yahalom-BAN(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, Nr, {R,Kir,Ni}k(I,S), T ); - send_4(I,R, T, {Nr}Kir ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - claim_I3(I, Empty, (Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var T: Ticket; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, R, Nr, {I,Ni}k(R,S) ); - recv_4(I,R, {I,Kir,Nr}k(R,S) , {Nr}Kir ); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - claim_R3(R, Empty, (Fresh,Kir)); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, R, Nr, {I,Ni}k(R,S) ); - send_3(S,I, Nr, {R,Kir,Ni}k(I,S), {I,Kir,Nr}k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/yahalom-lowe.spdl b/Vagrant Files/shared/scyther/Protocols/yahalom-lowe.spdl deleted file mode 100644 index 308a62abe081f271e859b6d8618f2084c685557d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/yahalom-lowe.spdl +++ /dev/null @@ -1,52 +0,0 @@ -# Lowe's modified version of Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalomLowe.html -# -# - -usertype SessionKey; - - -protocol yahalom-Lowe(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, {R,Kir,Ni,Nr}k(I,S) ); - send_5(I,R, {I, R, S, Nr}Kir ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, {I,Ni,Nr}k(R,S) ); - recv_4(S,R, {I,Kir}k(R,S)); - recv_5(I,R, {I, R, S, Nr}Kir); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, {I,Ni,Nr}k(R,S) ); - send_3(S,I, {R,Kir,Ni,Nr}k(I,S)); - send_4(S,R, {I,Kir}k(R,S)); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/yahalom-paulson.spdl b/Vagrant Files/shared/scyther/Protocols/yahalom-paulson.spdl deleted file mode 100644 index a8dfe1e4400e0b18d8146af6a2930672e97d4b43..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/yahalom-paulson.spdl +++ /dev/null @@ -1,56 +0,0 @@ -# Paulson's strengthened version of Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalomPaulson.html -# -# - -const Fresh: Function; -const Compromised: Function; - -usertype SessionKey; - -protocol yahalom-Paulson(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, Nr, {R,Kir,Ni}k(I,S), T ); - send_4(I,R, T, {Nr}Kir ); - - claim_I1(I, Secret,Kir); - claim_I2(I, Nisynch); - claim_I3(I, Empty, (Fresh,Kir)); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var T: Ticket; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, R, Nr, {I,Ni}k(R,S) ); - recv_4(I,R, {I,R, Kir, Nr}k(R,S) , {Nr}Kir ); - - claim_R1(R, Secret,Kir); - claim_R2(R, Nisynch); - claim_R3(R, Empty, (Fresh,Kir)); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, R, Nr, {I,Ni}k(R,S) ); - send_3(S,I, Nr, {R,Kir,Ni}k(I,S), {I,R,Kir,Nr}k(R,S) ); - } -} - diff --git a/Vagrant Files/shared/scyther/Protocols/yahalom.spdl b/Vagrant Files/shared/scyther/Protocols/yahalom.spdl deleted file mode 100644 index 063817fd13578148dc149004508f58ff1208364d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Protocols/yahalom.spdl +++ /dev/null @@ -1,52 +0,0 @@ -# Yahalom -# -# Modelled after the description in the SPORE library -# http://www.lsv.ens-cachan.fr/spore/yahalom.html -# -# - -usertype SessionKey; - -protocol yahalom(I,R,S) -{ - role I - { - fresh Ni: Nonce; - var Nr: Nonce; - var T: Ticket; - var Kir: SessionKey; - - send_1(I,R, I,Ni); - recv_3(S,I, {R,Kir,Ni,Nr}k(I,S), T ); - send_4(I,R, T, {Nr}Kir ); - - claim_I1(I, Secret,Kir); - } - - role R - { - fresh Nr: Nonce; - var Ni: Nonce; - var T: Ticket; - var Kir: SessionKey; - - recv_1(I,R, I,Ni); - send_2(R,S, R, {I,Ni,Nr}k(R,S) ); - recv_4(I,R, {I,Kir}k(R,S) , {Nr}Kir ); - - claim_R1(R, Secret,Kir); - } - - role S - { - fresh Kir: SessionKey; - var Ni,Nr: Nonce; - - recv_2(R,S, R, {I,Ni,Nr}k(R,S) ); - send_3(S,I, {R,Kir,Ni,Nr}k(I,S), {I,Kir}k(R,S) ); - - claim(S, Secret, Ni); - claim(S, Secret, Nr); - } -} - diff --git a/Vagrant Files/shared/scyther/README.md b/Vagrant Files/shared/scyther/README.md deleted file mode 100644 index 706df8d39fc2bbe14616a3a6bbd07a083b4d3229..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/README.md +++ /dev/null @@ -1,66 +0,0 @@ -The Scyther tool -================ - -Scyther is a tool for the symbolic analysis of security protocols. It is -developed by Cas Cremers, and is available from -<http://www.cs.ox.ac.uk/people/cas.cremers/scyther/index.html>. - -The below instructions apply only to the *distribution version* of -the Scyther tool. If you are working from the source files, some paths may be -slightly different, and it is recommended to follow the instructions in [../README.md](../README.md). - -Running the scyther tool ------------------------- - -### Graphical user interface ### - -The graphical user interface can be started by running `scyther-gui.py`, -e.g., enter the following in a terminal and press return - - python ./scyther-gui.py - -### Command-line usage ### - -In the directory `./Scyther` there should be an executable for the -Scyther backend. Its name depends on the platform: - - * `scyther-linux` (Linux) - * `scyther-w32` (Windows) - * `scyther-mac` (Mac OS X) - -If this executable does not exist, you probably downloaded the source -files, and will need to compile it first. See `../README.md` for further -details. - -There are also various test scripts (for usage in Linux) in this -directory. - -Obtaining the sources ----------------------- - -Scyther is being developed on *Github*, and its complete source files are -availabe from -<https://github.com/cascremers/scyther>. - -Manual ------- - -We are currently rewriting the manual. The current (incomplete) -distribution version of the manual can be found here: - - * [./scyther-manual.pdf](scyther-manual.pdf) - - -Protocol Models ---------------- - -The protocol models have the extension `.spdl` and can be found in the following directories: - - * [./Protocols](Protocols) and its subdirectories. - -License -------- - -Currently the Scyther tool is licensed under the GPL 2, as indicated in -the source code. Contact Cas Cremers if you have any questions. - diff --git a/Vagrant Files/shared/scyther/Scripts/regression-test.py b/Vagrant Files/shared/scyther/Scripts/regression-test.py deleted file mode 100644 index beabc7401a41f03adaac01670a93a0854594bb71..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scripts/regression-test.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python - -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -def testSet(blacklist=[]): - import os - - prefix = "../Protocols/" - dl = os.listdir(prefix) - fl = [] - for fn in dl: - if fn.endswith(".spdl"): - okay = True - for fb in blacklist: - if fn.startswith(fb): - okay = False - break - if okay: - fl.append((prefix,fn)) - return fl - -def evaluate(fn,prefix=""): - import subprocess - import tempfile - - cmd = "../Scyther/scyther-linux" - args = [cmd,"--max-runs=4","--plain",fn] - - fstdout = tempfile.TemporaryFile() - fstderr = tempfile.TemporaryFile() - - subprocess.call(args,stdout=fstdout,stderr=fstderr) - - fstdout.seek(0) - fstderr.seek(0) - - res = "" - for l in fstdout.xreadlines(): - res += prefix + l.strip() + "\n" - #for l in fstderr.xreadlines(): - # print l - - fstdout.close() - fstderr.close() - return res - - -def main(): - dest = "regression-test.txt" - output = "regression-test.txt.tmp" - - fp = open(output, 'w') - - fl = testSet(blacklist=['ksl']) - cnt = 1 - tres = "" - for (prefix,fn) in sorted(fl): - print "Evaluating %s (%i/%i)" % (fn,cnt,len(fl)) - res = evaluate(prefix+fn, "%s\t" % (fn)) - fp.write(res) - tres += res - cnt += 1 - fp.close() - - fp = open(dest, 'w') - fp.write(tres) - fp.close() - - print res - - - -if __name__ == '__main__': - main() diff --git a/Vagrant Files/shared/scyther/Scripts/regression-test.txt b/Vagrant Files/shared/scyther/Scripts/regression-test.txt deleted file mode 100644 index 3fa247fe3833c1427d9322dab08b5fb6eb34ceb6..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scripts/regression-test.txt +++ /dev/null @@ -1,64 +0,0 @@ -BKE.spdl claim bke,I SKR_4 kir Ok [no attack within bounds] -BKE.spdl claim bke,R SKR_7 kir Ok [no attack within bounds] -TLS-Paulson.spdl claim tlspaulson,a SKR_9a hash(sid,hash(pms,na,nb),na,pa,a,nb,pb,b,true) Ok [no attack within bounds] -TLS-Paulson.spdl claim tlspaulson,a SKR_9b hash(sid,hash(pms,na,nb),na,pa,a,nb,pb,b,false) Ok [no attack within bounds] -TLS-Paulson.spdl claim tlspaulson,b SKR_10a hash(sid,hash(pms,na,nb),na,pa,a,nb,pb,b,true) Ok [no attack within bounds] -TLS-Paulson.spdl claim tlspaulson,b SKR_10b hash(sid,hash(pms,na,nb),na,pa,a,nb,pb,b,false) Ok [no attack within bounds] -ccitt509-1.spdl claim ccitt509-1,R Nisynch_3 - Ok [proof of correctness] -ccitt509-1c.spdl claim ccitt509-1c,R Nisynch_3 - Ok [proof of correctness] -ccitt509-3.spdl claim ccitt509-3,I Nisynch_I1 - Ok [proof of correctness] -ccitt509-3.spdl claim ccitt509-3,I Secret_I2 Ya Ok [proof of correctness] -ccitt509-3.spdl claim ccitt509-3,I Secret_I3 Yb Ok [proof of correctness] -ccitt509-3.spdl claim ccitt509-3,R Nisynch_R1 - Fail [at least 3 attacks] -ccitt509-3.spdl claim ccitt509-3,R Secret_R2 Ya Ok [no attack within bounds] -ccitt509-3.spdl claim ccitt509-3,R Secret_R3 Yb Ok [no attack within bounds] -ccitt509-ban3.spdl claim ccitt509-ban3,I Nisynch_4 - Ok [proof of correctness] -ccitt509-ban3.spdl claim ccitt509-ban3,R Nisynch_5 - Ok [no attack within bounds] -needham-schroeder-lowe.spdl claim needhamschroederpk-Lowe,I Secret_I1 Ni Ok [no attack within bounds] -needham-schroeder-lowe.spdl claim needhamschroederpk-Lowe,I Secret_I2 Nr Ok [no attack within bounds] -needham-schroeder-lowe.spdl claim needhamschroederpk-Lowe,I Nisynch_I3 - Fail [at least 3 attacks] -needham-schroeder-lowe.spdl claim needhamschroederpk-Lowe,R Secret_R1 Nr Ok [no attack within bounds] -needham-schroeder-lowe.spdl claim needhamschroederpk-Lowe,R Secret_R2 Ni Ok [no attack within bounds] -needham-schroeder-lowe.spdl claim needhamschroederpk-Lowe,R Nisynch_R3 - Fail [at least 3 attacks] -needham-schroeder.spdl claim needhamschroederpk,I Secret_I1 Ni Ok [no attack within bounds] -needham-schroeder.spdl claim needhamschroederpk,I Secret_I2 Nr Ok [no attack within bounds] -needham-schroeder.spdl claim needhamschroederpk,I Nisynch_I3 - Fail [at least 3 attacks] -needham-schroeder.spdl claim needhamschroederpk,R Secret_R1 Nr Fail [at least 5 attacks] -needham-schroeder.spdl claim needhamschroederpk,R Secret_R2 Ni Fail [at least 5 attacks] -needham-schroeder.spdl claim needhamschroederpk,R Nisynch_R3 - Fail [at least 3 attacks] -smartright.spdl claim smartright,R Nisynch_R1 - Fail [at least 1 attack] -splice-as-cj.spdl claim spliceAS-CJ,I Secret_7 N2 Ok [no attack within bounds] -splice-as-cj.spdl claim spliceAS-CJ,I Niagree_9 - Fail [at least 1 attack] -splice-as-cj.spdl claim spliceAS-CJ,I Nisynch_10 - Fail [at least 1 attack] -splice-as-cj.spdl claim spliceAS-CJ,R Secret_8 N2 Ok [no attack within bounds] -splice-as-cj.spdl claim spliceAS-CJ,R Niagree_11 - Fail [at least 1 attack] -splice-as-cj.spdl claim spliceAS-CJ,R Nisynch_12 - Fail [at least 1 attack] -splice-as-hc.spdl claim spliceAS-HC,I Secret_7 N2 Ok [no attack within bounds] -splice-as-hc.spdl claim spliceAS-HC,I Niagree_9 - Fail [at least 1 attack] -splice-as-hc.spdl claim spliceAS-HC,I Nisynch_10 - Fail [at least 1 attack] -splice-as-hc.spdl claim spliceAS-HC,R Secret_8 N2 Ok [no attack within bounds] -splice-as-hc.spdl claim spliceAS-HC,R Niagree_11 - Fail [at least 1 attack] -splice-as-hc.spdl claim spliceAS-HC,R Nisynch_12 - Fail [at least 1 attack] -splice-as.spdl claim spliceAS,I Secret_7 N2 Ok [no attack within bounds] -splice-as.spdl claim spliceAS,I Niagree_9 - Fail [at least 1 attack] -splice-as.spdl claim spliceAS,I Nisynch_10 - Fail [at least 1 attack] -splice-as.spdl claim spliceAS,R Secret_8 N2 Ok [no attack within bounds] -splice-as.spdl claim spliceAS,R Niagree_11 - Fail [at least 1 attack] -splice-as.spdl claim spliceAS,R Nisynch_12 - Fail [at least 1 attack] -woo-lam-pi-1.spdl claim woolamPi-1,R Nisynch_R1 - Fail [at least 2 attacks] -woo-lam-pi-2.spdl claim woolamPi-2,R Nisynch_R1 - Fail [at least 3 attacks] -woo-lam-pi-3.spdl claim woolamPi-3,R Nisynch_R1 - Fail [at least 2 attacks] -woo-lam-pi-f.spdl claim woolamPi-f,R Nisynch_R1 - Fail [at least 1 attack] -woo-lam-pi.spdl claim woolamPi,R Nisynch_R1 - Fail [at least 2 attacks] -yahalom-ban-paulson-modified.spdl claim yahalom-BAN-Paulson-modified,A Secret_5 kab Ok [no attack within bounds] -yahalom-ban-paulson-modified.spdl claim yahalom-BAN-Paulson-modified,B Secret_6 kab Ok [no attack within bounds] -yahalom-ban-paulson.spdl claim yahalom-BAN-Paulson,A SKR_5 kab Ok [no attack within bounds] -yahalom-ban-paulson.spdl claim yahalom-BAN-Paulson,B SKR_6 kab Ok [no attack within bounds] -yahalom-lowe.spdl claim yahalom-Lowe,I Secret_I1 Kir Ok [proof of correctness] -yahalom-lowe.spdl claim yahalom-Lowe,I Nisynch_I2 - Ok [proof of correctness] -yahalom-lowe.spdl claim yahalom-Lowe,R Secret_R1 Kir Ok [proof of correctness] -yahalom-lowe.spdl claim yahalom-Lowe,R Nisynch_R2 - Ok [no attack within bounds] -yahalom.spdl claim yahalom,I Secret_I1 Kir Ok [no attack within bounds] -yahalom.spdl claim yahalom,R Secret_R1 Kir Ok [no attack within bounds] -yahalom.spdl claim yahalom,S Secret_S1 Ni Fail [at least 1 attack] -yahalom.spdl claim yahalom,S Secret_S2 Nr Ok [no attack within bounds] diff --git a/Vagrant Files/shared/scyther/Scripts/scytherview.py b/Vagrant Files/shared/scyther/Scripts/scytherview.py deleted file mode 100644 index 99738673234fb3b223aabd92128f89e878981842..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scripts/scytherview.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Convert scyther dot output to a printable PDF and display it -# -# This is a simple hack to be able to quickly use the graphical output -# of Scyther if one only has graphviz, but not elementtree and wxPython. -# -# Note 1: only works under Linux currently, because of silly assumptions -# on temporary directories and pdf viewers. -# -# Note 2: this code assumes that both scyther-linux and dot can be found in the -# environment (i.e. PATH variable) -# -import os,sys,commands -import os.path - -tempcount = 0 - -def generateTemp(extension='tmp'): - # We need a temporary file to hold the generated postscript stuff before - # it is converted to pdf - global tempcount - - tempcount = tempcount + 1 - tmp = '/tmp/output_dot_%s_%i.%s' % (os.getpid(),tempcount,extension) - - try: - os.unlink(tmp) - except: - pass - return tmp - -def scyther_to_dotfile(): - """ Run Scyther, return dotfile name """ - - mydir = os.path.dirname(__file__) - scythername = os.path.join(mydir, "../Scyther/scyther-linux") - - args = " ".join(sys.argv[1:]) - tmpdotfile = generateTemp('dot') - - command = "%s --plain --dot-output %s > %s" % (scythername, args, tmpdotfile) - output = commands.getoutput(command) - return (output,tmpdotfile) - -def dotfile_to_pdffile(dotfile,outfile=None): - """ Generate a PDF file (name is returned) from an input dotfile - name """ - - tmp = generateTemp('ps') - - # First split the input per digraph and call dot with -Gsize arguments to make - # it fit to a landscape page - dotdata = open(dotfile, "r") - f = None - for line in dotdata.xreadlines(): - if (line.find('digraph') == 0): - f = os.popen("dot -Gsize='11.0,8.0' -Gratio=fill -Tps >>%s" % (tmp),'w') - print >>f, line - dotdata.close() - - if not f: - return None - f.close() - - if not outfile: - outfile = generateTemp('pdf') - - # Now convert the resulting stuff to a pdf - os.system('ps2pdf -sPAPERSIZE=a4 -g7014x5300 -r600 %s %s' % (tmp,outfile)) - #os.system('ps2pdf -g8300x6250 -r600 %s %s' % (tmp,outf)) - - # And remove the temp file - os.unlink(tmp) - - return outfile - -def main(): - (output,dotfile) = scyther_to_dotfile() - print output - pdffile = dotfile_to_pdffile(dotfile) - os.unlink(dotfile) - if pdffile: - commands.getoutput("kpdf %s" % pdffile) - os.unlink(pdffile) - else: - print "No graphs generated." - -if __name__ == '__main__': - if len(sys.argv) > 1: - main() - else: - print "Please provide the name of an input file." - diff --git a/Vagrant Files/shared/scyther/Scyther/.gitignore b/Vagrant Files/shared/scyther/Scyther/.gitignore deleted file mode 100644 index c7e14a4cf54018ddb0f3361712aea1965fd4ba3e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -scyther-mac -scyther-linux -scyther-w32.exe diff --git a/Vagrant Files/shared/scyther/Scyther/Attack.py b/Vagrant Files/shared/scyther/Scyther/Attack.py deleted file mode 100644 index d07ee6e50f7d35ac57c98bf154557f04bc968b2d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Attack.py +++ /dev/null @@ -1,71 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Attack -# - -import Trace -import Term -#import Classification -from Misc import * - -class Attack(object): - def __init__(self): - self.broken = [] - self.match = None - self.initialKnowledge = [] - self.inverseKeys = [] - self.protocol = None - self.semiTrace = Trace.SemiTrace() - self.variables = [] - self.protocoldescr = {} - self.id = None - self.knowledge = None - self.untrusted = [] - self.typeflaws = False - self.commandline = '' - self.scytherDot = None - self.claim = None # refers to parent claim - - def getInvolvedAgents(self): - result = [] - for run in self.semiTrace.runs: - for agent in run.roleAgents.values(): - result.append(agent) - return uniq(result) - - def buildKnowledge(self): - if not self.knowledge: - self.knowledge = Term.Knowledge(self) - self.knowledge.buildKnowledge() - - def getPrecedingLabelSet(self,event): - return self.protocoldescr[str(event.label[0])].getPrecedingLabelSet(event.label) - - def getPrecedingRoleSet(self,event): - return self.protocoldescr[str(event.label[0])].getPrecedingRoleSet(event.label) - - #def classify(self): - # classification = Classification.Classification(self) - # classification.classifyClaims() - # classification.classifyInitiations() - # classification.classifyComplexity() - # classification.classifyTypeflaws() - # return classification diff --git a/Vagrant Files/shared/scyther/Scyther/Claim.py b/Vagrant Files/shared/scyther/Scyther/Claim.py deleted file mode 100644 index c0487894b4f7242507cdcaea53ea986f6a27663f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Claim.py +++ /dev/null @@ -1,197 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Claim -# - -import Term - -def stateDescription(okay,n=1,caps=False): - if okay: - s = "trace pattern" - if n != 1: - s += "s" - else: - s = "attack" - if n != 1: - s += "s" - if caps: - s = s[0].upper() + s[1:] - return s - - -class Claim(object): - def __init__(self): - self.id = None # a unique id string, consisting of 'protocol,label' - self.claimtype = None - self.label = None - self.shortlabel = None - self.protocol = None - self.role = None - self.parameter = None - self.failed = 0 - self.count = 0 - self.states = 0 - self.complete = False - self.timebound = False - self.attacks = [] - self.state = False # if true, it is a state, not an attack - self.okay = None # true if good, false if bad - - # derived info - self.foundstates = False - self.foundproof = False - - def analyze(self): - - # determine short label - # We need the rightmost thingy here - label = self.label - while isinstance(label,Term.TermTuple): - label = label[1] - self.shortlabel = label - - # determine id - self.id = "%s,%s" % (self.protocol,self.shortlabel) - - # some additional properties - if str(self.claimtype) == 'Reachable': - self.state = True - if self.failed > 0: - self.foundstates = True - if self.complete: - self.foundproof = True - - # status - # normally, with attacks, okay means none - self.okay = (self.failed == 0) - if self.state: - # but the logic reverses when it is states and not - # attacks... - self.okay = (not self.okay) - - def stateName(self,count=1,caps=False): - return stateDescription(self.state,count,caps) - - def getRank(self): - """ - Return claim rank - 0 - really failed - 1 - probably failed - 2 - probably okay - 3 - really okay - """ - n = len(self.attacks) - if not self.okay: - # not okay - if (self.state and self.complete) or ((not self.state) and (n > 0)): - return 0 - else: - return 1 - else: - # okay! - if not ((self.state and (n > 0)) or ((not self.state) and self.complete)): - return 2 - else: - return 3 - - def getVerified(self): - """ - returns an element of [None,'Verified','Falsified'] - """ - opts = ['Falsified',None,None,'Verified'] - return opts[self.getRank()] - - - def getColour(self): - """ - Returns a colour that expresses the state - """ - colours = ['#FF0000', - '#800000', - '#005800', - '#00B000'] - return colours[self.getRank()] - - def getOkay(self): - """ - Returns a very brief statement about the claim. - - Originally the two mid options had a question mark appended, but - from a users' point of view this might only be more confusing, - so I took them out again. - """ - colours = ['Fail', - 'Fail', - 'Ok', - 'Ok'] - return colours[self.getRank()] - - def getComment(self): - """ - returns a sentence describing the results for this claim - """ - n = len(self.attacks) - atxt = self.stateName(n) - remark = "" - if not self.complete: - if n == 0: - # no attacks, no states within bounds - remark = "No %s within bounds" % (atxt) - else: - # some attacks/states within bounds - remark = "At least %i %s" % (n,atxt) - else: - if n == 0: - # no attacks, no states - remark = "No %s" % (atxt) - else: - # there exist n states/attacks (within any number of runs) - remark = "Exactly %i %s" % (n,atxt) - return remark + "." - - def triplet(self): - """ - Return protocol,role,label triplet - """ - return (self.protocol, self.role, self.shortlabel) - - def describe(self): - s = str(self.claimtype) - if self.parameter: - s+= "(%s)" % self.parameter - - return s - - def roledescribe(self): - return "%s: %s" % (self.role,self.describe()) - - def __str__(self): - """ - Resulting string - """ - s = "claim id [%s], %s" % (self.id,self.describe()) - - # determine status - s+= "\t: %s" % self.getComment() - - return s - - diff --git a/Vagrant Files/shared/scyther/Scyther/Error.py b/Vagrant Files/shared/scyther/Scyther/Error.py deleted file mode 100644 index 88f5db8cb19cda4b053b3bc1b8d4abdb8ca22315..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Error.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Scyther interface error classes -# - -#--------------------------------------------------------------------------- - -class Error(Exception): - """Base class for exceptions in this module.""" - pass - -class ScytherError(Error): - """Exception raised for errors generated by the backend - - Attributes: - errorlist -- list of error lines are retrieved from the - backend - """ - - def __init__(self, errorlist,filenames=None,options=None): - self.errorlist = errorlist - self.filenames = filenames - self.options = options - - def __str__(self): - s = "Scyther backend reported errors" - if len(self.filenames) == 0: - s = s + " for unknown files." - if len(self.filenames) == 1: - s = s + " for file %s" % (self.filenames) - if len(self.filenames) > 1: - s = s + " for files %s" % (self.filenames) - s = s + "\n" - s = s + "Options: '%s'\n\n" % (self.options) - S = s + "Error details:\n" - s = s + "\n".join(self.errorlist) - return s - -class InputError(Error): - """Exception raised for errors in the input. - - Attributes: - expression -- input expression in which the error occurred - message -- explanation of the error - """ - - def __init__(self, expression, message): - self.expression = expression - self.message = message - -class BinaryError(Error): - """Raised when the Scyther executable is not found. - - Attributes: - file -- file location at which we should have been able to find it. - """ - - def __init__(self, file): - self.file = file - - def __str__(self): - return "Could not find Scyther executable at '%s'" % (self.file) - - -class NoBinaryError(Error): - """Raised when the Scyther executable is not defined. - - Attributes: - None. - """ - - def __str__(self): - return "Scyther class attribute 'program' was not defined." - - -class UnknownPlatformError(Error): - """Raised when the platform is not supported yet. - - Attributes: - platform -- string describing the platform. - """ - - def __init__(self, platform): - self.platform = platform - - def __str__(self): - return "The %s platform is currently unsupported." % self.platform - -class StringListError(Error): - """Raised when the a string should be a list of strings or a string - - Attributes: - obj -- object that did not fit - """ - - def __init__(self, obj): - self.obj = obj - - def __str__(self): - return "Got '%s', which is type '%s' instead of a (list of) string." % (self.obj, type(self.obj)) - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Scyther/FindDot.py b/Vagrant Files/shared/scyther/Scyther/FindDot.py deleted file mode 100644 index c70c3ff413fea106d810ed81ab315bf246bd3758..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/FindDot.py +++ /dev/null @@ -1,129 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# FindDot.py -# -# Since version 2.31, GraphViz no longer sets the PATH environment variable on Windows. -# The sole reason of existence for this file is to solve this issue automatically if possible. - -#--------------------------------------------------------------------------- -""" Import externals """ -import sys -import os -#--------------------------------------------------------------------------- -""" Import internals """ -import Misc -#--------------------------------------------------------------------------- - -DOTLOCATION = None - -#--------------------------------------------------------------------------- - -def testDot(fpath): - - try: - cmd = "%s -V" % (fpath) - (sts,sout,serr) = Misc.safeCommandOutput(cmd) - if sts != -1: - if "version" in sout + serr: - return True - except: - pass - - return False - -#--------------------------------------------------------------------------- - -def scanPrefix(pf,name): - - if pf.endswith("*"): - import glob - - gl = glob.glob(pf) - for pf in gl: - for root,dirs,files in os.walk(pf): - for d in dirs: - npf = os.path.join(root,d) - res = scanPrefix(npf,name) - if res != None: - return res - - return None - - fpath = os.path.join(pf,name) - if len(pf) > 0: - fpath = "\"%s\"" % (fpath) - if testDot(fpath) == True: - return fpath - - return None - - -def scanLocations(): - if sys.platform.startswith("win"): - prefixes = ["", \ - "C:\Program Files\Graphviz*", \ - "C:\Program Files (x86)\Graphviz*" ] - name = "dot.exe" - else: - prefixes = [""] - name = "dot" - - for pf in prefixes: - path = scanPrefix(pf,name) - if path != None: - return path - - return None - -#--------------------------------------------------------------------------- - -def findDot(): - global DOTLOCATION - - # Cache the results - if DOTLOCATION != None: - return DOTLOCATION - - DOTLOCATION = scanLocations() - if DOTLOCATION == None: - Misc.panic(""" -Could not find the required 'dot' program, which is part of the Graphviz suite. -Please install it from http://www.graphviz.org/ - -Ubuntu users: install the 'graphviz' package. - -Windows users: make sure that Graphviz is installed and - that the location of the 'dot' program is in - the PATH environment variable. - -Restarting your system may be needed for Scyther to locate any newly installed -programs. - """) - return DOTLOCATION - -#--------------------------------------------------------------------------- - -if __name__ == '__main__': - Misc.panic(findDot()) - -#--------------------------------------------------------------------------- - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Scyther/Misc.py b/Vagrant Files/shared/scyther/Scyther/Misc.py deleted file mode 100644 index e41abd8be8b78adf5da1a74bd3448dcee65effa5..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Misc.py +++ /dev/null @@ -1,158 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Misc.py -# Various helper functions - -#--------------------------------------------------------------------------- - -""" Import externals """ -import sys -import os.path -try: - from subprocess import Popen,PIPE -except: - panic(""" -Cannot import 'subprocess.Popen' module. - -You need at least Python 2.4 to use this program. -""") - -#--------------------------------------------------------------------------- - -def confirm(question): - answer = '' - while answer not in ('y','n'): - print question, - answer = raw_input().lower() - return answer == 'y' - -def exists(func,list): - return len(filter(func,list)) > 0 - -def forall(func,list): - return len(filter(func,list)) == len(list) - -def uniq(li): - result = [] - for elem in li: - if (not elem in result): - result.append(elem) - return result - -# Return a sorted copy of a list -def sorted(li): - result = li[:] - result.sort() - return result - - -# ensurePath: wraps os.makedirs -def ensurePath(pt): - """ - Make sure the path exists: if not, create the directories one by one - - By example: - - Call with "dog/cat/bone" ensures that afterwards, this subdirectory structure (dog/cat/bone) exists, with 'bone' a directory. - It ensures this by doing the procedure for "dog", then "dog/cat", etc... - """ - - if not os.path.isdir(pt): - # Note that os.path.exists(pt) may still hold. In this case the next command will cause an error. - os.makedirs(pt) - - -# path -def mypath(file): - """ Construct a file path relative to the scyther-gui main directory - """ - # Determine base directory (taking symbolic links into account) - cmd_file = os.path.realpath(os.path.abspath(inspect.getfile( inspect.currentframe() ))) - basedir = os.path.split(cmd_file)[0] - return os.path.join(basedir,file) - -def getShell(): - """ - Determine if we want a shell for Popen - """ - if sys.platform.startswith("win"): - shell=False - else: - # Needed to handle the string input correctly (as opposed to a sequence where the first element is the executable) - # This is not needed on Windows, where it has a different effect altogether. - # See http://docs.python.org/library/subprocess.html?highlight=subprocess#module-subprocess - shell=True - return shell - -def safeCommandOutput(cmd, storePopen=None): - """ Execute a command and return (sts,sout,serr). - Meant for short outputs, as output is stored in memory and - not written to a file. - """ - p = Popen(cmd, shell=getShell(), stdout=PIPE, stderr=PIPE) - if storePopen != None: - storePopen(p) - (sout,serr) = p.communicate() - - return (p.returncode,sout,serr) - -def safeCommand(cmd, storePopen=None): - """ Execute a command with some arguments. Safe cross-platform - version, I hope. """ - - try: - p = Popen(cmd, shell=getShell()) - if storePopen != None: - storePopen(p) - sts = p.wait() - except KeyboardInterrupt, EnvironmentError: - raise - except: - print "Wile processing [%s] we had an" % (cmd) - print "unexpected error:", sys.exc_info()[0] - print - sts = -1 - raise # For now still raise - - return sts - - -def panic(text): - """ - Errors that occur before we even are sure about wxPython etc. are dumped - on the command line and reported using Tkinter. - """ - - try: - import Tkinter - except: - print text - sys.exit(-1) - - print text - - root = Tkinter.Tk() - w = Tkinter.Label(root, justify=Tkinter.LEFT, padx = 10, text=text) - w.pack() - root.mainloop() - - sys.exit(-1) - diff --git a/Vagrant Files/shared/scyther/Scyther/Scyther.py b/Vagrant Files/shared/scyther/Scyther/Scyther.py deleted file mode 100644 index 0de9bb6c597a59919d9a11df1de16aed34c6c406..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Scyther.py +++ /dev/null @@ -1,648 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Scyther interface -# - -#--------------------------------------------------------------------------- - -""" Import externals """ -import os -import os.path -import sys -import StringIO -import tempfile -try: - import hashlib - HASHLIB = True -except ImportError: - HASHLIB = False - pass - -#--------------------------------------------------------------------------- - -""" Import scyther components """ -import XMLReader -import Error -import Claim -from Misc import * - -#--------------------------------------------------------------------------- - -""" -Globals -""" - -FirstCheck = True - -#--------------------------------------------------------------------------- - -""" -Get current directory (for this file) -""" -def getMyDir(): - return os.path.dirname( os.path.realpath( __file__ ) ) - -""" -The default path for the binaries is the current one. -""" -def getBinDir(): - return getMyDir() - -""" -Return Cache prefix path -Returns None if not existent -""" -def getCacheDir(): - - tmpdir = None - - # Check if user chose the path - cachedirkey = "SCYTHERCACHEDIR" - if cachedirkey in os.environ.keys(): - tmpdir = os.environ[cachedirkey] - if tmpdir == "": - # Special value: if the variable is present, but equals the empty string, we disable caching. - return None - else: - # Otherwise take from path - tmpdir = tempfile.gettempdir() - - # If not none, append special name - if tmpdir != None: - tmpdir = os.path.join(tmpdir,"Scyther-cache") - - return tmpdir - - - -#--------------------------------------------------------------------------- - -def Check(): - """ - Various dynamic checks that can be performed before starting the - backend. - """ - - global FirstCheck - - # First time - if FirstCheck: - """ - Perform any checks that only need to be done the first time. - """ - FirstCheck = False - - # Every time - - # Check Scyther backend program availability - program = getScytherBackend() - CheckSanity(program) - - -#--------------------------------------------------------------------------- - -def CheckSanity(program): - """ - This is where the existence is checked of the Scyther backend. - """ - - if not os.path.isfile(program): - raise Error.BinaryError, program - -#--------------------------------------------------------------------------- - -def EnsureString(x,sep=" "): - """ - Takes a thing that is either a list or a string. - Turns it into a string. If it was a list, <sep> is inserted, and the - process iterats. - - TODO does not accept unicode yet, that is something that must be - handled to or we run into wxPython problems eventually. - """ - if type(x) is str: - return x - - elif type(x) is list: - newlist = [] - for el in x: - newlist.append(EnsureString(el,sep)) - return sep.join(newlist) - - else: - raise Error.StringListError, x - - -#--------------------------------------------------------------------------- - -def getScytherBackend(): - # Where is my executable? - # - # Auto-detect platform and infer executable name from that - # - if "linux" in sys.platform: - - """ linux """ - scythername = "scyther-linux" - - elif "darwin" in sys.platform: - - """ OS X """ - scythername = "scyther-mac" - - elif sys.platform.startswith('win'): - - """ Windows """ - scythername = "scyther-w32.exe" - - else: - - """ Unsupported""" - raise Error.UnknownPlatformError, sys.platform - - program = os.path.join(getBinDir(),scythername) - return program - - -#--------------------------------------------------------------------------- - -class Scyther(object): - def __init__ ( self): - - # Init - self.program = getScytherBackend() - self.spdl = None - self.inputfile = None - self.filenames = [] - self.options = "" - self.claims = None - self.errors = None - self.errorcount = 0 - self.warnings = None - self.run = False - self.output = None - self.cmd = None - - # defaults - self.xml = True # this results in a claim end, otherwise we simply get the output - - def setInput(self,spdl): - self.spdl = spdl - self.inputfile = None - self.guessFileNames() - - def setFile(self,filename): - self.inputfile = filename - self.filenames = [self.inputfile] - self.spdl = "" - fp = open(filename,"r") - for l in fp.readlines(): - self.spdl += l - fp.close() - - def addFile(self,filename): - self.inputfile = None - if not self.spdl: - self.spdl = "" - fp = open(filename,"r") - for l in fp.readlines(): - self.spdl += l - fp.close() - self.guessFileNames() - - def guessFileNames(self,spdl=None): - """ - Try to extract filenames (well, actually, protocol names) sloppily from some spdl script. - - There are two modes: - - [init] : If the spdl parameter is empty or None, we reset the filenames and extract from self.spdl - [add] : If the spdl parameter is non-empty, add the extracted filenames to an existing list - - """ - - if (spdl == None) or (len(spdl) == 0): - spdl = self.spdl - if spdl == None: - spdl = "" - self.filenames = [] - - for sl in spdl.splitlines(): - l = sl.strip() - prefix = "protocol " - postfix = "(" - x = l.find(prefix) - if x >= 0: - # The prefix occurs - y = l.find(postfix,x+len(prefix)) - if y >= 0: - gn = l[x+len(prefix):y] - # check for helper protocols - if not gn.startswith("@"): - if gn not in self.filenames: - self.filenames.append(gn) - - def addArglist(self,arglist): - for arg in arglist: - self.options += " %s" % (arg) - - def doScytherCommand(self, spdl, args, checkKnown=False, storePopen=None): - """ - Cached version of the 'real' below - - TODO: CC: One possible problem with the caching is the side-effect, e.g., scyther writing to specific named output files. These are not - captured in the cache. I don't have a good solution for that yet. - """ - global HASHLIB - - # Can we use the cache? - canCache = False - if HASHLIB: - cacheDir = getCacheDir() - if cacheDir != None: - canCache = True - else: - cacheDir = None - - # If we cannot use the cache, we either need to compute or, if checking for cache presense,... - if not canCache: - if checkKnown == True: - # not using the cache, so we don't have it already - return False - else: - # Need to compute - return self.doScytherCommandReal(spdl,args, storePopen=storePopen) - - # Apparently we are supporsed to be able to use the cache - m = hashlib.sha256() - if spdl == None: - m.update("[spdl:None]") - else: - m.update(spdl) - if args == None: - m.update("[args:None]") - else: - m.update(args) - - uid = m.hexdigest() - - # Split the uid to make 256 subdirectories with 256 subdirectories... - prefixlen = 2 - uid1 = uid[:prefixlen] - uid2 = uid[prefixlen:prefixlen+2] - uid3 = uid[prefixlen+2:] - - # Possibly we could also decide to store input and arguments in the cache to analyze things later - - # Construct: cachePath/uid1/uid2/... - path = os.path.join(cacheDir,uid1,uid2) - name1 = "%s.out" % (uid3) - name2 = "%s.err" % (uid3) - - fname1 = os.path.join(path, name1) - fname2 = os.path.join(path, name2) - - try: - """ - Try to retrieve the result from the cache - """ - fh1 = open(fname1,"r") - out = fh1.read() - fh1.close() - fh2 = open(fname2,"r") - err = fh2.read() - fh2.close() - if checkKnown == True: - # We got to here, so we have it - return True - else: - # Not checking cache, we need the result - return (out,err) - except: - pass - - """ - Something went wrong, do the real thing and cache afterwards - """ - if checkKnown == True: - # We were only checking, abort - return False - - (out,err) = self.doScytherCommandReal(spdl,args, storePopen=storePopen) - - try: - # Try to store result in cache - ensurePath(path) - - fh1 = open(fname1,"w") - fh1.write(out) - fh1.close() - - fh2 = open(fname2,"w") - fh2.write(err) - fh2.close() - except: - pass - - return (out,err) - - - def doScytherCommandReal(self, spdl, args, storePopen=None): - """ - Run Scyther backend on the input - - Arguments: - spdl -- string describing the spdl text - args -- arguments for the command-line - storePopen -- callback function to register Popen objects (used for process kill by other threads) - Returns: - (output,errors) - output -- string which is the real output - errors -- string which captures the errors - """ - - if self.program == None: - raise Error.NoBinaryError - - # Sanitize input somewhat - if spdl == "": - # Scyther hickups on completely empty input - spdl = "\n" - - # Extract filenames for error reporting later - self.guessFileNames(spdl=spdl) - - # Generate temporary files for the output. - # Requires Python 2.3 though. - (fde,fne) = tempfile.mkstemp() # errors - (fdo,fno) = tempfile.mkstemp() # output - if spdl: - (fdi,fni) = tempfile.mkstemp() # input - - # Write (input) file - fhi = os.fdopen(fdi,'w+b') - fhi.write(spdl) - fhi.close() - - # Generate command line for the Scyther process - self.cmd = "" - self.cmd += "\"%s\"" % self.program - self.cmd += " --append-errors=%s" % fne - self.cmd += " --append-output=%s" % fno - self.cmd += " %s" % args - if spdl: - self.cmd += " %s" % fni - - # Only for debugging, really - ##print self.cmd - - # Start the process - safeCommand(self.cmd, storePopen=storePopen) - - # reseek - fhe = os.fdopen(fde) - fho = os.fdopen(fdo) - errors = fhe.read() - output = fho.read() - - # clean up files - fhe.close() - fho.close() - os.remove(fne) - os.remove(fno) - if spdl: - os.remove(fni) - - return (output,errors) - - def sanitize(self): - """ Sanitize some of the input """ - self.options = EnsureString(self.options) - - def verify(self,extraoptions=None,checkKnown=False,storePopen=None): - """ Should return a list of results """ - """ If checkKnown == True, we do not call Scyther, but just check the cache, and return True iff the result is in the cache """ - - # Cleanup first - self.sanitize() - - # prepare arguments - args = "" - if self.xml: - args += " --dot-output --xml-output --plain" - args += " %s" % self.options - if extraoptions: - # extraoptions might need sanitizing - args += " %s" % EnsureString(extraoptions) - - # Are we only checking the cache? - if checkKnown == True: - return self.doScytherCommand(self.spdl, args, checkKnown=checkKnown, storePopen=storePopen) - - # execute - (output,errors) = self.doScytherCommand(self.spdl, args, storePopen=storePopen) - self.run = True - - # process errors - self.errors = [] - self.warnings = [] - for l in errors.splitlines(): - line = l.strip() - if len(line) > 0: - # filter out any non-errors (say maybe only claim etc) and count - # them. - if line.startswith("claim\t"): - # Claims are lost, reconstructed from the XML output - pass - elif line.startswith("warning"): - # Warnings are stored seperately - self.warnings.append(line) - else: - # otherwise it is an error - self.errors.append(line) - - self.errorcount = len(self.errors) - if self.errorcount > 0: - raise Error.ScytherError(self.errors,filenames=self.filenames,options=self.options) - - # process output - self.output = output - self.validxml = False - self.claims = [] - if self.xml: - if len(output) > 0: - if output.startswith("<scyther>"): - - # whoohee, xml - self.validxml = True - - xmlfile = StringIO.StringIO(output) - reader = XMLReader.XMLReader() - self.claims = reader.readXML(xmlfile) - - # Determine what should be the result - if self.xml: - return self.claims - else: - return self.output - - def verifyOne(self,cl=None,checkKnown=False,storePopen=None): - """ - Verify just a single claim with an ID retrieved from the - procedure below, 'scanClaims', or a full claim object - - If checkKnown is True, return if the result is already known (but never recompute). - """ - if cl: - # We accept either a claim or a claim id - if isinstance(cl,Claim.Claim): - cl = cl.id - return self.verify("--filter=%s" % cl, checkKnown=checkKnown,storePopen=storePopen) - else: - # If no claim, then its just normal verification - return self.verify(checkKnown=checkKnown,storePopen=storePopen) - - def scanClaims(self): - """ - Retrieve the list of claims. Of each element (a claim), claim.id - can be passed to --filter=X or 'verifyOne' later. - A result of 'None' means that some errors occurred. - """ - self.verify("--scan-claims") - if self.errorcount > 0: - return None - else: - self.validxml = False # Signal that we should not interpret the output as XML - return self.claims - - def getClaim(self,claimid): - if self.claims: - for cl in self.claims: - if cl.id == claimid: - return cl - return None - - def __str__(self): - if self.run: - if self.errorcount > 0: - return "%i errors:\n%s" % (self.errorcount, "\n".join(self.errors)) - else: - if self.xml and self.validxml: - s = "Verification results:\n" - for cl in self.claims: - s += str(cl) + "\n" - return s - else: - return self.output - else: - return "Scyther has not been run yet." - -#--------------------------------------------------------------------------- - -def GetClaims(filelist, filterlist=None): - """ - Given a list of file names in filelist, - returns a dictionary of filenames to lists claim names. - Filenames which yielded no claims are filtered out. - - Filterlist may be None or a list of claim names (Secret, SKR, Niagree etc). - """ - - dict = {} - for fname in filelist: - try: - sc = Scyther() - sc.setFile(fname) - l = sc.scanClaims() - if l != None: - cl = [] - for claim in l: - if filterlist == None: - cl.append(claim.id) - else: - if claim.claimtype in filterlist: - cl.append(claim.id) - dict[fname] = cl - except: - pass - return dict - -#--------------------------------------------------------------------------- - -def FindProtocols(path="",filterProtocol=None): - """ - Find a list of protocol names - - Note: Unix only! Will not work under windows. - """ - - import commands - - cmd = "find %s -iname '*.spdl'" % (path) - plist = commands.getoutput(cmd).splitlines() - nlist = [] - for prot in plist: - if filterProtocol != None: - if filterProtocol(prot): - nlist.append(prot) - else: - nlist.append(prot) - return nlist - -#--------------------------------------------------------------------------- - -def GetInfo(html=False): - """ - Retrieve a tuple (location,string) with information about the tool, - retrieved from the --expert --version data - """ - - program = getScytherBackend() - arg = "--expert --version" - sc = Scyther() - (output,errors) = sc.doScytherCommand(spdl=None, args=arg) - if not html: - return (program,output) - else: - sep = "<br>\n" - html = "Backend: %s%s" % (program,sep) - for l in output.splitlines(): - l.strip() - html += "%s%s" % (l,sep) - return html - - -def GetLicense(): - """ - Retrieve license information. - """ - - program = getScytherBackend() - arg = "--license" - sc = Scyther() - (output,errors) = sc.doScytherCommand(spdl=None, args=arg) - return output - - -#--------------------------------------------------------------------------- - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/Scyther/Term.py b/Vagrant Files/shared/scyther/Scyther/Term.py deleted file mode 100644 index 9369aa24ebcf518003261f0a3aafcf0b695563a7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Term.py +++ /dev/null @@ -1,223 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Term -# -import Trace -from Misc import * - -class InvalidTerm(TypeError): - "Exception used to indicate that a given term is invalid" - - -class Knowledge(object): - def __init__(self,attack): - self.attack = attack - self.knowledge = [] - - def getInverse(self,term): - for pair in self.attack.inverseKeys: - if term == pair[0]: - return pair[1] - if term == pair[1]: - return pair[0] - - # Get the inverse key - def getInverseKey(self,term): - # First try to see if the entire term has an inverse - result = self.getInverse(term) - if result != None: - return result - - # If it is an apply term, try to see if the function has an inverse - if isinstance(term,TermApply): - result = self.getInverse(term.function) - if result != None: - return TermApply(result,term.argument) - - # No inverse found, so term is its own inverse - return term - - # Add a term to the knowledge - def add(self,term): - if term == None: - return - added = False - for x in term.deriveTerms(self): - if not x in self.knowledge: - added = True - self.knowledge.append(x) - - # Something new was added, maybe this can help us to decrypt a term - # that we could not decrypt before - if added: - for x in self.knowledge: - if isinstance(x,TermEncrypt): - self.add(x) - - def canDerive(self,term): - # We can derive free variables, because we can even choose them - if isinstance(term,TermVariable) and term.isFree(): - return True - # We can derive a term if it is in the knowledge - # or all terms required to construct it are in the knowledge - if exists(lambda x: x == term,self.knowledge): - return True - constructors = term.constructorTerms() - - if len(constructors) == 1 and constructors[0] == term: - # This is a single term, there is no need to look at constructor - # terms as we have already looked at the complete term - return False - - return forall(lambda x: self.canDerive(x),constructors) - - - # Knowledge is the initial knowledge and all messages in sends - def buildKnowledge(self): - self.knowledge = self.attack.initialKnowledge[:] - for run in self.attack.semiTrace.runs: - # Intruder actions do not add knowledge processing them - # is a waste of time - if run.intruder: - continue - for event in run: - if isinstance(event,Trace.EventSend): - self.add(event.message) - self.add(event.fr) - self.add(event.to) - -class Term(object): - def __init__(self): - self.types = None - - def __str__(self): - raise InvalidTerm - - def constructorTerms(self): - raise InvalidTerm - - def deriveTerms(self,knowledge): - raise InvalidTerm - - # Two terms are equal when their string rep is equal - def __cmp__(self,other): - return cmp(str(self),str(other)) - - -class TermConstant(Term): - def __init__(self, constant): - Term.__init__(self) - self.value = str(constant) - - def deriveTerms(self,knowledge): - return [self] - - def constructorTerms(self): - return [self] - - def __str__(self): - return self.value - -class TermEncrypt(Term): - def __init__(self, value, key): - Term.__init__(self) - self.value = value - self.key = key - - def deriveTerms(self,knowledge): - # In order to unpack an encrypted term we have to have the inverse key - inverse = knowledge.getInverseKey(self.key) - if knowledge.canDerive(inverse): - return [self] + [self.value] + self.value.deriveTerms(knowledge) - else: - return [self] - - def constructorTerms(self): - return [self.value,self.key] - - def __str__(self): - return "{%s}%s" % (self.value, self.key) - -class TermApply(Term): - def __init__(self, function, argument): - Term.__init__(self) - self.function = function - self.argument = argument - - def constructorTerms(self): - return [self.function,self.argument] - - def deriveTerms(self,knowledge): - return [self] - - def __str__(self): - return "%s(%s)" % (self.function, self.argument) - -class TermVariable(Term): - def __init__(self, name, value): - Term.__init__(self) - self.name = name - self.value = value - - def isFree(self): - return self.value == None - - def constructorTerms(self): - if self.value != None: - return [self.value] - else: - return [self.name] - - def deriveTerms(self,knowledge): - if self.value != None: - return [self,self.value] + self.value.deriveTerms(knowledge) - else: - return [self,self.name] - - def __str__(self): - if (self.value != None): - return str(self.value) - else: - return str(self.name) - -class TermTuple(Term): - def __init__(self, op1, op2): - Term.__init__(self) - self.op1 = op1 - self.op2 = op2 - - def __str__(self): - return "%s,%s" % (self.op1,self.op2) - - def constructorTerms(self): - return [self.op1,self.op2] - - def deriveTerms(self,knowledge): - return [self,self.op1,self.op2]+self.op1.deriveTerms(knowledge)+self.op2.deriveTerms(knowledge) - - def __getitem__(self,index): - if index == 0: - return self.op1 - elif index == 1: - return self.op2 - else: - return self.op2.__getitem__(index-1) - diff --git a/Vagrant Files/shared/scyther/Scyther/Trace.py b/Vagrant Files/shared/scyther/Scyther/Trace.py deleted file mode 100644 index 31e31cc7be59e9a97da71df3415c3a29df28ad2f..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/Trace.py +++ /dev/null @@ -1,358 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Trace -# -from Misc import * - -class InvalidAction(TypeError): - "Exception used to indicate that a given action is invalid" - -class InvalidEvent(TypeError): - "Exception used to indicate that a given event is invalid" - -class SemiTrace(object): - def __init__(self): - self.runs = [] - - def totalCount(self): - count = 0 - for run in self.runs: - count += len(run.eventList) - return count - - def sortActions(self,actionlist): - newlist = actionlist[:] - newlist.sort(lambda x,y: self.getOrder(x,y)) - return newlist - - def getEnabled(self,previous): - enabled = [] - for run in self.runs: - for event in run: - if event in previous or event in enabled: - continue - prec = self.getPrecedingEvents(event,previous) - if len(prec) == 0: - enabled.append(event) - return enabled - - # Returns run,index tuples for all connections - def getConnections(self,event,removeIntruder=False): - if not removeIntruder: - return event.follows - result = [] - if event.run.intruder: - for before in event.getBefore(): - result.extend(self.getConnections(before,removeIntruder)) - - for x in event.follows: - fol = self.getEvent(x) - # If this is an intruder action descend into it - if fol.run.intruder: - result.extend(self.getConnections(fol,removeIntruder)) - else: - result.append(x) - return uniq(result) - - # Return the minimum set of preceding events for a given event - # that is the events before this event in the same run and all - # actions required by the partional ordering - # If previous is non empty remove all events already in previous - def getPrecedingEvents(self,event,previous=[]): - # If it is cached return cached version - if event.preceding != None: - return filter(lambda x: x not in previous,event.preceding) - preceding = [] - for prec in event.getBefore(): - preceding.append(prec) - preceding.extend(self.getPrecedingEvents(prec)) - for x in event.follows: - fol = self.getEvent(x) - preceding.append(fol) - preceding.extend(self.getPrecedingEvents(fol)) - preceding = uniq(preceding) - event.preceding = preceding - preceding = filter(lambda x: x not in previous,preceding) - return preceding - - # Returns -1 if the first event has to be before the second one - # +1 if the second event has to be before the first one - # 0 if there is no order defined on the two events - def getOrder(self,event1,event2): - if (event1 in self.getPrecedingEvents(event2)): - return -1 - if (event2 in self.getPrecedingEvents(event1)): - return 1 - return 0 - - # Get event by run id and index - def getEvent(self,idx): - (rid,index) = idx - for run in self.runs: - if run.id != rid: - continue - for event in run: - if event.index == index: - return event - raise InvalidEvent - - # Get all claim events in the trace - def getClaims(self): - claims = [] - for run in self.runs: - for event in run: - if isinstance(event,EventClaim): - claims.append(event) - return claims - - # Returns a list of all initiation events in the semitrace - def getInitiations(self): - initiations = [] - for run in self.runs: - # Initiations are runs of honest agents - if (run.intruder): - continue - # Which contain no recvs before the first send - for action in run: - if (isinstance(action,EventRead)): - break - elif (isinstance(action,EventSend)): - initiations.append(action) - break - return initiations - - # Get all runs performed by a specific agent - def getAgentRuns(self,agent): - result = [] - for run in self.runs: - if run.getAgent() == agent: - result.append(run) - return result - - # Return a list of all runs that are parallel with this run - def getParallelRuns(self,run): - parallel = [] - first = run.getFirstAction() - # Process all events that are before the end of the run - for event in self.getPrecedingEvents(run.getLastAction()): - # Only count those we haven't found yet - if event.run in parallel or event.run == run: - continue - # If the event is also after the beginning of the run it is - # parallel - if self.getOrder(event,first) == 1: - parallel.append(event.run) - return parallel - - def getRun(self,runid): - for run in self.runs: - if run.id == runid: - return run - return None - -class ProtocolDescription(object): - def __init__(self,protocol): - self.protocol = protocol - self.roledescr = {} - - # Find event by label - def findEvent(self,eventlabel,eventType=None): - for (role,descr) in self.roledescr.items(): - for event in descr: - if event.label == eventlabel: - if eventType == None or isinstance(event,eventType): - return event - - # Return all events that should have occured before the given event - # if the protocol is executed exactly as specified - # (i.e. all previous events in the same run and the preceding events - # of the matching sends of all reads) - def getPrecedingEvents(self,eventlabel,eventType=None): - event = self.findEvent(eventlabel,eventType) - if event.preceding != None: - return event.preceding - preceding = event.getBefore()+[event] - for prev in preceding: - # For this event and all events that are before it in the run - # description see if it is a read and if it is also add the - # precedinglabelset of the matching send - if (isinstance(prev,EventRead)): - match = self.findEvent(prev.label,EventSend) - if match: - preceding.extend(self.getPrecedingEvents(match.label,EventSend)) - preceding = uniq(preceding) - event.preceding = preceding - return preceding - - # Calculate the preceding labelset that is all read events - # that are in the precedingEvents of a certain event - def getPrecedingLabelSet(self,eventlabel): - events = self.getPrecedingEvents(eventlabel) - events = filter(lambda x: isinstance(x,EventRead),events) - return [x.label for x in events] - - # Calculate the roles in preceding labelset that is all roles that - # that are in the precedingEvents of a certain event - def getPrecedingRoleSet(self,eventlabel): - events = self.getPrecedingEvents(eventlabel) - roles = uniq([x.run.role for x in events]) - return roles - - - def __str__(self): - s = '' - for x in self.roledescr.values(): - for e in x: - s += str(e) + "\n" - return s - -class Run(object): - def __init__(self): - self.id = None - self.protocol = None - self.role = None - self.roleAgents = {} - self.eventList = [] - self.intruder = False - self.attack = None - self.variables = [] - - def __iter__(self): - return iter(self.eventList) - - def getAgent(self): - if self.intruder: - return None - return self.roleAgents[self.role] - - def getFirstAction(self): - return self.eventList[0] - - def getLastAction(self): - return self.eventList[-1] - - def collapseIntruder(self): - """ TODO still working on this. """ - if self.intruder: - shouldcollapse = False - for ev in self: - return - -class Event(object): - def __init__(self,index,label,follows): - self.index = index - self.label = label - self.follows = follows - self.run = None - self.preceding = None - self.rank = None - - def shortLabel(self): - try: - return self.label[len(self.label)-1] - except: - return str(self.label) - - def getBefore(self): - result = [] - for event in self.run: - if (event == self): - return result - result.append(event) - # This should never happen - assert(False) - -class EventSend(Event): - def __init__(self,index,label,follows,fr,to,message): - Event.__init__(self,index,label,follows) - self.fr = fr - self.to = to - self.message = message - - def __str__(self): - if self.run.intruder: - return "SEND(%s)" % self.message - else: - return "SEND_%s(%s,%s)" % (self.shortLabel(),self.to,self.message) - -class EventRead(Event): - def __init__(self,index,label,follows,fr,to,message): - Event.__init__(self,index,label,follows) - self.fr = fr - self.to = to - self.message = message - - def __str__(self): - if self.run.intruder: - return "READ(%s)" % self.message - else: - return "READ_%s(%s,%s)" % (self.shortLabel(),self.fr, self.message) - -class EventClaim(Event): - def __init__(self,index,label,follows,role,type,argument): - Event.__init__(self,index,label,follows) - self.role = role - self.type = type - self.argument = argument - self.broken = None - - # A Claim should be ignored if there is an untrusted agent in the role - # agents - def ignore(self): - for untrusted in self.run.attack.untrusted: - if untrusted in self.run.roleAgents.values(): - return True - return False - - # Return (protocol,role) - def protocolRole(self): - return "(%s,%s)" % (self.run.protocol,self.run.role) - - def argstr(self): - if self.argument == None: - return '*' - else: - return str(self.argument) - - def __str__(self): - return "CLAIM_%s(%s, %s)" % (self.shortLabel(),self.type,self.argstr()) - -class EventIntruder(Event): - """ - Intruder event extensions (allows for collapsing attacks later) - """ - def __init__(self,follows,message,key,result): - Event.__init__(self,0,None,follows) - self.follows = follows - self.message = message - self.key = key - self.result = result - self.intruder = True - -class EventDecr(EventIntruder): - def __str__(self): - return "DECR(%s, %s, %s)" % (self.message, self.key, self.result) - -class EventEncr(EventIntruder): - def __str__(self): - return "ENCR(%s, %s, %s)" % (self.message, self.key, self.result) - - diff --git a/Vagrant Files/shared/scyther/Scyther/XMLReader.py b/Vagrant Files/shared/scyther/Scyther/XMLReader.py deleted file mode 100644 index ebafc4767de133a32edd0a0c59a976896debee6a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/XMLReader.py +++ /dev/null @@ -1,357 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# XMLReader -# -# Note: -# This requires python elementtree to work -# See: http://effbot.org/zone/element-index.htm -# -# On Fedora Core you can install this by installing the python-elementtree rpm -# Things will be a lot faster and consume less memory if you install the -# cElementTree module -# -# In python 2.5 cElementTree is in the core, so you don't need to install -# extra packages -# - -import sys - -# Check for cElementTree presence. Otherwise use ElementTree. -useiter = True -try: - # python 2.5 has cElementTree in the core - import xml.etree.cElementTree as cElementTree -except: - # try the old way - try: - import cElementTree - except ImportError: - useiter = False - try: - from elementtree import ElementTree - except ImportError: - print """ -ERROR: - -Could not locate either the [elementtree] or the [cElementTree] package. -Please install one of them in order to work with the Scyther python interface. -The [cElementTree] packages can be found at http://effbot.org/zone/celementtree.htm - -Note that you can still use the Scyther binaries in the 'Bin' directory. - """ - sys.exit(1) - -## Simply pick cElementTree -#import cElementTree -## Simply pick ElementTree -#useiter = False -#from elementtree import ElementTree - -import Term -import Attack -import Trace -import Claim - -class XMLReader(object): - - def __init__ (self): - self.varlist = [] - pass - - def readXML(self, input): - # Use iter parse when possble so we can clear the attack after reading - # it in order to preserve memory (this requires cElementTree) - - attackbuffer = [] - claims = [] - - if useiter: - parser = cElementTree.iterparse(input) - else: - parser = ElementTree.parse(input).findall('*') - - for elem in parser: - # The iter parser receives the input in tuples (event and element) - # we only need the event - if useiter: - elem = elem[1] - - if elem.tag == 'state': - attack = self.readAttack(elem) - attackbuffer.append(attack) - if useiter: - elem.clear() - - if elem.tag == 'claimstatus': - claim = self.readClaim(elem) - claim.attacks = attackbuffer - claims.append(claim) - - # link to parent - for attack in claim.attacks: - attack.claim = claim - - attackbuffer = [] - if useiter: - elem.clear() - - return claims - - # Read a term from XML - def readTerm(self,xml): - # If xml is None the term should also be none - if xml == None: - return None - # If this is a term variable read it directly - if (xml.tag in ('tuple','const','apply','encrypt','var')): - return self.readSubTerm(xml) - # Otherwise read from it's first child - children = xml.getchildren() - assert(len(children) == 1) - return self.readSubTerm(children[0]) - - def readSubTerm(self, tag): - if tag.tag == 'tuple': - return Term.TermTuple(self.readTerm(tag.find('op1')),self.readTerm(tag.find('op2'))) - elif tag.tag == 'const': - return Term.TermConstant(tag.text) - elif tag.tag == 'apply': - return Term.TermApply(self.readTerm(tag.find('function')),self.readTerm(tag.find('arg'))) - elif tag.tag == 'encrypt': - return Term.TermEncrypt(self.readTerm(tag.find('op')),self.readTerm(tag.find('key'))) - elif tag.tag == 'var': - name = Term.TermConstant(tag.get('name')) - # Instantiate this variable if possible (note this list is empty while reading - # the variables section of the XML file) - for inst in self.varlist: - if inst.name == name: - return inst - # If it is not instantiated in varlist, just return a variable with this name and no - # value - return Term.TermVariable(name,None) - else: - raise Term.InvalidTerm, "Invalid term type in XML: %s" % tag.tag - - def readEvent(self,xml): - label = self.readTerm(xml.find('label')) - follows = xml.findall('follows') - followlist = [] - for follow in follows: - follow = follow.find('after') - if follow == None: - # Ignore follow definitions that do not contain after - continue - follow = (int(follow.get('run')),int(follow.get('index'))) - followlist.append(follow) - - (etype,index) = (xml.get('type'),int(xml.get('index'))) - if etype in ('send','read','recv'): - fr = self.readTerm(xml.find('from')) - to = self.readTerm(xml.find('to')) - message = self.readTerm(xml.find('message')) - if (etype == 'send'): - return Trace.EventSend(index,label,followlist,fr,to,message) - else: - return Trace.EventRead(index,label,followlist,fr,to,message) - elif xml.get('type') == 'claim': - role = self.readTerm(xml.find('role')) - etype = self.readTerm(xml.find('type')) - argument = self.readTerm(xml.find('argument')) - # Freshness claims are implemented as Empty claims with - # (Fresh,Value) as arguments - try: - if etype == 'Empty' and argument[0] == 'Fresh': - etype = Term.TermConstant('Fresh') - argument = argument[1] - elif etype == 'Empty' and argument[0] == 'Compromised': - etype = Term.TermConstant('Compromised') - argument = argument[1] - except: - pass - return Trace.EventClaim(index,label,followlist,role,etype,argument) - else: - raise Trace.InvalidAction, "Invalid action in XML: %s" % (xml.get('type')) - - def readRun(self,xml): - assert(xml.tag == 'run') - run = Trace.Run() - run.id = int(xml.find('runid').text) - # TODO why is protocol name a term?? - run.protocol = str(self.readTerm(xml.find('protocol'))) - run.intruder = xml.find('protocol').get('intruder') == 'true' - run.role = xml.find('rolename').text - for role in xml.find('roleagents'): - name = role.find('rolename').text - agent = self.readTerm(role.find('agent')) - run.roleAgents[name] = agent - for eventxml in xml.find('eventlist'): - action = self.readEvent(eventxml) - action.run = run - run.eventList.append(action) - for variable in xml.find('variables'): - # Read the variables one by one - assert(variable.tag == 'variable') - var = self.readTerm(variable.find('name').find('term')) - var.types = self.readTypeList(variable.find('name')) - - substxml = variable.find('substitution') - # Read substitution if present - if substxml != None: - subst = self.readTerm(substxml.find('term')) - subst.types = self.readTypeList(substxml) - newvar = Term.TermVariable(var.name,subst) - newvar.types = var.types - var = newvar - - run.variables.append(var) - return run - - # Read protocol description for a certain role - def readRoleDescr(self,xml): - assert(xml.tag == 'role') - run = Trace.Run() - # We will need the last label later on to see if a - # run is complete - run.lastLabel = None - run.role = xml.find('rolename').text - for eventxml in xml.find('eventlist'): - action = self.readEvent(eventxml) - action.run = run - run.eventList.append(action) - run.lastLabel = action.label - return run - - def readTypeList(self,xml): - result = [] - vartypes = xml.find('type').find('termlist') - for vartype in vartypes: - # We will assume that types are simple strings - result.append(str(self.readTerm(vartype))) - return result - - def readClaim(self, xml): - claim = Claim.Claim() - for event in xml.getchildren(): - if event.tag == 'claimtype': - claim.claimtype = self.readTerm(event) - elif event.tag == 'label': - # We store the full protocol,label construct for - # consistency with the technical parts, so it is left to - # the __str__ of claim to select the right element - claim.label = self.readTerm(event) - elif event.tag == 'protocol': - claim.protocol = self.readTerm(event) - elif event.tag == 'role': - claim.role = self.readTerm(event) - elif event.tag == 'parameter': - claim.parameter = self.readTerm(event) - - elif event.tag == 'failed': - claim.failed = int(event.text) - elif event.tag == 'count': - claim.count = int(event.text) - elif event.tag == 'states': - claim.states = int(event.text) - - elif event.tag == 'complete': - claim.complete = True - elif event.tag == 'timebound': - claim.timebound = True - else: - print >>sys.stderr,"Warning unknown tag in claim: %s" % claim.tag - - claim.analyze() - return claim - - def readAttack(self, xml): - self.varlist = [] - attack = Attack.Attack() - attack.id = int(xml.get('id')) - # A state contains 4 direct child nodes: - # broken, system, variables and semitrace - # optionally a fifth: dot - for event in xml.getchildren(): - if event.tag == 'broken': - attack.broken.append((self.readTerm(event.find('claim')), - self.readTerm(event.find('label')))) - elif event.tag == 'system': - attack.match = int(event.find('match').text) - for term in event.find('commandline'): - if attack.commandline != '': - attack.commandline += ' ' - attack.commandline += term.text - for term in event.find('untrusted').find('termlist'): - attack.untrusted.append(str(self.readTerm(term))) - for term in event.find('initialknowledge').find('termlist'): - attack.initialKnowledge.append(self.readTerm(term)) - for keypair in event.find('inversekeys'): - inverse = [] - for term in keypair: - inverse.append(self.readTerm(term)) - assert(len(inverse) == 0 or len(inverse) == 2) - attack.inverseKeys.append(inverse) - # TODO why is protocol name a term?? - for protocolxml in event.findall('protocol'): - protocol = str(self.readTerm(protocolxml.find('name'))) - descr = Trace.ProtocolDescription(protocol) - attack.protocoldescr[protocol] = descr - for rolexml in protocolxml.findall('role'): - roledescr = self.readRoleDescr(rolexml) - descr.roledescr[roledescr.role] = roledescr - - elif event.tag == 'semitrace': - for runxml in event: - run = self.readRun(runxml) - run.attack = attack - attack.semiTrace.runs.append(run) - - elif event.tag == 'dot': - # Apparently Scyther already generated dot output, - # store - attack.scytherDot = event.text - - elif event.tag == 'variables': - # Read the variables one by one - for varxml in event: - if varxml.get('typeflaw') == 'true': - attack.typeflaws = True - var = self.readTerm(varxml.find('name').find('term')) - var.types = self.readTypeList(varxml.find('name')) - - substxml = varxml.find('substitution') - # Read substitution if present - if substxml != None: - subst = self.readTerm(substxml.find('term')) - subst.types = self.readTypeList(substxml) - newvar = Term.TermVariable(var.name,subst) - newvar.types = var.types - var = newvar - - attack.variables.append(var) - - # When all have been read set self.varlist so that when - # we read terms in the attacks they can be filled in using - # this list - self.varlist = attack.variables - else: - print >>sys.stderr,"Warning unknown tag in attack: %s" % event.tag - return attack - diff --git a/Vagrant Files/shared/scyther/Scyther/__init__.py b/Vagrant Files/shared/scyther/Scyther/__init__.py deleted file mode 100644 index 1fa659c3f150e2b87cd3c2451c68164162f6faf6..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Scyther/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# Init this module -# -# Set prefix for __all__ -# -import Scyther - -# Provide scope -__all__ = ["Scyther"] - diff --git a/Vagrant Files/shared/scyther/Time/test.py b/Vagrant Files/shared/scyther/Time/test.py deleted file mode 100644 index 50ea49ec7de77543cbb04bbf243ac90ba6796e4a..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/Time/test.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2008 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# test.py -# experimenting with the constraint solver -# -# Ubuntu package: python-constraint -# -# http://labix.org/python-constraint -# - -#--------------------------------------------------------------------------- - -""" Import externals """ -import sys -try: - from constraint import * -except: - print "Could not import constraint solver module." - print "For more information, visit" - print " http://labix.org/python-constraint" - sys.exit() - -#--------------------------------------------------------------------------- - -def test(): - problem = Problem() - problem.addVariables(range(0, 16), range(1, 16+1)) - problem.addConstraint(AllDifferentConstraint(), range(0, 16)) - problem.addConstraint(ExactSumConstraint(34), [0,5,10,15]) - problem.addConstraint(ExactSumConstraint(34), [3,6,9,12]) - for row in range(4): - problem.addConstraint(ExactSumConstraint(34), - [row*4+i for i in range(4)]) - for col in range(4): - problem.addConstraint(ExactSumConstraint(34), - [col+4*i for i in range(4)]) - solutions = problem.getSolutions() - print solutions - -#--------------------------------------------------------------------------- - -if __name__ == '__main__': - test() - diff --git a/Vagrant Files/shared/scyther/batcher.sh b/Vagrant Files/shared/scyther/batcher.sh deleted file mode 100644 index 6b430d39ae4c0b26b8563032c7609b97b1afa1cf..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/batcher.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh -# -# batcher.sh -# -# usage: ./batcher.sh TEST_MPA_ARGUMENTS -# -# Tries to parallellize the jobs, and sends a mail afterwards - -echo "=================================" -echo " Phase 0: Setup" -echo "=================================" -AWKSCRIPT=" { srand(); print int(1000000 * rand()) } " -RND=`echo | awk "$AWKSCRIPT"` - -JOBNAME="test$RND" -JSONFILE="$PWD/$JOBNAME.json" -BATCHFILE="$PWD/$JOBNAME.sh" - -echo $JOBNAME -echo $JSONFILE -echo $BATCHFILE - -echo "=================================" -echo " Phase 1: generate jobs list" -echo "=================================" -bsub -I -N -W 8:00 -J $JOBNAME ./test-mpa.py --pickle $JSONFILE $* - -echo "=================================" -echo " Phase 2a: precompute job outputs" -echo "=================================" -# Each verification has a time limit of 600 seconds = 10 minutes -# To fit in the one hour queue, that means 5 jobs maximum. -bsub -I -N -W 8:00 -J $JOBNAME -oo $BATCHFILE ./make-bsub.py $JSONFILE 5 -W 1:00 -J $JOBNAME -# Due to pending etc. the below may take a while. -sleep 10 -bash $BATCHFILE -echo "=================================" -echo " Phase 2b: perfom actual job" -echo " (after precomputation is done" -echo "=================================" -bsub -I -N -W 8:00 -J after$JOBNAME -w "ended($JOBNAME)" ./test-mpa.py $* - - -echo "=================================" -echo " Done." -echo "=================================" diff --git a/Vagrant Files/shared/scyther/combos-book.sh b/Vagrant Files/shared/scyther/combos-book.sh deleted file mode 100644 index 888db4516ce93ea571c6674da5ab268569127efa..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/combos-book.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -bsub -W 8:00 -Jd "book-aa-t" -N ./test-mpa.py -m 2 --plain --latex book-aa-t Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-aa-b" -N ./test-mpa.py -m 2 --plain -b --latex book-aa-b Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-aa-u" -N ./test-mpa.py -m 2 --plain -u --latex book-aa-u Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-ex-t" -N ./test-mpa.py -m 2 --plain --extravert --latex book-ex-t Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-ex-b" -N ./test-mpa.py -m 2 --plain -b --extravert --latex book-ex-b Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-ex-u" -N ./test-mpa.py -m 2 --plain -u --extravert --latex book-ex-u Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-iu-t" -N ./test-mpa.py -m 2 --plain --init-unique --latex book-iu-t Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-iu-b" -N ./test-mpa.py -m 2 --plain -b --init-unique --latex book-iu-b Protocols/MultiProtocolAttacks/*.spdl -bsub -W 8:00 -Jd "book-iu-u" -N ./test-mpa.py -m 2 --plain -u --init-unique --latex book-iu-u Protocols/MultiProtocolAttacks/*.spdl diff --git a/Vagrant Files/shared/scyther/combos-ike.sh b/Vagrant Files/shared/scyther/combos-ike.sh deleted file mode 100644 index 515b20e3a64397b6f6bc925578b2ad09502800aa..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/combos-ike.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# Individual data -./combos-ikev1.sh -./combos-ikev2.sh - -# And combine -./combos-ikev0.sh diff --git a/Vagrant Files/shared/scyther/combos-ikev0.sh b/Vagrant Files/shared/scyther/combos-ikev0.sh deleted file mode 100644 index 389835ba5b9262acbc611bd798f747b8f645562c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/combos-ikev0.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -bsub -W 8:00 -Jd "ike0-aa-t" -N ./test-mpa.py -m 2 --plain --latex ike0-aa-t ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-aa-b" -N ./test-mpa.py -m 2 --plain -b --latex ike0-aa-b ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-aa-u" -N ./test-mpa.py -m 2 --plain -u --latex ike0-aa-u ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-ex-t" -N ./test-mpa.py -m 2 --plain --extravert --latex ike0-ex-t ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-ex-b" -N ./test-mpa.py -m 2 --plain -b --extravert --latex ike0-ex-b ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-ex-u" -N ./test-mpa.py -m 2 --plain -u --extravert --latex ike0-ex-u ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-iu-t" -N ./test-mpa.py -m 2 --plain --init-unique --latex ike0-iu-t ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-iu-b" -N ./test-mpa.py -m 2 --plain -b --init-unique --latex ike0-iu-b ~/src/ikev2/pp-results/mpa/ikev*.spdl -bsub -W 8:00 -Jd "ike0-iu-u" -N ./test-mpa.py -m 2 --plain -u --init-unique --latex ike0-iu-u ~/src/ikev2/pp-results/mpa/ikev*.spdl - diff --git a/Vagrant Files/shared/scyther/combos-ikev1.sh b/Vagrant Files/shared/scyther/combos-ikev1.sh deleted file mode 100644 index a5743b996c7cb75d33edb5bccc2a6c32b13d82f6..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/combos-ikev1.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -bsub -W 8:00 -Jd "ike1-aa-t" -N ./test-mpa.py -m 2 --plain --latex ike1-aa-t ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-aa-b" -N ./test-mpa.py -m 2 --plain -b --latex ike1-aa-b ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-aa-u" -N ./test-mpa.py -m 2 --plain -u --latex ike1-aa-u ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-ex-t" -N ./test-mpa.py -m 2 --plain --extravert --latex ike1-ex-t ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-ex-b" -N ./test-mpa.py -m 2 --plain -b --extravert --latex ike1-ex-b ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-ex-u" -N ./test-mpa.py -m 2 --plain -u --extravert --latex ike1-ex-u ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-iu-t" -N ./test-mpa.py -m 2 --plain --init-unique --latex ike1-iu-t ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-iu-b" -N ./test-mpa.py -m 2 --plain -b --init-unique --latex ike1-iu-b ~/src/ikev2/pp-results/mpa/ikev1*.spdl -bsub -W 8:00 -Jd "ike1-iu-u" -N ./test-mpa.py -m 2 --plain -u --init-unique --latex ike1-iu-u ~/src/ikev2/pp-results/mpa/ikev1*.spdl - diff --git a/Vagrant Files/shared/scyther/combos-ikev2.sh b/Vagrant Files/shared/scyther/combos-ikev2.sh deleted file mode 100644 index 1da0bb158296e4872f8676ea2e4e49d34a718bc9..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/combos-ikev2.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -bsub -W 8:00 -Jd "ike2-aa-t" -N ./test-mpa.py -m 2 --plain --latex ike2-aa-t ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-aa-b" -N ./test-mpa.py -m 2 --plain -b --latex ike2-aa-b ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-aa-u" -N ./test-mpa.py -m 2 --plain -u --latex ike2-aa-u ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-ex-t" -N ./test-mpa.py -m 2 --plain --extravert --latex ike2-ex-t ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-ex-b" -N ./test-mpa.py -m 2 --plain -b --extravert --latex ike2-ex-b ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-ex-u" -N ./test-mpa.py -m 2 --plain -u --extravert --latex ike2-ex-u ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-iu-t" -N ./test-mpa.py -m 2 --plain --init-unique --latex ike2-iu-t ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-iu-b" -N ./test-mpa.py -m 2 --plain -b --init-unique --latex ike2-iu-b ~/src/ikev2/pp-results/mpa/ikev2*.spdl -bsub -W 8:00 -Jd "ike2-iu-u" -N ./test-mpa.py -m 2 --plain -u --init-unique --latex ike2-iu-u ~/src/ikev2/pp-results/mpa/ikev2*.spdl - - diff --git a/Vagrant Files/shared/scyther/combos-iso.sh b/Vagrant Files/shared/scyther/combos-iso.sh deleted file mode 100644 index b9fb2500a7d26bf52cb396464d3f2ceb9cd4dac7..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/combos-iso.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -bsub -W 8:00 -Jd "iso-aa-t" -N ./test-mpa.py -m 2 --plain --latex iso-aa-t ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-aa-b" -N ./test-mpa.py -m 2 --plain -b --latex iso-aa-b ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-aa-u" -N ./test-mpa.py -m 2 --plain -u --latex iso-aa-u ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-ex-t" -N ./test-mpa.py -m 2 --plain --extravert --latex iso-ex-t ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-ex-b" -N ./test-mpa.py -m 2 --plain -b --extravert --latex iso-ex-b ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-ex-u" -N ./test-mpa.py -m 2 --plain -u --extravert --latex iso-ex-u ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-iu-t" -N ./test-mpa.py -m 2 --plain --init-unique --latex iso-iu-t ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-iu-b" -N ./test-mpa.py -m 2 --plain -b --init-unique --latex iso-iu-b ~/papers/iso9798/scyther-models/*.spdl -bsub -W 8:00 -Jd "iso-iu-u" -N ./test-mpa.py -m 2 --plain -u --init-unique --latex iso-iu-u ~/papers/iso9798/scyther-models/*.spdl diff --git a/Vagrant Files/shared/scyther/generate-attack-graphs.py b/Vagrant Files/shared/scyther/generate-attack-graphs.py deleted file mode 100644 index bad12b1da886ea2e86cd0d3001b275afd3b5a5f3..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/generate-attack-graphs.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -""" -Generate attacks for each claim - -To also generate resource usage details on linux, use something like: - - xargs -a protocols.txt -n 1 -I {} /usr/bin/time -v -o {}.times ./generate-attack-graphs.py {} - -where 'protocols.txt' contains a protocol file per line. -""" - -#--------------------------------------------------------------------------- - -""" Import externals """ -import sys - -#--------------------------------------------------------------------------- - -""" Import scyther components """ -import Scyther.Scyther as Scyther - -#--------------------------------------------------------------------------- - -def create_file_prefix(fn,cid): - """ - Create a filename prefix for fn,cid without extension - """ - - tcid = cid - i = tcid.rfind(",") - if i > 0: - if fn.find(tcid[:i]) >= 0: - tcid = tcid[i+1:] - - tfn = fn.replace(".spdl","") - i = tfn.rfind("/") - if i >= 0: - tfn = tfn[i+1:] - - pref = "%s-%s" % (tfn,tcid) - pref = pref.replace(",","_") - - return pref - - -def render_dot(fn,gtype): - """ - Render .dot file called fn into gtype file - """ - from subprocess import call - - if len(gtype) > 5: - # Something is fishy, abort - return - - base_name = fn - i = base_name.rfind(".") - if i > 0: - base_name = base_name[:i] - - cmd = ["dot","-T" + gtype,"-o%s.%s" % (base_name,gtype),fn] - #print cmd - - call(cmd) - - -def render_best_attack(fn,cid): - """ - Extract the best attack for this claim and file name - """ - x = Scyther.Scyther() - x.setFile(fn) - - x.options = "-r4 -T60" - x.verifyOne(cid) - - pref = create_file_prefix(fn,cid) - - for cl in x.claims: - cln = cl.claimtype - if cln == "Commit": - cln = "Data_agree" - - if len(cl.attacks) > 0: - dotfile = "attack-%s-%s.dot" % (pref,cln) - fp = open(dotfile,'w') - fp.write(cl.attacks[-1].scytherDot) - fp.close() - - render_dot(dotfile,"png") - render_dot(dotfile,"pdf") - - print "%s; %s" % (fn,cl) - -def main(): - - filelist = sys.argv[1:] - # Compute dict of filenames to claim id's - cl = Scyther.GetClaims(filelist) - - for fn in set(cl): - for cid in cl[fn]: - - render_best_attack(fn,cid) - - - -if __name__ == '__main__': - main() - -#--------------------------------------------------------------------------- -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/json-scyther.py b/Vagrant Files/shared/scyther/json-scyther.py deleted file mode 100644 index b8e23bd5def9b64736d9c605b557fb5d72fb7b12..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/json-scyther.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -""" - -Author: Cas Cremers - -""" - -import sys -import json -from Scyther import Scyther - - -def scyther_json(jsondata): - """ - Decode json data into (protocollist,options,filter) and run scyther - """ - s = Scyther.Scyther() - - (protocollist,options,filter) = json.loads(jsondata) - - s.options = str(options) - for protocol in sorted(protocollist): - s.addFile(protocol) - s.verifyOne(str(filter)) - -def fileandline(fn,linenos): - fp = open(fn,"r") - ln = 1 - done = 0 - sz = len(linenos) - for l in fp.xreadlines(): - if str(ln) in linenos: - print l - scyther_json(l) - done = done + 1 - if done >= sz: - fp.close() - return - ln = ln + 1 - fp.close() - return - -if __name__ == '__main__': - fileandline(sys.argv[1],set(sys.argv[2:])) - - diff --git a/Vagrant Files/shared/scyther/make-bsub.py b/Vagrant Files/shared/scyther/make-bsub.py deleted file mode 100644 index 0897da157cddc70cd0ce1883f9d4d4331de9760d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/make-bsub.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python -# -import sys -import json -import math - -""" -Given a file of Scyther verification tests to do (json file), create a shell file to run them all using bsub. - -Arguments: - - [1] Filename of json stuff - [2] Step count: how many verification tasks go into one job - [3] Additional commands to send to bsub (e.g. "-W 1:00") - -""" - -def countlines(fn): - count = 0 - fh = open(fn,'r') - for l in fh.xreadlines(): - count = count + 1 - fh.close() - return count - -def marker(jobcount,todo): - left = todo - jobcount - dperc = int((100 * jobcount) / todo) - print "echo \"Sent %i out of %i jobs, hence %i left. %i%% done.\"" % (jobcount,todo,left,dperc) - -def main(fn,step,optlist): - - todo = math.ceil(countlines(fn) / int(step)) - - fh = open(fn,'r') - ln = 1 - buf = 0 - s = "" - jobcount = 0 - done = 0 - - for l in fh.xreadlines(): - if buf == 0: - s = "bsub %s ./json-scyther.py %s" % (" ".join(optlist),fn) - s += " %i" % (ln) - buf = buf + 1 - done = done + 1 - if buf >= int(step): - print (s) - s = "" - buf = 0 - jobcount = jobcount + 1 - if jobcount % 10 == 0: - """ - After ten jobs, display progress info - """ - marker(jobcount,todo) - - ln = ln + 1 - print (s) - marker(jobcount,todo) - fh.close() - - -if __name__ == '__main__': - """ Usage: filename, step, options to send to bsub - """ - main(sys.argv[1],sys.argv[2],sys.argv[3:]) - diff --git a/Vagrant Files/shared/scyther/mpa.spdl b/Vagrant Files/shared/scyther/mpa.spdl deleted file mode 100644 index 4913029f4daf23383d192b390e22b9f82a0e5b9d..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/mpa.spdl +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol - */ - -// The protocol description - -protocol nsl3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,I}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,I}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - -/* - * Needham-Schroeder-Lowe protocol, - * broken version (wrong role name in first message) - */ - -// The protocol description - -protocol nsl3-broken(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,R}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,R}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/notes-brutus-mpa.txt b/Vagrant Files/shared/scyther/notes-brutus-mpa.txt deleted file mode 100644 index b89e3938e66be4445e2f8a8071d21a0c4606bb27..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/notes-brutus-mpa.txt +++ /dev/null @@ -1,181 +0,0 @@ -run test-MPA with --pickle to some file FILE. - -Choose a STEP integer: how many verifications are batched into a single job. - -Then: - -./make-bsub.py FILE STEP -W 1:00 [OTHER BSUB OPTIONS] > tests.sh - -Then - -bash tests.sh - - -When all is done, rerun the original thing without pickle. - - - -This invokes then: -json-scyther.py -in different batches - - - - - -Test run for real - - -Fri Dec 31 16:33:20 CET 2010 - -Login & screen on brutus3 node. - -bsub -W 2:00 ./test-mpa.py --pickle mpa-tests.json -A Protocols/MultiProtocolAttacks/*.spdl - -Fri Dec 31 18:48:29 CET 2010 - -Given the 6 minutes timeout, decided to batch into the 1h queues. Thus 9 -verifications can safely go in a batch. - -./make-bsub.py mpa-tests.json 9 -W 1:00 >mpa-tests.sh - -bash mpa-tests.sh - - -Hmm. For the 1h queue on Brutus, there is a 10.000 pending jobs limit. Thus my -40.000+ jobs get stuck here. - -So I could have done the division such that the jobs can be pended at onces -but it would have meant putting the jobs in the 8h or more queues. - -For the batching thing, it would be nice to print a counter every 10 bsubs so -if it gets stuck, you can see where it is (or better: how much is left). - -The lsf.o* output files clog up the directory. Find a way to disable them! - -Woops, we get mail once in a while. Not good. Unclear under which conditions -this occurs, it seems to be errors only. (Probably stale file pointers from -the old watch & rm solution.) - -Sun Jan 2 10:54:23 CET 2011 - -All jobs have been submitted, now only 3000 pending. - -There may be a limit for me of about 128 active jobs at the same time. - -Sun Jan 2 11:30:30 CET 2011 - -2200 pending. - -Sun Jan 2 12:38:48 CET 2011 - -1155 pending. -(bjobs -p | grep PEND | wc -l) - -Sun Jan 2 13:59:04 CET 2011 - -0 jobs pending, 32 jobs active. - -Sun Jan 2 14:18:11 CET 2011 - -Done. Recomp started (without --pickle FILE above) -Takes too long on login node. Killed at 14:40. - -Instead, rerunning with: - -bsub -I -N ./test-mpa.py -A Protocols/MultiProtocolAttacks/*.spdl - --I for interactive, -N for mail at end. - -Sun Jan 2 14:45:04 CET 2011 - -Above job is running. It also seems faster. - -Sun Jan 2 20:07:58 CET 2011 - -Sigh. It got killed after one hour because no time limit was set. -Rerunning with -W 6:00 - - - - - - -Sun Jan 2 14:30:19 CET 2011 - -In parallel, starting new huge job; biggest possible using current script options. - -bsub -W 7:00 ./test-mpa.py --pickle test-full-mpa.json --self-communication -A Protocols/MultiProtocolAttacks/*.spdl - -Actually, these big jobs should be started with finishing e-mail notification -or the switch that makes the bsub command only return after the jobs has -finished, otherwise we end up watching bjobs all the time, which is boring. - -Sun Jan 2 14:40:08 CET 2011 - -The above test generation is now running. - -Sun Jan 2 20:09:42 CET 2011 - -The test generation seems to have finished at 15:31. - -./make-bsub.py test-full-mpa.json 10 -W 1:00 >test-full-mpa.sh - -This finished at 20:11. -So now running - -nice bash test-full-mpa.sh - -G - - - -Sun Jan 2 15:07:13 CET 2011 - -A third parallel test: - -batcher.sh OPTIONS_AND_FILES_FOR_TEST_MPA_SCRIPT - -Running with -L5. This should automate all of the previous stuff. - - - - -Wed Jan 5 15:37:11 CET 2011 - -Running for cryptrec (with new Scyther version and new batches of 5 things) -./batcher.sh ~/papers/iso/*.spdl - - - -Tue Jan 18 17:10:49 CET 2011 - -./batcher.sh -m 1 --all-types --self-communication ~/papers/iso/*.spdl -The batcher has jobid 930582 - -(error, reverting to os.makedirs(path)) - -Tue Jan 18 23:45:15 CET 2011 - -./test-iso-combo.sh - -Tue Jan 18 23:49:15 CET 2011 - -./batcher.sh -m 2 --all-types --self-communication ~/papers/iso/*.spdl - -Solved: do "watch -n 10 ./WIPER.sh 11" -(wiper.sh finds lsf files accessed longer ago than 11 minutes and wipes them) - -./test-mpa-alltypes.sh - - - -Mon Jan 24 14:55:23 CET 2011 - -./batcher.sh -m 2 --all-types Protocols/MultiProtocolAttacks/*.spdl - - - -Sat Jan 29 13:35:22 CET 2011 - -./batcher.sh -m 2 -A --self-communication Protocols/MultiProtocolAttacks/*.spdl diff --git a/Vagrant Files/shared/scyther/ns3.spdl b/Vagrant Files/shared/scyther/ns3.spdl deleted file mode 100644 index edde4ab3c4b52e7026d2482594f5eb815bfbbfa3..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/ns3.spdl +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Needham-Schroeder protocol - */ - -// The protocol description - -protocol ns3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,I}pk(R) ); - recv_2(R,I, {ni,nr}pk(I) ); - claim(I,Running,R,ni,nr); - send_3(I,R, {nr}pk(R) ); - - claim(I,Secret,ni); - claim(I,Secret,nr); - claim(I,Alive); - claim(I,Weakagree); - claim(I,Commit,R,ni,nr); - claim(I,Niagree); - claim(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,I}pk(R) ); - claim(R,Running,I,ni,nr); - send_2(R,I, {ni,nr}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim(R,Secret,ni); - claim(R,Secret,nr); - claim(R,Alive); - claim(R,Weakagree); - claim(R,Commit,I,ni,nr); - claim(R,Niagree); - claim(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/nsl3-broken.spdl b/Vagrant Files/shared/scyther/nsl3-broken.spdl deleted file mode 100644 index 3681cd9a41030e2a77957f0f85c5ab20e413f7fc..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/nsl3-broken.spdl +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol, - * broken version (wrong role name in first message) - */ - -// The protocol description - -protocol nsl3-broken(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,R}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - send_3(I,R, {nr}pk(R) ); - - claim_i1(I,Secret,ni); - claim_i2(I,Secret,nr); - claim_i3(I,Niagree); - claim_i4(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,R}pk(R) ); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim_r1(R,Secret,ni); - claim_r2(R,Secret,nr); - claim_r3(R,Niagree); - claim_r4(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/nsl3.spdl b/Vagrant Files/shared/scyther/nsl3.spdl deleted file mode 100644 index c393e73c3db93f066dd83588a2831656e723809c..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/nsl3.spdl +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Needham-Schroeder-Lowe protocol - */ - -// The protocol description - -protocol nsl3(I,R) -{ - role I - { - fresh ni: Nonce; - var nr: Nonce; - - send_1(I,R, {ni,I}pk(R) ); - recv_2(R,I, {ni,nr,R}pk(I) ); - claim(I,Running,R,ni,nr); - send_3(I,R, {nr}pk(R) ); - - claim(I,Secret,ni); - claim(I,Secret,nr); - claim(I,Alive); - claim(I,Weakagree); - claim(I,Commit,R,ni,nr); - claim(I,Niagree); - claim(I,Nisynch); - } - - role R - { - var ni: Nonce; - fresh nr: Nonce; - - recv_1(I,R, {ni,I}pk(R) ); - claim(R,Running,I,ni,nr); - send_2(R,I, {ni,nr,R}pk(I) ); - recv_3(I,R, {nr}pk(R) ); - - claim(R,Secret,ni); - claim(R,Secret,nr); - claim(R,Alive); - claim(R,Weakagree); - claim(R,Commit,I,ni,nr); - claim(R,Niagree); - claim(R,Nisynch); - } -} - diff --git a/Vagrant Files/shared/scyther/precompute-ike.sh b/Vagrant Files/shared/scyther/precompute-ike.sh deleted file mode 100644 index 7b7652fb88f2e6307740cf84ebcb18710efa6e3e..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/precompute-ike.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -./batcher.sh -m 2 --all-types --self-communication ~/src/ikev2/pp-results/mpa/ikev1*.spdl -./batcher.sh -m 2 --all-types --self-communication ~/src/ikev2/pp-results/mpa/ikev2*.spdl - diff --git a/Vagrant Files/shared/scyther/progressbarDummy.py b/Vagrant Files/shared/scyther/progressbarDummy.py deleted file mode 100644 index 9ddd7e9603a98a8eafcb31f39792dc16f814cb66..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/progressbarDummy.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -""" - -Dummy. - -Author: Cas Cremers - -""" - -class ProgressBar(object): - - def __init__(self,widgets=[],maxval=100): - self.widgets = widgets - self.maxval = maxval - - def start(self): - if self.widgets: - if len(self.widgets) > 0: - print self.widgets[0], - - def update(self,count): - pass - - def finish(self): - print " Done." - - -def SimpleProgress(): - return - -def ETA(): - return - -def Percentage(): - return - -def Bar(marker,left,right): - return - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/scyther-gui.py b/Vagrant Files/shared/scyther/scyther-gui.py deleted file mode 100644 index d20be43b828fcccdb5ad79a4e1d635a3ab6a056b..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/scyther-gui.py +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -#--------------------------------------------------------------------------- -# Try to get wxPython -try: - import wx -except ImportError,err: - from Scyther import Misc - - errmsg = "Problem with importing the required [wxPython] package." - - if 'No module' in str(err): - errmsg = """Could not find the required [wxPython] package. -Please install this package in order to use the graphical user -interface of Scyther. -The [wxPython] packages can be found at http://www.wxpython.org/ - -Ubuntu users: the wxPython packages are called 'python-wxgtk' followed by the -version number.""" - elif ('32-bit mode' in str(err)) or ('no matching architecture' in str(err)): - import os - - key = "VERSIONER_PYTHON_PREFER_32_BIT" - data = "yes" - - keyfound = False - try: - if sys.environment[key] == data: - keyfound = True - except: - pass - - if keyfound: - """ - We already tried to set the environment variable, but it is still not working. - """ - import sys - #print "Key found. good job. no success." - - errmsg = """Problem with importing the required [wxPython] package. - - Possibly the problem is caused by wxPython only working in 32-bit mode currently. - You can try the following on the command line: - - $ export VERSIONER_PYTHON_PREFER_32_BIT=yes - $ ./scyther-gui.py""" - - else: - """ - Key not found. Try if that works. - """ - import sys - from subprocess import call - - #print "Key not found. Trying to set it now." - # TODO: check for MAC's if we need something like 'pythonw' - call(sys.argv, shell=True, env={key: data}) - sys.exit(0) - - - Misc.panic(""" -ERROR: - -%s - -Note that you can still use the Scyther binaries in the 'Scyther' directory. - -The exact error was: --------------------------------------------------------------------------------- -%s --------------------------------------------------------------------------------- - """ % (errmsg,err)) - - - -#--------------------------------------------------------------------------- -""" import externals """ -import sys -import os -from optparse import OptionParser, SUPPRESS_HELP -from subprocess import * - -#--------------------------------------------------------------------------- - -""" Import scyther-gui components """ -from Scyther import Scyther,Misc -from Gui import About,Preference,Mainwindow - -#--------------------------------------------------------------------------- - -def parseArgs(): - usage = "usage: %s [options] [inputfile]" % sys.argv[0] - description = "scyther-gui is a graphical user interface for the scyther protocol verification tool." - parser = OptionParser(usage=usage,description=description) - - # command - parser.add_option("-V","--verify",dest="command",default=None,action="store_const",const="verify", - help="Immediately verify the claims of the protocol (requires input file)") - parser.add_option("-s","--state-space",dest="command",default=None,action="store_const",const="statespace", - help="Immediately generate the complete characterization of the protocol (requires input file)") - parser.add_option("-a","--auto-claims",dest="command",default=None,action="store_const",const="autoverify", - help="Immediately verified protocol using default claims (requires input file)") - #parser.add_option("-c","--check",dest="command",default=None,action="store_const",const="check", - # help="Immediately check protocol (requires input file)") - - # License - parser.add_option("-l","--license",dest="license",default=False,action="store_const",const=True, - help="Show license") - - # no-splash - parser.add_option("-N","--no-splash",dest="splashscreen",default=True,action="store_const",const=False, - help="Do not show the splash screen") - - # misc debug etc (not shown in the --help output) - parser.add_option("","--test",dest="test",default=False,action="store_true", - help=SUPPRESS_HELP) - - return parser.parse_args() - -#--------------------------------------------------------------------------- - -class MySplashScreen(wx.SplashScreen): - def __init__(self,basedir): - path = os.path.join(basedir,"Images") - image = os.path.join(path,"scyther-splash.png") - bmp = wx.Image(image).ConvertToBitmap() - wx.SplashScreen.__init__(self, bmp, - wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT, - 5000, None, -1) - self.Bind(wx.EVT_CLOSE, self.OnClose) - self.fc = wx.FutureCall(2000, self.ShowMain) - - def OnClose(self, evt): - # Make sure the default handler runs too so this window gets - # destroyed - evt.Skip() - self.Hide() - - # if the timer is still running then go ahead and show the - # main frame now - if self.fc.IsRunning(): - self.fc.Stop() - self.ShowMain() - - - def ShowMain(self): - if self.fc.IsRunning(): - self.Raise() - - -#--------------------------------------------------------------------------- - -def isSplashNeeded(opts): - if not opts.command: - if opts.splashscreen and not (Preference.get('splashscreen') in ['false','off','disable','0']): - return True - return False - -#--------------------------------------------------------------------------- - -class ScytherApp(wx.App): - def OnInit(self): - import os, inspect - - wx.GetApp().SetAppName("Scyther-gui") - - # Determine base directory (taking symbolic links into account) - cmd_file = os.path.realpath(os.path.abspath(inspect.getfile( inspect.currentframe() ))) - basedir = os.path.split(cmd_file)[0] - - # Parse arguments - (opts,args) = parseArgs() - - # License option may abort here - if opts.license: - print Scyther.GetLicense() - sys.exit(0) - - # Load preferences file - Preference.init() - - #""" - #Create and show the splash screen. It will then create and show - #the main frame when it is time to do so. - # - #The splash screen is disabled for automatic commands, and also - #by a setting in the preferences file. - #""" - #if isSplashNeeded(opts): - # splash = MySplashScreen(basedir) - # splash.Show() - - self.mainWindow = Mainwindow.MainWindow(opts,args) - self.SetTopWindow(self.mainWindow) - self.mainWindow.Show() - - if isSplashNeeded(opts): - dlg = About.AboutScyther(self.mainWindow,basedir) - dlg.ShowModal() - dlg.Destroy() - - return True - - def OnExit(self): - """ Tear down """ - - -#--------------------------------------------------------------------------- - -def CheckRequirements(): - """ Check for any required programs """ - - """ We need 'dot', in the graphviz package """ - from Scyther import FindDot - - FindDot.findDot() # If Graphviz is not found, this function will call panic to complain. - -#--------------------------------------------------------------------------- - - -if __name__ == '__main__': - CheckRequirements() - scythergui = ScytherApp() - scythergui.MainLoop() - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/scyther-gui.rc b/Vagrant Files/shared/scyther/scyther-gui.rc deleted file mode 100644 index cd3a913e215297bcbc293f08c0a2f40c0bd205e0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/scyther-gui.rc +++ /dev/null @@ -1,4 +0,0 @@ -wxicon icon Images/scyther-gui-64.ico -wxicon icon Images/scyther-gui-32.ico -wxicon icon Images/scyther-gui-16.ico -#include "wx/msw/wx.rc" diff --git a/Vagrant Files/shared/scyther/scyther.py b/Vagrant Files/shared/scyther/scyther.py deleted file mode 100644 index ef99d75e3d9105d7c441e10f7ea0741bec9eb5aa..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/scyther.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - -# -# python wrapper for the Scyther command-line tool -# - -#--------------------------------------------------------------------------- - -""" Import externals """ -import sys - -#--------------------------------------------------------------------------- - -""" Import scyther components """ -import Scyther.Scyther as Scyther - -#--------------------------------------------------------------------------- - -def usage(): - x = Scyther.Scyther() - x.xml = False - x.options = "--help" - x.verify() - return x - -def simpleRun(args): - x = Scyther.Scyther() - x.options = args - x.verify() - return x - -if __name__ == '__main__': - pars = sys.argv[1:] - if len(pars) == 0: - print usage() - else: - print simpleRun(" ".join(pars)) - - diff --git a/Vagrant Files/shared/scyther/test-delta.py b/Vagrant Files/shared/scyther/test-delta.py deleted file mode 100644 index 863d13b18f0c2c7b7823b31a749fbebd9c0107a0..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/test-delta.py +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -""" - -Example script to show how to perform large-scale tests using the -Scyther Python API (contained in the Scyther subdirectory) - -In this example, we find the differences between two different switch -settings for a large set of protocols. - -The notification triggers if claim lists differ, or when a claim is okay -in one test but not in the other. Hence, we ignore differences between -complete/bounded verification. - -Author: Cas Cremers - - -Define the strings below. - -TEST0 is used for both, TEST1/2 define the difference between -the tests. -""" -#--------------------------------------------------------------------------- - -TEST0 = "" -TEST1 = "--max-runs=1" -TEST2 = "--max-runs=4" - -#--------------------------------------------------------------------------- - -""" Import externals """ -import commands - -#--------------------------------------------------------------------------- - -""" Import scyther components """ -from Scyther import Scyther - -#--------------------------------------------------------------------------- - -def filterProtocol(protocol): - """ - We may want to filter out some protocols. - This function allows that. Return True if it is okay (and should be - included) or False otherwise. - """ - include = True - return include - -def simpleRun(args): - x = Scyther.Scyther() - x.options = args - x.verify() - return x - -def ScytherRes(protocol,args=""): - """ - Run Scyther on a protocol and return a tuple with the - resulting object and claim list. - """ - global TEST0 - - args = "%s %s %s" % (TEST0, args, protocol) - s = simpleRun(args) - return (s,s.claims) - - -def findSameClaim(cl,claim): - """ - Find in claim list the claim that corresponds to claim - """ - for claim2 in cl: - if claim2.id == claim.id: - return claim2 - return None - - -def ScytherDiff(protocol): - """ - Check whether the two different switch settings yield a different - result. - """ - global TEST1, TEST2 - - (s1,cl1) = ScytherRes(protocol,TEST1) - (s2,cl2) = ScytherRes(protocol,TEST2) - - res = "" - if len(cl1) != len(cl2): - res += "Different claim lists:\n%s\n%s\n" % (cl1,cl2) - else: - for claim1 in cl1: - claim2 = findSameClaim(cl2,claim1) - if claim2 == None: - res += "%s not in second test.\n" % (claim1) - else: - if claim1.okay != claim2.okay: - res += "Different results:\n%s\n%s\n" % (claim1,claim2) - - if res == "": - return None - else: - return res - - -def findProtocols(): - """ - Find a list of protocol names - """ - - cmd = "find -iname '*.spdl'" - plist = commands.getoutput(cmd).splitlines() - nlist = [] - for prot in plist: - if filterProtocol(prot): - nlist.append(prot) - return nlist - - -def main(): - """ - Simple test case with a few protocols - """ - global TEST0,TEST1,TEST2 - - list = findProtocols() - print "Performing delta analysis" - print - print "String 0 (used for both): '%s'" % TEST0 - print "String 1: '%s'" % TEST1 - print "String 2: '%s'" % TEST2 - print - print "After filtering, we are left with the following protocols:", list - print - maxcount = len(list) - count = 1 - delta = 0 - for prot in list: - perc = (100 * count) / maxcount - print "[%i%%] %s: " % (perc,prot), - res = ScytherDiff(prot) - if res != None: - print - print "-" * 72 - print prot - print "-" * 72 - print res - delta = delta + 1 - else: - print "No interesting delta found." - count = count + 1 - - print - print "Analysis complete." - print "%i out of %i protocols differed [%i%%]." % (delta,maxcount,(100 * delta)/maxcount) - - -if __name__ == '__main__': - main() - - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/test-mpa.py b/Vagrant Files/shared/scyther/test-mpa.py deleted file mode 100644 index bf5a34432ed6ed8a8db0700bbdbff613f4e14ccb..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/test-mpa.py +++ /dev/null @@ -1,896 +0,0 @@ -#!/usr/bin/env python -""" - Scyther : An automatic verifier for security protocols. - Copyright (C) 2007-2013 Cas Cremers - - 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 2 - 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" - - -""" - -Example script to show how to perform large-scale tests using the -Scyther Python API (contained in the Scyther subdirectory) - -In this example, multi-protocol attack analysis is performed on a small -test set. - -Author: Cas Cremers - -""" - -from Scyther import Scyther - -from optparse import OptionParser, OptionGroup, SUPPRESS_HELP -import time -import os.path -import json - -try: - from progressbar import * - PROGRESSBAR = True -except ImportError: - from progressbarDummy import * - PROGRESSBAR = False - print """ -Missing the progressbar library. - -It can be downloaded from: - -http://code.google.com/p/python-progressbar/ - -""" - -FOUND = [] -ALLMPA = [] -ALLCLAIMS = [] -INVOLVED = [] -PROTFILETONAME = {} -PROTNAMETOFILE = {} -OPTS = None -ARGS = None -PICKLEDATA = set() - - -#--------------------------------------------------------------------------- - -def parseArgs(): - usage = "usage: %prog [options] [inputfile]" - description = "test-mpa.py is a test script to help with multi-protocol analysis." - parser = OptionParser(usage=usage,description=description, version="%prog 2.0") - - group = OptionGroup(parser, "Bounding the search space") - group.add_option("-m","--max-protocols",type="int",dest="maxprotocols",default=3, - help="Define maximum number of protocols in a multi-protocol attack [3].") - - group.add_option("-r","--max-runs",type="int",dest="maxruns",default=4, - help="Define maximum number of runs in the analysis [4].") - - group.add_option("-T","--timeout",type="int",dest="timeout",default=600, - help="Timeout in seconds for each analysis [600].") - - group.add_option("-L","--limit",type="int",dest="limit",default=0, - help="Limit the length of the list of protocols [None].") - parser.add_option_group(group) - - group = OptionGroup(parser, "Matching type options") - group.add_option("-t","--typed",dest="defoptarray",default=[],action="append_const",const="--match=0", - help="Verify protocols with respect to a typed model (-m 0) [default]") - group.add_option("-b","--basic-types",dest="defoptarray",default=[],action="append_const",const="--match=1", - help="Verify protocols with respect to basic type flaws only (-m 1)") - group.add_option("-u","--untyped",dest="defoptarray",default=[],action="append_const",const="--match=2", - help="Verify protocols with respect to an untyped model (-m 2)") - group.add_option("-A","--all-types",dest="alltypes",default=False,action="store_true", - help="Verify protocols with respect to all matching types") - parser.add_option_group(group) - - group = OptionGroup(parser, "Restricting self-communication") - group.add_option("-U","--init-unique",dest="defoptarray",default=[],action="append_const",const="--init-unique", - help="Use Scythers --init-unique switch to filter out initiators talking to themselves.") - group.add_option("-E","--extravert",dest="defoptarray",default=[],action="append_const",const="--extravert", - help="Use Scythers --extravert switch to filter out agents talking to themselves.") - group.add_option("","--self-communication",dest="selfcommunication",default=False,action="store_true", - help="Explore all self-communication restrictions (as MPA-only option).") - parser.add_option_group(group) - - # Misc - parser.add_option("","--pickle",dest="pickle", - help="Do not invoke Scyther but write intended calls to a file with the given name.") # action="store" and type="string" are defaults - parser.add_option("-l","--latex",dest="latex", - help="Output latex files with the given prefix.") # action="store" and type="string" are defaults - parser.add_option("-v","--verbose",dest="verbose",default=False,action="store_true", - help="Be more verbose.") - parser.add_option("-D","--debug",dest="debug",default=False,action="store_true", - help="Enable debugging features.") - parser.add_option("-p","--plain",dest="plain",default=False,action="store_true", - help="Ensure plain output, e.g., no progress bars.") - - return parser.parse_args() - -#--------------------------------------------------------------------------- - -class Attack(object): - - def __init__(self,claim,mpalist): - - self.claim = claim - self.mpalist = mpalist - - def protocol(self): - return self.claim.protocol - - def mpashort(self): - - s = [] - for fn in self.mpalist: - ptn = os.path.normpath(fn) - (head,tail) = os.path.split(ptn) - s.append(tail) - - return s - - def claimid(self): - return "%s" % (self.claim.id) - - def __str__(self): - s = "(%s,%s)" % (self.claim.id, self.mpashort()) - return s - - def fullstr(self): - s = "%s,%s" % (self.claim.id, self.mpalist) - return s - - def __cmp__(self,other): - s1 = self.fullstr() - s2 = other.fullstr() - if (s1 == s2): - return 0 - else: - if s1 < s2: - return -1 - else: - return 1 - - -#--------------------------------------------------------------------------- - - -def uniq(l): - - ll = [] - for x in l: - if x not in ll: - ll.append(x) - return ll - - -def powerset(s): - """ - s is a set - returns the powerset - """ - pws = set([frozenset()]) - for el in s: - # Double old powerset by adding its elements and also new ones - for s2 in pws.copy(): - if len(s2) == 0: - pws.add(frozenset([el])) - else: - pws.add(frozenset([el]).union(s2)) - return pws - - -#--------------------------------------------------------------------------- - -def MyScyther(protocollist,filt=None,options=[],checkpickle=True): - """ - Evaluate the composition of the protocols in protocollist. - If there is a filter, i.e. "ns3,I1" then only this specific claim - will be evaluated. - - By default, when Pickling, no evaluation is done (checkpickle=True). - Setting 'checkpickle' to False ignores this check and verifies anyway. - """ - global OPTS - global PICKLEDATA - - s = Scyther.Scyther() - - # Standard - opts = OPTS.defoptarray + options - - # Cover for caching issue where no --match= option is given (default to 0) - matchfound = False - for opt in opts: - if opt.startswith("--match="): - matchfound = True - break - if not matchfound: - opts.append("--match=0") - - # Adding other command-line parameters (i.e. with arguments) - opts.append("-T %i" % (int(OPTS.timeout))) - opts.append("--max-runs=%i" % (int(OPTS.maxruns))) - - # arguments to call - s.options = (" ".join(sorted(uniq(opts)))).strip() - if OPTS.debug: - print s.options - - for protocol in sorted(protocollist): - s.addFile(protocol) - if checkpickle and OPTS.pickle: - # Do not really verify! Just dump request if not already known - if s.verifyOne(filt, checkKnown=True) == False: - PICKLEDATA.add((tuple(sorted(protocollist)),s.options,filt)) - else: - # Verify results - s.verifyOne(filt) - return s - - -def getCorrectIsolatedClaims(protocolset,options=[]): - """ - Given a set of protocols, determine the correct claims when run in - isolation. - Returns a tuple, consisting of - - a list of compiling protocols - - a list of tuples (protocol,claimid) wich denote correct claims - """ - correctclaims = [] - goodprotocols = [] - - if not OPTS.plain: - widgets = ['Scanning for claims that are correct in isolation: ', SimpleProgress(), ' protocols (', Percentage(), ') ', - Bar(marker='#',left='[',right=']') - ] - pbar = ProgressBar(widgets=widgets, maxval=len(protocolset)) - pbar.start() - count = 0 - cpcount = 0 - for protocol in protocolset: - # verify protocol in isolation - s = MyScyther([protocol],options=options,checkpickle=False) - # investigate the results - goodprotocols.append(protocol) - allfalse = True - for claim in s.claims: - global ALLCLAIMS - global PROTFILETONAME - global PROTNAMETOFILE - - if claim not in ALLCLAIMS: - ALLCLAIMS.append(claim) - - if claim.okay: - correctclaims.append((protocol,claim.id)) - allfalse = False - - PROTFILETONAME[protocol] = str(claim.protocol) - PROTNAMETOFILE[str(claim.protocol)] = protocol - - count += 1 - if not allfalse: - cpcount += 1 - if not OPTS.plain: - pbar.update(count) - - if not OPTS.plain: - pbar.finish() - return (goodprotocols,correctclaims,cpcount) - - -def verifyProtList(protlist,claimid,options=[]): - """ - Check attacks on this protocol list. - Returns True if no attack ("correct") and False if an attack is found. - """ - s = MyScyther(protlist,claimid,options) - claim = s.getClaim(claimid) - if claim: - if not claim.okay: - return False - return True - - - -def verifyProtSubSet(protlist,claimid,options=[]): - """ - Check attacks on true subsets of this list. - Note subsets must include the claim id - """ - global OPTS - - ps = powerset(set(protlist)) - for s in ps: - if (len(s) > 0) and (len(s) < len(protlist)): - res = verifyProtList(list(s),claimid,options) - if res == False: - """ - If an attack is found we're actually done but for pickle we - make an exception to generate all possible variants. - """ - if not OPTS.pickle: - return False - return True - - -def verifyMPAattack(mpalist,claimid,options=[]): - """ - Check for Multi-Protocol Attacks on this protocol list. - Returns True if no attack ("correct") and False if an MPA attack is found. - - First consider subsets, so if there is an attack there, don't consider others. - """ - global OPTS - - res = verifyProtSubSet(mpalist,claimid,options) - if res or OPTS.pickle: - """ - Only really needed when no attack found but for pickle we make an - exception to generate all possible variants. - """ - return verifyProtList(mpalist,claimid,options) - return True - - -def verifyMPAlist(mpalist,claimid,options=[]): - """ - Check the existence of a multi-protocol attack in this context - - If an attack is found, we return False, otherwise True. This is - needed for the iteration later. - """ - global OPTS, ARGS - - if OPTS.debug: - print time.asctime(), mpalist, claimid, options - - if not verifyMPAattack(mpalist,claimid,options): - global FOUND - global ALLFOUND - global INVOLVED - - claim = claimidToClaim(claimid) - - # This is an MPA attack! - if OPTS.debug: - print "I've found a multi-protocol attack on claim %s in the context %s." % (claimid,str(mpalist)) - - att = Attack(claim,mpalist) - FOUND.append(att) - ALLFOUND.append(att) - - inv = [claim.protocol] - for fn in mpalist: - global PROTFILETONAME - inv.append(PROTFILETONAME[fn]) - - for pn in inv: - if pn not in INVOLVED: - INVOLVED.append(pn) - - #return False - - return True - - -def constructMPAlist(protocolset,claimid,mpalist,length,start,callback,options=[]): - """ - Append a list of parallel protocols, without duplicates, - such that the added part is lexicographically ordered (from - index 'start' in the protocol list) - For each possible list, the function callback is called. If the - callback returns true, iteration proceeds (returning true in the - end), otherwise it aborts and returns false. - """ - if len(mpalist) < length: - # list is not long enough yet - for pn in range(start,len(protocolset)): - p = protocolset[pn] - if p not in mpalist: - if not constructMPAlist(protocolset,claimid,mpalist + [p],length,pn+1,callback,options=options): - return False - return True - else: - # list is long enough: callback - return callback(mpalist,claimid,options) - - -def findMPA(protocolset,protocol,claimid,options=[]): - """ - The protocol claim is assumed to be correct. When does it break? - """ - global OPTS - - # First we examine 2-protocol attacks, and then increase the - # number of parallel protocols if we don't find any attacks on the - # claim. - maxcount = OPTS.maxprotocols - count = 2 - if len(protocolset) < maxcount: - # we cannot have more protocols in parallel than there are - # protocols. - maxcount = len(protocolset) - - # the actual incremental search loop - while count <= maxcount: - constructMPAlist(protocolset,claimid,[protocol],count,0,verifyMPAlist,options) - count += 1 - return None - - -def foundToDicts(attacklist = []): - """ - Turn a list of attacks into a more structured dict of dicts - protocolname -> claimid -> P(attack) - """ - res = {} - for att in attacklist: - pn = str(att.protocol()) - cl = att.claimid() - - if pn not in res.keys(): - res[pn] = {} - if cl not in res[pn].keys(): - res[pn][cl] = set() - res[pn][cl].add(att) - return res - - -def findAllMPA(protocolset,options=[],mpaoptions=[]): - """ - Given a set of protocols, find multi-protocol attacks - """ - - global FOUND - global OPTS, ARGS - global PROTNAMETOFILE - global ALLCLAIMS - - FOUND = [] - - # Find all correct claims in each protocol - (protocolset,correct,cpcount) = getCorrectIsolatedClaims(protocolset,options) - print "Investigating %i correct claims in %i protocols." % (len(correct), cpcount) - - mpaprots = [] - res = [] - - if len(correct) == 0: - print "Nothing to do." - return res - - if OPTS.verbose: - """ - When verbose, list correct claims in protocols - """ - pmapclaims = {} - for (protocol,claimid) in correct: - if protocol not in pmapclaims.keys(): - pmapclaims[protocol] = set() - pmapclaims[protocol].add(claimid) - print "Protocols with correct claims:" - if len(pmapclaims.keys()) == 0: - print " None." - else: - for pk in pmapclaims.keys(): - print " %s, %s" % (pk, pmapclaims[pk]) - print - left = set() - for p in protocolset: - if p not in pmapclaims.keys(): - left.add(p) - print "Protocols with no correct claims:" - if len(left) == 0: - print " None." - else: - for p in left: - print " %s" % (p) - print - - # output of all claims (only if latex required) - - if OPTS.latex: - clset = set() - for claim in ALLCLAIMS: - prot = str(claim.protocol) - file = PROTNAMETOFILE[prot] - clid = claim.id - descr = claim.roledescribe() - - tup = (file,prot,clid,descr) - clset.add(tup) - - fp = open("gen-%s-claims.txt" % (OPTS.latex),"w") - - fp.write("%% OPTS: %s\n" % OPTS) - fp.write("%% ARGS: %s\n" % ARGS) - - for (file,prot,clid,descr) in sorted(clset): - fp.write("%s; %s; %s; %s\n" % (file,prot,clid,descr)) - - fp.close() - - # Latex output of protocols with correct claims - if OPTS.latex: - pmapclaims = {} - for (protocol,claimid) in correct: - if protocol not in pmapclaims.keys(): - pmapclaims[protocol] = set() - pmapclaims[protocol].add(claimid) - - fp = open("gen-%s-correctclaims.tex" % (OPTS.latex),"w") - - fp.write("%% OPTS: %s\n" % OPTS) - fp.write("%% ARGS: %s\n" % ARGS) - - fp.write("\\begin{tabular}{ll}\n") - fp.write("Protocol & Claims \\\\\n") - for protocol in sorted(pmapclaims.keys()): - fp.write("%s & " % (PROTFILETONAME[protocol])) - claims = sorted(pmapclaims[protocol]) - latexcl = set() - for claimid in claims: - claim = claimidToClaim(claimid) - latexcl.add(claim.roledescribe()) - - fp.write("; ".join(sorted(latexcl))) - fp.write("\\\\\n") - fp.write("\\end{tabular}\n") - fp.close() - - # For all these claims... - if not OPTS.plain: - widgets = ['Scanning for MPA attacks: ', SimpleProgress(), ' claims (', Percentage(), ') ', - Bar(marker='#',left='[',right=']'), - ETA() - ] - pbar = ProgressBar(widgets=widgets, maxval=len(correct)) - pbar.start() - count = 0 - - # Concatenate options but add space iff needed - alloptions = options + mpaoptions - - for (protocol,claimid) in correct: - # Try to find multi-protocol attacks - findMPA(protocolset,protocol,claimid,options=alloptions) - count += 1 - if not OPTS.plain: - pbar.update(count) - if not OPTS.plain: - pbar.finish() - - """ - The below computation assumes protocol names are unique to files, but if - they are not, some other errors should have been reported by the Scyther - backend anyway (conflicting protocol definitions in MPA analysis). - """ - for att in FOUND: - pn = att.protocol() - if pn not in mpaprots: - mpaprots.append(pn) - res.append(att) - - """ - Latex table of attacks - - TODO : map file names to protocol names, write out claim details - - TODO : remove main protocol from list (it's: "MPA attacks when run in parallel with") - - TODO : Check whether current tests stop after finding *one* MPA attack or whether they find *all*. - - """ - if OPTS.latex and not OPTS.pickle: - fp = open("gen-%s-mpaattacks.tex" % (OPTS.latex),"w") - - fp.write("%% OPTS: %s\n" % OPTS) - fp.write("%% ARGS: %s\n" % ARGS) - - fp.write("\\begin{tabular}{lll}\n") - fp.write("Protocol & Claim & MPA attacks \\\\ \n") - - # Convert to more useful structure (maybe move one level up) - res = foundToDicts(FOUND) - - """ - Scan per protocol in mpaprots (maybe sorted?) - """ - for prot in sorted(res.keys()): - """ - List claim and then attack scenarios (to some max?) - """ - ltprot = prot - for claimid in sorted(res[prot].keys()): - - firstclaim = True - for att in sorted(res[prot][claimid]): - - if firstclaim: - - ltclaim = att.claim.roledescribe() - firstclaim = False - - attl = att.mpalist - ltattacks = [] - for attprot in attl: - if PROTFILETONAME[attprot] != att.claim.protocol: - ltattacks.append(PROTFILETONAME[attprot]) - - fp.write("%s & %s & %s \\\\ \n" % (ltprot,ltclaim,sorted(ltattacks))) - - # Erase for cleaner table - ltprot = "" - ltclaim = "" - - fp.write("\\end{tabular}\n") - fp.close() - - print "-" * 70 - print "Summary:" - print - print "We scanned %i protocols with options [%s]." % (len(protocolset),options) - print "We found %i correct claims." % (len(correct)) - print "We then scanned combinations of at most %i protocols with options [%s]." % (OPTS.maxprotocols,alloptions) - if OPTS.pickle: - print "However, just precomputing now, hence we are not drawing any conclusions." - else: - print "We found %i MPA attacks." % (len(FOUND)) - print "The attacks involve the claims of %i protocols." % (len(mpaprots)) - print "-" * 70 - print - - return res - - -def claimidToClaim(claimid): - """ - Return claim object given a claim id - """ - global ALLCLAIMS - - for claim in ALLCLAIMS: - if claim.id == claimid: - return claim - - - -def showDiff(reslist): - """ - Show difference between (opts,mpaopts,attacklist) tuples in list - """ - if len(reslist) == 0: - print "Comparison list is empty" - return - - (opt1,mpaopt1,al1) = reslist[0] - print "-" * 70 - print "Base case: attacks for \n [%s]:" % (opt1 + mpaopt1) - print - print len(al1) - for a in al1: - print "Base attack: %s" % (a) - - print "-" * 70 - print - - for i in range(0,len(reslist)-1): - (opt1,mpaopt1,al1) = reslist[i] - (opt2,mpaopt2,al2) = reslist[i+1] - - print "-" * 70 - print "Comparing the attacks for \n [%s] with\n [%s]:" % (opt1 + mpaopt1, opt2 + mpaopt2) - print - print len(al1), len(al2) - for a in al2: - if a not in al1: - print "Added attack: %s" % (a) - for a in al1: - if a not in al2: - print "Removed attack: %s" % (a) - - print "-" * 70 - print - - - - - - -def makeChoices(): - """ - Make choice grid. - Later options should (intuitively) give more attacks. - - [ MPAonly, (text,switch)* ] - """ - - global OPTS, ARGS - - choices = [] - - if OPTS.alltypes: - - choices.append([ False, \ - ("no type flaws",["--match=0"]), \ - ("basic type flaws",["--match=1"]), \ - ("all type flaws",["--match=2"]), \ - ]) - - if OPTS.selfcommunication: - - choices.append([ True, \ - ("Disallow A-A",["--extravert"]), \ - ("Allow responder A-A",["--init-unique"]), \ - ("Allow A-A",[]) \ - ]) - - return choices - - -def exploreTree( i, choices , l, options = [], mpaoptions = []): - """ - Each choice[x] is an array again: - - MPAonly, (txt,arg)* - """ - - if i >= len(choices): - return [(options,mpaoptions,findAllMPA(l, options = options, mpaoptions = mpaoptions))] - - mpaonly = choices[i][0] - cl = choices[i][1:] - - res = [] - for (txt,arg) in cl: - - print "For choice %i, selecting options %s" % (i,txt) - if mpaonly: - o1 = [] - o2 = arg - else: - o1 = arg - o2 = [] - res = res + exploreTree(i+1, choices, l, options = options + o1, mpaoptions = mpaoptions + o2) - - return res - - - -def fullScan(l, options = [], mpaoptions = []): - - global OPTS - global ALLFOUND - global ALLCLAIMS - global INVOLVED - global PROTNAMETOFILE - global PROTFILETONAME - - ALLFOUND = [] - ALLCLAIMS = [] - INVOLVED = [] - - if OPTS.limit > 0: - l = l[:OPTS.limit] - - choices = makeChoices() - if len(choices) == 0: - """ - No choices, just evaluate - """ - res = findAllMPA(l, options = options, mpaoptions = mpaoptions) - - else: - lres = exploreTree(0, choices, l, options = options, mpaoptions = mpaoptions) - if len(lres) > 1: - if not OPTS.pickle: - showDiff(lres) - - allprots = set() - attprots = set() - invprots = set() - for att in ALLFOUND: - attprots.add(str(att.protocol())) - for cl in ALLCLAIMS: - allprots.add(str(cl.protocol)) - for prot in INVOLVED: - invprots.add(str(prot)) - - if not OPTS.pickle: - print "The bottom line: we found %i protocols with multi-protocol attacks from a set of %i protocols." % (len(attprots),len(allprots)) - print - - print "Multi-protocol attacks were found on:" - for prot in sorted(list(allprots & attprots)): - print " %s" % (prot) - print - - print "No multi-protocol attacks were found on these protocols, but they caused MPA attacks:" - for prot in sorted(list((allprots - attprots) & invprots)): - print " %s" % (prot) - print - - print "These protocols were not involved in any MPA attacks:" - for prot in sorted(list((allprots - attprots) - invprots)): - print " %s\t[%s]" % (prot,PROTNAMETOFILE[prot]) - print - - - - -def bigTest(): - """ - Perform the tests as reported in the book. - """ - import os - - global OPTS, ARGS - - l = [] - nl = [] - - """ - Check for any given filenames - """ - if len(ARGS) == 0: - # No filenames given - testpath = "Protocols/MultiProtocolAttacks/" - fl = os.listdir(testpath) - for fn in fl: - if fn.endswith(".spdl"): - nl.append(fn) - - # Prepend again the path - l = [] - for fn in nl: - l.append(testpath+fn) - else: - for fn in ARGS: - l.append(fn) - nl = l - - # Report list - print "Performing multi-protocol analysis for the following protocols:", nl - - fullScan(l) - - - -def main(): - global OPTS, ARGS, PICKLEDATA - - (OPTS,ARGS) = parseArgs() - if OPTS.pickle: - PICKLEDATA = set() - - bigTest() - - #simpleTest() - - if OPTS.pickle: - pf = open(OPTS.pickle,"wa") - for el in PICKLEDATA: - json.dump(el,pf) - pf.write("\n") - pf.close() - - -if __name__ == '__main__': - main() - - -# vim: set ts=4 sw=4 et list lcs=tab\:>-: diff --git a/Vagrant Files/shared/scyther/todo.txt b/Vagrant Files/shared/scyther/todo.txt deleted file mode 100644 index 60e05afa63449ee5cd2599f34d0504405ce324d9..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/todo.txt +++ /dev/null @@ -1,29 +0,0 @@ -URGENT - -- - -TO BE DONE - -- Config file should use Python's confParse module. -- Save preferences in local file on close. - -WOULD LIKE TO HAVE - -- Font selector for graphs. -- Nice graph scaling for all platforms (now only supported under Linux - using the Python Imaging Library through postscript; currently - wxPython does not support any cross-platform vector format out of the - box, as SVG is still only a non-default build option.) -- Support for using an external editor. - - toggle for 'watch file'. - - toggle for 'auto-verify on change' or something like that. -- Ideally we somehow color the correct/incorrect tags in the editor. -- Line numbering is needed for the editor window otherwise you cannot - interpret attacks. Probably use wx.Py editor things. -- Scyther executable should be able to be set by means of preferences. - -IN AN IDEAL WORLD... - -- Use Python modules to generate the attack graphs from the XML, also - allow for eg. ASCII output. - diff --git a/Vagrant Files/shared/scyther/wiper.sh b/Vagrant Files/shared/scyther/wiper.sh deleted file mode 100644 index 11766f70e8bd4ad8586ec39c54625ce6f2d738e2..0000000000000000000000000000000000000000 --- a/Vagrant Files/shared/scyther/wiper.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -# -# Wipe Brutus artefacts. -# -# Run as 'watch -n 10 ./wiper.sh' - -find lsf.* -maxdepth 0 -amin +11 -print -delete 2>&1 - - diff --git a/Vagrant Files/shared/example.txt.txt b/Vagrant Files/shared/test folder/example.txt.txt similarity index 100% rename from Vagrant Files/shared/example.txt.txt rename to Vagrant Files/shared/test folder/example.txt.txt