| ... | ... |
@@ -2,9 +2,38 @@ |
| 2 | 2 |
|
| 3 | 3 |
A thin command-line wrapper around [`crypt(3)`][] and [`crypt_gensalt(3)`][]. |
| 4 | 4 |
|
| 5 |
+**NOTE**: This security-related software includes no error checking and uses |
|
| 6 |
+functions whose documentation states "This function is obsolete. Do not use |
|
| 7 |
+it.". Results are platform-dependent and should be verified manually. It exists |
|
| 8 |
+because its constituent 13 non-empty lines of C provides functionality |
|
| 9 |
+(specifically [`yescrypt`][], the default password hashing scheme on many Linux |
|
| 10 |
+distributions, with automatic parameter encoding and salt generation) that at |
|
| 11 |
+the time of writing is not easily accessible from the command line elsewhere |
|
| 12 |
+([OpenSSL's `passwd`][], [Perl's `crypt`][], [Python's `crypt`][], [Python's |
|
| 13 |
+`hashlib`][]). |
|
| 14 |
+ |
|
| 5 | 15 |
[`cryptgen`]: https://git.rcrnstn.net/rcrnstn/cryptgen |
| 6 | 16 |
[`crypt(3)`]: https://manpages.debian.org/crypt.3 |
| 7 | 17 |
[`crypt_gensalt(3)`]: https://manpages.debian.org/crypt_gensalt.3 |
| 18 |
+[`yescrypt`]: https://www.openwall.com/yescrypt |
|
| 19 |
+[OpenSSL's `passwd`]: https://github.com/openssl/openssl/issues/19340 |
|
| 20 |
+[Perl's `crypt`]: https://perldoc.perl.org/functions/crypt |
|
| 21 |
+[Python's `crypt`]: https://docs.python.org/3/library/crypt |
|
| 22 |
+[Python's `hashlib`]: https://docs.python.org/3/library/hashlib |
|
| 23 |
+ |
|
| 24 |
+## Usage |
|
| 25 |
+ |
|
| 26 |
+``` |
|
| 27 |
+cryptgen [<prefix> [<count>]] |
|
| 28 |
+``` |
|
| 29 |
+ |
|
| 30 |
+where the valid values of the optional `<prefix>` (hashing method) and |
|
| 31 |
+`<count>` ("CPU time cost") parameters are documented in [`crypt(5)`][]. On
|
|
| 32 |
+most distributions, if `<prefix>` is not given the best available hashing |
|
| 33 |
+method will be selected, if `<count>` is not given a low default cost will be |
|
| 34 |
+selected. |
|
| 35 |
+ |
|
| 36 |
+[`crypt(5)`]: https://manpages.debian.org/crypt.5 |
|
| 8 | 37 |
|
| 9 | 38 |
## License |
| 10 | 39 |
|
| 11 | 40 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,15 @@ |
| 1 |
+#include <stdio.h> |
|
| 2 |
+#include <stdlib.h> |
|
| 3 |
+ |
|
| 4 |
+#include <unistd.h> |
|
| 5 |
+#include <crypt.h> |
|
| 6 |
+ |
|
| 7 |
+int main(int argc, char * argv[]) |
|
| 8 |
+{
|
|
| 9 |
+ puts(crypt(getpass("Password: "), crypt_gensalt(
|
|
| 10 |
+ argc >= 2 ? argv[1] : NULL, |
|
| 11 |
+ argc >= 3 ? atoi(argv[2]) : 0, |
|
| 12 |
+ NULL, |
|
| 13 |
+ 0 |
|
| 14 |
+ ))); |
|
| 15 |
+} |