mirror of https://github.com/zlatinb/muwire
Data structures for InfoHash and a shared file
parent
2c6d45c569
commit
b8c3a380ba
|
@ -0,0 +1,75 @@
|
||||||
|
package com.muwire.core;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import net.i2p.data.Base32;
|
||||||
|
|
||||||
|
public class InfoHash {
|
||||||
|
|
||||||
|
private static final int SIZE = 0x1 << 5;
|
||||||
|
|
||||||
|
private final byte[] root;
|
||||||
|
private final byte[] hashList;
|
||||||
|
|
||||||
|
private final int hashCode;
|
||||||
|
|
||||||
|
public InfoHash(byte[] root, byte[] hashList) {
|
||||||
|
if (root.length != SIZE)
|
||||||
|
throw new IllegalArgumentException("invalid root size "+root.length);
|
||||||
|
if (hashList != null && hashList.length % SIZE != 0)
|
||||||
|
throw new IllegalArgumentException("invalid hashList size " + hashList.length);
|
||||||
|
this.root = root;
|
||||||
|
this.hashList = hashList;
|
||||||
|
hashCode = root[0] << 24 |
|
||||||
|
root[1] << 16 |
|
||||||
|
root[2] << 8 |
|
||||||
|
root[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
public InfoHash(byte[] root) {
|
||||||
|
this(root, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public InfoHash(String base32) {
|
||||||
|
this(Base32.decode(base32));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static InfoHash fromHashList(byte []hashList) {
|
||||||
|
try {
|
||||||
|
MessageDigest sha256 = MessageDigest.getInstance("SHA256");
|
||||||
|
byte[] root = sha256.digest(hashList);
|
||||||
|
return new InfoHash(root, hashList);
|
||||||
|
} catch (NoSuchAlgorithmException impossible) {
|
||||||
|
impossible.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getRoot() {
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getHashList() {
|
||||||
|
return hashList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return hashCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(o instanceof InfoHash)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
InfoHash other = (InfoHash) o;
|
||||||
|
return Arrays.equals(root, other.root);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.muwire.core;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class SharedFile {
|
||||||
|
|
||||||
|
private final File file;
|
||||||
|
private final InfoHash infoHash;
|
||||||
|
|
||||||
|
public SharedFile(File file, InfoHash infoHash) {
|
||||||
|
this.file = file;
|
||||||
|
this.infoHash = infoHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
public File getFile() {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InfoHash getInfoHash() {
|
||||||
|
return infoHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue