# A "Automated Password Generator"-clone ![Go workflow](https://github.com/wneessen/apg-go/actions/workflows/go.yml/badge.svg) ![CodeQL workflow](https://github.com/wneessen/apg-go/actions/workflows/codeql-analysis.yml/badge.svg) _apg-go_ is a simple APG-like password generator written in Go. It tries to replicate the functionality of the "[Automated Password Generator](https://web.archive.org/web/20130313042424/http://www.adel.nursat.kz:80/apg)", which hasn't been maintained since 2003. Since more and more Unix distributions are abondoning the tool, I was looking for an alternative. FreeBSD for example recommends "security/makepasswd", which is written in Perl but requires a lot of dependency packages and doesn't offer the feature-set/flexibility of APG. Since FIPS-181 (pronouncable passwords) has been withdrawn in 2015, I didn't see any use in replicating that feature. Therfore apg-go does not support pronouncable passwords. ## Installation ### Ports/Packages #### FreeBSD apg-go can be found as `/security/apg` in the [FreeBSD ports](https://cgit.freebsd.org/ports/tree/security/apg) tree. #### Arch Linux Find apg-go in [Arch Linux AUR](https://github.com/wneessen/apg-go/tree/main/buildfiles/arch-linux). \ Alternatively use the [PKGBUILD](https://github.com/wneessen/apg-go/tree/main/buildfiles/arch-linux) file in this git repository ### Binary releases #### Linux/BSD/MacOS * Download release ```sh $ curl -LO https://github.com/wneessen/apg-go/releases/download/v/apg-v--.tar.gz $ curl -LO https://github.com/wneessen/apg-go/releases/download/v/apg-v--.tar.gz.sha256 ``` * Verify the checksum ```sh $ sha256 apg-v--.tar.gz $ cat apg-v--.tar.gz.sha256 ``` **Make sure the checksum of the downloaded file and the checksum in the .sha256 match** * Extract archive ```sh $ tar xzf apg-v--.tar.gz ``` * Execute ```sh $ ./apg ``` #### Windows * Download release ```PowerShell PS> Invoke-RestMethod -Uri https://github.com/wneessen/apg-go/releases/download/v/apg-v-windows-.zip -OutFile apg-v-windows-.zip PS> Invoke-RestMethod -Uri https://github.com/wneessen/apg-go/releases/download/v/apg-v-windows-.zip.sha256 -OutFile apg-v-windows-.zip.sha256 ``` * Verify the checksum ```PowerShell PS> Get-FileHash apg-v-windows-.zip | Format-List PS> type apg-v-windows-.zip.sha256 ``` **Make sure the checksum of the downloaded file and the checksum in the .sha256 match** * Extract archive ```PowerShell PS> Expand-Archive -LiteralPath apg-v-windows- ``` * Execute ```PowerShell PS> cd apg-v-windows- PS> apg.exe ``` ### Sources * Download sources ```sh $ curl -LO https://github.com/wneessen/apg-go/archive/refs/tags/v.tar.gz ``` * Extract source ```sh $ tar xzf v.tar.gz ``` * Build binary ```sh $ cd apg-go- $ go build -o apg ./... ``` * Execute the brand new binary ```sh $ ./apg ``` ### Systemwide installation It is recommed to install apg in a directory of your ```$PATH``` environment. To do so run: (In this example we use ```/usr/local/bin``` as system-wide binary path. YMMV) ```sh $ sudo cp apg /usr/local/bin/apg ``` ## CLI parameters _apg-go_ replicates some of the parameters of the original APG. Some parameters are different though: - ```-m ```: The minimum length of the password to be generated (Default: 12) - ```-x ```: The maximum length of the password to be generated (Default: 20) - ```-n ```: The amount of passwords to be generated (Default: 6) - ```-E ```: Do not use the specified characters in generated passwords - ```-M <[LUNSHClunshc]>```: New style password parameters (upper-case enables, lower-case disables) - ```-L```: Use lower-case characters in passwords (Default: on) - ```-U```: Use upper-case characters in passwords (Default: on) - ```-N```: Use numeric characters in passwords (Default: on) - ```-S```: Use special characters in passwords (Default: off) - ```-H```: Avoid ambiguous characters in passwords (i. e.: 1, l, I, o, O, 0) (Default: off) - ```-C```: Generate complex passwords (implies -L -U -N -S and disables -H) (Default: off) - ```-l```: Spell generated passwords (Default: off) - ```-h```: Show a CLI help text - ```-v```: Show the version number