Text-based passwords are used everywhere nowadays, but what if we could use a real-world location as a password instead? This app simulates the experience of burying a treasure underground. Accessing the hidden data can only be done by knowing its location and having a special private key which is stored on the treasure owner's device 🌎🔑
- Each user is assigned a public and private key upon account creation
- The private key is stored on the user's Keychain and is synced via iCloud
- User's account credentials are hashed with SHA
- A user can encrypt a piece of text
- The text is encrypted with AES and the AES key is encrypted with RSA (user's public key)
- The user's current location is saved along with the encrypted data and encrypted AES key
- To retrieve the text, the user must be in the same location and use the same device (or be logged into the same iCloud account) as when the encryption happened
- Encrypted data can be shared with others
- Sharing allows another user to access the data (only if they know the location)
- Swift & UIKit
- MVC pattern
- CocoaPods
- Firebase Realtime Database
- JSON
- CoreLocation
- CryptoKit
- Apple Keychain
- RSA, AES & SHA algorithms
![](https://private-user-images.githubusercontent.com/74459316/260574047-01e0c71e-2426-424a-8fc4-c40b799ee1f8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMxMDQ3MzQsIm5iZiI6MTcyMzEwNDQzNCwicGF0aCI6Ii83NDQ1OTMxNi8yNjA1NzQwNDctMDFlMGM3MWUtMjQyNi00MjRhLThmYzQtYzQwYjc5OWVlMWY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA4VDA4MDcxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMwODFmZTIxNGI0MTA1ZGM5Y2NkYzRhZmNmY2I0YTM1MzBmOWNiMTcwMTc3Yjc2NGYyMTZmMjNkODE1Yjg5MDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.TLPj5zof0mKRvDGrRROZggMO4JRPzg4HXkUHOkPiPo4)
![](https://private-user-images.githubusercontent.com/74459316/260574085-4f44e81b-db86-48a8-b21b-8609b08f24a1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMxMDQ3MzQsIm5iZiI6MTcyMzEwNDQzNCwicGF0aCI6Ii83NDQ1OTMxNi8yNjA1NzQwODUtNGY0NGU4MWItZGI4Ni00OGE4LWIyMWItODYwOWIwOGYyNGExLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA4VDA4MDcxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdiMDQ4ZDA0MWE4OTMwZjE1NzE1OTY2ZjkwMWI0NWQ1MWRjN2U5NjIxYjYwYWE5MDkyNzVmOTlhOTA0NmMwNjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.sBo7Jl46jSTbTV6aPOeDS9tdZNFDSeSeG5HgzP7ncDs)
![](https://private-user-images.githubusercontent.com/74459316/260574108-2bc9c48e-0c8f-4564-86fb-a391ef59b568.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMxMDQ3MzQsIm5iZiI6MTcyMzEwNDQzNCwicGF0aCI6Ii83NDQ1OTMxNi8yNjA1NzQxMDgtMmJjOWM0OGUtMGM4Zi00NTY0LTg2ZmItYTM5MWVmNTliNTY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA4VDA4MDcxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIxZGQwYjUzYjAwNGI0ODJkZWU5NzU5ZGRhMzVkZDI5NGE3MjIxODhhYWVlN2IzZmZiZjQ4YjMyODI0ZmNlMWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.FXbkr-0g2QBSqxfmiEyns0inQHjB3bkGJqBp369tAnA)
![](https://private-user-images.githubusercontent.com/74459316/260574127-aad6e963-7922-45d4-a39c-98c88786719e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMxMDQ3MzQsIm5iZiI6MTcyMzEwNDQzNCwicGF0aCI6Ii83NDQ1OTMxNi8yNjA1NzQxMjctYWFkNmU5NjMtNzkyMi00NWQ0LWEzOWMtOThjODg3ODY3MTllLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA4VDA4MDcxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUxM2NjMGQ0MzA4MTQzNjUzMTA5OTAyOTNjM2M0MzgxMTQyMWZjOTgyM2M3ZTgwMzIzZTUyMmIwZTAwYmE3OTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.A3UZ4qbSLHa6ICQCjt9uYIYwQWUw189IaZL5lOxYO_0)