From 6cacc9485038fc3aa7e32646be57773f3d0af4f6 Mon Sep 17 00:00:00 2001
From: Florian Lugou <florian.lugou@telecom-paristech.fr>
Date: Tue, 6 Oct 2015 12:21:06 +0000
Subject: [PATCH] added constant translation and public pragma translation in
 ProVerif

---
 src/avatartranslator/AvatarBlock.java                | 4 ++++
 src/avatartranslator/AvatarTerm.java                 | 7 +++++++
 src/avatartranslator/toproverif/AVATAR2ProVerif.java | 6 ++++++
 3 files changed, 17 insertions(+)

diff --git a/src/avatartranslator/AvatarBlock.java b/src/avatartranslator/AvatarBlock.java
index 948eff39f4..4c7005c9d2 100644
--- a/src/avatartranslator/AvatarBlock.java
+++ b/src/avatartranslator/AvatarBlock.java
@@ -138,6 +138,10 @@ public class AvatarBlock extends AvatarElement {
         return this.avspec.getAvatarConstantWithName (_name);
     }
 
+    public void addConstant (AvatarConstant _constant) {
+        this.avspec.addConstant (_constant);
+    }
+
     public void addIntAttributeIfApplicable(String _name) {
         if (getAvatarAttributeWithName(_name) == null) {
             AvatarAttribute aa = new AvatarAttribute(_name, AvatarType.INTEGER, this, null);
diff --git a/src/avatartranslator/AvatarTerm.java b/src/avatartranslator/AvatarTerm.java
index bb7715f9e3..0ec7cca4d1 100644
--- a/src/avatartranslator/AvatarTerm.java
+++ b/src/avatartranslator/AvatarTerm.java
@@ -78,6 +78,13 @@ public abstract class AvatarTerm extends AvatarElement {
         result = block.getAvatarConstantWithName (toParse);
         if (result != null)
             return result;
+
+        // Consider that new names are constants
+        if (AvatarTerm.isValidName (toParse)) {
+            result = new AvatarConstant (toParse, block);
+            block.addConstant ((AvatarConstant) result);
+            return result;
+        }
         //TraceManager.addDev ("AvatarConstant '" + toParse + "' couldn't be parsed");
 
         //TraceManager.addDev ("AvatarTerm '" + toParse + "' couldn't be parsed");
diff --git a/src/avatartranslator/toproverif/AVATAR2ProVerif.java b/src/avatartranslator/toproverif/AVATAR2ProVerif.java
index 509ddc4c2b..86da67c446 100755
--- a/src/avatartranslator/toproverif/AVATAR2ProVerif.java
+++ b/src/avatartranslator/toproverif/AVATAR2ProVerif.java
@@ -592,6 +592,12 @@ public class AVATAR2ProVerif implements AvatarTranslator {
             allKnowledge.add (arg);
         }
 
+        for (AvatarPragma pragma: this.avspec.getPragmas ())
+            if (pragma instanceof AvatarPragmaPublic)
+                for (AvatarAttribute attr: pragma.getArgs ())
+                    if (attr.getBlock () == ab)
+                        lastInstr = lastInstr.setNextInstr ( new ProVerifProcRaw ("out (" + CH_MAINCH + ", " + AVATAR2ProVerif.translateTerm (attr, null) + ");"));
+
         // Call the first "real" process
         String tmp = "out (" + CHCTRL_CH + ", " + CHCTRL_ENCRYPT + " ((call__" + ab.getName () + "__0";
         for(ProVerifVar aa: this.getAttributesFromBlock (ab))
-- 
GitLab