* calculating a git packfile sha1 checksum in java
@ 2011-03-22 9:27 madmarcos
2011-03-22 14:01 ` Shawn Pearce
0 siblings, 1 reply; 4+ messages in thread
From: madmarcos @ 2011-03-22 9:27 UTC (permalink / raw)
To: git
I am learning about the Git packfile and currently trying to reproduce (in
Java) what I believe to be the SHA1 20-byte checksum for the entire
packfile. I take the byte array from, and including, the "PACK" 4-byte
header to the end of the last packaged object's compressed data. Everything
I have read indicates that the next 20 bytes is the SHA1 checksum for the
entire packfile.
The 20-byte checksum that is part of the byte array received from Git is:
B910248BF9B63AC53595E3835CA57BDAF08DA830
I use the following to calculate my own SHA1 checksum:
crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(testData);
byte [] result = crypt.digest();
My result ends up as: B910248BF9B63AC53595E3835CA57BDAF08DA813
I am baffled at how only the last byte of my result can be different from
Git's (if I am using the correct part of the byte stream). If the only
problem was the range of data passed to digest() then the entire calculated
checksum would most likely look different.
Any ideas?
Note: I use the same code to generate test SHA1 ids for each contained
object and they match the references in the tree objects. This problem
currently only involves calculating the checksum over the entire packfile.
--
View this message in context: http://git.661346.n2.nabble.com/calculating-a-git-packfile-sha1-checksum-in-java-tp6195501p6195501.html
Sent from the git mailing list archive at Nabble.com.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: calculating a git packfile sha1 checksum in java
2011-03-22 9:27 calculating a git packfile sha1 checksum in java madmarcos
@ 2011-03-22 14:01 ` Shawn Pearce
[not found] ` <AANLkTiniKOzzwZhJ5GN4nf8AWRTsT6bbMeK4s5XqvH42@mail.gmail.com>
0 siblings, 1 reply; 4+ messages in thread
From: Shawn Pearce @ 2011-03-22 14:01 UTC (permalink / raw)
To: madmarcos; +Cc: git
On Tue, Mar 22, 2011 at 02:27, madmarcos <fru574@my.utsa.edu> wrote:
> I am learning about the Git packfile and currently trying to reproduce (in
> Java) what I believe to be the SHA1 20-byte checksum for the entire
> packfile. I take the byte array from, and including, the "PACK" 4-byte
> header to the end of the last packaged object's compressed data. Everything
> I have read indicates that the next 20 bytes is the SHA1 checksum for the
> entire packfile.
That is correct.
> The 20-byte checksum that is part of the byte array received from Git is:
> B910248BF9B63AC53595E3835CA57BDAF08DA830
>
> I use the following to calculate my own SHA1 checksum:
> crypt = MessageDigest.getInstance("SHA-1");
> crypt.reset();
> crypt.update(testData);
> byte [] result = crypt.digest();
Looks right, assuming that testData is "PACK..." up to but not
including the last 20 bytes. :-)
> My result ends up as: B910248BF9B63AC53595E3835CA57BDAF08DA813
>
> I am baffled at how only the last byte of my result can be different from
> Git's (if I am using the correct part of the byte stream). If the only
> problem was the range of data passed to digest() then the entire calculated
> checksum would most likely look different.
I've never seen SHA-1 produce a value this close to the expected value
before. My first guess is that its a problem elsewhere in your code,
like your byte[]->hex formatter, or the code that is reading in the 20
bytes from Git that has the trailer is reading the wrong thing.
> Note: I use the same code to generate test SHA1 ids for each contained
> object and they match the references in the tree objects. This problem
> currently only involves calculating the checksum over the entire packfile.
But aside from just learning about Git, if you want to work with Git
in Java... use JGit[1]. :-)
[1] http://www.eclipse.org/jgit/
--
Shawn.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-03-22 21:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-22 9:27 calculating a git packfile sha1 checksum in java madmarcos
2011-03-22 14:01 ` Shawn Pearce
[not found] ` <AANLkTiniKOzzwZhJ5GN4nf8AWRTsT6bbMeK4s5XqvH42@mail.gmail.com>
2011-03-22 20:58 ` madmarcos
2011-03-22 21:10 ` Nicolas Pitre
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).