[ 
http://issues.apache.org/jira/browse/DERBY-788?page=comments#action_12366386 ] 

Sunitha Kambhampati commented on DERBY-788:
-------------------------------------------

Since the test is testing the codepath when encryptionKey attribute is used, 
changing the test so it passes with the JCE provider on Solaris 
(SunPCKS11-Solaris) should be ok and I think this is what we should do ( either 
implement 1 or 2)

1) change test to either use DES with 8byte encryptionKey 
2) change test to use AES algorithm with 16byte encryptionKey provided AES 
support is available with the PCKS11-Solaris. 

That should solve the test failure issue and we would still be testing this 
case for encryptionKey. 

Just as an fyi , I tried the first connection url with AES and it works ok with 
the Sun JCE with jdk 142 on windows. 

=====================
That said, I think it is interesting that we cant expect the translateKey to 
always translate the key for us. 

I found this in the java api for SecretKeySpec.
public SecretKeySpec(byte[] key,
                     String algorithm)Constructs a secret key from the given 
byte array. 
This constructor does not check if the given bytes indeed specify a secret key 
of the specified algorithm. For example, if the algorithm is DES, this 
constructor does not check if key is 8 bytes long, and also does not check for 
weak or semi-weak keys. In order for those checks to be performed, an 
algorithm-specific key specification class (in this case: DESKeySpec) should be 
used. 

In derby code, there is 
        // Since the key may be a series of bytes generated by an arbitary means
        // we need to translate it into a key suitable for the algorithm.
        secretKey = skf.translateKey(new SecretKeySpec(secretKey.getEncoded(), 
secretKey.getAlgorithm()));

I think you are right  about - that we cannot assume that invalid key checks 
would not happen with the call. I looked at the Java api for 1.4.2 but I didnt 
find any AES specific KeySpec but found for others like DES and DESede. 

I think we should open another jira so we can record what we learnt here so we 
can improve this.

Thanks Kristian for your analysis and following up on this jira. 


> 'store/encryptionKey.sql' fails on Solaris 10
> ---------------------------------------------
>
>          Key: DERBY-788
>          URL: http://issues.apache.org/jira/browse/DERBY-788
>      Project: Derby
>         Type: Bug
>   Components: Services, Test, Regression Test Failure
>     Versions: 10.0.2.1, 10.1.1.2, 10.1.2.1
>  Environment: Solaris 10 (generic hardware)
> Sun JDK 5.0 with the 'SunPCKS11-Solaris' Java Security provider
>     Reporter: Kristian Waagan
>     Priority: Minor
>      Fix For: 10.2.0.0

>
> The 'store/encryptionKey.sql' test fails on Solaris 10.
> Investigation revealed that the failure is caused by a difference in behavior 
> between the 'SunPCKS11-Solaris' provider and other providers (tested with 
> 'SunJCE' and 'IBMJCE').
> The initialization of the DES cipher fails because the 16 byte key (specified 
> in the test) is not translated to a 8 byte DES key by 
> SecretKeyFactory.translateKey(). This might be a bug in the provider (I don't 
> know the spec). Enquiries are being made.
> The exception is being thrown from the constructor of 
> 'impl.services.jce.JCECipherProvider'.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to