mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +02:00
8148421: Transport Layer Security (TLS) Session Hash and Extended Master Secret Extension
Co-authored-by: Martin Balao <mbalao@redhat.com> Reviewed-by: jnimeh, ahgross, rhalade, wetmore
This commit is contained in:
parent
f29e21abb1
commit
82bf0799c6
15 changed files with 448 additions and 64 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -769,6 +769,8 @@ public final class SunJCE extends Provider {
|
|||
"com.sun.crypto.provider.TlsMasterSecretGenerator");
|
||||
put("Alg.Alias.KeyGenerator.SunTls12MasterSecret",
|
||||
"SunTlsMasterSecret");
|
||||
put("Alg.Alias.KeyGenerator.SunTlsExtendedMasterSecret",
|
||||
"SunTlsMasterSecret");
|
||||
|
||||
put("KeyGenerator.SunTlsKeyMaterial",
|
||||
"com.sun.crypto.provider.TlsKeyMaterialGenerator");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -102,21 +102,32 @@ public final class TlsMasterSecretGenerator extends KeyGeneratorSpi {
|
|||
|
||||
try {
|
||||
byte[] master;
|
||||
byte[] clientRandom = spec.getClientRandom();
|
||||
byte[] serverRandom = spec.getServerRandom();
|
||||
|
||||
if (protocolVersion >= 0x0301) {
|
||||
byte[] seed = concat(clientRandom, serverRandom);
|
||||
byte[] label;
|
||||
byte[] seed;
|
||||
byte[] extendedMasterSecretSessionHash =
|
||||
spec.getExtendedMasterSecretSessionHash();
|
||||
if (extendedMasterSecretSessionHash.length != 0) {
|
||||
label = LABEL_EXTENDED_MASTER_SECRET;
|
||||
seed = extendedMasterSecretSessionHash;
|
||||
} else {
|
||||
byte[] clientRandom = spec.getClientRandom();
|
||||
byte[] serverRandom = spec.getServerRandom();
|
||||
label = LABEL_MASTER_SECRET;
|
||||
seed = concat(clientRandom, serverRandom);
|
||||
}
|
||||
master = ((protocolVersion >= 0x0303) ?
|
||||
doTLS12PRF(premaster, LABEL_MASTER_SECRET, seed, 48,
|
||||
spec.getPRFHashAlg(), spec.getPRFHashLength(),
|
||||
spec.getPRFBlockSize()) :
|
||||
doTLS10PRF(premaster, LABEL_MASTER_SECRET, seed, 48));
|
||||
doTLS12PRF(premaster, label, seed, 48,
|
||||
spec.getPRFHashAlg(), spec.getPRFHashLength(),
|
||||
spec.getPRFBlockSize()) :
|
||||
doTLS10PRF(premaster, label, seed, 48));
|
||||
} else {
|
||||
master = new byte[48];
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
MessageDigest sha = MessageDigest.getInstance("SHA");
|
||||
|
||||
byte[] clientRandom = spec.getClientRandom();
|
||||
byte[] serverRandom = spec.getServerRandom();
|
||||
byte[] tmp = new byte[20];
|
||||
for (int i = 0; i < 3; i++) {
|
||||
sha.update(SSL3_CONST[i]);
|
||||
|
@ -175,5 +186,5 @@ public final class TlsMasterSecretGenerator extends KeyGeneratorSpi {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -55,6 +55,11 @@ abstract class TlsPrfGenerator extends KeyGeneratorSpi {
|
|||
static final byte[] LABEL_MASTER_SECRET = // "master secret"
|
||||
{ 109, 97, 115, 116, 101, 114, 32, 115, 101, 99, 114, 101, 116 };
|
||||
|
||||
static final byte[] LABEL_EXTENDED_MASTER_SECRET =
|
||||
// "extended master secret"
|
||||
{ 101, 120, 116, 101, 110, 100, 101, 100, 32, 109, 97, 115, 116,
|
||||
101, 114, 32, 115, 101, 99, 114, 101, 116 };
|
||||
|
||||
static final byte[] LABEL_KEY_EXPANSION = // "key expansion"
|
||||
{ 107, 101, 121, 32, 101, 120, 112, 97, 110, 115, 105, 111, 110 };
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue