Changeset 35a771c7


Ignore:
Timestamp:
Dec 17, 2018 1:16:54 PM (19 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
bf3a7d6
Parents:
eb8178ea
Message:

NTCP2: Use new HKDF class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/transport/ntcp/OutboundNTCP2State.java

    reb8178ea r35a771c7  
    1313import com.southernstorm.noise.protocol.HandshakeState;
    1414
     15import net.i2p.crypto.HKDF;
    1516import net.i2p.data.Base64;
    1617import net.i2p.data.DataFormatException;
     
    437438        // TODO use noise HMAC or HKDF method instead?
    438439        // ask_master = HKDF(ck, zerolen, info="ask")
    439         byte[] temp_key = doHMAC(ctx, state.getChainingKey(), ZEROLEN);
    440         byte[] ask_master = doHMAC(ctx, temp_key, ASK);
     440        HKDF hkdf = new HKDF(ctx);
     441        byte[] ask_master = new byte[32];
     442        hkdf.calculate(state.getChainingKey(), ZEROLEN, "ask", ask_master);
    441443        byte[] tmp = new byte[32 + SIPHASH.length];
    442444        byte[] hash = state.getHandshakeHash();
    443445        System.arraycopy(hash, 0, tmp, 0, 32);
    444446        System.arraycopy(SIPHASH, 0, tmp, 32, SIPHASH.length);
    445         temp_key = doHMAC(ctx, ask_master, tmp);
    446         byte[] sip_master = doHMAC(ctx, temp_key, ONE);
    447         temp_key = doHMAC(ctx, sip_master, ZEROLEN);
    448         // Output 1
    449         byte[] sip_ab = doHMAC(ctx, temp_key, ONE);
    450         // Output 2
    451         tmp = new byte[KEY_SIZE + 1];
    452         System.arraycopy(sip_ab, 0, tmp, 0, 32);
    453         tmp[32] = 2;
    454         byte[] sip_ba = doHMAC(ctx, temp_key, tmp);
    455         Arrays.fill(temp_key, (byte) 0);
     447        byte[] sip_master = new byte[32];
     448        hkdf.calculate(ask_master, tmp, sip_master);
     449        Arrays.fill(ask_master, (byte) 0);
    456450        Arrays.fill(tmp, (byte) 0);
     451        byte[] sip_ab = new byte[32];
     452        byte[] sip_ba = new byte[32];
     453        hkdf.calculate(sip_master, ZEROLEN, sip_ab, sip_ba, 0);
     454        Arrays.fill(sip_master, (byte) 0);
    457455        return new byte[][] { sip_ab, sip_ba };
    458     }
    459 
    460     private static byte[] doHMAC(RouterContext ctx, byte[] key, byte[] data) {
    461         byte[] rv = new byte[32];
    462         ctx.hmac256().calculate(key, data, 0, data.length, rv, 0);
    463         return rv;
    464456    }
    465457
Note: See TracChangeset for help on using the changeset viewer.