diff --git a/default.nix b/default.nix index 47da38a..8cb0c4a 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,14 @@ let inherit (nixpkgs) callPackage pkgs stdenv; + pbkdf2Sha512 = callPackage ./pbkdf2-sha512 { }; + rbtohex = pkgs.writeShellScriptBin + "rbtohex" + ''( od -An -vtx1 | tr -d ' \n' )''; + hextorb = pkgs.writeShellScriptBin + "hextorb" + ''( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI'| xargs printf )''; in stdenv.mkDerivation { name = "yubikey-luks-setup"; @@ -12,18 +19,7 @@ in parted pbkdf2Sha512 yubikey-personalization + rbtohex + hextorb ]; - - shellHook = '' - rbtohex() { - ( od -An -vtx1 | tr -d ' \n' ) - } - - hextorb() { - ( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI'| xargs printf ) - } - ''; - - - inherit (pkgs) cryptsetup openssl yubikey-personalization; } diff --git a/yk-luks-open.sh b/yk-luks-open.sh new file mode 100755 index 0000000..617bb57 --- /dev/null +++ b/yk-luks-open.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash + +function usage { + cat >&2 </dev/null) +LUKS_KEY="$(echo "$USER_PASSPHRASE" | pbkdf2-sha512 $(($KEY_LENGTH / 8)) $ITERATIONS $RESPONSE | rbtohex)" + +# Open the LUKS device +echo -n "$LUKS_KEY" \ + | hextorb \ + | cryptsetup open "$DEVICE" encrypted --key-file=-