Skip to content

Commit 62f11cd

Browse files
smemeryValerie Peng
authored andcommitted
8326609: New AES implementation with updates specified in FIPS 197
Reviewed-by: valeriep
1 parent b2e431a commit 62f11cd

File tree

18 files changed

+1518
-1515
lines changed

18 files changed

+1518
-1515
lines changed

src/hotspot/share/classfile/vmIntrinsics.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,8 @@ class methodHandle;
467467
do_intrinsic(_Reference_clear0, java_lang_ref_Reference, clear0_name, void_method_signature, F_RN) \
468468
do_intrinsic(_PhantomReference_clear0, java_lang_ref_PhantomReference, clear0_name, void_method_signature, F_RN) \
469469
\
470-
/* support for com.sun.crypto.provider.AESCrypt and some of its callers */ \
471-
do_class(com_sun_crypto_provider_aescrypt, "com/sun/crypto/provider/AESCrypt") \
470+
/* support for com.sun.crypto.provider.AES_Crypt and some of its callers */ \
471+
do_class(com_sun_crypto_provider_aescrypt, "com/sun/crypto/provider/AES_Crypt") \
472472
do_intrinsic(_aescrypt_encryptBlock, com_sun_crypto_provider_aescrypt, encryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \
473473
do_intrinsic(_aescrypt_decryptBlock, com_sun_crypto_provider_aescrypt, decryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \
474474
do_name( encryptBlock_name, "implEncryptBlock") \

src/hotspot/share/opto/library_call.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7273,7 +7273,7 @@ bool LibraryCallKit::inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id) {
72737273
const TypeInstPtr* tinst = _gvn.type(cipherBlockChaining_object)->isa_instptr();
72747274
assert(tinst != nullptr, "CBC obj is null");
72757275
assert(tinst->is_loaded(), "CBC obj is not loaded");
7276-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
7276+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
72777277
assert(klass_AESCrypt->is_loaded(), "predicate checks that this class is loaded");
72787278

72797279
ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass();
@@ -7359,7 +7359,7 @@ bool LibraryCallKit::inline_electronicCodeBook_AESCrypt(vmIntrinsics::ID id) {
73597359
const TypeInstPtr* tinst = _gvn.type(electronicCodeBook_object)->isa_instptr();
73607360
assert(tinst != nullptr, "ECB obj is null");
73617361
assert(tinst->is_loaded(), "ECB obj is not loaded");
7362-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
7362+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
73637363
assert(klass_AESCrypt->is_loaded(), "predicate checks that this class is loaded");
73647364

73657365
ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass();
@@ -7429,7 +7429,7 @@ bool LibraryCallKit::inline_counterMode_AESCrypt(vmIntrinsics::ID id) {
74297429
const TypeInstPtr* tinst = _gvn.type(counterMode_object)->isa_instptr();
74307430
assert(tinst != nullptr, "CTR obj is null");
74317431
assert(tinst->is_loaded(), "CTR obj is not loaded");
7432-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
7432+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
74337433
assert(klass_AESCrypt->is_loaded(), "predicate checks that this class is loaded");
74347434
ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass();
74357435
const TypeKlassPtr* aklass = TypeKlassPtr::make(instklass_AESCrypt);
@@ -7469,15 +7469,15 @@ Node * LibraryCallKit::get_key_start_from_aescrypt_object(Node *aescrypt_object)
74697469
// However, ppc64 vncipher processes MixColumns and requires the same round keys with encryption.
74707470
// The ppc64 and riscv64 stubs of encryption and decryption use the same round keys (sessionK[0]).
74717471
Node* objSessionK = load_field_from_object(aescrypt_object, "sessionK", "[[I");
7472-
assert (objSessionK != nullptr, "wrong version of com.sun.crypto.provider.AESCrypt");
7472+
assert (objSessionK != nullptr, "wrong version of com.sun.crypto.provider.AES_Crypt");
74737473
if (objSessionK == nullptr) {
74747474
return (Node *) nullptr;
74757475
}
74767476
Node* objAESCryptKey = load_array_element(objSessionK, intcon(0), TypeAryPtr::OOPS, /* set_ctrl */ true);
74777477
#else
74787478
Node* objAESCryptKey = load_field_from_object(aescrypt_object, "K", "[I");
74797479
#endif // PPC64
7480-
assert (objAESCryptKey != nullptr, "wrong version of com.sun.crypto.provider.AESCrypt");
7480+
assert (objAESCryptKey != nullptr, "wrong version of com.sun.crypto.provider.AES_Crypt");
74817481
if (objAESCryptKey == nullptr) return (Node *) nullptr;
74827482

74837483
// now have the array, need to get the start address of the K array
@@ -7512,7 +7512,7 @@ Node* LibraryCallKit::inline_cipherBlockChaining_AESCrypt_predicate(bool decrypt
75127512
assert(tinst->is_loaded(), "CBCobj is not loaded");
75137513

75147514
// we want to do an instanceof comparison against the AESCrypt class
7515-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
7515+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
75167516
if (!klass_AESCrypt->is_loaded()) {
75177517
// if AESCrypt is not even loaded, we never take the intrinsic fast path
75187518
Node* ctrl = control();
@@ -7575,7 +7575,7 @@ Node* LibraryCallKit::inline_electronicCodeBook_AESCrypt_predicate(bool decrypti
75757575
assert(tinst->is_loaded(), "ECBobj is not loaded");
75767576

75777577
// we want to do an instanceof comparison against the AESCrypt class
7578-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
7578+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
75797579
if (!klass_AESCrypt->is_loaded()) {
75807580
// if AESCrypt is not even loaded, we never take the intrinsic fast path
75817581
Node* ctrl = control();
@@ -7635,7 +7635,7 @@ Node* LibraryCallKit::inline_counterMode_AESCrypt_predicate() {
76357635
assert(tinst->is_loaded(), "CTRobj is not loaded");
76367636

76377637
// we want to do an instanceof comparison against the AESCrypt class
7638-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
7638+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
76397639
if (!klass_AESCrypt->is_loaded()) {
76407640
// if AESCrypt is not even loaded, we never take the intrinsic fast path
76417641
Node* ctrl = control();
@@ -8608,7 +8608,7 @@ bool LibraryCallKit::inline_galoisCounterMode_AESCrypt() {
86088608
const TypeInstPtr* tinst = _gvn.type(gctr_object)->isa_instptr();
86098609
assert(tinst != nullptr, "GCTR obj is null");
86108610
assert(tinst->is_loaded(), "GCTR obj is not loaded");
8611-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
8611+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
86128612
assert(klass_AESCrypt->is_loaded(), "predicate checks that this class is loaded");
86138613
ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass();
86148614
const TypeKlassPtr* aklass = TypeKlassPtr::make(instklass_AESCrypt);
@@ -8662,7 +8662,7 @@ Node* LibraryCallKit::inline_galoisCounterMode_AESCrypt_predicate() {
86628662
assert(tinst->is_loaded(), "GCTR obj is not loaded");
86638663

86648664
// we want to do an instanceof comparison against the AESCrypt class
8665-
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt"));
8665+
ciKlass* klass_AESCrypt = tinst->instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AES_Crypt"));
86668666
if (!klass_AESCrypt->is_loaded()) {
86678667
// if AESCrypt is not even loaded, we never take the intrinsic fast path
86688668
Node* ctrl = control();

src/java.base/share/classes/com/sun/crypto/provider/AESCipher.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2002, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,7 @@
4949
*
5050
* @author Valerie Peng
5151
*
52-
* @see AESCrypt
52+
* @see AES_Crypt
5353
* @see CipherBlockChaining
5454
* @see ElectronicCodeBook
5555
* @see CipherFeedback
@@ -174,7 +174,7 @@ static void checkKeySize(Key key, int fixedKeySize)
174174
* PKCS5Padding.
175175
*/
176176
protected AESCipher(int keySize) {
177-
core = new CipherCore(new AESCrypt(), AESConstants.AES_BLOCK_SIZE);
177+
core = new CipherCore(new AES_Crypt(), AESConstants.AES_BLOCK_SIZE);
178178
fixedKeySize = keySize;
179179
}
180180

@@ -504,7 +504,7 @@ protected int engineDoFinal(byte[] input, int inputOffset, int inputLen,
504504
protected int engineGetKeySize(Key key) throws InvalidKeyException {
505505
byte[] encoded = key.getEncoded();
506506
Arrays.fill(encoded, (byte)0);
507-
if (!AESCrypt.isKeySizeValid(encoded.length)) {
507+
if (!AES_Crypt.isKeySizeValid(encoded.length)) {
508508
throw new InvalidKeyException("Invalid AES key length: " +
509509
encoded.length + " bytes");
510510
}

0 commit comments

Comments
 (0)