diff options
4 files changed, 28 insertions, 3 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index 556d70cb2..8c76ebb8a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -507,6 +507,7 @@ public abstract class OperationResult implements Parcelable {          MSG_MF_UID_PRIMARY (LogLevel.INFO, R.string.msg_mf_uid_primary),          MSG_MF_UID_REVOKE (LogLevel.INFO, R.string.msg_mf_uid_revoke),          MSG_MF_UID_ERROR_EMPTY (LogLevel.ERROR, R.string.msg_mf_uid_error_empty), +        MSG_MF_UAT_ERROR_EMPTY (LogLevel.ERROR, R.string.msg_mf_uat_error_empty),          MSG_MF_UAT_ADD_IMAGE (LogLevel.INFO, R.string.msg_mf_uat_add_image),          MSG_MF_UAT_ADD_UNKNOWN (LogLevel.INFO, R.string.msg_mf_uat_add_unknown),          MSG_MF_UNLOCK_ERROR (LogLevel.ERROR, R.string.msg_mf_unlock_error), diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java index 56f7b3309..4bab7f2b9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java @@ -531,6 +531,10 @@ public class PgpKeyOperation {                      WrappedUserAttribute attribute = saveParcel.mAddUserAttribute.get(i);                      switch (attribute.getType()) { +                        // the 'none' type must not succeed +                        case WrappedUserAttribute.UAT_NONE: +                            log.add(LogType.MSG_MF_UAT_ERROR_EMPTY, indent); +                            return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);                          case WrappedUserAttribute.UAT_IMAGE:                              log.add(LogType.MSG_MF_UAT_ADD_IMAGE, indent);                              break; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java index 248ef11aa..da6d8b287 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java @@ -22,6 +22,7 @@ import org.spongycastle.bcpg.BCPGOutputStream;  import org.spongycastle.bcpg.Packet;  import org.spongycastle.bcpg.UserAttributePacket;  import org.spongycastle.bcpg.UserAttributeSubpacket; +import org.spongycastle.bcpg.UserAttributeSubpacketInputStream;  import org.spongycastle.bcpg.UserAttributeSubpacketTags;  import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector; @@ -30,6 +31,8 @@ import java.io.ByteArrayOutputStream;  import java.io.IOException;  import java.io.ObjectStreamException;  import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays;  public class WrappedUserAttribute implements Serializable { @@ -72,9 +75,17 @@ public class WrappedUserAttribute implements Serializable {          return out.toByteArray();      } -    public static WrappedUserAttribute fromData (byte[] data) { -        // TODO -        return null; +    public static WrappedUserAttribute fromData (byte[] data) throws IOException { +        UserAttributeSubpacketInputStream in = +                new UserAttributeSubpacketInputStream(new ByteArrayInputStream(data)); +        ArrayList<UserAttributeSubpacket> list = new ArrayList<UserAttributeSubpacket>(); +        while (in.available() > 0) { +            list.add(in.readPacket()); +        } +        UserAttributeSubpacket[] result = new UserAttributeSubpacket[list.size()]; +        list.toArray(result); +        return new WrappedUserAttribute( +                new PGPUserAttributeSubpacketVector(result));      }      /** Writes this object to an ObjectOutputStream. */ @@ -102,4 +113,12 @@ public class WrappedUserAttribute implements Serializable {      private void readObjectNoData() throws ObjectStreamException {      } +    @Override +    public boolean equals(Object o) { +        if (!WrappedUserAttribute.class.isInstance(o)) { +            return false; +        } +        return mVector.equals(((WrappedUserAttribute) o).mVector); +    } +  } diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 87de16f6a..561275b83 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -857,6 +857,7 @@      <string name="msg_mf_uid_primary">"Changing primary user ID to %s"</string>      <string name="msg_mf_uid_revoke">"Revoking user ID %s"</string>      <string name="msg_mf_uid_error_empty">"User ID must not be empty!"</string> +    <string name="msg_mf_uat_error_empty">"User attribute must not be empty!"</string>      <string name="msg_mf_uat_add_image">"Adding user attribute of type image"</string>      <string name="msg_mf_uat_add_unknown">"Adding user attribute of unknown type"</string>      <string name="msg_mf_unlock_error">"Error unlocking keyring!"</string> | 
