diff --git a/README.md b/README.md index 18346ba9..f2e8d21c 100644 --- a/README.md +++ b/README.md @@ -5,30 +5,29 @@ Aegis is a free, secure and open source 2FA app for Android. # Features - Free and open source +- Secure + - Encryption (AES-256) + - Password (scrypt) + - Fingerprint (Android Keystore) + - Screen capture prevention - Multiple ways to add new entries - Scan QR code - Enter details manually + - Import + - andOTP + - FreeOTP +- Supported algorithms: + - HOTP ([RFC 4226](https://tools.ietf.org/html/rfc4226)) + - TOTP ([RFC 6238](https://tools.ietf.org/html/rfc6238)) - Compatible with Google Authenticator - Organization - - Custom or default avatars + - Custom or default icons - Drag and drop - Custom groups - Advanced entry editing - Material design - Light and dark themes -- Security - - Encryption - - Password - - Fingerprint - - Screen capture prevention -- Import - - Aegis - - andOTP - - FreeOTP - Export (plaintext or encrypted) -- Supported algorithms: - - TOTP ([RFC 6238](https://tools.ietf.org/html/rfc6238)) - - HOTP ([RFC 4226](https://tools.ietf.org/html/rfc4226)) ## Screenshots @@ -43,7 +42,7 @@ Aegis is a free, secure and open source 2FA app for Android. Aegis is available in the Google Play Store. -[Get it on Google Play]() +[Get it on Google Play](http://play.google.com/store/apps/details?id=com.beemdevelopment.aegis) There are plans to make it available on F-Droid as well. diff --git a/app/build.gradle b/app/build.gradle index edf50ff0..16cde95d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { minSdkVersion 19 targetSdkVersion 28 versionCode 1 - versionName "1.0" + versionName "0.1" } buildTypes { debug { diff --git a/doc/db.md b/doc/db.md deleted file mode 100644 index 2a8eec03..00000000 --- a/doc/db.md +++ /dev/null @@ -1,129 +0,0 @@ -# Database - -The database is encoded in a simple binary format with JSON content at its core. - -## Encryption - -The content of the database can be encrypted with AES in GCM mode. The nonce and -authentication tag are stored in the plain section of this file. - -If there is no Slots and/or EncryptionParameters section in the file, it is -implied that the content is unencrypted and Aegis will try to parse it as such. - -## Format - -The file format starts with a small header that contains some magic and a -version number. A list of sections follows. These sections contain some -information needed to perform decryption of the database. The (encrypted) -content of the database starts after the end marker section. - -All integers are encoded in Little Endian. - -### Header - -| Length | Contents | -|:-------|:-------------------------| -| `5` | "AEGIS" encoded in ASCII | -| `1` | `uint8_t` Version | -| `?` | List of sections | -| `?` | Content | - -### Sections - -| Length | Contents | -|:-------|:------------------| -| `1` | `uint8_t` ID | -| `4` | `uint32_t` Length | -| `?` | Section data | - -ID can be one of: - -| Value | Name | -|:-------|:---------------------| -| `0x00` | EncryptionParameters | -| `0x01` | Slots | -| `0xFF` | End marker | - -#### EncryptionParameters - -| Length | Contents | -|:-------|:---------| -| `12` | Nonce | -| `16` | Tag | - -#### Slots - -This section contains a SHA-256 hash of the master key and a list of slots. The -hash is used to verify the integrity of a decrypted slot. Note that this is -meant for convenience, not as a security measure. - -| Length | Contents | -|:-------|:--------------------------| -| `32` | `uint8_t` Master Key Hash | -| `?` | Slots | - -All slots contain the master key encrypted with raw AES. The key that is used for -encryption depends on the slot type. - -A slot has the following structure. - -| Length | Contents | -|:-------|:--------------------| -| `1` | `uint8_t` Type | -| `16` | ID | -| `32` | Encrypted key | -| `?` | Additional data | - -Type can be one of: - -| Value | Name | -|:-------|:------------| -| `0x00` | Raw | -| `0x01` | Password | -| `0x02` | Fingerprint | - -##### Raw - -This slot type contains no additional data. - -##### Password - -With this slot type the key used for the master key encryption is derived from a -user-provided password. The key derivation function is scrypt. The parameters -used for scrypt are stored as additional data. - -| Length | Contents | -|:-------|:-------------| -| `4` | `uint32_t` N | -| `4` | `uint32_t` r | -| `4` | `uint32_t` p | -| `32` | Salt | - -##### Fingerprint - -A fingerprint slot is exactly the same as a Raw slot. - -#### End marker - -This section indicates the end of the list of sections. This section doesn't -have any content and thus its length is 0. - -### Content - -The content of the database is a JSON file encoded in UTF-8. - -```json -{ - "version": 1, - "counter": 10, - "entries": - [ - { - "id": 1, - "name": "ACME Co/john@example.com", - "url": "otpauth://totp/ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm=SHA1&digits=6&period=30", - }, - ... - ] -} -```