blob: 5b48512b00a0ca342891f25dde9935bd81eccec2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#!/bin/sh
gpg_set_ultimate_trust()
{
local keygrip
keygrip=$(gpg -K --with-colons --with-fingerprint --with-fingerprint|sed -ne '/^sec/{n;p;q}'|cut -d: -f10)
printf '%s:6:\n' "$keygrip" | gpg2 --import-ownertrust
}
add()
{
kiki merge \
--flow=sync \
--home${2:+="$2"} \
--create=rsa:4096 \
--flow=spill,match="$1" \
--type=pem \
--access=secret \
nil
}
init()
{
local root="$1"
if [ "$root" ]; then
mkdir -m0600 -p "$root"/root/.gnupg
fi
kiki init ${root:+--chroot "$root"}
add encrypt ${root:+"$root/root/.gnupg"}
add sign ${root:+"$root/root/.gnupg"}
(
[ "$root" ] && export GNUPGHOME="$root/root/.gnupg/"
gpg_set_ultimate_trust
)
}
sync()
{
local home1="$1"/root/.gnupg home2="$2"/root/.gnupg
kiki sync-public \
--homedir "$home1" \
--passphrase-fd=0 \
--import-if-authentic \
--autosign \
--keyrings "$home2"/pubring.gpg
kiki sync-secret \
--homedir "$home1" \
--autosign --import
}
doublecheck()
{
local o='--ignore-time-conflict'
gpg2 $o --clearsign </dev/null | gpg2 $o --homedir "$1"/root/.gnupg --verify
gpg2 $o --clearsign --homedir "$1"/root/.gnupg </dev/null | gpg2 $o --verify
}
silent()
{
case "$-" in
*x*) return ;;
esac
SILENT=y
exec 3>&1 4>&2
exec >/dev/null 2>&1
}
noisy()
{
if [ "$SILENT" ]; then
exec >&3 2>&1
fi
}
new_child()
{
local root="$1"
init "$root"
sync "$root" ''
sync '' "$root"
gpg2 --check-trustdb
gpg2 --check-trustdb --homedir "$root"/root/.gnupg
doublecheck "$root"
}
child_dir=$1
set -e
[ "$(id -u)" = 0 ]
[ "$child_dir" ]
[ ! -d "$child_dir" ]
mkdir "$child_dir"
trap -- 'umount "$child_dir"; rmdir "$child_dir"' EXIT
mount -t tmpfs -o mode=0700 tmpfs "$child_dir"
silent
init
new_child "$child_dir"
noisy
trap EXIT
# gpg2 -k
# gpg2 -k --homedir "$child_dir"/root/.gnupg
|