[xmlsec] xmlsec-nss patches from Sun( 2003-07-22 )

Aleksey Sanin aleksey@aleksey.com
Wed, 23 Jul 2003 21:06:28 -0700


 From what I am reading, you want to have *context* based list of
allowed slots. I am not sure what are you requirements thus I really
don't understand what are you trying to achieve.  And I don't understand
how this list would help ( again, my example with two slots A and B
that both can do, say, RSA and DES).

AFAIK, the NSS determines the slot for performing particular crypto
operation by looking at the key (i.e. key has pointer to slot and if
I want to do RSA encryption with *given* key then it would always
happen on the same slot).

IMHO, we have two different scenarios:
    1) Application signs or encrypts something. In this case, application
    creates (loads, etc.) keys *before* calling xmlsec function. Then
    xmlsec selects the key and perform crypto operation on the slot
    specified by the key. I don't see any problem here because application
    may select any slot for particular key, add the key to keys manager
    and everything would work fine today.

    2) Application decrypts data or verifies signature. In this case it 
is possible
    that application creates key in advance (and selects it for 
performing operation
    by key name, etc.) or it needs to adopt key dynamicaly (for example, 
extracts
    from x509 cert, decrypts encrypted session key, etc.). The situation 
when
    key is created by application in advance is not different from case 
1). It would
    work as desired with current code. The situation with "dynamicaly 
loaded key" is
    different and this is the case when we use PK11_GetBestSlot()) 
function today.

 From now on lets talk only about the second case: using "dynamic" keys
created/loaded while application is processing *current* signature or 
encrypted
data.

 > And this case: based on thr first, your application wants to use slot 
A for RSA
 > encryption and slot B for DSA signatures in a wile, in another wile 
slot a for
 > DSA encryption and slot B for RSA signature is required.

My solution with mapping algorithm-->slot works here. The only thing it 
misses is
the multithreading case when apps wants to use different slots in 
different way
in two threads. The only solution I can suggest for this is that the map 
algorithm-->slot
is changed from global to be xmlSecNssKeysManager specific.

 >  Think about another cases: Slot A and B both support RSA encrytion, 
 > an operation want to transport a RSA key ( in A ) with another RSA 
key( in B ),
 > which is a very common case in key management  system.

I don't think that I want to solve a problem when application wants to 
perform
two, say, RSA encryptions one after another while processing *one* 
<enc:EncryptedData/>
node (for example, one RSA session key encrypts data and another RSA key
encrypts RSA session key in key transport). And application wants to do 
these
two RSA decryptions on *different* slots. IMHO, this is a corner case.


I think this discussion goes wild :) I don't understand the benefits of 
using slots list
instead of alg->slot map. But since nobody else besides you wants this 
feature,
I would not object if your patch will do whatever works best for you 
with one
restriction: "by default" (i.e. if application does nothing) the code 
should just
simply call GetBestSlot. Thus your changes would not affect others. Also 
it would be
great to have this limited to xmlSecKeysManager (i.e. no global static 
objects/variables).

Hope this would work for you :)

Aleksey