diff --git a/src/tmltranslator/SecurityPattern.java b/src/tmltranslator/SecurityPattern.java index 389203f32ac1cb34987a8ffe4507fb0183e7fb8c..bad485c3056db2e6847922f1527ca748cac3b685 100644 --- a/src/tmltranslator/SecurityPattern.java +++ b/src/tmltranslator/SecurityPattern.java @@ -11,10 +11,11 @@ public int time=0; public String originTask; public AvatarState state1; public AvatarState state2; - -public SecurityPattern(String _name, String _type, String _overhead, String _size, String _time){ +public String nonce; +public SecurityPattern(String _name, String _type, String _overhead, String _size, String _time, String _nonce){ this.name=_name; this.type=_type; + this.nonce=_nonce; if (!_overhead.equals("")){ this.overhead = Integer.valueOf(_overhead); } diff --git a/src/tmltranslator/toavatar/TML2Avatar.java b/src/tmltranslator/toavatar/TML2Avatar.java index 0d564f78c212b41417cf8b1d0c4a3055c8b82dff..deb03439e146c9e8c3987c7a30e723cdcd8f07cf 100644 --- a/src/tmltranslator/toavatar/TML2Avatar.java +++ b/src/tmltranslator/toavatar/TML2Avatar.java @@ -707,6 +707,8 @@ public class TML2Avatar { AvatarAttributeState authDest = new AvatarAttributeState(ae.securityPattern.name+"2",ae.getReferenceObject(),block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); signalAuthDestMap.put(ae.securityPattern.name, authDest); } + else if (ae.securityPattern.type.equals("MAC")){ + } } else { as.addNext(tran); diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java index 6709bc8db7c97f12ea87c736c2117424ded45878..d72ccb84b6adef529d0110956103e27b46ee354f 100755 --- a/src/ui/GTMLModeling.java +++ b/src/ui/GTMLModeling.java @@ -1300,7 +1300,7 @@ public class GTMLModeling { while(iterator.hasNext()){ tgc = (TGComponent)(iterator.next()); if (tgc instanceof TMLADEncrypt) { - SecurityPattern securityPattern = new SecurityPattern(((TMLADEncrypt)tgc).securityContext, ((TMLADEncrypt)tgc).type, ((TMLADEncrypt)tgc).message_overhead, ((TMLADEncrypt)tgc).size, ((TMLADEncrypt)tgc).calculationTime); + SecurityPattern securityPattern = new SecurityPattern(((TMLADEncrypt)tgc).securityContext, ((TMLADEncrypt)tgc).type, ((TMLADEncrypt)tgc).message_overhead, ((TMLADEncrypt)tgc).size, ((TMLADEncrypt)tgc).calculationTime, ((TMLADEncrypt)tgc).nonce); securityPatterns.put(securityPattern.name, securityPattern); } } diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java index 212909cd272e42053720763b4d9b76be3c508a9a..8a5d83e741530ab934524d4909d854c110699f4f 100755 --- a/src/ui/MainGUI.java +++ b/src/ui/MainGUI.java @@ -306,7 +306,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe private Map<String, String> statusMap = new HashMap<String, String>(); private JFrameInteractiveSimulation jfis; private JFrameAvatarInteractiveSimulation jfais; - + // Invariants Invariant currentInvariant; @@ -3773,6 +3773,26 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe return tmlcomp.getAllInChannels(name); } + public String[] getAllCryptoConfig() { + TURTLEPanel tp = getCurrentTURTLEPanel(); + if (tp == null) {return null;} + if (!(tp instanceof TMLComponentDesignPanel)) {return null;} + TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp; + ArrayList<String> strlist = tmlcomp.getAllCryptoConfig(); + String[] strarray = new String[strlist.size()]; + strlist.toArray(strarray); + return strarray; + } + public String[] getAllNonce(){ + TURTLEPanel tp = getCurrentTURTLEPanel(); + if (tp == null) {return null;} + if (!(tp instanceof TMLComponentDesignPanel)) {return null;} + TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp; + ArrayList<String> strlist = tmlcomp.getAllNonce(); + String[] strarray = new String[strlist.size()]; + strlist.toArray(strarray); + return strarray; + } public String[] getAllOutRequests() { TURTLEPanel tp = getCurrentTURTLEPanel(); if (tp == null) {return null;} diff --git a/src/ui/TMLComponentDesignPanel.java b/src/ui/TMLComponentDesignPanel.java index 6adbf3327553aa1ac44fdbf5bc8fff5c943692b5..936f03648f45f2ac60da51aeaac75109629d710c 100755 --- a/src/ui/TMLComponentDesignPanel.java +++ b/src/ui/TMLComponentDesignPanel.java @@ -210,6 +210,25 @@ public class TMLComponentDesignPanel extends TURTLEPanel { } } } + public ArrayList<String> getAllCryptoConfig(){ + ArrayList<String> cryptoConfigs=new ArrayList<String>(); + TMLActivityDiagramPanel tmladp; + for(int i=1; i<panels.size(); i++) { + tmladp = (TMLActivityDiagramPanel)(panels.elementAt(i)); + cryptoConfigs.addAll(tmladp.getAllCryptoConfig()); + } + return cryptoConfigs; + } + public ArrayList<String> getAllNonce(){ + ArrayList<String> ns=new ArrayList<String>(); + TMLActivityDiagramPanel tmladp; + for(int i=1; i<panels.size(); i++) { + tmladp = (TMLActivityDiagramPanel)(panels.elementAt(i)); + ns.addAll(tmladp.getAllNonce()); + } + return ns; + } + public String[] getAllOutEvents(String nameOfComponent) { return tmlctdp.getAllOutEvents(nameOfComponent); diff --git a/src/ui/tmlad/TMLADDecrypt.java b/src/ui/tmlad/TMLADDecrypt.java index 7e58bf99df2741aa6843fed02c7e12060f537c23..ae1e775f6fa3b924f5f4a67f5f335e9ba8ed9b2e 100755 --- a/src/ui/tmlad/TMLADDecrypt.java +++ b/src/ui/tmlad/TMLADDecrypt.java @@ -118,9 +118,10 @@ public boolean editOndoubleClick(JFrame frame) { labels[0] = "Security Pattern"; values[0] = securityContext; - + ArrayList<String []> help = new ArrayList<String []>(); + help.add(tdp.getMGUI().getAllCryptoConfig()); //JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples); - JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 1, labels, values); + JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 1, labels, values,help); jdms.setSize(450, 300); GraphicLib.centerOnParent(jdms); jdms.show(); // blocked until dialog has been closed diff --git a/src/ui/tmlad/TMLADEncrypt.java b/src/ui/tmlad/TMLADEncrypt.java index e824c0781b9a2d2fd7319b454a48624f744bbdf0..870f24a0016ddd7281265e6798d604de303cd595 100755 --- a/src/ui/tmlad/TMLADEncrypt.java +++ b/src/ui/tmlad/TMLADEncrypt.java @@ -67,6 +67,7 @@ public class TMLADEncrypt extends TGCWithoutInternalComponent implements Embedde public String size=""; public String securityContext=""; public String calculationTime="100"; + public String nonce=""; protected int stateOfError = 0; // Not yet checked @@ -119,8 +120,9 @@ public class TMLADEncrypt extends TGCWithoutInternalComponent implements Embedde public boolean editOndoubleClick(JFrame frame) { //JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples);] - String[] values=new String[]{securityContext, type, message_overhead, size, calculationTime}; - JDialogCryptographicConfiguration jdms = new JDialogCryptographicConfiguration(frame, "Setting Cryptographic Configuration properties", values); + String[] values=new String[]{securityContext, type, message_overhead, size, calculationTime, nonce}; + String[] nonces=tdp.getMGUI().getAllNonce(); + JDialogCryptographicConfiguration jdms = new JDialogCryptographicConfiguration(frame, "Setting Cryptographic Configuration properties", values, nonces); jdms.setSize(650, 300); GraphicLib.centerOnParent(jdms); jdms.show(); // blocked until dialog has been closed @@ -131,6 +133,7 @@ public boolean editOndoubleClick(JFrame frame) { message_overhead=jdms.getString(2); calculationTime=jdms.getString(3); size=jdms.getString(4); + nonce=jdms.getString(5); return true; } diff --git a/src/ui/tmlad/TMLADReadChannel.java b/src/ui/tmlad/TMLADReadChannel.java index 24b4b6fb201db40f0e7423faf206c5711d71e0fd..af2231740afba7966fbe8e2b365aefe0497d2383 100755 --- a/src/ui/tmlad/TMLADReadChannel.java +++ b/src/ui/tmlad/TMLADReadChannel.java @@ -225,6 +225,9 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che ArrayList<String []> help = new ArrayList<String []>(); String[] allInChannels = tdp.getMGUI().getAllInChannels(); help.add(allInChannels); + help.add(null); + help.add(tdp.getMGUI().getAllCryptoConfig()); + // JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples); diff --git a/src/ui/tmlad/TMLADWriteChannel.java b/src/ui/tmlad/TMLADWriteChannel.java index 12a637aa861a17c31b0fec1b7014eb155a0656ac..9a4dfae84a78c7c2a7910f2faa36b0ebc2915ea4 100755 --- a/src/ui/tmlad/TMLADWriteChannel.java +++ b/src/ui/tmlad/TMLADWriteChannel.java @@ -231,7 +231,8 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch ArrayList<String []> help = new ArrayList<String []>(); String[] allOutChannels = tdp.getMGUI().getAllOutChannels(); help.add(allOutChannels); - + help.add(null); + help.add(tdp.getMGUI().getAllCryptoConfig()); //JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples); JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help); diff --git a/src/ui/tmlad/TMLActivityDiagramPanel.java b/src/ui/tmlad/TMLActivityDiagramPanel.java index 3f6293a48a7cbc773090f6c7a31bcd19fc90d623..78d1b0d38bbf685c166dc958123b9f44e39a7b69 100755 --- a/src/ui/tmlad/TMLActivityDiagramPanel.java +++ b/src/ui/tmlad/TMLActivityDiagramPanel.java @@ -169,5 +169,31 @@ public class TMLActivityDiagramPanel extends TDiagramPanel { public boolean hasAutoConnect() { return true; } - + public ArrayList<String> getAllCryptoConfig(){ + ArrayList<String> cc=new ArrayList<String>(); + LinkedList<TGComponent> comps= getAllComponentList(); + for (TGComponent c: comps){ + if (c instanceof TMLADEncrypt){ + TMLADEncrypt en= (TMLADEncrypt) c; + if (!en.securityContext.isEmpty()){ + cc.add(en.securityContext); + } + } + } + return cc; + } + + public ArrayList<String> getAllNonce(){ + ArrayList<String> ns=new ArrayList<String>(); + LinkedList<TGComponent> comps= getAllComponentList(); + for (TGComponent c: comps){ + if (c instanceof TMLADEncrypt){ + TMLADEncrypt en= (TMLADEncrypt) c; + if (!en.securityContext.isEmpty() && en.type.equals("Nonce")){ + ns.add(en.securityContext); + } + } + } + return ns; + } } diff --git a/src/ui/window/JDialogCryptographicConfiguration.java b/src/ui/window/JDialogCryptographicConfiguration.java index 39422ceccdfae5214dca35dc45daf2ed5378bd20..e91c2a33785b80ab195ee88ba0be2093f66f5757 100644 --- a/src/ui/window/JDialogCryptographicConfiguration.java +++ b/src/ui/window/JDialogCryptographicConfiguration.java @@ -72,19 +72,21 @@ public class JDialogCryptographicConfiguration extends javax.swing.JDialog imple // Main Panel private JButton closeButton; private JButton cancelButton; - + String[] nonces; private ArrayList<String[]> possibleValues = null; - + GridBagConstraints c0 = new GridBagConstraints(); + Container c; /** Creates new form */ // arrayDelay: [0] -> minDelay ; [1] -> maxDelay - public JDialogCryptographicConfiguration(Frame f, String title, String[] _values) { + public JDialogCryptographicConfiguration(Frame f, String title, String[] _values, String[] _nonces) { super(f, title, true); - nbString = 5; + nbString = 6; values=_values; + nonces=_nonces; texts = new JTextField[nbString]; initComponents(); @@ -100,33 +102,126 @@ public class JDialogCryptographicConfiguration extends javax.swing.JDialog imple inserts = new JButton[nbString]; helps = new JComboBox[nbString]; - Container c = getContentPane(); + c = getContentPane(); GridBagLayout gridbag0 = new GridBagLayout(); - GridBagLayout gridbag1 = new GridBagLayout(); - GridBagConstraints c0 = new GridBagConstraints(); - GridBagConstraints c1 = new GridBagConstraints(); + + setFont(new Font("Helvetica", Font.PLAIN, 14)); c.setLayout(gridbag0); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - panel1 = new JPanel(); - panel1.setLayout(gridbag1); + + panel1= new EncryptPanel(this); + c0.gridwidth = 1; + c0.gridheight = 10; + c0.weighty = 1.0; + c0.weightx = 1.0; + c0.gridwidth = GridBagConstraints.REMAINDER; //end row + c.add(panel1, c0); + + + + + // main panel; + c0.gridwidth = 1; + c0.gridheight = 1; + c0.fill = GridBagConstraints.HORIZONTAL; + closeButton = new JButton("Save and Close", IconManager.imgic25); + //closeButton.setPreferredSize(new Dimension(600, 50)); + closeButton.addActionListener(this); + c.add(closeButton, c0); + c0.gridwidth = GridBagConstraints.REMAINDER; //end row + cancelButton = new JButton("Cancel", IconManager.imgic27); + cancelButton.addActionListener(this); + c.add(cancelButton, c0); + } + + public void actionPerformed(ActionEvent evt) { + String command = evt.getActionCommand(); + + // Compare the action command to the known actions. + if (command.equals("Save and Close")) { + closeDialog(); + } else if (command.equals("Cancel")) { + cancelDialog(); + } else if (inserts[0] != null) { + if (evt.getSource() == inserts[0]) { + texts[1].setText(helps[1].getSelectedItem().toString()); + boolean repanel = false; + if ((helps[1].getSelectedIndex() >1) && !(panel1 instanceof funcPanel)){ + values[1]=helps[1].getSelectedItem().toString(); + values[0]=texts[0].getText(); + values[3]=texts[3].getText(); + values[2]=""; + values[5]=""; + repanel=true; + c.removeAll(); + panel1= new funcPanel(this); + } + else if ((helps[1].getSelectedIndex() <2) && !(panel1 instanceof EncryptPanel)){ + values[1]=helps[1].getSelectedItem().toString(); + values[0]=texts[0].getText(); + values[3]=texts[3].getText(); + values[4]=""; + c.removeAll(); + repanel=true; + panel1= new EncryptPanel(this); + + } + + if (repanel){ + c0.gridwidth = 1; + c0.gridheight = 10; + c0.weighty = 1.0; + c0.weightx = 1.0; + c0.gridwidth = GridBagConstraints.REMAINDER; //end row + + c.add(panel1,c0); + // main panel; + c0.gridwidth = 1; + c0.gridheight = 1; + c0.fill = GridBagConstraints.HORIZONTAL; + closeButton = new JButton("Save and Close", IconManager.imgic25); + //closeButton.setPreferredSize(new Dimension(600, 50)); + closeButton.addActionListener(this); + c.add(closeButton, c0); + c0.gridwidth = GridBagConstraints.REMAINDER; //end row + cancelButton = new JButton("Cancel", IconManager.imgic27); + cancelButton.addActionListener(this); + c.add(cancelButton, c0); + this.invalidate(); + this.validate(); + this.repaint(); + } + } + if (evt.getSource() == inserts[5]) { + texts[5].setText(helps[5].getSelectedItem().toString()); + } + } + } + - panel1.setBorder(new javax.swing.border.TitledBorder("Properties")); - panel1.setPreferredSize(new Dimension(600, 200)); + public class EncryptPanel extends JPanel { + public EncryptPanel(JDialogCryptographicConfiguration j){ + GridBagConstraints c1 = new GridBagConstraints(); + GridBagLayout gridbag1 = new GridBagLayout(); + + this.setLayout(gridbag1); + + this.setBorder(new javax.swing.border.TitledBorder("Properties")); + + this.setPreferredSize(new Dimension(600, 200)); - // first line panel1 c1.weighty = 1.0; c1.weightx = 1.0; c1.gridwidth = GridBagConstraints.REMAINDER; //end row c1.fill = GridBagConstraints.BOTH; c1.gridheight = 1; - panel1.add(new JLabel(" "), c1); + add(new JLabel(" "), c1); - // second line panel1 c1.gridwidth = 1; c1.gridheight = 1; c1.weighty = 1.0; @@ -134,84 +229,114 @@ public class JDialogCryptographicConfiguration extends javax.swing.JDialog imple c1.anchor = GridBagConstraints.CENTER; c1.fill = GridBagConstraints.HORIZONTAL; c1.anchor = GridBagConstraints.CENTER; - String[] vals = new String[]{"Symmetric Encryption", "Asymmetric Encryption","MAC", "Hash", "Message id"}; + String[] vals = new String[]{"Symmetric Encryption", "Asymmetric Encryption","MAC", "Hash", "Nonce"}; // String1 c1.gridwidth = 1; - panel1.add(new JLabel("Cryptographic Configuration"),c1); + add(new JLabel("Cryptographic Configuration"),c1); texts[0]=new JTextField(values[0],15); c1.gridwidth = GridBagConstraints.REMAINDER; //end row - panel1.add(texts[0],c1); + add(texts[0],c1); c1.gridwidth=1; - panel1.add(new JLabel("Security Pattern"), c1); + add(new JLabel("Security Pattern"), c1); helps[1]=new JComboBox(vals); - panel1.add(helps[1],c1); + helps[1].setSelectedItem(values[1]); + add(helps[1],c1); c1.gridwidth=GridBagConstraints.REMAINDER; inserts[0] = new JButton("Use"); - inserts[0].addActionListener(this); - panel1.add(inserts[0], c1); + inserts[0].addActionListener(j); + add(inserts[0], c1); texts[1]=new JTextField(values[1], 15); - panel1.add(texts[1], c1); + add(texts[1], c1); c1.gridwidth = 1; - panel1.add(new JLabel("Overhead"),c1); + add(new JLabel("Overhead"),c1); texts[2]=new JTextField(values[2],15); c1.gridwidth = GridBagConstraints.REMAINDER; //end row - panel1.add(texts[2],c1); + add(texts[2],c1); c1.gridwidth = 1; - panel1.add(new JLabel("Computational Complexity"),c1); + add(new JLabel("Computational Complexity"),c1); texts[3]=new JTextField(values[3],15); c1.gridwidth = GridBagConstraints.REMAINDER; //end row - panel1.add(texts[3],c1); + add(texts[3],c1); + c1.gridwidth = 1; - panel1.add(new JLabel("Size"),c1); - texts[4]=new JTextField(values[4],15); - c1.gridwidth = GridBagConstraints.REMAINDER; //end row - panel1.add(texts[4],c1); + add(new JLabel("Nonce"),c1); + helps[5]=new JComboBox(nonces); + helps[5].setSelectedItem(values[5]); + add(helps[5],c1); + c1.gridwidth=GridBagConstraints.REMAINDER; + inserts[5] = new JButton("Use"); + inserts[5].addActionListener(j); + add(inserts[5], c1); + texts[5]=new JTextField(values[5], 15); + add(texts[5], c1); + } + } + public class funcPanel extends JPanel { + public funcPanel(JDialogCryptographicConfiguration j){ + GridBagConstraints c1 = new GridBagConstraints(); + GridBagLayout gridbag1 = new GridBagLayout(); + setLayout(gridbag1); + setBorder(new javax.swing.border.TitledBorder("Properties")); + setPreferredSize(new Dimension(600, 200)); - // main panel; - c0.gridwidth = 1; - c0.gridheight = 10; - c0.weighty = 1.0; - c0.weightx = 1.0; - c0.gridwidth = GridBagConstraints.REMAINDER; //end row + c1.weighty = 1.0; + c1.weightx = 1.0; + c1.gridwidth = GridBagConstraints.REMAINDER; //end row + c1.fill = GridBagConstraints.BOTH; + c1.gridheight = 1; + add(new JLabel(" "), c1); - c.add(panel1, c0); + // second line panel1 + c1.gridwidth = 1; + c1.gridheight = 1; + c1.weighty = 1.0; + c1.weightx = 1.0; + c1.anchor = GridBagConstraints.CENTER; + c1.fill = GridBagConstraints.HORIZONTAL; + c1.anchor = GridBagConstraints.CENTER; + String[] vals = new String[]{"Symmetric Encryption", "Asymmetric Encryption","MAC", "Hash", "Nonce"}; + // String1 + c1.gridwidth = 1; + add(new JLabel("Cryptographic Configuration"),c1); + texts[0]=new JTextField(values[0],15); + c1.gridwidth = GridBagConstraints.REMAINDER; //end row + add(texts[0],c1); - c0.gridwidth = 1; - c0.gridheight = 1; - c0.fill = GridBagConstraints.HORIZONTAL; - closeButton = new JButton("Save and Close", IconManager.imgic25); - //closeButton.setPreferredSize(new Dimension(600, 50)); - closeButton.addActionListener(this); - c.add(closeButton, c0); - c0.gridwidth = GridBagConstraints.REMAINDER; //end row - cancelButton = new JButton("Cancel", IconManager.imgic27); - cancelButton.addActionListener(this); - c.add(cancelButton, c0); - } + c1.gridwidth=1; + add(new JLabel("Security Pattern"), c1); + helps[1]=new JComboBox(vals); + helps[1].setSelectedItem(values[1]); + add(helps[1],c1); - public void actionPerformed(ActionEvent evt) { - String command = evt.getActionCommand(); + c1.gridwidth=GridBagConstraints.REMAINDER; + inserts[0] = new JButton("Use"); + inserts[0].addActionListener(j); + add(inserts[0], c1); + texts[1]=new JTextField(values[1], 15); + add(texts[1], c1); - // Compare the action command to the known actions. - if (command.equals("Save and Close")) { - closeDialog(); - } else if (command.equals("Cancel")) { - cancelDialog(); - } else if (inserts[0] != null) { - if (evt.getSource() == inserts[0]) { - texts[1].setText(helps[1].getSelectedItem().toString()); - } - } - } + c1.gridwidth = 1; + add(new JLabel("Computational Complexity"),c1); + texts[3]=new JTextField(values[3],15); + c1.gridwidth = GridBagConstraints.REMAINDER; //end row + add(texts[3],c1); + c1.gridwidth = 1; + add(new JLabel("Size"),c1); + texts[4]=new JTextField(values[4],15); + c1.gridwidth = GridBagConstraints.REMAINDER; //end row + add(texts[4],c1); + + } + } public void closeDialog() { set = true;