EasySign.dll - Passare il nome utente

Andare in basso

EasySign.dll - Passare il nome utente

Messaggio  Input il Lun Ott 13, 2014 5:04 pm

Buongiorno a tutti.

A qualcuno risulta che sia possibile passare come parametro alla funzione EasySign della libreria EasySign.dll anche il nome utente oltre al codice PIN??
Nei dispositivi multiutente passando il solo PIN compare sempre la mascherina che chiede il nome utente a differenza di quanto avviene nell'ambiente operativo con la funzione di memorizzazione del PIN attiva :-(

Grazie
Input

avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

Re: EasySign.dll - Passare il nome utente

Messaggio  fabiodafirenze il Lun Ott 13, 2014 8:33 pm

è un limite non eliminabile dei token multiutente: al massimo si può cercare di 'compilare' automaticamente la mascherina con funzioni tipo sendkeys o mettere l'identity nella clipboard per facilitare la vita all'uente
avatar
fabiodafirenze
Utente Attivo

Messaggi : 355
Data d'iscrizione : 20.01.10

Torna in alto Andare in basso

Re: EasySign.dll - Passare il nome utente

Messaggio  Input il Gio Ott 16, 2014 1:41 pm

Beh però penso sia un limite della DLL attuale... basterebbe poter passare alla funzione di firma oltre al PIN anche il nome utente o no?

Speriamo facciamo un aggiornamento della DLL anche in tal senso..

Grazie,
ciao
avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

Re: EasySign.dll - Passare il nome utente

Messaggio  riccardock il Lun Ott 20, 2014 11:37 pm

Si può utilizzare la funzione di cache della Identity della libreria SoftTokenEngine.

Nell'ultima versione della libreria pubblicata (quella presente nelle chiavette col software aggiornato) è presente una nuova funzione che si chiama "request_cache_user":

c:\>dumpbin /exports SoftTokenEngine.dll

[...]
84 50 0000BC70 request_cache_user
[...]

Dovrebbe essere quella che utilizza il software del token USB per memorizzare l'identity inserita. Non mi risulta che sia documentata ma è possibile comunque utilizzarla.

Normalmente è un po' complicato ricavare informazioni unicamente dalla tabella di esportazione della DLL (mancano tipo e numero dei parametri e del valore di ritorno delle funzioni), ma disassemblando il codice di quella funzione si ottiene questo:

c:\>dumpbin /disasm SoftTokenEngine.dll

[...]
10000000 image base (10000000 to 10291FFF)
[...]
1000BC70: mov eax,dword ptr [esp+4]
1000BC74: mov dword ptr ds:[10284C9Ch],eax
1000BC79: test eax,eax
1000BC7B: jne 1000BC87
1000BC7D: mov dword ptr ds:[100A47A8h],0FFFFFFFFh
1000BC87: ret
[...]

Questo codice corrisponde alla versione compilata (così a occhio direi con GCC) di qualcosa che in C si potrebbe rappresentare con:

// [---]
int bCacheIdentity = 0;
int bQualcosAltro = 0;

void request_cache_user (int bVal) {
bCacheIdentity = bVal;

if (!bVal) {
bQualcosAltro = -1;
}
}
// [---]

In pratica ciò che fa questa funzione è assegnare ad un intero del segmento .data dell'immagine in memoria della libreria (in pratica una variabile globale alla DLL) il valore che ottiene come parametro, presumibilmente interpretato come booleano. Se si invoca la funzione passando un valore diverso da 0 come parametro (ossia un boolean a true), l'identity non viene richiesta successivamente alla prima invocazione della funzione di firma (più precisamente all'invocazione della funzione C_Login dell'interfaccia PKCS11). Questo ovviamente è vero finché la libreria non viene scaricata, con invocazione esplicita o perché il processo che effettua la firma termina.

Per invocare la funzione in ambienti bytecoded (.NET, Java) non è possibile utilizzare le funzioni di importazioni solite (P/Invoke, JNA) perché la libreria SoftTokenEngine non funziona se caricata al di fuori del token USB, bisogna caricare la libreria dinamicamente con la funzione di sistema (in win32 "LoadLibrary"), cercare un puntatore alla funzione ("GetProcAddress"), e farne il cast ad un function pointer opportunamente tipizzato. In .NET:

[...]
[DllImport ("kernel32", CharSet = CharSet.Ansi)]
internal static extern IntPtr GetProcAddress (IntPtr hModule, string lpProcName);

[DllImport ("kernel32")]
internal static extern IntPtr LoadLibrary (string lpLibFileName);

delegate void fpt_request_cache_user (int bVal);

static void Init (string modulePath) {
IntPtr ptrDll;

if ((ptrDll = KernelUtil.LoadLibrary (modulePath)) == IntPtr.Zero) {
throw new Exception ("Non trovo la libreria: " + modulePath);
}

IntPtr procAddress = KernelUtil.GetProcAddress (ptrDll, "request_cache_user");
if (procAddress != IntPtr.Zero) {
fpt_request_cache_user fpRequestCacheUser = (fpt_request_cache_user) Marshal.GetDelegateForFunctionPointer (procAddress, typeof (fpt_request_cache_user));

fpRequestCacheUser (1);
}
}
[...]

Questa cosa funziona bene se si usa l'interfaccia PKCS11, e dovrebbe funzionare anche con la EasySign.dll (che però non ho mai usato).

Il nome utente non può essere passato alla funzione di firma di EasySign, perché questa usa l'interfaccia dello standard PKCS11 implementata dal SoftTokenEngine, e la dialog di richiesta dell'Identity proviene proprio dalla funzione C_Login dell'interfaccia PKCS11, la cui signature non può essere modificata se si vuole rimanere compatibili allo standard.

Potrebbero aggiungere un parametro alla funzione di firma EasySign (e magari documentare la funzione di cui sopra), magari lo faranno nella nuova versione, ammesso che ne escano ancora di nuove.


avatar
riccardock
Membro della community

Messaggi : 33
Data d'iscrizione : 08.11.13

Torna in alto Andare in basso

Re: EasySign.dll - Passare il nome utente

Messaggio  Input il Mer Ott 22, 2014 10:52 am

riccardock ha scritto:Potrebbero aggiungere un parametro alla funzione di firma EasySign (e magari documentare la funzione di cui sopra), magari lo faranno nella nuova versione, ammesso che ne escano ancora di nuove.



Spero proprio che aggiungano il parametro in più da passare alla funzione della EasySign...

Ti ringrazio per l'aiuto.

Ciao
avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

aiuttto

Messaggio  rensy78 il Mar Gen 26, 2016 5:27 pm

Qualcuno è riuscito a risolvere il problema???
avatar
rensy78
Nuovo Utente

Messaggi : 4
Data d'iscrizione : 07.06.12

Torna in alto Andare in basso

Re: EasySign.dll - Passare il nome utente

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum