1.1 --- a/src/share/vm/opto/library_call.cpp Fri Aug 05 10:47:35 2016 +0000 1.2 +++ b/src/share/vm/opto/library_call.cpp Wed Aug 10 14:59:21 2016 +0200 1.3 @@ -6459,7 +6459,20 @@ 1.4 1.5 //------------------------------get_key_start_from_aescrypt_object----------------------- 1.6 Node * LibraryCallKit::get_key_start_from_aescrypt_object(Node *aescrypt_object) { 1.7 +#ifdef PPC64 1.8 + // MixColumns for decryption can be reduced by preprocessing MixColumns with round keys. 1.9 + // Intel's extention is based on this optimization and AESCrypt generates round keys by preprocessing MixColumns. 1.10 + // However, ppc64 vncipher processes MixColumns and requires the same round keys with encryption. 1.11 + // The ppc64 stubs of encryption and decryption use the same round keys (sessionK[0]). 1.12 + Node* objSessionK = load_field_from_object(aescrypt_object, "sessionK", "[[I", /*is_exact*/ false); 1.13 + assert (objSessionK != NULL, "wrong version of com.sun.crypto.provider.AESCrypt"); 1.14 + if (objSessionK == NULL) { 1.15 + return (Node *) NULL; 1.16 + } 1.17 + Node* objAESCryptKey = load_array_element(control(), objSessionK, intcon(0), TypeAryPtr::OOPS); 1.18 +#else 1.19 Node* objAESCryptKey = load_field_from_object(aescrypt_object, "K", "[I", /*is_exact*/ false); 1.20 +#endif // PPC64 1.21 assert (objAESCryptKey != NULL, "wrong version of com.sun.crypto.provider.AESCrypt"); 1.22 if (objAESCryptKey == NULL) return (Node *) NULL; 1.23