Ignore:
Timestamp:
04/17/19 14:23:09 (5 years ago)
Author:
bln4
Message:

Officially added code to encrypt frames with custom built labels. Minimal error checking implemented so far and logical things may not happen when unexpected data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/auth/EncryptedExpWriter.java

    r1243 r1323  
    66import java.util.Arrays;
    77import java.util.Base64;
     8import java.util.Collection;
    89import java.util.List;
    910
     
    1516import javax.crypto.spec.SecretKeySpec;
    1617
     18import org.expeditee.gui.Frame;
     19import org.expeditee.gui.FrameIO;
     20import org.expeditee.gui.MessageBay;
    1721import org.expeditee.io.ExpWriter;
    1822import org.expeditee.items.Text;
     23import org.expeditee.settings.UserSettings;
    1924import org.expeditee.settings.identity.secrets.KeyList;
    2025import org.ngikm.cryptography.CryptographyConstants;
     
    3641                        label = "Profile";
    3742                } else {
    38                         byte[] keyBytes = resolveKeyFromLabel(encryptionLabel);
     43                        byte[] keyBytes = resolveKeyFromLabel(encryptionLabel, _framename);
    3944                        key = new SecretKeySpec(keyBytes, SymmetricAlgorithm);
    4045                        label = encryptionLabel;
     
    6772        }
    6873       
    69         private byte[] resolveKeyFromLabel(String label) {
    70                 return null;
     74        protected static byte[] resolveKeyFromLabel(String label, String framename) {
     75                String credentialsFrameName = UserSettings.ProfileName.get() + AuthenticatorBrowser.CREDENTIALS_FRAME;
     76                Frame credentialsFrame = FrameIO.LoadFrame(credentialsFrameName);
     77                Collection<Text> textItems = credentialsFrame.getTextItems();
     78                textItems.removeIf(t -> !t.getText().equals("Secrets"));
     79                textItems.removeIf(t -> !t.hasLink());
     80                if (textItems.isEmpty()) {
     81                        MessageBay.errorMessage("Unable to find label " + label + " to encrypt frame " + framename + ".");
     82                        return null;
     83                } else {
     84                        Text linkToSecretsFrame = textItems.iterator().next();
     85                        Frame secretsFrame = FrameIO.LoadFrame(linkToSecretsFrame.getParent().getFramesetName() + linkToSecretsFrame.getLink());
     86                        Collection<Text> labels = secretsFrame.getTextItems();
     87                        labels.removeIf(lbl -> lbl.getText().equals(label));
     88                        labels.removeIf(lbl -> lbl.getData() == null || lbl.getData().size() == 0);
     89                        if (labels.isEmpty()) {
     90                                MessageBay.errorMessage("Unable to find label " + label + " to encrypt frame " + framename + ".");
     91                                return null;
     92                        }
     93                       
     94                        Text labelItem = labels.iterator().next();
     95                        String data = labelItem.getData().get(0);
     96                        if (data.contains("{")) {
     97                                MessageBay.errorMessage("You only have a fraction of the required key to access " + framename + ".");
     98                                return null;
     99                        } else {
     100                                try {
     101                                        return Base64.getDecoder().decode(data);
     102                                } catch (IllegalArgumentException e) {
     103                                        MessageBay.errorMessage("Unable to create key out of data stored in label " + label + ".");
     104                                        return null;
     105                                }
     106                        }
     107                }
    71108        }
    72109       
Note: See TracChangeset for help on using the changeset viewer.