forked from I2P_Developers/i2p.i2p
Ratchet: NSR send/recv fixes
This commit is contained in:
@ -349,6 +349,7 @@ public final class ECIESAEADEngine {
|
|||||||
// part 2 - payload
|
// part 2 - payload
|
||||||
byte[] encpayloadkey = new byte[32];
|
byte[] encpayloadkey = new byte[32];
|
||||||
_hkdf.calculate(k_ba, ZEROLEN, INFO_6, encpayloadkey);
|
_hkdf.calculate(k_ba, ZEROLEN, INFO_6, encpayloadkey);
|
||||||
|
rcvr.initializeKey(encpayloadkey, 0);
|
||||||
byte[] payload = new byte[data.length - (TAGLEN + KEYLEN + MACLEN + MACLEN)];
|
byte[] payload = new byte[data.length - (TAGLEN + KEYLEN + MACLEN + MACLEN)];
|
||||||
try {
|
try {
|
||||||
rcvr.decryptWithAd(hash, data, TAGLEN + KEYLEN + MACLEN, payload, 0, payload.length + MACLEN);
|
rcvr.decryptWithAd(hash, data, TAGLEN + KEYLEN + MACLEN, payload, 0, payload.length + MACLEN);
|
||||||
@ -659,8 +660,9 @@ public final class ECIESAEADEngine {
|
|||||||
// part 2 - payload
|
// part 2 - payload
|
||||||
byte[] encpayloadkey = new byte[32];
|
byte[] encpayloadkey = new byte[32];
|
||||||
_hkdf.calculate(k_ba, ZEROLEN, INFO_6, encpayloadkey);
|
_hkdf.calculate(k_ba, ZEROLEN, INFO_6, encpayloadkey);
|
||||||
|
sender.initializeKey(encpayloadkey, 0);
|
||||||
try {
|
try {
|
||||||
sender.encryptWithAd(tag, payload, 0, enc, TAGLEN + KEYLEN + MACLEN, payload.length);
|
sender.encryptWithAd(hash, payload, 0, enc, TAGLEN + KEYLEN + MACLEN, payload.length);
|
||||||
} catch (GeneralSecurityException gse) {
|
} catch (GeneralSecurityException gse) {
|
||||||
if (_log.shouldWarn())
|
if (_log.shouldWarn())
|
||||||
_log.warn("Encrypt fail NSR part 2", gse);
|
_log.warn("Encrypt fail NSR part 2", gse);
|
||||||
|
@ -427,12 +427,17 @@ public class RatchetSKM extends SessionKeyManager implements SessionTagListener
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
HandshakeState state = tagSet.getHandshakeState();
|
HandshakeState state = tagSet.getHandshakeState();
|
||||||
|
synchronized(tagSet) {
|
||||||
|
key = tagSet.consume(tag);
|
||||||
|
}
|
||||||
|
if (key == null) {
|
||||||
|
if (_log.shouldDebug())
|
||||||
|
_log.debug("tag " + tag + " not found in tagset!!! " + tagSet);
|
||||||
|
}
|
||||||
if (state != null) {
|
if (state != null) {
|
||||||
key = new SessionKeyAndNonce(state);
|
|
||||||
if (_log.shouldDebug())
|
if (_log.shouldDebug())
|
||||||
_log.debug("IB NSR Tag consumed: " + tag + " from: " + tagSet);
|
_log.debug("IB NSR Tag consumed: " + tag + " from: " + tagSet);
|
||||||
} else {
|
} else {
|
||||||
key = tagSet.consume(tag);
|
|
||||||
if (_log.shouldDebug())
|
if (_log.shouldDebug())
|
||||||
_log.debug("IB ES Tag consumed: " + tag + " from: " + tagSet);
|
_log.debug("IB ES Tag consumed: " + tag + " from: " + tagSet);
|
||||||
}
|
}
|
||||||
|
@ -223,6 +223,13 @@ class RatchetTagSet implements TagSetHandle {
|
|||||||
int tagnum = _sessionTags.keyAt(idx);
|
int tagnum = _sessionTags.keyAt(idx);
|
||||||
_sessionTags.removeAt(idx);
|
_sessionTags.removeAt(idx);
|
||||||
|
|
||||||
|
// NSR
|
||||||
|
if (_state != null) {
|
||||||
|
addTags(tagnum);
|
||||||
|
return new SessionKeyAndNonce(_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ES
|
||||||
// now get the key
|
// now get the key
|
||||||
int kidx = _sessionKeys.indexOfKey(tagnum);
|
int kidx = _sessionKeys.indexOfKey(tagnum);
|
||||||
if (kidx >= 0) {
|
if (kidx >= 0) {
|
||||||
|
Reference in New Issue
Block a user