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
}
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. *)
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 (
fun mf ->
debug "processing manifest %s" mf;
@@ -142,13 +142,14 @@ object
let rec loop () =
let line = input_line chan in
if Str.string_match rex line 0 then (
let disk = Str.matched_group 1 line in
let expected = Str.matched_group 2 line in
let csum = Checksums.SHA1 expected in
let mode = Str.matched_group 1 line in
let disk = Str.matched_group 2 line 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)
with Checksums.Mismatched_checksum (_, actual) ->
error (f_"checksum of disk %s does not match manifest %s (actual sha1(%s) = %s, expected sha1 (%s) = %s)")
disk mf disk actual disk expected;
error (f_"checksum of disk %s does not match manifest %s (actual %s(%s) = %s, expected %s(%s) = %s)")
disk mf mode disk actual mode disk expected;
)
else
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
sha1=`do_sha1 $d/$ovf`
echo "SHA1($ovf)= $sha1" > $d/$mf
sha1=`do_sha1 $d/$vmdk`
echo "SHA1($vmdk)= $sha1" >> $d/$mf
sha256=`do_sha256 $d/$vmdk`
echo "SHA256($vmdk)= $sha256" >> $d/$mf
pushd .
cd $d