chiark / gitweb /
Multiple key types, key profiles, and user key storage.
[distorted-keys] / keys.new-keeper
similarity index 77%
rename from new-keeper
rename to keys.new-keeper
index 05423f47882b787bbd7920d976ba0131bc2b3b68..45764bdf249560611955b5521055fd36d27ee3d2 100755 (executable)
@@ -28,21 +28,29 @@ case "${KEYSLIB+t}" in t) ;; *) echo >&2 "$0: KEYSLIB unset"; exit 1 ;; esac
 . "$KEYSLIB"/keyfunc.sh
 
 defhelp <<HELP
-KEEPER N
+[-p PROFILE] KEEPER N [OPTION=VALUE ...]
 Create a new set of keeper keys.
 
-The private keys are stored in KEEPER/I for each 0 <= I < N in the current
+The key nubs are stored in KEEPER/I for each 0 <= I < N in the current
 directory; presumably you'll do something sensible with them.  A new
 directory $KEYS/keeper/KEEPER is created (it is an error if it already
-exists), containing the public keys I.pub and some metadata meta.
+exists), containing the key store directories and some metadata meta.
 HELP
-dohelp
 
 ## Parse the command line.
-case $# in 2) ;; *) echo >&2 "$usage"; exit 1 ;; esac
-keeper=$1 n=$2
+profile=${keeper_profile-keeper}
+while getopts "p:" opt; do
+  case "$opt" in
+    p) profile=$OPTARG ;;
+    *) usage_err ;;
+  esac
+done
+shift $(( $OPTIND - 1 ))
+case $# in 0 | 1) usage_err ;; esac
+keeper=$1 n=$2; shift 2
 checkword "keeper set label" "$keeper"
 checknumber "set size" "$n"
+checkword "profile label" "$profile"
 
 ## Preflight checking.
 if [ -e $KEYS/keeper/$keeper ]; then
@@ -55,15 +63,18 @@ if [ -e $keeper ]; then
 fi
 
 ## Generate the private keys, one per file, and compute the public keys.
-tmp=$(mktmp); cleanup rmtmp
+mktmp
 rm -rf $keeper.new
 mkdir -m700 $keeper.new
 mkdir -p -m755 $KEYS/keeper/$keeper.new
 echo $n >$KEYS/keeper/$keeper.new/meta
 i=0
 while [ $i -lt $n ]; do
-  ec_keygen $keeper.new/$i $KEYS/keeper/$keeper.new/$i.pub
-  i=$(( i + 1 ))
+  c_gensyskey $profile \
+    $KEYS/keeper/$keeper.new/$i \
+    $keeper.new/$i \
+    keeper="$keeper" seq="$i" tot="$n" "$@"
+  i=$(( $i + 1 ))
 done
 mv $keeper.new $keeper
 mv $KEYS/keeper/$keeper.new $KEYS/keeper/$keeper