v2v: ova: support SHA256 hashes in manifest

The OVF standard allows the use of SHA256 hashes in the manifest file.
Adding support for this.

One of the tests was updated to put SHA256 into manifest file.

Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
This commit is contained in:
Tomáš Golembiovský
2016-10-07 14:12:22 +02:00
committed by Pino Toscano
parent 6b7ea3c681
commit 52a8202635
3 changed files with 22 additions and 8 deletions

View File

@@ -41,3 +41,16 @@ do_sha1 ()
;; ;;
esac esac
} }
do_sha256 ()
{
case "$(uname)" in
Linux)
sha256sum "$1" | awk '{print $1}'
;;
*)
echo "$0: unknown method to calculate SHA256 of file on $(uname)"
exit 1
;;
esac
}

View File

@@ -133,7 +133,7 @@ object
(* Read any .mf (manifest) files and verify sha1. *) (* Read any .mf (manifest) files and verify sha1. *)
let mf = find_files exploded ".mf" in let mf = find_files exploded ".mf" in
let rex = Str.regexp "SHA1(\\(.*\\))= \\([0-9a-fA-F]+\\)\r?" in let rex = Str.regexp "\\(SHA1\\|SHA256\\)(\\(.*\\))= \\([0-9a-fA-F]+\\)\r?" in
List.iter ( List.iter (
fun mf -> fun mf ->
debug "processing manifest %s" mf; debug "processing manifest %s" mf;
@@ -142,13 +142,14 @@ object
let rec loop () = let rec loop () =
let line = input_line chan in let line = input_line chan in
if Str.string_match rex line 0 then ( if Str.string_match rex line 0 then (
let disk = Str.matched_group 1 line in let mode = Str.matched_group 1 line in
let expected = Str.matched_group 2 line in let disk = Str.matched_group 2 line in
let csum = Checksums.SHA1 expected in let expected = Str.matched_group 3 line in
let csum = Checksums.of_string mode expected in
try Checksums.verify_checksum csum (mf_folder // disk) try Checksums.verify_checksum csum (mf_folder // disk)
with Checksums.Mismatched_checksum (_, actual) -> with Checksums.Mismatched_checksum (_, actual) ->
error (f_"checksum of disk %s does not match manifest %s (actual sha1(%s) = %s, expected sha1 (%s) = %s)") error (f_"checksum of disk %s does not match manifest %s (actual %s(%s) = %s, expected %s(%s) = %s)")
disk mf disk actual disk expected; disk mf mode disk actual mode disk expected;
) )
else else
warning (f_"unable to parse line from manifest file: %S") line warning (f_"unable to parse line from manifest file: %S") line

View File

@@ -57,8 +57,8 @@ qemu-img convert $f -O vmdk $d/$vmdk
cp $ovf $d/$ovf cp $ovf $d/$ovf
sha1=`do_sha1 $d/$ovf` sha1=`do_sha1 $d/$ovf`
echo "SHA1($ovf)= $sha1" > $d/$mf echo "SHA1($ovf)= $sha1" > $d/$mf
sha1=`do_sha1 $d/$vmdk` sha256=`do_sha256 $d/$vmdk`
echo "SHA1($vmdk)= $sha1" >> $d/$mf echo "SHA256($vmdk)= $sha256" >> $d/$mf
pushd . pushd .
cd $d cd $d