Search in sources :

Example 1 with ProtectedBinary

use of com.keepassdroid.database.security.ProtectedBinary in project KeePassDX by Kunzisoft.

the class ImporterV4 method ReadXmlElement.

private KdbContext ReadXmlElement(KdbContext ctx, XmlPullParser xpp) throws XmlPullParserException, IOException, InvalidDBException {
    String name = xpp.getName();
    switch(ctx) {
        case Null:
            if (name.equalsIgnoreCase(ElemDocNode)) {
                return SwitchContext(ctx, KdbContext.KeePassFile, xpp);
            } else
                ReadUnknown(xpp);
            break;
        case KeePassFile:
            if (name.equalsIgnoreCase(ElemMeta)) {
                return SwitchContext(ctx, KdbContext.Meta, xpp);
            } else if (name.equalsIgnoreCase(ElemRoot)) {
                return SwitchContext(ctx, KdbContext.Root, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case Meta:
            if (name.equalsIgnoreCase(ElemGenerator)) {
                // Ignore
                ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemHeaderHash)) {
                String encodedHash = ReadString(xpp);
                if (!EmptyUtils.isNullOrEmpty(encodedHash) && (hashOfHeader != null)) {
                    byte[] hash = Base64Coder.decode(encodedHash);
                    if (!Arrays.equals(hash, hashOfHeader)) {
                        throw new InvalidDBException();
                    }
                }
            } else if (name.equalsIgnoreCase(ElemSettingsChanged)) {
                db.settingsChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemDbName)) {
                db.name = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemDbNameChanged)) {
                db.nameChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemDbDesc)) {
                db.description = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemDbDescChanged)) {
                db.descriptionChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemDbDefaultUser)) {
                db.defaultUserName = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemDbDefaultUserChanged)) {
                db.defaultUserNameChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemDbColor)) {
                // TODO: Add support to interpret the color if we want to allow changing the database color
                db.color = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemDbMntncHistoryDays)) {
                db.maintenanceHistoryDays = ReadUInt(xpp, DEFAULT_HISTORY_DAYS);
            } else if (name.equalsIgnoreCase(ElemDbKeyChanged)) {
                db.keyLastChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemDbKeyChangeRec)) {
                db.keyChangeRecDays = ReadLong(xpp, -1);
            } else if (name.equalsIgnoreCase(ElemDbKeyChangeForce)) {
                db.keyChangeForceDays = ReadLong(xpp, -1);
            } else if (name.equalsIgnoreCase(ElemDbKeyChangeForceOnce)) {
                db.keyChangeForceOnce = ReadBool(xpp, false);
            } else if (name.equalsIgnoreCase(ElemMemoryProt)) {
                return SwitchContext(ctx, KdbContext.MemoryProtection, xpp);
            } else if (name.equalsIgnoreCase(ElemCustomIcons)) {
                return SwitchContext(ctx, KdbContext.CustomIcons, xpp);
            } else if (name.equalsIgnoreCase(ElemRecycleBinEnabled)) {
                db.recycleBinEnabled = ReadBool(xpp, true);
            } else if (name.equalsIgnoreCase(ElemRecycleBinUuid)) {
                db.recycleBinUUID = ReadUuid(xpp);
            } else if (name.equalsIgnoreCase(ElemRecycleBinChanged)) {
                db.recycleBinChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemEntryTemplatesGroup)) {
                db.entryTemplatesGroup = ReadUuid(xpp);
            } else if (name.equalsIgnoreCase(ElemEntryTemplatesGroupChanged)) {
                db.entryTemplatesGroupChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemHistoryMaxItems)) {
                db.historyMaxItems = ReadInt(xpp, -1);
            } else if (name.equalsIgnoreCase(ElemHistoryMaxSize)) {
                db.historyMaxSize = ReadLong(xpp, -1);
            } else if (name.equalsIgnoreCase(ElemEntryTemplatesGroupChanged)) {
                db.entryTemplatesGroupChanged = ReadTime(xpp);
            } else if (name.equalsIgnoreCase(ElemLastSelectedGroup)) {
                db.lastSelectedGroup = ReadUuid(xpp);
            } else if (name.equalsIgnoreCase(ElemLastTopVisibleGroup)) {
                db.lastTopVisibleGroup = ReadUuid(xpp);
            } else if (name.equalsIgnoreCase(ElemBinaries)) {
                return SwitchContext(ctx, KdbContext.Binaries, xpp);
            } else if (name.equalsIgnoreCase(ElemCustomData)) {
                return SwitchContext(ctx, KdbContext.CustomData, xpp);
            }
            break;
        case MemoryProtection:
            if (name.equalsIgnoreCase(ElemProtTitle)) {
                db.memoryProtection.protectTitle = ReadBool(xpp, false);
            } else if (name.equalsIgnoreCase(ElemProtUserName)) {
                db.memoryProtection.protectUserName = ReadBool(xpp, false);
            } else if (name.equalsIgnoreCase(ElemProtPassword)) {
                db.memoryProtection.protectPassword = ReadBool(xpp, false);
            } else if (name.equalsIgnoreCase(ElemProtURL)) {
                db.memoryProtection.protectUrl = ReadBool(xpp, false);
            } else if (name.equalsIgnoreCase(ElemProtNotes)) {
                db.memoryProtection.protectNotes = ReadBool(xpp, false);
            } else if (name.equalsIgnoreCase(ElemProtAutoHide)) {
                db.memoryProtection.autoEnableVisualHiding = ReadBool(xpp, false);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case CustomIcons:
            if (name.equalsIgnoreCase(ElemCustomIconItem)) {
                return SwitchContext(ctx, KdbContext.CustomIcon, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case CustomIcon:
            if (name.equalsIgnoreCase(ElemCustomIconItemID)) {
                customIconID = ReadUuid(xpp);
            } else if (name.equalsIgnoreCase(ElemCustomIconItemData)) {
                String strData = ReadString(xpp);
                if (strData != null && strData.length() > 0) {
                    customIconData = Base64Coder.decode(strData);
                } else {
                    assert (false);
                }
            } else {
                ReadUnknown(xpp);
            }
            break;
        case Binaries:
            if (name.equalsIgnoreCase(ElemBinary)) {
                String key = xpp.getAttributeValue(null, AttrId);
                if (key != null) {
                    ProtectedBinary pbData = ReadProtectedBinary(xpp);
                    int id = Integer.parseInt(key);
                    db.binPool.put(id, pbData);
                } else {
                    ReadUnknown(xpp);
                }
            } else {
                ReadUnknown(xpp);
            }
            break;
        case CustomData:
            if (name.equalsIgnoreCase(ElemStringDictExItem)) {
                return SwitchContext(ctx, KdbContext.CustomDataItem, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case CustomDataItem:
            if (name.equalsIgnoreCase(ElemKey)) {
                customDataKey = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemValue)) {
                customDataValue = ReadString(xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case Root:
            if (name.equalsIgnoreCase(ElemGroup)) {
                assert (ctxGroups.size() == 0);
                if (ctxGroups.size() != 0)
                    throw new IOException("Group list should be empty.");
                db.rootGroup = new PwGroupV4();
                ctxGroups.push((PwGroupV4) db.rootGroup);
                ctxGroup = ctxGroups.peek();
                return SwitchContext(ctx, KdbContext.Group, xpp);
            } else if (name.equalsIgnoreCase(ElemDeletedObjects)) {
                return SwitchContext(ctx, KdbContext.RootDeletedObjects, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case Group:
            if (name.equalsIgnoreCase(ElemUuid)) {
                ctxGroup.setUUID(ReadUuid(xpp));
            } else if (name.equalsIgnoreCase(ElemName)) {
                ctxGroup.setName(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemNotes)) {
                ctxGroup.setNotes(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemIcon)) {
                ctxGroup.setIcon(db.iconFactory.getIcon((int) ReadUInt(xpp, 0)));
            } else if (name.equalsIgnoreCase(ElemCustomIconID)) {
                ctxGroup.setCustomIcon(db.iconFactory.getIcon(ReadUuid(xpp)));
            } else if (name.equalsIgnoreCase(ElemTimes)) {
                return SwitchContext(ctx, KdbContext.GroupTimes, xpp);
            } else if (name.equalsIgnoreCase(ElemIsExpanded)) {
                ctxGroup.setExpanded(ReadBool(xpp, true));
            } else if (name.equalsIgnoreCase(ElemGroupDefaultAutoTypeSeq)) {
                ctxGroup.setDefaultAutoTypeSequence(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemEnableAutoType)) {
                ctxGroup.setEnableAutoType(StringToBoolean(ReadString(xpp)));
            } else if (name.equalsIgnoreCase(ElemEnableSearching)) {
                ctxGroup.setEnableSearching(StringToBoolean(ReadString(xpp)));
            } else if (name.equalsIgnoreCase(ElemLastTopVisibleEntry)) {
                ctxGroup.setLastTopVisibleEntry(ReadUuid(xpp));
            } else if (name.equalsIgnoreCase(ElemCustomData)) {
                return SwitchContext(ctx, KdbContext.GroupCustomData, xpp);
            } else if (name.equalsIgnoreCase(ElemGroup)) {
                ctxGroup = new PwGroupV4();
                ctxGroups.peek().AddGroup(ctxGroup);
                ctxGroups.push(ctxGroup);
                return SwitchContext(ctx, KdbContext.Group, xpp);
            } else if (name.equalsIgnoreCase(ElemEntry)) {
                ctxEntry = new PwEntryV4();
                ctxGroup.AddEntry(ctxEntry);
                entryInHistory = false;
                return SwitchContext(ctx, KdbContext.Entry, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case GroupCustomData:
            if (name.equalsIgnoreCase(ElemStringDictExItem)) {
                return SwitchContext(ctx, KdbContext.GroupCustomDataItem, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case GroupCustomDataItem:
            if (name.equalsIgnoreCase(ElemKey)) {
                groupCustomDataKey = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemValue)) {
                groupCustomDataValue = ReadString(xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case Entry:
            if (name.equalsIgnoreCase(ElemUuid)) {
                ctxEntry.setUUID(ReadUuid(xpp));
            } else if (name.equalsIgnoreCase(ElemIcon)) {
                ctxEntry.setIcon(db.iconFactory.getIcon((int) ReadUInt(xpp, 0)));
            } else if (name.equalsIgnoreCase(ElemCustomIconID)) {
                ctxEntry.setCustomIcon(db.iconFactory.getIcon(ReadUuid(xpp)));
            } else if (name.equalsIgnoreCase(ElemFgColor)) {
                ctxEntry.setForegroundColor(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemBgColor)) {
                ctxEntry.setBackgroupColor(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemOverrideUrl)) {
                ctxEntry.setOverrideURL(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemTags)) {
                ctxEntry.setTags(ReadString(xpp));
            } else if (name.equalsIgnoreCase(ElemTimes)) {
                return SwitchContext(ctx, KdbContext.EntryTimes, xpp);
            } else if (name.equalsIgnoreCase(ElemString)) {
                return SwitchContext(ctx, KdbContext.EntryString, xpp);
            } else if (name.equalsIgnoreCase(ElemBinary)) {
                return SwitchContext(ctx, KdbContext.EntryBinary, xpp);
            } else if (name.equalsIgnoreCase(ElemAutoType)) {
                return SwitchContext(ctx, KdbContext.EntryAutoType, xpp);
            } else if (name.equalsIgnoreCase(ElemCustomData)) {
                return SwitchContext(ctx, KdbContext.EntryCustomData, xpp);
            } else if (name.equalsIgnoreCase(ElemHistory)) {
                assert (!entryInHistory);
                if (!entryInHistory) {
                    ctxHistoryBase = ctxEntry;
                    return SwitchContext(ctx, KdbContext.EntryHistory, xpp);
                } else {
                    ReadUnknown(xpp);
                }
            } else {
                ReadUnknown(xpp);
            }
            break;
        case EntryCustomData:
            if (name.equalsIgnoreCase(ElemStringDictExItem)) {
                return SwitchContext(ctx, KdbContext.EntryCustomDataItem, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case EntryCustomDataItem:
            if (name.equalsIgnoreCase(ElemKey)) {
                entryCustomDataKey = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemValue)) {
                entryCustomDataValue = ReadString(xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case GroupTimes:
        case EntryTimes:
            ITimeLogger tl;
            if (ctx == KdbContext.GroupTimes) {
                tl = ctxGroup;
            } else {
                tl = ctxEntry;
            }
            if (name.equalsIgnoreCase(ElemLastModTime)) {
                tl.setLastModificationTime(ReadPwTime(xpp));
            } else if (name.equalsIgnoreCase(ElemCreationTime)) {
                tl.setCreationTime(ReadPwTime(xpp));
            } else if (name.equalsIgnoreCase(ElemLastAccessTime)) {
                tl.setLastAccessTime(ReadPwTime(xpp));
            } else if (name.equalsIgnoreCase(ElemExpiryTime)) {
                tl.setExpiryTime(ReadPwTime(xpp));
            } else if (name.equalsIgnoreCase(ElemExpires)) {
                tl.setExpires(ReadBool(xpp, false));
            } else if (name.equalsIgnoreCase(ElemUsageCount)) {
                tl.setUsageCount(ReadULong(xpp, 0));
            } else if (name.equalsIgnoreCase(ElemLocationChanged)) {
                tl.setLocationChanged(ReadPwTime(xpp));
            } else {
                ReadUnknown(xpp);
            }
            break;
        case EntryString:
            if (name.equalsIgnoreCase(ElemKey)) {
                ctxStringName = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemValue)) {
                ctxStringValue = ReadProtectedString(xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case EntryBinary:
            if (name.equalsIgnoreCase(ElemKey)) {
                ctxBinaryName = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemValue)) {
                ctxBinaryValue = ReadProtectedBinary(xpp);
            }
            break;
        case EntryAutoType:
            if (name.equalsIgnoreCase(ElemAutoTypeEnabled)) {
                ctxEntry.getAutoType().enabled = ReadBool(xpp, true);
            } else if (name.equalsIgnoreCase(ElemAutoTypeObfuscation)) {
                ctxEntry.getAutoType().obfuscationOptions = ReadUInt(xpp, 0);
            } else if (name.equalsIgnoreCase(ElemAutoTypeDefaultSeq)) {
                ctxEntry.getAutoType().defaultSequence = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemAutoTypeItem)) {
                return SwitchContext(ctx, KdbContext.EntryAutoTypeItem, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case EntryAutoTypeItem:
            if (name.equalsIgnoreCase(ElemWindow)) {
                ctxATName = ReadString(xpp);
            } else if (name.equalsIgnoreCase(ElemKeystrokeSequence)) {
                ctxATSeq = ReadString(xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case EntryHistory:
            if (name.equalsIgnoreCase(ElemEntry)) {
                ctxEntry = new PwEntryV4();
                ctxHistoryBase.addToHistory(ctxEntry);
                entryInHistory = true;
                return SwitchContext(ctx, KdbContext.Entry, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case RootDeletedObjects:
            if (name.equalsIgnoreCase(ElemDeletedObject)) {
                ctxDeletedObject = new PwDeletedObject();
                db.deletedObjects.add(ctxDeletedObject);
                return SwitchContext(ctx, KdbContext.DeletedObject, xpp);
            } else {
                ReadUnknown(xpp);
            }
            break;
        case DeletedObject:
            if (name.equalsIgnoreCase(ElemUuid)) {
                ctxDeletedObject.uuid = ReadUuid(xpp);
            } else if (name.equalsIgnoreCase(ElemDeletionTime)) {
                ctxDeletedObject.setDeletionTime(ReadTime(xpp));
            } else {
                ReadUnknown(xpp);
            }
            break;
        default:
            ReadUnknown(xpp);
            break;
    }
    return ctx;
}
Also used : InvalidDBException(com.keepassdroid.database.exception.InvalidDBException) PwEntryV4(com.keepassdroid.database.PwEntryV4) PwDeletedObject(com.keepassdroid.database.PwDeletedObject) PwGroupV4(com.keepassdroid.database.PwGroupV4) ITimeLogger(com.keepassdroid.database.ITimeLogger) ProtectedBinary(com.keepassdroid.database.security.ProtectedBinary) ProtectedString(com.keepassdroid.database.security.ProtectedString) IOException(java.io.IOException)

Example 2 with ProtectedBinary

use of com.keepassdroid.database.security.ProtectedBinary in project KeePassDX by Kunzisoft.

the class ImporterV4 method ReadProtectedBinary.

private ProtectedBinary ReadProtectedBinary(XmlPullParser xpp) throws XmlPullParserException, IOException {
    String ref = xpp.getAttributeValue(null, AttrRef);
    if (ref != null) {
        // Consume end tag
        xpp.next();
        int id = Integer.parseInt(ref);
        return db.binPool.get(id);
    }
    boolean compressed = false;
    String comp = xpp.getAttributeValue(null, AttrCompressed);
    if (comp != null) {
        compressed = comp.equalsIgnoreCase(ValTrue);
    }
    byte[] buf = ProcessNode(xpp);
    if (buf != null)
        return new ProtectedBinary(true, buf);
    String base64 = ReadString(xpp);
    if (base64.length() == 0)
        return ProtectedBinary.EMPTY;
    byte[] data = Base64Coder.decode(base64);
    if (compressed) {
        data = MemUtil.decompress(data);
    }
    return new ProtectedBinary(false, data);
}
Also used : ProtectedBinary(com.keepassdroid.database.security.ProtectedBinary) ProtectedString(com.keepassdroid.database.security.ProtectedString)

Example 3 with ProtectedBinary

use of com.keepassdroid.database.security.ProtectedBinary in project KeePassDX by Kunzisoft.

the class PwDbInnerHeaderOutputV4 method output.

public void output() throws IOException {
    los.write(PwDbInnerHeaderV4Fields.InnerRandomStreamID);
    los.writeInt(4);
    los.writeInt(header.innerRandomStream.id);
    int streamKeySize = header.innerRandomStreamKey.length;
    los.write(PwDbInnerHeaderV4Fields.InnerRandomstreamKey);
    los.writeInt(streamKeySize);
    los.write(header.innerRandomStreamKey);
    for (ProtectedBinary bin : db.binPool.binaries()) {
        byte flag = KdbxBinaryFlags.None;
        if (bin.isProtected()) {
            flag |= KdbxBinaryFlags.Protected;
        }
        byte[] binData = bin.getData();
        los.write(PwDbInnerHeaderV4Fields.Binary);
        los.writeInt(bin.length() + 1);
        los.write(flag);
        los.write(binData);
        Arrays.fill(binData, (byte) 0);
    }
    los.write(PwDbInnerHeaderV4Fields.EndOfHeader);
    los.writeInt(0);
}
Also used : ProtectedBinary(com.keepassdroid.database.security.ProtectedBinary)

Example 4 with ProtectedBinary

use of com.keepassdroid.database.security.ProtectedBinary in project KeePassDX by Kunzisoft.

the class ImporterV4 method ReadInnerHeader.

private boolean ReadInnerHeader(LEDataInputStream lis, PwDbHeaderV4 header) throws IOException {
    byte fieldId = (byte) lis.read();
    int size = lis.readInt();
    if (size < 0)
        throw new IOException("Corrupted file");
    byte[] data = new byte[0];
    if (size > 0) {
        data = lis.readBytes(size);
    }
    boolean result = true;
    switch(fieldId) {
        case PwDbHeaderV4.PwDbInnerHeaderV4Fields.EndOfHeader:
            result = false;
            break;
        case PwDbHeaderV4.PwDbInnerHeaderV4Fields.InnerRandomStreamID:
            header.setRandomStreamID(data);
            break;
        case PwDbHeaderV4.PwDbInnerHeaderV4Fields.InnerRandomstreamKey:
            header.innerRandomStreamKey = data;
            break;
        case PwDbHeaderV4.PwDbInnerHeaderV4Fields.Binary:
            if (data.length < 1)
                throw new IOException("Invalid binary format");
            byte flag = data[0];
            boolean prot = (flag & PwDbHeaderV4.KdbxBinaryFlags.Protected) != PwDbHeaderV4.KdbxBinaryFlags.None;
            byte[] bin = new byte[data.length - 1];
            System.arraycopy(data, 1, bin, 0, data.length - 1);
            ProtectedBinary pb = new ProtectedBinary(prot, bin);
            db.binPool.poolAdd(pb);
            if (prot) {
                Arrays.fill(data, (byte) 0);
            }
            break;
        default:
            assert (false);
            break;
    }
    return result;
}
Also used : ProtectedBinary(com.keepassdroid.database.security.ProtectedBinary) IOException(java.io.IOException)

Example 5 with ProtectedBinary

use of com.keepassdroid.database.security.ProtectedBinary in project KeePassDX by Kunzisoft.

the class PwEntryTestV4 method testAssign.

public void testAssign() {
    PwEntryV4 entry = new PwEntryV4();
    entry.setAdditional("test223");
    entry.setAutoType(new AutoType());
    entry.getAutoType().defaultSequence = "1324";
    entry.getAutoType().enabled = true;
    entry.getAutoType().obfuscationOptions = 123412432109L;
    entry.getAutoType().put("key", "value");
    entry.setBackgroupColor("blue");
    entry.putProtectedBinary("key1", new ProtectedBinary(false, new byte[] { 0, 1 }));
    entry.setCustomIcon(new PwIconCustom(UUID.randomUUID(), new byte[0]));
    entry.setForegroundColor("red");
    entry.addToHistory(new PwEntryV4());
    entry.setIcon(new PwIconStandard(5));
    entry.setOverrideURL("override");
    entry.setParent(new PwGroupV4());
    entry.addField("key2", new ProtectedString(false, "value2"));
    entry.setUrl("http://localhost");
    entry.setUUID(UUID.randomUUID());
    PwEntryV4 target = new PwEntryV4();
    target.assign(entry);
/* This test is not so useful now that I am not implementing value equality for Entries
		assertTrue("Entries do not match.", entry.equals(target));
		*/
}
Also used : PwEntryV4(com.keepassdroid.database.PwEntryV4) AutoType(com.keepassdroid.database.AutoType) PwGroupV4(com.keepassdroid.database.PwGroupV4) ProtectedBinary(com.keepassdroid.database.security.ProtectedBinary) PwIconCustom(com.keepassdroid.database.PwIconCustom) ProtectedString(com.keepassdroid.database.security.ProtectedString) PwIconStandard(com.keepassdroid.database.PwIconStandard)

Aggregations

ProtectedBinary (com.keepassdroid.database.security.ProtectedBinary)5 ProtectedString (com.keepassdroid.database.security.ProtectedString)3 PwEntryV4 (com.keepassdroid.database.PwEntryV4)2 PwGroupV4 (com.keepassdroid.database.PwGroupV4)2 IOException (java.io.IOException)2 AutoType (com.keepassdroid.database.AutoType)1 ITimeLogger (com.keepassdroid.database.ITimeLogger)1 PwDeletedObject (com.keepassdroid.database.PwDeletedObject)1 PwIconCustom (com.keepassdroid.database.PwIconCustom)1 PwIconStandard (com.keepassdroid.database.PwIconStandard)1 InvalidDBException (com.keepassdroid.database.exception.InvalidDBException)1