src/share/vm/opto/library_call.cpp

changeset 8608
0d78aecb0948
parent 8504
a96cf90239c6
child 8653
0ffee573412b
     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  

mercurial