simon | 7d4386c | 2022-10-26 17:47:59 -0400 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | set -e |
| 4 | |
| 5 | if ! command -v dotenv; then |
| 6 | printf 'Missing "dotenv". Please run "npm install"\n' >&2 && exit 1 |
| 7 | fi |
| 8 | |
| 9 | if [ "$(dotenv -p PRIVATE_KEY)" ] && [ "$(dotenv -p PUBLIC_KEY)" ]; then |
| 10 | printf 'Public and private keys are already defined. Exiting...\n' >&2 && exit 0 |
| 11 | fi |
| 12 | |
| 13 | # Generate PEM-encoded PKCS#8 private key and PEM-encoded SPKI public key |
| 14 | |
| 15 | if command -v openssl; then |
| 16 | # -algorithm RSA -pkeyopt rsa_keygen_bits:2048 |
| 17 | # ES256: -algorithm EC -pkeyopt ec_paramgen_curve:P-256 |
| 18 | gen_pkcs8() { openssl genpkey -algorithm ed25519; } |
| 19 | pkcs8_to_spki() { openssl pkey -pubout; } |
| 20 | else |
| 21 | printf 'No tools known\n' >&2 && exit 1 |
| 22 | fi |
| 23 | |
| 24 | private_key=$(gen_pkcs8) |
| 25 | public_key=$(echo "${private_key}" | pkcs8_to_spki) |
| 26 | |
| 27 | echo "PRIVATE_KEY=\"${private_key}\"" >> .env |
| 28 | echo "PUBLIC_KEY=\"${public_key}\"" >> .env |