Stefan van As of 1Password fame sent me a more exhaustive list of the libraries and tools used in 1Password. I thought I would share it with everyone. He also recently started blogging about security, software development and Delphi.
Here is an overview of the 3rd party components used in 1Password:
- Browser Helper Objects (BHOs) — this is what powers 1Password inside Internet Explorer.
- Bonjour — this is what powers Wi-Fi Sync. (here is an unrelated Delphi
implementation) - ChilkatCrypt — this is what powers some of our crypto
- MS Crypto — this is the Pseudo Random Number Generator (PRNG)
- DISQLite — Some of 1Password’s features – such as Watchtower, for example – are utilizing SQLite. Because 1Password 4 is in Delphi 2007, we use DISQLite for that (today, it would be using FireDAC for that)
- dxgettext — this is used to localize 1Password. It works nicely with Crowdin, a localization project management platform
- GraphicEx and Graphics32 — this gives (alpha channel) transparency
- HyperString — super fast string handling routines. (no longer available)
- OpenSSL — this is what powers PBKDF2 (among other crypto routines)
- sgcWebSockets — The WebSockets are used with the Chrome and Firefox browser extensions
- StreamSec — another crypto library, mostly for SSL/TLS
- zlib and LibTar — for OS X-compatible compression routines
Also uses the following tools:
- EurekaLog — For diagnostics reporting
- FinalBuilder — For build management
- Inno Setup — The installation wizard
A lot of great tools and libraries there.
11 replies on “More on 1Password’s Components”
From the component list, I assume 1Password is written in VCL framework, right? It’s not a Firemonkey app. Which language are they using for the Mac version? Objective-C?
1Password was originally for OS X, then later the Windows version was developed with VCL, before the release of FMX. I believe it was written in Objective-C.
Amazing that dxGetText is still being used widely.
GetText and derivatives are still the most convenient solution. Resource strings (or named strings like in Android) bring more micro-management problems.
Also 1password seem like another casualty of the Unicode transition (stuck in D2007…)
Hi Jim,
I am proud to see that 1Password for Windows uses my precompiled OpenSSL libraries (always initially published for the Indy Team and Users), as they are a usable without dependencies to the newer VC runtime libraries. Being a 1Password user on OS X for a long time, I am glad to see them making use of them 🙂
Regarding 1Password on OS X: Currently it’s developed with a mix of Swift and Objective C.
– Frederik
(Indy Core Team)
Thanks for the clarification on OS X.
I am 1Password customer on Mac as well and pretty happy with the product. Out of interest, what do you use to develpp the Android app?
@Jim: You’re welcome.
@John: If this is directed to me: I am not working for AgileBits, so unfortunately I cannot comment on the Android app. My statement on the OS X version was made after I inspected the current OS X app, but what I said is pretty obvious and no secret. Hth!
@Frederik: I didn’t assume you work for AgileBits. Just thought you may know what they use for the Android app
It’s amazing to see a security-focused application use five different security-related libraries instead of one comprehensive solution.
[…] More on components […]