SistriForum - Il social network italiano sui rifiuti
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.
Ultimi argomenti attivi
» quiz esame ADR 2023
Da massimilianom Oggi alle 8:50 am

» MUD 2024 quando si farà?
Da fabiodafirenze Mer Mar 13, 2024 5:52 pm

» abbandono rifiuti all'interno di manufatti
Da marcos79 Dom Mar 10, 2024 3:51 pm

» Abbandono rifiuti su suolo pubblico
Da marcos79 Dom Mar 10, 2024 3:24 pm

» Relazione annuale consulente ADR
Da tfrab Lun Mar 04, 2024 3:10 pm

» Tassa di concessione governativa: va pagata per ciscuna categoria di iscrizione all'Albo
Da urgada Gio Feb 29, 2024 12:39 pm

» ADR - esenzione nomina consulente per sedi operative
Da tfrab Mer Feb 28, 2024 12:44 pm

» Dubbio Registro per Trasporto Organizzato da
Da GiulioHD650 Lun Feb 26, 2024 1:42 pm

» Prescrizioni trasporto UN 3166
Da gam66 Lun Feb 26, 2024 1:17 pm

» Trasporto serbatoio vuoti
Da Transporter Lun Gen 29, 2024 11:30 pm


EasySign.dll - Passare il nome utente

4 partecipanti

Andare in basso

EasySign.dll - Passare il nome utente Empty EasySign.dll - Passare il nome utente

Messaggio  Input 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

Input
Input
Utente Attivo

Messaggi : 76
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

EasySign.dll - Passare il nome utente Empty Re: EasySign.dll - Passare il nome utente

Messaggio  fabiodafirenze 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
fabiodafirenze
fabiodafirenze
Utente Attivo

Messaggi : 416
Data d'iscrizione : 20.01.10

Torna in alto Andare in basso

EasySign.dll - Passare il nome utente Empty Re: EasySign.dll - Passare il nome utente

Messaggio  Input 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
Input
Input
Utente Attivo

Messaggi : 76
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

EasySign.dll - Passare il nome utente Empty Re: EasySign.dll - Passare il nome utente

Messaggio  riccardock 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.


riccardock
riccardock
Membro della community

Messaggi : 33
Data d'iscrizione : 08.11.13

Torna in alto Andare in basso

EasySign.dll - Passare il nome utente Empty Re: EasySign.dll - Passare il nome utente

Messaggio  Input 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
Input
Input
Utente Attivo

Messaggi : 76
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

EasySign.dll - Passare il nome utente Empty aiuttto

Messaggio  rensy78 Mar Gen 26, 2016 5:27 pm

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

Messaggi : 4
Data d'iscrizione : 07.06.12

Torna in alto Andare in basso

EasySign.dll - Passare il nome utente Empty Re: EasySign.dll - Passare il nome utente

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

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