[Rpm-maint] rpm SHA1 signature composing

Chen, Zhang Z zhang.z.chen at intel.com
Tue Dec 28 09:43:00 UTC 2010


Hi All,

I'm trying to compose an RPM using a Perl script. I always got the following error when trying to install the rpm created by my script:
header SHA1 digest: BAD

Following is the part of my script:

sub createsigheader($$$$)
    {
        # all hardcoded (use _append later, when proof-of-concept ready)
        my @hdr;

        #push @hdr, pack("CCCCNNN", 0x8e, 0xad, 0xe8, 0x01, 0, 2, 20);
        my $sha1 = $_[2]."\000\000\000\000";
        my $sha1_length = length($sha1);
        push @hdr, pack("CCCCNNN", 0x8e, 0xad, 0xe8, 0x01, 0, 5, 0x54);
        push @hdr, pack("NNNN", 62, 7, 0x44, 16); # HDRSIG
        push @hdr, pack("NNNN", 269, 6, 0x00, 1); # SHA1
        push @hdr, pack("NNNN", 1000, 4, 0x2c, 1); # SIZE
        push @hdr, pack("NNNN", 1004, 7, 0x30, 16); # MD5
        push @hdr, pack("NNNN", 1007, 4, 0x40, 1); # payload size

        #push @hdr, pack("N", $_[0]); # add SIZE;
        push @hdr, $sha1; # add sha1 digest
        push @hdr, pack("N", $_[0] - 32); # add SIZE; # XXX -32 !!!
        push @hdr, $_[1]; # add digest
        push @hdr, pack ("N", $_[3]); # add payload size
        push @hdr, pack("CCCCCCCCCCCCCCCC", 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
                        0x00, 0x07, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x10);
        return join('', @hdr) . "\0" x 4;

}

my $dhdr = createdataheader $npkg, $cpiofile;
    system 'gzip', '-n', $cpiofile;
    my $ctx = Digest::MD5->new();
    $ctx->add($dhdr);
    #system "md5sum $cpiofile.gz >/dev/tty";
    open J, "$cpiofile.gz" or die $!;
    $ctx->addfile(*J);
    close J;

    use Digest::SHA1;
    my $sha1 = Digest::SHA1->new;
    $sha1->add($dhdr);


my $shdr = createsigheader length($dhdr) + -s "$cpiofile.gz", $ctx->digest, $sha1->hexdigest, -s "$cpiofile.gz";

Any idea?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rpm.org/pipermail/rpm-maint/attachments/20101228/b656b3c8/attachment.html>


More information about the Rpm-maint mailing list