set -e
-CERTTOOL=${CERTTOOL:-certtool}
-GPG=${GPG:-gpg}
KEY_ENCRYPT_RECIPIENT=${KEY_ENCRYPT_RECIPIENT:-CF60E89A59231E76E2636422AE1A8109E49857EF}
COUNTRY=${COUNTRY:-RU}
-goston() {
- path=(~/local/stow/py310/bin ~/work/pygost/pygost/asn1schemas $path)
- export -TU PYTHONPATH pythonpath
- pythonpath=(~/work/pygost ~/work/pyderasn)
-}
+# Turn on PyGOST utilities
+path=(~/local/stow/py310/bin ~/work/pygost/pygost/asn1schemas $path)
+export -TU PYTHONPATH pythonpath
+pythonpath=(~/work/pygost ~/work/pyderasn)
key_encrypt() {
- ${=GPG} --encrypt --recipient $KEY_ENCRYPT_RECIPIENT
+ gpg --encrypt --recipient $KEY_ENCRYPT_RECIPIENT
}
key_decrypt() {
- ${=GPG} --decrypt
+ gpg --decrypt
}
# ------------------------ >8 ------------------------
}
certtool_genkey() {
- local bits=$1
- ${=CERTTOOL} --generate-privkey --ecc --bits $bits --no-text
+ certtool --generate-privkey --ecc --bits $1 --no-text
}
ca_new_ecdsa() {
cert_signing_key
EOF
certtool_genkey 512 > $key
- ${=CERTTOOL} \
+ certtool \
--generate-self-signed \
--load-privkey $key \
--template $tmpl \
}
ee_key_new_gost() {
- goston
cert-selfsigned-example.py --cn does-not-matter --ai 256A --only-key
}
signing_key
dns_name = "$domain"
EOF
- ${=CERTTOOL} \
+ certtool \
--load-ca-certificate ca/ecdsa/$ca/cer.pem \
--load-ca-privkey $cakey \
--generate-certificate \
ee_renew_gost() {
local ca=$1
local domain=$2
- goston
local cakey=`mktemp`
local key=`mktemp`
local cert=`mktemp`
ca_new_gost() {
local domain=$1
- goston
local key=`mktemp`
local cert=`mktemp`
trap "rm -f $key $cert" HUP PIPE INT QUIT TERM EXIT
}
dane_ecdsa() {
- ${=CERTTOOL} --key-id --hash=sha256
+ certtool --key-id --hash=sha256
}
dane_gost() {
- goston
cert-dane-hash.py
}
case $1 in
(ca)
[[ $# -eq 3 ]] || usage
- local algo=$2
- local domain=$3
- local dst=ca/$algo/$domain
+ algo=$2
+ domain=$3
+ dst=ca/$algo/$domain
zf_mkdir -p $dst
[[ -s $dst/key.pem ]] && {
print $dst/key.pem already exists >&2
exit 1
}
ca_new_${algo} $domain
- local _umask=`umask`
+ _umask=`umask`
umask 077
mapfile[${dst}/key.pem]=${reply[1]}
umask $_umask
;;
(encrypt)
[[ $# -eq 2 ]] || usage
- local key=$2/key.pem
+ key=$2/key.pem
[[ -s $key ]] || {
print no $key found >&2
exit 1
;;
(new)
[[ $# -eq 2 ]] || usage
- local cols=(${(s:/:)2})
- local algo=${cols[2]}
- local ca=${cols[3]}
- local domain=${cols[4]}
- local dst=ee/$algo/$ca/$domain
+ cols=(${(s:/:)2})
+ algo=${cols[2]}
+ ca=${cols[3]}
+ domain=${cols[4]}
+ dst=ee/$algo/$ca/$domain
[[ $dst = $2 ]]
zf_mkdir -p $dst
[[ -s $dst/key.pem ]] && {
print $dst/key.pem already exists >&2
exit 1
}
- local _umask=`umask`
+ _umask=`umask`
umask 077
ee_key_new_${algo} > $dst/key.pem
umask $_umask
;;
(renew)
[[ $# -eq 2 ]] || usage
- local cols=(${(s:/:)2})
- local algo=${cols[2]}
- local ca=${cols[3]}
- local domain=${cols[4]}
+ cols=(${(s:/:)2})
+ algo=${cols[2]}
+ ca=${cols[3]}
+ domain=${cols[4]}
ee_renew_${algo} $ca $domain > ee/$algo/$ca/$domain/cer.pem
;;
(dane)
cat $2/cer.pem
;;
(rem)
- setopt GLOB_STAR_SHORT
+ zmodload -F zsh/datetime b:strftime
export LC_ALL=C
for cer (**/cer.pem) {
- date_bad_format=`certtool -i < $cer |
- perl -ne '/Not After: \w+ (\w+ \d+ \d+:\d+):\d+ UTC (\d+)/ && print "$1 $2"'`
- date_good_format=`date -j -f "%b %d %H:%M %Y" "$date_bad_format" +"%Y-%m-%d"`
- print REM $date_good_format +30 MSG $cer
+ certtool --certificate-info < $cer | while read line ; do
+ [[ $line =~ "^\s*Not After: .*" ]] && break
+ done
+ [[ $MATCH ]]
+ # Not After: Sat Jul 02 10:02:29 UTC 2022
+ cols=(${=MATCH})
+ strftime -s ts_ugly -r "%b %d %H:%M:%S UTC %Y" ${(j: :)cols[4,-1]}
+ strftime -s ts_good %F $ts_ugly
+ print REM $ts_good +30 MSG $cer
}
;;
(list) print -C1 ee/*/*/*(/on) ;;