diff --git a/test/offline_management.sh b/test/offline_management.sh index a907f859..27e3815e 100755 --- a/test/offline_management.sh +++ b/test/offline_management.sh @@ -24,11 +24,12 @@ echo "[OK] /management/keys" offline_tool download --output $a --url $url"/keys" rsa_pub=$(jq -r '.denominations[0].denoms[0].rsa_pub' $a) -h_denom=$(dune exec offline -- hash64 $rsa_pub) offline_tool revoke-denom \ --master_key $master_key \ --output $b \ -$h_denom +--rsa \ +$rsa_pub +h_denom=$(dune exec offline -- hash64 $rsa_pub) offline_tool upload --input $b --url $url"/management/denominations/"$h_denom"/revoke" echo "[OK] /management/denominations/\$H_DENOM/revoke" diff --git a/tools/offline.ml b/tools/offline.ml index 4ee93d7f..7c1059b7 100644 --- a/tools/offline.ml +++ b/tools/offline.ml @@ -128,14 +128,37 @@ let sign_cmd = let revoke_denom_cmd = let doc = "Revoke denomination." in - let h_denom = - let doc = "hash of denomination public key" in + let is_rsa_pub = + let doc = + "interpret input string as a RSA public key (in Crockford-base32) \ + instead of a denomination hash" + in + Arg.(value & flag & info [ "rsa" ] ~doc) + in + let v = + let doc = "hash of denomination (or RSA public key if --rsa is set)" in Arg.(required & pos 0 (some string) None & info [] ~doc) in Cmd.make (Cmd.info "revoke-denom" ~doc) @@ - let+ output = output and+ master_key = master_key and+ h_denom = h_denom in - revoke_denom ~output ~master_key ~h_denom + let+ output = output + and+ master_key = master_key + and+ is_rsa_pub = is_rsa_pub + and+ v = v in + let res = + match is_rsa_pub with + | false -> Ok v + | true -> ( + match B32.decode v with + | Error e -> Error e + | Ok s -> + let h = Hash.DenominationHash.hash s in + let s = B32.encode (Hash.DenominationHash.to_octets h) in + Ok s) + in + match res with + | Error e -> Error e + | Ok h_denom -> revoke_denom ~output ~master_key ~h_denom (* just for tests... *) let test_hash64_cmd =