forked from I2P_Developers/i2p.i2p
- Correct errors in the specification of the BuildResponseRecord.
The first 32 bytes are not random; they are the hash of the following 496 bytes. - Don't waste entropy on bytes we are going to overwrite in the BRR
This commit is contained in:
@ -10,7 +10,8 @@ import net.i2p.data.SessionKey;
|
|||||||
* Read and write the reply to a tunnel build message record.
|
* Read and write the reply to a tunnel build message record.
|
||||||
*
|
*
|
||||||
* The reply record is the same size as the request record (528 bytes).
|
* The reply record is the same size as the request record (528 bytes).
|
||||||
* Bytes 0-526 contain random data.
|
* Bytes 0-31 contain the hash of bytes 32-527
|
||||||
|
* Bytes 32-526 contain random data.
|
||||||
* Byte 527 contains the reply.
|
* Byte 527 contains the reply.
|
||||||
*/
|
*/
|
||||||
public class BuildResponseRecord {
|
public class BuildResponseRecord {
|
||||||
@ -18,14 +19,14 @@ public class BuildResponseRecord {
|
|||||||
/**
|
/**
|
||||||
* Create a new encrypted response
|
* Create a new encrypted response
|
||||||
*
|
*
|
||||||
* @param status the response
|
* @param status the response 0-255
|
||||||
* @param responseMessageId unused except for debugging
|
* @param responseMessageId unused except for debugging
|
||||||
* @return a 528-byte response record
|
* @return a 528-byte response record
|
||||||
*/
|
*/
|
||||||
public static byte[] create(I2PAppContext ctx, int status, SessionKey replyKey, byte replyIV[], long responseMessageId) {
|
public static byte[] create(I2PAppContext ctx, int status, SessionKey replyKey, byte replyIV[], long responseMessageId) {
|
||||||
//Log log = ctx.logManager().getLog(BuildResponseRecord.class);
|
//Log log = ctx.logManager().getLog(BuildResponseRecord.class);
|
||||||
byte rv[] = new byte[TunnelBuildReplyMessage.RECORD_SIZE];
|
byte rv[] = new byte[TunnelBuildReplyMessage.RECORD_SIZE];
|
||||||
ctx.random().nextBytes(rv);
|
ctx.random().nextBytes(rv, Hash.HASH_LENGTH, TunnelBuildReplyMessage.RECORD_SIZE - Hash.HASH_LENGTH - 1);
|
||||||
DataHelper.toLong(rv, TunnelBuildMessage.RECORD_SIZE-1, 1, status);
|
DataHelper.toLong(rv, TunnelBuildMessage.RECORD_SIZE-1, 1, status);
|
||||||
// rv = AES(SHA256(padding+status) + padding + status, replyKey, replyIV)
|
// rv = AES(SHA256(padding+status) + padding + status, replyKey, replyIV)
|
||||||
ctx.sha().calculateHash(rv, Hash.HASH_LENGTH, rv.length - Hash.HASH_LENGTH, rv, 0);
|
ctx.sha().calculateHash(rv, Hash.HASH_LENGTH, rv.length - Hash.HASH_LENGTH, rv, 0);
|
||||||
|
Reference in New Issue
Block a user