Refactored all occurrences of 'vector' to 'value' in the context of 'initialization value' per https://tools.ietf.org/html/rfc4949#page-9 as 'initialization vector' is deprecated

This commit is contained in:
Micah Silverman 2017-10-14 08:26:23 -04:00
parent 2a4082fe9a
commit d112c62e5b
20 changed files with 46 additions and 46 deletions

View File

@ -2,7 +2,7 @@ package io.jsonwebtoken;
public interface Jwe<B> extends Jwt<JweHeader,B> { public interface Jwe<B> extends Jwt<JweHeader,B> {
byte[] getInitializationVector(); byte[] getInitializationValue();
byte[] getAadTag(); byte[] getAadTag();
} }

View File

@ -51,7 +51,7 @@ public class DefaultJweFactory {
// so we use a 'null safe' variant: // so we use a 'null safe' variant:
final byte[] encryptedKeyBytes = nullSafeBase64UrlDecode(base64UrlEncryptedKey, "Encrypted Key"); final byte[] encryptedKeyBytes = nullSafeBase64UrlDecode(base64UrlEncryptedKey, "Encrypted Key");
final byte[] iv = base64UrlDecode(base64UrlIv, "Initialization Vector"); final byte[] iv = base64UrlDecode(base64UrlIv, "Initialization Value");
final byte[] ciphertext = base64UrlDecode(base64UrlCiphertext, "Ciphertext"); final byte[] ciphertext = base64UrlDecode(base64UrlCiphertext, "Ciphertext");

View File

@ -90,7 +90,7 @@ public class DispatchingParser {
base64UrlEncodedTag = sb.toString(); base64UrlEncodedTag = sb.toString();
Assert.notNull(base64UrlEncodedHeader, "Invalid compact JWE: base64Url JWE Protected Header is missing."); Assert.notNull(base64UrlEncodedHeader, "Invalid compact JWE: base64Url JWE Protected Header is missing.");
Assert.notNull(base64UrlEncodedIv, "Invalid compact JWE: base64Url JWE Initialization Vector is missing."); Assert.notNull(base64UrlEncodedIv, "Invalid compact JWE: base64Url JWE Initialization Value is missing.");
Assert.notNull(base64UrlEncodedCiphertext, "Invalid compact JWE: base64Url JWE Ciphertext is missing."); Assert.notNull(base64UrlEncodedCiphertext, "Invalid compact JWE: base64Url JWE Ciphertext is missing.");
Assert.notNull(base64UrlEncodedTag, "Invalid compact JWE: base64Url JWE Authentication Tag is missing."); Assert.notNull(base64UrlEncodedTag, "Invalid compact JWE: base64Url JWE Authentication Tag is missing.");
@ -113,7 +113,7 @@ public class DispatchingParser {
DecryptionRequest dreq = DecryptionRequests.builder() DecryptionRequest dreq = DecryptionRequests.builder()
.setKey(secretKey.getEncoded()) .setKey(secretKey.getEncoded())
.setAdditionalAuthenticatedData(aad) .setAdditionalAuthenticatedData(aad)
.setInitializationVector(iv) .setInitializationValue(iv)
.setCiphertext(ciphertext) .setCiphertext(ciphertext)
.setAuthenticationTag(tag) .setAuthenticationTag(tag)
.build(); .build();

View File

@ -21,7 +21,7 @@ public abstract class AbstractAesEncryptionAlgorithm implements EncryptionAlgori
"generatedIvLength must be a positive number <= " + AES_BLOCK_SIZE; "generatedIvLength must be a positive number <= " + AES_BLOCK_SIZE;
protected static final String DECRYPT_NO_IV = "This EncryptionAlgorithm implementation rejects decryption " + protected static final String DECRYPT_NO_IV = "This EncryptionAlgorithm implementation rejects decryption " +
"requests that do not include initialization vectors. AES ciphertext without an IV is weak and should " + "requests that do not include initialization values. AES ciphertext without an IV is weak and should " +
"never be used."; "never be used.";
private final String name; private final String name;
@ -93,7 +93,7 @@ public abstract class AbstractAesEncryptionAlgorithm implements EncryptionAlgori
} }
} }
protected byte[] generateInitializationVector(SecureRandom random) { protected byte[] generateInitializationValue(SecureRandom random) {
byte[] iv = new byte[this.generatedIvLength]; byte[] iv = new byte[this.generatedIvLength];
random.nextBytes(iv); random.nextBytes(iv);
return iv; return iv;
@ -124,18 +124,18 @@ public abstract class AbstractAesEncryptionAlgorithm implements EncryptionAlgori
final SecureRandom random = getSecureRandom(req); final SecureRandom random = getSecureRandom(req);
byte[] iv = req.getInitializationVector(); byte[] iv = req.getInitializationValue();
int ivLength = length(iv); int ivLength = length(iv);
if (ivLength == 0) { if (ivLength == 0) {
iv = generateInitializationVector(random); iv = generateInitializationValue(random);
} }
return iv; return iv;
} }
protected byte[] assertDecryptionIv(DecryptionRequest req) throws IllegalArgumentException { protected byte[] assertDecryptionIv(DecryptionRequest req) throws IllegalArgumentException {
byte[] iv = req.getInitializationVector(); byte[] iv = req.getInitializationValue();
Assert.notEmpty(iv, DECRYPT_NO_IV); Assert.notEmpty(iv, DECRYPT_NO_IV);
return iv; return iv;
} }

View File

@ -31,7 +31,7 @@ public abstract class AbstractCryptoRequest implements CryptoRequest {
} }
@Override @Override
public byte[] getInitializationVector() { public byte[] getInitializationValue() {
return this.iv; return this.iv;
} }
} }

View File

@ -28,17 +28,17 @@ public interface CryptoRequest {
byte[] getKey(); byte[] getKey();
/** /**
* Returns the initialization vector to use during encryption or decryption depending on the type of request. * Returns the initialization value to use during encryption or decryption depending on the type of request.
* <p> * <p>
* <p>If this value is {@code null} on an {@link EncryptionRequest}, a default initialization vector will be * <p>If this value is {@code null} on an {@link EncryptionRequest}, a default initialization value will be
* auto-generated, as it is never safe to use most cryptographic algorithms without initialization vectors * auto-generated, as it is never safe to use most cryptographic algorithms without initialization values
* (such as AES).</p> * (such as AES).</p>
* <p> * <p>
* <p>This implies that all decryption requests must always supply an initialization vector since encryption * <p>This implies that all decryption requests must always supply an initialization value since encryption
* will always have one.</p> * will always have one.</p>
* *
* @return the initialization vector to use during encryption or decryption depending on the type of request. * @return the initialization value to use during encryption or decryption depending on the type of request.
*/ */
byte[] getInitializationVector(); byte[] getInitializationValue();
} }

View File

@ -17,7 +17,7 @@ package io.jsonwebtoken.impl.crypto;
public interface DecryptionRequestBuilder { public interface DecryptionRequestBuilder {
DecryptionRequestBuilder setInitializationVector(byte[] iv); DecryptionRequestBuilder setInitializationValue(byte[] iv);
DecryptionRequestBuilder setKey(byte[] key); DecryptionRequestBuilder setKey(byte[] key);

View File

@ -32,7 +32,7 @@ public class DefaultDecryptionRequestBuilder implements DecryptionRequestBuilder
private byte[] tag; private byte[] tag;
@Override @Override
public DecryptionRequestBuilder setInitializationVector(byte[] iv) { public DecryptionRequestBuilder setInitializationValue(byte[] iv) {
this.iv = clean(iv); this.iv = clean(iv);
return this; return this;
} }

View File

@ -36,7 +36,7 @@ public class DefaultEncryptionRequestBuilder implements EncryptionRequestBuilder
} }
@Override @Override
public EncryptionRequestBuilder setInitializationVector(byte[] iv) { public EncryptionRequestBuilder setInitializationValue(byte[] iv) {
this.iv = clean(iv); this.iv = clean(iv);
return this; return this;
} }

View File

@ -31,7 +31,7 @@ public class DefaultEncryptionResult implements EncryptionResult {
} }
@Override @Override
public byte[] getInitializationVector() { public byte[] getInitializationValue() {
return this.iv; return this.iv;
} }

View File

@ -21,7 +21,7 @@ public interface EncryptionRequestBuilder {
EncryptionRequestBuilder setSecureRandom(SecureRandom secureRandom); EncryptionRequestBuilder setSecureRandom(SecureRandom secureRandom);
EncryptionRequestBuilder setInitializationVector(byte[] iv); EncryptionRequestBuilder setInitializationValue(byte[] iv);
EncryptionRequestBuilder setKey(byte[] key); EncryptionRequestBuilder setKey(byte[] key);

View File

@ -17,7 +17,7 @@ package io.jsonwebtoken.impl.crypto;
public interface EncryptionResult { public interface EncryptionResult {
byte[] getInitializationVector(); byte[] getInitializationValue();
byte[] getCiphertext(); byte[] getCiphertext();

View File

@ -15,7 +15,7 @@
*/ */
package io.jsonwebtoken.impl.crypto; package io.jsonwebtoken.impl.crypto;
public interface InitializationVectorSource { public interface InitializationValueSource {
byte[] getInitializationVector(); byte[] getInitializationValue();
} }

View File

@ -50,7 +50,7 @@ class AbstractAesEncryptionAlgorithmTest {
def req = EncryptionRequests.builder() def req = EncryptionRequests.builder()
.setAdditionalAuthenticatedData('foo'.getBytes()) .setAdditionalAuthenticatedData('foo'.getBytes())
.setInitializationVector('iv'.getBytes()) .setInitializationValue('iv'.getBytes())
.setKey(alg.generateKey().getEncoded()) .setKey(alg.generateKey().getEncoded())
.setPlaintext('bar'.getBytes()) .setPlaintext('bar'.getBytes())
.build(); .build();
@ -89,7 +89,7 @@ class AbstractAesEncryptionAlgorithmTest {
def req = EncryptionRequests.builder() def req = EncryptionRequests.builder()
.setAdditionalAuthenticatedData('foo'.getBytes()) .setAdditionalAuthenticatedData('foo'.getBytes())
.setInitializationVector('iv'.getBytes()) .setInitializationValue('iv'.getBytes())
.setKey(alg.generateKey().getEncoded()) .setKey(alg.generateKey().getEncoded())
.setPlaintext('bar'.getBytes()) .setPlaintext('bar'.getBytes())
.setSecureRandom(secureRandom) .setSecureRandom(secureRandom)

View File

@ -66,7 +66,7 @@ class Aes128CbcHmacSha256Test {
EncryptionRequest request = EncryptionRequests.builder() EncryptionRequest request = EncryptionRequests.builder()
.setAdditionalAuthenticatedData(A) .setAdditionalAuthenticatedData(A)
.setInitializationVector(IV) .setInitializationValue(IV)
.setKey(K) .setKey(K)
.setPlaintext(P) .setPlaintext(P)
.build(); .build();
@ -78,7 +78,7 @@ class Aes128CbcHmacSha256Test {
byte[] resultCiphertext = result.getCiphertext() byte[] resultCiphertext = result.getCiphertext()
byte[] resultTag = result.getAuthenticationTag(); byte[] resultTag = result.getAuthenticationTag();
byte[] resultIv = result.getInitializationVector(); byte[] resultIv = result.getInitializationValue();
assertArrayEquals E, resultCiphertext assertArrayEquals E, resultCiphertext
assertArrayEquals T, resultTag assertArrayEquals T, resultTag
@ -89,7 +89,7 @@ class Aes128CbcHmacSha256Test {
def dreq = DecryptionRequests.builder() def dreq = DecryptionRequests.builder()
.setAdditionalAuthenticatedData(A) .setAdditionalAuthenticatedData(A)
.setCiphertext(resultCiphertext) .setCiphertext(resultCiphertext)
.setInitializationVector(resultIv) .setInitializationValue(resultIv)
.setKey(K) .setKey(K)
.setAuthenticationTag(resultTag) .setAuthenticationTag(resultTag)
.build(); .build();

View File

@ -35,11 +35,11 @@ class DefaultDecryptionRequestBuilderTest {
def ciphertext = generateData() def ciphertext = generateData()
def req = new DefaultDecryptionRequestBuilder() def req = new DefaultDecryptionRequestBuilder()
.setKey(key).setInitializationVector(iv).setCiphertext(ciphertext).build() .setKey(key).setInitializationValue(iv).setCiphertext(ciphertext).build()
assertTrue req instanceof DefaultDecryptionRequest assertTrue req instanceof DefaultDecryptionRequest
assertSame key, req.getKey() assertSame key, req.getKey()
assertSame iv, req.getInitializationVector() assertSame iv, req.getInitializationValue()
assertSame ciphertext, req.getCiphertext() assertSame ciphertext, req.getCiphertext()
} }
@ -55,8 +55,8 @@ class DefaultDecryptionRequestBuilderTest {
} }
@Test @Test
void testSetInitializationVectorWithEmptyArray() { void testSetInitializationValueWithEmptyArray() {
def b = new DefaultDecryptionRequestBuilder().setInitializationVector(new byte[0]) def b = new DefaultDecryptionRequestBuilder().setInitializationValue(new byte[0])
assertNull b.iv assertNull b.iv
} }

View File

@ -21,12 +21,12 @@ class DefaultEncryptionRequestBuilderTest {
def aad = generateData() def aad = generateData()
def req = new DefaultEncryptionRequestBuilder() def req = new DefaultEncryptionRequestBuilder()
.setKey(key).setInitializationVector(iv).setPlaintext(plaintext).setAdditionalAuthenticatedData(aad) .setKey(key).setInitializationValue(iv).setPlaintext(plaintext).setAdditionalAuthenticatedData(aad)
.build() .build()
assertTrue req instanceof DefaultAuthenticatedEncryptionRequest assertTrue req instanceof DefaultAuthenticatedEncryptionRequest
assertSame key, req.getKey() assertSame key, req.getKey()
assertSame iv, req.getInitializationVector() assertSame iv, req.getInitializationValue()
assertSame plaintext, req.getPlaintext() assertSame plaintext, req.getPlaintext()
assertSame aad, req.getAssociatedData() assertSame aad, req.getAssociatedData()
} }
@ -39,17 +39,17 @@ class DefaultEncryptionRequestBuilderTest {
def plaintext = generateData() def plaintext = generateData()
def req = new DefaultEncryptionRequestBuilder() def req = new DefaultEncryptionRequestBuilder()
.setKey(key).setInitializationVector(iv).setPlaintext(plaintext).build() .setKey(key).setInitializationValue(iv).setPlaintext(plaintext).build()
assertTrue req instanceof DefaultEncryptionRequest assertTrue req instanceof DefaultEncryptionRequest
assertSame key, req.getKey() assertSame key, req.getKey()
assertSame iv, req.getInitializationVector() assertSame iv, req.getInitializationValue()
assertSame plaintext, req.getPlaintext() assertSame plaintext, req.getPlaintext()
} }
@Test @Test
void testSetInitializationVectorWithEmptyArray() { void testSetInitializationValueWithEmptyArray() {
def b = new DefaultEncryptionRequestBuilder().setInitializationVector(new byte[0]) def b = new DefaultEncryptionRequestBuilder().setInitializationValue(new byte[0])
assertNull b.iv assertNull b.iv
} }

View File

@ -53,7 +53,7 @@ class EncryptionAlgorithmsTest {
def dreq = DecryptionRequests.builder() def dreq = DecryptionRequests.builder()
.setKey(key) .setKey(key)
.setInitializationVector(result.getInitializationVector()) .setInitializationValue(result.getInitializationValue())
.setAuthenticationTag(result.getAuthenticationTag()) .setAuthenticationTag(result.getAuthenticationTag())
.setCiphertext(result.getCiphertext()) .setCiphertext(result.getCiphertext())
.build() .build()
@ -92,7 +92,7 @@ class EncryptionAlgorithmsTest {
def dreq = DecryptionRequests.builder() def dreq = DecryptionRequests.builder()
.setAdditionalAuthenticatedData(AAD_BYTES) .setAdditionalAuthenticatedData(AAD_BYTES)
.setKey(key) .setKey(key)
.setInitializationVector(result.getInitializationVector()) .setInitializationValue(result.getInitializationValue())
.setAuthenticationTag(result.getAuthenticationTag()) .setAuthenticationTag(result.getAuthenticationTag())
.setCiphertext(result.getCiphertext()) .setCiphertext(result.getCiphertext())
.build() .build()

View File

@ -40,7 +40,7 @@ class GcmAesEncryptionServiceTest {
EncryptionRequest request = EncryptionRequests.builder() EncryptionRequest request = EncryptionRequests.builder()
.setAdditionalAuthenticatedData(AAD) .setAdditionalAuthenticatedData(AAD)
.setInitializationVector(IV) .setInitializationValue(IV)
.setKey(K) .setKey(K)
.setPlaintext(P) .setPlaintext(P)
.build(); .build();
@ -52,7 +52,7 @@ class GcmAesEncryptionServiceTest {
byte[] resultCiphertext = result.getCiphertext() byte[] resultCiphertext = result.getCiphertext()
byte[] resultTag = result.getAuthenticationTag(); byte[] resultTag = result.getAuthenticationTag();
byte[] resultIv = result.getInitializationVector(); byte[] resultIv = result.getInitializationValue();
assertArrayEquals E, resultCiphertext assertArrayEquals E, resultCiphertext
assertArrayEquals T, resultTag assertArrayEquals T, resultTag
@ -63,7 +63,7 @@ class GcmAesEncryptionServiceTest {
AuthenticatedDecryptionRequest decryptionRequest = DecryptionRequests.builder() AuthenticatedDecryptionRequest decryptionRequest = DecryptionRequests.builder()
.setAdditionalAuthenticatedData(AAD) .setAdditionalAuthenticatedData(AAD)
.setCiphertext(resultCiphertext) .setCiphertext(resultCiphertext)
.setInitializationVector(resultIv) .setInitializationValue(resultIv)
.setKey(K) .setKey(K)
.setAuthenticationTag(resultTag) .setAuthenticationTag(resultTag)
.build(); .build();

View File

@ -53,7 +53,7 @@ class HmacAesEncryptionAlgorithmTest {
def dreq = DecryptionRequests.builder() def dreq = DecryptionRequests.builder()
.setKey(key) .setKey(key)
.setInitializationVector(result.getInitializationVector()) .setInitializationValue(result.getInitializationValue())
.setAuthenticationTag(result.getAuthenticationTag()) .setAuthenticationTag(result.getAuthenticationTag())
.setCiphertext(result.getCiphertext()) .setCiphertext(result.getCiphertext())
.build() .build()
@ -108,7 +108,7 @@ class HmacAesEncryptionAlgorithmTest {
def dreq = DecryptionRequests.builder() def dreq = DecryptionRequests.builder()
.setKey(key) .setKey(key)
.setInitializationVector(result.getInitializationVector()) .setInitializationValue(result.getInitializationValue())
.setAuthenticationTag(fakeTag) .setAuthenticationTag(fakeTag)
.setCiphertext(result.getCiphertext()) .setCiphertext(result.getCiphertext())
.build() .build()